X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8a693e6e0460b6b3c32e4b6f114a3ab7b7cd24ea..f6bcfd974ef26faf6f91a62cac09827e09463fd1:/wxPython/demo/data/stc.h?ds=sidebyside diff --git a/wxPython/demo/data/stc.h b/wxPython/demo/data/stc.h new file mode 100644 index 0000000000..f2a514524e --- /dev/null +++ b/wxPython/demo/data/stc.h @@ -0,0 +1,627 @@ +//////////////////////////////////////////////////////////////////////////// +// Name: stc.h +// Purpose: A wxWindows implementation of Scintilla. This class is the +// one meant to be used directly by wx applications. It does not +// derive directly from the Scintilla classes, and in fact there +// is no mention of Scintilla classes at all in this header. +// This class delegates all method calls and events to the +// Scintilla objects and so forth. This allows the use of +// Scintilla without polluting the namespace with all the +// classes and itentifiers from Scintilla. +// +// Author: Robin Dunn +// +// Created: 13-Jan-2000 +// RCS-ID: $Id$ +// Copyright: (c) 2000 by Total Control Software +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifndef __stc_h__ +#define __stc_h__ + + +#include + + +//---------------------------------------------------------------------- +// constants and stuff + +enum wxSTC_UndoType { + wxSTC_UndoCollectNone, + wxSTC_UndoCollectAutoStart +}; + + +enum wxSTC_EOL { + wxSTC_EOL_CRLF, + wxSTC_EOL_CR, + wxSTC_EOL_LF +}; + +enum wxSTC_EDGE { + wxSTC_EDGE_NONE, + wxSTC_EDGE_LINE, + wxSTC_EDGE_BACKGROUND +}; + + + +const int wxSTC_LEX_STYLE_MAX = 31; +const int wxSTC_STYLE_DEFAULT = 32; +const int wxSTC_STYLE_LINENUMBER = 33; +const int wxSTC_STYLE_BRACELIGHT = 34; +const int wxSTC_STYLE_BRACEBAD = 35; +const int wxSTC_STYLE_CONTROLCHAR = 36; +const int wxSTC_STYLE_MAX = 127; +const int wxSTC_STYLE_MASK = 31; + +const int wxSTC_MARKER_MAX = 31; +const int wxSTC_MARK_CIRCLE = 0; +const int wxSTC_MARK_ROUNDRECT = 1; +const int wxSTC_MARK_ARROW = 2; +const int wxSTC_MARK_SMALLRECT = 3; +const int wxSTC_MARK_SHORTARROW = 4; +const int wxSTC_MARK_EMPTY = 5; +const int wxSTC_MARK_ARROWDOWN = 6; +const int wxSTC_MARK_MINUS = 7; +const int wxSTC_MARK_PLUS = 8; + +const int wxSTC_MARKNUM_FOLDER = 30; +const int wxSTC_MARKNUM_FOLDEROPEN= 31; +const int wxSTC_MASK_FOLDERS = ((1 << wxSTC_MARKNUM_FOLDER) | (1 << wxSTC_MARKNUM_FOLDEROPEN)); + +const int wxSTC_INDIC_MAX = 7; +const int wxSTC_INDIC_PLAIN = 0; +const int wxSTC_INDIC_SQUIGGLE = 1; +const int wxSTC_INDIC_TT = 2; +const int wxSTC_INDIC0_MASK = 32; +const int wxSTC_INDIC1_MASK = 64; +const int wxSTC_INDIC2_MASK = 128; +const int wxSTC_INDICS_MASK = (wxSTC_INDIC0_MASK | wxSTC_INDIC1_MASK | wxSTC_INDIC2_MASK); + + +const int wxSTC_FOLDLEVELBASE = 0x0400; +const int wxSTC_FOLDLEVELWHITEFLAG = 0x1000; +const int wxSTC_FOLDLEVELHEADERFLAG = 0x2000; +const int wxSTC_FOLDLEVELNUMBERMASK = 0x0FFF; + + +// key commands +enum { + wxSTC_CMD_LINEDOWN = 2300, + wxSTC_CMD_LINEDOWNEXTEND, + wxSTC_CMD_LINEUP, + wxSTC_CMD_LINEUPEXTEND, + wxSTC_CMD_CHARLEFT, + wxSTC_CMD_CHARLEFTEXTEND, + wxSTC_CMD_CHARRIGHT, + wxSTC_CMD_CHARRIGHTEXTEND, + wxSTC_CMD_WORDLEFT, + wxSTC_CMD_WORDLEFTEXTEND, + wxSTC_CMD_WORDRIGHT, + wxSTC_CMD_WORDRIGHTEXTEND, + wxSTC_CMD_HOME, + wxSTC_CMD_HOMEEXTEND, + wxSTC_CMD_LINEEND, + wxSTC_CMD_LINEENDEXTEND, + wxSTC_CMD_DOCUMENTSTART, + wxSTC_CMD_DOCUMENTSTARTEXTEND, + wxSTC_CMD_DOCUMENTEND, + wxSTC_CMD_DOCUMENTENDEXTEND, + wxSTC_CMD_PAGEUP, + wxSTC_CMD_PAGEUPEXTEND, + wxSTC_CMD_PAGEDOWN, + wxSTC_CMD_PAGEDOWNEXTEND, + wxSTC_CMD_EDITTOGGLEOVERTYPE, + wxSTC_CMD_CANCEL, + wxSTC_CMD_DELETEBACK, + wxSTC_CMD_TAB, + wxSTC_CMD_BACKTAB, + wxSTC_CMD_NEWLINE, + wxSTC_CMD_FORMFEED, + wxSTC_CMD_VCHOME, + wxSTC_CMD_VCHOMEEXTEND, + wxSTC_CMD_ZOOMIN, + wxSTC_CMD_ZOOMOUT, + wxSTC_CMD_DELWORDLEFT, + wxSTC_CMD_DELWORDRIGHT, + wxSTC_CMD_LINECUT, + wxSTC_CMD_LINEDELETE, + wxSTC_CMD_LINETRANSPOSE, + wxSTC_CMD_LOWERCASE, + wxSTC_CMD_UPPERCASE, + wxSTC_CMD_LINESCROLLDOWN, + wxSTC_CMD_LINESCROLLUP +}; + + +enum wxSTC_LEX { + wxSTC_LEX_CONTAINER=0, + wxSTC_LEX_NULL, + wxSTC_LEX_PYTHON, + wxSTC_LEX_CPP, + wxSTC_LEX_HTML, + wxSTC_LEX_XML, + wxSTC_LEX_PERL, + wxSTC_LEX_SQL, + wxSTC_LEX_VB, + wxSTC_LEX_PROPERTIES, + wxSTC_LEX_ERRORLIST, + wxSTC_LEX_MAKEFILE, + wxSTC_LEX_BATCH, +}; + + + +const int wxSTC_CARET_SLOP = 0x01; +const int WXSTC_CARET_CENTER = 0x02; +const int wxSTC_CARET_STRICT = 0x04; + +const int wxSTC_MARGIN_SYMBOL = 0; +const int wxSTC_MARGIN_NUMBER = 1; + + +class ScintillaWX; // forward declare +class WordList; +struct SCNotification; + + +extern const wxChar* wxSTCNameStr; + +//---------------------------------------------------------------------- + +class wxStyledTextCtrl : public wxControl { +public: + +#ifdef SWIG + wxStyledTextCtrl(wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const char* name = wxSTCNameStr); +#else + wxStyledTextCtrl(wxWindow *parent, wxWindowID id, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = 0, + const wxString& name = wxSTCNameStr); +#endif + + +#ifndef SWIG + ~wxStyledTextCtrl(); +#endif + + + // Text retrieval and modification + wxString GetText(); + bool SetText(const wxString& text); + wxString GetLine(int line); + void ReplaceSelection(const wxString& text); + void SetReadOnly(bool readOnly); + bool GetReadOnly(); + wxString GetTextRange(int startPos, int endPos); + wxString GetStyledTextRange(int startPos, int endPos); +#ifndef SWIG + void GetTextRange(int startPos, int endPos, char* buff); + void GetStyledTextRange(int startPos, int endPos, char* buff); +#endif + void AddText(const wxString& text); + void AddStyledText(const wxString& text); + void InsertText(int pos, const wxString& text); + void ClearAll(); + char GetCharAt(int pos); + char GetStyleAt(int pos); + void SetStyleBits(int bits); + int GetStyleBits(); + + + // Clipboard + void Cut(); + void Copy(); + void Paste(); + bool CanPaste(); + void ClearClipbrd(); // avoiding name conflict with virtual in wxWindow + + + // Undo and Redo + void Undo(); + bool CanUndo(); + void EmptyUndoBuffer(); + void Redo(); + bool CanRedo(); + void SetUndoCollection(wxSTC_UndoType type); + wxSTC_UndoType GetUndoCollection(); + void BeginUndoAction(); + void EndUndoAction(); + + + // Selection and information +#ifdef SWIG + void GetSelection(int* OUTPUT, int* OUTPUT); +#else + void GetSelection(int* startPos, int* endPos); +#endif + void SetSelection(int startPos, int endPos); + wxString GetSelectedText(); + void HideSelection(bool hide); + bool GetHideSelection(); + + int GetTextLength(); + int GetFirstVisibleLine(); + bool GetModified(); + int GetLineCount(); + wxRect GetRect(); + int GetLineFromPos(int pos); + int GetLineStartPos(int line); + int GetLineLengthAtPos(int pos); + int GetLineLength(int line); +#ifdef SWIG + wxString GetCurrentLineText(int* OUTPUT); +#else + wxString GetCurrentLineText(int* linePos); +#endif + int GetCurrentLine(); + int PositionFromPoint(wxPoint pt); + int LineFromPoint(wxPoint pt); + wxPoint PointFromPosition(int pos); + int GetCurrentPos(); + int GetAnchor(); + void SelectAll(); + void SetCurrentPosition(int pos); + void SetAnchor(int pos); + void GotoPos(int pos); + void GotoLine(int line); + void ChangePosition(int delta, bool extendSelection); + void PageMove(int cmdKey, bool extendSelection); + + void ScrollBy(int columnDelta, int lineDelta); + void ScrollToLine(int line); + void ScrollToColumn(int column); + void EnsureCaretVisible(); + void SetCaretPolicy(int policy, int slop=0); + int GetSelectionType(); + int GetLinesOnScreen(); + bool IsSelectionRectangle(); + void SetUseHorizontalScrollBar(bool use); + bool GetUseHorizontalScrollBar(); + + + // Searching + int FindText(int minPos, int maxPos, const wxString& text, + bool caseSensitive, bool wholeWord); + void SearchAnchor(); + int SearchNext(const wxString& text, bool caseSensitive, bool wholeWord); + int SearchPrev(const wxString& text, bool caseSensitive, bool wholeWord); + + + // Visible whitespace + bool GetViewWhitespace(); + void SetViewWhitespace(bool visible); + + + // Line endings + wxSTC_EOL GetEOLMode(); + void SetEOLMode(wxSTC_EOL mode); + bool GetViewEOL(); + void SetViewEOL(bool visible); + void ConvertEOL(wxSTC_EOL mode); + + + // Styling + int GetEndStyled(); + void StartStyling(int pos, int mask); + void SetStyleFor(int length, int style); + void SetStyleBytes(int length, char* styleBytes); + void SetLineState(int line, int value); + int GetLineState(int line); + + + // Style Definition + void StyleClearAll(); + void StyleResetDefault(); + void StyleSetSpec(int styleNum, const wxString& spec); + void StyleSetForeground(int styleNum, const wxColour& colour); + void StyleSetBackground(int styleNum, const wxColour& colour); + void StyleSetFont(int styleNum, wxFont& font); + void StyleSetFontAttr(int styleNum, int size, const wxString& faceName, bool bold, bool italic); + void StyleSetBold(int styleNum, bool bold); + void StyleSetItalic(int styleNum, bool italic); + void StyleSetFaceName(int styleNum, const wxString& faceName); + void StyleSetSize(int styleNum, int pointSize); + void StyleSetEOLFilled(int styleNum, bool fillEOL); + + + // Margins in the edit area + int GetLeftMargin(); + int GetRightMargin(); + void SetMargins(int left, int right); + + + // Margins for selection, markers, etc. + void SetMarginType(int margin, int type); + int GetMarginType(int margin); + void SetMarginWidth(int margin, int pixelWidth); + int GetMarginWidth(int margin); + void SetMarginMask(int margin, int mask); + int GetMarginMask(int margin); + void SetMarginSensitive(int margin, bool sensitive); + bool GetMarginSensitive(int margin); + + + // Selection and Caret styles + void SetSelectionForeground(const wxColour& colour); + void SetSelectionBackground(const wxColour& colour); + void SetCaretForeground(const wxColour& colour); + int GetCaretPeriod(); + void SetCaretPeriod(int milliseconds); + + + // Other settings + void SetBufferedDraw(bool isBuffered); + void SetTabWidth(int numChars); + void SetIndent(int numChars); + void SetUseTabs(bool usetabs); + void SetLineIndentation(int line, int indentation); + int GetLineIndentation(int line); + int GetLineIndentationPos(int line); + void SetWordChars(const wxString& wordChars); + + void SetUsePop(bool usepopup); + + + // Brace highlighting + void BraceHighlight(int pos1, int pos2); + void BraceBadlight(int pos); + int BraceMatch(int pos, int maxReStyle=0); + + + // Markers + void MarkerDefine(int markerNumber, int markerSymbol, + const wxColour& foreground, + const wxColour& background); + void MarkerSetType(int markerNumber, int markerSymbol); + void MarkerSetForeground(int markerNumber, const wxColour& colour); + void MarkerSetBackground(int markerNumber, const wxColour& colour); + int MarkerAdd(int line, int markerNumber); + void MarkerDelete(int line, int markerNumber); + void MarkerDeleteAll(int markerNumber); + int MarkerGet(int line); + int MarkerGetNextLine(int lineStart, int markerMask); + int MarkerGetPrevLine(int lineStart, int markerMask); + int MarkerLineFromHandle(int handle); + void MarkerDeleteHandle(int handle); + + + // Indicators + void IndicatorSetStyle(int indicNum, int indicStyle); + int IndicatorGetStyle(int indicNum); + void IndicatorSetColour(int indicNum, const wxColour& colour); + + + // Auto completion + void AutoCompShow(const wxString& listOfWords); + void AutoCompCancel(); + bool AutoCompActive(); + int AutoCompPosAtStart(); + void AutoCompComplete(); + void AutoCompStopChars(const wxString& stopChars); + void AutoCompSetSeparator(char separator); + char AutoCompGetSeparator(); + void AutoCompSelect(const wxString& stringtoselect); + + // Call tips + void CallTipShow(int pos, const wxString& text); + void CallTipCancel(); + bool CallTipActive(); + int CallTipPosAtStart(); + void CallTipSetHighlight(int start, int end); + void CallTipSetBackground(const wxColour& colour); + + + // Key bindings + void CmdKeyAssign(int key, int modifiers, int cmd); + void CmdKeyClear(int key, int modifiers); + void CmdKeyClearAll(); + void CmdKeyExecute(int cmd); + + + // Print formatting + int FormatRange(bool doDraw, + int startPos, + int endPos, + wxDC* draw, + wxDC* target, // Why does it use two? Can they be the same? + wxRect renderRect, + wxRect pageRect); + + + // Document Sharing (multiple views) + void* GetDocument(); + void SetDocument(void* document); + // TODO: create a wx wrapper for Scintilla's document class + + + // Folding + int VisibleFromDocLine(int docLine); + int DocLineFromVisible(int displayLine); + int SetFoldLevel(int line, int level); + int GetFoldLevel(int line); + int GetLastChild(int line, int level); + int GetFoldParent(int line); + void ShowLines(int lineStart, int lineEnd); + void HideLines(int lineStart, int lineEnd); + bool GetLineVisible(int line); + void SetFoldExpanded(int line, bool expanded); + bool GetFoldExpanded(int line); + void ToggleFold(int line); + void EnsureVisible(int line); + void SetFoldFlags(int flags); + + + // Long Lines + int GetEdgeColumn(); + void SetEdgeColumn(int column); + wxSTC_EDGE GetEdgeMode(); + void SetEdgeMode(wxSTC_EDGE mode); + wxColour GetEdgeColour(); + void SetEdgeColour(const wxColour& colour); + + + // Lexer + void SetLexer(wxSTC_LEX lexer); + wxSTC_LEX GetLexer(); + void Colourise(int start, int end); + void SetProperty(const wxString& key, const wxString& value); + void SetKeywords(int keywordSet, const wxString& keywordList); + + +#ifndef SWIG +private: + // Event handlers + void OnPaint(wxPaintEvent& evt); + void OnScrollWin(wxScrollWinEvent& evt); + void OnSize(wxSizeEvent& evt); + void OnMouseLeftDown(wxMouseEvent& evt); + void OnMouseMove(wxMouseEvent& evt); + void OnMouseLeftUp(wxMouseEvent& evt); + void OnMouseRightUp(wxMouseEvent& evt); + void OnChar(wxKeyEvent& evt); + void OnKeyDown(wxKeyEvent& evt); + void OnLoseFocus(wxFocusEvent& evt); + void OnGainFocus(wxFocusEvent& evt); + void OnSysColourChanged(wxSysColourChangedEvent& evt); + void OnEraseBackground(wxEraseEvent& evt); + void OnMenu(wxCommandEvent& evt); + void OnListBox(wxCommandEvent& evt); + + + // Turn notifications from Scintilla into events + void NotifyChange(); + void NotifyParent(SCNotification* scn); + + long SendMsg(int msg, long wp=0, long lp=0); + +private: + DECLARE_EVENT_TABLE() + DECLARE_CLASS(wxStyledTextCtrl) + + ScintillaWX* m_swx; + wxStopWatch m_stopWatch; + bool m_readOnly; + wxSTC_UndoType m_undoType; + + + friend class ScintillaWX; + friend class Platform; +#endif +}; + +//---------------------------------------------------------------------- + +class wxStyledTextEvent : public wxCommandEvent { +public: + wxStyledTextEvent(wxEventType commandType=0, int id=0); + ~wxStyledTextEvent() {} + + void SetPosition(int pos) { m_position = pos; } + void SetKey(int k) { m_key = k; } + void SetModifiers(int m) { m_modifiers = m; } + void SetModificationType(int t) { m_modificationType = t; } + void SetText(const char* t) { m_text = t; } + void SetLength(int len) { m_length = len; } + void SetLinesAdded(int num) { m_linesAdded = num; } + void SetLine(int val) { m_line = val; } + void SetFoldLevelNow(int val) { m_foldLevelNow = val; } + void SetFoldLevelPrev(int val) { m_foldLevelPrev = val; } + void SetMargin(int val) { m_margin = val; } + void SetMessage(int val) { m_message = val; } + void SetWParam(int val) { m_wParam = val; } + void SetLParam(int val) { m_lParam = val; } + + int GetPosition() const { return m_position; } + int GetKey() const { return m_key; } + int GetModifiers() const { return m_modifiers; } + int GetModificationType() const { return m_modificationType; } + wxString GetText() const { return m_text; } + int GetLength() const { return m_length; } + int GetLinesAdded() const { return m_linesAdded; } + int GetLine() const { return m_line; } + int GetFoldLevelNow() const { return m_foldLevelNow; } + int GetFoldLevelPrev() const { return m_foldLevelPrev; } + int GetMargin() const { return m_margin; } + int GetMessage() const { return m_message; } + int GetWParam() const { return m_wParam; } + int GetLParam() const { return m_lParam; } + + bool GetShift() const; + bool GetControl() const; + bool GetAlt() const; + + void CopyObject(wxObject& obj) const; + +#ifndef SWIG +private: + DECLARE_DYNAMIC_CLASS(wxStyledTextEvent) + + int m_position; + int m_key; + int m_modifiers; + + int m_modificationType; // wxEVT_STC_MODIFIED + wxString m_text; + int m_length; + int m_linesAdded; + int m_line; + int m_foldLevelNow; + int m_foldLevelPrev; + + int m_margin; // wxEVT_STC_MARGINCLICK + + int m_message; // wxEVT_STC_MACRORECORD + int m_wParam; + int m_lParam; +#endif +}; + + + +enum { + wxEVT_STC_CHANGE = 1650, + wxEVT_STC_STYLENEEDED, + wxEVT_STC_CHARADDED, + wxEVT_STC_UPDATEUI, + wxEVT_STC_SAVEPOINTREACHED, + wxEVT_STC_SAVEPOINTLEFT, + wxEVT_STC_ROMODIFYATTEMPT, + wxEVT_STC_DOUBLECLICK, + wxEVT_STC_MODIFIED, + wxEVT_STC_KEY, + wxEVT_STC_MACRORECORD, + wxEVT_STC_MARGINCLICK, + wxEVT_STC_NEEDSHOWN +}; + +#ifndef SWIG +typedef void (wxEvtHandler::*wxStyledTextEventFunction)(wxStyledTextEvent&); + +#define EVT_STC_CHANGE(id, fn) { wxEVT_STC_CHANGE, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_STYLENEEDED(id, fn) { wxEVT_STC_STYLENEEDED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_CHARADDED(id, fn) { wxEVT_STC_CHARADDED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_UPDATEUI(id, fn) { wxEVT_STC_UPDATEUI, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_SAVEPOINTREACHED(id, fn) { wxEVT_STC_SAVEPOINTREACHED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_SAVEPOINTLEFT(id, fn) { wxEVT_STC_SAVEPOINTLEFT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_ROMODIFYATTEMPT(id, fn) { wxEVT_STC_ROMODIFYATTEMPT, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_DOUBLECLICK(id, fn) { wxEVT_STC_DOUBLECLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_MODIFIED(id, fn) { wxEVT_STC_MODIFIED, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_KEY(id, fn) { wxEVT_STC_KEY, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_MACRORECORD(id, fn) { wxEVT_STC_MACRORECORD, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_MARGINCLICK(id, fn) { wxEVT_STC_MARGINCLICK, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, +#define EVT_STC_NEEDSHOWN(id, fn) { wxEVT_STC_NEEDSHOWN, id, -1, (wxObjectEventFunction) (wxEventFunction) (wxStyledTextEventFunction) & fn, (wxObject *) NULL }, + +#endif + +//---------------------------------------------------------------------- +//---------------------------------------------------------------------- +#endif + +