// Purpose: STC test application
// Maintainer: Otto Wyss
// Created: 2003-09-01
-// RCS-ID: $Id$
// Copyright: (c) wxGuide
// Licence: wxWindows licence
//////////////////////////////////////////////////////////////////////////////
#include "edit.h" // Edit module
#include "prefs.h" // Prefs
-#ifndef __WXMSW__
- #include "../sample.xpm"
-#endif
-
//----------------------------------------------------------------------------
// 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
//============================================================================
//! 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
//! frame window
AppFrame* m_frame;
+ wxFrame* MinimalEditor();
+protected:
+ void OnMinimalEditor(wxCommandEvent&);
+ DECLARE_EVENT_TABLE()
};
// created dynamically by wxWidgets
IMPLEMENT_APP (App)
+
+BEGIN_EVENT_TABLE(App, wxApp)
+EVT_MENU(myID_WINDOW_MINIMAL, App::OnMinimalEditor)
+END_EVENT_TABLE()
+
//----------------------------------------------------------------------------
// App
//----------------------------------------------------------------------------
// open application frame
m_frame->Layout ();
m_frame->Show (true);
- SetTopWindow (m_frame);
return true;
}
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 ()
{
SetIcon(wxICON(sample));
- // intitialize important variables
+ // initialize important variables
m_edit = NULL;
// set icon and background
SetTitle (*g_appname);
- SetIcon (wxICON (mondrian));
SetBackgroundColour (wxT("WHITE"));
- // about box shown for 1 seconds
- AppAbout dlg(this, 1000);
-
// create menu
m_menuBar = new wxMenuBar;
CreateMenu ();
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?"),
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"));
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 () {
// 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);
}
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(
+ "<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();
+}
+