| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940 | 
							- //////////////////////////////////////////////////////////////////////////////
 
- // File:        contrib/samples/stc/edit.cpp
 
- // Purpose:     STC test module
 
- // Maintainer:  Wyo
 
- // Created:     2003-09-01
 
- // Copyright:   (c) wxGuide
 
- // Licence:     wxWindows licence
 
- //////////////////////////////////////////////////////////////////////////////
 
- //----------------------------------------------------------------------------
 
- // informations
 
- //----------------------------------------------------------------------------
 
- //----------------------------------------------------------------------------
 
- // 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"
 
-     #include "wx/textdlg.h"
 
- #endif
 
- //! wxWidgets headers
 
- #include "wx/file.h"     // raw file io support
 
- #include "wx/filename.h" // filename support
 
- //! application headers
 
- #include "defsext.h"     // additional definitions
 
- #include "edit.h"        // edit module
 
- //----------------------------------------------------------------------------
 
- // resources
 
- //----------------------------------------------------------------------------
 
- //============================================================================
 
- // declarations
 
- //============================================================================
 
- // The (uniform) style used for the annotations.
 
- const int ANNOTATION_STYLE = wxSTC_STYLE_LASTPREDEFINED + 1;
 
- //============================================================================
 
- // implementation
 
- //============================================================================
 
- //----------------------------------------------------------------------------
 
- // Edit
 
- //----------------------------------------------------------------------------
 
- wxBEGIN_EVENT_TABLE (Edit, wxStyledTextCtrl)
 
-     // common
 
-     EVT_SIZE (                         Edit::OnSize)
 
-     // edit
 
-     EVT_MENU (wxID_CLEAR,              Edit::OnEditClear)
 
-     EVT_MENU (wxID_CUT,                Edit::OnEditCut)
 
-     EVT_MENU (wxID_COPY,               Edit::OnEditCopy)
 
-     EVT_MENU (wxID_PASTE,              Edit::OnEditPaste)
 
-     EVT_MENU (myID_INDENTINC,          Edit::OnEditIndentInc)
 
-     EVT_MENU (myID_INDENTRED,          Edit::OnEditIndentRed)
 
-     EVT_MENU (wxID_SELECTALL,          Edit::OnEditSelectAll)
 
-     EVT_MENU (myID_SELECTLINE,         Edit::OnEditSelectLine)
 
-     EVT_MENU (wxID_REDO,               Edit::OnEditRedo)
 
-     EVT_MENU (wxID_UNDO,               Edit::OnEditUndo)
 
-     // find
 
-     EVT_MENU (wxID_FIND,               Edit::OnFind)
 
-     EVT_MENU (myID_FINDNEXT,           Edit::OnFindNext)
 
-     EVT_MENU (myID_REPLACE,            Edit::OnReplace)
 
-     EVT_MENU (myID_REPLACENEXT,        Edit::OnReplaceNext)
 
-     EVT_MENU (myID_BRACEMATCH,         Edit::OnBraceMatch)
 
-     EVT_MENU (myID_GOTO,               Edit::OnGoto)
 
-     // view
 
-     EVT_MENU_RANGE (myID_HILIGHTFIRST, myID_HILIGHTLAST,
 
-                                        Edit::OnHilightLang)
 
-     EVT_MENU (myID_DISPLAYEOL,         Edit::OnDisplayEOL)
 
-     EVT_MENU (myID_INDENTGUIDE,        Edit::OnIndentGuide)
 
-     EVT_MENU (myID_LINENUMBER,         Edit::OnLineNumber)
 
-     EVT_MENU (myID_LONGLINEON,         Edit::OnLongLineOn)
 
-     EVT_MENU (myID_WHITESPACE,         Edit::OnWhiteSpace)
 
-     EVT_MENU (myID_FOLDTOGGLE,         Edit::OnFoldToggle)
 
-     EVT_MENU (myID_OVERTYPE,           Edit::OnSetOverType)
 
-     EVT_MENU (myID_READONLY,           Edit::OnSetReadOnly)
 
-     EVT_MENU (myID_WRAPMODEON,         Edit::OnWrapmodeOn)
 
-     EVT_MENU (myID_CHARSETANSI,        Edit::OnUseCharset)
 
-     EVT_MENU (myID_CHARSETMAC,         Edit::OnUseCharset)
 
-     // annotations
 
-     EVT_MENU (myID_ANNOTATION_ADD,     Edit::OnAnnotationAdd)
 
-     EVT_MENU (myID_ANNOTATION_REMOVE,  Edit::OnAnnotationRemove)
 
-     EVT_MENU (myID_ANNOTATION_CLEAR,   Edit::OnAnnotationClear)
 
-     EVT_MENU (myID_ANNOTATION_STYLE_HIDDEN,   Edit::OnAnnotationStyle)
 
-     EVT_MENU (myID_ANNOTATION_STYLE_STANDARD, Edit::OnAnnotationStyle)
 
-     EVT_MENU (myID_ANNOTATION_STYLE_BOXED,    Edit::OnAnnotationStyle)
 
-     // extra
 
-     EVT_MENU (myID_CHANGELOWER,        Edit::OnChangeCase)
 
-     EVT_MENU (myID_CHANGEUPPER,        Edit::OnChangeCase)
 
