]> git.saurik.com Git - wxWidgets.git/blame - include/wx/richtext/richtextuicustomization.h
Fix wxPropertyGrid::GetPropertyRect when the last item is collapsed.
[wxWidgets.git] / include / wx / richtext / richtextuicustomization.h
CommitLineData
603f702b
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/richtext/richtextuicustomization.h
3// Purpose: UI customization base class for wxRTC
4// Author: Julian Smart
5// Modified by:
6// Created: 2010-11-14
603f702b
JS
7// Copyright: (c) Julian Smart
8// Licence: wxWindows Licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_RICHTEXTUICUSTOMIZATION_H_
12#define _WX_RICHTEXTUICUSTOMIZATION_H_
13
14#if wxUSE_RICHTEXT
15
2be72ac2
JS
16#include "wx/window.h"
17
603f702b
JS
18/**
19 @class wxRichTextUICustomization
20 The base class for functionality to plug in to various rich text control dialogs,
21 currently allowing the application to respond to Help button clicks without the
22 need to derive new dialog classes.
23
24 The application will typically have calls like this in its initialisation:
25
ad8f9137
JS
26 wxRichTextFormattingDialog::GetHelpInfo().SetHelpId(ID_HELP_FORMATTINGDIALOG);
27 wxRichTextFormattingDialog::GetHelpInfo().SetUICustomization(& wxGetApp().GetRichTextUICustomization());
28 wxRichTextBordersPage::GetHelpInfo().SetHelpId(ID_HELP_BORDERSPAGE);
603f702b
JS
29
30 Only the wxRichTextFormattingDialog class needs to have its customization object and help id set,
31 though the application set them for individual pages if it wants.
32 **/
33
34class WXDLLIMPEXP_RICHTEXT wxRichTextUICustomization
35{
36public:
37 wxRichTextUICustomization() {}
38 virtual ~wxRichTextUICustomization() {}
39
40 /// Show the help given the current active window, and a help topic id.
41 virtual bool ShowHelp(wxWindow* win, long id) = 0;
42};
43
44/**
45 @class wxRichTextHelpInfo
46 This class is used as a static member of dialogs, to store the help topic for the dialog
47 and also the customization object that will allow help to be shown appropriately for the application.
48 **/
49
50class WXDLLIMPEXP_RICHTEXT wxRichTextHelpInfo
51{
52public:
53 wxRichTextHelpInfo()
54 {
55 m_helpTopic = -1;
56 m_uiCustomization = NULL;
57 }
58 virtual ~wxRichTextHelpInfo() {}
59
60 virtual bool ShowHelp(wxWindow* win)
61 {
decd390a 62 if ( !m_uiCustomization || m_helpTopic == -1 )
603f702b 63 return false;
decd390a
VZ
64
65 return m_uiCustomization->ShowHelp(win, m_helpTopic);
603f702b
JS
66 }
67
68 /// Get the help topic identifier.
69 long GetHelpId() const { return m_helpTopic; }
70
71 /// Set the help topic identifier.
72 void SetHelpId(long id) { m_helpTopic = id; }
73
74 /// Get the UI customization object.
75 wxRichTextUICustomization* GetUICustomization() const { return m_uiCustomization; }
76
77 /// Set the UI customization object.
78 void SetUICustomization(wxRichTextUICustomization* customization) { m_uiCustomization = customization; }
79
80 /// Is there a valid help topic id?
81 bool HasHelpId() const { return m_helpTopic != -1; }
82
83 /// Is there a valid customization object?
84 bool HasUICustomization() const { return m_uiCustomization != NULL; }
85
86protected:
87 wxRichTextUICustomization* m_uiCustomization;
88 long m_helpTopic;
89};
90
91/// Add this to the base class of dialogs
92
93#define DECLARE_BASE_CLASS_HELP_PROVISION() \
94 virtual long GetHelpId() const = 0; \
95 virtual wxRichTextUICustomization* GetUICustomization() const = 0; \
96 virtual bool ShowHelp(wxWindow* win) = 0;
97
98/// A macro to make it easy to add help topic provision and UI customization
99/// to a class. Optionally, add virtual functions to a base class
100/// using DECLARE_BASE_CLASS_HELP_PROVISION. This means that the formatting dialog
101/// can obtain help topics from its individual pages without needing
102/// to know in advance what page classes are being used, allowing for extension
103/// of the formatting dialog.
104
105#define DECLARE_HELP_PROVISION() \
106 virtual long GetHelpId() const { return sm_helpInfo.GetHelpId(); } \
107 virtual void SetHelpId(long id) { sm_helpInfo.SetHelpId(id); } \
108 virtual wxRichTextUICustomization* GetUICustomization() const { return sm_helpInfo.GetUICustomization(); } \
109 virtual void SetUICustomization(wxRichTextUICustomization* customization) { sm_helpInfo.SetUICustomization(customization); } \
110 virtual bool ShowHelp(wxWindow* win) { return sm_helpInfo.ShowHelp(win); } \
ad8f9137
JS
111public: \
112 static wxRichTextHelpInfo& GetHelpInfo() { return sm_helpInfo; }\
603f702b
JS
113protected: \
114 static wxRichTextHelpInfo sm_helpInfo; \
115public:
116
117/// Add this to the implementation file for each dialog that needs help provision.
118
119#define IMPLEMENT_HELP_PROVISION(theClass) \
120 wxRichTextHelpInfo theClass::sm_helpInfo;
121
122#endif
123 // wxUSE_RICHTEXT
124
125#endif
126 // _WX_RICHTEXTUICUSTOMIZATION_H_