| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811 |
- //////////////////////////////////////////////////////////////////////////////
- // File: contrib/samples/stc/stctest.cpp
- // Purpose: STC test application
- // Maintainer: Otto Wyss
- // Created: 2003-09-01
- // Copyright: (c) wxGuide
- // Licence: wxWindows licence
- //////////////////////////////////////////////////////////////////////////////
- //----------------------------------------------------------------------------
- // headers
- //----------------------------------------------------------------------------
- // For compilers that support precompilation, includes "wx/wx.h".
- #include "wx/wxprec.h"
- #ifdef __BORLANDC__
- #pragma hdrstop
- #endif
- // for all others, include the necessary headers (this file is usually all you
- // need because it includes almost all 'standard' wxWidgets headers)
- #ifndef WX_PRECOMP
- #include "wx/wx.h"
- #endif
- //! wxWidgets headers
- #include "wx/config.h" // configuration support
- #include "wx/filedlg.h" // file dialog support
- #include "wx/filename.h" // filename support
- #include "wx/notebook.h" // notebook support
- #include "wx/settings.h" // system settings
- #include "wx/string.h" // strings support
- #include "wx/image.h" // images support
- //! application headers
- #include "defsext.h" // Additional definitions
- #include "edit.h" // Edit module
- #include "prefs.h" // Prefs
- //----------------------------------------------------------------------------
- // resources
- //----------------------------------------------------------------------------
- // the application icon (under Windows and OS/2 it is in resources)
- #ifndef wxHAS_IMAGES_IN_RESOURCES
- #include "../sample.xpm"
- #endif
- //============================================================================
- // declarations
- //============================================================================
- #define APP_NAME wxT("STC-Test")
- #define APP_DESCR _("See http://wxguide.sourceforge.net/")
- #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 wxT("0.1.alpha")
- #define APP_BUILD __DATE__
- #define APP_WEBSITE wxT("http://www.wxWidgets.org")
- #define APP_MAIL wxT("mailto://???")
- #define NONAME _("<untitled>")
- class AppBook;
- //----------------------------------------------------------------------------
- //! global application name
- wxString *g_appname = NULL;
- #if wxUSE_PRINTING_ARCHITECTURE
- //! global print data, to remember settings during the session
- wxPrintData *g_printData = (wxPrintData*) NULL;
- wxPageSetupDialogData *g_pageSetupData = (wxPageSetupDialogData*) NULL;
- #endif // wxUSE_PRINTING_ARCHITECTURE
- class AppFrame;
- //----------------------------------------------------------------------------
- //! application APP_VENDOR-APP_NAME.
- class App: public wxApp {
- friend class AppFrame;
- public:
- //! the main function called durning application start
- virtual bool OnInit ();
- //! application exit function
- virtual int OnExit ();
- private:
- //! frame window
- AppFrame* m_frame;
- wxFrame* MinimalEditor();
- protected:
- void OnMinimalEditor(wxCommandEvent&);
- wxDECLARE_EVENT_TABLE();
- };
- // created dynamically by wxWidgets
- DECLARE_APP (App);
- //----------------------------------------------------------------------------
- //! frame of the application APP_VENDOR-APP_NAME.
- class AppFrame: public wxFrame {
- friend class App;
- friend class AppBook;
- friend class AppAbout;
- public:
- //! constructor
- AppFrame (const wxString &title);
- //! destructor
- ~AppFrame ();
- //! event handlers
- //! common
- void OnClose (wxCloseEvent &event);
- void OnAbout (wxCommandEvent &event);
- void OnExit (wxCommandEvent &event);
- void OnTimerEvent (wxTimerEvent &event);
- //! file
- void OnFileNew (wxCommandEvent &event);
- void OnFileNewFrame (wxCommandEvent &event);
- void OnFileOpen (wxCommandEvent &event);
- void OnFileOpenFrame (wxCommandEvent &event);
- void OnFileSave (wxCommandEvent &event);
- void OnFileSaveAs (wxCommandEvent &event);
- void OnFileClose (wxCommandEvent &event);
- //! properties
- void OnProperties (wxCommandEvent &event);
- //! print
- void OnPrintSetup (wxCommandEvent &event);
- void OnPrintPreview (wxCommandEvent &event);
- void OnPrint (wxCommandEvent &event);
- //! edit events
- void OnEdit (wxCommandEvent &event);
- private:
- // edit object
- Edit *m_edit;
- void FileOpen (wxString fname);
- //! creates the application menu bar
- wxMenuBar *m_menuBar;
- void CreateMenu ();
- // print preview position and size
- wxRect DeterminePrintSize ();
- wxDECLARE_EVENT_TABLE();
- };
- //----------------------------------------------------------------------------
- //! about box of the application APP_VENDOR-APP_NAME
- class AppAbout: public wxDialog {
- public:
- //! constructor
- AppAbout (wxWindow *parent,
- int milliseconds = 0,
- long style = 0);
- //! destructor
- ~AppAbout ();
- // event handlers
- void OnTimerEvent (wxTimerEvent &event);
- private:
- // timer
- wxTimer *m_timer;
- wxDECLARE_EVENT_TABLE();
- };
- //============================================================================
- // implementation
- //============================================================================
- IMPLEMENT_APP (App)
- wxBEGIN_EVENT_TABLE(App, wxApp)
- EVT_MENU(myID_WINDOW_MINIMAL, App::OnMinimalEditor)
- wxEND_EVENT_TABLE()
- //----------------------------------------------------------------------------
- // App
- //----------------------------------------------------------------------------
- bool App::OnInit () {
- wxInitAllImageHandlers();
- // set application and vendor name
- SetAppName (APP_NAME);
- SetVendorName (APP_VENDOR);
- g_appname = new wxString ();
- g_appname->Append (APP_VENDOR);
- g_appname->Append (wxT("-"));
- g_appname->Append (APP_NAME);
- #if wxUSE_PRINTING_ARCHITECTURE
- // initialize print data and setup
- g_printData = new wxPrintData;
- g_pageSetupData = new wxPageSetupDialogData;
- #endif // wxUSE_PRINTING_ARCHITECTURE
- // create application frame
- m_frame = new AppFrame (*g_appname);
- // open application frame
- m_frame->Layout ();
- m_frame->Show (true);
- return true;
- }
- int App::OnExit () {
- // delete global appname
- delete g_appname;
- #if wxUSE_PRINTING_ARCHITECTURE
- // delete global print data and setup
- if (g_printData) delete g_printData;
- if (g_pageSetupData) delete g_pageSetupData;
- #endif // wxUSE_PRINTING_ARCHITECTURE
- return 0;
- }
- //----------------------------------------------------------------------------
- // AppFrame
- //----------------------------------------------------------------------------
- wxBEGIN_EVENT_TABLE (AppFrame, wxFrame)
- // common
- EVT_CLOSE ( AppFrame::OnClose)
- // file
- EVT_MENU (wxID_OPEN, AppFrame::OnFileOpen)
- EVT_MENU (wxID_SAVE, AppFrame::OnFileSave)
- EVT_MENU (wxID_SAVEAS, AppFrame::OnFileSaveAs)
- EVT_MENU (wxID_CLOSE, AppFrame::OnFileClose)
- // properties
- EVT_MENU (myID_PROPERTIES, AppFrame::OnProperties)
- // print and exit
- EVT_MENU (wxID_PRINT_SETUP, AppFrame::OnPrintSetup)
- EVT_MENU (wxID_PREVIEW, AppFrame::OnPrintPreview)
- EVT_MENU (wxID_PRINT, AppFrame::OnPrint)
- EVT_MENU (wxID_EXIT, AppFrame::OnExit)
- // 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 (wxID_SELECTALL, AppFrame::OnEdit)
- EVT_MENU (wxID_REDO, AppFrame::OnEdit)
- EVT_MENU (wxID_UNDO, AppFrame::OnEdit)
- EVT_MENU (wxID_FIND, AppFrame::OnEdit)
- // And all our edit-related menu commands.
- EVT_MENU_RANGE (myID_EDIT_FIRST, myID_EDIT_LAST,
- AppFrame::OnEdit)
- // help
- EVT_MENU (wxID_ABOUT, AppFrame::OnAbout)
- wxEND_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)
- {
- SetIcon(wxICON(sample));
- // initialize important variables
- m_edit = NULL;
- // set icon and background
- SetTitle (*g_appname);
- SetBackgroundColour (wxT("WHITE"));
- // create menu
- m_menuBar = new wxMenuBar;
- CreateMenu ();
- // open first page
- m_edit = new Edit (this, wxID_ANY);
- m_edit->SetFocus();
- FileOpen (wxT("stctest.cpp"));
- }
- AppFrame::~AppFrame () {
- }
- // common event handlers
- void AppFrame::OnClose (wxCloseEvent &event) {
- wxCommandEvent evt;
- OnFileClose (evt);
- if (m_edit && m_edit->Modified()) {
- if (event.CanVeto()) event.Veto (true);
- return;
- }
- Destroy();
- }
- void AppFrame::OnAbout (wxCommandEvent &WXUNUSED(event)) {
- AppAbout dlg(this);
- }
- void AppFrame::OnExit (wxCommandEvent &WXUNUSED(event)) {
- Close (true);
- }
- // file event handlers
- void AppFrame::OnFileOpen (wxCommandEvent &WXUNUSED(event)) {
- if (!m_edit) return;
- #if wxUSE_FILEDLG
- wxString fname;
- 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);
- #endif // wxUSE_FILEDLG
- }
- void AppFrame::OnFileSave (wxCommandEvent &WXUNUSED(event)) {
- if (!m_edit) return;
- if (!m_edit->Modified()) {
- wxMessageBox (_("There is nothing to save!"), _("Save file"),
- wxOK | wxICON_EXCLAMATION);
- return;
- }
- m_edit->SaveFile ();
- }
- void AppFrame::OnFileSaveAs (wxCommandEvent &WXUNUSED(event)) {
- if (!m_edit) return;
- #if wxUSE_FILEDLG
- wxString filename = wxEmptyString;
- 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);
- #endif // wxUSE_FILEDLG
- }
- void AppFrame::OnFileClose (wxCommandEvent &WXUNUSED(event)) {
- if (!m_edit) return;
- if (m_edit->Modified()) {
- if (wxMessageBox (_("Text is not saved, save before closing?"), _("Close"),
- wxYES_NO | wxICON_QUESTION) == wxYES) {
- m_edit->SaveFile();
- if (m_edit->Modified()) {
- wxMessageBox (_("Text could not be saved!"), _("Close abort"),
- wxOK | wxICON_EXCLAMATION);
- return;
- }
- }
- }
- m_edit->SetFilename (wxEmptyString);
- m_edit->ClearAll();
- m_edit->SetSavePoint();
- }
- // properties event handlers
- void AppFrame::OnProperties (wxCommandEvent &WXUNUSED(event)) {
- if (!m_edit) return;
- EditProperties dlg(m_edit, 0);
- }
- // print event handlers
- void AppFrame::OnPrintSetup (wxCommandEvent &WXUNUSED(event)) {
- #if wxUSE_PRINTING_ARCHITECTURE
- (*g_pageSetupData) = * g_printData;
- wxPageSetupDialog pageSetupDialog(this, g_pageSetupData);
- pageSetupDialog.ShowModal();
- (*g_printData) = pageSetupDialog.GetPageSetupData().GetPrintData();
- (*g_pageSetupData) = pageSetupDialog.GetPageSetupData();
- #endif // wxUSE_PRINTING_ARCHITECTURE
- }
- void AppFrame::OnPrintPreview (wxCommandEvent &WXUNUSED(event)) {
- #if wxUSE_PRINTING_ARCHITECTURE
- wxPrintDialogData printDialogData( *g_printData);
- wxPrintPreview *preview =
- new wxPrintPreview (new EditPrint (m_edit),
- new EditPrint (m_edit),
- &printDialogData);
- if (!preview->IsOk()) {
- delete preview;
- wxMessageBox (_("There was a problem with previewing.\n\
- Perhaps your current printer is not correctly?"),
- _("Previewing"), wxOK);
- return;
- }
- wxRect rect = DeterminePrintSize();
- wxPreviewFrame *frame = new wxPreviewFrame (preview, this, _("Print Preview"));
- frame->SetSize (rect);
- frame->Centre(wxBOTH);
- frame->Initialize();
- frame->Show(true);
- #endif // wxUSE_PRINTING_ARCHITECTURE
- }
- void AppFrame::OnPrint (wxCommandEvent &WXUNUSED(event)) {
- #if wxUSE_PRINTING_ARCHITECTURE
- wxPrintDialogData printDialogData( *g_printData);
- wxPrinter printer (&printDialogData);
- EditPrint printout (m_edit);
- if (!printer.Print (this, &printout, true)) {
- if (wxPrinter::GetLastError() == wxPRINTER_ERROR) {
- wxMessageBox (_("There was a problem with printing.\n\
- Perhaps your current printer is not correctly?"),
- _("Previewing"), wxOK);
- return;
- }
- }
- (*g_printData) = printer.GetPrintDialogData().GetPrintData();
- #endif // wxUSE_PRINTING_ARCHITECTURE
- }
- // edit events
- void AppFrame::OnEdit (wxCommandEvent &event) {
- if (m_edit) m_edit->GetEventHandler()->ProcessEvent (event);
- }
- // private functions
- void AppFrame::CreateMenu ()
- {
- // File menu
- wxMenu *menuFile = new wxMenu;
- menuFile->Append (wxID_OPEN, _("&Open ..\tCtrl+O"));
- menuFile->Append (wxID_SAVE, _("&Save\tCtrl+S"));
- menuFile->Append (wxID_SAVEAS, _("Save &as ..\tCtrl+Shift+S"));
- menuFile->Append (wxID_CLOSE, _("&Close\tCtrl+W"));
- menuFile->AppendSeparator();
- menuFile->Append (myID_PROPERTIES, _("Proper&ties ..\tCtrl+I"));
- menuFile->AppendSeparator();
- menuFile->Append (wxID_PRINT_SETUP, _("Print Set&up .."));
- menuFile->Append (wxID_PREVIEW, _("Print Pre&view\tCtrl+Shift+P"));
- menuFile->Append (wxID_PRINT, _("&Print ..\tCtrl+P"));
- menuFile->AppendSeparator();
- menuFile->Append (wxID_EXIT, _("&Quit\tCtrl+Q"));
- // Edit menu
- wxMenu *menuEdit = new wxMenu;
- menuEdit->Append (wxID_UNDO, _("&Undo\tCtrl+Z"));
- menuEdit->Append (wxID_REDO, _("&Redo\tCtrl+Shift+Z"));
- menuEdit->AppendSeparator();
- menuEdit->Append (wxID_CUT, _("Cu&t\tCtrl+X"));
- menuEdit->Append (wxID_COPY, _("&Copy\tCtrl+C"));
- menuEdit->Append (wxID_PASTE, _("&Paste\tCtrl+V"));
- menuEdit->Append (wxID_CLEAR, _("&Delete\tDel"));
- menuEdit->AppendSeparator();
- menuEdit->Append (wxID_FIND, _("&Find\tCtrl+F"));
- menuEdit->Enable (wxID_FIND, false);
- menuEdit->Append (myID_FINDNEXT, _("Find &next\tF3"));
- menuEdit->Enable (myID_FINDNEXT, false);
- menuEdit->Append (myID_REPLACE, _("&Replace\tCtrl+H"));
- menuEdit->Enable (myID_REPLACE, false);
- menuEdit->Append (myID_REPLACENEXT, _("Replace &again\tShift+F4"));
- menuEdit->Enable (myID_REPLACENEXT, false);
- menuEdit->AppendSeparator();
- menuEdit->Append (myID_BRACEMATCH, _("&Match brace\tCtrl+M"));
- menuEdit->Append (myID_GOTO, _("&Goto\tCtrl+G"));
- menuEdit->Enable (myID_GOTO, false);
- menuEdit->AppendSeparator();
- menuEdit->Append (myID_INDENTINC, _("&Indent increase\tTab"));
- 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"));
- // hilight submenu
- wxMenu *menuHilight = new wxMenu;
- int Nr;
- for (Nr = 0; Nr < g_LanguagePrefsSize; Nr++) {
- menuHilight->Append (myID_HILIGHTFIRST + Nr,
- g_LanguagePrefs [Nr].name);
- }
- // charset submenu
- wxMenu *menuCharset = new wxMenu;
- menuCharset->Append (myID_CHARSETANSI, _("&ANSI (Windows)"));
- menuCharset->Append (myID_CHARSETMAC, _("&MAC (Macintosh)"));
- // View menu
- wxMenu *menuView = new wxMenu;
- menuView->Append (myID_HILIGHTLANG, _("&Hilight language .."), menuHilight);
- menuView->AppendSeparator();
- menuView->AppendCheckItem (myID_FOLDTOGGLE, _("&Toggle current fold\tCtrl+T"));
- menuView->AppendCheckItem (myID_OVERTYPE, _("&Overwrite mode\tIns"));
- menuView->AppendCheckItem (myID_WRAPMODEON, _("&Wrap mode\tCtrl+U"));
- menuView->AppendSeparator();
- menuView->AppendCheckItem (myID_DISPLAYEOL, _("Show line &endings"));
- menuView->AppendCheckItem (myID_INDENTGUIDE, _("Show &indent guides"));
- menuView->AppendCheckItem (myID_LINENUMBER, _("Show line &numbers"));
- menuView->AppendCheckItem (myID_LONGLINEON, _("Show &long line marker"));
- menuView->AppendCheckItem (myID_WHITESPACE, _("Show white&space"));
- 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"));
- menuChangeCase->Append (myID_CHANGELOWER, _("&Lower case"));
- // convert EOL submenu
- wxMenu *menuConvertEOL = new wxMenu;
- menuConvertEOL->Append (myID_CONVERTCR, _("CR (&Linux)"));
- menuConvertEOL->Append (myID_CONVERTCRLF, _("CR+LF (&Windows)"));
- menuConvertEOL->Append (myID_CONVERTLF, _("LF (&Macintosh)"));
- // Extra menu
- wxMenu *menuExtra = new wxMenu;
- menuExtra->AppendCheckItem (myID_READONLY, _("&Readonly mode"));
- menuExtra->AppendSeparator();
- menuExtra->Append (myID_CHANGECASE, _("Change &case to .."), menuChangeCase);
- menuExtra->AppendSeparator();
- menuExtra->Append (myID_CONVERTEOL, _("Convert line &endings to .."), menuConvertEOL);
- // Window menu
- 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 ..\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 () {
- wxSize scr = wxGetDisplaySize();
- // determine position and size (shifting 16 left and down)
- wxRect rect = GetRect();
- rect.x += 16;
- rect.y += 16;
- rect.width = wxMin (rect.width, (scr.x - rect.x));
- rect.height = wxMin (rect.height, (scr.x - rect.y));
- return rect;
- }
- //----------------------------------------------------------------------------
- // AppAbout
- //----------------------------------------------------------------------------
- wxBEGIN_EVENT_TABLE (AppAbout, wxDialog)
- EVT_TIMER (myID_ABOUTTIMER, AppAbout::OnTimerEvent)
- wxEND_EVENT_TABLE ()
- AppAbout::AppAbout (wxWindow *parent,
- int milliseconds,
- long style)
- : wxDialog (parent, wxID_ANY, wxEmptyString,
- wxDefaultPosition, wxDefaultSize,
- style | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {
- // set timer if any
- m_timer = NULL;
- if (milliseconds > 0) {
- m_timer = new wxTimer (this, myID_ABOUTTIMER);
- m_timer->Start (milliseconds, wxTIMER_ONE_SHOT);
- }
- // sets the application title
- SetTitle (_("About .."));
- // about info
- wxGridSizer *aboutinfo = new wxGridSizer (2, 0, 2);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, _("Written by: ")),
- 0, wxALIGN_LEFT);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, APP_MAINT),
- 1, wxEXPAND | wxALIGN_LEFT);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, _("Version: ")),
- 0, wxALIGN_LEFT);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, APP_VERSION),
- 1, wxEXPAND | wxALIGN_LEFT);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, _("Licence type: ")),
- 0, wxALIGN_LEFT);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, APP_LICENCE),
- 1, wxEXPAND | wxALIGN_LEFT);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, _("Copyright: ")),
- 0, wxALIGN_LEFT);
- aboutinfo->Add (new wxStaticText(this, wxID_ANY, APP_COPYRIGTH),
- 1, wxEXPAND | wxALIGN_LEFT);
- // about icontitle//info
- wxBoxSizer *aboutpane = new wxBoxSizer (wxHORIZONTAL);
- 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);
- aboutpane->Add (60, 0);
- // about complete
- wxBoxSizer *totalpane = new wxBoxSizer (wxVERTICAL);
- totalpane->Add (0, 20);
- wxStaticText *appname = new wxStaticText(this, wxID_ANY, *g_appname);
- appname->SetFont (wxFont (24, wxDEFAULT, wxNORMAL, wxBOLD));
- totalpane->Add (appname, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 40);
- totalpane->Add (0, 10);
- totalpane->Add (aboutpane, 0, wxEXPAND | wxALL, 4);
- totalpane->Add (new wxStaticText(this, wxID_ANY, APP_DESCR),
- 0, wxALIGN_CENTER | wxALL, 10);
- wxButton *okButton = new wxButton (this, wxID_OK, _("OK"));
- okButton->SetDefault();
- totalpane->Add (okButton, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, 10);
- SetSizerAndFit (totalpane);
- CenterOnScreen();
- ShowModal();
- }
- AppAbout::~AppAbout () {
- wxDELETE(m_timer);
- }
- //----------------------------------------------------------------------------
- // event handlers
- void AppAbout::OnTimerEvent (wxTimerEvent &WXUNUSED(event)) {
- 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&);
- wxDECLARE_EVENT_TABLE();
- };
- wxBEGIN_EVENT_TABLE(MinimalEditor, wxStyledTextCtrl)
- EVT_STC_MARGINCLICK(wxID_ANY, MinimalEditor::OnMarginClick)
- EVT_STC_CHANGE(wxID_ANY, MinimalEditor::OnText)
- wxEND_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();
- }
|