]> git.saurik.com Git - wxWidgets.git/blame - interface/wx/richtext/richtextctrl.h
Make wxDECLARE_CLASS synonym of wxDECLARE_ABSTRACT_CLASS.
[wxWidgets.git] / interface / wx / richtext / richtextctrl.h
CommitLineData
23324ae1 1/////////////////////////////////////////////////////////////////////////////
7afd2b58
JS
2// Name: wx/richtext/richtextctrl.h
3// Purpose: A rich edit control
4// Author: Julian Smart
5// Modified by:
6// Created: 2005-09-30
23324ae1 7// RCS-ID: $Id$
7afd2b58 8// Copyright: (c) Julian Smart
526954c5 9// Licence: wxWindows licence
23324ae1
FM
10/////////////////////////////////////////////////////////////////////////////
11
7afd2b58
JS
12#ifndef _WX_RICHTEXTCTRL_H_
13#define _WX_RICHTEXTCTRL_H_
14
15#include "wx/richtext/richtextbuffer.h"
16
17#if wxUSE_RICHTEXT
18
19#include "wx/scrolwin.h"
20#include "wx/caret.h"
21
22#include "wx/textctrl.h"
23
24#if !defined(__WXGTK__) && !defined(__WXMAC__)
25#define wxRICHTEXT_BUFFERED_PAINTING 1
26#else
27#define wxRICHTEXT_BUFFERED_PAINTING 0
28#endif
29
30class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextStyleDefinition;
31
32/*
33 * Styles and flags
34 */
35
23324ae1 36/**
7afd2b58
JS
37 Styles
38*/
7c913512 39
7afd2b58
JS
40#define wxRE_READONLY 0x0010
41#define wxRE_MULTILINE 0x0020
42#define wxRE_CENTRE_CARET 0x8000
43#define wxRE_CENTER_CARET wxRE_CENTRE_CARET
7c913512 44
7afd2b58
JS
45/**
46 Flags
47*/
9e7ad1ca 48
7afd2b58
JS
49#define wxRICHTEXT_SHIFT_DOWN 0x01
50#define wxRICHTEXT_CTRL_DOWN 0x02
51#define wxRICHTEXT_ALT_DOWN 0x04
52
53/**
54 Extra flags
55*/
56
57// Don't draw guide lines around boxes and tables
58#define wxRICHTEXT_EX_NO_GUIDELINES 0x00000100
59
60
61/*
62 Defaults
23324ae1 63*/
7afd2b58
JS
64
65#define wxRICHTEXT_DEFAULT_OVERALL_SIZE wxSize(-1, -1)
66#define wxRICHTEXT_DEFAULT_IMAGE_SIZE wxSize(80, 80)
67#define wxRICHTEXT_DEFAULT_SPACING 3
68#define wxRICHTEXT_DEFAULT_MARGIN 3
69#define wxRICHTEXT_DEFAULT_UNFOCUSSED_BACKGROUND wxColour(175, 175, 175)
70#define wxRICHTEXT_DEFAULT_FOCUSSED_BACKGROUND wxColour(140, 140, 140)
71#define wxRICHTEXT_DEFAULT_UNSELECTED_BACKGROUND wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE)
72#define wxRICHTEXT_DEFAULT_TYPE_COLOUR wxColour(0, 0, 200)
73#define wxRICHTEXT_DEFAULT_FOCUS_RECT_COLOUR wxColour(100, 80, 80)
74#define wxRICHTEXT_DEFAULT_CARET_WIDTH 2
75// Minimum buffer size before delayed layout kicks in
76#define wxRICHTEXT_DEFAULT_DELAYED_LAYOUT_THRESHOLD 20000
77// Milliseconds before layout occurs after resize
78#define wxRICHTEXT_DEFAULT_LAYOUT_INTERVAL 50
79
80/* Identifiers
81 */
82#define wxID_RICHTEXT_PROPERTIES1 (wxID_HIGHEST + 1)
83#define wxID_RICHTEXT_PROPERTIES2 (wxID_HIGHEST + 2)
84#define wxID_RICHTEXT_PROPERTIES3 (wxID_HIGHEST + 3)
85
86/*
87 Normal selection occurs initially and as user drags within one container.
88 Common ancestor selection occurs when the user starts dragging across containers
89 that have a common ancestor, for example the cells in a table.
90 */
91
92enum wxRichTextCtrlSelectionState
23324ae1 93{
7afd2b58
JS
94 wxRichTextCtrlSelectionState_Normal,
95 wxRichTextCtrlSelectionState_CommonAncestor
96};
97
98/**
99 @class wxRichTextContextMenuPropertiesInfo
100
101 wxRichTextContextMenuPropertiesInfo keeps track of objects that appear in the context menu,
102 whose properties are available to be edited.
103 */
738b7b98 104
7afd2b58
JS
105class WXDLLIMPEXP_RICHTEXT wxRichTextContextMenuPropertiesInfo
106{
107public:
738b7b98
BP
108 /**
109 Constructor.
738b7b98 110 */
7afd2b58
JS
111 wxRichTextContextMenuPropertiesInfo() { Init(); }
112
113// Operations
23324ae1 114
23324ae1 115 /**
7afd2b58 116 Initialisation.
23324ae1 117 */
7afd2b58 118 void Init() {}
23324ae1
FM
119
120 /**
7afd2b58 121 Adds an item.
23324ae1 122 */
7afd2b58 123 bool AddItem(const wxString& label, wxRichTextObject* obj);
23324ae1
FM
124
125 /**
7afd2b58 126 Returns the number of menu items that were added.
23324ae1 127 */
7afd2b58 128 int AddMenuItems(wxMenu* menu, int startCmd = wxID_RICHTEXT_PROPERTIES1) const;
23324ae1
FM
129
130 /**
7afd2b58
JS
131 Adds appropriate menu items for the current container and clicked on object
132 (and container's parent, if appropriate).
23324ae1 133 */
7afd2b58 134 int AddItems(wxRichTextObject* container, wxRichTextObject* obj);
23324ae1
FM
135
136 /**
7afd2b58 137 Clears the items.
23324ae1 138 */
7afd2b58
JS
139 void Clear() { m_objects.Clear(); m_labels.Clear(); }
140
141// Accessors
23324ae1
FM
142
143 /**
7afd2b58 144 Returns the nth label.
23324ae1 145 */
7afd2b58 146 wxString GetLabel(int n) const { return m_labels[n]; }
23324ae1
FM
147
148 /**
7afd2b58 149 Returns the nth object.
23324ae1 150 */
7afd2b58 151 wxRichTextObject* GetObject(int n) const { return m_objects[n]; }
23324ae1
FM
152
153 /**
7afd2b58 154 Returns the array of objects.
23324ae1 155 */
7afd2b58 156 wxRichTextObjectPtrArray& GetObjects() { return m_objects; }
23324ae1
FM
157
158 /**
7afd2b58 159 Returns the array of objects.
23324ae1 160 */
7afd2b58 161 const wxRichTextObjectPtrArray& GetObjects() const { return m_objects; }
23324ae1
FM
162
163 /**
7afd2b58 164 Returns the array of labels.
23324ae1 165 */
7afd2b58 166 wxArrayString& GetLabels() { return m_labels; }
23324ae1
FM
167
168 /**
7afd2b58 169 Returns the array of labels.
23324ae1 170 */
7afd2b58 171 const wxArrayString& GetLabels() const { return m_labels; }
23324ae1
FM
172
173 /**
7afd2b58 174 Returns the number of items.
23324ae1 175 */
7afd2b58 176 int GetCount() const { return m_objects.GetCount(); }
23324ae1 177
7afd2b58
JS
178 wxRichTextObjectPtrArray m_objects;
179 wxArrayString m_labels;
180};
e54c96f1 181
23324ae1
FM
182/**
183 @class wxRichTextCtrl
7c913512 184
23324ae1
FM
185 wxRichTextCtrl provides a generic, ground-up implementation of a text control
186 capable of showing multiple styles and images.
7c913512 187
23324ae1 188 wxRichTextCtrl sends notification events: see wxRichTextEvent.
9e7ad1ca 189
3a194bda
SL
190 It also sends the standard wxTextCtrl events @c wxEVT_COMMAND_TEXT_ENTER and
191 @c wxEVT_COMMAND_TEXT_UPDATED, and wxTextUrlEvent when URL content is clicked.
7c913512 192
738b7b98 193 For more information, see the @ref overview_richtextctrl.
7c913512 194
e9f10004
JS
195 @beginStyleTable
196 @style{wxRE_CENTRE_CARET}
197 The control will try to keep the caret line centred vertically while editing.
198 wxRE_CENTER_CARET is a synonym for this style.
199 @style{wxRE_MULTILINE}
200 The control will be multiline (mandatory).
201 @style{wxRE_READONLY}
202 The control will not be editable.
203 @endStyleTable
204
23324ae1 205 @library{wxrichtext}
21b447dc 206 @category{richtext}
36d0c795 207 @appearance{richtextctrl.png}
7afd2b58
JS
208
209 */
210
211class WXDLLIMPEXP_RICHTEXT wxRichTextCtrl : public wxControl,
212 public wxTextCtrlIface,
213 public wxScrollHelper
23324ae1 214{
7afd2b58
JS
215 DECLARE_CLASS( wxRichTextCtrl )
216 DECLARE_EVENT_TABLE()
217
23324ae1 218public:
7afd2b58
JS
219// Constructors
220
23324ae1 221 /**
7afd2b58 222 Default constructor.
23324ae1 223 */
7afd2b58 224 wxRichTextCtrl( );
738b7b98
BP
225
226 /**
227 Constructor, creating and showing a rich text control.
228
229 @param parent
230 Parent window. Must not be @NULL.
231 @param id
232 Window identifier. The value @c wxID_ANY indicates a default value.
233 @param value
234 Default string.
235 @param pos
236 Window position.
237 @param size
238 Window size.
239 @param style
240 Window style.
241 @param validator
242 Window validator.
243 @param name
244 Window name.
245
246 @see Create(), wxValidator
247 */
7afd2b58
JS
248 wxRichTextCtrl( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
249 long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr);
23324ae1
FM
250
251 /**
252 Destructor.
253 */
7afd2b58
JS
254 virtual ~wxRichTextCtrl( );
255
256// Operations
23324ae1
FM
257
258 /**
7afd2b58 259 Creates the underlying window.
23324ae1 260 */
7afd2b58
JS
261 bool Create( wxWindow* parent, wxWindowID id = -1, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
262 long style = wxRE_MULTILINE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr );
23324ae1
FM
263
264 /**
7afd2b58 265 Initialises the members of the control.
23324ae1 266 */
7afd2b58
JS
267 void Init();
268
269// Accessors
23324ae1
FM
270
271 /**
7afd2b58
JS
272 Gets the text for the given range.
273 The end point of range is specified as the last character position of
274 the span of text, plus one.
23324ae1 275 */
7afd2b58 276 virtual wxString GetRange(long from, long to) const;
23324ae1
FM
277
278 /**
7afd2b58 279 Returns the length of the specified line in characters.
23324ae1 280 */
7afd2b58 281 virtual int GetLineLength(long lineNo) const ;
23324ae1
FM
282
283 /**
7afd2b58 284 Returns the text for the given line.
23324ae1 285 */
7afd2b58 286 virtual wxString GetLineText(long lineNo) const ;
23324ae1
FM
287
288 /**
7afd2b58 289 Returns the number of lines in the buffer.
23324ae1 290 */
7afd2b58 291 virtual int GetNumberOfLines() const ;
23324ae1
FM
292
293 /**
7afd2b58 294 Returns @true if the buffer has been modified.
23324ae1 295 */
7afd2b58 296 virtual bool IsModified() const ;
23324ae1
FM
297
298 /**
7afd2b58 299 Returns @true if the control is editable.
23324ae1 300 */
7afd2b58 301 virtual bool IsEditable() const ;
23324ae1
FM
302
303 /**
7afd2b58
JS
304 Returns @true if the control is single-line.
305 Currently wxRichTextCtrl does not support single-line editing.
23324ae1 306 */
7afd2b58 307 bool IsSingleLine() const { return !HasFlag(wxRE_MULTILINE); }
23324ae1
FM
308
309 /**
7afd2b58 310 Returns @true if the control is multiline.
23324ae1 311 */
7afd2b58 312 bool IsMultiLine() const { return !IsSingleLine(); }
23324ae1 313
7afd2b58 314 //@{
23324ae1 315 /**
7afd2b58
JS
316 Returns the range of the current selection.
317 The end point of range is specified as the last character position of the span
318 of text, plus one.
319 If the return values @a from and @a to are the same, there is no selection.
23324ae1 320 */
7afd2b58
JS
321 virtual void GetSelection(long* from, long* to) const;
322 const wxRichTextSelection& GetSelection() const { return m_selection; }
323 wxRichTextSelection& GetSelection() { return m_selection; }
324 //@}
23324ae1
FM
325
326 /**
7afd2b58 327 Returns the text within the current selection range, if any.
23324ae1 328 */
7afd2b58 329 virtual wxString GetStringSelection() const;
23324ae1
FM
330
331 /**
7afd2b58 332 Gets the current filename associated with the control.
23324ae1 333 */
7afd2b58 334 wxString GetFilename() const { return m_filename; }
23324ae1
FM
335
336 /**
7afd2b58 337 Sets the current filename.
23324ae1 338 */
7afd2b58 339 void SetFilename(const wxString& filename) { m_filename = filename; }
23324ae1
FM
340
341 /**
7afd2b58
JS
342 Sets the size of the buffer beyond which layout is delayed during resizing.
343 This optimizes sizing for large buffers. The default is 20000.
23324ae1 344 */
7afd2b58 345 void SetDelayedLayoutThreshold(long threshold) { m_delayedLayoutThreshold = threshold; }
23324ae1
FM
346
347 /**
7afd2b58
JS
348 Gets the size of the buffer beyond which layout is delayed during resizing.
349 This optimizes sizing for large buffers. The default is 20000.
23324ae1 350 */
7afd2b58 351 long GetDelayedLayoutThreshold() const { return m_delayedLayoutThreshold; }
23324ae1
FM
352
353 /**
23324ae1 354 */
7afd2b58 355 bool GetFullLayoutRequired() const { return m_fullLayoutRequired; }
23324ae1
FM
356
357 /**
23324ae1 358 */
7afd2b58 359 void SetFullLayoutRequired(bool b) { m_fullLayoutRequired = b; }
23324ae1
FM
360
361 /**
23324ae1 362 */
7afd2b58 363 wxLongLong GetFullLayoutTime() const { return m_fullLayoutTime; }
23324ae1
FM
364
365 /**
23324ae1 366 */
7afd2b58 367 void SetFullLayoutTime(wxLongLong t) { m_fullLayoutTime = t; }
23324ae1
FM
368
369 /**
23324ae1 370 */
7afd2b58 371 long GetFullLayoutSavedPosition() const { return m_fullLayoutSavedPosition; }
23324ae1
FM
372
373 /**
23324ae1 374 */
7afd2b58 375 void SetFullLayoutSavedPosition(long p) { m_fullLayoutSavedPosition = p; }
23324ae1 376
7afd2b58 377 // Force any pending layout due to large buffer
23324ae1 378 /**
23324ae1 379 */
7afd2b58 380 void ForceDelayedLayout();
23324ae1
FM
381
382 /**
7afd2b58 383 Sets the text (normal) cursor.
23324ae1 384 */
7afd2b58 385 void SetTextCursor(const wxCursor& cursor ) { m_textCursor = cursor; }
23324ae1
FM
386
387 /**
7afd2b58 388 Returns the text (normal) cursor.
23324ae1 389 */
7afd2b58 390 wxCursor GetTextCursor() const { return m_textCursor; }
23324ae1
FM
391
392 /**
7afd2b58 393 Sets the cursor to be used over URLs.
23324ae1 394 */
7afd2b58 395 void SetURLCursor(const wxCursor& cursor ) { m_urlCursor = cursor; }
23324ae1
FM
396
397 /**
7afd2b58 398 Returns the cursor to be used over URLs.
23324ae1 399 */
7afd2b58 400 wxCursor GetURLCursor() const { return m_urlCursor; }
23324ae1
FM
401
402 /**
7afd2b58
JS
403 Returns @true if we are showing the caret position at the start of a line
404 instead of at the end of the previous one.
23324ae1 405 */
7afd2b58 406 bool GetCaretAtLineStart() const { return m_caretAtLineStart; }
23324ae1
FM
407
408 /**
7afd2b58
JS
409 Sets a flag to remember that we are showing the caret position at the start of a line
410 instead of at the end of the previous one.
23324ae1 411 */
7afd2b58 412 void SetCaretAtLineStart(bool atStart) { m_caretAtLineStart = atStart; }
23324ae1
FM
413
414 /**
7afd2b58 415 Returns @true if we are dragging a selection.
23324ae1 416 */
7afd2b58 417 bool GetDragging() const { return m_dragging; }
23324ae1
FM
418
419 /**
7afd2b58 420 Sets a flag to remember if we are dragging a selection.
23324ae1 421 */
7afd2b58 422 void SetDragging(bool dragging) { m_dragging = dragging; }
23324ae1
FM
423
424 /**
7afd2b58 425 Returns the drag start position.
23324ae1 426 */
7afd2b58 427 const wxPoint& GetDragStart() const { return m_dragStart; }
23324ae1
FM
428
429 /**
7afd2b58 430 Sets the drag start position.
23324ae1 431 */
7afd2b58 432 void SetDragStart(const wxPoint& pt) { m_dragStart = pt; }
23324ae1 433
7afd2b58
JS
434#if wxRICHTEXT_BUFFERED_PAINTING
435 //@{
23324ae1 436 /**
7afd2b58 437 Returns the buffer bitmap if using buffered painting.
23324ae1 438 */
7afd2b58
JS
439 const wxBitmap& GetBufferBitmap() const { return m_bufferBitmap; }
440 wxBitmap& GetBufferBitmap() { return m_bufferBitmap; }
441 //@}
442#endif
23324ae1
FM
443
444 /**
7afd2b58 445 Returns the current context menu.
23324ae1 446 */
7afd2b58 447 wxMenu* GetContextMenu() const { return m_contextMenu; }
23324ae1
FM
448
449 /**
7afd2b58 450 Sets the current context menu.
23324ae1 451 */
7afd2b58 452 void SetContextMenu(wxMenu* menu);
23324ae1
FM
453
454 /**
7afd2b58
JS
455 Returns an anchor so we know how to extend the selection.
456 It's a caret position since it's between two characters.
23324ae1 457 */
7afd2b58 458 long GetSelectionAnchor() const { return m_selectionAnchor; }
23324ae1 459
23324ae1 460 /**
7afd2b58
JS
461 Sets an anchor so we know how to extend the selection.
462 It's a caret position since it's between two characters.
23324ae1 463 */
7afd2b58 464 void SetSelectionAnchor(long anchor) { m_selectionAnchor = anchor; }
23324ae1
FM
465
466 /**
7afd2b58 467 Returns the anchor object if selecting multiple containers.
23324ae1 468 */
7afd2b58 469 wxRichTextObject* GetSelectionAnchorObject() const { return m_selectionAnchorObject; }
23324ae1
FM
470
471 /**
7afd2b58 472 Sets the anchor object if selecting multiple containers.
23324ae1 473 */
7afd2b58 474 void SetSelectionAnchorObject(wxRichTextObject* anchor) { m_selectionAnchorObject = anchor; }
23324ae1 475
7afd2b58 476 //@{
23324ae1 477 /**
7afd2b58
JS
478 Returns an object that stores information about context menu property item(s),
479 in order to communicate between the context menu event handler and the code
480 that responds to it. The wxRichTextContextMenuPropertiesInfo stores one
481 item for each object that could respond to a property-editing event. If
482 objects are nested, several might be editable.
23324ae1 483 */
7afd2b58
JS
484 wxRichTextContextMenuPropertiesInfo& GetContextMenuPropertiesInfo() { return m_contextMenuPropertiesInfo; }
485 const wxRichTextContextMenuPropertiesInfo& GetContextMenuPropertiesInfo() const { return m_contextMenuPropertiesInfo; }
486 //@}
23324ae1
FM
487
488 /**
7afd2b58
JS
489 Returns the wxRichTextObject object that currently has the editing focus.
490 If there are no composite objects, this will be the top-level buffer.
23324ae1 491 */
7afd2b58 492 wxRichTextParagraphLayoutBox* GetFocusObject() const { return m_focusObject; }
23324ae1
FM
493
494 /**
7afd2b58 495 Sets the wxRichTextObject object that currently has the editing focus.
23324ae1 496 */
7afd2b58 497 bool SetFocusObject(wxRichTextParagraphLayoutBox* obj, bool setCaretPosition = true);
371ae8b5 498
7afd2b58 499// Operations
23324ae1
FM
500
501 /**
7afd2b58 502 Invalidates the whole buffer to trigger painting later.
23324ae1 503 */
7afd2b58 504 void Invalidate() { GetBuffer().Invalidate(wxRICHTEXT_ALL); }
23324ae1
FM
505
506 /**
7afd2b58 507 Clears the buffer content, leaving a single empty paragraph. Cannot be undone.
23324ae1 508 */
7afd2b58 509 virtual void Clear();
23324ae1 510
23324ae1 511 /**
7afd2b58
JS
512 Replaces the content in the specified range with the string specified by
513 @a value.
23324ae1 514 */
7afd2b58 515 virtual void Replace(long from, long to, const wxString& value);
23324ae1
FM
516
517 /**
7afd2b58 518 Removes the content in the specified range.
23324ae1 519 */
7afd2b58 520 virtual void Remove(long from, long to);
23324ae1 521
7afd2b58 522#ifdef DOXYGEN
23324ae1 523 /**
7afd2b58 524 Loads content into the control's buffer using the given type.
23324ae1 525
7afd2b58
JS
526 If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
527 the filename extension.
23324ae1 528
7afd2b58 529 This function looks for a suitable wxRichTextFileHandler object.
23324ae1 530 */
7afd2b58
JS
531 bool LoadFile(const wxString& file,
532 int type = wxRICHTEXT_TYPE_ANY);
533#endif
23324ae1
FM
534
535 /**
7afd2b58 536 Helper function for LoadFile(). Loads content into the control's buffer using the given type.
23324ae1 537
7afd2b58
JS
538 If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
539 the filename extension.
23324ae1 540
7afd2b58 541 This function looks for a suitable wxRichTextFileHandler object.
23324ae1 542 */
7afd2b58 543 virtual bool DoLoadFile(const wxString& file, int fileType);
23324ae1 544
7afd2b58 545#ifdef DOXYGEN
23324ae1 546 /**
7afd2b58 547 Saves the buffer content using the given type.
23324ae1 548
7afd2b58
JS
549 If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
550 the filename extension.
23324ae1 551
7afd2b58 552 This function looks for a suitable wxRichTextFileHandler object.
23324ae1 553 */
7afd2b58
JS
554 bool SaveFile(const wxString& file = wxEmptyString,
555 int type = wxRICHTEXT_TYPE_ANY);
556#endif
23324ae1
FM
557
558 /**
7afd2b58 559 Helper function for SaveFile(). Saves the buffer content using the given type.
23324ae1 560
7afd2b58
JS
561 If the specified type is wxRICHTEXT_TYPE_ANY, the type is deduced from
562 the filename extension.
23324ae1 563
7afd2b58 564 This function looks for a suitable wxRichTextFileHandler object.
23324ae1 565 */
7afd2b58
JS
566 virtual bool DoSaveFile(const wxString& file = wxEmptyString,
567 int fileType = wxRICHTEXT_TYPE_ANY);
23324ae1
FM
568
569 /**
7afd2b58 570 Sets flags that change the behaviour of loading or saving.
23324ae1 571
7afd2b58
JS
572 See the documentation for each handler class to see what flags are
573 relevant for each handler.
23324ae1 574 */
7afd2b58 575 void SetHandlerFlags(int flags) { GetBuffer().SetHandlerFlags(flags); }
23324ae1
FM
576
577 /**
7afd2b58
JS
578 Returns flags that change the behaviour of loading or saving.
579 See the documentation for each handler class to see what flags are
580 relevant for each handler.
23324ae1 581 */
7afd2b58 582 int GetHandlerFlags() const { return GetBuffer().GetHandlerFlags(); }
23324ae1
FM
583
584 /**
7afd2b58 585 Marks the buffer as modified.
23324ae1 586 */
7afd2b58 587 virtual void MarkDirty();
23324ae1
FM
588
589 /**
7afd2b58
JS
590 Sets the buffer's modified status to @false, and clears the buffer's command
591 history.
23324ae1 592 */
7afd2b58 593 virtual void DiscardEdits();
23324ae1
FM
594
595 /**
7afd2b58
JS
596 Sets the maximum number of characters that may be entered in a single line
597 text control. For compatibility only; currently does nothing.
23324ae1 598 */
7afd2b58 599 virtual void SetMaxLength(unsigned long WXUNUSED(len)) { }
23324ae1
FM
600
601 /**
7afd2b58 602 Writes text at the current position.
23324ae1 603 */
7afd2b58 604 virtual void WriteText(const wxString& text);
23324ae1
FM
605
606 /**
7afd2b58 607 Sets the insertion point to the end of the buffer and writes the text.
23324ae1 608 */
7afd2b58 609 virtual void AppendText(const wxString& text);
23324ae1 610
7afd2b58 611 //@{
23324ae1 612 /**
7afd2b58
JS
613 Gets the attributes at the given position.
614 This function gets the combined style - that is, the style you see on the
615 screen as a result of combining base style, paragraph style and character
616 style attributes.
617
618 To get the character or paragraph style alone, use GetUncombinedStyle().
619
620 @beginWxPerlOnly
621 In wxPerl this method is implemented as GetStyle(@a position)
622 returning a 2-element list (ok, attr).
623 @endWxPerlOnly
23324ae1 624 */
7afd2b58
JS
625 virtual bool GetStyle(long position, wxTextAttr& style);
626 virtual bool GetStyle(long position, wxRichTextAttr& style);
627 virtual bool GetStyle(long position, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
628 //@}
23324ae1 629
7afd2b58 630 //@{
23324ae1 631 /**
7afd2b58
JS
632 Sets the attributes for the given range.
633 The end point of range is specified as the last character position of the span
634 of text, plus one.
635
636 So, for example, to set the style for a character at position 5, use the range
637 (5,6).
23324ae1 638 */
7afd2b58
JS
639 virtual bool SetStyle(long start, long end, const wxTextAttr& style);
640 virtual bool SetStyle(long start, long end, const wxRichTextAttr& style);
641 virtual bool SetStyle(const wxRichTextRange& range, const wxTextAttr& style);
642 virtual bool SetStyle(const wxRichTextRange& range, const wxRichTextAttr& style);
643 //@}
23324ae1
FM
644
645 /**
7afd2b58 646 Sets the attributes for a single object
23324ae1 647 */
7afd2b58 648 virtual void SetStyle(wxRichTextObject *obj, const wxRichTextAttr& textAttr);
23324ae1
FM
649
650 //@{
651 /**
7afd2b58
JS
652 Gets the attributes common to the specified range.
653 Attributes that differ in value within the range will not be included
654 in @a style flags.
655
656 @beginWxPerlOnly
657 In wxPerl this method is implemented as GetStyleForRange(@a position)
658 returning a 2-element list (ok, attr).
659 @endWxPerlOnly
23324ae1 660 */
7afd2b58
JS
661 virtual bool GetStyleForRange(const wxRichTextRange& range, wxTextAttr& style);
662 virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style);
663 virtual bool GetStyleForRange(const wxRichTextRange& range, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
23324ae1
FM
664 //@}
665
666 /**
7afd2b58
JS
667 Sets the attributes for the given range, passing flags to determine how the
668 attributes are set.
669
670 The end point of range is specified as the last character position of the span
671 of text, plus one. So, for example, to set the style for a character at
672 position 5, use the range (5,6).
673
674 @a flags may contain a bit list of the following values:
675 - wxRICHTEXT_SETSTYLE_NONE: no style flag.
676 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this operation should be
677 undoable.
678 - wxRICHTEXT_SETSTYLE_OPTIMIZE: specifies that the style should not be applied
679 if the combined style at this point is already the style in question.
680 - wxRICHTEXT_SETSTYLE_PARAGRAPHS_ONLY: specifies that the style should only be
681 applied to paragraphs, and not the content.
682 This allows content styling to be preserved independently from that
683 of e.g. a named paragraph style.
684 - wxRICHTEXT_SETSTYLE_CHARACTERS_ONLY: specifies that the style should only be
685 applied to characters, and not the paragraph.
686 This allows content styling to be preserved independently from that
687 of e.g. a named paragraph style.
688 - wxRICHTEXT_SETSTYLE_RESET: resets (clears) the existing style before applying
689 the new style.
690 - wxRICHTEXT_SETSTYLE_REMOVE: removes the specified style. Only the style flags
691 are used in this operation.
23324ae1 692 */
7afd2b58 693 virtual bool SetStyleEx(const wxRichTextRange& range, const wxRichTextAttr& style, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
23324ae1 694
7afd2b58 695 //@{
23324ae1 696 /**
7afd2b58
JS
697 Gets the attributes at the given position.
698 This function gets the @e uncombined style - that is, the attributes associated
699 with the paragraph or character content, and not necessarily the combined
700 attributes you see on the screen.
701 To get the combined attributes, use GetStyle().
702
703 If you specify (any) paragraph attribute in @e style's flags, this function
704 will fetch the paragraph attributes.
705 Otherwise, it will return the character attributes.
371ae8b5
MB
706
707 @beginWxPerlOnly
7afd2b58
JS
708 In wxPerl this method is implemented as GetUncombinedStyle(@a position)
709 returning a 2-element list (ok, attr).
371ae8b5 710 @endWxPerlOnly
23324ae1 711 */
7afd2b58
JS
712 virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style);
713 virtual bool GetUncombinedStyle(long position, wxRichTextAttr& style, wxRichTextParagraphLayoutBox* container);
714 //@}
23324ae1 715
7afd2b58 716 //@{
23324ae1 717 /**
7afd2b58
JS
718 Sets the current default style, which can be used to change how subsequently
719 inserted text is displayed.
23324ae1 720 */
7afd2b58
JS
721 virtual bool SetDefaultStyle(const wxTextAttr& style);
722 virtual bool SetDefaultStyle(const wxRichTextAttr& style);
723 //@}
23324ae1
FM
724
725 /**
726 Returns the current default style, which can be used to change how subsequently
9e7ad1ca 727 inserted text is displayed.
23324ae1 728 */
7afd2b58 729 virtual const wxRichTextAttr& GetDefaultStyleEx() const;
23324ae1 730
7afd2b58 731 //virtual const wxTextAttr& GetDefaultStyle() const;
23324ae1 732
7afd2b58 733 //@{
23324ae1 734 /**
7afd2b58
JS
735 Sets the list attributes for the given range, passing flags to determine how
736 the attributes are set.
23324ae1 737
7afd2b58
JS
738 Either the style definition or the name of the style definition (in the current
739 sheet) can be passed.
740 @a flags is a bit list of the following:
741 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
742 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
743 @a startFrom, otherwise existing attributes are used.
744 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
745 as the level for all paragraphs, otherwise the current indentation will be used.
23324ae1 746
7afd2b58 747 @see NumberList(), PromoteList(), ClearListStyle().
23324ae1 748 */
7afd2b58
JS
749 virtual bool SetListStyle(const wxRichTextRange& range, wxRichTextListStyleDefinition* def, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
750 virtual bool SetListStyle(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
751 //@}
23324ae1
FM
752
753 /**
7afd2b58
JS
754 Clears the list style from the given range, clearing list-related attributes
755 and applying any named paragraph style associated with each paragraph.
23324ae1 756
7afd2b58
JS
757 @a flags is a bit list of the following:
758 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
23324ae1 759
7afd2b58 760 @see SetListStyle(), PromoteList(), NumberList().
23324ae1 761 */
7afd2b58 762 virtual bool ClearListStyle(const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO);
23324ae1 763
7afd2b58 764 //@{
23324ae1 765 /**
7afd2b58
JS
766 Numbers the paragraphs in the given range.
767 Pass flags to determine how the attributes are set.
23324ae1 768
7afd2b58
JS
769 Either the style definition or the name of the style definition (in the current
770 sheet) can be passed.
23324ae1 771
7afd2b58
JS
772 @a flags is a bit list of the following:
773 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
774 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
775 @a startFrom, otherwise existing attributes are used.
776 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
777 as the level for all paragraphs, otherwise the current indentation will be used.
778
779 @see SetListStyle(), PromoteList(), ClearListStyle().
23324ae1 780 */
7afd2b58
JS
781 virtual bool NumberList(const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
782 virtual bool NumberList(const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int startFrom = 1, int specifiedLevel = -1);
783 //@}
23324ae1 784
7afd2b58 785 //@{
23324ae1 786 /**
7afd2b58
JS
787 Promotes or demotes the paragraphs in the given range.
788 A positive @a promoteBy produces a smaller indent, and a negative number
789 produces a larger indent. Pass flags to determine how the attributes are set.
790 Either the style definition or the name of the style definition (in the current
791 sheet) can be passed.
792
793 @a flags is a bit list of the following:
794 - wxRICHTEXT_SETSTYLE_WITH_UNDO: specifies that this command will be undoable.
795 - wxRICHTEXT_SETSTYLE_RENUMBER: specifies that numbering should start from
796 @a startFrom, otherwise existing attributes are used.
797 - wxRICHTEXT_SETSTYLE_SPECIFY_LEVEL: specifies that @a listLevel should be used
798 as the level for all paragraphs, otherwise the current indentation will be used.
799
800 @see SetListStyle(), @see SetListStyle(), ClearListStyle().
23324ae1 801 */
7afd2b58
JS
802 virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, wxRichTextListStyleDefinition* def = NULL, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
803 virtual bool PromoteList(int promoteBy, const wxRichTextRange& range, const wxString& defName, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO, int specifiedLevel = -1);
804 //@}
23324ae1
FM
805
806 /**
7afd2b58 807 Deletes the content within the given range.
23324ae1 808 */
7afd2b58 809 virtual bool Delete(const wxRichTextRange& range);
23324ae1
FM
810
811 /**
7afd2b58 812 Translates from column and line number to position.
23324ae1 813 */
7afd2b58 814 virtual long XYToPosition(long x, long y) const;
23324ae1
FM
815
816 /**
7afd2b58 817 Converts a text position to zero-based column and line numbers.
23324ae1 818 */
7afd2b58 819 virtual bool PositionToXY(long pos, long *x, long *y) const;
23324ae1
FM
820
821 /**
7afd2b58 822 Scrolls the buffer so that the given position is in view.
23324ae1 823 */
7afd2b58 824 virtual void ShowPosition(long pos);
23324ae1 825
7afd2b58 826 //@{
23324ae1 827 /**
7afd2b58
JS
828 Finds the character at the given position in pixels.
829 @a pt is in device coords (not adjusted for the client area origin nor for
830 scrolling).
831 */
832 virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const;
833 virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt,
834 wxTextCoord *col,
835 wxTextCoord *row) const;
836 //@}
9e7ad1ca 837
7afd2b58 838// Clipboard operations
371ae8b5 839
7afd2b58
JS
840 /**
841 Copies the selected content (if any) to the clipboard.
23324ae1 842 */
7afd2b58 843 virtual void Copy();
23324ae1
FM
844
845 /**
7afd2b58
JS
846 Copies the selected content (if any) to the clipboard and deletes the selection.
847 This is undoable.
23324ae1 848 */
7afd2b58 849 virtual void Cut();
23324ae1
FM
850
851 /**
7afd2b58 852 Pastes content from the clipboard to the buffer.
23324ae1 853 */
7afd2b58 854 virtual void Paste();
23324ae1
FM
855
856 /**
7afd2b58 857 Deletes the content in the selection, if any. This is undoable.
23324ae1 858 */
7afd2b58 859 virtual void DeleteSelection();
23324ae1
FM
860
861 /**
7afd2b58 862 Returns @true if selected content can be copied to the clipboard.
23324ae1 863 */
7afd2b58 864 virtual bool CanCopy() const;
23324ae1
FM
865
866 /**
7afd2b58 867 Returns @true if selected content can be copied to the clipboard and deleted.
23324ae1 868 */
7afd2b58 869 virtual bool CanCut() const;
23324ae1
FM
870
871 /**
7afd2b58
JS
872 Returns @true if the clipboard content can be pasted to the buffer.
873 */
874 virtual bool CanPaste() const;
9e7ad1ca 875
7afd2b58
JS
876 /**
877 Returns @true if selected content can be deleted.
23324ae1 878 */
7afd2b58 879 virtual bool CanDeleteSelection() const;
23324ae1
FM
880
881 /**
7afd2b58 882 Undoes the command at the top of the command history, if there is one.
23324ae1 883 */
7afd2b58 884 virtual void Undo();
23324ae1
FM
885
886 /**
7afd2b58 887 Redoes the current command.
23324ae1 888 */
7afd2b58 889 virtual void Redo();
23324ae1 890
23324ae1 891 /**
7afd2b58 892 Returns @true if there is a command in the command history that can be undone.
23324ae1 893 */
7afd2b58 894 virtual bool CanUndo() const;
23324ae1
FM
895
896 /**
7afd2b58 897 Returns @true if there is a command in the command history that can be redone.
23324ae1 898 */
7afd2b58 899 virtual bool CanRedo() const;
23324ae1 900
23324ae1 901 /**
7afd2b58
JS
902 Sets the insertion point and causes the current editing style to be taken from
903 the new position (unlike wxRichTextCtrl::SetCaretPosition).
904 */
905 virtual void SetInsertionPoint(long pos);
9e7ad1ca 906
7afd2b58
JS
907 /**
908 Sets the insertion point to the end of the text control.
909 */
910 virtual void SetInsertionPointEnd();
9e7ad1ca 911
7afd2b58
JS
912 /**
913 Returns the current insertion point.
23324ae1 914 */
7afd2b58 915 virtual long GetInsertionPoint() const;
23324ae1
FM
916
917 /**
7afd2b58 918 Returns the last position in the buffer.
23324ae1 919 */
7afd2b58 920 virtual wxTextPos GetLastPosition() const;
23324ae1 921
7afd2b58 922 //@{
23324ae1 923 /**
7afd2b58
JS
924 Sets the selection to the given range.
925 The end point of range is specified as the last character position of the span
926 of text, plus one.
927
928 So, for example, to set the selection for a character at position 5, use the
929 range (5,6).
23324ae1 930 */
7afd2b58
JS
931 virtual void SetSelection(long from, long to);
932 void SetSelection(const wxRichTextSelection& sel) { m_selection = sel; }
933 //@}
934
23324ae1
FM
935
936 /**
7afd2b58 937 Selects all the text in the buffer.
23324ae1 938 */
7afd2b58 939 virtual void SelectAll();
23324ae1
FM
940
941 /**
7afd2b58 942 Makes the control editable, or not.
23324ae1 943 */
7afd2b58 944 virtual void SetEditable(bool editable);
23324ae1
FM
945
946 /**
7afd2b58
JS
947 Returns @true if there is a selection and the object containing the selection
948 was the same as the current focus object.
23324ae1 949 */
7afd2b58 950 virtual bool HasSelection() const;
23324ae1
FM
951
952 /**
7afd2b58
JS
953 Returns @true if there was a selection, whether or not the current focus object
954 is the same as the selection's container object.
23324ae1 955 */
7afd2b58 956 virtual bool HasUnfocusedSelection() const;
23324ae1 957
7afd2b58 958 //@{
23324ae1 959 /**
7afd2b58
JS
960 Write a bitmap or image at the current insertion point.
961 Supply an optional type to use for internal and file storage of the raw data.
23324ae1 962 */
7afd2b58
JS
963 virtual bool WriteImage(const wxImage& image, wxBitmapType bitmapType = wxBITMAP_TYPE_PNG,
964 const wxRichTextAttr& textAttr = wxRichTextAttr());
965
966 virtual bool WriteImage(const wxBitmap& bitmap, wxBitmapType bitmapType = wxBITMAP_TYPE_PNG,
967 const wxRichTextAttr& textAttr = wxRichTextAttr());
968 //@}
23324ae1
FM
969
970 /**
7afd2b58 971 Loads an image from a file and writes it at the current insertion point.
23324ae1 972 */
7afd2b58
JS
973 virtual bool WriteImage(const wxString& filename, wxBitmapType bitmapType,
974 const wxRichTextAttr& textAttr = wxRichTextAttr());
23324ae1
FM
975
976 /**
7afd2b58 977 Writes an image block at the current insertion point.
23324ae1 978 */
7afd2b58
JS
979 virtual bool WriteImage(const wxRichTextImageBlock& imageBlock,
980 const wxRichTextAttr& textAttr = wxRichTextAttr());
23324ae1
FM
981
982 /**
7afd2b58
JS
983 Write a text box at the current insertion point, returning the text box.
984 You can then call SetFocusObject() to set the focus to the new object.
23324ae1 985 */
7afd2b58 986 virtual wxRichTextBox* WriteTextBox(const wxRichTextAttr& textAttr = wxRichTextAttr());
23324ae1
FM
987
988 /**
7afd2b58
JS
989 Write a table at the current insertion point, returning the table.
990 You can then call SetFocusObject() to set the focus to the new object.
23324ae1 991 */
7afd2b58 992 virtual wxRichTextTable* WriteTable(int rows, int cols, const wxRichTextAttr& tableAttr = wxRichTextAttr(), const wxRichTextAttr& cellAttr = wxRichTextAttr());
23324ae1
FM
993
994 /**
7afd2b58 995 Inserts a new paragraph at the current insertion point. @see LineBreak().
23324ae1 996 */
7afd2b58 997 virtual bool Newline();
23324ae1
FM
998
999 /**
9e7ad1ca
FM
1000 Inserts a line break at the current insertion point.
1001
1002 A line break forces wrapping within a paragraph, and can be introduced by
1003 using this function, by appending the wxChar value @b wxRichTextLineBreakChar
1004 to text content, or by typing Shift-Return.
23324ae1 1005 */
adaaa686 1006 virtual bool LineBreak();
23324ae1
FM
1007
1008 /**
7afd2b58 1009 Sets the basic (overall) style.
9e7ad1ca 1010
7afd2b58
JS
1011 This is the style of the whole buffer before further styles are applied,
1012 unlike the default style, which only affects the style currently being
1013 applied (for example, setting the default style to bold will cause
1014 subsequently inserted text to be bold).
23324ae1 1015 */
7afd2b58 1016 virtual void SetBasicStyle(const wxRichTextAttr& style) { GetBuffer().SetBasicStyle(style); }
23324ae1
FM
1017
1018 /**
7afd2b58
JS
1019 Gets the basic (overall) style.
1020
1021 This is the style of the whole buffer before further styles are applied,
1022 unlike the default style, which only affects the style currently being
1023 applied (for example, setting the default style to bold will cause
1024 subsequently inserted text to be bold).
23324ae1 1025 */
7afd2b58 1026 virtual const wxRichTextAttr& GetBasicStyle() const { return GetBuffer().GetBasicStyle(); }
23324ae1
FM
1027
1028 /**
7afd2b58 1029 Begins applying a style.
23324ae1 1030 */
7afd2b58 1031 virtual bool BeginStyle(const wxRichTextAttr& style) { return GetBuffer().BeginStyle(style); }
23324ae1
FM
1032
1033 /**
7afd2b58 1034 Ends the current style.
23324ae1 1035 */
7afd2b58 1036 virtual bool EndStyle() { return GetBuffer().EndStyle(); }
23324ae1
FM
1037
1038 /**
7afd2b58 1039 Ends application of all styles in the current style stack.
23324ae1 1040 */
7afd2b58 1041 virtual bool EndAllStyles() { return GetBuffer().EndAllStyles(); }
23324ae1
FM
1042
1043 /**
7afd2b58 1044 Begins using bold.
23324ae1 1045 */
7afd2b58 1046 bool BeginBold() { return GetBuffer().BeginBold(); }
23324ae1
FM
1047
1048 /**
7afd2b58 1049 Ends using bold.
23324ae1 1050 */
7afd2b58 1051 bool EndBold() { return GetBuffer().EndBold(); }
23324ae1
FM
1052
1053 /**
7afd2b58 1054 Begins using italic.
23324ae1 1055 */
7afd2b58 1056 bool BeginItalic() { return GetBuffer().BeginItalic(); }
23324ae1
FM
1057
1058 /**
7afd2b58 1059 Ends using italic.
23324ae1 1060 */
7afd2b58 1061 bool EndItalic() { return GetBuffer().EndItalic(); }
23324ae1
FM
1062
1063 /**
7afd2b58 1064 Begins using underlining.
23324ae1 1065 */
7afd2b58 1066 bool BeginUnderline() { return GetBuffer().BeginUnderline(); }
23324ae1
FM
1067
1068 /**
7afd2b58 1069 End applying underlining.
23324ae1 1070 */
7afd2b58 1071 bool EndUnderline() { return GetBuffer().EndUnderline(); }
23324ae1
FM
1072
1073 /**
7afd2b58 1074 Begins using the given point size.
23324ae1 1075 */
7afd2b58 1076 bool BeginFontSize(int pointSize) { return GetBuffer().BeginFontSize(pointSize); }
23324ae1
FM
1077
1078 /**
7afd2b58 1079 Ends using a point size.
23324ae1 1080 */
7afd2b58 1081 bool EndFontSize() { return GetBuffer().EndFontSize(); }
23324ae1
FM
1082
1083 /**
7afd2b58 1084 Begins using this font.
23324ae1 1085 */
7afd2b58 1086 bool BeginFont(const wxFont& font) { return GetBuffer().BeginFont(font); }
23324ae1
FM
1087
1088 /**
7afd2b58 1089 Ends using a font.
23324ae1 1090 */
7afd2b58 1091 bool EndFont() { return GetBuffer().EndFont(); }
23324ae1
FM
1092
1093 /**
7afd2b58 1094 Begins using this colour.
23324ae1 1095 */
7afd2b58 1096 bool BeginTextColour(const wxColour& colour) { return GetBuffer().BeginTextColour(colour); }
23324ae1 1097
23324ae1 1098 /**
7afd2b58
JS
1099 Ends applying a text colour.
1100 */
1101 bool EndTextColour() { return GetBuffer().EndTextColour(); }
9e7ad1ca 1102
7afd2b58
JS
1103 /**
1104 Begins using alignment.
1105 For alignment values, see wxTextAttr.
1106 */
1107 bool BeginAlignment(wxTextAttrAlignment alignment) { return GetBuffer().BeginAlignment(alignment); }
9e7ad1ca 1108
7afd2b58
JS
1109 /**
1110 Ends alignment.
1111 */
1112 bool EndAlignment() { return GetBuffer().EndAlignment(); }
9e7ad1ca 1113
7afd2b58
JS
1114 /**
1115 Begins applying a left indent and subindent in tenths of a millimetre.
1116 The subindent is an offset from the left edge of the paragraph, and is
1117 used for all but the first line in a paragraph. A positive value will
1118 cause the first line to appear to the left of the subsequent lines, and
1119 a negative value will cause the first line to be indented to the right
1120 of the subsequent lines.
1121
1122 wxRichTextBuffer uses indentation to render a bulleted item. The
1123 content of the paragraph, including the first line, starts at the
1124 @a leftIndent plus the @a leftSubIndent.
1125
1126 @param leftIndent
1127 The distance between the margin and the bullet.
1128 @param leftSubIndent
1129 The distance between the left edge of the bullet and the left edge
1130 of the actual paragraph.
23324ae1 1131 */
7afd2b58 1132 bool BeginLeftIndent(int leftIndent, int leftSubIndent = 0) { return GetBuffer().BeginLeftIndent(leftIndent, leftSubIndent); }
23324ae1
FM
1133
1134 /**
7afd2b58 1135 Ends left indent.
23324ae1 1136 */
7afd2b58 1137 bool EndLeftIndent() { return GetBuffer().EndLeftIndent(); }
23324ae1
FM
1138
1139 /**
7afd2b58 1140 Begins a right indent, specified in tenths of a millimetre.
23324ae1 1141 */
7afd2b58 1142 bool BeginRightIndent(int rightIndent) { return GetBuffer().BeginRightIndent(rightIndent); }
23324ae1
FM
1143
1144 /**
7afd2b58 1145 Ends right indent.
23324ae1 1146 */
7afd2b58 1147 bool EndRightIndent() { return GetBuffer().EndRightIndent(); }
23324ae1
FM
1148
1149 /**
7afd2b58
JS
1150 Begins paragraph spacing; pass the before-paragraph and after-paragraph spacing
1151 in tenths of a millimetre.
23324ae1 1152 */
7afd2b58 1153 bool BeginParagraphSpacing(int before, int after) { return GetBuffer().BeginParagraphSpacing(before, after); }
23324ae1
FM
1154
1155 /**
7afd2b58 1156 Ends paragraph spacing.
23324ae1 1157 */
7afd2b58 1158 bool EndParagraphSpacing() { return GetBuffer().EndParagraphSpacing(); }
23324ae1
FM
1159
1160 /**
7afd2b58
JS
1161 Begins appling line spacing. @e spacing is a multiple, where 10 means
1162 single-spacing, 15 means 1.5 spacing, and 20 means double spacing.
1163
1164 The ::wxTextAttrLineSpacing constants are defined for convenience.
23324ae1 1165 */
7afd2b58 1166 bool BeginLineSpacing(int lineSpacing) { return GetBuffer().BeginLineSpacing(lineSpacing); }
23324ae1
FM
1167
1168 /**
7afd2b58 1169 Ends line spacing.
23324ae1 1170 */
7afd2b58 1171 bool EndLineSpacing() { return GetBuffer().EndLineSpacing(); }
23324ae1
FM
1172
1173 /**
7afd2b58
JS
1174 Begins a numbered bullet.
1175
1176 This call will be needed for each item in the list, and the
1177 application should take care of incrementing the numbering.
1178
1179 @a bulletNumber is a number, usually starting with 1.
1180 @a leftIndent and @a leftSubIndent are values in tenths of a millimetre.
1181 @a bulletStyle is a bitlist of the ::wxTextAttrBulletStyle values.
1182
1183 wxRichTextBuffer uses indentation to render a bulleted item.
1184 The left indent is the distance between the margin and the bullet.
1185 The content of the paragraph, including the first line, starts
1186 at leftMargin + leftSubIndent.
1187 So the distance between the left edge of the bullet and the
1188 left of the actual paragraph is leftSubIndent.
23324ae1 1189 */
7afd2b58
JS
1190 bool BeginNumberedBullet(int bulletNumber, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_ARABIC|wxTEXT_ATTR_BULLET_STYLE_PERIOD)
1191 { return GetBuffer().BeginNumberedBullet(bulletNumber, leftIndent, leftSubIndent, bulletStyle); }
23324ae1
FM
1192
1193 /**
7afd2b58 1194 Ends application of a numbered bullet.
23324ae1 1195 */
7afd2b58 1196 bool EndNumberedBullet() { return GetBuffer().EndNumberedBullet(); }
23324ae1
FM
1197
1198 /**
7afd2b58
JS
1199 Begins applying a symbol bullet, using a character from the current font.
1200 See BeginNumberedBullet() for an explanation of how indentation is used
1201 to render the bulleted paragraph.
23324ae1 1202 */
7afd2b58
JS
1203 bool BeginSymbolBullet(const wxString& symbol, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_SYMBOL)
1204 { return GetBuffer().BeginSymbolBullet(symbol, leftIndent, leftSubIndent, bulletStyle); }
23324ae1
FM
1205
1206 /**
7afd2b58 1207 Ends applying a symbol bullet.
23324ae1 1208 */
7afd2b58 1209 bool EndSymbolBullet() { return GetBuffer().EndSymbolBullet(); }
23324ae1
FM
1210
1211 /**
7afd2b58 1212 Begins applying a symbol bullet.
23324ae1 1213 */
7afd2b58
JS
1214 bool BeginStandardBullet(const wxString& bulletName, int leftIndent, int leftSubIndent, int bulletStyle = wxTEXT_ATTR_BULLET_STYLE_STANDARD)
1215 { return GetBuffer().BeginStandardBullet(bulletName, leftIndent, leftSubIndent, bulletStyle); }
23324ae1
FM
1216
1217 /**
7afd2b58 1218 Begins applying a standard bullet.
23324ae1 1219 */
7afd2b58 1220 bool EndStandardBullet() { return GetBuffer().EndStandardBullet(); }
23324ae1
FM
1221
1222 /**
7afd2b58 1223 Begins using the named character style.
23324ae1 1224 */
7afd2b58 1225 bool BeginCharacterStyle(const wxString& characterStyle) { return GetBuffer().BeginCharacterStyle(characterStyle); }
23324ae1
FM
1226
1227 /**
7afd2b58 1228 Ends application of a named character style.
23324ae1 1229 */
7afd2b58 1230 bool EndCharacterStyle() { return GetBuffer().EndCharacterStyle(); }
23324ae1
FM
1231
1232 /**
7afd2b58 1233 Begins applying the named paragraph style.
23324ae1 1234 */
7afd2b58 1235 bool BeginParagraphStyle(const wxString& paragraphStyle) { return GetBuffer().BeginParagraphStyle(paragraphStyle); }
23324ae1
FM
1236
1237 /**
7afd2b58 1238 Ends application of a named paragraph style.
23324ae1 1239 */
7afd2b58 1240 bool EndParagraphStyle() { return GetBuffer().EndParagraphStyle(); }
23324ae1
FM
1241
1242 /**
7afd2b58
JS
1243 Begins using a specified list style.
1244 Optionally, you can also pass a level and a number.
23324ae1 1245 */
7afd2b58 1246 bool BeginListStyle(const wxString& listStyle, int level = 1, int number = 1) { return GetBuffer().BeginListStyle(listStyle, level, number); }
23324ae1
FM
1247
1248 /**
7afd2b58 1249 Ends using a specified list style.
23324ae1 1250 */
7afd2b58 1251 bool EndListStyle() { return GetBuffer().EndListStyle(); }
23324ae1 1252
826c4761 1253 /**
7afd2b58 1254 Begins applying wxTEXT_ATTR_URL to the content.
826c4761 1255
7afd2b58
JS
1256 Pass a URL and optionally, a character style to apply, since it is common
1257 to mark a URL with a familiar style such as blue text with underlining.
826c4761 1258 */
7afd2b58 1259 bool BeginURL(const wxString& url, const wxString& characterStyle = wxEmptyString) { return GetBuffer().BeginURL(url, characterStyle); }
826c4761 1260
23324ae1 1261 /**
7afd2b58 1262 Ends applying a URL.
23324ae1 1263 */
7afd2b58 1264 bool EndURL() { return GetBuffer().EndURL(); }
23324ae1
FM
1265
1266 /**
7afd2b58 1267 Sets the default style to the style under the cursor.
23324ae1 1268 */
7afd2b58 1269 bool SetDefaultStyleToCursorStyle();
23324ae1
FM
1270
1271 /**
7afd2b58 1272 Cancels any selection.
23324ae1 1273 */
7afd2b58 1274 virtual void SelectNone();
23324ae1 1275
23324ae1 1276 /**
7afd2b58 1277 Selects the word at the given character position.
23324ae1 1278 */
7afd2b58 1279 virtual bool SelectWord(long position);
23324ae1
FM
1280
1281 /**
7afd2b58
JS
1282 Returns the selection range in character positions. -1, -1 means no selection.
1283
1284 The range is in API convention, i.e. a single character selection is denoted
1285 by (n, n+1)
23324ae1 1286 */
7afd2b58 1287 wxRichTextRange GetSelectionRange() const;
23324ae1
FM
1288
1289 /**
7afd2b58
JS
1290 Sets the selection to the given range.
1291 The end point of range is specified as the last character position of the span
1292 of text, plus one.
1293
1294 So, for example, to set the selection for a character at position 5, use the
1295 range (5,6).
23324ae1 1296 */
7afd2b58 1297 void SetSelectionRange(const wxRichTextRange& range);
23324ae1
FM
1298
1299 /**
7afd2b58
JS
1300 Returns the selection range in character positions. -2, -2 means no selection
1301 -1, -1 means select everything.
1302 The range is in internal format, i.e. a single character selection is denoted
1303 by (n, n)
23324ae1 1304 */
7afd2b58 1305 wxRichTextRange GetInternalSelectionRange() const { return m_selection.GetRange(); }
23324ae1
FM
1306
1307 /**
7afd2b58
JS
1308 Sets the selection range in character positions. -2, -2 means no selection
1309 -1, -1 means select everything.
1310 The range is in internal format, i.e. a single character selection is denoted
1311 by (n, n)
23324ae1 1312 */
7afd2b58 1313 void SetInternalSelectionRange(const wxRichTextRange& range) { m_selection.Set(range, GetFocusObject()); }
23324ae1
FM
1314
1315 /**
7afd2b58 1316 Adds a new paragraph of text to the end of the buffer.
23324ae1 1317 */
7afd2b58 1318 virtual wxRichTextRange AddParagraph(const wxString& text);
23324ae1
FM
1319
1320 /**
7afd2b58 1321 Adds an image to the control's buffer.
23324ae1 1322 */
7afd2b58 1323 virtual wxRichTextRange AddImage(const wxImage& image);
23324ae1
FM
1324
1325 /**
7afd2b58
JS
1326 Lays out the buffer, which must be done before certain operations, such as
1327 setting the caret position.
1328 This function should not normally be required by the application.
23324ae1 1329 */
7afd2b58 1330 virtual bool LayoutContent(bool onlyVisibleRect = false);
23324ae1
FM
1331
1332 /**
7afd2b58 1333 Move the caret to the given character position.
9e7ad1ca 1334
7afd2b58
JS
1335 Please note that this does not update the current editing style
1336 from the new position; to do that, call wxRichTextCtrl::SetInsertionPoint instead.
23324ae1 1337 */
7afd2b58 1338 virtual bool MoveCaret(long pos, bool showAtLineStart = false, wxRichTextParagraphLayoutBox* container = NULL);
23324ae1
FM
1339
1340 /**
7afd2b58 1341 Moves right.
23324ae1 1342 */
7afd2b58 1343 virtual bool MoveRight(int noPositions = 1, int flags = 0);
23324ae1
FM
1344
1345 /**
7afd2b58
JS
1346 Moves left.
1347 */
1348 virtual bool MoveLeft(int noPositions = 1, int flags = 0);
346c54a4 1349
7afd2b58
JS
1350 /**
1351 Moves to the start of the paragraph.
23324ae1 1352 */
7afd2b58 1353 virtual bool MoveUp(int noLines = 1, int flags = 0);
23324ae1
FM
1354
1355 /**
7afd2b58 1356 Moves the caret down.
23324ae1 1357 */
7afd2b58 1358 virtual bool MoveDown(int noLines = 1, int flags = 0);
23324ae1
FM
1359
1360 /**
7afd2b58 1361 Moves to the end of the line.
23324ae1 1362 */
7afd2b58 1363 virtual bool MoveToLineEnd(int flags = 0);
23324ae1
FM
1364
1365 /**
7afd2b58 1366 Moves to the start of the line.
23324ae1 1367 */
7afd2b58 1368 virtual bool MoveToLineStart(int flags = 0);
23324ae1
FM
1369
1370 /**
7afd2b58 1371 Moves to the end of the paragraph.
23324ae1 1372 */
7afd2b58 1373 virtual bool MoveToParagraphEnd(int flags = 0);
23324ae1
FM
1374
1375 /**
7afd2b58 1376 Moves to the start of the paragraph.
23324ae1 1377 */
7afd2b58 1378 virtual bool MoveToParagraphStart(int flags = 0);
23324ae1
FM
1379
1380 /**
7afd2b58 1381 Moves to the start of the buffer.
23324ae1 1382 */
7afd2b58 1383 virtual bool MoveHome(int flags = 0);
23324ae1
FM
1384
1385 /**
7afd2b58
JS
1386 Moves to the end of the buffer.
1387 */
1388 virtual bool MoveEnd(int flags = 0);
9e7ad1ca 1389
7afd2b58
JS
1390 /**
1391 Moves one or more pages up.
23324ae1 1392 */
7afd2b58 1393 virtual bool PageUp(int noPages = 1, int flags = 0);
23324ae1
FM
1394
1395 /**
7afd2b58 1396 Moves one or more pages down.
23324ae1 1397 */
7afd2b58 1398 virtual bool PageDown(int noPages = 1, int flags = 0);
23324ae1
FM
1399
1400 /**
7afd2b58 1401 Moves a number of words to the left.
23324ae1 1402 */
7afd2b58 1403 virtual bool WordLeft(int noPages = 1, int flags = 0);
23324ae1 1404
23324ae1 1405 /**
7afd2b58
JS
1406 Move a nuber of words to the right.
1407 */
1408 virtual bool WordRight(int noPages = 1, int flags = 0);
9e7ad1ca 1409
7afd2b58
JS
1410 //@{
1411 /**
1412 Returns the buffer associated with the control.
23324ae1 1413 */
7afd2b58
JS
1414 wxRichTextBuffer& GetBuffer() { return m_buffer; }
1415 const wxRichTextBuffer& GetBuffer() const { return m_buffer; }
23324ae1
FM
1416 //@}
1417
1418 /**
7afd2b58
JS
1419 Starts batching undo history for commands.
1420 */
1421 virtual bool BeginBatchUndo(const wxString& cmdName) { return m_buffer.BeginBatchUndo(cmdName); }
9e7ad1ca 1422
7afd2b58
JS
1423 /**
1424 Ends batching undo command history.
23324ae1 1425 */
7afd2b58 1426 virtual bool EndBatchUndo() { return m_buffer.EndBatchUndo(); }
23324ae1
FM
1427
1428 /**
7afd2b58
JS
1429 Returns @true if undo commands are being batched.
1430 */
1431 virtual bool BatchingUndo() const { return m_buffer.BatchingUndo(); }
9e7ad1ca 1432
7afd2b58
JS
1433 /**
1434 Starts suppressing undo history for commands.
23324ae1 1435 */
7afd2b58 1436 virtual bool BeginSuppressUndo() { return m_buffer.BeginSuppressUndo(); }
23324ae1 1437
23324ae1 1438 /**
7afd2b58
JS
1439 Ends suppressing undo command history.
1440 */
1441 virtual bool EndSuppressUndo() { return m_buffer.EndSuppressUndo(); }
9e7ad1ca 1442
7afd2b58
JS
1443 /**
1444 Returns @true if undo history suppression is on.
23324ae1 1445 */
7afd2b58 1446 virtual bool SuppressingUndo() const { return m_buffer.SuppressingUndo(); }
23324ae1 1447
23324ae1 1448 /**
7afd2b58
JS
1449 Test if this whole range has character attributes of the specified kind.
1450 If any of the attributes are different within the range, the test fails.
9e7ad1ca 1451
7afd2b58
JS
1452 You can use this to implement, for example, bold button updating.
1453 @a style must have flags indicating which attributes are of interest.
1454 */
1455 virtual bool HasCharacterAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const
1456 {
1457 return GetBuffer().HasCharacterAttributes(range.ToInternal(), style);
1458 }
9e7ad1ca 1459
7afd2b58
JS
1460 /**
1461 Test if this whole range has paragraph attributes of the specified kind.
1462 If any of the attributes are different within the range, the test fails.
1463 You can use this to implement, for example, centering button updating.
1464 @a style must have flags indicating which attributes are of interest.
1465 */
1466 virtual bool HasParagraphAttributes(const wxRichTextRange& range, const wxRichTextAttr& style) const
1467 {
1468 return GetBuffer().HasParagraphAttributes(range.ToInternal(), style);
1469 }
1470
1471 /**
1472 Returns @true if all of the selection is bold.
1473 */
1474 virtual bool IsSelectionBold();
1475
1476 /**
1477 Returns @true if all of the selection is italic.
1478 */
1479 virtual bool IsSelectionItalics();
1480
1481 /**
1482 Returns @true if all of the selection is underlined.
1483 */
1484 virtual bool IsSelectionUnderlined();
1485
1486 /**
1487 Returns @true if all of the selection is aligned according to the specified flag.
1488 */
1489 virtual bool IsSelectionAligned(wxTextAttrAlignment alignment);
1490
1491 /**
1492 Apples bold to the selection (undoable).
1493 */
1494 virtual bool ApplyBoldToSelection();
1495
1496 /**
1497 Applies italic to the selection (undoable).
1498 */
1499 virtual bool ApplyItalicToSelection();
1500
1501 /**
1502 Applies underline to the selection (undoable).
1503 */
1504 virtual bool ApplyUnderlineToSelection();
1505
1506 /**
1507 Applies the given alignment to the selection (undoable).
1508 For alignment values, see wxTextAttr.
1509 */
1510 virtual bool ApplyAlignmentToSelection(wxTextAttrAlignment alignment);
1511
1512 /**
1513 Applies the style sheet to the buffer, matching paragraph styles in the sheet
1514 against named styles in the buffer.
1515
1516 This might be useful if the styles have changed.
1517 If @a sheet is @NULL, the sheet set with SetStyleSheet() is used.
1518 Currently this applies paragraph styles only.
23324ae1 1519 */
7afd2b58 1520 virtual bool ApplyStyle(wxRichTextStyleDefinition* def);
23324ae1
FM
1521
1522 /**
9e7ad1ca
FM
1523 Sets the style sheet associated with the control.
1524 A style sheet allows named character and paragraph styles to be applied.
23324ae1 1525 */
7afd2b58 1526 void SetStyleSheet(wxRichTextStyleSheet* styleSheet) { GetBuffer().SetStyleSheet(styleSheet); }
23324ae1
FM
1527
1528 /**
7afd2b58
JS
1529 Returns the style sheet associated with the control, if any.
1530 A style sheet allows named character and paragraph styles to be applied.
23324ae1 1531 */
7afd2b58 1532 wxRichTextStyleSheet* GetStyleSheet() const { return GetBuffer().GetStyleSheet(); }
23324ae1
FM
1533
1534 /**
7afd2b58 1535 Push the style sheet to top of stack.
23324ae1 1536 */
7afd2b58 1537 bool PushStyleSheet(wxRichTextStyleSheet* styleSheet) { return GetBuffer().PushStyleSheet(styleSheet); }
23324ae1
FM
1538
1539 /**
7afd2b58 1540 Pops the style sheet from top of stack.
23324ae1 1541 */
7afd2b58 1542 wxRichTextStyleSheet* PopStyleSheet() { return GetBuffer().PopStyleSheet(); }
23324ae1
FM
1543
1544 /**
7afd2b58 1545 Applies the style sheet to the buffer, for example if the styles have changed.
23324ae1 1546 */
7afd2b58
JS
1547 bool ApplyStyleSheet(wxRichTextStyleSheet* styleSheet = NULL);
1548
1549// Command handlers
23324ae1
FM
1550
1551 /**
7afd2b58 1552 Sends the event to the control.
23324ae1 1553 */
7afd2b58 1554 void Command(wxCommandEvent& event);
23324ae1
FM
1555
1556 /**
7afd2b58 1557 Loads the first dropped file.
23324ae1 1558 */
7afd2b58
JS
1559 void OnDropFiles(wxDropFilesEvent& event);
1560
1561 void OnCaptureLost(wxMouseCaptureLostEvent& event);
1562 void OnSysColourChanged(wxSysColourChangedEvent& event);
23324ae1
FM
1563
1564 /**
7afd2b58 1565 Standard handler for the wxID_CUT command.
23324ae1 1566 */
7afd2b58 1567 void OnCut(wxCommandEvent& event);
23324ae1
FM
1568
1569 /**
7afd2b58 1570 Standard handler for the wxID_COPY command.
23324ae1 1571 */
7afd2b58 1572 void OnCopy(wxCommandEvent& event);
23324ae1 1573
23324ae1 1574 /**
7afd2b58 1575 Standard handler for the wxID_PASTE command.
23324ae1 1576 */
7afd2b58 1577 void OnPaste(wxCommandEvent& event);
9e7ad1ca
FM
1578
1579 /**
7afd2b58 1580 Standard handler for the wxID_UNDO command.
9e7ad1ca 1581 */
7afd2b58 1582 void OnUndo(wxCommandEvent& event);
9e7ad1ca 1583
9e7ad1ca 1584 /**
7afd2b58 1585 Standard handler for the wxID_REDO command.
9e7ad1ca 1586 */
7afd2b58 1587 void OnRedo(wxCommandEvent& event);
23324ae1
FM
1588
1589 /**
7afd2b58 1590 Standard handler for the wxID_SELECTALL command.
23324ae1 1591 */
7afd2b58 1592 void OnSelectAll(wxCommandEvent& event);
23324ae1
FM
1593
1594 /**
7afd2b58 1595 Standard handler for property commands.
23324ae1 1596 */
7afd2b58 1597 void OnProperties(wxCommandEvent& event);
5e6e278d 1598
7afd2b58
JS
1599 /**
1600 Standard handler for the wxID_CLEAR command.
1601 */
1602 void OnClear(wxCommandEvent& event);
5e6e278d
FM
1603
1604 /**
7afd2b58
JS
1605 Standard update handler for the wxID_CUT command.
1606 */
1607 void OnUpdateCut(wxUpdateUIEvent& event);
1608
1609 /**
1610 Standard update handler for the wxID_COPY command.
1611 */
1612 void OnUpdateCopy(wxUpdateUIEvent& event);
1613
1614 /**
1615 Standard update handler for the wxID_PASTE command.
1616 */
1617 void OnUpdatePaste(wxUpdateUIEvent& event);
1618
1619 /**
1620 Standard update handler for the wxID_UNDO command.
1621 */
1622 void OnUpdateUndo(wxUpdateUIEvent& event);
1623
1624 /**
1625 Standard update handler for the wxID_REDO command.
1626 */
1627 void OnUpdateRedo(wxUpdateUIEvent& event);
1628
1629 /**
1630 Standard update handler for the wxID_SELECTALL command.
1631 */
1632 void OnUpdateSelectAll(wxUpdateUIEvent& event);
1633
1634 /**
1635 Standard update handler for property commands.
1636 */
1637
1638 void OnUpdateProperties(wxUpdateUIEvent& event);
1639
1640 /**
1641 Standard update handler for the wxID_CLEAR command.
1642 */
1643 void OnUpdateClear(wxUpdateUIEvent& event);
1644
1645 /**
1646 Shows a standard context menu with undo, redo, cut, copy, paste, clear, and
1647 select all commands.
1648 */
1649 void OnContextMenu(wxContextMenuEvent& event);
1650
1651// Event handlers
1652
1653 // Painting
1654 void OnPaint(wxPaintEvent& event);
1655 void OnEraseBackground(wxEraseEvent& event);
1656
1657 // Left-click
1658 void OnLeftClick(wxMouseEvent& event);
1659
1660 // Left-up
1661 void OnLeftUp(wxMouseEvent& event);
1662
1663 // Motion
1664 void OnMoveMouse(wxMouseEvent& event);
1665
1666 // Left-double-click
1667 void OnLeftDClick(wxMouseEvent& event);
1668
1669 // Middle-click
1670 void OnMiddleClick(wxMouseEvent& event);
1671
1672 // Right-click
1673 void OnRightClick(wxMouseEvent& event);
1674
1675 // Key press
1676 void OnChar(wxKeyEvent& event);
1677
1678 // Sizing
1679 void OnSize(wxSizeEvent& event);
1680
1681 // Setting/losing focus
1682 void OnSetFocus(wxFocusEvent& event);
1683 void OnKillFocus(wxFocusEvent& event);
1684
1685 // Idle-time processing
1686 void OnIdle(wxIdleEvent& event);
1687
1688 // Scrolling
1689 void OnScroll(wxScrollWinEvent& event);
1690
1691 /**
1692 Sets the font, and also the basic and default attributes
1693 (see wxRichTextCtrl::SetDefaultStyle).
5e6e278d 1694 */
7afd2b58
JS
1695 virtual bool SetFont(const wxFont& font);
1696
1697 /**
1698 A helper function setting up scrollbars, for example after a resize.
1699 */
1700 virtual void SetupScrollbars(bool atTop = false);
1701
1702 /**
1703 Helper function implementing keyboard navigation.
1704 */
1705 virtual bool KeyboardNavigate(int keyCode, int flags);
5e6e278d
FM
1706
1707 /**
7afd2b58 1708 Paints the background.
5e6e278d 1709 */
7afd2b58
JS
1710 virtual void PaintBackground(wxDC& dc);
1711
1712 /**
1713 Other user defined painting after everything else (i.e. all text) is painted.
1714
1715 @since 2.9.1
1716 */
1717 virtual void PaintAboveContent(wxDC& WXUNUSED(dc)) {}
1718
1719#if wxRICHTEXT_BUFFERED_PAINTING
1720 /**
1721 Recreates the buffer bitmap if necessary.
1722 */
1723 virtual bool RecreateBuffer(const wxSize& size = wxDefaultSize);
1724#endif
1725
1726 // Write text
1727 virtual void DoWriteText(const wxString& value, int flags = 0);
1728
1729 // Should we inherit colours?
1730 virtual bool ShouldInheritColours() const { return false; }
1731
1732 /**
1733 Internal function to position the visible caret according to the current caret
1734 position.
1735 */
1736 virtual void PositionCaret(wxRichTextParagraphLayoutBox* container = NULL);
1737
1738 /**
1739 Helper function for extending the selection, returning @true if the selection
1740 was changed. Selections are in caret positions.
1741 */
1742 virtual bool ExtendSelection(long oldPosition, long newPosition, int flags);
1743
1744 /**
1745 Scrolls @a position into view. This function takes a caret position.
1746 */
1747 virtual bool ScrollIntoView(long position, int keyCode);
1748
1749 /**
1750 Refreshes the area affected by a selection change.
1751 */
1752 bool RefreshForSelectionChange(const wxRichTextSelection& oldSelection, const wxRichTextSelection& newSelection);
1753
1754 /**
1755 Sets the caret position.
1756
1757 The caret position is the character position just before the caret.
1758 A value of -1 means the caret is at the start of the buffer.
1759 Please note that this does not update the current editing style
1760 from the new position or cause the actual caret to be refreshed; to do that,
1761 call wxRichTextCtrl::SetInsertionPoint instead.
1762 */
1763 void SetCaretPosition(long position, bool showAtLineStart = false) ;
1764
1765 /**
1766 Returns the current caret position.
1767 */
1768 long GetCaretPosition() const { return m_caretPosition; }
1769
1770 /**
1771 The adjusted caret position is the character position adjusted to take
1772 into account whether we're at the start of a paragraph, in which case
1773 style information should be taken from the next position, not current one.
1774 */
1775 long GetAdjustedCaretPosition(long caretPos) const;
1776
1777 /**
1778 Move the caret one visual step forward: this may mean setting a flag
1779 and keeping the same position if we're going from the end of one line
1780 to the start of the next, which may be the exact same caret position.
1781 */
1782 void MoveCaretForward(long oldPosition) ;
1783
1784 /**
1785 Move the caret one visual step forward: this may mean setting a flag
1786 and keeping the same position if we're going from the end of one line
1787 to the start of the next, which may be the exact same caret position.
1788 */
1789 void MoveCaretBack(long oldPosition) ;
1790
1791 /**
1792 Returns the caret height and position for the given character position.
1793 If container is null, the current focus object will be used.
1794
1795 @beginWxPerlOnly
1796 In wxPerl this method is implemented as
1797 GetCaretPositionForIndex(@a position) returning a
1798 2-element list (ok, rect).
1799 @endWxPerlOnly
1800 */
1801 bool GetCaretPositionForIndex(long position, wxRect& rect, wxRichTextParagraphLayoutBox* container = NULL);
1802
1803 /**
1804 Internal helper function returning the line for the visible caret position.
1805 If the caret is shown at the very end of the line, it means the next character
1806 is actually on the following line.
1807 So this function gets the line we're expecting to find if this is the case.
1808 */
1809 wxRichTextLine* GetVisibleLineForCaretPosition(long caretPosition) const;
1810
1811 /**
1812 Gets the command processor associated with the control's buffer.
1813 */
1814 wxCommandProcessor* GetCommandProcessor() const { return GetBuffer().GetCommandProcessor(); }
1815
1816 /**
1817 Deletes content if there is a selection, e.g. when pressing a key.
1818 Returns the new caret position in @e newPos, or leaves it if there
1819 was no action. This is undoable.
1820
1821 @beginWxPerlOnly
1822 In wxPerl this method takes no arguments and returns a 2-element
1823 list (ok, newPos).
1824 @endWxPerlOnly
1825 */
1826 bool DeleteSelectedContent(long* newPos= NULL);
1827
1828 /**
1829 Transforms logical (unscrolled) position to physical window position.
1830 */
1831 wxPoint GetPhysicalPoint(const wxPoint& ptLogical) const;
1832
1833 /**
1834 Transforms physical window position to logical (unscrolled) position.
1835 */
1836 wxPoint GetLogicalPoint(const wxPoint& ptPhysical) const;
1837
1838 /**
1839 Helper function for finding the caret position for the next word.
1840 Direction is 1 (forward) or -1 (backwards).
1841 */
1842 virtual long FindNextWordPosition(int direction = 1) const;
1843
1844 /**
1845 Returns @true if the given position is visible on the screen.
1846 */
1847 bool IsPositionVisible(long pos) const;
1848
1849 /**
1850 Returns the first visible position in the current view.
1851 */
1852 long GetFirstVisiblePosition() const;
1853
1854 /**
1855 Returns the caret position since the default formatting was changed. As
1856 soon as this position changes, we no longer reflect the default style
1857 in the UI. A value of -2 means that we should only reflect the style of the
1858 content under the caret.
1859 */
1860 long GetCaretPositionForDefaultStyle() const { return m_caretPositionForDefaultStyle; }
1861
1862 /**
1863 Set the caret position for the default style that the user is selecting.
1864 */
1865 void SetCaretPositionForDefaultStyle(long pos) { m_caretPositionForDefaultStyle = pos; }
1866
1867 /**
1868 Returns @true if the user has recently set the default style without moving
1869 the caret, and therefore the UI needs to reflect the default style and not
1870 the style at the caret.
1871
1872 Below is an example of code that uses this function to determine whether the UI
1873 should show that the current style is bold.
1874
1875 @see SetAndShowDefaultStyle().
1876 */
1877 bool IsDefaultStyleShowing() const { return m_caretPositionForDefaultStyle != -2; }
1878
1879 /**
1880 Sets @a attr as the default style and tells the control that the UI should
1881 reflect this attribute until the user moves the caret.
1882
1883 @see IsDefaultStyleShowing().
1884 */
1885 void SetAndShowDefaultStyle(const wxRichTextAttr& attr)
1886 {
1887 SetDefaultStyle(attr);
1888 SetCaretPositionForDefaultStyle(GetCaretPosition());
1889 }
1890
1891 /**
1892 Returns the first visible point in the window.
1893 */
1894 wxPoint GetFirstVisiblePoint() const;
1895
1896#ifdef DOXYGEN
1897 /**
1898 Returns the content of the entire control as a string.
1899 */
1900 virtual wxString GetValue() const;
1901
1902 /**
1903 Replaces existing content with the given text.
1904 */
1905 virtual void SetValue(const wxString& value);
1906
1907 /**
1908 Call this function to prevent refresh and allow fast updates, and then Thaw() to
1909 refresh the control.
1910 */
1911 void Freeze();
1912
1913 /**
1914 Call this function to end a Freeze and refresh the display.
1915 */
1916 void Thaw();
1917
1918 /**
1919 Returns @true if Freeze has been called without a Thaw.
1920 */
1921 bool IsFrozen() const;
1922
1923#endif
1924
1925// Implementation
1926
1927 /**
1928 Sets up the caret for the given position and container, after a mouse click.
1929 */
1930 bool SetCaretPositionAfterClick(wxRichTextParagraphLayoutBox* container, long position, int hitTestFlags, bool extendSelection = false);
1931
1932 /**
1933 Find the caret position for the combination of hit-test flags and character position.
1934 Returns the caret position and also an indication of where to place the caret (caretLineStart)
1935 since this is ambiguous (same position used for end of line and start of next).
1936 */
1937 long FindCaretPositionForCharacterPosition(long position, int hitTestFlags, wxRichTextParagraphLayoutBox* container,
1938 bool& caretLineStart);
1939
1940 /**
1941 Font names take a long time to retrieve, so cache them (on demand).
1942 */
1943 static const wxArrayString& GetAvailableFontNames();
1944
1945 /**
1946 Clears the cache of available font names.
1947 */
1948 static void ClearAvailableFontNames();
1949
1950 WX_FORWARD_TO_SCROLL_HELPER()
1951
1952 // implement wxTextEntry methods
1953 virtual wxString DoGetValue() const;
1954
1955protected:
1956 // implement the wxTextEntry pure virtual method
1957 virtual wxWindow *GetEditableWindow() { return this; }
1958
1959 // margins functions
1960 virtual bool DoSetMargins(const wxPoint& pt);
1961 virtual wxPoint DoGetMargins() const;
1962
1963 // FIXME: this does not work, it allows this code to compile but will fail
1964 // during run-time
1965#ifndef __WXUNIVERSAL__
1966#ifdef __WXMSW__
1967 virtual WXHWND GetEditHWND() const { return GetHWND(); }
1968#endif
1969#ifdef __WXMOTIF__
1970 virtual WXWidget GetTextWidget() const { return NULL; }
1971#endif
1972#ifdef __WXGTK20__
1973 virtual GtkEditable *GetEditable() const { return NULL; }
1974 virtual GtkEntry *GetEntry() const { return NULL; }
1975#endif
1976#endif // !__WXUNIVERSAL__
1977
1978// Overrides
1979protected:
1980
1981 /**
1982 Currently this simply returns @c wxSize(10, 10).
1983 */
1984 virtual wxSize DoGetBestSize() const ;
1985
1986 virtual void DoSetValue(const wxString& value, int flags = 0);
1987
1988 virtual void DoThaw();
1989
1990
1991// Data members
1992private:
1993#if wxRICHTEXT_BUFFERED_PAINTING
1994 /// Buffer bitmap
1995 wxBitmap m_bufferBitmap;
1996#endif
1997
1998 /// Text buffer
1999 wxRichTextBuffer m_buffer;
2000
2001 wxMenu* m_contextMenu;
2002
2003 /// Caret position (1 less than the character position, so -1 is the
2004 /// first caret position).
2005 long m_caretPosition;
2006
2007 /// Caret position when the default formatting has been changed. As
2008 /// soon as this position changes, we no longer reflect the default style
2009 /// in the UI.
2010 long m_caretPositionForDefaultStyle;
2011
2012 /// Selection range in character positions. -2, -2 means no selection.
2013 wxRichTextSelection m_selection;
2014
2015 wxRichTextCtrlSelectionState m_selectionState;
2016
2017 /// Anchor so we know how to extend the selection
2018 /// It's a caret position since it's between two characters.
2019 long m_selectionAnchor;
2020
2021 /// Anchor object if selecting multiple container objects, such as grid cells.
2022 wxRichTextObject* m_selectionAnchorObject;
2023
2024 /// Are we editable?
2025 bool m_editable;
2026
2027 /// Are we showing the caret position at the start of a line
2028 /// instead of at the end of the previous one?
2029 bool m_caretAtLineStart;
2030
2031 /// Are we dragging a selection?
2032 bool m_dragging;
2033
2034 /// Start position for drag
2035 wxPoint m_dragStart;
2036
2037 /// Do we need full layout in idle?
2038 bool m_fullLayoutRequired;
2039 wxLongLong m_fullLayoutTime;
2040 long m_fullLayoutSavedPosition;
2041
2042 /// Threshold for doing delayed layout
2043 long m_delayedLayoutThreshold;
2044
2045 /// Cursors
2046 wxCursor m_textCursor;
2047 wxCursor m_urlCursor;
2048
2049 static wxArrayString sm_availableFontNames;
2050
2051 wxRichTextContextMenuPropertiesInfo m_contextMenuPropertiesInfo;
2052
2053 /// The object that currently has the editing focus
2054 wxRichTextParagraphLayoutBox* m_focusObject;
2055};
2056
2057/**
2058 @class wxRichTextEvent
2059
2060 This is the event class for wxRichTextCtrl notifications.
2061
2062 @beginEventTable{wxRichTextEvent}
2063 @event{EVT_RICHTEXT_LEFT_CLICK(id, func)}
2064 Process a @c wxEVT_COMMAND_RICHTEXT_LEFT_CLICK event, generated when the user
2065 releases the left mouse button over an object.
2066 @event{EVT_RICHTEXT_RIGHT_CLICK(id, func)}
2067 Process a @c wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK event, generated when the user
2068 releases the right mouse button over an object.
2069 @event{EVT_RICHTEXT_MIDDLE_CLICK(id, func)}
2070 Process a @c wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK event, generated when the user
2071 releases the middle mouse button over an object.
2072 @event{EVT_RICHTEXT_LEFT_DCLICK(id, func)}
2073 Process a @c wxEVT_COMMAND_RICHTEXT_DLEFT_CLICK event, generated when the user
2074 double-clicks an object.
2075 @event{EVT_RICHTEXT_RETURN(id, func)}
2076 Process a @c wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
2077 presses the return key. Valid event functions: GetFlags, GetPosition.
2078 @event{EVT_RICHTEXT_CHARACTER(id, func)}
2079 Process a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event, generated when the user
2080 presses a character key. Valid event functions: GetFlags, GetPosition, GetCharacter.
2081 @event{EVT_RICHTEXT_DELETE(id, func)}
2082 Process a @c wxEVT_COMMAND_RICHTEXT_DELETE event, generated when the user
2083 presses the backspace or delete key. Valid event functions: GetFlags, GetPosition.
2084 @event{EVT_RICHTEXT_RETURN(id, func)}
2085 Process a @c wxEVT_COMMAND_RICHTEXT_RETURN event, generated when the user
2086 presses the return key. Valid event functions: GetFlags, GetPosition.
2087 @event{EVT_RICHTEXT_STYLE_CHANGED(id, func)}
2088 Process a @c wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED event, generated when
2089 styling has been applied to the control. Valid event functions: GetPosition, GetRange.
2090 @event{EVT_RICHTEXT_STYLESHEET_CHANGED(id, func)}
2091 Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING event, generated
2092 when the control's stylesheet has changed, for example the user added,
2093 edited or deleted a style. Valid event functions: GetRange, GetPosition.
2094 @event{EVT_RICHTEXT_STYLESHEET_REPLACING(id, func)}
2095 Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING event, generated
2096 when the control's stylesheet is about to be replaced, for example when
2097 a file is loaded into the control.
2098 Valid event functions: Veto, GetOldStyleSheet, GetNewStyleSheet.
2099 @event{EVT_RICHTEXT_STYLESHEET_REPLACED(id, func)}
2100 Process a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED event, generated
2101 when the control's stylesheet has been replaced, for example when a file
2102 is loaded into the control.
2103 Valid event functions: GetOldStyleSheet, GetNewStyleSheet.
2104 @event{EVT_RICHTEXT_CONTENT_INSERTED(id, func)}
2105 Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED event, generated when
2106 content has been inserted into the control.
2107 Valid event functions: GetPosition, GetRange.
2108 @event{EVT_RICHTEXT_CONTENT_DELETED(id, func)}
2109 Process a @c wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED event, generated when
2110 content has been deleted from the control.
2111 Valid event functions: GetPosition, GetRange.
2112 @event{EVT_RICHTEXT_BUFFER_RESET(id, func)}
2113 Process a @c wxEVT_COMMAND_RICHTEXT_BUFFER_RESET event, generated when the
2114 buffer has been reset by deleting all content.
2115 You can use this to set a default style for the first new paragraph.
2116 @event{EVT_RICHTEXT_SELECTION_CHANGED(id, func)}
2117 Process a @c wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED event, generated when the
2118 selection range has changed.
2119 @event{EVT_RICHTEXT_FOCUS_OBJECT_CHANGED(id, func)}
2120 Process a @c wxEVT_COMMAND_RICHTEXT_FOCUS_OBJECT_CHANGED event, generated when the
2121 current focus object has changed.
2122 @endEventTable
2123
2124 @library{wxrichtext}
2125 @category{events,richtext}
2126*/
2127
2128class WXDLLIMPEXP_RICHTEXT wxRichTextEvent : public wxNotifyEvent
2129{
2130public:
2131 /**
2132 Constructor.
2133
2134 @param commandType
2135 The type of the event.
2136 @param id
2137 Window identifier. The value @c wxID_ANY indicates a default value.
2138 */
2139 wxRichTextEvent(wxEventType commandType = wxEVT_NULL, int winid = 0)
2140 : wxNotifyEvent(commandType, winid),
2141 m_flags(0), m_position(-1), m_oldStyleSheet(NULL), m_newStyleSheet(NULL),
2142 m_char((wxChar) 0), m_container(NULL), m_oldContainer(NULL)
2143 { }
2144
2145 /**
2146 Copy constructor.
2147 */
2148 wxRichTextEvent(const wxRichTextEvent& event)
2149 : wxNotifyEvent(event),
2150 m_flags(event.m_flags), m_position(-1),
2151 m_oldStyleSheet(event.m_oldStyleSheet), m_newStyleSheet(event.m_newStyleSheet),
2152 m_char((wxChar) 0), m_container(event.m_container), m_oldContainer(event.m_oldContainer)
2153 { }
2154
2155 /**
2156 Returns the buffer position at which the event occured.
2157 */
2158 long GetPosition() const { return m_position; }
2159
2160 /**
2161 Sets the buffer position variable.
2162 */
2163 void SetPosition(long pos) { m_position = pos; }
2164
2165 /**
2166 Returns flags indicating modifier keys pressed.
2167
2168 Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
2169 */
2170 int GetFlags() const { return m_flags; }
2171
2172 /**
2173 Sets flags indicating modifier keys pressed.
2174
2175 Possible values are @c wxRICHTEXT_CTRL_DOWN, @c wxRICHTEXT_SHIFT_DOWN, and @c wxRICHTEXT_ALT_DOWN.
2176 */
2177 void SetFlags(int flags) { m_flags = flags; }
2178
2179 /**
2180 Returns the old style sheet.
2181
2182 Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
2183 @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
2184 */
2185 wxRichTextStyleSheet* GetOldStyleSheet() const { return m_oldStyleSheet; }
2186
2187 /**
2188 Sets the old style sheet variable.
2189 */
2190 void SetOldStyleSheet(wxRichTextStyleSheet* sheet) { m_oldStyleSheet = sheet; }
2191
2192 /**
2193 Returns the new style sheet.
2194
2195 Can be used in a @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING or
2196 @c wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED event handler.
2197 */
2198 wxRichTextStyleSheet* GetNewStyleSheet() const { return m_newStyleSheet; }
2199
2200 /**
2201 Sets the new style sheet variable.
2202 */
2203 void SetNewStyleSheet(wxRichTextStyleSheet* sheet) { m_newStyleSheet = sheet; }
2204
2205 /**
2206 Gets the range for the current operation.
2207 */
2208 const wxRichTextRange& GetRange() const { return m_range; }
2209
2210 /**
2211 Sets the range variable.
2212 */
2213 void SetRange(const wxRichTextRange& range) { m_range = range; }
2214
2215 /**
2216 Returns the character pressed, within a @c wxEVT_COMMAND_RICHTEXT_CHARACTER event.
2217 */
2218 wxChar GetCharacter() const { return m_char; }
2219
2220 /**
2221 Sets the character variable.
2222 */
2223 void SetCharacter(wxChar ch) { m_char = ch; }
2224
2225 /**
2226 Returns the container for which the event is relevant.
2227 */
2228 wxRichTextParagraphLayoutBox* GetContainer() const { return m_container; }
2229
2230 /**
2231 Sets the container for which the event is relevant.
2232 */
2233 void SetContainer(wxRichTextParagraphLayoutBox* container) { m_container = container; }
2234
2235 /**
2236 Returns the old container, for a focus change event.
2237 */
2238 wxRichTextParagraphLayoutBox* GetOldContainer() const { return m_oldContainer; }
2239
2240 /**
2241 Sets the old container, for a focus change event.
2242 */
2243 void SetOldContainer(wxRichTextParagraphLayoutBox* container) { m_oldContainer = container; }
2244
2245 virtual wxEvent *Clone() const { return new wxRichTextEvent(*this); }
2246
2247protected:
2248 int m_flags;
2249 long m_position;
2250 wxRichTextStyleSheet* m_oldStyleSheet;
2251 wxRichTextStyleSheet* m_newStyleSheet;
2252 wxRichTextRange m_range;
2253 wxChar m_char;
2254 wxRichTextParagraphLayoutBox* m_container;
2255 wxRichTextParagraphLayoutBox* m_oldContainer;
2256
2257private:
2258 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxRichTextEvent)
23324ae1 2259};
e54c96f1 2260
7afd2b58
JS
2261/*!
2262 * wxRichTextCtrl events
2263 */
2264wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, wxRichTextEvent );
2265wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, wxRichTextEvent );
2266wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, wxRichTextEvent );
2267wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, wxRichTextEvent );
2268wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_RETURN, wxRichTextEvent );
2269wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CHARACTER, wxRichTextEvent );
2270wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_DELETE, wxRichTextEvent );
2271
2272wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING, wxRichTextEvent );
2273wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED, wxRichTextEvent );
2274wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING, wxRichTextEvent );
2275wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED, wxRichTextEvent );
2276
2277wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED, wxRichTextEvent );
2278wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED, wxRichTextEvent );
2279wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED, wxRichTextEvent );
2280wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED, wxRichTextEvent );
2281wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_BUFFER_RESET, wxRichTextEvent );
2282wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_RICHTEXT, wxEVT_COMMAND_RICHTEXT_FOCUS_OBJECT_CHANGED, wxRichTextEvent );
2283
2284typedef void (wxEvtHandler::*wxRichTextEventFunction)(wxRichTextEvent&);
2285
2286#define wxRichTextEventHandler(func) \
2287 wxEVENT_HANDLER_CAST(wxRichTextEventFunction, func)
2288
2289#define EVT_RICHTEXT_LEFT_CLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_LEFT_CLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
2290#define EVT_RICHTEXT_RIGHT_CLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_RIGHT_CLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
2291#define EVT_RICHTEXT_MIDDLE_CLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_MIDDLE_CLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
2292#define EVT_RICHTEXT_LEFT_DCLICK(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_LEFT_DCLICK, id, -1, wxRichTextEventHandler( fn ), NULL ),
2293#define EVT_RICHTEXT_RETURN(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_RETURN, id, -1, wxRichTextEventHandler( fn ), NULL ),
2294#define EVT_RICHTEXT_CHARACTER(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CHARACTER, id, -1, wxRichTextEventHandler( fn ), NULL ),
2295#define EVT_RICHTEXT_DELETE(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_DELETE, id, -1, wxRichTextEventHandler( fn ), NULL ),
2296
2297#define EVT_RICHTEXT_STYLESHEET_CHANGING(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGING, id, -1, wxRichTextEventHandler( fn ), NULL ),
2298#define EVT_RICHTEXT_STYLESHEET_CHANGED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_CHANGED, id, -1, wxRichTextEventHandler( fn ), NULL ),
2299#define EVT_RICHTEXT_STYLESHEET_REPLACING(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACING, id, -1, wxRichTextEventHandler( fn ), NULL ),
2300#define EVT_RICHTEXT_STYLESHEET_REPLACED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLESHEET_REPLACED, id, -1, wxRichTextEventHandler( fn ), NULL ),
2301
2302#define EVT_RICHTEXT_CONTENT_INSERTED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CONTENT_INSERTED, id, -1, wxRichTextEventHandler( fn ), NULL ),
2303#define EVT_RICHTEXT_CONTENT_DELETED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_CONTENT_DELETED, id, -1, wxRichTextEventHandler( fn ), NULL ),
2304#define EVT_RICHTEXT_STYLE_CHANGED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_STYLE_CHANGED, id, -1, wxRichTextEventHandler( fn ), NULL ),
2305#define EVT_RICHTEXT_SELECTION_CHANGED(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_SELECTION_CHANGED, id, -1, wxRichTextEventHandler( fn ), NULL ),
2306#define EVT_RICHTEXT_BUFFER_RESET(id, fn) wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_COMMAND_RICHTEXT_BUFFER_RESET, id, -1, wxRichTextEventHandler( fn ), NULL ),
2307
2308#endif
2309 // wxUSE_RICHTEXT
2310
2311#endif
2312 // _WX_RICHTEXTCTRL_H_