+
+// 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\tBksp"));
+ 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"));
+
+ // 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 (mondrian));
+ 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 () {
+ if (m_timer) {
+ delete m_timer;
+ m_timer = NULL;
+ }
+}
+
+//----------------------------------------------------------------------------
+// event handlers
+void AppAbout::OnTimerEvent (wxTimerEvent &WXUNUSED(event)) {
+ if (m_timer) delete m_timer;
+ m_timer = NULL;
+ EndModal (wxID_OK);
+}
+