1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/richtext/richtextsymboldlg.h 3 // Purpose: Declares the symbol picker dialog. 4 // Author: Julian Smart 5 // Modified by: 6 // Created: 10/5/2006 3:11:58 PM 7 // Copyright: (c) Julian Smart 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _RICHTEXTSYMBOLDLG_H_ 12 #define _RICHTEXTSYMBOLDLG_H_ 13 14 /*! 15 * Includes 16 */ 17 18 #include "wx/richtext/richtextuicustomization.h" 19 #include "wx/dialog.h" 20 #include "wx/vscroll.h" 21 22 /*! 23 * Forward declarations 24 */ 25 26 class WXDLLIMPEXP_FWD_CORE wxStaticText; 27 class WXDLLIMPEXP_FWD_CORE wxComboBox; 28 class WXDLLIMPEXP_FWD_CORE wxTextCtrl; 29 30 ////@begin forward declarations 31 class wxSymbolListCtrl; 32 class wxStdDialogButtonSizer; 33 ////@end forward declarations 34 35 // __UNICODE__ is a symbol used by DialogBlocks-generated code. 36 #ifndef __UNICODE__ 37 #if wxUSE_UNICODE 38 #define __UNICODE__ 39 #endif 40 #endif 41 42 /*! 43 * Symbols 44 */ 45 46 #define SYMBOL_WXSYMBOLPICKERDIALOG_STYLE (wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxCLOSE_BOX) 47 #define SYMBOL_WXSYMBOLPICKERDIALOG_TITLE wxGetTranslation("Symbols") 48 #define SYMBOL_WXSYMBOLPICKERDIALOG_IDNAME ID_SYMBOLPICKERDIALOG 49 #define SYMBOL_WXSYMBOLPICKERDIALOG_SIZE wxSize(400, 300) 50 #define SYMBOL_WXSYMBOLPICKERDIALOG_POSITION wxDefaultPosition 51 52 /*! 53 * wxSymbolPickerDialog class declaration 54 */ 55 56 class WXDLLIMPEXP_RICHTEXT wxSymbolPickerDialog: public wxDialog 57 { 58 wxDECLARE_DYNAMIC_CLASS(wxSymbolPickerDialog); 59 wxDECLARE_EVENT_TABLE(); 60 DECLARE_HELP_PROVISION() 61 62 public: 63 /// Constructors 64 wxSymbolPickerDialog( ); 65 wxSymbolPickerDialog( const wxString& symbol, const wxString& fontName, const wxString& normalTextFont, 66 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 ); 67 68 /// Creation 69 bool Create( const wxString& symbol, const wxString& fontName, const wxString& normalTextFont, 70 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 ); 71 72 /// Initialises members variables 73 void Init(); 74 75 /// Creates the controls and sizers 76 void CreateControls(); 77 78 /// Update the display 79 void UpdateSymbolDisplay(bool updateSymbolList = true, bool showAtSubset = true); 80 81 /// Respond to symbol selection 82 void OnSymbolSelected( wxCommandEvent& event ); 83 84 /// Set Unicode mode 85 void SetUnicodeMode(bool unicodeMode); 86 87 /// Show at the current subset selection 88 void ShowAtSubset(); 89 90 /// Get the selected symbol character 91 int GetSymbolChar() const; 92 93 /// Is there a selection? HasSelection()94 bool HasSelection() const { return !m_symbol.IsEmpty(); } 95 96 /// Specifying normal text? UseNormalFont()97 bool UseNormalFont() const { return m_fontName.IsEmpty(); } 98 99 /// Should we show tooltips? ShowToolTips()100 static bool ShowToolTips() { return sm_showToolTips; } 101 102 /// Determines whether tooltips will be shown SetShowToolTips(bool show)103 static void SetShowToolTips(bool show) { sm_showToolTips = show; } 104 105 /// Data transfer 106 virtual bool TransferDataToWindow() wxOVERRIDE; 107 108 ////@begin wxSymbolPickerDialog event handler declarations 109 110 /// wxEVT_COMBOBOX event handler for ID_SYMBOLPICKERDIALOG_FONT 111 void OnFontCtrlSelected( wxCommandEvent& event ); 112 113 #if defined(__UNICODE__) 114 /// wxEVT_COMBOBOX event handler for ID_SYMBOLPICKERDIALOG_SUBSET 115 void OnSubsetSelected( wxCommandEvent& event ); 116 117 /// wxEVT_UPDATE_UI event handler for ID_SYMBOLPICKERDIALOG_SUBSET 118 void OnSymbolpickerdialogSubsetUpdate( wxUpdateUIEvent& event ); 119 120 #endif 121 #if defined(__UNICODE__) 122 /// wxEVT_COMBOBOX event handler for ID_SYMBOLPICKERDIALOG_FROM 123 void OnFromUnicodeSelected( wxCommandEvent& event ); 124 125 #endif 126 /// wxEVT_UPDATE_UI event handler for wxID_OK 127 void OnOkUpdate( wxUpdateUIEvent& event ); 128 129 /// wxEVT_BUTTON event handler for wxID_HELP 130 void OnHelpClick( wxCommandEvent& event ); 131 132 /// wxEVT_UPDATE_UI event handler for wxID_HELP 133 void OnHelpUpdate( wxUpdateUIEvent& event ); 134 135 ////@end wxSymbolPickerDialog event handler declarations 136 137 ////@begin wxSymbolPickerDialog member function declarations 138 GetFontName()139 wxString GetFontName() const { return m_fontName ; } SetFontName(const wxString & value)140 void SetFontName(const wxString& value) { m_fontName = value; } 141 GetFromUnicode()142 bool GetFromUnicode() const { return m_fromUnicode ; } SetFromUnicode(bool value)143 void SetFromUnicode(bool value) { m_fromUnicode = value ; } 144 GetNormalTextFontName()145 wxString GetNormalTextFontName() const { return m_normalTextFontName ; } SetNormalTextFontName(const wxString & value)146 void SetNormalTextFontName(const wxString& value) { m_normalTextFontName = value; } 147 GetSymbol()148 wxString GetSymbol() const { return m_symbol ; } SetSymbol(const wxString & value)149 void SetSymbol(const wxString& value) { m_symbol = value; } 150 151 /// Retrieves bitmap resources 152 wxBitmap GetBitmapResource( const wxString& name ); 153 154 /// Retrieves icon resources 155 wxIcon GetIconResource( const wxString& name ); 156 ////@end wxSymbolPickerDialog member function declarations 157 158 ////@begin wxSymbolPickerDialog member variables 159 wxComboBox* m_fontCtrl; 160 #if defined(__UNICODE__) 161 wxComboBox* m_subsetCtrl; 162 #endif 163 wxSymbolListCtrl* m_symbolsCtrl; 164 wxStaticText* m_symbolStaticCtrl; 165 wxTextCtrl* m_characterCodeCtrl; 166 #if defined(__UNICODE__) 167 wxComboBox* m_fromUnicodeCtrl; 168 #endif 169 wxStdDialogButtonSizer* m_stdButtonSizer; 170 wxString m_fontName; 171 bool m_fromUnicode; 172 wxString m_normalTextFontName; 173 wxString m_symbol; 174 /// Control identifiers 175 enum { 176 ID_SYMBOLPICKERDIALOG = 10600, 177 ID_SYMBOLPICKERDIALOG_FONT = 10602, 178 ID_SYMBOLPICKERDIALOG_SUBSET = 10605, 179 ID_SYMBOLPICKERDIALOG_LISTCTRL = 10608, 180 ID_SYMBOLPICKERDIALOG_CHARACTERCODE = 10601, 181 ID_SYMBOLPICKERDIALOG_FROM = 10603 182 }; 183 ////@end wxSymbolPickerDialog member variables 184 185 bool m_dontUpdate; 186 static bool sm_showToolTips; 187 }; 188 189 /*! 190 * The scrolling symbol list. 191 */ 192 193 class WXDLLIMPEXP_RICHTEXT wxSymbolListCtrl : public wxVScrolledWindow 194 { 195 public: 196 // constructors and such 197 // --------------------- 198 199 // default constructor, you must call Create() later wxSymbolListCtrl()200 wxSymbolListCtrl() { Init(); } 201 202 // normal constructor which calls Create() internally 203 wxSymbolListCtrl(wxWindow *parent, 204 wxWindowID id = wxID_ANY, 205 const wxPoint& pos = wxDefaultPosition, 206 const wxSize& size = wxDefaultSize, 207 long style = 0, 208 const wxString& name = wxASCII_STR(wxPanelNameStr)) 209 { 210 Init(); 211 212 (void)Create(parent, id, pos, size, style, name); 213 } 214 215 // really creates the control and sets the initial number of items in it 216 // (which may be changed later with SetItemCount()) 217 // 218 // returns true on success or false if the control couldn't be created 219 bool Create(wxWindow *parent, 220 wxWindowID id = wxID_ANY, 221 const wxPoint& pos = wxDefaultPosition, 222 const wxSize& size = wxDefaultSize, 223 long style = 0, 224 const wxString& name = wxASCII_STR(wxPanelNameStr)); 225 226 // dtor does some internal cleanup 227 virtual ~wxSymbolListCtrl(); 228 229 230 // accessors 231 // --------- 232 233 // set the current font 234 virtual bool SetFont(const wxFont& font) wxOVERRIDE; 235 236 // set Unicode/ASCII mode 237 void SetUnicodeMode(bool unicodeMode); 238 239 // get the index of the currently selected item or wxNOT_FOUND if there is no selection 240 int GetSelection() const; 241 242 // is this item selected? 243 bool IsSelected(int item) const; 244 245 // is this item the current one? IsCurrentItem(int item)246 bool IsCurrentItem(int item) const { return item == m_current; } 247 248 // get the margins around each cell GetMargins()249 wxPoint GetMargins() const { return m_ptMargins; } 250 251 // get the background colour of selected cells GetSelectionBackground()252 const wxColour& GetSelectionBackground() const { return m_colBgSel; } 253 254 // operations 255 // ---------- 256 257 // set the selection to the specified item, if it is wxNOT_FOUND the 258 // selection is unset 259 void SetSelection(int selection); 260 261 // make this item visible 262 void EnsureVisible(int item); 263 264 // set the margins: horizontal margin is the distance between the window 265 // border and the item contents while vertical margin is half of the 266 // distance between items 267 // 268 // by default both margins are 0 269 void SetMargins(const wxPoint& pt); SetMargins(wxCoord x,wxCoord y)270 void SetMargins(wxCoord x, wxCoord y) { SetMargins(wxPoint(x, y)); } 271 272 // set the cell size SetCellSize(const wxSize & sz)273 void SetCellSize(const wxSize& sz) { m_cellSize = sz; } GetCellSize()274 const wxSize& GetCellSize() const { return m_cellSize; } 275 276 // change the background colour of the selected cells 277 void SetSelectionBackground(const wxColour& col); 278 GetDefaultAttributes()279 virtual wxVisualAttributes GetDefaultAttributes() const wxOVERRIDE 280 { 281 return GetClassDefaultAttributes(GetWindowVariant()); 282 } 283 284 static wxVisualAttributes 285 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); 286 287 // Get min/max symbol values GetMinSymbolValue()288 int GetMinSymbolValue() const { return m_minSymbolValue; } GetMaxSymbolValue()289 int GetMaxSymbolValue() const { return m_maxSymbolValue; } 290 291 // Respond to size change 292 void OnSize(wxSizeEvent& event); 293 294 protected: 295 296 // draws a line of symbols 297 virtual void OnDrawItem(wxDC& dc, const wxRect& rect, size_t n) const; 298 299 // gets the line height 300 virtual wxCoord OnGetRowHeight(size_t line) const wxOVERRIDE; 301 302 // event handlers 303 void OnPaint(wxPaintEvent& event); 304 void OnKeyDown(wxKeyEvent& event); 305 void OnLeftDown(wxMouseEvent& event); 306 void OnLeftDClick(wxMouseEvent& event); 307 308 // common part of all ctors 309 void Init(); 310 311 // send the wxEVT_LISTBOX event 312 void SendSelectedEvent(); 313 314 // change the current item (in single selection listbox it also implicitly 315 // changes the selection); current may be wxNOT_FOUND in which case there 316 // will be no current item any more 317 // 318 // return true if the current item changed, false otherwise 319 bool DoSetCurrent(int current); 320 321 // flags for DoHandleItemClick 322 enum 323 { 324 ItemClick_Shift = 1, // item shift-clicked 325 ItemClick_Ctrl = 2, // ctrl 326 ItemClick_Kbd = 4 // item selected from keyboard 327 }; 328 329 // common part of keyboard and mouse handling processing code 330 void DoHandleItemClick(int item, int flags); 331 332 // calculate line number from symbol value 333 int SymbolValueToLineNumber(int item); 334 335 // initialise control from current min/max values 336 void SetupCtrl(bool scrollToSelection = true); 337 338 // hit testing 339 int HitTest(const wxPoint& pt); 340 341 private: 342 // the current item or wxNOT_FOUND 343 int m_current; 344 345 // margins 346 wxPoint m_ptMargins; 347 348 // the selection bg colour 349 wxColour m_colBgSel; 350 351 // double buffer 352 wxBitmap* m_doubleBuffer; 353 354 // cell size 355 wxSize m_cellSize; 356 357 // minimum and maximum symbol value 358 int m_minSymbolValue; 359 360 // minimum and maximum symbol value 361 int m_maxSymbolValue; 362 363 // number of items per line 364 int m_symbolsPerLine; 365 366 // Unicode/ASCII mode 367 bool m_unicodeMode; 368 369 wxDECLARE_EVENT_TABLE(); 370 wxDECLARE_NO_COPY_CLASS(wxSymbolListCtrl); 371 wxDECLARE_ABSTRACT_CLASS(wxSymbolListCtrl); 372 }; 373 374 #endif 375 // _RICHTEXTSYMBOLDLG_H_ 376