#include "wx/stc/stc.h"
#include "ScintillaWX.h"
+#include <wx/wx.h>
#include <wx/tokenzr.h>
+#include <wx/mstream.h>
+#include <wx/image.h>
+#include <wx/file.h>
//----------------------------------------------------------------------
DEFINE_EVENT_TYPE( wxEVT_STC_DRAG_OVER )
DEFINE_EVENT_TYPE( wxEVT_STC_DO_DROP )
DEFINE_EVENT_TYPE( wxEVT_STC_ZOOM )
+DEFINE_EVENT_TYPE( wxEVT_STC_HOTSPOT_CLICK )
+DEFINE_EVENT_TYPE( wxEVT_STC_HOTSPOT_DCLICK )
+DEFINE_EVENT_TYPE( wxEVT_STC_CALLTIP_CLICK )
+
BEGIN_EVENT_TABLE(wxStyledTextCtrl, wxControl)
const wxPoint& pos,
const wxSize& size,
long style,
- const wxString& name) :
- wxControl(parent, id, pos, size,
- style | wxVSCROLL | wxHSCROLL | wxWANTS_CHARS | wxCLIP_CHILDREN,
- wxDefaultValidator, name)
+ const wxString& name)
+{
+ m_swx = NULL;
+ Create(parent, id, pos, size, style, name);
+}
+
+
+void wxStyledTextCtrl::Create(wxWindow *parent,
+ wxWindowID id,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxString& name)
{
+ wxControl::Create(parent, id, pos, size,
+ style | wxVSCROLL | wxHSCROLL | wxWANTS_CHARS | wxCLIP_CHILDREN,
+ wxDefaultValidator, name);
+
#ifdef LINK_LEXERS
Scintilla_LinkLexers();
#endif
// Set style size, face, bold, italic, and underline attributes from
// a wxFont's attributes.
void wxStyledTextCtrl::StyleSetFont(int styleNum, wxFont& font) {
+#ifdef __WXGTK__
+ // Ensure that the native font is initialized
+ int x, y;
+ GetTextExtent(wxT("X"), &x, &y, NULL, NULL, &font);
+#endif
int size = font.GetPointSize();
wxString faceName = font.GetFaceName();
bool bold = font.GetWeight() == wxBOLD;
}
+bool wxStyledTextCtrl::SaveFile(const wxString& filename)
+{
+ wxFile file(filename, wxFile::write);
+
+ if (!file.IsOpened())
+ return FALSE;
+
+ bool success = file.Write(GetText(), *wxConvCurrent);
+
+ if (success)
+ SetSavePoint();
+
+ return success;
+}
+
+bool wxStyledTextCtrl::LoadFile(const wxString& filename)
+{
+ bool success = false;
+ wxFile file(filename, wxFile::read);
+
+ if (file.IsOpened())
+ {
+ wxString contents;
+ off_t len = file.Length();
+ if (len > 0)
+ {
+#if wxUSE_UNICODE
+ wxMemoryBuffer buffer(len);
+ success = (file.Read(buffer.GetData(), len) == len);
+ contents = wxString(buffer, *wxConvCurrent);
+#else
+ wxString buffer;
+ success = (file.Read(wxStringBuffer(buffer, len), len) == len);
+ contents = buffer;
+#endif
+ }
+ else
+ success = true; // empty file is ok
+
+ if (success)
+ {
+ SetText(contents);
+ EmptyUndoBuffer();
+ SetSavePoint();
+ }
+ }
+
+ return success;
+}
+
+
+#if wxUSE_DRAG_AND_DROP
+wxDragResult wxStyledTextCtrl::DoDragOver(wxCoord x, wxCoord y, wxDragResult def) {
+ return m_swx->DoDragOver(x, y, def);
+}
+
+
+bool wxStyledTextCtrl::DoDropText(long x, long y, const wxString& data) {
+ return m_swx->DoDropText(x, y, data);
+}
+#endif
+
//----------------------------------------------------------------------
// Event handlers
-void wxStyledTextCtrl::OnPaint(wxPaintEvent& evt) {
+void wxStyledTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(evt)) {
wxPaintDC dc(this);
- wxRegion region = GetUpdateRegion();
-
- m_swx->DoPaint(&dc, region.GetBox());
+ m_swx->DoPaint(&dc, GetUpdateRegion().GetBox());
}
void wxStyledTextCtrl::OnScrollWin(wxScrollWinEvent& evt) {
}
}
-void wxStyledTextCtrl::OnSize(wxSizeEvent& evt) {
- wxSize sz = GetClientSize();
- m_swx->DoSize(sz.x, sz.y);
+void wxStyledTextCtrl::OnSize(wxSizeEvent& WXUNUSED(evt)) {
+ if (m_swx) {
+ wxSize sz = GetClientSize();
+ m_swx->DoSize(sz.x, sz.y);
+ }
}
void wxStyledTextCtrl::OnMouseLeftDown(wxMouseEvent& evt) {
int key = evt.GetKeyCode();
bool shift = evt.ShiftDown(),
ctrl = evt.ControlDown(),
- alt = evt.AltDown();
+ alt = evt.AltDown(),
+ meta = evt.MetaDown();
- int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, &m_lastKeyDownConsumed);
+ int processed = m_swx->DoKeyDown(key, shift, ctrl, alt, meta, &m_lastKeyDownConsumed);
// printf("KeyDn key:%%d shift:%%d ctrl:%%d alt:%%d processed:%%d consumed:%%d\n",
// key, shift, ctrl, alt, processed, m_lastKeyDownConsumed);
}
-void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& WXUNUSED(evt)) {
m_swx->DoLoseFocus();
}
-void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& evt) {
+void wxStyledTextCtrl::OnGainFocus(wxFocusEvent& WXUNUSED(evt)) {
m_swx->DoGainFocus();
}
-void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& evt) {
+void wxStyledTextCtrl::OnSysColourChanged(wxSysColourChangedEvent& WXUNUSED(evt)) {
m_swx->DoSysColourChange();
}
-void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& evt) {
+void wxStyledTextCtrl::OnEraseBackground(wxEraseEvent& WXUNUSED(evt)) {
// do nothing to help avoid flashing
}
}
-void wxStyledTextCtrl::OnListBox(wxCommandEvent& evt) {
+void wxStyledTextCtrl::OnListBox(wxCommandEvent& WXUNUSED(evt)) {
m_swx->DoOnListBox();
}
evt.SetEventType(wxEVT_STC_ZOOM);
break;
+ case SCN_HOTSPOTCLICK:
+ evt.SetEventType(wxEVT_STC_HOTSPOT_CLICK);
+ break;
+
+ case SCN_HOTSPOTDOUBLECLICK:
+ evt.SetEventType(wxEVT_STC_HOTSPOT_DCLICK);
+ break;
+
+ case SCN_CALLTIPCLICK:
+ evt.SetEventType(wxEVT_STC_CALLTIP_CLICK);
+ break;
+
default:
return;
}