1 //////////////////////////////////////////////////////////////////////////////
2 // File: contrib/samples/stc/stctest.cpp
3 // Purpose: STC test application
4 // Maintainer: Otto Wyss
7 // Copyright: (c) wxGuide
8 // Licence: wxWindows licence
9 //////////////////////////////////////////////////////////////////////////////
11 //----------------------------------------------------------------------------
13 //----------------------------------------------------------------------------
15 // For compilers that support precompilation, includes "wx/wx.h".
16 #include "wx/wxprec.h"
22 // for all others, include the necessary headers (this file is usually all you
23 // need because it includes almost all 'standard' wxWidgets headers)
29 #include "wx/config.h" // configuration support
30 #include "wx/filedlg.h" // file dialog support
31 #include "wx/filename.h" // filename support
32 #include "wx/notebook.h" // notebook support
33 #include "wx/settings.h" // system settings
34 #include "wx/string.h" // strings support
35 #include "wx/image.h" // images support
37 //! application headers
38 #include "defsext.h" // Additional definitions
39 #include "edit.h" // Edit module
40 #include "prefs.h" // Prefs
43 #include "../sample.xpm"
46 //----------------------------------------------------------------------------
48 //----------------------------------------------------------------------------
50 // the application icon (under Windows and OS/2 it is in resources)
51 #if defined(__WXGTK__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXX11__)
52 #include "mondrian.xpm"
55 //============================================================================
57 //============================================================================
59 #define APP_NAME wxT("STC-Test")
60 #define APP_DESCR _("See http://wxguide.sourceforge.net/")
62 #define APP_MAINT wxT("Otto Wyss")
63 #define APP_VENDOR wxT("wxWidgets")
64 #define APP_COPYRIGTH wxT("(C) 2003 Otto Wyss")
65 #define APP_LICENCE wxT("wxWidgets")
67 #define APP_VERSION wxT("0.1.alpha")
68 #define APP_BUILD __DATE__
70 #define APP_WEBSITE wxT("http://www.wxWidgets.org")
71 #define APP_MAIL wxT("mailto://???")
73 #define NONAME _("<untitled>")
78 //----------------------------------------------------------------------------
79 //! global application name
80 wxString
*g_appname
= NULL
;
82 #if wxUSE_PRINTING_ARCHITECTURE
84 //! global print data, to remember settings during the session
85 wxPrintData
*g_printData
= (wxPrintData
*) NULL
;
86 wxPageSetupData
*g_pageSetupData
= (wxPageSetupData
*) NULL
;
88 #endif // wxUSE_PRINTING_ARCHITECTURE
93 //----------------------------------------------------------------------------
94 //! application APP_VENDOR-APP_NAME.
95 class App
: public wxApp
{
96 friend class AppFrame
;
99 //! the main function called durning application start
100 virtual bool OnInit ();
102 //! application exit function
103 virtual int OnExit ();
109 wxFrame
* MinimalEditor();
111 void OnMinimalEditor(wxCommandEvent
&);
112 DECLARE_EVENT_TABLE()
115 // created dynamically by wxWidgets
118 //----------------------------------------------------------------------------
119 //! frame of the application APP_VENDOR-APP_NAME.
120 class AppFrame
: public wxFrame
{
122 friend class AppBook
;
123 friend class AppAbout
;
127 AppFrame (const wxString
&title
);
134 void OnClose (wxCloseEvent
&event
);
135 void OnAbout (wxCommandEvent
&event
);
136 void OnExit (wxCommandEvent
&event
);
137 void OnTimerEvent (wxTimerEvent
&event
);
139 void OnFileNew (wxCommandEvent
&event
);
140 void OnFileNewFrame (wxCommandEvent
&event
);
141 void OnFileOpen (wxCommandEvent
&event
);
142 void OnFileOpenFrame (wxCommandEvent
&event
);
143 void OnFileSave (wxCommandEvent
&event
);
144 void OnFileSaveAs (wxCommandEvent
&event
);
145 void OnFileClose (wxCommandEvent
&event
);
147 void OnProperties (wxCommandEvent
&event
);
149 void OnPrintSetup (wxCommandEvent
&event
);
150 void OnPrintPreview (wxCommandEvent
&event
);
151 void OnPrint (wxCommandEvent
&event
);
153 void OnEdit (wxCommandEvent
&event
);
158 void FileOpen (wxString fname
);
160 //! creates the application menu bar
161 wxMenuBar
*m_menuBar
;
164 // print preview position and size
165 wxRect
DeterminePrintSize ();
167 DECLARE_EVENT_TABLE()
170 //----------------------------------------------------------------------------
171 //! about box of the application APP_VENDOR-APP_NAME
172 class AppAbout
: public wxDialog
{
176 AppAbout (wxWindow
*parent
,
177 int milliseconds
= 0,
184 void OnTimerEvent (wxTimerEvent
&event
);
190 DECLARE_EVENT_TABLE()
194 //============================================================================
196 //============================================================================
201 BEGIN_EVENT_TABLE(App
, wxApp
)
202 EVT_MENU(myID_WINDOW_MINIMAL
, App::OnMinimalEditor
)
205 //----------------------------------------------------------------------------
207 //----------------------------------------------------------------------------
209 bool App::OnInit () {
211 wxInitAllImageHandlers();
213 // set application and vendor name
214 SetAppName (APP_NAME
);
215 SetVendorName (APP_VENDOR
);
216 g_appname
= new wxString ();
217 g_appname
->Append (APP_VENDOR
);
218 g_appname
->Append (wxT("-"));
219 g_appname
->Append (APP_NAME
);
221 #if wxUSE_PRINTING_ARCHITECTURE
222 // initialize print data and setup
223 g_printData
= new wxPrintData
;
224 g_pageSetupData
= new wxPageSetupDialogData
;
225 #endif // wxUSE_PRINTING_ARCHITECTURE
227 // create application frame
228 m_frame
= new AppFrame (*g_appname
);
230 // open application frame
232 m_frame
->Show (true);
233 SetTopWindow (m_frame
);
240 // delete global appname
243 #if wxUSE_PRINTING_ARCHITECTURE
244 // delete global print data and setup
245 if (g_printData
) delete g_printData
;
246 if (g_pageSetupData
) delete g_pageSetupData
;
247 #endif // wxUSE_PRINTING_ARCHITECTURE
252 //----------------------------------------------------------------------------
254 //----------------------------------------------------------------------------
256 BEGIN_EVENT_TABLE (AppFrame
, wxFrame
)
258 EVT_CLOSE ( AppFrame::OnClose
)
260 EVT_MENU (wxID_OPEN
, AppFrame::OnFileOpen
)
261 EVT_MENU (wxID_SAVE
, AppFrame::OnFileSave
)
262 EVT_MENU (wxID_SAVEAS
, AppFrame::OnFileSaveAs
)
263 EVT_MENU (wxID_CLOSE
, AppFrame::OnFileClose
)
265 EVT_MENU (myID_PROPERTIES
, AppFrame::OnProperties
)
267 EVT_MENU (wxID_PRINT_SETUP
, AppFrame::OnPrintSetup
)
268 EVT_MENU (wxID_PREVIEW
, AppFrame::OnPrintPreview
)
269 EVT_MENU (wxID_PRINT
, AppFrame::OnPrint
)
270 EVT_MENU (wxID_EXIT
, AppFrame::OnExit
)
272 EVT_MENU (wxID_CLEAR
, AppFrame::OnEdit
)
273 EVT_MENU (wxID_CUT
, AppFrame::OnEdit
)
274 EVT_MENU (wxID_COPY
, AppFrame::OnEdit
)
275 EVT_MENU (wxID_PASTE
, AppFrame::OnEdit
)
276 EVT_MENU (myID_INDENTINC
, AppFrame::OnEdit
)
277 EVT_MENU (myID_INDENTRED
, AppFrame::OnEdit
)
278 EVT_MENU (wxID_SELECTALL
, AppFrame::OnEdit
)
279 EVT_MENU (myID_SELECTLINE
, AppFrame::OnEdit
)
280 EVT_MENU (wxID_REDO
, AppFrame::OnEdit
)
281 EVT_MENU (wxID_UNDO
, AppFrame::OnEdit
)
283 EVT_MENU (wxID_FIND
, AppFrame::OnEdit
)
284 EVT_MENU (myID_FINDNEXT
, AppFrame::OnEdit
)
285 EVT_MENU (myID_REPLACE
, AppFrame::OnEdit
)
286 EVT_MENU (myID_REPLACENEXT
, AppFrame::OnEdit
)
287 EVT_MENU (myID_BRACEMATCH
, AppFrame::OnEdit
)
288 EVT_MENU (myID_GOTO
, AppFrame::OnEdit
)
290 EVT_MENU_RANGE (myID_HILIGHTFIRST
, myID_HILIGHTLAST
,
292 EVT_MENU (myID_DISPLAYEOL
, AppFrame::OnEdit
)
293 EVT_MENU (myID_INDENTGUIDE
, AppFrame::OnEdit
)
294 EVT_MENU (myID_LINENUMBER
, AppFrame::OnEdit
)
295 EVT_MENU (myID_LONGLINEON
, AppFrame::OnEdit
)
296 EVT_MENU (myID_WHITESPACE
, AppFrame::OnEdit
)
297 EVT_MENU (myID_FOLDTOGGLE
, AppFrame::OnEdit
)
298 EVT_MENU (myID_OVERTYPE
, AppFrame::OnEdit
)
299 EVT_MENU (myID_READONLY
, AppFrame::OnEdit
)
300 EVT_MENU (myID_WRAPMODEON
, AppFrame::OnEdit
)
302 EVT_MENU (myID_CHANGELOWER
, AppFrame::OnEdit
)
303 EVT_MENU (myID_CHANGEUPPER
, AppFrame::OnEdit
)
304 EVT_MENU (myID_CONVERTCR
, AppFrame::OnEdit
)
305 EVT_MENU (myID_CONVERTCRLF
, AppFrame::OnEdit
)
306 EVT_MENU (myID_CONVERTLF
, AppFrame::OnEdit
)
307 EVT_MENU (myID_CHARSETANSI
, AppFrame::OnEdit
)
308 EVT_MENU (myID_CHARSETMAC
, AppFrame::OnEdit
)
310 EVT_MENU (wxID_ABOUT
, AppFrame::OnAbout
)
313 AppFrame::AppFrame (const wxString
&title
)
314 : wxFrame ((wxFrame
*)NULL
, wxID_ANY
, title
, wxDefaultPosition
, wxSize(750,550),
315 wxDEFAULT_FRAME_STYLE
| wxNO_FULL_REPAINT_ON_RESIZE
)
317 SetIcon(wxICON(sample
));
319 // intitialize important variables
322 // set icon and background
323 SetTitle (*g_appname
);
324 SetIcon (wxICON (mondrian
));
325 SetBackgroundColour (wxT("WHITE"));
327 // about box shown for 1 seconds
328 AppAbout
dlg(this, 1000);
331 m_menuBar
= new wxMenuBar
;
335 m_edit
= new Edit (this, wxID_ANY
);
338 FileOpen (wxT("stctest.cpp"));
341 AppFrame::~AppFrame () {
344 // common event handlers
345 void AppFrame::OnClose (wxCloseEvent
&event
) {
348 if (m_edit
&& m_edit
->Modified()) {
349 if (event
.CanVeto()) event
.Veto (true);
355 void AppFrame::OnAbout (wxCommandEvent
&WXUNUSED(event
)) {
359 void AppFrame::OnExit (wxCommandEvent
&WXUNUSED(event
)) {
363 // file event handlers
364 void AppFrame::OnFileOpen (wxCommandEvent
&WXUNUSED(event
)) {
368 wxFileDialog
dlg (this, wxT("Open file"), wxEmptyString
, wxEmptyString
, wxT("Any file (*)|*"),
369 wxFD_OPEN
| wxFD_FILE_MUST_EXIST
| wxFD_CHANGE_DIR
);
370 if (dlg
.ShowModal() != wxID_OK
) return;
371 fname
= dlg
.GetPath ();
373 #endif // wxUSE_FILEDLG
376 void AppFrame::OnFileSave (wxCommandEvent
&WXUNUSED(event
)) {
378 if (!m_edit
->Modified()) {
379 wxMessageBox (_("There is nothing to save!"), _("Save file"),
380 wxOK
| wxICON_EXCLAMATION
);
386 void AppFrame::OnFileSaveAs (wxCommandEvent
&WXUNUSED(event
)) {
389 wxString filename
= wxEmptyString
;
390 wxFileDialog
dlg (this, wxT("Save file"), wxEmptyString
, wxEmptyString
, wxT("Any file (*)|*"), wxFD_SAVE
|wxFD_OVERWRITE_PROMPT
);
391 if (dlg
.ShowModal() != wxID_OK
) return;
392 filename
= dlg
.GetPath();
393 m_edit
->SaveFile (filename
);
394 #endif // wxUSE_FILEDLG
397 void AppFrame::OnFileClose (wxCommandEvent
&WXUNUSED(event
)) {
399 if (m_edit
->Modified()) {
400 if (wxMessageBox (_("Text is not saved, save before closing?"), _("Close"),
401 wxYES_NO
| wxICON_QUESTION
) == wxYES
) {
403 if (m_edit
->Modified()) {
404 wxMessageBox (_("Text could not be saved!"), _("Close abort"),
405 wxOK
| wxICON_EXCLAMATION
);
410 m_edit
->SetFilename (wxEmptyString
);
412 m_edit
->SetSavePoint();
415 // properties event handlers
416 void AppFrame::OnProperties (wxCommandEvent
&WXUNUSED(event
)) {
418 EditProperties
dlg(m_edit
, 0);
421 // print event handlers
422 void AppFrame::OnPrintSetup (wxCommandEvent
&WXUNUSED(event
)) {
423 #if wxUSE_PRINTING_ARCHITECTURE
424 (*g_pageSetupData
) = * g_printData
;
425 wxPageSetupDialog
pageSetupDialog(this, g_pageSetupData
);
426 pageSetupDialog
.ShowModal();
427 (*g_printData
) = pageSetupDialog
.GetPageSetupData().GetPrintData();
428 (*g_pageSetupData
) = pageSetupDialog
.GetPageSetupData();
429 #endif // wxUSE_PRINTING_ARCHITECTURE
432 void AppFrame::OnPrintPreview (wxCommandEvent
&WXUNUSED(event
)) {
433 #if wxUSE_PRINTING_ARCHITECTURE
434 wxPrintDialogData
printDialogData( *g_printData
);
435 wxPrintPreview
*preview
=
436 new wxPrintPreview (new EditPrint (m_edit
),
437 new EditPrint (m_edit
),
439 if (!preview
->Ok()) {
441 wxMessageBox (_("There was a problem with previewing.\n\
442 Perhaps your current printer is not correctly?"),
443 _("Previewing"), wxOK
);
446 wxRect rect
= DeterminePrintSize();
447 wxPreviewFrame
*frame
= new wxPreviewFrame (preview
, this, _("Print Preview"));
448 frame
->SetSize (rect
);
449 frame
->Centre(wxBOTH
);
452 #endif // wxUSE_PRINTING_ARCHITECTURE
455 void AppFrame::OnPrint (wxCommandEvent
&WXUNUSED(event
)) {
456 #if wxUSE_PRINTING_ARCHITECTURE
457 wxPrintDialogData
printDialogData( *g_printData
);
458 wxPrinter
printer (&printDialogData
);
459 EditPrint
printout (m_edit
);
460 if (!printer
.Print (this, &printout
, true)) {
461 if (wxPrinter::GetLastError() == wxPRINTER_ERROR
) {
462 wxMessageBox (_("There was a problem with printing.\n\
463 Perhaps your current printer is not correctly?"),
464 _("Previewing"), wxOK
);
468 (*g_printData
) = printer
.GetPrintDialogData().GetPrintData();
469 #endif // wxUSE_PRINTING_ARCHITECTURE
473 void AppFrame::OnEdit (wxCommandEvent
&event
) {
474 if (m_edit
) m_edit
->GetEventHandler()->ProcessEvent (event
);
478 void AppFrame::CreateMenu ()
481 wxMenu
*menuFile
= new wxMenu
;
482 menuFile
->Append (wxID_OPEN
, _("&Open ..\tCtrl+O"));
483 menuFile
->Append (wxID_SAVE
, _("&Save\tCtrl+S"));
484 menuFile
->Append (wxID_SAVEAS
, _("Save &as ..\tCtrl+Shift+S"));
485 menuFile
->Append (wxID_CLOSE
, _("&Close\tCtrl+W"));
486 menuFile
->AppendSeparator();
487 menuFile
->Append (myID_PROPERTIES
, _("Proper&ties ..\tCtrl+I"));
488 menuFile
->AppendSeparator();
489 menuFile
->Append (wxID_PRINT_SETUP
, _("Print Set&up .."));
490 menuFile
->Append (wxID_PREVIEW
, _("Print Pre&view\tCtrl+Shift+P"));
491 menuFile
->Append (wxID_PRINT
, _("&Print ..\tCtrl+P"));
492 menuFile
->AppendSeparator();
493 menuFile
->Append (wxID_EXIT
, _("&Quit\tCtrl+Q"));
496 wxMenu
*menuEdit
= new wxMenu
;
497 menuEdit
->Append (wxID_UNDO
, _("&Undo\tCtrl+Z"));
498 menuEdit
->Append (wxID_REDO
, _("&Redo\tCtrl+Shift+Z"));
499 menuEdit
->AppendSeparator();
500 menuEdit
->Append (wxID_CUT
, _("Cu&t\tCtrl+X"));
501 menuEdit
->Append (wxID_COPY
, _("&Copy\tCtrl+C"));
502 menuEdit
->Append (wxID_PASTE
, _("&Paste\tCtrl+V"));
503 menuEdit
->Append (wxID_CLEAR
, _("&Delete\tDel"));
504 menuEdit
->AppendSeparator();
505 menuEdit
->Append (wxID_FIND
, _("&Find\tCtrl+F"));
506 menuEdit
->Enable (wxID_FIND
, false);
507 menuEdit
->Append (myID_FINDNEXT
, _("Find &next\tF3"));
508 menuEdit
->Enable (myID_FINDNEXT
, false);
509 menuEdit
->Append (myID_REPLACE
, _("&Replace\tCtrl+H"));
510 menuEdit
->Enable (myID_REPLACE
, false);
511 menuEdit
->Append (myID_REPLACENEXT
, _("Replace &again\tShift+F4"));
512 menuEdit
->Enable (myID_REPLACENEXT
, false);
513 menuEdit
->AppendSeparator();
514 menuEdit
->Append (myID_BRACEMATCH
, _("&Match brace\tCtrl+M"));
515 menuEdit
->Append (myID_GOTO
, _("&Goto\tCtrl+G"));
516 menuEdit
->Enable (myID_GOTO
, false);
517 menuEdit
->AppendSeparator();
518 menuEdit
->Append (myID_INDENTINC
, _("&Indent increase\tTab"));
519 menuEdit
->Append (myID_INDENTRED
, _("I&ndent reduce\tShift+Tab"));
520 menuEdit
->AppendSeparator();
521 menuEdit
->Append (wxID_SELECTALL
, _("&Select all\tCtrl+A"));
522 menuEdit
->Append (myID_SELECTLINE
, _("Select &line\tCtrl+L"));
525 wxMenu
*menuHilight
= new wxMenu
;
527 for (Nr
= 0; Nr
< g_LanguagePrefsSize
; Nr
++) {
528 menuHilight
->Append (myID_HILIGHTFIRST
+ Nr
,
529 g_LanguagePrefs
[Nr
].name
);
533 wxMenu
*menuCharset
= new wxMenu
;
534 menuCharset
->Append (myID_CHARSETANSI
, _("&ANSI (Windows)"));
535 menuCharset
->Append (myID_CHARSETMAC
, _("&MAC (Macintosh)"));
538 wxMenu
*menuView
= new wxMenu
;
539 menuView
->Append (myID_HILIGHTLANG
, _("&Hilight language .."), menuHilight
);
540 menuView
->AppendSeparator();
541 menuView
->AppendCheckItem (myID_FOLDTOGGLE
, _("&Toggle current fold\tCtrl+T"));
542 menuView
->AppendCheckItem (myID_OVERTYPE
, _("&Overwrite mode\tIns"));
543 menuView
->AppendCheckItem (myID_WRAPMODEON
, _("&Wrap mode\tCtrl+U"));
544 menuView
->AppendSeparator();
545 menuView
->AppendCheckItem (myID_DISPLAYEOL
, _("Show line &endings"));
546 menuView
->AppendCheckItem (myID_INDENTGUIDE
, _("Show &indent guides"));
547 menuView
->AppendCheckItem (myID_LINENUMBER
, _("Show line &numbers"));
548 menuView
->AppendCheckItem (myID_LONGLINEON
, _("Show &long line marker"));
549 menuView
->AppendCheckItem (myID_WHITESPACE
, _("Show white&space"));
550 menuView
->AppendSeparator();
551 menuView
->Append (myID_USECHARSET
, _("Use &code page of .."), menuCharset
);
553 // change case submenu
554 wxMenu
*menuChangeCase
= new wxMenu
;
555 menuChangeCase
->Append (myID_CHANGEUPPER
, _("&Upper case"));
556 menuChangeCase
->Append (myID_CHANGELOWER
, _("&Lower case"));
558 // convert EOL submenu
559 wxMenu
*menuConvertEOL
= new wxMenu
;
560 menuConvertEOL
->Append (myID_CONVERTCR
, _("CR (&Linux)"));
561 menuConvertEOL
->Append (myID_CONVERTCRLF
, _("CR+LF (&Windows)"));
562 menuConvertEOL
->Append (myID_CONVERTLF
, _("LF (&Macintosh)"));
565 wxMenu
*menuExtra
= new wxMenu
;
566 menuExtra
->AppendCheckItem (myID_READONLY
, _("&Readonly mode"));
567 menuExtra
->AppendSeparator();
568 menuExtra
->Append (myID_CHANGECASE
, _("Change &case to .."), menuChangeCase
);
569 menuExtra
->AppendSeparator();
570 menuExtra
->Append (myID_CONVERTEOL
, _("Convert line &endings to .."), menuConvertEOL
);
573 wxMenu
*menuWindow
= new wxMenu
;
574 menuWindow
->Append (myID_PAGEPREV
, _("&Previous\tCtrl+Shift+Tab"));
575 menuWindow
->Append (myID_PAGENEXT
, _("&Next\tCtrl+Tab"));
576 menuWindow
->Append(myID_WINDOW_MINIMAL
, _("&Minimal editor"));
579 wxMenu
*menuHelp
= new wxMenu
;
580 menuHelp
->Append (wxID_ABOUT
, _("&About ..\tShift+F1"));
583 m_menuBar
->Append (menuFile
, _("&File"));
584 m_menuBar
->Append (menuEdit
, _("&Edit"));
585 m_menuBar
->Append (menuView
, _("&View"));
586 m_menuBar
->Append (menuExtra
, _("E&xtra"));
587 m_menuBar
->Append (menuWindow
, _("&Window"));
588 m_menuBar
->Append (menuHelp
, _("&Help"));
589 SetMenuBar (m_menuBar
);
592 void AppFrame::FileOpen (wxString fname
)
594 wxFileName
w(fname
); w
.Normalize(); fname
= w
.GetFullPath();
595 m_edit
->LoadFile (fname
);
598 wxRect
AppFrame::DeterminePrintSize () {
600 wxSize scr
= wxGetDisplaySize();
602 // determine position and size (shifting 16 left and down)
603 wxRect rect
= GetRect();
606 rect
.width
= wxMin (rect
.width
, (scr
.x
- rect
.x
));
607 rect
.height
= wxMin (rect
.height
, (scr
.x
- rect
.y
));
613 //----------------------------------------------------------------------------
615 //----------------------------------------------------------------------------
617 BEGIN_EVENT_TABLE (AppAbout
, wxDialog
)
618 EVT_TIMER (myID_ABOUTTIMER
, AppAbout::OnTimerEvent
)
621 AppAbout::AppAbout (wxWindow
*parent
,
624 : wxDialog (parent
, wxID_ANY
, wxEmptyString
,
625 wxDefaultPosition
, wxDefaultSize
,
626 style
| wxDEFAULT_DIALOG_STYLE
| wxRESIZE_BORDER
) {
630 if (milliseconds
> 0) {
631 m_timer
= new wxTimer (this, myID_ABOUTTIMER
);
632 m_timer
->Start (milliseconds
, wxTIMER_ONE_SHOT
);
635 // sets the application title
636 SetTitle (_("About .."));
639 wxGridSizer
*aboutinfo
= new wxGridSizer (2, 0, 2);
640 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, _("Written by: ")),
642 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, APP_MAINT
),
643 1, wxEXPAND
| wxALIGN_LEFT
);
644 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, _("Version: ")),
646 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, APP_VERSION
),
647 1, wxEXPAND
| wxALIGN_LEFT
);
648 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, _("Licence type: ")),
650 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, APP_LICENCE
),
651 1, wxEXPAND
| wxALIGN_LEFT
);
652 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, _("Copyright: ")),
654 aboutinfo
->Add (new wxStaticText(this, wxID_ANY
, APP_COPYRIGTH
),
655 1, wxEXPAND
| wxALIGN_LEFT
);
657 // about icontitle//info
658 wxBoxSizer
*aboutpane
= new wxBoxSizer (wxHORIZONTAL
);
659 wxBitmap bitmap
= wxBitmap(wxICON (mondrian
));
660 aboutpane
->Add (new wxStaticBitmap (this, wxID_ANY
, bitmap
),
661 0, wxALIGN_LEFT
|wxALIGN_CENTER_VERTICAL
|wxLEFT
|wxRIGHT
, 20);
662 aboutpane
->Add (aboutinfo
, 1, wxEXPAND
);
663 aboutpane
->Add (60, 0);
666 wxBoxSizer
*totalpane
= new wxBoxSizer (wxVERTICAL
);
667 totalpane
->Add (0, 20);
668 wxStaticText
*appname
= new wxStaticText(this, wxID_ANY
, *g_appname
);
669 appname
->SetFont (wxFont (24, wxDEFAULT
, wxNORMAL
, wxBOLD
));
670 totalpane
->Add (appname
, 0, wxALIGN_CENTER
| wxLEFT
| wxRIGHT
, 40);
671 totalpane
->Add (0, 10);
672 totalpane
->Add (aboutpane
, 0, wxEXPAND
| wxALL
, 4);
673 totalpane
->Add (new wxStaticText(this, wxID_ANY
, APP_DESCR
),
674 0, wxALIGN_CENTER
| wxALL
, 10);
675 wxButton
*okButton
= new wxButton (this, wxID_OK
, _("OK"));
676 okButton
->SetDefault();
677 totalpane
->Add (okButton
, 0, wxALIGN_CENTER
| wxLEFT
| wxRIGHT
| wxBOTTOM
, 10);
679 SetSizerAndFit (totalpane
);
685 AppAbout::~AppAbout () {
692 //----------------------------------------------------------------------------
694 void AppAbout::OnTimerEvent (wxTimerEvent
&WXUNUSED(event
)) {
695 if (m_timer
) delete m_timer
;
700 /////////////////////////////////////////////////////////////////////////////
701 // Minimal editor added by Troels K 2008-04-08
702 // Thanks to geralds for SetLexerXml() - http://wxforum.shadonet.com/viewtopic.php?t=7155
704 class MinimalEditor
: public wxStyledTextCtrl
713 MinimalEditor(wxWindow
* parent
, wxWindowID id
= wxID_ANY
) : wxStyledTextCtrl(parent
, id
)
717 SetProperty(wxT("fold"), wxT("1"));
718 SetProperty(wxT("fold.comment"), wxT("1"));
719 SetProperty(wxT("fold.compact"), wxT("1"));
720 SetProperty(wxT("fold.preprocessor"), wxT("1"));
721 SetProperty(wxT("fold.html"), wxT("1"));
722 SetProperty(wxT("fold.html.preprocessor"), wxT("1"));
724 SetMarginType(margin_id_lineno
, wxSTC_MARGIN_NUMBER
);
725 SetMarginWidth(margin_id_lineno
, 32);
727 MarkerDefine(wxSTC_MARKNUM_FOLDER
, wxSTC_MARK_BOXPLUS
, wxT("WHITE"), wxT("BLACK"));
728 MarkerDefine(wxSTC_MARKNUM_FOLDEROPEN
, wxSTC_MARK_BOXMINUS
, wxT("WHITE"), wxT("BLACK"));
729 MarkerDefine(wxSTC_MARKNUM_FOLDERSUB
, wxSTC_MARK_VLINE
, wxT("WHITE"), wxT("BLACK"));
730 MarkerDefine(wxSTC_MARKNUM_FOLDEREND
, wxSTC_MARK_BOXPLUSCONNECTED
, wxT("WHITE"), wxT("BLACK"));
731 MarkerDefine(wxSTC_MARKNUM_FOLDEROPENMID
, wxSTC_MARK_BOXMINUSCONNECTED
, wxT("WHITE"), wxT("BLACK"));
732 MarkerDefine(wxSTC_MARKNUM_FOLDERMIDTAIL
, wxSTC_MARK_TCORNER
, wxT("WHITE"), wxT("BLACK"));
733 MarkerDefine(wxSTC_MARKNUM_FOLDERTAIL
, wxSTC_MARK_LCORNER
, wxT("WHITE"), wxT("BLACK"));
735 SetMarginMask(margin_id_fold
, wxSTC_MASK_FOLDERS
);
736 SetMarginWidth(margin_id_fold
, 32);
737 SetMarginSensitive(margin_id_fold
, true);
739 SetFoldFlags(wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED
| wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED
);
743 SetWrapMode(wxSTC_WRAP_WORD
);
744 SetWrapVisualFlags(wxSTC_WRAPVISUALFLAG_END
);
746 virtual bool SetFont(const wxFont
& font
)
748 StyleSetFont(wxSTC_STYLE_DEFAULT
, (wxFont
&)font
);
749 return wxStyledTextCtrl::SetFont(font
);
753 SetLexer(wxSTC_LEX_XML
);
754 StyleSetForeground(wxSTC_H_DEFAULT
, *wxBLACK
);
755 StyleSetForeground(wxSTC_H_TAG
, *wxBLUE
);
756 StyleSetForeground(wxSTC_H_TAGUNKNOWN
, *wxBLUE
);
757 StyleSetForeground(wxSTC_H_ATTRIBUTE
, *wxRED
);
758 StyleSetForeground(wxSTC_H_ATTRIBUTEUNKNOWN
, *wxRED
);
759 StyleSetBold(wxSTC_H_ATTRIBUTEUNKNOWN
, true);
760 StyleSetForeground(wxSTC_H_NUMBER
, *wxBLACK
);
761 StyleSetForeground(wxSTC_H_DOUBLESTRING
, *wxBLACK
);
762 StyleSetForeground(wxSTC_H_SINGLESTRING
, *wxBLACK
);
763 StyleSetForeground(wxSTC_H_OTHER
, *wxBLUE
);
764 StyleSetForeground(wxSTC_H_COMMENT
, wxTheColourDatabase
->Find(wxT("GREY")));
765 StyleSetForeground(wxSTC_H_ENTITY
, *wxRED
);
766 StyleSetBold(wxSTC_H_ENTITY
, true);
767 StyleSetForeground(wxSTC_H_TAGEND
, *wxBLUE
);
768 StyleSetForeground(wxSTC_H_XMLSTART
, *wxBLUE
);
769 StyleSetForeground(wxSTC_H_XMLEND
, *wxBLUE
);
770 StyleSetForeground(wxSTC_H_CDATA
, *wxRED
);
773 void OnMarginClick(wxStyledTextEvent
&);
774 void OnText(wxStyledTextEvent
&);
775 DECLARE_EVENT_TABLE()
778 BEGIN_EVENT_TABLE(MinimalEditor
, wxStyledTextCtrl
)
779 EVT_STC_MARGINCLICK(wxID_ANY
, MinimalEditor::OnMarginClick
)
780 EVT_STC_CHANGE(wxID_ANY
, MinimalEditor::OnText
)
783 void MinimalEditor::OnMarginClick(wxStyledTextEvent
&event
)
785 if (event
.GetMargin() == margin_id_fold
)
787 int lineClick
= LineFromPosition(event
.GetPosition());
788 int levelClick
= GetFoldLevel(lineClick
);
789 if ((levelClick
& wxSTC_FOLDLEVELHEADERFLAG
) > 0)
791 ToggleFold(lineClick
);
796 void MinimalEditor::OnText(wxStyledTextEvent
& event
)
798 wxLogDebug(wxT("Modified"));
802 class MinimalEditorFrame
: public wxFrame
805 MinimalEditorFrame() : wxFrame(NULL
, wxID_ANY
, _("Minimal Editor"))
807 MinimalEditor
* editor
= new MinimalEditor(this);
808 editor
->SetFont(wxSystemSettings::GetFont(wxSYS_ANSI_FIXED_FONT
));
809 wxBoxSizer
* sizer
= new wxBoxSizer(wxHORIZONTAL
);
810 sizer
->Add(editor
, 1, wxEXPAND
);
815 " This is xml with syntax highlighting, line numbers, folding, word wrap and context menu\n"
822 wxFrame
* App::MinimalEditor()
824 MinimalEditorFrame
* frame
= new MinimalEditorFrame
;
829 void App::OnMinimalEditor(wxCommandEvent
& WXUNUSED(event
))