1 /*-*- c++ -*-********************************************************
2 * wxLwindow.h : a scrolled Window for displaying/entering rich text*
4 * (C) 1998,1999 by Karsten Ballüder (Ballueder@usa.net) *
7 *******************************************************************/
12 # pragma interface "wxlwindow.h"
21 #ifndef WXLOWIN_MENU_FIRST
22 # define WXLOWIN_MENU_FIRST 12000
27 WXLOWIN_MENU_LARGER
= WXLOWIN_MENU_FIRST
,
29 WXLOWIN_MENU_UNDERLINE_ON
,
30 WXLOWIN_MENU_UNDERLINE_OFF
,
32 WXLOWIN_MENU_BOLD_OFF
,
33 WXLOWIN_MENU_ITALICS_ON
,
34 WXLOWIN_MENU_ITALICS_OFF
,
36 WXLOWIN_MENU_TYPEWRITER
,
37 WXLOWIN_MENU_SANSSERIF
,
40 WXLOWIN_MENU_DBLCLICK
,
41 WXLOWIN_MENU_LAST
= WXLOWIN_MENU_DBLCLICK
45 This class is a rich text editing widget.
47 class wxLayoutWindow
: public wxScrolledWindow
51 @param parent parent window to display this panel in
53 wxLayoutWindow(wxWindow
*parent
);
56 virtual ~wxLayoutWindow();
58 /**@name Editing functionality */
60 /// Clears the window and sets default parameters.
61 void Clear(int family
= wxROMAN
,
69 GetLayoutList()->Clear(family
,size
,style
,weight
,underline
,fg
,bg
);
70 SetBackgroundColour(GetLayoutList()->GetDefaults()->GetBGColour());
71 ResizeScrollbars(true);
76 r
.x
= r
.y
= 0; GetSize(&w
,&h
);
81 /** Sets a background image, only used on screen, not on printouts.
82 @param bitmap a pointer to a wxBitmap or NULL to remove it
84 void SetBackgroundBitmap(wxBitmap
*bitmap
= NULL
)
86 if(m_BGbitmap
) delete m_BGbitmap
;
89 /// Enable or disable editing, i.e. processing of keystrokes.
90 void SetEditable(bool toggle
) { m_Editable
= toggle
; }
91 /// Query whether list can be edited by user.
92 bool IsEditable(void) const { return m_Editable
; }
93 /// Pastes text from clipboard.
98 void EnablePopup(bool enable
= true) { m_DoPopupMenu
= enable
; }
100 /** Sets the wrap margin.
101 @param margin set this to 0 to disable it
103 void SetWrapMargin(CoordType margin
) { m_WrapMargin
= margin
; }
105 /** Redraws the window.
106 Internally, this stores the parameter and calls a refresh on
107 wxMSW, draws directly on wxGTK.
109 void DoPaint(const wxRect
*updateRect
);
112 virtual long MSWGetDlgCode();
115 /// if exact == false, assume 50% extra size for the future
116 void ResizeScrollbars(bool exact
= false); // don't change this to true!
118 /// if the flag is true, we send events when user clicks on embedded objects
119 inline void SetMouseTracking(bool doIt
= true) { m_doSendEvents
= doIt
; }
121 /* Returns a pointer to the wxLayoutList object.
124 wxLayoutList
* GetLayoutList(void) { return m_llist
; }
126 /**@name Callbacks */
128 void OnPaint(wxPaintEvent
&event
);
129 void OnChar(wxKeyEvent
& event
);
130 void OnMenu(wxCommandEvent
& event
);
131 void OnLeftMouseClick(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_LCLICK
, event
); }
132 void OnRightMouseClick(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_RCLICK
, event
); }
133 void OnMouseDblClick(wxMouseEvent
& event
) { OnMouse(WXLOWIN_MENU_DBLCLICK
, event
); }
134 void OnSetFocus(wxFocusEvent
&ev
);
135 void OnKillFocus(wxFocusEvent
&ev
);
138 /// Creates a wxMenu for use as a format popup.
139 static wxMenu
* MakeFormatMenu(void);
140 /**@name Dirty flag handling for optimisations. */
143 void SetDirty(void) { m_Dirty
= true; }
144 /// Query whether window needs redrawing.
145 bool IsDirty(void) const { return m_Dirty
; }
146 /// Reset dirty flag.
147 void ResetDirty(void) { m_Dirty
= false; }
149 /// Redraws the window, used by DoPaint() or OnPaint().
150 void InternalPaint(const wxRect
*updateRect
);
152 /// Has list been modified/edited?
153 bool IsModified(void) const { return m_Modified
; }
154 /// Mark list as modified or unchanged.
155 void SetModified(bool modified
= true) { m_Modified
= modified
; }
158 /// generic function for mouse events processing
159 void OnMouse(int eventId
, wxMouseEvent
& event
);
161 /// for sending events
163 /// Shall we send events?
165 /// Where does the current view start?
166 int m_ViewStartX
; int m_ViewStartY
;
167 /// Do we currently have the focus?
169 /// do we handle clicks of the right mouse button?
171 /// Should InternalPaint() scroll to cursor.
172 bool m_ScrollToCursor
;
174 wxMenu
* m_PopupMenu
;
175 /// for derived classes, set when mouse is clicked
176 wxPoint m_ClickPosition
;
177 /// for scrollbar calculations:
182 /// The layout list to be displayed.
183 wxLayoutList
*m_llist
;
184 /// Can user edit the window?
186 /// Are we currently building a selection with the keyboard?
189 CoordType m_WrapMargin
;
190 /// Is list dirty (for redraws, internal use)?
192 /// Has list been edited?
196 wxPoint m_bitmapSize
;
197 /// a pointer to a bitmap for the background
198 wxBitmap
*m_BGbitmap
;
199 DECLARE_EVENT_TABLE()