wxWidgets/samples/stc/stctest.cpp
Vadim Zeitlin 4c5ec23654 Remove duplicate sample.xpm inclusion from stc sample.
This sample already included sample.xpm even before the recent changes
replacing mondrian.xpm (which it also included) inclusion with sample.xpm so
now it included it twice.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64726 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2010-06-25 08:47:17 +00:00

825 lines
28 KiB
C++

//////////////////////////////////////////////////////////////////////////////
// File: contrib/samples/stc/stctest.cpp
// Purpose: STC test application
// Maintainer: Otto Wyss
// Created: 2003-09-01
// RCS-ID: $Id$
// 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)
#if !defined(__WXMSW__) && !defined(__WXPM__)
#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;
wxPageSetupData *g_pageSetupData = (wxPageSetupData*) 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&);
DECLARE_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 ();
DECLARE_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;
DECLARE_EVENT_TABLE()
};
//============================================================================
// implementation
//============================================================================
IMPLEMENT_APP (App)
BEGIN_EVENT_TABLE(App, wxApp)
EVT_MENU(myID_WINDOW_MINIMAL, App::OnMinimalEditor)
END_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);
SetTopWindow (m_frame);
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
//----------------------------------------------------------------------------
BEGIN_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)
// edit
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,
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)
{
SetIcon(wxICON(sample));
// initialize important variables
m_edit = NULL;
// set icon and background
SetTitle (*g_appname);
SetBackgroundColour (wxT("WHITE"));
// about box shown for 1 seconds
AppAbout dlg(this, 1000);
// 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->Ok()) {
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);
// 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 ..\tShift+F1"));
// construct menu
m_menuBar->Append (menuFile, _("&File"));
m_menuBar->Append (menuEdit, _("&Edit"));
m_menuBar->Append (menuView, _("&View"));
m_menuBar->Append (menuExtra, _("E&xtra"));
m_menuBar->Append (menuWindow, _("&Window"));
m_menuBar->Append (menuHelp, _("&Help"));
SetMenuBar (m_menuBar);
}
void AppFrame::FileOpen (wxString fname)
{
wxFileName w(fname); w.Normalize(); fname = w.GetFullPath();
m_edit->LoadFile (fname);
}
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
//----------------------------------------------------------------------------
BEGIN_EVENT_TABLE (AppAbout, wxDialog)
EVT_TIMER (myID_ABOUTTIMER, AppAbout::OnTimerEvent)
END_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&);
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(
"<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();
}