X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..89b3361ec25cf1e6d255b14c7633d8375646e4fb:/samples/stc/stctest.cpp diff --git a/samples/stc/stctest.cpp b/samples/stc/stctest.cpp index 8e4093a93e..8db40419ef 100644 --- a/samples/stc/stctest.cpp +++ b/samples/stc/stctest.cpp @@ -39,17 +39,13 @@ #include "edit.h" // Edit module #include "prefs.h" // Prefs -#ifndef __WXMSW__ - #include "../sample.xpm" -#endif - //---------------------------------------------------------------------------- // 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" +#ifndef wxHAS_IMAGES_IN_RESOURCES + #include "../sample.xpm" #endif //============================================================================ @@ -83,7 +79,7 @@ wxString *g_appname = NULL; //! global print data, to remember settings during the session wxPrintData *g_printData = (wxPrintData*) NULL; -wxPageSetupData *g_pageSetupData = (wxPageSetupData*) NULL; +wxPageSetupDialogData *g_pageSetupData = (wxPageSetupDialogData*) NULL; #endif // wxUSE_PRINTING_ARCHITECTURE @@ -106,6 +102,10 @@ private: //! frame window AppFrame* m_frame; + wxFrame* MinimalEditor(); +protected: + void OnMinimalEditor(wxCommandEvent&); + DECLARE_EVENT_TABLE() }; // created dynamically by wxWidgets @@ -193,6 +193,11 @@ private: IMPLEMENT_APP (App) + +BEGIN_EVENT_TABLE(App, wxApp) +EVT_MENU(myID_WINDOW_MINIMAL, App::OnMinimalEditor) +END_EVENT_TABLE() + //---------------------------------------------------------------------------- // App //---------------------------------------------------------------------------- @@ -221,7 +226,6 @@ bool App::OnInit () { // open application frame m_frame->Layout (); m_frame->Show (true); - SetTopWindow (m_frame); return true; } @@ -307,12 +311,11 @@ AppFrame::AppFrame (const wxString &title) { SetIcon(wxICON(sample)); - // intitialize important variables + // initialize important variables m_edit = NULL; // set icon and background SetTitle (*g_appname); - SetIcon (wxICON (mondrian)); SetBackgroundColour (wxT("WHITE")); // about box shown for 1 seconds @@ -427,7 +430,7 @@ void AppFrame::OnPrintPreview (wxCommandEvent &WXUNUSED(event)) { 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?"), @@ -564,6 +567,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; @@ -646,7 +650,7 @@ AppAbout::AppAbout (wxWindow *parent, // 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); @@ -673,16 +677,147 @@ AppAbout::AppAbout (wxWindow *parent, } 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( + "\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(); +} +