From c50e0cc752b6ad0fd3ca960187e7a31d9248e71b Mon Sep 17 00:00:00 2001 From: Julian Smart Date: Thu, 24 Sep 2009 13:08:48 +0000 Subject: [PATCH] Applied part of #9115 (STC sample cleanup) by troelsk git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62073 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/stc/defsext.h | 1 + samples/stc/prefs.cpp | 2 +- samples/stc/stctest.cpp | 145 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 1 deletion(-) diff --git a/samples/stc/defsext.h b/samples/stc/defsext.h index ec8391c423..40eb522afe 100644 --- a/samples/stc/defsext.h +++ b/samples/stc/defsext.h @@ -73,6 +73,7 @@ enum { myID_PAGEPREV, myID_PAGENEXT, myID_SELECTLINE, + myID_WINDOW_MINIMAL, // other IDs myID_STATUSBAR, diff --git a/samples/stc/prefs.cpp b/samples/stc/prefs.cpp index 96ce8c49e2..294b3687c9 100644 --- a/samples/stc/prefs.cpp +++ b/samples/stc/prefs.cpp @@ -230,7 +230,7 @@ const StyleInfo g_StylePrefs [] = { // mySTC_TYPE_WORD2 {wxT("Keyword2"), - wxT("DARK BLUE"), wxT("WHITE"), + wxT("MIDNIGHT BLUE"), wxT("WHITE"), wxT(""), 10, 0, 0}, // mySTC_TYPE_WORD3 diff --git a/samples/stc/stctest.cpp b/samples/stc/stctest.cpp index 8e4093a93e..a8961ae5c8 100644 --- a/samples/stc/stctest.cpp +++ b/samples/stc/stctest.cpp @@ -106,6 +106,10 @@ private: //! frame window AppFrame* m_frame; + wxFrame* MinimalEditor(); +protected: + void OnMinimalEditor(wxCommandEvent&); + DECLARE_EVENT_TABLE() }; // created dynamically by wxWidgets @@ -193,6 +197,11 @@ private: IMPLEMENT_APP (App) + +BEGIN_EVENT_TABLE(App, wxApp) +EVT_MENU(myID_WINDOW_MINIMAL, App::OnMinimalEditor) +END_EVENT_TABLE() + //---------------------------------------------------------------------------- // App //---------------------------------------------------------------------------- @@ -564,6 +573,7 @@ void AppFrame::CreateMenu () 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; @@ -686,3 +696,138 @@ void AppAbout::OnTimerEvent (wxTimerEvent &WXUNUSED(event)) { m_timer = NULL; 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( + "\n" + " \n" + " This is xml with syntax highlighting, line numbers, folding, word wrap and context menu\n" + " \n" + "" + ); + } +}; + +wxFrame* App::MinimalEditor() +{ + MinimalEditorFrame* frame = new MinimalEditorFrame; + frame->Show(); + return frame; +} + +void App::OnMinimalEditor(wxCommandEvent& WXUNUSED(event)) +{ + MinimalEditor(); +} +