1
/*-*- c++ -*-********************************************************
2
* wxLwindow.h : a scrolled Window for displaying/entering rich text*
4
* (C) 1998-2000 by Karsten Ballļæ½der (ballueder@gmx.net) *
6
* $Id: wxlwindow.h,v 1.20 2004/07/19 09:39:23 ABX Exp $
7
*******************************************************************/
12
# pragma interface "wxlwindow.h"
21
#ifndef WXLOWIN_MENU_FIRST
22
# define WXLOWIN_MENU_FIRST 12000
28
WXLOWIN_MENU_LARGER = WXLOWIN_MENU_FIRST,
30
WXLOWIN_MENU_UNDERLINE,
34
WXLOWIN_MENU_TYPEWRITER,
35
WXLOWIN_MENU_SANSSERIF,
37
WXLOWIN_MENU_DBLCLICK,
40
WXLOWIN_MENU_LCLICK = WXLOWIN_MENU_LDOWN,
42
WXLOWIN_MENU_MOUSEMOVE,
43
WXLOWIN_MENU_LAST = WXLOWIN_MENU_MOUSEMOVE
47
This class is a rich text editing widget.
49
class wxLayoutWindow : public wxScrolledWindow
53
@param parent parent window to display this panel in
55
wxLayoutWindow(wxWindow *parent);
58
virtual ~wxLayoutWindow();
60
/**@name Editing functionality */
62
/// Clears the window and sets default parameters.
63
void Clear(int family = wxROMAN,
66
int weight = wxNORMAL,
71
/// override base class virtual to also refresh the scrollbar position
72
virtual void Refresh(bool eraseBackground = true,
73
const wxRect *rect = (const wxRect *)NULL);
75
/** Sets a background image, only used on screen, not on printouts.
76
@param bitmap a pointer to a wxBitmap or NULL to remove it
78
void SetBackgroundBitmap(wxBitmap *bitmap = NULL)
80
if(m_BGbitmap) delete m_BGbitmap;
84
/// Enable or disable editing, i.e. processing of keystrokes.
85
void SetEditable(bool toggle)
88
SetCursorVisibility(toggle);
91
/// Query whether list can be edited by user.
92
bool IsEditable() const { return m_Editable; }
94
/** Sets cursor visibility, visible=1, invisible=0,
95
visible-on-demand=-1, to hide it until moved.
96
@param visibility -1,0 or 1
97
@return the old visibility
99
inline int SetCursorVisibility(int visibility = -1)
101
int v =m_CursorVisibility;
102
m_CursorVisibility = visibility; return v;
105
/// Pastes text from clipboard.
106
void Paste(bool privateFormat = false, bool usePrimarySelection = false);
108
/** Copies selection to clipboard.
109
@param invalidate used internally, see wxllist.h for details
111
bool Copy(bool invalidate = true, bool privateFormat = false, bool primary = false);
113
/// Copies selection to clipboard and deletes it.
114
bool Cut(bool privateFormat = false, bool usePrimary = false);
117
/// find string in buffer
118
bool Find(const wxString &needle,
119
wxPoint * fromWhere = NULL,
120
const wxString &configPath = _T("MsgViewFindString"));
122
/// find the same string again
125
void EnablePopup(bool enable = true) { m_DoPopupMenu = enable; }
127
/** Sets the wrap margin.
128
@param margin set this to 0 to disable it
130
void SetWrapMargin(CoordType margin) { m_WrapMargin = margin; }
132
/** Toggle wordwrap as we type.
133
@param on true to activate word wrap
135
void SetWordWrap(bool on = true) { m_DoWordWrap = on; }
137
/** Redraws the window.
138
Internally, this stores the parameter and calls a refresh on
139
wxMSW, draws directly on wxGTK.
141
void RequestUpdate(const wxRect *updateRect = NULL);
143
/// if exact == false, assume 50% extra size for the future
144
void ResizeScrollbars(bool exact = false); // don't change this to true!
146
/// if the flag is true, we send events when user clicks on embedded objects
147
inline void SetMouseTracking(bool doIt = true) { m_doSendEvents = doIt; }
149
/** Returns a pointer to the wxLayoutList object.
152
wxLayoutList * GetLayoutList() { return m_llist; }
154
/**@name Callbacks */
156
void OnSize(wxSizeEvent &event);
157
void OnPaint(wxPaintEvent &event);
158
void OnChar(wxKeyEvent& event);
159
void OnKeyUp(wxKeyEvent& event);
160
void OnUpdateMenuUnderline(wxUpdateUIEvent& event);
161
void OnUpdateMenuBold(wxUpdateUIEvent& event);
162
void OnUpdateMenuItalic(wxUpdateUIEvent& event);
163
void OnMenu(wxCommandEvent& event);
164
void OnLeftMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LDOWN, event); }
165
void OnLeftMouseUp(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LUP, event); }
166
void OnRightMouseClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_RCLICK, event); }
167
void OnMiddleMouseDown(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_MDOWN, event); }
168
void OnMouseDblClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_DBLCLICK, event); }
169
void OnMouseMove(wxMouseEvent &event) { OnMouse(WXLOWIN_MENU_MOUSEMOVE, event) ; }
170
void OnSetFocus(wxFocusEvent &ev);
171
void OnKillFocus(wxFocusEvent &ev);
174
/// Creates a wxMenu for use as a format popup.
175
static wxMenu * MakeFormatMenu();
177
/// Redraws the window, used by RequestUpdate() or OnPaint().
178
void InternalPaint(const wxRect *updateRect);
181
/** Tell window to update a wxStatusBar with UserData labels and
183
@param bar wxStatusBar pointer
184
@param labelfield field to use in statusbar for URLs/userdata labels, or -1 to disable
185
@param cursorfield field to use for cursor position, or -1 to disable
187
void SetStatusBar(class wxStatusBar *bar,
189
int cursorfield = -1)
191
m_StatusBar = bar; m_StatusFieldLabel = labelfield;
192
m_StatusFieldCursor = cursorfield;
194
#endif // wxUSE_STATUSBAR
197
/// Enable or disable focus follow mode under non-MSW
198
void SetFocusFollowMode(bool enable = true)
200
m_FocusFollowMode = enable;
204
/** @name Modified flag handling, will not get reset by list unless
208
void SetModified(bool modified = true) { m_Modified = modified; }
210
/// Query whether window needs redrawing.
211
bool IsModified() const { return m_Modified; }
215
@name Dirty flag handling for optimisations.
216
Normally one should only need to call SetDirty(), e.g. when
217
manipulating the wxLayoutList directly, so the window will update
218
itself. ResetDirty() and IsDirty() should only be used
222
void SetDirty() { m_Dirty = true; m_Modified = true; }
224
/// Query whether window needs redrawing.
225
bool IsDirty() const { return m_Dirty; }
227
/// Reset dirty flag.
228
void ResetDirty() { m_Dirty = false; }
233
/// generic function for mouse events processing
234
void OnMouse(int eventId, wxMouseEvent& event);
237
void ScrollToCursor();
239
/// for sending events
242
/// Shall we send events?
245
/// Where does the current view start?
246
int m_ViewStartX; int m_ViewStartY;
248
/// Do we currently have the focus?
251
/// do we handle clicks of the right mouse button?
254
/// Should InternalPaint() scroll to cursor (VZ: seems unused any more)
255
bool m_ScrollToCursor;
257
/// Do we currently have a non-standard cursor?
261
wxMenu * m_PopupMenu;
263
/// for derived classes, set when mouse is clicked
264
wxPoint m_ClickPosition;
266
/// for scrollbar calculations:
271
/// do we want automatic word wrap?
275
CoordType m_WrapMargin;
277
/// do we have the corresponding scrollbar?
278
bool m_hasHScrollbar,
281
/** Visibility parameter for cursor. 0/1 as expected, -1: visible
284
int m_CursorVisibility;
286
bool SetAutoDeleteSelection(bool enable = true)
288
bool old = m_AutoDeleteSelection;
289
m_AutoDeleteSelection = enable;
293
/// The layout list to be displayed.
294
wxLayoutList *m_llist;
296
/// Can user edit the window?
299
/// Are we currently building a selection with the keyboard?
302
/// Has list changed since last redraw, e.g. in size?
305
/// Has the list ever been modified?
310
wxPoint m_bitmapSize;
313
/// A frame's statusbar to update
314
class wxStatusBar *m_StatusBar;
315
#endif // wxUSE_STATUSBAR
317
/// statusbar field for labels
318
int m_StatusFieldLabel;
320
/// statusbar field for cursor positions
321
int m_StatusFieldCursor;
323
/// a pointer to a bitmap for the background
324
wxBitmap *m_BGbitmap;
326
/**@name Some configuration options */
328
/// Do we want to auto-replace the selection with new text?
329
bool m_AutoDeleteSelection;
332
/// Do we want the focus to follow the mouse?
333
bool m_FocusFollowMode;
335
/// For finding text and finding it again:
336
wxString m_FindString;
339
DECLARE_EVENT_TABLE()