Crazy Eddie's GUI System 0.8.7
Loading...
Searching...
No Matches
widgets/MultiLineEditbox.h
1/***********************************************************************
2 created: 30/6/2004
3 author: Paul D Turner
4
5 purpose: Interface to the Multi-lien edit box base class.
6*************************************************************************/
7/***************************************************************************
8 * Copyright (C) 2004 - 2006 Paul D Turner & The CEGUI Development Team
9 *
10 * Permission is hereby granted, free of charge, to any person obtaining
11 * a copy of this software and associated documentation files (the
12 * "Software"), to deal in the Software without restriction, including
13 * without limitation the rights to use, copy, modify, merge, publish,
14 * distribute, sublicense, and/or sell copies of the Software, and to
15 * permit persons to whom the Software is furnished to do so, subject to
16 * the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be
19 * included in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
25 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27 * OTHER DEALINGS IN THE SOFTWARE.
28 ***************************************************************************/
29#ifndef _CEGUIMultiLineEditbox_h_
30#define _CEGUIMultiLineEditbox_h_
31
32#include "../Base.h"
33#include "../Window.h"
34#include "../Font.h"
35
36#include <vector>
37
38#if defined(_MSC_VER)
39# pragma warning(push)
40# pragma warning(disable : 4251)
41#endif
42
43
44// Start of CEGUI namespace section
45namespace CEGUI
46{
52{
53public:
59
68 virtual Rectf getTextRenderArea(void) const = 0;
69
70protected:
71 // base class overrides
73};
74
79class CEGUIEXPORT MultiLineEditbox : public Window
80{
81public:
82 static const String EventNamespace;
83 static const String WidgetTypeName;
84
85 /*************************************************************************
86 Constants
87 *************************************************************************/
88 // event names
141
142 /*************************************************************************
143 Child Widget name constants
144 *************************************************************************/
147
148 /*************************************************************************
149 Implementation struct
150 *************************************************************************/
156 struct LineInfo
157 {
158 size_t d_startIdx;
159 size_t d_length;
160 float d_extent;
161 };
162 typedef std::vector<LineInfo
163 CEGUI_VECTOR_ALLOC(LineInfo)> LineList;
164
165 /*************************************************************************
166 Accessor Functions
167 *************************************************************************/
176 bool hasInputFocus(void) const;
177
178
187 bool isReadOnly(void) const {return d_readOnly;}
188
189
197 size_t getCaretIndex(void) const {return d_caretPos;}
198
199
208 size_t getSelectionStartIndex(void) const;
209
210
219 size_t getSelectionEndIndex(void) const;
220
221
229 size_t getSelectionLength(void) const;
230
231
239 size_t getMaxTextLength(void) const {return d_maxTextLen;}
240
241
250 bool isWordWrapped(void) const;
251
252
265
275
288
289
299
300 // get d_lines
301 const LineList& getFormattedLines(void) const {return d_lines;}
302
308 size_t getLineNumberFromIndex(size_t index) const;
309
310 /*************************************************************************
311 Manipulators
312 *************************************************************************/
323 virtual void initialiseComponents(void);
324
325
337 void setReadOnly(bool setting);
338
339
351 void setCaretIndex(size_t caret_pos);
352
353
369 void setSelection(size_t start_pos, size_t end_pos);
370
371
383 void setSelectionStart(size_t start_pos);
384
395 void setSelectionLength(size_t length);
396
407 void setMaxTextLength(size_t max_len);
408
409
415
416
428 void setWordWrapping(bool setting);
429
441 void setShowVertScrollbar(bool setting);
442
443 // selection brush image property support
444 void setSelectionBrushImage(const Image* image);
445 const Image* getSelectionBrushImage() const;
446
448 virtual bool performCopy(Clipboard& clipboard);
449
451 virtual bool performCut(Clipboard& clipboard);
452
454 virtual bool performPaste(Clipboard& clipboard);
455
464 void formatText(const bool update_scrollbars);
465
466 /*************************************************************************
467 Construction and Destruction
468 *************************************************************************/
473 MultiLineEditbox(const String& type, const String& name);
474
475
480 virtual ~MultiLineEditbox(void);
481
482
483protected:
484 /*************************************************************************
485 Implementation Methods (abstract)
486 *************************************************************************/
495 //virtual Rect getTextRenderArea_impl(void) const = 0;
496
497
498 /*************************************************************************
499 Implementation Methods
500 *************************************************************************/
507 void formatText(void);
508
519 size_t getNextTokenLength(const String& text, size_t start_idx) const;
520
521
527
528
539 size_t getTextIndexFromPosition(const Vector2f& pt) const;
540
541
546 void clearSelection(void);
547
548
556 void eraseSelectedText(bool modify_text = true);
557
558
563 void handleBackspace(void);
564
565
570 void handleDelete(void);
571
572
577 void handleCharLeft(uint sysKeys);
578
579
584 void handleWordLeft(uint sysKeys);
585
586
591 void handleCharRight(uint sysKeys);
592
593
598 void handleWordRight(uint sysKeys);
599
600
605 void handleDocHome(uint sysKeys);
606
607
612 void handleDocEnd(uint sysKeys);
613
614
619 void handleLineHome(uint sysKeys);
620
621
626 void handleLineEnd(uint sysKeys);
627
628
633 void handleLineUp(uint sysKeys);
634
635
640 void handleLineDown(uint sysKeys);
641
642
647 void handleNewLine(uint sysKeys);
648
649
654 void handlePageUp(uint sysKeys);
655
656
661 void handlePageDown(uint sysKeys);
662
668
669 // handler triggered when vertical scrollbar is shown or hidden
670 bool handle_vertScrollbarVisibilityChanged(const EventArgs&);
671
672 // validate window renderer
673 virtual bool validateWindowRenderer(const WindowRenderer* renderer) const;
674
675 /*************************************************************************
676 New event handlers
677 *************************************************************************/
683
684
690
691
697
698
704
705
711
712
718
719
725
726
732
733
734 /*************************************************************************
735 Overridden event handlers
736 *************************************************************************/
741 virtual void onMouseMove(MouseEventArgs& e);
743 virtual void onCharacter(KeyEventArgs& e);
744 virtual void onKeyDown(KeyEventArgs& e);
746 virtual void onSized(ElementEventArgs& e);
747 virtual void onMouseWheel(MouseEventArgs& e);
749
750
751 /*************************************************************************
752 Implementation data
753 *************************************************************************/
756 size_t d_caretPos;
761
766
767 // component widget settings
770
771 // images
773
774
775private:
776 /*************************************************************************
777 Private methods
778 *************************************************************************/
779 void addMultiLineEditboxProperties(void);
780};
781
782} // End of CEGUI namespace section
783
784#if defined(_MSC_VER)
785# pragma warning(pop)
786#endif
787
788#endif // end of guard _CEGUIMultiLineEditbox_h_
Defines a clipboard handling class.
Definition Clipboard.h:84
EventArgs based class that is used for objects passed to handlers triggered for events concerning som...
Definition Element.h:211
Base class used as the argument to all subscribers Event object.
Definition EventArgs.h:51
Interface for Image.
Definition Image.h:161
EventArgs based class that is used for objects passed to input event handlers concerning keyboard inp...
Definition InputEvent.h:315
EventArgs based class that is used for objects passed to input event handlers concerning mouse input.
Definition InputEvent.h:281
Base class for multi-line edit box window renderer objects.
Definition widgets/MultiLineEditbox.h:52
MultiLineEditboxWindowRenderer(const String &name)
Constructor.
virtual Rectf getTextRenderArea(void) const =0
Return a Rect object describing, in un-clipped pixels, the window relative area that the text should ...
void onLookNFeelAssigned()
Handler called when a Look'N'Feel is assigned to our window.
Base class for the multi-line edit box widget.
Definition widgets/MultiLineEditbox.h:80
std::vector< LineInfo CEGUI_VECTOR_ALLOC(LineInfo)> LineList
Type for collection of LineInfos.
Definition widgets/MultiLineEditbox.h:163
Scrollbar * getVertScrollbar() const
Return a pointer to the vertical scrollbar component widget for this MultiLineEditbox.
size_t getSelectionEndIndex(void) const
return the current selection end point.
void handlePageUp(uint sysKeys)
Processing to move caret one page up.
virtual void initialiseComponents(void)
Initialise the Window based object ready for use.
void handleCharRight(uint sysKeys)
Processing to move caret one character right.
static const String EventNamespace
Namespace for global events.
Definition widgets/MultiLineEditbox.h:82
void setCaretIndex(size_t caret_pos)
Set the current position of the caret.
virtual void onSized(ElementEventArgs &e)
Handler called when the window's size changes.
bool isWordWrapped(void) const
Return whether the text in the edit box will be word-wrapped.
size_t d_dragAnchorIdx
Selection index for drag selection anchor point.
Definition widgets/MultiLineEditbox.h:760
void handleWordRight(uint sysKeys)
Processing to move caret one word right.
void setReadOnly(bool setting)
Specify whether the edit box is read-only.
size_t d_caretPos
Position of the caret / insert-point.
Definition widgets/MultiLineEditbox.h:756
bool d_forceHorzScroll
true if horizontal scrollbar should always be displayed
Definition widgets/MultiLineEditbox.h:769
void handleLineDown(uint sysKeys)
Processing to move caret down a line.
void handleWordLeft(uint sysKeys)
Processing to move caret one word left.
static const String EventEditboxFull
Definition widgets/MultiLineEditbox.h:126
void setSelection(size_t start_pos, size_t end_pos)
Define the current selection for the edit box.
void handleDocHome(uint sysKeys)
Processing to move caret to the start of the text.
static const String HorzScrollbarName
Widget name for the horizontal scrollbar component.
Definition widgets/MultiLineEditbox.h:146
size_t getNextTokenLength(const String &text, size_t start_idx) const
Return the length of the next token in String text starting at index start_idx.
Rectf getTextRenderArea(void) const
Return a Rect object describing, in un-clipped pixels, the window relative area that the text should ...
size_t getCaretIndex(void) const
return the current position of the caret.
Definition widgets/MultiLineEditbox.h:197
void formatText(void)
Return a Rect object describing, in un-clipped pixels, the window relative area that the text should ...
virtual bool performPaste(Clipboard &clipboard)
Asks the widget to perform a clipboard paste from the provided clipboard.
static String d_lineBreakChars
Holds what we consider to be line break characters.
Definition widgets/MultiLineEditbox.h:762
void eraseSelectedText(bool modify_text=true)
Erase the currently selected text.
size_t getMaxTextLength(void) const
return the maximum text length set for this edit box.
Definition widgets/MultiLineEditbox.h:239
bool d_dragging
true when a selection is being dragged.
Definition widgets/MultiLineEditbox.h:759
void setSelectionLength(size_t length)
Define the current selection for the Editbox.
virtual bool performCopy(Clipboard &clipboard)
Asks the widget to perform a clipboard copy to the provided clipboard.
virtual void onMouseButtonDown(MouseEventArgs &e)
Handler called when a mouse button has been depressed within this window's area.
const Image * d_selectionBrush
Image to use as the selection brush (should be set by derived class).
Definition widgets/MultiLineEditbox.h:772
void handleLineUp(uint sysKeys)
Processing to move caret up a line.
void handleBackspace(void)
Processing for backspace key.
void setShowVertScrollbar(bool setting)
Set whether the vertical scroll bar should always be shown.
static const String EventMaximumTextLengthChanged
Definition widgets/MultiLineEditbox.h:107
static const String EventCaretMoved
Definition widgets/MultiLineEditbox.h:113
void onVertScrollbarModeChanged(WindowEventArgs &e)
Handler called when the 'always show' setting for the vertical scroll bar changes.
bool isVertScrollbarAlwaysShown(void) const
Return whether the vertical scroll bar is always shown.
size_t getTextIndexFromPosition(const Vector2f &pt) const
Return the text code point index that is rendered closest to screen position pt.
bool d_wordWrap
true when formatting uses word-wrapping.
Definition widgets/MultiLineEditbox.h:763
virtual void onMouseButtonUp(MouseEventArgs &e)
Handler called when a mouse button has been released within this window's area.
void onTextSelectionChanged(WindowEventArgs &e)
Handler called when the text selection changes.
void handlePageDown(uint sysKeys)
Processing to move caret one page down.
size_t getSelectionStartIndex(void) const
return the current selection start point.
size_t d_selectionEnd
End of selection area.
Definition widgets/MultiLineEditbox.h:758
static const String EventWordWrapModeChanged
Definition widgets/MultiLineEditbox.h:100
virtual void onMouseTripleClicked(MouseEventArgs &e)
Handler called when a mouse button has been triple-clicked within this window's area.
virtual void onMouseMove(MouseEventArgs &e)
Handler called when the mouse cursor has been moved within this window's area.
void handleCharLeft(uint sysKeys)
Processing to move caret one character left.
void onEditboxFullEvent(WindowEventArgs &e)
Handler called when the edit box is full.
size_t d_maxTextLen
Maximum number of characters for this Editbox.
Definition widgets/MultiLineEditbox.h:755
void onMaximumTextLengthChanged(WindowEventArgs &e)
Handler called when the maximum text length for the edit box changes.
void setWordWrapping(bool setting)
Set whether the text will be word wrapped or not.
void configureScrollbars(void)
display required integrated scroll bars according to current state of the edit box and update their v...
void handleDocEnd(uint sysKeys)
Processing to move caret to the end of the text.
virtual bool performCut(Clipboard &clipboard)
Asks the widget to perform a clipboard cut to the provided clipboard.
bool d_readOnly
true if the edit box is in read-only mode
Definition widgets/MultiLineEditbox.h:754
size_t d_selectionStart
Start of selection area.
Definition widgets/MultiLineEditbox.h:757
void setMaxTextLength(size_t max_len)
set the maximum text length for this edit box.
virtual bool validateWindowRenderer(const WindowRenderer *renderer) const
Function used in checking if a WindowRenderer is valid for this window.
static const String EventVertScrollbarModeChanged
Definition widgets/MultiLineEditbox.h:133
virtual void onMouseWheel(MouseEventArgs &e)
Handler called when the mouse wheel (z-axis) position changes within this window's area.
virtual void onCaptureLost(WindowEventArgs &e)
Handler called when this window loses capture of mouse inputs.
static const String EventReadOnlyModeChanged
Definition widgets/MultiLineEditbox.h:94
void handleLineEnd(uint sysKeys)
Processing to move caret to the end of the current line.
Scrollbar * getHorzScrollbar() const
Return a pointer to the horizontal scrollbar component widget for this MultiLineEditbox.
void onReadOnlyChanged(WindowEventArgs &e)
Handler called when the read-only state of the edit box changes.
void onHorzScrollbarModeChanged(WindowEventArgs &e)
Handler called when 'always show' setting for the horizontal scroll bar changes.
virtual void onKeyDown(KeyEventArgs &e)
Handler called when a key as been depressed while this window has input focus.
LineList d_lines
Holds the lines for the current formatting.
Definition widgets/MultiLineEditbox.h:764
void onWordWrapModeChanged(WindowEventArgs &e)
Handler called when the word wrap mode for the the edit box changes.
bool handle_scrollChange(const EventArgs &args)
Internal handler that is triggered when the user interacts with the scrollbars.
size_t getSelectionLength(void) const
return the length of the current selection (in code points / characters).
static const String EventHorzScrollbarModeChanged
Definition widgets/MultiLineEditbox.h:140
void ensureCaretIsVisible(void)
Scroll the view so that the current caret position is visible.
void handleNewLine(uint sysKeys)
Processing to insert a new line / paragraph.
static const String VertScrollbarName
Widget name for the vertical scrollbar component.
Definition widgets/MultiLineEditbox.h:145
void onCaretMoved(WindowEventArgs &e)
Handler called when the caret moves.
void formatText(const bool update_scrollbars)
Format the text into lines as dictated by the formatting options.
virtual ~MultiLineEditbox(void)
Destructor for the MultiLineEditbox base class.
void handleDelete(void)
Processing for Delete key.
static const String EventTextSelectionChanged
Definition widgets/MultiLineEditbox.h:119
float d_widestExtent
Holds the extent of the widest line as calculated in the last formatting pass.
Definition widgets/MultiLineEditbox.h:765
virtual void onMouseDoubleClicked(MouseEventArgs &e)
Handler called when a mouse button has been double-clicked within this window's area.
void clearSelection(void)
Clear the current selection setting.
void setSelectionStart(size_t start_pos)
Define the current selection start for the Editbox.
virtual void onCharacter(KeyEventArgs &e)
Handler called when a character-key has been pressed while this window has input focus.
bool isReadOnly(void) const
return true if the edit box is read-only.
Definition widgets/MultiLineEditbox.h:187
bool d_forceVertScroll
true if vertical scrollbar should always be displayed
Definition widgets/MultiLineEditbox.h:768
virtual void onFontChanged(WindowEventArgs &e)
Handler called when the window's font is changed.
void handleLineHome(uint sysKeys)
Processing to move caret to the start of the current line.
MultiLineEditbox(const String &type, const String &name)
Constructor for the MultiLineEditbox base class.
static const String WidgetTypeName
Window factory name.
Definition widgets/MultiLineEditbox.h:83
size_t getLineNumberFromIndex(size_t index) const
Return the line number a given index falls on with the current formatting. Will return last line if i...
virtual void onTextChanged(WindowEventArgs &e)
Handler called when the window's text is changed.
bool hasInputFocus(void) const
return true if the edit box has input focus.
Base scroll bar class.
Definition widgets/Scrollbar.h:90
String class used within the GUI system.
Definition String.h:64
EventArgs based class that is used for objects passed to handlers triggered for events concerning som...
Definition InputEvent.h:252
Base-class for the assignable WindowRenderer object.
Definition WindowRenderer.h:52
An abstract base class providing common functionality and specifying the required interface for deriv...
Definition Window.h:151
Main namespace for Crazy Eddie's GUI Library.
Definition arch_overview.dox:1
struct used to store information about a formatted line within the paragraph.
Definition widgets/MultiLineEditbox.h:157
float d_extent
Rendered extent of this line.
Definition widgets/MultiLineEditbox.h:160
size_t d_length
Code point length of this line.
Definition widgets/MultiLineEditbox.h:159
size_t d_startIdx
Starting index for this line.
Definition widgets/MultiLineEditbox.h:158