| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/x11/textctrl.h
- // Purpose:
- // Author: Robert Roebling
- // Created: 01/02/97
- // Copyright: (c) 1998 Robert Roebling
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef __X11TEXTCTRLH__
- #define __X11TEXTCTRLH__
- // Set to 1 to use wxUniv's implementation, 0
- // to use wxX11's.
- #define wxUSE_UNIV_TEXTCTRL 1
- #if wxUSE_UNIV_TEXTCTRL
- #include "wx/univ/textctrl.h"
- #else
- #include "wx/scrolwin.h"
- #include "wx/arrstr.h"
- //-----------------------------------------------------------------------------
- // classes
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
- //-----------------------------------------------------------------------------
- // helpers
- //-----------------------------------------------------------------------------
- enum wxSourceUndo
- {
- wxSOURCE_UNDO_LINE,
- wxSOURCE_UNDO_ENTER,
- wxSOURCE_UNDO_BACK,
- wxSOURCE_UNDO_INSERT_LINE,
- wxSOURCE_UNDO_DELETE,
- wxSOURCE_UNDO_PASTE
- };
- class wxSourceUndoStep: public wxObject
- {
- public:
- wxSourceUndoStep( wxSourceUndo type, int y1, int y2, wxTextCtrl *owner );
- void Undo();
- wxSourceUndo m_type;
- int m_y1;
- int m_y2;
- int m_cursorX;
- int m_cursorY;
- wxTextCtrl *m_owner;
- wxString m_text;
- wxArrayString m_lines;
- };
- class wxSourceLine
- {
- public:
- wxSourceLine( const wxString &text = wxEmptyString )
- {
- m_text = text;
- }
- wxString m_text;
- };
- WX_DECLARE_OBJARRAY(wxSourceLine, wxSourceLineArray);
- enum wxSourceLanguage
- {
- wxSOURCE_LANG_NONE,
- wxSOURCE_LANG_CPP,
- wxSOURCE_LANG_PERL,
- wxSOURCE_LANG_PYTHON
- };
- //-----------------------------------------------------------------------------
- // wxTextCtrl
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxTextCtrl: public wxTextCtrlBase, public wxScrollHelper
- {
- public:
- wxTextCtrl() { Init(); }
- wxTextCtrl(wxWindow *parent,
- wxWindowID id,
- const wxString &value = wxEmptyString,
- const wxPoint &pos = wxDefaultPosition,
- const wxSize &size = wxDefaultSize,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString &name = wxTextCtrlNameStr);
- virtual ~wxTextCtrl();
- bool Create(wxWindow *parent,
- wxWindowID id,
- const wxString &value = wxEmptyString,
- const wxPoint &pos = wxDefaultPosition,
- const wxSize &size = wxDefaultSize,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString &name = wxTextCtrlNameStr);
- // required for scrolling with wxScrollHelper
- // ------------------------------------------
- virtual void PrepareDC(wxDC& dc) { DoPrepareDC(dc); }
- // implement base class pure virtuals
- // ----------------------------------
- virtual void ChangeValue(const wxString &value);
- virtual int GetLineLength(long lineNo) const;
- virtual wxString GetLineText(long lineNo) const;
- virtual int GetNumberOfLines() const;
- virtual bool IsModified() const;
- virtual bool IsEditable() const;
- // more readable flag testing methods
- // ----------------------------------
- bool IsPassword() const { return (GetWindowStyle() & wxTE_PASSWORD) != 0; }
- bool WrapLines() const { return false; }
- // If the return values from and to are the same, there is no selection.
- virtual void GetSelection(long* from, long* to) const;
- // operations
- // ----------
- // editing
- virtual void Clear();
- virtual void Replace(long from, long to, const wxString& value);
- virtual void Remove(long from, long to);
- // clears the dirty flag
- virtual void DiscardEdits();
- virtual void SetMaxLength(unsigned long len);
- // writing text inserts it at the current position, appending always
- // inserts it at the end
- virtual void WriteText(const wxString& text);
- virtual void AppendText(const wxString& text);
- // apply text attribute to the range of text (only works with richedit
- // controls)
- virtual bool SetStyle(long start, long end, const wxTextAttr& style);
- // translate between the position (which is just an index in the text ctrl
- // considering all its contents as a single strings) and (x, y) coordinates
- // which represent column and line.
- virtual long XYToPosition(long x, long y) const;
- virtual bool PositionToXY(long pos, long *x, long *y) const;
- virtual void ShowPosition(long pos);
- // Clipboard operations
- virtual void Copy();
- virtual void Cut();
- virtual void Paste();
- // Undo/redo
- virtual void Undo();
- virtual void Redo() {}
- virtual bool CanUndo() const { return (m_undos.GetCount() > 0); }
- virtual bool CanRedo() const { return false; }
- // Insertion point
- virtual void SetInsertionPoint(long pos);
- virtual void SetInsertionPointEnd();
- virtual long GetInsertionPoint() const;
- virtual wxTextPos GetLastPosition() const;
- virtual void SetSelection(long from, long to);
- virtual void SetEditable(bool editable);
- virtual bool Enable( bool enable = true );
- void OnCut(wxCommandEvent& event);
- void OnCopy(wxCommandEvent& event);
- void OnPaste(wxCommandEvent& event);
- void OnUndo(wxCommandEvent& event);
- void OnRedo(wxCommandEvent& event);
- void OnUpdateCut(wxUpdateUIEvent& event);
- void OnUpdateCopy(wxUpdateUIEvent& event);
- void OnUpdatePaste(wxUpdateUIEvent& event);
- void OnUpdateUndo(wxUpdateUIEvent& event);
- void OnUpdateRedo(wxUpdateUIEvent& event);
- bool SetFont(const wxFont& font);
- bool SetForegroundColour(const wxColour& colour);
- bool SetBackgroundColour(const wxColour& colour);
- void SetModified() { m_modified = true; }
- // textctrl specific scrolling
- virtual bool ScrollLines(int lines);
- virtual bool ScrollPages(int pages);
- // not part of the wxTextCtrl API from now on..
- void SetLanguage( wxSourceLanguage lang = wxSOURCE_LANG_NONE );
- void Delete();
- void DeleteLine();
- void Indent();
- void Unindent();
- bool HasSelection();
- void ClearSelection();
- int GetCursorX() { return m_cursorX; }
- int GetCursorY() { return m_cursorY; }
- bool IsModified() { return m_modified; }
- bool OverwriteMode() { return m_overwrite; }
- // implementation from now on...
- int PosToPixel( int line, int pos );
- int PixelToPos( int line, int pixel );
- void SearchForBrackets();
- void DoChar( char c );
- void DoBack();
- void DoDelete();
- void DoReturn();
- void DoDClick();
- wxString GetNextToken( wxString &line, size_t &pos );
- void DrawLinePart( wxDC &dc, int x, int y, const wxString &toDraw, const wxString &origin, const wxColour &colour);
- void DrawLine( wxDC &dc, int x, int y, const wxString &line, int lineNum );
- void OnPaint( wxPaintEvent &event );
- void OnEraseBackground( wxEraseEvent &event );
- void OnMouse( wxMouseEvent &event );
- void OnChar( wxKeyEvent &event );
- void OnSetFocus( wxFocusEvent& event );
- void OnKillFocus( wxFocusEvent& event );
- void OnInternalIdle();
- void RefreshLine( int n );
- void RefreshDown( int n );
- void MoveCursor( int new_x, int new_y, bool shift = false, bool centre = false );
- void MyAdjustScrollbars();
- protected:
- // common part of all ctors
- void Init();
- virtual wxSize DoGetBestSize() const;
- virtual void DoSetValue(const wxString& value, int flags = 0);
- friend class wxSourceUndoStep;
- wxSourceLineArray m_lines;
- wxFont m_sourceFont;
- wxColour m_sourceColour;
- wxColour m_commentColour;
- wxColour m_stringColour;
- int m_cursorX;
- int m_cursorY;
- int m_selStartX,m_selStartY;
- int m_selEndX,m_selEndY;
- int m_lineHeight;
- int m_charWidth;
- int m_longestLine;
- bool m_overwrite;
- bool m_modified;
- bool m_editable;
- bool m_ignoreInput;
- wxArrayString m_keywords;
- wxColour m_keywordColour;
- wxArrayString m_defines;
- wxColour m_defineColour;
- wxArrayString m_variables;
- wxColour m_variableColour;
- wxSourceLanguage m_lang;
- wxList m_undos;
- bool m_capturing;
- int m_bracketX;
- int m_bracketY;
- private:
- DECLARE_EVENT_TABLE()
- DECLARE_DYNAMIC_CLASS(wxTextCtrl);
- };
- //-----------------------------------------------------------------------------
- // this is superfluous here but helps to compile
- //-----------------------------------------------------------------------------
- // cursor movement and also selection and delete operations
- #define wxACTION_TEXT_GOTO wxT("goto") // to pos in numArg
- #define wxACTION_TEXT_FIRST wxT("first") // go to pos 0
- #define wxACTION_TEXT_LAST wxT("last") // go to last pos
- #define wxACTION_TEXT_HOME wxT("home")
- #define wxACTION_TEXT_END wxT("end")
- #define wxACTION_TEXT_LEFT wxT("left")
- #define wxACTION_TEXT_RIGHT wxT("right")
- #define wxACTION_TEXT_UP wxT("up")
- #define wxACTION_TEXT_DOWN wxT("down")
- #define wxACTION_TEXT_WORD_LEFT wxT("wordleft")
- #define wxACTION_TEXT_WORD_RIGHT wxT("wordright")
- #define wxACTION_TEXT_PAGE_UP wxT("pageup")
- #define wxACTION_TEXT_PAGE_DOWN wxT("pagedown")
- // clipboard operations
- #define wxACTION_TEXT_COPY wxT("copy")
- #define wxACTION_TEXT_CUT wxT("cut")
- #define wxACTION_TEXT_PASTE wxT("paste")
- // insert text at the cursor position: the text is in strArg of PerformAction
- #define wxACTION_TEXT_INSERT wxT("insert")
- // if the action starts with either of these prefixes and the rest of the
- // string is one of the movement commands, it means to select/delete text from
- // the current cursor position to the new one
- #define wxACTION_TEXT_PREFIX_SEL wxT("sel")
- #define wxACTION_TEXT_PREFIX_DEL wxT("del")
- // mouse selection
- #define wxACTION_TEXT_ANCHOR_SEL wxT("anchorsel")
- #define wxACTION_TEXT_EXTEND_SEL wxT("extendsel")
- #define wxACTION_TEXT_SEL_WORD wxT("wordsel")
- #define wxACTION_TEXT_SEL_LINE wxT("linesel")
- // undo or redo
- #define wxACTION_TEXT_UNDO wxT("undo")
- #define wxACTION_TEXT_REDO wxT("redo")
- // ----------------------------------------------------------------------------
- // wxTextCtrl types
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxStdTextCtrlInputHandler : public wxStdInputHandler
- {
- public:
- wxStdTextCtrlInputHandler(wxInputHandler *inphand) : wxStdInputHandler(inphand) {}
- virtual bool HandleKey(wxInputConsumer *consumer,
- const wxKeyEvent& event,
- bool pressed) { return false; }
- virtual bool HandleMouse(wxInputConsumer *consumer, const wxMouseEvent& event) { return false; }
- virtual bool HandleMouseMove(wxInputConsumer *consumer, const wxMouseEvent& event) { return false; }
- virtual bool HandleFocus(wxInputConsumer *consumer, const wxFocusEvent& event) { return false; }
- protected:
- // get the position of the mouse click
- static wxTextPos HitTest(const wxTextCtrl *text, const wxPoint& pos) { return 0; }
- // capture data
- wxTextCtrl *m_winCapture;
- };
- #endif
- // wxUSE_UNIV_TEXTCTRL
- #endif // __X11TEXTCTRLH__
|