-     EVT_MENU (myID_CONVERTCR,          Edit::OnConvertEOL)
 
-     EVT_MENU (myID_CONVERTCRLF,        Edit::OnConvertEOL)
 
-     EVT_MENU (myID_CONVERTLF,          Edit::OnConvertEOL)
 
-     // stc
 
-     EVT_STC_MARGINCLICK (wxID_ANY,     Edit::OnMarginClick)
 
-     EVT_STC_CHARADDED (wxID_ANY,       Edit::OnCharAdded)
 
-     EVT_STC_KEY( wxID_ANY , Edit::OnKey )
 
-     EVT_KEY_DOWN( Edit::OnKeyDown )
 
- wxEND_EVENT_TABLE()
 
- Edit::Edit (wxWindow *parent, wxWindowID id,
 
-             const wxPoint &pos,
 
-             const wxSize &size,
 
-             long style)
 
-     : wxStyledTextCtrl (parent, id, pos, size, style) {
 
-     m_filename = wxEmptyString;
 
-     m_LineNrID = 0;
 
-     m_DividerID = 1;
 
-     m_FoldingID = 2;
 
-     // initialize language
 
-     m_language = NULL;
 
-     // Use all the bits in the style byte as styles, not indicators.
 
-     SetStyleBits(8);
 
-     
 
-     // default font for all styles
 
-     SetViewEOL (g_CommonPrefs.displayEOLEnable);
 
-     SetIndentationGuides (g_CommonPrefs.indentGuideEnable);
 
-     SetEdgeMode (g_CommonPrefs.longLineOnEnable?
 
-                  wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
 
-     SetViewWhiteSpace (g_CommonPrefs.whiteSpaceEnable?
 
-                        wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
 
-     SetOvertype (g_CommonPrefs.overTypeInitial);
 
-     SetReadOnly (g_CommonPrefs.readOnlyInitial);
 
-     SetWrapMode (g_CommonPrefs.wrapModeInitial?
 
-                  wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
 
-     wxFont font (10, wxMODERN, wxNORMAL, wxNORMAL);
 
-     StyleSetFont (wxSTC_STYLE_DEFAULT, font);
 
-     StyleSetForeground (wxSTC_STYLE_DEFAULT, *wxBLACK);
 
-     StyleSetBackground (wxSTC_STYLE_DEFAULT, *wxWHITE);
 
-     StyleSetForeground (wxSTC_STYLE_LINENUMBER, wxColour (wxT("DARK GREY")));
 
-     StyleSetBackground (wxSTC_STYLE_LINENUMBER, *wxWHITE);
 
-     StyleSetForeground(wxSTC_STYLE_INDENTGUIDE, wxColour (wxT("DARK GREY")));
 
-     InitializePrefs (DEFAULT_LANGUAGE);
 
-     // set visibility
 
-     SetVisiblePolicy (wxSTC_VISIBLE_STRICT|wxSTC_VISIBLE_SLOP, 1);
 
-     SetXCaretPolicy (wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, 1);
 
-     SetYCaretPolicy (wxSTC_CARET_EVEN|wxSTC_VISIBLE_STRICT|wxSTC_CARET_SLOP, 1);
 
-     // markers
 
-     MarkerDefine (wxSTC_MARKNUM_FOLDER,        wxSTC_MARK_DOTDOTDOT, wxT("BLACK"), wxT("BLACK"));
 
-     MarkerDefine (wxSTC_MARKNUM_FOLDEROPEN,    wxSTC_MARK_ARROWDOWN, wxT("BLACK"), wxT("BLACK"));
 
-     MarkerDefine (wxSTC_MARKNUM_FOLDERSUB,     wxSTC_MARK_EMPTY,     wxT("BLACK"), wxT("BLACK"));
 
-     MarkerDefine (wxSTC_MARKNUM_FOLDEREND,     wxSTC_MARK_DOTDOTDOT, wxT("BLACK"), wxT("WHITE"));
 
-     MarkerDefine (wxSTC_MARKNUM_FOLDEROPENMID, wxSTC_MARK_ARROWDOWN, wxT("BLACK"), wxT("WHITE"));
 
-     MarkerDefine (wxSTC_MARKNUM_FOLDERMIDTAIL, wxSTC_MARK_EMPTY,     wxT("BLACK"), wxT("BLACK"));
 
-     MarkerDefine (wxSTC_MARKNUM_FOLDERTAIL,    wxSTC_MARK_EMPTY,     wxT("BLACK"), wxT("BLACK"));
 
-     // annotations
 
-     AnnotationSetVisible(wxSTC_ANNOTATION_BOXED);
 
-     // miscellaneous
 
-     m_LineNrMargin = TextWidth (wxSTC_STYLE_LINENUMBER, wxT("_999999"));
 
-     m_FoldingMargin = 16;
 
-     CmdKeyClear (wxSTC_KEY_TAB, 0); // this is done by the menu accelerator key
 
-     SetLayoutCache (wxSTC_CACHE_PAGE);
 
- }
 
- Edit::~Edit () {}
 
- //----------------------------------------------------------------------------
 
- // common event handlers
 
- void Edit::OnSize( wxSizeEvent& event ) {
 
-     int x = GetClientSize().x +
 
-             (g_CommonPrefs.lineNumberEnable? m_LineNrMargin: 0) +
 
-             (g_CommonPrefs.foldEnable? m_FoldingMargin: 0);
 
-     if (x > 0) SetScrollWidth (x);
 
-     event.Skip();
 
- }
 
- // edit event handlers
 
- void Edit::OnEditRedo (wxCommandEvent &WXUNUSED(event)) {
 
-     if (!CanRedo()) return;
 
-     Redo ();
 
- }
 
- void Edit::OnEditUndo (wxCommandEvent &WXUNUSED(event)) {
 
-     if (!CanUndo()) return;
 
-     Undo ();
 
- }
 
- void Edit::OnEditClear (wxCommandEvent &WXUNUSED(event)) {
 
-     if (GetReadOnly()) return;
 
-     Clear ();
 
- }
 
- void Edit::OnKey (wxStyledTextEvent &WXUNUSED(event))
 
- {
 
-     wxMessageBox("OnKey");
 
- }
 
- void Edit::OnKeyDown (wxKeyEvent &event)
 
- {
 
-     if (CallTipActive())
 
-         CallTipCancel();
 
-     if (event.GetKeyCode() == WXK_SPACE && event.ControlDown() && event.ShiftDown())
 
-     {
 
-         int pos = GetCurrentPos();
 
-         CallTipSetBackground(*wxYELLOW);
 
-         CallTipShow(pos,
 
-                     "This is a CallTip with multiple lines.\n"
 
-                     "It is meant to be a context sensitive popup helper for the user.");
 
-         return;
 
-     }
 
-     event.Skip();
 
- }
 
- void Edit::OnEditCut (wxCommandEvent &WXUNUSED(event)) {
 
-     if (GetReadOnly() || (GetSelectionEnd()-GetSelectionStart() <= 0)) return;
 
-     Cut ();
 
- }
 
- void Edit::OnEditCopy (wxCommandEvent &WXUNUSED(event)) {
 
-     if (GetSelectionEnd()-GetSelectionStart() <= 0) return;
 
-     Copy ();
 
- }
 
- void Edit::OnEditPaste (wxCommandEvent &WXUNUSED(event)) {
 
-     if (!CanPaste()) return;
 
-     Paste ();
 
- }
 
- void Edit::OnFind (wxCommandEvent &WXUNUSED(event)) {
 
- }
 
- void Edit::OnFindNext (wxCommandEvent &WXUNUSED(event)) {
 
- }
 
- void Edit::OnReplace (wxCommandEvent &WXUNUSED(event)) {
 
- }
 
- void Edit::OnReplaceNext (wxCommandEvent &WXUNUSED(event)) {
 
- }
 
- void Edit::OnBraceMatch (wxCommandEvent &WXUNUSED(event)) {
 
-     int min = GetCurrentPos ();
 
-     int max = BraceMatch (min);
 
-     if (max > (min+1)) {
 
-         BraceHighlight (min+1, max);
 
-         SetSelection (min+1, max);
 
-     }else{
 
-         BraceBadLight (min);
 
-     }
 
- }
 
- void Edit::OnGoto (wxCommandEvent &WXUNUSED(event)) {
 
- }
 
- void Edit::OnEditIndentInc (wxCommandEvent &WXUNUSED(event)) {
 
-     CmdKeyExecute (wxSTC_CMD_TAB);
 
- }
 
- void Edit::OnEditIndentRed (wxCommandEvent &WXUNUSED(event)) {
 
-     CmdKeyExecute (wxSTC_CMD_DELETEBACK);
 
- }
 
- void Edit::OnEditSelectAll (wxCommandEvent &WXUNUSED(event)) {
 
-     SetSelection (0, GetTextLength ());
 
- }
 
- void Edit::OnEditSelectLine (wxCommandEvent &WXUNUSED(event)) {
 
-     int lineStart = PositionFromLine (GetCurrentLine());
 
-     int lineEnd = PositionFromLine (GetCurrentLine() + 1);
 
-     SetSelection (lineStart, lineEnd);
 
- }
 
- void Edit::OnHilightLang (wxCommandEvent &event) {
 
-     InitializePrefs (g_LanguagePrefs [event.GetId() - myID_HILIGHTFIRST].name);
 
- }
 
- void Edit::OnDisplayEOL (wxCommandEvent &WXUNUSED(event)) {
 
-     SetViewEOL (!GetViewEOL());
 
- }
 
- void Edit::OnIndentGuide (wxCommandEvent &WXUNUSED(event)) {
 
-     SetIndentationGuides (!GetIndentationGuides());
 
- }
 
- void Edit::OnLineNumber (wxCommandEvent &WXUNUSED(event)) {
 
-     SetMarginWidth (m_LineNrID,
 
-                     GetMarginWidth (m_LineNrID) == 0? m_LineNrMargin: 0);
 
- }
 
- void Edit::OnLongLineOn (wxCommandEvent &WXUNUSED(event)) {
 
-     SetEdgeMode (GetEdgeMode() == 0? wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
 
- }
 
- void Edit::OnWhiteSpace (wxCommandEvent &WXUNUSED(event)) {
 
-     SetViewWhiteSpace (GetViewWhiteSpace() == 0?
 
-                        wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
 
- }
 
- void Edit::OnFoldToggle (wxCommandEvent &WXUNUSED(event)) {
 
-     ToggleFold (GetFoldParent(GetCurrentLine()));
 
- }
 
- void Edit::OnSetOverType (wxCommandEvent &WXUNUSED(event)) {
 
-     SetOvertype (!GetOvertype());
 
- }
 
- void Edit::OnSetReadOnly (wxCommandEvent &WXUNUSED(event)) {
 
-     SetReadOnly (!GetReadOnly());
 
- }
 
- void Edit::OnWrapmodeOn (wxCommandEvent &WXUNUSED(event)) {
 
-     SetWrapMode (GetWrapMode() == 0? wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
 
- }
 
- void Edit::OnUseCharset (wxCommandEvent &event) {
 
-     int Nr;
 
-     int charset = GetCodePage();
 
-     switch (event.GetId()) {
 
-         case myID_CHARSETANSI: {charset = wxSTC_CHARSET_ANSI; break;}
 
-         case myID_CHARSETMAC: {charset = wxSTC_CHARSET_ANSI; break;}
 
-     }
 
-     for (Nr = 0; Nr < wxSTC_STYLE_LASTPREDEFINED; Nr++) {
 
-         StyleSetCharacterSet (Nr, charset);
 
-     }
 
-     SetCodePage (charset);
 
- }
 
- void Edit::OnAnnotationAdd(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     const int line = GetCurrentLine();
 
-     wxString ann = AnnotationGetText(line);
 
-     ann = wxGetTextFromUser
 
-           (
 
-             wxString::Format("Enter annotation for the line %d", line),
 
-             "Edit annotation",
 
-             ann,
 
-             this
 
-           );
 
-     if ( ann.empty() )
 
-         return;
 
-     AnnotationSetText(line, ann);
 
-     AnnotationSetStyle(line, ANNOTATION_STYLE);
 
-     // Scintilla doesn't update the scroll width for annotations, even with
 
-     // scroll width tracking on, so do it manually.
 
-     const int width = GetScrollWidth();
 
-     // NB: The following adjustments are only needed when using
 
-     //     wxSTC_ANNOTATION_BOXED annotations style, but we apply them always
 
-     //     in order to make things simpler and not have to redo the width
 
-     //     calculations when the annotations visibility changes. In a real
 
-     //     program you'd either just stick to a fixed annotations visibility or
 
-     //     update the width when it changes.
 
-     // Take into account the fact that the annotation is shown indented, with
 
-     // the same indent as the line it's attached to.
 
-     int indent = GetLineIndentation(line);
 
-     // This is just a hack to account for the width of the box, there doesn't
 
-     // seem to be any way to get it directly from Scintilla.
 
-     indent += 3;
 
-     const int widthAnn = TextWidth(ANNOTATION_STYLE, ann + wxString(indent, ' '));
 
-     if (widthAnn > width)
 
-         SetScrollWidth(widthAnn);
 
- }
 
- void Edit::OnAnnotationRemove(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     AnnotationSetText(GetCurrentLine(), wxString());
 
- }
 
- void Edit::OnAnnotationClear(wxCommandEvent& WXUNUSED(event))
 
- {
 
-     AnnotationClearAll();
 
- }
 
- void Edit::OnAnnotationStyle(wxCommandEvent& event)
 
- {
 
-     int style = 0;
 
-     switch (event.GetId()) {
 
-         case myID_ANNOTATION_STYLE_HIDDEN:
 
-             style = wxSTC_ANNOTATION_HIDDEN;
 
-             break;
 
-         case myID_ANNOTATION_STYLE_STANDARD:
 
-             style = wxSTC_ANNOTATION_STANDARD;
 
-             break;
 
-         case myID_ANNOTATION_STYLE_BOXED:
 
-             style = wxSTC_ANNOTATION_BOXED;
 
-             break;
 
-     }
 
-     AnnotationSetVisible(style);
 
- }
 
- void Edit::OnChangeCase (wxCommandEvent &event) {
 
-     switch (event.GetId()) {
 
-         case myID_CHANGELOWER: {
 
-             CmdKeyExecute (wxSTC_CMD_LOWERCASE);
 
-             break;
 
-         }
 
-         case myID_CHANGEUPPER: {
 
-             CmdKeyExecute (wxSTC_CMD_UPPERCASE);
 
-             break;
 
-         }
 
-     }
 
- }
 
- void Edit::OnConvertEOL (wxCommandEvent &event) {
 
-     int eolMode = GetEOLMode();
 
-     switch (event.GetId()) {
 
-         case myID_CONVERTCR: { eolMode = wxSTC_EOL_CR; break;}
 
-         case myID_CONVERTCRLF: { eolMode = wxSTC_EOL_CRLF; break;}
 
-         case myID_CONVERTLF: { eolMode = wxSTC_EOL_LF; break;}
 
-     }
 
-     ConvertEOLs (eolMode);
 
-     SetEOLMode (eolMode);
 
- }
 
- //! misc
 
- void Edit::OnMarginClick (wxStyledTextEvent &event) {
 
-     if (event.GetMargin() == 2) {
 
-         int lineClick = LineFromPosition (event.GetPosition());
 
-         int levelClick = GetFoldLevel (lineClick);
 
-         if ((levelClick & wxSTC_FOLDLEVELHEADERFLAG) > 0) {
 
-             ToggleFold (lineClick);
 
-         }
 
-     }
 
- }
 
- void Edit::OnCharAdded (wxStyledTextEvent &event) {
 
-     char chr = (char)event.GetKey();
 
-     int currentLine = GetCurrentLine();
 
-     // Change this if support for mac files with \r is needed
 
-     if (chr == '\n') {
 
-         int lineInd = 0;
 
-         if (currentLine > 0) {
 
-             lineInd = GetLineIndentation(currentLine - 1);
 
-         }
 
-         if (lineInd == 0) return;
 
-         SetLineIndentation (currentLine, lineInd);
 
-         GotoPos(PositionFromLine (currentLine) + lineInd);
 
-     }
 
- }
 
- //----------------------------------------------------------------------------
 
- // private functions
 
- wxString Edit::DeterminePrefs (const wxString &filename) {
 
-     LanguageInfo const* curInfo;
 
-     // determine language from filepatterns
 
-     int languageNr;
 
-     for (languageNr = 0; languageNr < g_LanguagePrefsSize; languageNr++) {
 
-         curInfo = &g_LanguagePrefs [languageNr];
 
-         wxString filepattern = curInfo->filepattern;
 
-         filepattern.Lower();
 
-         while (!filepattern.empty()) {
 
-             wxString cur = filepattern.BeforeFirst (';');
 
-             if ((cur == filename) ||
 
-                 (cur == (filename.BeforeLast ('.') + wxT(".*"))) ||
 
-                 (cur == (wxT("*.") + filename.AfterLast ('.')))) {
 
-                 return curInfo->name;
 
-             }
 
-             filepattern = filepattern.AfterFirst (';');
 
-         }
 
-     }
 
-     return wxEmptyString;
 
- }
 
- bool Edit::InitializePrefs (const wxString &name) {
 
-     // initialize styles
 
-     StyleClearAll();
 
-     LanguageInfo const* curInfo = NULL;
 
-     // determine language
 
-     bool found = false;
 
-     int languageNr;
 
-     for (languageNr = 0; languageNr < g_LanguagePrefsSize; languageNr++) {
 
-         curInfo = &g_LanguagePrefs [languageNr];
 
-         if (curInfo->name == name) {
 
-             found = true;
 
-             break;
 
-         }
 
-     }
 
-     if (!found) return false;
 
-     // set lexer and language
 
-     SetLexer (curInfo->lexer);
 
-     m_language = curInfo;
 
-     // set margin for line numbers
 
-     SetMarginType (m_LineNrID, wxSTC_MARGIN_NUMBER);
 
-     StyleSetForeground (wxSTC_STYLE_LINENUMBER, wxColour (wxT("DARK GREY")));
 
-     StyleSetBackground (wxSTC_STYLE_LINENUMBER, *wxWHITE);
 
-     SetMarginWidth (m_LineNrID, 0); // start out not visible
 
-     // annotations style
 
-     StyleSetBackground(ANNOTATION_STYLE, wxColour(244, 220, 220));
 
-     StyleSetForeground(ANNOTATION_STYLE, *wxBLACK);
 
-     StyleSetSizeFractional(ANNOTATION_STYLE,
 
-             (StyleGetSizeFractional(wxSTC_STYLE_DEFAULT)*4)/5);
 
-     // default fonts for all styles!
 
-     int Nr;
 
-     for (Nr = 0; Nr < wxSTC_STYLE_LASTPREDEFINED; Nr++) {
 
-         wxFont font (10, wxMODERN, wxNORMAL, wxNORMAL);
 
-         StyleSetFont (Nr, font);
 
-     }
 
-     // set common styles
 
-     StyleSetForeground (wxSTC_STYLE_DEFAULT, wxColour (wxT("DARK GREY")));
 
-     StyleSetForeground (wxSTC_STYLE_INDENTGUIDE, wxColour (wxT("DARK GREY")));
 
-     // initialize settings
 
-     if (g_CommonPrefs.syntaxEnable) {
 
-         int keywordnr = 0;
 
-         for (Nr = 0; Nr < STYLE_TYPES_COUNT; Nr++) {
 
-             if (curInfo->styles[Nr].type == -1) continue;
 
-             const StyleInfo &curType = g_StylePrefs [curInfo->styles[Nr].type];
 
-             wxFont font (curType.fontsize, wxMODERN, wxNORMAL, wxNORMAL, false,
 
-                          curType.fontname);
 
-             StyleSetFont (Nr, font);
 
-             if (curType.foreground) {
 
-                 StyleSetForeground (Nr, wxColour (curType.foreground));
 
-             }
 
-             if (curType.background) {
 
-                 StyleSetBackground (Nr, wxColour (curType.background));
 
-             }
 
-             StyleSetBold (Nr, (curType.fontstyle & mySTC_STYLE_BOLD) > 0);
 
-             StyleSetItalic (Nr, (curType.fontstyle & mySTC_STYLE_ITALIC) > 0);
 
-             StyleSetUnderline (Nr, (curType.fontstyle & mySTC_STYLE_UNDERL) > 0);
 
-             StyleSetVisible (Nr, (curType.fontstyle & mySTC_STYLE_HIDDEN) == 0);
 
-             StyleSetCase (Nr, curType.lettercase);
 
-             const char *pwords = curInfo->styles[Nr].words;
 
-             if (pwords) {
 
-                 SetKeyWords (keywordnr, pwords);
 
-                 keywordnr += 1;
 
-             }
 
-         }
 
-     }
 
-     // set margin as unused
 
-     SetMarginType (m_DividerID, wxSTC_MARGIN_SYMBOL);
 
-     SetMarginWidth (m_DividerID, 0);
 
-     SetMarginSensitive (m_DividerID, false);
 
-     // folding
 
-     SetMarginType (m_FoldingID, wxSTC_MARGIN_SYMBOL);
 
-     SetMarginMask (m_FoldingID, wxSTC_MASK_FOLDERS);
 
-     StyleSetBackground (m_FoldingID, *wxWHITE);
 
-     SetMarginWidth (m_FoldingID, 0);
 
-     SetMarginSensitive (m_FoldingID, false);
 
-     if (g_CommonPrefs.foldEnable) {
 
-         SetMarginWidth (m_FoldingID, curInfo->folds != 0? m_FoldingMargin: 0);
 
-         SetMarginSensitive (m_FoldingID, curInfo->folds != 0);
 
-         SetProperty (wxT("fold"), curInfo->folds != 0? wxT("1"): wxT("0"));
 
-         SetProperty (wxT("fold.comment"),
 
-                      (curInfo->folds & mySTC_FOLD_COMMENT) > 0? wxT("1"): wxT("0"));
 
-         SetProperty (wxT("fold.compact"),
 
-                      (curInfo->folds & mySTC_FOLD_COMPACT) > 0? wxT("1"): wxT("0"));
 
-         SetProperty (wxT("fold.preprocessor"),
 
-                      (curInfo->folds & mySTC_FOLD_PREPROC) > 0? wxT("1"): wxT("0"));
 
-         SetProperty (wxT("fold.html"),
 
-                      (curInfo->folds & mySTC_FOLD_HTML) > 0? wxT("1"): wxT("0"));
 
-         SetProperty (wxT("fold.html.preprocessor"),
 
-                      (curInfo->folds & mySTC_FOLD_HTMLPREP) > 0? wxT("1"): wxT("0"));
 
-         SetProperty (wxT("fold.comment.python"),
 
-                      (curInfo->folds & mySTC_FOLD_COMMENTPY) > 0? wxT("1"): wxT("0"));
 
-         SetProperty (wxT("fold.quotes.python"),
 
-                      (curInfo->folds & mySTC_FOLD_QUOTESPY) > 0? wxT("1"): wxT("0"));
 
-     }
 
-     SetFoldFlags (wxSTC_FOLDFLAG_LINEBEFORE_CONTRACTED |
 
-                   wxSTC_FOLDFLAG_LINEAFTER_CONTRACTED);
 
-     // set spaces and indention
 
-     SetTabWidth (4);
 
-     SetUseTabs (false);
 
-     SetTabIndents (true);
 
-     SetBackSpaceUnIndents (true);
 
-     SetIndent (g_CommonPrefs.indentEnable? 4: 0);
 
-     // others
 
-     SetViewEOL (g_CommonPrefs.displayEOLEnable);
 
-     SetIndentationGuides (g_CommonPrefs.indentGuideEnable);
 
-     SetEdgeColumn (80);
 
-     SetEdgeMode (g_CommonPrefs.longLineOnEnable? wxSTC_EDGE_LINE: wxSTC_EDGE_NONE);
 
-     SetViewWhiteSpace (g_CommonPrefs.whiteSpaceEnable?
 
-                        wxSTC_WS_VISIBLEALWAYS: wxSTC_WS_INVISIBLE);
 
-     SetOvertype (g_CommonPrefs.overTypeInitial);
 
-     SetReadOnly (g_CommonPrefs.readOnlyInitial);
 
-     SetWrapMode (g_CommonPrefs.wrapModeInitial?
 
-                  wxSTC_WRAP_WORD: wxSTC_WRAP_NONE);
 
-     return true;
 
- }
 
- bool Edit::LoadFile ()
 
- {
 
- #if wxUSE_FILEDLG
 
-     // get filname
 
-     if (!m_filename) {
 
-         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 false;
 
-         m_filename = dlg.GetPath();
 
-     }
 
-     // load file
 
-     return LoadFile (m_filename);
 
- #else
 
-     return false;
 
- #endif // wxUSE_FILEDLG
 
- }
 
- bool Edit::LoadFile (const wxString &filename) {
 
-     // load file in edit and clear undo
 
-     if (!filename.empty()) m_filename = filename;
 
-     wxStyledTextCtrl::LoadFile(m_filename);
 
-     EmptyUndoBuffer();
 
-     // determine lexer language
 
-     wxFileName fname (m_filename);
 
-     InitializePrefs (DeterminePrefs (fname.GetFullName()));
 
-     return true;
 
- }
 
- bool Edit::SaveFile ()
 
- {
 
- #if wxUSE_FILEDLG
 
-     // return if no change
 
-     if (!Modified()) return true;
 
-     // get filname
 
-     if (!m_filename) {
 
-         wxFileDialog dlg (this, wxT("Save file"), wxEmptyString, wxEmptyString, wxT("Any file (*)|*"),
 
-                           wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
 
-         if (dlg.ShowModal() != wxID_OK) return false;
 
-         m_filename = dlg.GetPath();
 
-     }
 
-     // save file
 
-     return SaveFile (m_filename);
 
- #else
 
-     return false;
 
- #endif // wxUSE_FILEDLG
 
- }
 
- bool Edit::SaveFile (const wxString &filename) {
 
-     // return if no change
 
-     if (!Modified()) return true;
 
- //     // save edit in file and clear undo
 
- //     if (!filename.empty()) m_filename = filename;
 
- //     wxFile file (m_filename, wxFile::write);
 
- //     if (!file.IsOpened()) return false;
 
- //     wxString buf = GetText();
 
- //     bool okay = file.Write (buf);
 
- //     file.Close();
 
- //     if (!okay) return false;
 
- //     EmptyUndoBuffer();
 
- //     SetSavePoint();
 
- //     return true;
 
-     return wxStyledTextCtrl::SaveFile(filename);
 
- }
 
- bool Edit::Modified () {
 
-     // return modified state
 
-     return (GetModify() && !GetReadOnly());
 
- }
 
- //----------------------------------------------------------------------------
 
- // EditProperties
 
- //----------------------------------------------------------------------------
 
- EditProperties::EditProperties (Edit *edit,
 
-                                 long style)
 
-         : wxDialog (edit, wxID_ANY, wxEmptyString,
 
-                     wxDefaultPosition, wxDefaultSize,
 
-                     style | wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) {
 
-     // sets the application title
 
-     SetTitle (_("Properties"));
 
-     wxString text;
 
-     // fullname
 
-     wxBoxSizer *fullname = new wxBoxSizer (wxHORIZONTAL);
 
-     fullname->Add (10, 0);
 
-     fullname->Add (new wxStaticText (this, wxID_ANY, _("Full filename"),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
 
-     fullname->Add (new wxStaticText (this, wxID_ANY, edit->GetFilename()),
 
-                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
 
-     // text info
 
-     wxGridSizer *textinfo = new wxGridSizer (4, 0, 2);
 
-     textinfo->Add (new wxStaticText (this, wxID_ANY, _("Language"),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
 
-     textinfo->Add (new wxStaticText (this, wxID_ANY, edit->m_language->name),
 
-                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
 
-     textinfo->Add (new wxStaticText (this, wxID_ANY, _("Lexer-ID: "),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
 
-     text = wxString::Format (wxT("%d"), edit->GetLexer());
 
-     textinfo->Add (new wxStaticText (this, wxID_ANY, text),
 
-                    0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
 
-     wxString EOLtype = wxEmptyString;
 
-     switch (edit->GetEOLMode()) {
 
-         case wxSTC_EOL_CR: {EOLtype = wxT("CR (Unix)"); break; }
 
-         case wxSTC_EOL_CRLF: {EOLtype = wxT("CRLF (Windows)"); break; }
 
-         case wxSTC_EOL_LF: {EOLtype = wxT("CR (Macintosh)"); break; }
 
-     }
 
-     textinfo->Add (new wxStaticText (this, wxID_ANY, _("Line endings"),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
 
-     textinfo->Add (new wxStaticText (this, wxID_ANY, EOLtype),
 
-                    0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
 
-     // text info box
 
-     wxStaticBoxSizer *textinfos = new wxStaticBoxSizer (
 
-                      new wxStaticBox (this, wxID_ANY, _("Informations")),
 
-                      wxVERTICAL);
 
-     textinfos->Add (textinfo, 0, wxEXPAND);
 
-     textinfos->Add (0, 6);
 
-     // statistic
 
-     wxGridSizer *statistic = new wxGridSizer (4, 0, 2);
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, _("Total lines"),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                     0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
 
-     text = wxString::Format (wxT("%d"), edit->GetLineCount());
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, text),
 
-                     0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, _("Total chars"),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                     0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
 
-     text = wxString::Format (wxT("%d"), edit->GetTextLength());
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, text),
 
-                     0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, _("Current line"),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                     0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
 
-     text = wxString::Format (wxT("%d"), edit->GetCurrentLine());
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, text),
 
-                     0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, _("Current pos"),
 
-                                      wxDefaultPosition, wxSize(80, wxDefaultCoord)),
 
-                     0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 4);
 
-     text = wxString::Format (wxT("%d"), edit->GetCurrentPos());
 
-     statistic->Add (new wxStaticText (this, wxID_ANY, text),
 
-                     0, wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL|wxRIGHT, 4);
 
-     // char/line statistics
 
-     wxStaticBoxSizer *statistics = new wxStaticBoxSizer (
 
-                      new wxStaticBox (this, wxID_ANY, _("Statistics")),
 
-                      wxVERTICAL);
 
-     statistics->Add (statistic, 0, wxEXPAND);
 
-     statistics->Add (0, 6);
 
-     // total pane
 
-     wxBoxSizer *totalpane = new wxBoxSizer (wxVERTICAL);
 
-     totalpane->Add (fullname, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 10);
 
-     totalpane->Add (0, 6);
 
-     totalpane->Add (textinfos, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
 
-     totalpane->Add (0, 10);
 
-     totalpane->Add (statistics, 0, wxEXPAND | wxLEFT | wxRIGHT, 10);
 
-     totalpane->Add (0, 6);
 
-     wxButton *okButton = new wxButton (this, wxID_OK, _("OK"));
 
-     okButton->SetDefault();
 
-     totalpane->Add (okButton, 0, wxALIGN_CENTER | wxALL, 10);
 
-     SetSizerAndFit (totalpane);
 
-     ShowModal();
 
- }
 
- #if wxUSE_PRINTING_ARCHITECTURE
 
- //----------------------------------------------------------------------------
 
- // EditPrint
 
- //----------------------------------------------------------------------------
 
- EditPrint::EditPrint (Edit *edit, const wxChar *title)
 
-               : wxPrintout(title) {
 
-     m_edit = edit;
 
-     m_printed = 0;
 
- }
 
- bool EditPrint::OnPrintPage (int page) {
 
-     wxDC *dc = GetDC();
 
-     if (!dc) return false;
 
-     // scale DC
 
-     PrintScaling (dc);
 
-     // print page
 
-     if (page == 1) m_printed = 0;
 
-     m_printed = m_edit->FormatRange (1, m_printed, m_edit->GetLength(),
 
-                                      dc, dc, m_printRect, m_pageRect);
 
-     return true;
 
- }
 
- bool EditPrint::OnBeginDocument (int startPage, int endPage) {
 
-     if (!wxPrintout::OnBeginDocument (startPage, endPage)) {
 
-         return false;
 
-     }
 
-     return true;
 
- }
 
- void EditPrint::GetPageInfo (int *minPage, int *maxPage, int *selPageFrom, int *selPageTo) {
 
-     // initialize values
 
-     *minPage = 0;
 
-     *maxPage = 0;
 
-     *selPageFrom = 0;
 
-     *selPageTo = 0;
 
-     // scale DC if possible
 
-     wxDC *dc = GetDC();
 
-     if (!dc) return;
 
-     PrintScaling (dc);
 
-     // get print page informations and convert to printer pixels
 
-     wxSize ppiScr;
 
-     GetPPIScreen (&ppiScr.x, &ppiScr.y);
 
-     wxSize page = g_pageSetupData->GetPaperSize();
 
-     page.x = static_cast<int> (page.x * ppiScr.x / 25.4);
 
-     page.y = static_cast<int> (page.y * ppiScr.y / 25.4);
 
-     m_pageRect = wxRect (0,
 
-                          0,
 
-                          page.x,
 
-                          page.y);
 
-     // get margins informations and convert to printer pixels
 
-     wxPoint pt = g_pageSetupData->GetMarginTopLeft();
 
-     int left = pt.x;
 
-     int top = pt.y;
 
-     pt = g_pageSetupData->GetMarginBottomRight();
 
-     int right = pt.x;
 
-     int bottom = pt.y;
 
-     top = static_cast<int> (top * ppiScr.y / 25.4);
 
-     bottom = static_cast<int> (bottom * ppiScr.y / 25.4);
 
-     left = static_cast<int> (left * ppiScr.x / 25.4);
 
-     right = static_cast<int> (right * ppiScr.x / 25.4);
 
-     m_printRect = wxRect (left,
 
-                           top,
 
-                           page.x - (left + right),
 
-                           page.y - (top + bottom));
 
-     // count pages
 
-     while (HasPage (*maxPage)) {
 
-         m_printed = m_edit->FormatRange (0, m_printed, m_edit->GetLength(),
 
-                                        dc, dc, m_printRect, m_pageRect);
 
-         *maxPage += 1;
 
-     }
 
-     if (*maxPage > 0) *minPage = 1;
 
-     *selPageFrom = *minPage;
 
-     *selPageTo = *maxPage;
 
- }
 
- bool EditPrint::HasPage (int WXUNUSED(page)) {
 
-     return (m_printed < m_edit->GetLength());
 
- }
 
- bool EditPrint::PrintScaling (wxDC *dc){
 
-     // check for dc, return if none
 
-     if (!dc) return false;
 
-     // get printer and screen sizing values
 
-     wxSize ppiScr;
 
-     GetPPIScreen (&ppiScr.x, &ppiScr.y);
 
-     if (ppiScr.x == 0) { // most possible guess 96 dpi
 
-         ppiScr.x = 96;
 
-         ppiScr.y = 96;
 
-     }
 
-     wxSize ppiPrt;
 
-     GetPPIPrinter (&ppiPrt.x, &ppiPrt.y);
 
-     if (ppiPrt.x == 0) { // scaling factor to 1
 
-         ppiPrt.x = ppiScr.x;
 
-         ppiPrt.y = ppiScr.y;
 
-     }
 
-     wxSize dcSize = dc->GetSize();
 
-     wxSize pageSize;
 
-     GetPageSizePixels (&pageSize.x, &pageSize.y);
 
-     // set user scale
 
-     float scale_x = (float)(ppiPrt.x * dcSize.x) /
 
-                     (float)(ppiScr.x * pageSize.x);
 
-     float scale_y = (float)(ppiPrt.y * dcSize.y) /
 
-                     (float)(ppiScr.y * pageSize.y);
 
-     dc->SetUserScale (scale_x, scale_y);
 
-     return true;
 
- }
 
- #endif // wxUSE_PRINTING_ARCHITECTURE
 
 
  |