X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4ec6bd20af5fe4687964644b56fe10071da15e1..ac687ddffb6f199603abc2415f7bcf0d051f1eca:/samples/stc/stctest.cpp diff --git a/samples/stc/stctest.cpp b/samples/stc/stctest.cpp index 6275c242b7..b42bda52d8 100644 --- a/samples/stc/stctest.cpp +++ b/samples/stc/stctest.cpp @@ -3,7 +3,6 @@ // Purpose: STC test application // Maintainer: Otto Wyss // Created: 2003-09-01 -// RCS-ID: $Id$ // Copyright: (c) wxGuide // Licence: wxWindows licence ////////////////////////////////////////////////////////////////////////////// @@ -39,33 +38,32 @@ #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" +#ifndef wxHAS_IMAGES_IN_RESOURCES + #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 _("") @@ -80,11 +78,13 @@ 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 +class AppFrame; + //---------------------------------------------------------------------------- //! application APP_VENDOR-APP_NAME. class App: public wxApp { @@ -101,6 +101,10 @@ private: //! frame window AppFrame* m_frame; + wxFrame* MinimalEditor(); +protected: + void OnMinimalEditor(wxCommandEvent&); + DECLARE_EVENT_TABLE() }; // created dynamically by wxWidgets @@ -188,6 +192,11 @@ private: IMPLEMENT_APP (App) + +BEGIN_EVENT_TABLE(App, wxApp) +EVT_MENU(myID_WINDOW_MINIMAL, App::OnMinimalEditor) +END_EVENT_TABLE() + //---------------------------------------------------------------------------- // App //---------------------------------------------------------------------------- @@ -201,7 +210,7 @@ bool App::OnInit () { 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 @@ -216,7 +225,6 @@ bool App::OnInit () { // open application frame m_frame->Layout (); m_frame->Show (true); - SetTopWindow (m_frame); return true; } @@ -254,62 +262,34 @@ BEGIN_EVENT_TABLE (AppFrame, wxFrame) EVT_MENU (wxID_PREVIEW, AppFrame::OnPrintPreview) EVT_MENU (wxID_PRINT, AppFrame::OnPrint) EVT_MENU (wxID_EXIT, AppFrame::OnExit) - // edit + // Menu items with standard IDs forwarded to the editor. EVT_MENU (wxID_CLEAR, AppFrame::OnEdit) EVT_MENU (wxID_CUT, AppFrame::OnEdit) EVT_MENU (wxID_COPY, AppFrame::OnEdit) EVT_MENU (wxID_PASTE, AppFrame::OnEdit) - EVT_MENU (myID_INDENTINC, AppFrame::OnEdit) - EVT_MENU (myID_INDENTRED, AppFrame::OnEdit) EVT_MENU (wxID_SELECTALL, AppFrame::OnEdit) - EVT_MENU (myID_SELECTLINE, AppFrame::OnEdit) EVT_MENU (wxID_REDO, AppFrame::OnEdit) EVT_MENU (wxID_UNDO, AppFrame::OnEdit) - // find EVT_MENU (wxID_FIND, AppFrame::OnEdit) - EVT_MENU (myID_FINDNEXT, AppFrame::OnEdit) - EVT_MENU (myID_REPLACE, AppFrame::OnEdit) - EVT_MENU (myID_REPLACENEXT, AppFrame::OnEdit) - EVT_MENU (myID_BRACEMATCH, AppFrame::OnEdit) - EVT_MENU (myID_GOTO, AppFrame::OnEdit) - // view - EVT_MENU_RANGE (myID_HILIGHTFIRST, myID_HILIGHTLAST, + // And all our edit-related menu commands. + EVT_MENU_RANGE (myID_EDIT_FIRST, myID_EDIT_LAST, AppFrame::OnEdit) - EVT_MENU (myID_DISPLAYEOL, AppFrame::OnEdit) - EVT_MENU (myID_INDENTGUIDE, AppFrame::OnEdit) - EVT_MENU (myID_LINENUMBER, AppFrame::OnEdit) - EVT_MENU (myID_LONGLINEON, AppFrame::OnEdit) - EVT_MENU (myID_WHITESPACE, AppFrame::OnEdit) - EVT_MENU (myID_FOLDTOGGLE, AppFrame::OnEdit) - EVT_MENU (myID_OVERTYPE, AppFrame::OnEdit) - EVT_MENU (myID_READONLY, AppFrame::OnEdit) - EVT_MENU (myID_WRAPMODEON, AppFrame::OnEdit) - // extra - EVT_MENU (myID_CHANGELOWER, AppFrame::OnEdit) - EVT_MENU (myID_CHANGEUPPER, AppFrame::OnEdit) - EVT_MENU (myID_CONVERTCR, AppFrame::OnEdit) - EVT_MENU (myID_CONVERTCRLF, AppFrame::OnEdit) - EVT_MENU (myID_CONVERTLF, AppFrame::OnEdit) - EVT_MENU (myID_CHARSETANSI, AppFrame::OnEdit) - EVT_MENU (myID_CHARSETMAC, AppFrame::OnEdit) // help EVT_MENU (wxID_ABOUT, AppFrame::OnAbout) END_EVENT_TABLE () 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")); - - // about box shown for 1 seconds - AppAbout dlg(this, 1000); + SetBackgroundColour (wxT("WHITE")); // create menu m_menuBar = new wxMenuBar; @@ -319,7 +299,7 @@ AppFrame::AppFrame (const wxString &title) m_edit = new Edit (this, wxID_ANY); m_edit->SetFocus(); - FileOpen (_T("stctest.cpp")); + FileOpen (wxT("stctest.cpp")); } AppFrame::~AppFrame () { @@ -349,8 +329,8 @@ void AppFrame::OnFileOpen (wxCommandEvent &WXUNUSED(event)) { 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); @@ -371,7 +351,7 @@ void AppFrame::OnFileSaveAs (wxCommandEvent &WXUNUSED(event)) { 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); @@ -420,7 +400,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?"), @@ -455,7 +435,7 @@ void AppFrame::OnPrint (wxCommandEvent &WXUNUSED(event)) { // edit events void AppFrame::OnEdit (wxCommandEvent &event) { - if (m_edit) m_edit->ProcessEvent (event); + if (m_edit) m_edit->GetEventHandler()->ProcessEvent (event); } // private functions @@ -500,7 +480,7 @@ void AppFrame::CreateMenu () 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")); @@ -534,6 +514,20 @@ void AppFrame::CreateMenu () menuView->AppendSeparator(); menuView->Append (myID_USECHARSET, _("Use &code page of .."), menuCharset); + // Annotations menu + wxMenu* menuAnnotations = new wxMenu; + menuAnnotations->Append(myID_ANNOTATION_ADD, _("&Add or edit an annotation..."), + _("Add an annotation for the current line")); + menuAnnotations->Append(myID_ANNOTATION_REMOVE, _("&Remove annotation"), + _("Remove the annotation for the current line")); + menuAnnotations->Append(myID_ANNOTATION_CLEAR, _("&Clear all annotations")); + + wxMenu* menuAnnotationsStyle = new wxMenu; + menuAnnotationsStyle->AppendRadioItem(myID_ANNOTATION_STYLE_HIDDEN, _("&Hidden")); + menuAnnotationsStyle->AppendRadioItem(myID_ANNOTATION_STYLE_STANDARD, _("&Standard")); + menuAnnotationsStyle->AppendRadioItem(myID_ANNOTATION_STYLE_BOXED, _("&Boxed")); + menuAnnotations->AppendSubMenu(menuAnnotationsStyle, "&Style"); + // change case submenu wxMenu *menuChangeCase = new wxMenu; menuChangeCase->Append (myID_CHANGEUPPER, _("&Upper case")); @@ -557,25 +551,30 @@ 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; - menuHelp->Append (wxID_ABOUT, _("&About ..\tShift+F1")); + menuHelp->Append (wxID_ABOUT, _("&About ..\tCtrl+D")); // construct menu m_menuBar->Append (menuFile, _("&File")); m_menuBar->Append (menuEdit, _("&Edit")); m_menuBar->Append (menuView, _("&View")); + m_menuBar->Append (menuAnnotations, _("&Annotations")); m_menuBar->Append (menuExtra, _("E&xtra")); m_menuBar->Append (menuWindow, _("&Window")); m_menuBar->Append (menuHelp, _("&Help")); SetMenuBar (m_menuBar); + + m_menuBar->Check(myID_ANNOTATION_STYLE_BOXED, true); } void AppFrame::FileOpen (wxString fname) { wxFileName w(fname); w.Normalize(); fname = w.GetFullPath(); m_edit->LoadFile (fname); + m_edit->SelectNone(); } wxRect AppFrame::DeterminePrintSize () { @@ -639,7 +638,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); @@ -666,16 +665,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(); +} +