///////////////////////////////////////////////////////////////////////////// // Name: wx/richtext/richtextformatdlg.h // Purpose: Formatting dialog for wxRichTextCtrl // Author: Julian Smart // Modified by: // Created: 2006-10-01 // RCS-ID: $Id: richtextformatdlg.h 49946 2007-11-14 14:22:56Z JS $ // Copyright: (c) Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_RICHTEXTFORMATDLG_H_ #define _WX_RICHTEXTFORMATDLG_H_ /*! * Includes */ #include "wx/defs.h" #if wxUSE_RICHTEXT #include "wx/propdlg.h" #include "wx/bookctrl.h" #if wxUSE_HTML #include "wx/htmllbox.h" #endif #include "wx/richtext/richtextbuffer.h" #include "wx/richtext/richtextstyles.h" class WXDLLIMPEXP_FWD_RICHTEXT wxRichTextFormattingDialog; class WXDLLIMPEXP_FWD_CORE wxImageList; /*! * Flags determining the pages and buttons to be created in the dialog */ #define wxRICHTEXT_FORMAT_STYLE_EDITOR 0x0001 #define wxRICHTEXT_FORMAT_FONT 0x0002 #define wxRICHTEXT_FORMAT_TABS 0x0004 #define wxRICHTEXT_FORMAT_BULLETS 0x0008 #define wxRICHTEXT_FORMAT_INDENTS_SPACING 0x0010 #define wxRICHTEXT_FORMAT_LIST_STYLE 0x0020 #define wxRICHTEXT_FORMAT_HELP_BUTTON 0x0100 /*! * Indices for bullet styles in list control */ enum { wxRICHTEXT_BULLETINDEX_NONE = 0, wxRICHTEXT_BULLETINDEX_ARABIC, wxRICHTEXT_BULLETINDEX_UPPER_CASE, wxRICHTEXT_BULLETINDEX_LOWER_CASE, wxRICHTEXT_BULLETINDEX_UPPER_CASE_ROMAN, wxRICHTEXT_BULLETINDEX_LOWER_CASE_ROMAN, wxRICHTEXT_BULLETINDEX_OUTLINE, wxRICHTEXT_BULLETINDEX_SYMBOL, wxRICHTEXT_BULLETINDEX_BITMAP, wxRICHTEXT_BULLETINDEX_STANDARD }; /*! * Shorthand for common combinations of pages */ #define wxRICHTEXT_FORMAT_PARAGRAPH (wxRICHTEXT_FORMAT_INDENTS_SPACING | wxRICHTEXT_FORMAT_BULLETS | wxRICHTEXT_FORMAT_TABS | wxRICHTEXT_FORMAT_FONT) #define wxRICHTEXT_FORMAT_CHARACTER (wxRICHTEXT_FORMAT_FONT) #define wxRICHTEXT_FORMAT_STYLE (wxRICHTEXT_FORMAT_PARAGRAPH | wxRICHTEXT_FORMAT_STYLE_EDITOR) /*! * Factory for formatting dialog */ class WXDLLIMPEXP_RICHTEXT wxRichTextFormattingDialogFactory: public wxObject { public: wxRichTextFormattingDialogFactory() {} virtual ~wxRichTextFormattingDialogFactory() {} // Overrideables /// Create all pages, under the dialog's book control, also calling AddPage virtual bool CreatePages(long pages, wxRichTextFormattingDialog* dialog); /// Create a page, given a page identifier virtual wxPanel* CreatePage(int page, wxString& title, wxRichTextFormattingDialog* dialog); /// Enumerate all available page identifiers virtual int GetPageId(int i) const; /// Get the number of available page identifiers virtual int GetPageIdCount() const; /// Get the image index for the given page identifier virtual int GetPageImage(int WXUNUSED(id)) const { return -1; } /// Invoke help for the dialog virtual bool ShowHelp(int WXUNUSED(page), wxRichTextFormattingDialog* WXUNUSED(dialog)) { return false; } /// Set the sheet style, called at the start of wxRichTextFormattingDialog::Create virtual bool SetSheetStyle(wxRichTextFormattingDialog* dialog); /// Create the main dialog buttons virtual bool CreateButtons(wxRichTextFormattingDialog* dialog); }; /*! * Formatting dialog for a wxRichTextCtrl */ class WXDLLIMPEXP_RICHTEXT wxRichTextFormattingDialog: public wxPropertySheetDialog { DECLARE_CLASS(wxRichTextFormattingDialog) public: wxRichTextFormattingDialog() { Init(); } wxRichTextFormattingDialog(long flags, wxWindow* parent, const wxString& title = wxGetTranslation(wxT("Formatting")), wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE) { Init(); Create(flags, parent, title, id, pos, sz, style); } ~wxRichTextFormattingDialog(); void Init(); bool Create(long flags, wxWindow* parent, const wxString& title = wxGetTranslation(wxT("Formatting")), wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE); /// Get attributes from the given range virtual bool GetStyle(wxRichTextCtrl* ctrl, const wxRichTextRange& range); /// Set the attributes and optionally update the display virtual bool SetStyle(const wxTextAttrEx& style, bool update = true); /// Set the style definition and optionally update the display virtual bool SetStyleDefinition(const wxRichTextStyleDefinition& styleDef, wxRichTextStyleSheet* sheet, bool update = true); /// Get the style definition, if any virtual wxRichTextStyleDefinition* GetStyleDefinition() const { return m_styleDefinition; } /// Get the style sheet, if any virtual wxRichTextStyleSheet* GetStyleSheet() const { return m_styleSheet; } /// Update the display virtual bool UpdateDisplay(); /// Apply attributes to the given range virtual bool ApplyStyle(wxRichTextCtrl* ctrl, const wxRichTextRange& range, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO|wxRICHTEXT_SETSTYLE_OPTIMIZE); /// Gets and sets the attributes const wxTextAttrEx& GetAttributes() const { return m_attributes; } wxTextAttrEx& GetAttributes() { return m_attributes; } void SetAttributes(const wxTextAttrEx& attr) { m_attributes = attr; } /// Transfers the data and from to the window virtual bool TransferDataToWindow(); virtual bool TransferDataFromWindow(); /// Apply the styles when a different tab is selected, so the previews are /// up to date void OnTabChanged(wxBookCtrlEvent& event); /// Respond to help command void OnHelp(wxCommandEvent& event); /// Set/get image list void SetImageList(wxImageList* imageList) { m_imageList = imageList; } wxImageList* GetImageList() const { return m_imageList; } /// Get/set formatting factory object static void SetFormattingDialogFactory(wxRichTextFormattingDialogFactory* factory); static wxRichTextFormattingDialogFactory* GetFormattingDialogFactory() { return ms_FormattingDialogFactory; } /// Helper for pages to get the top-level dialog static wxRichTextFormattingDialog* GetDialog(wxWindow* win); /// Helper for pages to get the attributes static wxTextAttrEx* GetDialogAttributes(wxWindow* win); /// Helper for pages to get the style static wxRichTextStyleDefinition* GetDialogStyleDefinition(wxWindow* win); /// Should we show tooltips? static bool ShowToolTips() { return sm_showToolTips; } /// Determines whether tooltips will be shown static void SetShowToolTips(bool show) { sm_showToolTips = show; } /// Map book control page index to our page id void AddPageId(int id) { m_pageIds.Add(id); } protected: wxImageList* m_imageList; wxTextAttrEx m_attributes; wxRichTextStyleDefinition* m_styleDefinition; wxRichTextStyleSheet* m_styleSheet; wxArrayInt m_pageIds; // mapping of book control indexes to page ids static wxRichTextFormattingDialogFactory* ms_FormattingDialogFactory; static bool sm_showToolTips; DECLARE_EVENT_TABLE() }; //----------------------------------------------------------------------------- // helper class - wxRichTextFontPreviewCtrl //----------------------------------------------------------------------------- class WXDLLIMPEXP_RICHTEXT wxRichTextFontPreviewCtrl : public wxWindow { public: wxRichTextFontPreviewCtrl(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& sz = wxDefaultSize, long style = 0) { if ((style & wxBORDER_MASK) == wxBORDER_DEFAULT) #ifdef __WXMSW__ style |= GetThemedBorderStyle(); #else style |= wxBORDER_SUNKEN; #endif wxWindow::Create(parent, id, pos, sz, style); SetBackgroundColour(*wxWHITE); m_textEffects = 0; } void SetTextEffects(int effects) { m_textEffects = effects; } int GetTextEffects() const { return m_textEffects; } private: int m_textEffects; void OnPaint(wxPaintEvent& event); DECLARE_EVENT_TABLE() }; /* * A control for displaying a small preview of a colour or bitmap */ class WXDLLIMPEXP_RICHTEXT wxRichTextColourSwatchCtrl: public wxControl { DECLARE_CLASS(wxRichTextColourSwatchCtrl) public: wxRichTextColourSwatchCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); ~wxRichTextColourSwatchCtrl(); void OnMouseEvent(wxMouseEvent& event); void SetColour(const wxColour& colour) { m_colour = colour; SetBackgroundColour(m_colour); } wxColour& GetColour() { return m_colour; } virtual wxSize DoGetBestSize() const { return GetSize(); } protected: wxColour m_colour; DECLARE_EVENT_TABLE() }; /*! * wxRichTextFontListBox class declaration * A listbox to display fonts. */ class WXDLLIMPEXP_RICHTEXT wxRichTextFontListBox: public wxHtmlListBox { DECLARE_CLASS(wxRichTextFontListBox) DECLARE_EVENT_TABLE() public: wxRichTextFontListBox() { Init(); } wxRichTextFontListBox(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); virtual ~wxRichTextFontListBox(); void Init() { } bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); /// Creates a suitable HTML fragment for a font wxString CreateHTML(const wxString& facename) const; /// Get font name for index wxString GetFaceName(size_t i) const ; /// Set selection for string, returning the index. int SetFaceNameSelection(const wxString& name); /// Updates the font list void UpdateFonts(); /// Does this face name exist? bool HasFaceName(const wxString& faceName) const { return m_faceNames.Index(faceName) != wxNOT_FOUND; } /// Returns the array of face names const wxArrayString& GetFaceNames() const { return m_faceNames; } protected: /// Returns the HTML for this item virtual wxString OnGetItem(size_t n) const; private: wxArrayString m_faceNames; }; #endif // wxUSE_RICHTEXT #endif // _WX_RICHTEXTFORMATDLG_H_