//////////////////////////////////////////////////////////////////////////////
-// File: stctest.cpp
+// File: contrib/samples/stc/stctest.cpp
// Purpose: STC test application
// Maintainer: Otto Wyss
// Created: 2003-09-01
// headers
//----------------------------------------------------------------------------
-// For compilers that support precompilation, includes <wx/wx.h>.
-#include <wx/wxprec.h>
+// For compilers that support precompilation, includes "wx/wx.h".
+#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#include "edit.h" // Edit module
#include "prefs.h" // Prefs
-
//----------------------------------------------------------------------------
// resources
//----------------------------------------------------------------------------
// the application icon (under Windows and OS/2 it is in resources)
-#if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
- #include "mondrian.xpm"
+#if !defined(__WXMSW__) && !defined(__WXPM__)
+ #include "../sample.xpm"
#endif
//============================================================================
// declarations
//============================================================================
-#define APP_NAME _T("STC-Test")
+#define APP_NAME wxT("STC-Test")
#define APP_DESCR _("See http://wxguide.sourceforge.net/")
-#define APP_MAINT _T("Otto Wyss")
-#define APP_VENDOR _T("wxWidgets")
-#define APP_COPYRIGTH _T("(C) 2003 Otto Wyss")
-#define APP_LICENCE _T("wxWidgets")
+#define APP_MAINT wxT("Otto Wyss")
+#define APP_VENDOR wxT("wxWidgets")
+#define APP_COPYRIGTH wxT("(C) 2003 Otto Wyss")
+#define APP_LICENCE wxT("wxWidgets")
-#define APP_VERSION _T("0.1.alpha")
+#define APP_VERSION wxT("0.1.alpha")
#define APP_BUILD __DATE__
-#define APP_WEBSITE _T("http://www.wxWidgets.org")
-#define APP_MAIL _T("mailto://???")
+#define APP_WEBSITE wxT("http://www.wxWidgets.org")
+#define APP_MAIL wxT("mailto://???")
#define NONAME _("<untitled>")
#endif // wxUSE_PRINTING_ARCHITECTURE
+class AppFrame;
+
//----------------------------------------------------------------------------
//! application APP_VENDOR-APP_NAME.
class App: public wxApp {
//! frame window
AppFrame* m_frame;
+ wxFrame* MinimalEditor();
+protected:
+ void OnMinimalEditor(wxCommandEvent&);
+ DECLARE_EVENT_TABLE()
};
// created dynamically by wxWidgets
IMPLEMENT_APP (App)
+
+BEGIN_EVENT_TABLE(App, wxApp)
+EVT_MENU(myID_WINDOW_MINIMAL, App::OnMinimalEditor)
+END_EVENT_TABLE()
+
//----------------------------------------------------------------------------
// App
//----------------------------------------------------------------------------
SetVendorName (APP_VENDOR);
g_appname = new wxString ();
g_appname->Append (APP_VENDOR);
- g_appname->Append (_T("-"));
+ g_appname->Append (wxT("-"));
g_appname->Append (APP_NAME);
#if wxUSE_PRINTING_ARCHITECTURE
// open application frame
m_frame->Layout ();
m_frame->Show (true);
- SetTopWindow (m_frame);
return true;
}
AppFrame::AppFrame (const wxString &title)
: wxFrame ((wxFrame *)NULL, wxID_ANY, title, wxDefaultPosition, wxSize(750,550),
- wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) {
+ wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE)
+{
+ SetIcon(wxICON(sample));
- // intitialize important variables
+ // initialize important variables
m_edit = NULL;
// set icon and background
SetTitle (*g_appname);
- SetIcon (wxICON (mondrian));
- SetBackgroundColour (_T("WHITE"));
+ SetBackgroundColour (wxT("WHITE"));
// about box shown for 1 seconds
AppAbout dlg(this, 1000);
m_edit = new Edit (this, wxID_ANY);
m_edit->SetFocus();
- FileOpen (_T("stctest.cpp"));
+ FileOpen (wxT("stctest.cpp"));
}
AppFrame::~AppFrame () {
if (!m_edit) return;
#if wxUSE_FILEDLG
wxString fname;
- wxFileDialog dlg (this, _T("Open file"), wxEmptyString, wxEmptyString, _T("Any file (*)|*"),
- wxOPEN | wxFILE_MUST_EXIST | wxCHANGE_DIR);
+ wxFileDialog dlg (this, wxT("Open file"), wxEmptyString, wxEmptyString, wxT("Any file (*)|*"),
+ wxFD_OPEN | wxFD_FILE_MUST_EXIST | wxFD_CHANGE_DIR);
if (dlg.ShowModal() != wxID_OK) return;
fname = dlg.GetPath ();
FileOpen (fname);
if (!m_edit) return;
#if wxUSE_FILEDLG
wxString filename = wxEmptyString;
- wxFileDialog dlg (this, _T("Save file"), wxEmptyString, wxEmptyString, _T("Any file (*)|*"), wxSAVE|wxOVERWRITE_PROMPT);
+ wxFileDialog dlg (this, wxT("Save file"), wxEmptyString, wxEmptyString, wxT("Any file (*)|*"), wxFD_SAVE|wxFD_OVERWRITE_PROMPT);
if (dlg.ShowModal() != wxID_OK) return;
filename = dlg.GetPath();
m_edit->SaveFile (filename);
new wxPrintPreview (new EditPrint (m_edit),
new EditPrint (m_edit),
&printDialogData);
- if (!preview->Ok()) {
+ if (!preview->IsOk()) {
delete preview;
wxMessageBox (_("There was a problem with previewing.\n\
Perhaps your current printer is not correctly?"),
// edit events
void AppFrame::OnEdit (wxCommandEvent &event) {
- if (m_edit) m_edit->ProcessEvent (event);
+ if (m_edit) m_edit->GetEventHandler()->ProcessEvent (event);
}
// private functions
menuEdit->Enable (myID_GOTO, false);
menuEdit->AppendSeparator();
menuEdit->Append (myID_INDENTINC, _("&Indent increase\tTab"));
- menuEdit->Append (myID_INDENTRED, _("I&ndent reduce\tBksp"));
+ menuEdit->Append (myID_INDENTRED, _("I&ndent reduce\tShift+Tab"));
menuEdit->AppendSeparator();
menuEdit->Append (wxID_SELECTALL, _("&Select all\tCtrl+A"));
menuEdit->Append (myID_SELECTLINE, _("Select &line\tCtrl+L"));
wxMenu *menuWindow = new wxMenu;
menuWindow->Append (myID_PAGEPREV, _("&Previous\tCtrl+Shift+Tab"));
menuWindow->Append (myID_PAGENEXT, _("&Next\tCtrl+Tab"));
+ menuWindow->Append(myID_WINDOW_MINIMAL, _("&Minimal editor"));
// Help menu
wxMenu *menuHelp = new wxMenu;
// about icontitle//info
wxBoxSizer *aboutpane = new wxBoxSizer (wxHORIZONTAL);
- wxBitmap bitmap = wxBitmap(wxICON (mondrian));
+ wxBitmap bitmap = wxBitmap(wxICON (sample));
aboutpane->Add (new wxStaticBitmap (this, wxID_ANY, bitmap),
0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 20);
aboutpane->Add (aboutinfo, 1, wxEXPAND);
}
AppAbout::~AppAbout () {
- if (m_timer) {
- delete m_timer;
- m_timer = NULL;
- }
+ wxDELETE(m_timer);
}
//----------------------------------------------------------------------------
// event handlers
void AppAbout::OnTimerEvent (wxTimerEvent &WXUNUSED(event)) {
- if (m_timer) delete m_timer;
- m_timer = NULL;
+ wxDELETE(m_timer);
EndModal (wxID_OK);
}
+
+/////////////////////////////////////////////////////////////////////////////
+// Minimal editor added by Troels K 2008-04-08
+// Thanks to geralds for SetLexerXml() - http://wxforum.shadonet.com/viewtopic.php?t=7155
+
+class MinimalEditor : public wxStyledTextCtrl
+{
+ enum
+ {
+ margin_id_lineno,
+ margin_id_fold,
+ };
+
+public:
+ MinimalEditor(wxWindow* parent, wxWindowID id = wxID_ANY) : wxStyledTextCtrl(parent, id)
+ {
+ SetLexerXml();
+
+ SetProperty(wxT("fold"), wxT("1"));
+ SetProperty(wxT("fold.comment"), wxT("1"));
+ SetProperty(wxT("fold.compact"), wxT("1"));
+ SetProperty(wxT("fold.preprocessor"), wxT("1"));
+ SetProperty(wxT("fold.html"), wxT("1"));
+ SetProperty(wxT("fold.html.preprocessor"), wxT("1"));
+
+ SetMarginType(margin_id_lineno, wxSTC_MARGIN_NUMBER);
+ SetMarginWidth(margin_id_lineno, 32);
+
+ MarkerDefine(wxSTC_MARKNUM_FOLDER, wxSTC_MARK_BOXPLUS, wxT("WHITE"), wxT("BLACK"));
+ MarkerDefine(wxSTC_MARKNUM_FOLDEROPEN, wxSTC_MARK_BOXMINUS, wxT("WHITE"), wxT("BLACK"));
+ MarkerDefine(wxSTC_MARKNUM_FOLDERSUB, wxSTC_MARK_VLINE, wxT("WHITE"), wxT("BLACK"));
+ MarkerDefine(wxSTC_MARKNUM_FOLDEREND, wxSTC_MARK_BOXPLUSCONNECTED, wxT("WHITE"), wxT("BLACK"));
+ MarkerDefine(wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_BOXMINUSCONNECTED, wxT("WHITE"), wxT("BLACK"));
+ MarkerDefine(wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_TCORNER, wxT("WHITE"), wxT("BLACK"));
+ MarkerDefine(wxSTC_MARKNUM_FOLDERTAIL, wxSTC_MARK_LCORNER, wxT("WHITE"), wxT("BLACK"));
+
+ SetMarginMask(margin_id_fold, wxSTC_MASK_FOLDERS);
+ SetMarginWidth(margin_id_fold, 32);
+ SetMarginSensitive(margin_id_fold, true);
+
+ SetFoldFlags(wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED | wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED);
+
+ SetTabWidth(4);
+ SetUseTabs(false);
+ SetWrapMode(wxSTC_WRAP_WORD);
+ SetWrapVisualFlags(wxSTC_WRAPVISUALFLAG_END);
+ }
+ virtual bool SetFont(const wxFont& font)
+ {
+ StyleSetFont(wxSTC_STYLE_DEFAULT, (wxFont&)font);
+ return wxStyledTextCtrl::SetFont(font);
+ }
+ void SetLexerXml()
+ {
+ SetLexer(wxSTC_LEX_XML);
+ StyleSetForeground(wxSTC_H_DEFAULT, *wxBLACK);
+ StyleSetForeground(wxSTC_H_TAG, *wxBLUE);
+ StyleSetForeground(wxSTC_H_TAGUNKNOWN, *wxBLUE);
+ StyleSetForeground(wxSTC_H_ATTRIBUTE, *wxRED);
+ StyleSetForeground(wxSTC_H_ATTRIBUTEUNKNOWN, *wxRED);
+ StyleSetBold(wxSTC_H_ATTRIBUTEUNKNOWN, true);
+ StyleSetForeground(wxSTC_H_NUMBER, *wxBLACK);
+ StyleSetForeground(wxSTC_H_DOUBLESTRING, *wxBLACK);
+ StyleSetForeground(wxSTC_H_SINGLESTRING, *wxBLACK);
+ StyleSetForeground(wxSTC_H_OTHER, *wxBLUE);
+ StyleSetForeground(wxSTC_H_COMMENT, wxTheColourDatabase->Find(wxT("GREY")));
+ StyleSetForeground(wxSTC_H_ENTITY, *wxRED);
+ StyleSetBold(wxSTC_H_ENTITY, true);
+ StyleSetForeground(wxSTC_H_TAGEND, *wxBLUE);
+ StyleSetForeground(wxSTC_H_XMLSTART, *wxBLUE);
+ StyleSetForeground(wxSTC_H_XMLEND, *wxBLUE);
+ StyleSetForeground(wxSTC_H_CDATA, *wxRED);
+ }
+protected:
+ void OnMarginClick(wxStyledTextEvent&);
+ void OnText(wxStyledTextEvent&);
+ DECLARE_EVENT_TABLE()
+};
+
+BEGIN_EVENT_TABLE(MinimalEditor, wxStyledTextCtrl)
+ EVT_STC_MARGINCLICK(wxID_ANY, MinimalEditor::OnMarginClick)
+ EVT_STC_CHANGE(wxID_ANY, MinimalEditor::OnText)
+END_EVENT_TABLE()
+
+void MinimalEditor::OnMarginClick(wxStyledTextEvent &event)
+{
+ if (event.GetMargin() == margin_id_fold)
+ {
+ int lineClick = LineFromPosition(event.GetPosition());
+ int levelClick = GetFoldLevel(lineClick);
+ if ((levelClick & wxSTC_FOLDLEVELHEADERFLAG) > 0)
+ {
+ ToggleFold(lineClick);
+ }
+ }
+}
+
+void MinimalEditor::OnText(wxStyledTextEvent& event)
+{
+ wxLogDebug(wxT("Modified"));
+ event.Skip();
+}
+
+class MinimalEditorFrame : public wxFrame
+{
+public:
+ MinimalEditorFrame() : wxFrame(NULL, wxID_ANY, _("Minimal Editor"))
+ {
+ MinimalEditor* editor = new MinimalEditor(this);
+ editor->SetFont(wxSystemSettings::GetFont(wxSYS_ANSI_FIXED_FONT));
+ wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
+ sizer->Add(editor, 1, wxEXPAND);
+ SetSizer(sizer);
+ editor->SetText(
+ "<xml>\n"
+ " <text>\n"
+ " This is xml with syntax highlighting, line numbers, folding, word wrap and context menu\n"
+ " </text>\n"
+ "</xml>"
+ );
+ }
+};
+
+wxFrame* App::MinimalEditor()
+{
+ MinimalEditorFrame* frame = new MinimalEditorFrame;
+ frame->Show();
+ return frame;
+}
+
+void App::OnMinimalEditor(wxCommandEvent& WXUNUSED(event))
+{
+ MinimalEditor();
+}
+