]>
git.saurik.com Git - wxWidgets.git/blob - samples/richedit/wxlwindow.h
1 /*-*- c++ -*-********************************************************
2 * wxLwindow.h : a scrolled Window for displaying/entering rich text*
4 * (C) 1998-2000 by Karsten Ballüder (ballueder@gmx.net) *
7 *******************************************************************/
17 #ifndef WXLOWIN_MENU_FIRST
18 # define WXLOWIN_MENU_FIRST 12000
24 WXLOWIN_MENU_LARGER
= WXLOWIN_MENU_FIRST
,
26 WXLOWIN_MENU_UNDERLINE
,
30 WXLOWIN_MENU_TYPEWRITER
,
31 WXLOWIN_MENU_SANSSERIF
,
33 WXLOWIN_MENU_DBLCLICK
,
36 WXLOWIN_MENU_LCLICK
= WXLOWIN_MENU_LDOWN
,
38 WXLOWIN_MENU_MOUSEMOVE
,
39 WXLOWIN_MENU_LAST
= WXLOWIN_MENU_MOUSEMOVE
43 This class is a rich text editing widget.
45 class wxLayoutWindow
: public wxScrolledWindow
49 @param parent parent window to display this panel in
51 wxLayoutWindow(wxWindow
*parent
);
54 virtual ~wxLayoutWindow();
56 /**@name Editing functionality */
58 /// Clears the window and sets default parameters.
59 void Clear(int family
= wxROMAN
,
62 int weight
= wxNORMAL
,
67 /// override base class virtual to also refresh the scrollbar position
68 virtual void Refresh(bool eraseBackground
= true,
69 const wxRect
*rect
= (const wxRect
*)NULL
);
71 /** Sets a background image, only used on screen, not on printouts.
72 @param bitmap a pointer to a wxBitmap or NULL to remove it
74 void SetBackgroundBitmap(wxBitmap
*bitmap
= NULL
)
76 if(m_BGbitmap
) delete m_BGbitmap
;
80 /// Enable or disable editing, i.e. processing of keystrokes.
81 void SetEditable(bool toggle
)
84 SetCursorVisibility(toggle
);
87 /// Query whether list can be edited by user.
88 bool IsEditable() const { return m_Editable
; }
90 /** Sets cursor visibility, visible=1, invisible=0,
91 visible-on-demand=-1, to hide it until moved.
92 @param visibility -1,0 or 1
93 @return the old visibility
95 inline int SetCursorVisibility(int visibility
= -1)
97 int v
=m_CursorVisibility
;
98 m_CursorVisibility
= visibility
; return v
;
101 /// Pastes text from clipboard.
102 void Paste(bool privateFormat
= false, bool usePrimarySelection
= false);
104 /** Copies selection to clipboard.
105 @param invalidate used internally, see wxllist.h for details
107 bool Copy(bool invalidate
= true, bool privateFormat
= false, bool primary
= false);
109 /// Copies selection to clipboard and deletes it.
110 bool Cut(bool privateFormat
= false, bool usePrimary
= false);
113 /// find string in buffer
114 bool Find(const wxString
&needle
,
115 wxPoint
* fromWhere
= NULL
,
116 const wxString
&configPath
= _T("MsgViewFindString"));
118 /// find the same string again
121 void EnablePopup(bool enable
= true) { m_DoPopupMenu
= enable
; }
123 /** Sets the wrap margin.
124 @param margin set this to 0 to disable it
126 void SetWrapMargin(CoordType margin
) { m_WrapMargin
= margin
; }
128 /** Toggle wordwrap as we type.
129 @param on true to activate word wrap
131 void SetWordWrap(bool on
= true) { m_DoWordWrap
= on
; }
133 /** Redraws the window.
134 Internally, this stores the parameter and calls a refresh on
135 wxMSW, draws directly on wxGTK.
137 void RequestUpdate(const wxRect
*updateRect
= NULL
);
139 /// if exact == false, assume 50% extra size for the future
140 void ResizeScrollbars(bool exact
= false); // don't change this to true!
142 /// if the flag is true, we send events when user clicks on embedded objects
143 inline void SetMouseTracking(bool doIt
= true) { m_doSendEvents
= doIt
; }
145 /** Returns a pointer to the wxLayoutList object.
148 wxLayoutList
* GetLayoutList() { return m_llist
; }
150 /**@name Callbacks */
152 void OnSize(wxSizeEvent
&event
);
153 void OnPaint(wxPaintEvent
&event
);
154 void OnChar(wxKeyEvent
& event
);
155 void OnKeyUp(wxKeyEvent
& event
);
156 void OnUpdateMenuUnderline(wxUpdateUIEvent
& event
);
157 void OnUpdateMenuBold(wxUpdateUIEvent
& event
);
158 void OnUpdateMenuItalic(wxUpdateUIEvent
& event
);
159 void OnMenu(wxCommandEvent
& event
);
160 void OnLeftMouseDown(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_LDOWN
, event
); }
161 void OnLeftMouseUp(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_LUP
, event
); }
162 void OnRightMouseClick(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_RCLICK
, event
); }
163 void OnMiddleMouseDown(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_MDOWN
, event
); }
164 void OnMouseDblClick(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_DBLCLICK
, event
); }
165 void OnMouseMove(wxMouseEvent
&event
) { OnMouse(WXLOWIN_MENU_MOUSEMOVE
, event
) ; }
166 void OnSetFocus(wxFocusEvent
&ev
);
167 void OnKillFocus(wxFocusEvent
&ev
);
170 /// Creates a wxMenu for use as a format popup.
171 static wxMenu
* MakeFormatMenu();
173 /// Redraws the window, used by RequestUpdate() or OnPaint().
174 void InternalPaint(const wxRect
*updateRect
);
177 /** Tell window to update a wxStatusBar with UserData labels and
179 @param bar wxStatusBar pointer
180 @param labelfield field to use in statusbar for URLs/userdata labels, or -1 to disable
181 @param cursorfield field to use for cursor position, or -1 to disable
183 void SetStatusBar(class wxStatusBar
*bar
,
185 int cursorfield
= -1)
187 m_StatusBar
= bar
; m_StatusFieldLabel
= labelfield
;
188 m_StatusFieldCursor
= cursorfield
;
190 #endif // wxUSE_STATUSBAR
193 /// Enable or disable focus follow mode under non-MSW
194 void SetFocusFollowMode(bool enable
= true)
196 m_FocusFollowMode
= enable
;
200 /** @name Modified flag handling, will not get reset by list unless
204 void SetModified(bool modified
= true) { m_Modified
= modified
; }
206 /// Query whether window needs redrawing.
207 bool IsModified() const { return m_Modified
; }
211 @name Dirty flag handling for optimisations.
212 Normally one should only need to call SetDirty(), e.g. when
213 manipulating the wxLayoutList directly, so the window will update
214 itself. ResetDirty() and IsDirty() should only be used
218 void SetDirty() { m_Dirty
= true; m_Modified
= true; }
220 /// Query whether window needs redrawing.
221 bool IsDirty() const { return m_Dirty
; }
223 /// Reset dirty flag.
224 void ResetDirty() { m_Dirty
= false; }
229 /// generic function for mouse events processing
230 void OnMouse(int eventId
, wxMouseEvent
& event
);
233 void ScrollToCursor();
235 /// for sending events
238 /// Shall we send events?
241 /// Where does the current view start?
242 int m_ViewStartX
; int m_ViewStartY
;
244 /// Do we currently have the focus?
247 /// do we handle clicks of the right mouse button?
250 /// Should InternalPaint() scroll to cursor (VZ: seems unused any more)
251 bool m_ScrollToCursor
;
253 /// Do we currently have a non-standard cursor?
257 wxMenu
* m_PopupMenu
;
259 /// for derived classes, set when mouse is clicked
260 wxPoint m_ClickPosition
;
262 /// for scrollbar calculations:
267 /// do we want automatic word wrap?
271 CoordType m_WrapMargin
;
273 /// do we have the corresponding scrollbar?
274 bool m_hasHScrollbar
,
277 /** Visibility parameter for cursor. 0/1 as expected, -1: visible
280 int m_CursorVisibility
;
282 bool SetAutoDeleteSelection(bool enable
= true)
284 bool old
= m_AutoDeleteSelection
;
285 m_AutoDeleteSelection
= enable
;
289 /// The layout list to be displayed.
290 wxLayoutList
*m_llist
;
292 /// Can user edit the window?
295 /// Are we currently building a selection with the keyboard?
298 /// Has list changed since last redraw, e.g. in size?
301 /// Has the list ever been modified?
306 wxPoint m_bitmapSize
;
309 /// A frame's statusbar to update
310 class wxStatusBar
*m_StatusBar
;
311 #endif // wxUSE_STATUSBAR
313 /// statusbar field for labels
314 int m_StatusFieldLabel
;
316 /// statusbar field for cursor positions
317 int m_StatusFieldCursor
;
319 /// a pointer to a bitmap for the background
320 wxBitmap
*m_BGbitmap
;
322 /**@name Some configuration options */
324 /// Do we want to auto-replace the selection with new text?
325 bool m_AutoDeleteSelection
;
328 /// Do we want the focus to follow the mouse?
329 bool m_FocusFollowMode
;
331 /// For finding text and finding it again:
332 wxString m_FindString
;
335 DECLARE_EVENT_TABLE()