1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/richtext/richtextsymboldlg.h
4 // Author: Julian Smart
6 // Created: 10/5/2006 3:11:58 PM
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _RICHTEXTSYMBOLDLG_H_
13 #define _RICHTEXTSYMBOLDLG_H_
19 #include "wx/richtext/richtextuicustomization.h"
20 #include "wx/dialog.h"
21 #include "wx/vscroll.h"
24 * Forward declarations
27 class WXDLLIMPEXP_FWD_CORE wxStaticText
;
28 class WXDLLIMPEXP_FWD_CORE wxComboBox
;
29 class WXDLLIMPEXP_FWD_CORE wxTextCtrl
;
31 ////@begin forward declarations
32 class wxSymbolListCtrl
;
33 class wxStdDialogButtonSizer
;
34 ////@end forward declarations
36 // __UNICODE__ is a symbol used by DialogBlocks-generated code.
47 #define SYMBOL_WXSYMBOLPICKERDIALOG_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxCLOSE_BOX)
48 #define SYMBOL_WXSYMBOLPICKERDIALOG_TITLE wxGetTranslation("Symbols")
49 #define SYMBOL_WXSYMBOLPICKERDIALOG_IDNAME ID_SYMBOLPICKERDIALOG
50 #define SYMBOL_WXSYMBOLPICKERDIALOG_SIZE wxSize(400, 300)
51 #define SYMBOL_WXSYMBOLPICKERDIALOG_POSITION wxDefaultPosition
54 * wxSymbolPickerDialog class declaration
57 class WXDLLIMPEXP_RICHTEXT wxSymbolPickerDialog
: public wxDialog
59 DECLARE_DYNAMIC_CLASS( wxSymbolPickerDialog
)
61 DECLARE_HELP_PROVISION()
65 wxSymbolPickerDialog( );
66 wxSymbolPickerDialog( const wxString
& symbol
, const wxString
& fontName
, const wxString
& normalTextFont
,
67 wxWindow
* parent
, wxWindowID id
= wxID_ANY
, const wxString
& caption
= SYMBOL_WXSYMBOLPICKERDIALOG_TITLE
, const wxPoint
& pos
= SYMBOL_WXSYMBOLPICKERDIALOG_POSITION
, const wxSize
& size
= SYMBOL_WXSYMBOLPICKERDIALOG_SIZE
, long style
= SYMBOL_WXSYMBOLPICKERDIALOG_STYLE
);
70 bool Create( const wxString
& symbol
, const wxString
& fontName
, const wxString
& normalTextFont
,
71 wxWindow
* parent
, wxWindowID id
= wxID_ANY
, const wxString
& caption
= SYMBOL_WXSYMBOLPICKERDIALOG_TITLE
, const wxPoint
& pos
= SYMBOL_WXSYMBOLPICKERDIALOG_POSITION
, const wxSize
& size
= SYMBOL_WXSYMBOLPICKERDIALOG_SIZE
, long style
= SYMBOL_WXSYMBOLPICKERDIALOG_STYLE
);
73 /// Initialises members variables
76 /// Creates the controls and sizers
77 void CreateControls();
79 /// Update the display
80 void UpdateSymbolDisplay(bool updateSymbolList
= true, bool showAtSubset
= true);
82 /// Respond to symbol selection
83 void OnSymbolSelected( wxCommandEvent
& event
);
86 void SetUnicodeMode(bool unicodeMode
);
88 /// Show at the current subset selection
91 /// Get the selected symbol character
92 int GetSymbolChar() const;
94 /// Is there a selection?
95 bool HasSelection() const { return !m_symbol
.IsEmpty(); }
97 /// Specifying normal text?
98 bool UseNormalFont() const { return m_fontName
.IsEmpty(); }
100 /// Should we show tooltips?
101 static bool ShowToolTips() { return sm_showToolTips
; }
103 /// Determines whether tooltips will be shown
104 static void SetShowToolTips(bool show
) { sm_showToolTips
= show
; }
107 virtual bool TransferDataToWindow();
109 ////@begin wxSymbolPickerDialog event handler declarations
111 /// wxEVT_COMBOBOX event handler for ID_SYMBOLPICKERDIALOG_FONT
112 void OnFontCtrlSelected( wxCommandEvent
& event
);
114 #if defined(__UNICODE__)
115 /// wxEVT_COMBOBOX event handler for ID_SYMBOLPICKERDIALOG_SUBSET
116 void OnSubsetSelected( wxCommandEvent
& event
);
118 /// wxEVT_UPDATE_UI event handler for ID_SYMBOLPICKERDIALOG_SUBSET
119 void OnSymbolpickerdialogSubsetUpdate( wxUpdateUIEvent
& event
);
122 #if defined(__UNICODE__)
123 /// wxEVT_COMBOBOX event handler for ID_SYMBOLPICKERDIALOG_FROM
124 void OnFromUnicodeSelected( wxCommandEvent
& event
);
127 /// wxEVT_UPDATE_UI event handler for wxID_OK
128 void OnOkUpdate( wxUpdateUIEvent
& event
);
130 /// wxEVT_BUTTON event handler for wxID_HELP
131 void OnHelpClick( wxCommandEvent
& event
);
133 /// wxEVT_UPDATE_UI event handler for wxID_HELP
134 void OnHelpUpdate( wxUpdateUIEvent
& event
);
136 ////@end wxSymbolPickerDialog event handler declarations
138 ////@begin wxSymbolPickerDialog member function declarations
140 wxString
GetFontName() const { return m_fontName
; }
141 void SetFontName(wxString value
) { m_fontName
= value
; }
143 bool GetFromUnicode() const { return m_fromUnicode
; }
144 void SetFromUnicode(bool value
) { m_fromUnicode
= value
; }
146 wxString
GetNormalTextFontName() const { return m_normalTextFontName
; }
147 void SetNormalTextFontName(wxString value
) { m_normalTextFontName
= value
; }
149 wxString
GetSymbol() const { return m_symbol
; }
150 void SetSymbol(wxString value
) { m_symbol
= value
; }
152 /// Retrieves bitmap resources
153 wxBitmap
GetBitmapResource( const wxString
& name
);
155 /// Retrieves icon resources
156 wxIcon
GetIconResource( const wxString
& name
);
157 ////@end wxSymbolPickerDialog member function declarations
159 ////@begin wxSymbolPickerDialog member variables
160 wxComboBox
* m_fontCtrl
;
161 #if defined(__UNICODE__)
162 wxComboBox
* m_subsetCtrl
;
164 wxSymbolListCtrl
* m_symbolsCtrl
;
165 wxStaticText
* m_symbolStaticCtrl
;
166 wxTextCtrl
* m_characterCodeCtrl
;
167 #if defined(__UNICODE__)
168 wxComboBox
* m_fromUnicodeCtrl
;
170 wxStdDialogButtonSizer
* m_stdButtonSizer
;
173 wxString m_normalTextFontName
;
175 /// Control identifiers
177 ID_SYMBOLPICKERDIALOG
= 10600,
178 ID_SYMBOLPICKERDIALOG_FONT
= 10602,
179 ID_SYMBOLPICKERDIALOG_SUBSET
= 10605,
180 ID_SYMBOLPICKERDIALOG_LISTCTRL
= 10608,
181 ID_SYMBOLPICKERDIALOG_CHARACTERCODE
= 10601,
182 ID_SYMBOLPICKERDIALOG_FROM
= 10603
184 ////@end wxSymbolPickerDialog member variables
187 static bool sm_showToolTips
;
191 * The scrolling symbol list.
194 class WXDLLIMPEXP_RICHTEXT wxSymbolListCtrl
: public wxVScrolledWindow
197 // constructors and such
198 // ---------------------
200 // default constructor, you must call Create() later
201 wxSymbolListCtrl() { Init(); }
203 // normal constructor which calls Create() internally
204 wxSymbolListCtrl(wxWindow
*parent
,
205 wxWindowID id
= wxID_ANY
,
206 const wxPoint
& pos
= wxDefaultPosition
,
207 const wxSize
& size
= wxDefaultSize
,
209 const wxString
& name
= wxPanelNameStr
)
213 (void)Create(parent
, id
, pos
, size
, style
, name
);
216 // really creates the control and sets the initial number of items in it
217 // (which may be changed later with SetItemCount())
219 // returns true on success or false if the control couldn't be created
220 bool Create(wxWindow
*parent
,
221 wxWindowID id
= wxID_ANY
,
222 const wxPoint
& pos
= wxDefaultPosition
,
223 const wxSize
& size
= wxDefaultSize
,
225 const wxString
& name
= wxPanelNameStr
);
227 // dtor does some internal cleanup
228 virtual ~wxSymbolListCtrl();
234 // set the current font
235 virtual bool SetFont(const wxFont
& font
);
237 // set Unicode/ASCII mode
238 void SetUnicodeMode(bool unicodeMode
);
240 // get the index of the currently selected item or wxNOT_FOUND if there is no selection
241 int GetSelection() const;
243 // is this item selected?
244 bool IsSelected(int item
) const;
246 // is this item the current one?
247 bool IsCurrentItem(int item
) const { return item
== m_current
; }
249 // get the margins around each cell
250 wxPoint
GetMargins() const { return m_ptMargins
; }
252 // get the background colour of selected cells
253 const wxColour
& GetSelectionBackground() const { return m_colBgSel
; }
258 // set the selection to the specified item, if it is wxNOT_FOUND the
259 // selection is unset
260 void SetSelection(int selection
);
262 // make this item visible
263 void EnsureVisible(int item
);
265 // set the margins: horizontal margin is the distance between the window
266 // border and the item contents while vertical margin is half of the
267 // distance between items
269 // by default both margins are 0
270 void SetMargins(const wxPoint
& pt
);
271 void SetMargins(wxCoord x
, wxCoord y
) { SetMargins(wxPoint(x
, y
)); }
274 void SetCellSize(const wxSize
& sz
) { m_cellSize
= sz
; }
275 const wxSize
& GetCellSize() const { return m_cellSize
; }
277 // change the background colour of the selected cells
278 void SetSelectionBackground(const wxColour
& col
);
280 virtual wxVisualAttributes
GetDefaultAttributes() const
282 return GetClassDefaultAttributes(GetWindowVariant());
285 static wxVisualAttributes
286 GetClassDefaultAttributes(wxWindowVariant variant
= wxWINDOW_VARIANT_NORMAL
);
288 // Get min/max symbol values
289 int GetMinSymbolValue() const { return m_minSymbolValue
; }
290 int GetMaxSymbolValue() const { return m_maxSymbolValue
; }
292 // Respond to size change
293 void OnSize(wxSizeEvent
& event
);
297 // draws a line of symbols
298 virtual void OnDrawItem(wxDC
& dc
, const wxRect
& rect
, size_t n
) const;
300 // gets the line height
301 virtual wxCoord
OnGetRowHeight(size_t line
) const;
304 void OnPaint(wxPaintEvent
& event
);
305 void OnKeyDown(wxKeyEvent
& event
);
306 void OnLeftDown(wxMouseEvent
& event
);
307 void OnLeftDClick(wxMouseEvent
& event
);
309 // common part of all ctors
312 // send the wxEVT_LISTBOX event
313 void SendSelectedEvent();
315 // change the current item (in single selection listbox it also implicitly
316 // changes the selection); current may be wxNOT_FOUND in which case there
317 // will be no current item any more
319 // return true if the current item changed, false otherwise
320 bool DoSetCurrent(int current
);
322 // flags for DoHandleItemClick
325 ItemClick_Shift
= 1, // item shift-clicked
326 ItemClick_Ctrl
= 2, // ctrl
327 ItemClick_Kbd
= 4 // item selected from keyboard
330 // common part of keyboard and mouse handling processing code
331 void DoHandleItemClick(int item
, int flags
);
333 // calculate line number from symbol value
334 int SymbolValueToLineNumber(int item
);
336 // initialise control from current min/max values
337 void SetupCtrl(bool scrollToSelection
= true);
340 int HitTest(const wxPoint
& pt
);
343 // the current item or wxNOT_FOUND
349 // the selection bg colour
353 wxBitmap
* m_doubleBuffer
;
358 // minimum and maximum symbol value
359 int m_minSymbolValue
;
361 // minimum and maximum symbol value
362 int m_maxSymbolValue
;
364 // number of items per line
365 int m_symbolsPerLine
;
367 // Unicode/ASCII mode
370 DECLARE_EVENT_TABLE()
371 wxDECLARE_NO_COPY_CLASS(wxSymbolListCtrl
);
372 DECLARE_ABSTRACT_CLASS(wxSymbolListCtrl
)
376 // _RICHTEXTSYMBOLDLG_H_