]> git.saurik.com Git - wxWidgets.git/blob - include/wx/commandlinkbutton.h
A better fix for wxHash{Map,Set} with g++ 4.7.
[wxWidgets.git] / include / wx / commandlinkbutton.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/commandlinkbutton.h
3 // Purpose: wxCommandLinkButtonBase and wxGenericCommandLinkButton classes
4 // Author: Rickard Westerlund
5 // Created: 2010-06-11
6 // RCS-ID: $Id$
7 // Copyright: (c) 2010 wxWidgets team
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifndef _WX_COMMANDLINKBUTTON_H_
12 #define _WX_COMMANDLINKBUTTON_H_
13
14 #include "wx/defs.h"
15
16 #if wxUSE_COMMANDLINKBUTTON
17
18 #include "wx/button.h"
19
20 // ----------------------------------------------------------------------------
21 // Command link button common base class
22 // ----------------------------------------------------------------------------
23
24 // This class has separate "main label" (title-like string) and (possibly
25 // multiline) "note" which can be set and queried separately but can also be
26 // set both at once by joining them with a new line and setting them as a
27 // label and queried by breaking the label into the parts before the first new
28 // line and after it.
29
30 class WXDLLIMPEXP_ADV wxCommandLinkButtonBase : public wxButton
31 {
32 public:
33 wxCommandLinkButtonBase() : wxButton() { }
34
35 wxCommandLinkButtonBase(wxWindow *parent,
36 wxWindowID id,
37 const wxString& mainLabel = wxEmptyString,
38 const wxString& note = wxEmptyString,
39 const wxPoint& pos = wxDefaultPosition,
40 const wxSize& size = wxDefaultSize,
41 long style = 0,
42 const wxValidator& validator =
43 wxDefaultValidator,
44 const wxString& name = wxButtonNameStr)
45 : wxButton(parent,
46 id,
47 mainLabel + '\n' + note,
48 pos,
49 size,
50 style,
51 validator,
52 name)
53 { }
54
55 virtual void SetMainLabelAndNote(const wxString& mainLabel,
56 const wxString& note) = 0;
57
58 virtual void SetMainLabel(const wxString& mainLabel)
59 {
60 SetMainLabelAndNote(mainLabel, GetNote());
61 }
62
63 virtual void SetNote(const wxString& note)
64 {
65 SetMainLabelAndNote(GetMainLabel(), note);
66 }
67
68 virtual wxString GetMainLabel() const
69 {
70 return GetLabel().BeforeFirst('\n');
71 }
72
73 virtual wxString GetNote() const
74 {
75 return GetLabel().AfterFirst('\n');
76 }
77
78 protected:
79 virtual bool HasNativeBitmap() const { return false; }
80
81 private:
82 wxDECLARE_NO_COPY_CLASS(wxCommandLinkButtonBase);
83 };
84
85 // ----------------------------------------------------------------------------
86 // Generic command link button
87 // ----------------------------------------------------------------------------
88
89 // Trivial generic implementation simply using a multiline label to show both
90 // the main label and the note.
91
92 class WXDLLIMPEXP_ADV wxGenericCommandLinkButton
93 : public wxCommandLinkButtonBase
94 {
95 public:
96 wxGenericCommandLinkButton() : wxCommandLinkButtonBase() { }
97
98
99 wxGenericCommandLinkButton(wxWindow *parent,
100 wxWindowID id,
101 const wxString& mainLabel = wxEmptyString,
102 const wxString& note = wxEmptyString,
103 const wxPoint& pos = wxDefaultPosition,
104 const wxSize& size = wxDefaultSize,
105 long style = 0,
106 const wxValidator& validator = wxDefaultValidator,
107 const wxString& name = wxButtonNameStr)
108 : wxCommandLinkButtonBase()
109 {
110 Create(parent, id, mainLabel, note, pos, size, style, validator, name);
111 }
112
113 bool Create(wxWindow *parent,
114 wxWindowID id,
115 const wxString& mainLabel = wxEmptyString,
116 const wxString& note = wxEmptyString,
117 const wxPoint& pos = wxDefaultPosition,
118 const wxSize& size = wxDefaultSize,
119 long style = 0,
120 const wxValidator& validator = wxDefaultValidator,
121 const wxString& name = wxButtonNameStr);
122
123 virtual void SetMainLabelAndNote(const wxString& mainLabel,
124 const wxString& note)
125 {
126 wxButton::SetLabel(mainLabel + '\n' + note);
127 }
128
129 private:
130 void SetDefaultBitmap();
131
132 wxDECLARE_NO_COPY_CLASS(wxGenericCommandLinkButton);
133 };
134
135 #if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
136 #include "wx/msw/commandlinkbutton.h"
137 #else
138 class WXDLLIMPEXP_ADV wxCommandLinkButton : public wxGenericCommandLinkButton
139 {
140 public:
141 wxCommandLinkButton() : wxGenericCommandLinkButton() { }
142
143 wxCommandLinkButton(wxWindow *parent,
144 wxWindowID id,
145 const wxString& mainLabel = wxEmptyString,
146 const wxString& note = wxEmptyString,
147 const wxPoint& pos = wxDefaultPosition,
148 const wxSize& size = wxDefaultSize,
149 long style = 0,
150 const wxValidator& validator = wxDefaultValidator,
151 const wxString& name = wxButtonNameStr)
152 : wxGenericCommandLinkButton(parent,
153 id,
154 mainLabel,
155 note,
156 pos,
157 size,
158 style,
159 validator,
160 name)
161 { }
162
163 private:
164 wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxCommandLinkButton);
165 };
166 #endif // __WXMSW__/!__WXMSW__
167
168 #endif // wxUSE_COMMANDLINKBUTTON
169
170 #endif // _WX_COMMANDLINKBUTTON_H_