]>
Commit | Line | Data |
---|---|---|
1 | import wx | |
2 | import wx.lib.buttonpanel as bp | |
3 | import images | |
4 | ||
5 | import random | |
6 | ||
7 | #---------------------------------------------------------------------- | |
8 | ||
9 | ID_BackgroundColour = wx.NewId() | |
10 | ID_GradientFrom = wx.NewId() | |
11 | ID_GradientTo = wx.NewId() | |
12 | ID_BorderColour = wx.NewId() | |
13 | ID_CaptionColour = wx.NewId() | |
14 | ID_ButtonTextColour = wx.NewId() | |
15 | ID_SelectionBrush = wx.NewId() | |
16 | ID_SelectionPen = wx.NewId() | |
17 | ID_SeparatorColour = wx.NewId() | |
18 | ||
19 | ||
20 | #---------------------------------------------------------------------- | |
21 | # Some icons for the demo | |
22 | #---------------------------------------------------------------------- | |
23 | def GetMondrianData(): | |
24 | return \ | |
25 | '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\ | |
26 | \x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00qID\ | |
27 | ATX\x85\xed\xd6;\n\x800\x10E\xd1{\xc5\x8d\xb9r\x97\x16\x0b\xad$\x8a\x82:\x16\ | |
28 | o\xda\x84pB2\x1f\x81Fa\x8c\x9c\x08\x04Z{\xcf\xa72\xbcv\xfa\xc5\x08 \x80r\x80\ | |
29 | \xfc\xa2\x0e\x1c\xe4\xba\xfaX\x1d\xd0\xde]S\x07\x02\xd8>\xe1wa-`\x9fQ\xe9\ | |
30 | \x86\x01\x04\x10\x00\\(Dk\x1b-\x04\xdc\x1d\x07\x14\x98;\x0bS\x7f\x7f\xf9\x13\ | |
31 | \x04\x10@\xf9X\xbe\x00\xc9 \x14K\xc1<={\x00\x00\x00\x00IEND\xaeB`\x82' | |
32 | ||
33 | ||
34 | def GetMondrianBitmap(): | |
35 | return wx.BitmapFromImage(GetMondrianImage()) | |
36 | ||
37 | ||
38 | def GetMondrianImage(): | |
39 | import cStringIO | |
40 | stream = cStringIO.StringIO(GetMondrianData()) | |
41 | return wx.ImageFromStream(stream) | |
42 | ||
43 | ||
44 | def GetMondrianIcon(): | |
45 | icon = wx.EmptyIcon() | |
46 | icon.CopyFromBitmap(GetMondrianBitmap()) | |
47 | return icon | |
48 | ||
49 | ||
50 | #---------------------------------------------------------------------- | |
51 | ||
52 | class SettingsPanel(wx.MiniFrame): | |
53 | ||
54 | def __init__(self, parent, id=wx.ID_ANY, title="Settings Panel", pos=wx.DefaultPosition, | |
55 | size=wx.DefaultSize, | |
56 | style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.FRAME_NO_TASKBAR | |
57 | | wx.FRAME_FLOAT_ON_PARENT | wx.CLIP_CHILDREN): | |
58 | ||
59 | wx.MiniFrame.__init__(self, parent, id, title, pos, size, style) | |
60 | ||
61 | self.targetTitleBar = parent.titleBar | |
62 | self.parent = parent | |
63 | self.panel = wx.Panel(self, -1) | |
64 | ||
65 | self.coloursizer_staticbox = wx.StaticBox(self.panel, -1, "Colour Options") | |
66 | self.bottomsizer_staticbox = wx.StaticBox(self.panel, -1, "Size Options") | |
67 | self.stylesizer_staticbox = wx.StaticBox(self.panel, -1, "ButtonPanel Styles") | |
68 | self.defaultstyle = wx.RadioButton(self.panel, -1, "Default Style", style=wx.RB_GROUP) | |
69 | self.gradientstyle = wx.RadioButton(self.panel, -1, "Gradient Style") | |
70 | self.verticalgradient = wx.RadioButton(self.panel, -1, "Vertical Gradient", style=wx.RB_GROUP) | |
71 | self.horizontalgradient = wx.RadioButton(self.panel, -1, "Horizontal Gradient") | |
72 | ||
73 | b = self.CreateColorBitmap(wx.BLACK) | |
74 | ||
75 | self.bakbrush = wx.BitmapButton(self.panel, ID_BackgroundColour, b, size=wx.Size(50,25)) | |
76 | self.gradientfrom = wx.BitmapButton(self.panel, ID_GradientFrom, b, size=wx.Size(50,25)) | |
77 | self.gradientto = wx.BitmapButton(self.panel, ID_GradientTo, b, size=wx.Size(50,25)) | |
78 | self.bordercolour = wx.BitmapButton(self.panel, ID_BorderColour, b, size=wx.Size(50,25)) | |
79 | self.captioncolour = wx.BitmapButton(self.panel, ID_CaptionColour, b, size=wx.Size(50,25)) | |
80 | self.textbuttoncolour = wx.BitmapButton(self.panel, ID_ButtonTextColour, b, size=wx.Size(50,25)) | |
81 | self.selectionbrush = wx.BitmapButton(self.panel, ID_SelectionBrush, b, size=wx.Size(50,25)) | |
82 | self.selectionpen = wx.BitmapButton(self.panel, ID_SelectionPen, b, size=wx.Size(50,25)) | |
83 | self.separatorcolour = wx.BitmapButton(self.panel, ID_SeparatorColour, b, size=wx.Size(50,25)) | |
84 | ||
85 | self.separatorspin = wx.SpinCtrl(self.panel, -1, "7", min=3, max=20, | |
86 | style=wx.SP_ARROW_KEYS) | |
87 | self.marginspin = wx.SpinCtrl(self.panel, -1, "6", min=3, max=20, | |
88 | style=wx.SP_ARROW_KEYS) | |
89 | self.paddingspin = wx.SpinCtrl(self.panel, -1, "6", min=3, max=20, | |
90 | style=wx.SP_ARROW_KEYS) | |
91 | self.borderspin = wx.SpinCtrl(self.panel, -1, "3", min=3, max=7, | |
92 | style=wx.SP_ARROW_KEYS) | |
93 | ||
94 | self.__set_properties() | |
95 | self.__do_layout() | |
96 | ||
97 | self.Bind(wx.EVT_RADIOBUTTON, self.OnDefaultStyle, self.defaultstyle) | |
98 | self.Bind(wx.EVT_RADIOBUTTON, self.OnGradientStyle, self.gradientstyle) | |
99 | self.Bind(wx.EVT_RADIOBUTTON, self.OnVerticalGradient, self.verticalgradient) | |
100 | self.Bind(wx.EVT_RADIOBUTTON, self.OnHorizontalGradient, self.horizontalgradient) | |
101 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_BackgroundColour) | |
102 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_GradientFrom) | |
103 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_GradientTo) | |
104 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_BorderColour) | |
105 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_CaptionColour) | |
106 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_ButtonTextColour) | |
107 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_SelectionBrush) | |
108 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_SelectionPen) | |
109 | self.Bind(wx.EVT_BUTTON, self.OnSetColour, id=ID_SeparatorColour) | |
110 | ||
111 | self.Bind(wx.EVT_SPINCTRL, self.OnSeparator, self.separatorspin) | |
112 | self.Bind(wx.EVT_SPINCTRL, self.OnMargins, self.marginspin) | |
113 | self.Bind(wx.EVT_SPINCTRL, self.OnPadding, self.paddingspin) | |
114 | self.Bind(wx.EVT_SPINCTRL, self.OnBorder, self.borderspin) | |
115 | ||
116 | self.Bind(wx.EVT_CLOSE, self.OnClose) | |
117 | ||
118 | ||
119 | def __set_properties(self): | |
120 | ||
121 | self.defaultstyle.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) | |
122 | self.defaultstyle.SetValue(1) | |
123 | self.gradientstyle.SetFont(wx.Font(8, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) | |
124 | self.verticalgradient.SetValue(1) | |
125 | ||
126 | if self.targetTitleBar.GetStyle() & bp.BP_DEFAULT_STYLE: | |
127 | self.verticalgradient.Enable(False) | |
128 | self.horizontalgradient.Enable(False) | |
129 | self.defaultstyle.SetValue(1) | |
130 | else: | |
131 | self.gradientstyle.SetValue(1) | |
132 | ||
133 | self.borderspin.SetValue(self.targetTitleBar.GetBPArt().GetMetric(bp.BP_BORDER_SIZE)) | |
134 | self.separatorspin.SetValue(self.targetTitleBar.GetBPArt().GetMetric(bp.BP_SEPARATOR_SIZE)) | |
135 | self.marginspin.SetValue(self.targetTitleBar.GetBPArt().GetMetric(bp.BP_MARGINS_SIZE).x) | |
136 | self.paddingspin.SetValue(self.targetTitleBar.GetBPArt().GetMetric(bp.BP_PADDING_SIZE).x) | |
137 | ||
138 | self.UpdateColors() | |
139 | ||
140 | ||
141 | def __do_layout(self): | |
142 | ||
143 | mainsizer = wx.BoxSizer(wx.VERTICAL) | |
144 | buttonsizer = wx.BoxSizer(wx.HORIZONTAL) | |
145 | bottomsizer = wx.StaticBoxSizer(self.bottomsizer_staticbox, wx.VERTICAL) | |
146 | sizer_13 = wx.BoxSizer(wx.HORIZONTAL) | |
147 | sizer_12 = wx.BoxSizer(wx.HORIZONTAL) | |
148 | sizer_11 = wx.BoxSizer(wx.HORIZONTAL) | |
149 | sizer_10 = wx.BoxSizer(wx.HORIZONTAL) | |
150 | coloursizer = wx.StaticBoxSizer(self.coloursizer_staticbox, wx.HORIZONTAL) | |
151 | rightsizer = wx.BoxSizer(wx.VERTICAL) | |
152 | sizer_9 = wx.BoxSizer(wx.HORIZONTAL) | |
153 | sizer_8 = wx.BoxSizer(wx.HORIZONTAL) | |
154 | sizer_7 = wx.BoxSizer(wx.HORIZONTAL) | |
155 | sizer_6 = wx.BoxSizer(wx.HORIZONTAL) | |
156 | leftsizer = wx.BoxSizer(wx.VERTICAL) | |
157 | sizer_5 = wx.BoxSizer(wx.HORIZONTAL) | |
158 | sizer_4 = wx.BoxSizer(wx.HORIZONTAL) | |
159 | sizer_3 = wx.BoxSizer(wx.HORIZONTAL) | |
160 | sizer_2 = wx.BoxSizer(wx.HORIZONTAL) | |
161 | sizer_1 = wx.BoxSizer(wx.HORIZONTAL) | |
162 | stylesizer = wx.StaticBoxSizer(self.stylesizer_staticbox, wx.VERTICAL) | |
163 | tophsizer = wx.BoxSizer(wx.HORIZONTAL) | |
164 | tophsizer2 = wx.BoxSizer(wx.VERTICAL) | |
165 | ||
166 | stylesizer.Add(self.defaultstyle, 0, wx.ALL|wx.EXPAND|wx.ADJUST_MINSIZE, 5) | |
167 | ||
168 | tophsizer.Add(self.gradientstyle, 0, wx.LEFT|wx.RIGHT|wx.EXPAND| | |
169 | wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
170 | ||
171 | tophsizer2.Add(self.verticalgradient, 0, wx.BOTTOM|wx.ADJUST_MINSIZE, 3) | |
172 | tophsizer2.Add(self.horizontalgradient, 0, wx.ADJUST_MINSIZE, 0) | |
173 | ||
174 | tophsizer.Add(tophsizer2, 1, wx.LEFT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 10) | |
175 | ||
176 | stylesizer.Add(tophsizer, 1, wx.EXPAND, 0) | |
177 | ||
178 | mainsizer.Add(stylesizer, 0, wx.ALL|wx.EXPAND, 5) | |
179 | ||
180 | label_1 = wx.StaticText(self.panel, -1, "Background Brush Colour:") | |
181 | sizer_1.Add(label_1, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
182 | sizer_1.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
183 | sizer_1.Add(self.bakbrush, 0, wx.ADJUST_MINSIZE, 0) | |
184 | ||
185 | leftsizer.Add(sizer_1, 1, wx.EXPAND, 0) | |
186 | ||
187 | label_2 = wx.StaticText(self.panel, -1, "Gradient Colour From:") | |
188 | sizer_2.Add(label_2, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
189 | sizer_2.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
190 | sizer_2.Add(self.gradientfrom, 0, wx.ADJUST_MINSIZE, 0) | |
191 | ||
192 | leftsizer.Add(sizer_2, 1, wx.EXPAND, 0) | |
193 | ||
194 | label_3 = wx.StaticText(self.panel, -1, "Gradient Colour To:") | |
195 | sizer_3.Add(label_3, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
196 | sizer_3.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
197 | sizer_3.Add(self.gradientto, 0, wx.ADJUST_MINSIZE, 0) | |
198 | ||
199 | leftsizer.Add(sizer_3, 1, wx.EXPAND, 0) | |
200 | ||
201 | label_4 = wx.StaticText(self.panel, -1, "Border Colour:") | |
202 | sizer_4.Add(label_4, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
203 | sizer_4.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
204 | sizer_4.Add(self.bordercolour, 0, wx.ADJUST_MINSIZE, 0) | |
205 | ||
206 | leftsizer.Add(sizer_4, 1, wx.EXPAND, 0) | |
207 | ||
208 | label_5 = wx.StaticText(self.panel, -1, "Main Caption Colour:") | |
209 | sizer_5.Add(label_5, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
210 | sizer_5.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
211 | sizer_5.Add(self.captioncolour, 0, wx.ADJUST_MINSIZE, 0) | |
212 | ||
213 | leftsizer.Add(sizer_5, 1, wx.EXPAND, 0) | |
214 | ||
215 | coloursizer.Add(leftsizer, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5) | |
216 | coloursizer.Add((20, 20), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
217 | ||
218 | label_6 = wx.StaticText(self.panel, -1, "Text Button Colour:") | |
219 | sizer_6.Add(label_6, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
220 | sizer_6.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
221 | sizer_6.Add(self.textbuttoncolour, 0, wx.ADJUST_MINSIZE, 0) | |
222 | ||
223 | rightsizer.Add(sizer_6, 1, wx.EXPAND, 0) | |
224 | ||
225 | label_7 = wx.StaticText(self.panel, -1, "Selection Brush Colour:") | |
226 | sizer_7.Add(label_7, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
227 | sizer_7.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
228 | sizer_7.Add(self.selectionbrush, 0, wx.ADJUST_MINSIZE, 0) | |
229 | ||
230 | rightsizer.Add(sizer_7, 1, wx.EXPAND, 0) | |
231 | ||
232 | label_8 = wx.StaticText(self.panel, -1, "Selection Pen Colour:") | |
233 | sizer_8.Add(label_8, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
234 | sizer_8.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
235 | sizer_8.Add(self.selectionpen, 0, wx.ADJUST_MINSIZE, 0) | |
236 | ||
237 | rightsizer.Add(sizer_8, 1, wx.EXPAND, 0) | |
238 | ||
239 | label_9 = wx.StaticText(self.panel, -1, "Separator Colour:") | |
240 | sizer_9.Add(label_9, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
241 | sizer_9.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
242 | sizer_9.Add(self.separatorcolour, 0, wx.ADJUST_MINSIZE, 0) | |
243 | ||
244 | rightsizer.Add(sizer_9, 1, wx.EXPAND, 0) | |
245 | ||
246 | coloursizer.Add(rightsizer, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5) | |
247 | ||
248 | mainsizer.Add(coloursizer, 0, wx.ALL|wx.EXPAND, 5) | |
249 | ||
250 | label_10 = wx.StaticText(self.panel, -1, "Separator Size:") | |
251 | sizer_10.Add(label_10, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
252 | sizer_10.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
253 | sizer_10.Add(self.separatorspin, 0, wx.ALL|wx.ADJUST_MINSIZE, 5) | |
254 | ||
255 | bottomsizer.Add(sizer_10, 1, wx.EXPAND, 0) | |
256 | ||
257 | label_11 = wx.StaticText(self.panel, -1, "Margins Size:") | |
258 | sizer_11.Add(label_11, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
259 | sizer_11.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
260 | sizer_11.Add(self.marginspin, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ADJUST_MINSIZE, 5) | |
261 | ||
262 | bottomsizer.Add(sizer_11, 1, wx.EXPAND, 0) | |
263 | ||
264 | label_12 = wx.StaticText(self.panel, -1, "Padding Size:") | |
265 | sizer_12.Add(label_12, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
266 | sizer_12.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
267 | sizer_12.Add(self.paddingspin, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ADJUST_MINSIZE, 5) | |
268 | ||
269 | bottomsizer.Add(sizer_12, 1, wx.EXPAND, 0) | |
270 | ||
271 | label_13 = wx.StaticText(self.panel, -1, "Border Size:") | |
272 | sizer_13.Add(label_13, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE, 5) | |
273 | sizer_13.Add((0, 0), 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) | |
274 | sizer_13.Add(self.borderspin, 0, wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.ADJUST_MINSIZE, 5) | |
275 | ||
276 | bottomsizer.Add(sizer_13, 1, wx.EXPAND, 0) | |
277 | ||
278 | mainsizer.Add(bottomsizer, 0, wx.ALL|wx.EXPAND, 5) | |
279 | ||
280 | self.panel.SetSizer(mainsizer) | |
281 | sizer = wx.BoxSizer() | |
282 | sizer.Add(self.panel, 1, wx.EXPAND) | |
283 | self.SetSizer(sizer) | |
284 | self.Fit() | |
285 | ||
286 | ||
287 | def CreateColorBitmap(self, c): | |
288 | ||
289 | image = wx.EmptyImage(25, 14) | |
290 | ||
291 | for x in xrange(25): | |
292 | for y in xrange(14): | |
293 | pixcol = c | |
294 | if x == 0 or x == 24 or y == 0 or y == 13: | |
295 | pixcol = wx.BLACK | |
296 | ||
297 | image.SetRGB(x, y, pixcol.Red(), pixcol.Green(), pixcol.Blue()) | |
298 | ||
299 | return image.ConvertToBitmap() | |
300 | ||
301 | ||
302 | def UpdateColors(self): | |
303 | ||
304 | bk = self.targetTitleBar.GetBPArt().GetColor(bp.BP_BACKGROUND_COLOR) | |
305 | self.bakbrush.SetBitmapLabel(self.CreateColorBitmap(bk)) | |
306 | ||
307 | capfrom = self.targetTitleBar.GetBPArt().GetColor(bp.BP_GRADIENT_COLOR_FROM) | |
308 | self.gradientfrom.SetBitmapLabel(self.CreateColorBitmap(capfrom)) | |
309 | ||
310 | capto = self.targetTitleBar.GetBPArt().GetColor(bp.BP_GRADIENT_COLOR_TO) | |
311 | self.gradientto.SetBitmapLabel(self.CreateColorBitmap(capto)) | |
312 | ||
313 | captxt = self.targetTitleBar.GetBPArt().GetColor(bp.BP_TEXT_COLOR) | |
314 | self.captioncolour.SetBitmapLabel(self.CreateColorBitmap(captxt)) | |
315 | ||
316 | bor = self.targetTitleBar.GetBPArt().GetColor(bp.BP_BORDER_COLOR) | |
317 | self.bordercolour.SetBitmapLabel(self.CreateColorBitmap(bor)) | |
318 | ||
319 | btntext = self.targetTitleBar.GetBPArt().GetColor(bp.BP_BUTTONTEXT_COLOR) | |
320 | self.textbuttoncolour.SetBitmapLabel(self.CreateColorBitmap(btntext)) | |
321 | ||
322 | selb = self.targetTitleBar.GetBPArt().GetColor(bp.BP_SELECTION_BRUSH_COLOR) | |
323 | self.selectionbrush.SetBitmapLabel(self.CreateColorBitmap(selb)) | |
324 | ||
325 | selp = self.targetTitleBar.GetBPArt().GetColor(bp.BP_SELECTION_PEN_COLOR) | |
326 | self.selectionpen.SetBitmapLabel(self.CreateColorBitmap(selp)) | |
327 | ||
328 | sepc = self.targetTitleBar.GetBPArt().GetColor(bp.BP_SEPARATOR_COLOR) | |
329 | self.separatorcolour.SetBitmapLabel(self.CreateColorBitmap(sepc)) | |
330 | ||
331 | ||
332 | def OnDefaultStyle(self, event): | |
333 | ||
334 | self.verticalgradient.Enable(False) | |
335 | self.horizontalgradient.Enable(False) | |
336 | self.targetTitleBar.SetStyle(bp.BP_DEFAULT_STYLE) | |
337 | ||
338 | self.targetTitleBar.Refresh() | |
339 | ||
340 | event.Skip() | |
341 | ||
342 | ||
343 | def OnGradientStyle(self, event): | |
344 | ||
345 | self.verticalgradient.Enable(True) | |
346 | self.horizontalgradient.Enable(True) | |
347 | self.targetTitleBar.SetStyle(bp.BP_USE_GRADIENT) | |
348 | self.targetTitleBar.Refresh() | |
349 | ||
350 | event.Skip() | |
351 | ||
352 | ||
353 | def OnVerticalGradient(self, event): | |
354 | ||
355 | self.targetTitleBar.GetBPArt().SetGradientType(bp.BP_GRADIENT_VERTICAL) | |
356 | self.targetTitleBar.SetStyle(bp.BP_USE_GRADIENT) | |
357 | self.targetTitleBar.Refresh() | |
358 | ||
359 | event.Skip() | |
360 | ||
361 | ||
362 | def OnHorizontalGradient(self, event): | |
363 | ||
364 | self.targetTitleBar.GetBPArt().SetGradientType(bp.BP_GRADIENT_HORIZONTAL) | |
365 | self.targetTitleBar.SetStyle(bp.BP_USE_GRADIENT) | |
366 | self.targetTitleBar.Refresh() | |
367 | ||
368 | event.Skip() | |
369 | ||
370 | ||
371 | def OnSetColour(self, event): | |
372 | ||
373 | dlg = wx.ColourDialog(self.parent) | |
374 | ||
375 | dlg.SetTitle("Color Picker") | |
376 | ||
377 | if dlg.ShowModal() != wx.ID_OK: | |
378 | return | |
379 | ||
380 | var = 0 | |
381 | if event.GetId() == ID_BackgroundColour: | |
382 | var = bp.BP_BACKGROUND_COLOR | |
383 | elif event.GetId() == ID_GradientFrom: | |
384 | var = bp.BP_GRADIENT_COLOR_FROM | |
385 | elif event.GetId() == ID_GradientTo: | |
386 | var = bp.BP_GRADIENT_COLOR_TO | |
387 | elif event.GetId() == ID_BorderColour: | |
388 | var = bp.BP_BORDER_COLOR | |
389 | elif event.GetId() == ID_CaptionColour: | |
390 | var = bp.BP_TEXT_COLOR | |
391 | elif event.GetId() == ID_ButtonTextColour: | |
392 | var = bp.BP_BUTTONTEXT_COLOR | |
393 | elif event.GetId() == ID_SelectionBrush: | |
394 | var = bp.BP_SELECTION_BRUSH_COLOR | |
395 | elif event.GetId() == ID_SelectionPen: | |
396 | var = bp.BP_SELECTION_PEN_COLOR | |
397 | elif event.GetId() == ID_SeparatorColour: | |
398 | var = bp.BP_SEPARATOR_COLOR | |
399 | else: | |
400 | return | |
401 | ||
402 | self.targetTitleBar.GetBPArt().SetColor(var, dlg.GetColourData().GetColour()) | |
403 | self.targetTitleBar.Refresh() | |
404 | self.UpdateColors() | |
405 | ||
406 | self.parent.useredited = True | |
407 | ||
408 | ||
409 | def OnSeparator(self, event): | |
410 | ||
411 | self.targetTitleBar.GetBPArt().SetMetric(bp.BP_SEPARATOR_SIZE, | |
412 | event.GetInt()) | |
413 | ||
414 | self.targetTitleBar.DoLayout() | |
415 | self.parent.mainPanel.Layout() | |
416 | self.parent.useredited = True | |
417 | ||
418 | event.Skip() | |
419 | ||
420 | ||
421 | def OnMargins(self, event): | |
422 | ||
423 | self.targetTitleBar.GetBPArt().SetMetric(bp.BP_MARGINS_SIZE, | |
424 | wx.Size(event.GetInt(), event.GetInt())) | |
425 | ||
426 | self.targetTitleBar.DoLayout() | |
427 | self.parent.mainPanel.Layout() | |
428 | ||
429 | self.parent.useredited = True | |
430 | ||
431 | event.Skip() | |
432 | ||
433 | ||
434 | def OnPadding(self, event): | |
435 | ||
436 | self.targetTitleBar.GetBPArt().SetMetric(bp.BP_PADDING_SIZE, | |
437 | wx.Size(event.GetInt(), event.GetInt())) | |
438 | ||
439 | self.targetTitleBar.DoLayout() | |
440 | self.parent.mainPanel.Layout() | |
441 | self.parent.useredited = True | |
442 | ||
443 | event.Skip() | |
444 | ||
445 | ||
446 | def OnBorder(self, event): | |
447 | ||
448 | self.targetTitleBar.GetBPArt().SetMetric(bp.BP_BORDER_SIZE, | |
449 | event.GetInt()) | |
450 | ||
451 | self.targetTitleBar.DoLayout() | |
452 | self.parent.mainPanel.Layout() | |
453 | ||
454 | self.parent.useredited = True | |
455 | ||
456 | event.Skip() | |
457 | ||
458 | ||
459 | def OnClose(self, event): | |
460 | ||
461 | self.parent.hassettingpanel = False | |
462 | self.Destroy() | |
463 | ||
464 | ||
465 | #---------------------------------------------------------------------- | |
466 | ||
467 | class ButtonPanelDemo(wx.Frame): | |
468 | ||
469 | def __init__(self, parent, id=wx.ID_ANY, title="ButtonPanel wxPython Demo ;-)", | |
470 | pos=wx.DefaultPosition, size=(640, 400), style=wx.DEFAULT_FRAME_STYLE): | |
471 | ||
472 | wx.Frame.__init__(self, parent, id, title, pos, size, style) | |
473 | ||
474 | self.useredited = False | |
475 | self.hassettingpanel = False | |
476 | ||
477 | self.SetIcon(GetMondrianIcon()) | |
478 | self.CreateMenuBar() | |
479 | ||
480 | self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP) | |
481 | self.statusbar.SetStatusWidths([-2, -1]) | |
482 | # statusbar fields | |
483 | statusbar_fields = [("ButtonPanel wxPython Demo, Andrea Gavana @ 02 Oct 2006"), | |
484 | ("Welcome To wxPython!")] | |
485 | ||
486 | for i in range(len(statusbar_fields)): | |
487 | self.statusbar.SetStatusText(statusbar_fields[i], i) | |
488 | ||
489 | self.mainPanel = wx.Panel(self, -1) | |
490 | self.logtext = wx.TextCtrl(self.mainPanel, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY) | |
491 | ||
492 | vSizer = wx.BoxSizer(wx.VERTICAL) | |
493 | self.mainPanel.SetSizer(vSizer) | |
494 | ||
495 | self.alignments = [bp.BP_ALIGN_LEFT, bp.BP_ALIGN_RIGHT, bp.BP_ALIGN_TOP, bp.BP_ALIGN_BOTTOM] | |
496 | ||
497 | self.alignment = bp.BP_ALIGN_LEFT | |
498 | self.style = bp.BP_USE_GRADIENT | |
499 | ||
500 | self.titleBar = bp.ButtonPanel(self.mainPanel, -1, "A Simple Test & Demo", | |
501 | style=self.style, alignment=self.alignment) | |
502 | ||
503 | self.created = False | |
504 | self.pngs = [ (images.get_bp_btn1Bitmap(), 'label1'), | |
505 | (images.get_bp_btn2Bitmap(), 'label2'), | |
506 | (images.get_bp_btn3Bitmap(), 'label3'), | |
507 | (images.get_bp_btn4Bitmap(), 'label4'), | |
508 | ] | |
509 | self.CreateButtons() | |
510 | self.SetProperties() | |
511 | ||
512 | ||
513 | def CreateMenuBar(self): | |
514 | ||
515 | mb = wx.MenuBar() | |
516 | ||
517 | file_menu = wx.Menu() | |
518 | ||
519 | item = wx.MenuItem(file_menu, wx.ID_ANY, "&Quit") | |
520 | file_menu.AppendItem(item) | |
521 | self.Bind(wx.EVT_MENU, self.OnClose, item) | |
522 | ||
523 | edit_menu = wx.Menu() | |
524 | ||
525 | item = wx.MenuItem(edit_menu, wx.ID_ANY, "Set Bar Text") | |
526 | edit_menu.AppendItem(item) | |
527 | self.Bind(wx.EVT_MENU, self.OnSetBarText, item) | |
528 | ||
529 | edit_menu.AppendSeparator() | |
530 | ||
531 | submenu = wx.Menu() | |
532 | ||
533 | item = wx.MenuItem(submenu, wx.ID_ANY, "BP_ALIGN_LEFT", kind=wx.ITEM_RADIO) | |
534 | submenu.AppendItem(item) | |
535 | item.Check(True) | |
536 | self.Bind(wx.EVT_MENU, self.OnAlignment, item) | |
537 | ||
538 | item = wx.MenuItem(submenu, wx.ID_ANY, "BP_ALIGN_RIGHT", kind=wx.ITEM_RADIO) | |
539 | submenu.AppendItem(item) | |
540 | self.Bind(wx.EVT_MENU, self.OnAlignment, item) | |
541 | ||
542 | item = wx.MenuItem(submenu, wx.ID_ANY, "BP_ALIGN_TOP", kind=wx.ITEM_RADIO) | |
543 | submenu.AppendItem(item) | |
544 | self.Bind(wx.EVT_MENU, self.OnAlignment, item) | |
545 | ||
546 | item = wx.MenuItem(submenu, wx.ID_ANY, "BP_ALIGN_BOTTOM", kind=wx.ITEM_RADIO) | |
547 | submenu.AppendItem(item) | |
548 | self.Bind(wx.EVT_MENU, self.OnAlignment, item) | |
549 | ||
550 | edit_menu.AppendMenu(wx.ID_ANY, "&Alignment", submenu) | |
551 | ||
552 | submenu = wx.Menu() | |
553 | ||
554 | item = wx.MenuItem(submenu, wx.ID_ANY, "Default Style", kind=wx.ITEM_RADIO) | |
555 | submenu.AppendItem(item) | |
556 | self.Bind(wx.EVT_MENU, self.OnDefaultStyle, item) | |
557 | ||
558 | item = wx.MenuItem(submenu, wx.ID_ANY, "Gradient Style", kind=wx.ITEM_RADIO) | |
559 | submenu.AppendItem(item) | |
560 | item.Check(True) | |
561 | self.Bind(wx.EVT_MENU, self.OnGradientStyle, item) | |
562 | ||
563 | edit_menu.AppendMenu(wx.ID_ANY, "&Styles", submenu) | |
564 | ||
565 | edit_menu.AppendSeparator() | |
566 | ||
567 | item = wx.MenuItem(submenu, wx.ID_ANY, "Settings Panel") | |
568 | edit_menu.AppendItem(item) | |
569 | self.Bind(wx.EVT_MENU, self.OnSettingsPanel, item) | |
570 | ||
571 | demo_menu = wx.Menu() | |
572 | ||
573 | item = wx.MenuItem(demo_menu, wx.ID_ANY, "Default Demo", kind=wx.ITEM_RADIO) | |
574 | demo_menu.AppendItem(item) | |
575 | self.Bind(wx.EVT_MENU, self.OnDefaultDemo, item) | |
576 | ||
577 | item = wx.MenuItem(demo_menu, wx.ID_ANY, "Button Only Demo", kind=wx.ITEM_RADIO) | |
578 | demo_menu.AppendItem(item) | |
579 | self.Bind(wx.EVT_MENU, self.OnButtonOnly, item) | |
580 | ||
581 | help_menu = wx.Menu() | |
582 | ||
583 | item = wx.MenuItem(help_menu, wx.ID_ANY, "&About...") | |
584 | help_menu.AppendItem(item) | |
585 | self.Bind(wx.EVT_MENU, self.OnAbout, item) | |
586 | ||
587 | mb.Append(file_menu, "&File") | |
588 | mb.Append(edit_menu, "&Edit") | |
589 | mb.Append(demo_menu, "&Demo") | |
590 | mb.Append(help_menu, "&Help") | |
591 | ||
592 | self.SetMenuBar(mb) | |
593 | ||
594 | ||
595 | def CreateButtons(self): | |
596 | ||
597 | # Here we (re)create the buttons for the default startup demo | |
598 | self.Freeze() | |
599 | ||
600 | if self.created: | |
601 | sizer = self.mainPanel.GetSizer() | |
602 | sizer.Detach(0) | |
603 | self.titleBar.Hide() | |
604 | wx.CallAfter(self.titleBar.Destroy) | |
605 | self.titleBar = bp.ButtonPanel(self.mainPanel, -1, "A Simple Test & Demo", | |
606 | style=self.style, alignment=self.alignment) | |
607 | self.SetProperties() | |
608 | ||
609 | self.indices = [] | |
610 | ||
611 | for count, png in enumerate(self.pngs): | |
612 | ||
613 | shortHelp = "Button %d"%(count+1) | |
614 | ||
615 | if count < 2: | |
616 | # First 2 buttons are togglebuttons | |
617 | kind = wx.ITEM_CHECK | |
618 | longHelp = "ButtonPanel Toggle Button No %d"%(count+1) | |
619 | else: | |
620 | kind = wx.ITEM_NORMAL | |
621 | longHelp = "Simple Button without label No %d"%(count+1) | |
622 | ||
623 | btn = bp.ButtonInfo(self.titleBar, wx.NewId(), | |
624 | png[0], kind=kind, | |
625 | shortHelp=shortHelp, longHelp=longHelp) | |
626 | ||
627 | self.titleBar.AddButton(btn) | |
628 | self.Bind(wx.EVT_BUTTON, self.OnButton, id=btn.GetId()) | |
629 | ||
630 | self.indices.append(btn.GetId()) | |
631 | ||
632 | if count < 2: | |
633 | # First 2 buttons have also a text | |
634 | btn.SetText(png[1]) | |
635 | ||
636 | if count == 2: | |
637 | # Append a separator after the second button | |
638 | self.titleBar.AddSeparator() | |
639 | ||
640 | if count == 1: | |
641 | # Add a wx.TextCtrl to ButtonPanel | |
642 | self.titleBar.AddControl(wx.TextCtrl(self.titleBar, -1, "Hello wxPython!")) | |
643 | btn.SetTextAlignment(bp.BP_BUTTONTEXT_ALIGN_RIGHT) | |
644 | ||
645 | # Add a wx.Choice to ButtonPanel | |
646 | self.titleBar.AddControl(wx.Choice(self.titleBar, -1, | |
647 | choices=["Hello", "From", "wxPython!"])) | |
648 | ||
649 | self.strings = ["First", "Second", "Third", "Fourth"] | |
650 | ||
651 | self.ChangeLayout() | |
652 | self.Thaw() | |
653 | self.titleBar.DoLayout() | |
654 | ||
655 | self.created = True | |
656 | ||
657 | ||
658 | def ButtonOnly(self): | |
659 | ||
660 | # Here we (re)create the buttons for the button-only demo | |
661 | self.Freeze() | |
662 | ||
663 | if self.created: | |
664 | sizer = self.mainPanel.GetSizer() | |
665 | sizer.Detach(0) | |
666 | self.titleBar.Hide() | |
667 | wx.CallAfter(self.titleBar.Destroy) | |
668 | self.titleBar = bp.ButtonPanel(self.mainPanel, -1, "A Simple Test & Demo", | |
669 | style=self.style, alignment=self.alignment) | |
670 | self.SetProperties() | |
671 | ||
672 | # Buttons are created completely random, with random images, toggle behavior | |
673 | # and text | |
674 | ||
675 | self.indices = [] | |
676 | ||
677 | for count in xrange(8): | |
678 | ||
679 | itemImage = random.randint(0, 3) | |
680 | hasText = random.randint(0, 1) | |
681 | itemKind = random.randint(0, 1) | |
682 | ||
683 | btn = bp.ButtonInfo(self.titleBar, wx.NewId(), self.pngs[itemImage][0], | |
684 | kind=itemKind) | |
685 | ||
686 | if hasText: | |
687 | btn.SetText(self.pngs[itemImage][1]) | |
688 | rightText = random.randint(0, 1) | |
689 | if rightText: | |
690 | btn.SetTextAlignment(bp.BP_BUTTONTEXT_ALIGN_RIGHT) | |
691 | ||
692 | self.titleBar.AddButton(btn) | |
693 | self.Bind(wx.EVT_BUTTON, self.OnButton, id=btn.GetId()) | |
694 | ||
695 | self.indices.append(btn.GetId()) | |
696 | ||
697 | if count in [0, 3, 5]: | |
698 | self.titleBar.AddSeparator() | |
699 | ||
700 | self.strings = ["First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh", "Eighth"] | |
701 | ||
702 | self.ChangeLayout() | |
703 | self.Thaw() | |
704 | self.titleBar.DoLayout() | |
705 | ||
706 | ||
707 | def ChangeLayout(self): | |
708 | ||
709 | # Change the layout after a switch in ButtonPanel alignment | |
710 | self.Freeze() | |
711 | ||
712 | if self.alignment in [bp.BP_ALIGN_LEFT, bp.BP_ALIGN_RIGHT]: | |
713 | vSizer = wx.BoxSizer(wx.VERTICAL) | |
714 | else: | |
715 | vSizer = wx.BoxSizer(wx.HORIZONTAL) | |
716 | ||
717 | self.mainPanel.SetSizer(vSizer) | |
718 | ||
719 | vSizer.Add(self.titleBar, 0, wx.EXPAND) | |
720 | vSizer.Add((20, 20)) | |
721 | vSizer.Add(self.logtext, 1, wx.EXPAND|wx.ALL, 5) | |
722 | ||
723 | vSizer.Layout() | |
724 | self.mainPanel.Layout() | |
725 | self.Thaw() | |
726 | ||
727 | ||
728 | def SetProperties(self): | |
729 | ||
730 | # No resetting if the user is using the Settings Panel | |
731 | if self.useredited: | |
732 | return | |
733 | ||
734 | # Sets the colours for the two demos: called only if the user didn't | |
735 | # modify the colours and sizes using the Settings Panel | |
736 | bpArt = self.titleBar.GetBPArt() | |
737 | ||
738 | if self.style & bp.BP_USE_GRADIENT: | |
739 | # set the color the text is drawn with | |
740 | bpArt.SetColor(bp.BP_TEXT_COLOR, wx.WHITE) | |
741 | ||
742 | # These default to white and whatever is set in the system | |
743 | # settings for the wx.SYS_COLOUR_ACTIVECAPTION. We'll use | |
744 | # some specific settings to ensure a consistent look for the | |
745 | # demo. | |
746 | bpArt.SetColor(bp.BP_BORDER_COLOR, wx.Colour(120,23,224)) | |
747 | bpArt.SetColor(bp.BP_GRADIENT_COLOR_FROM, wx.Colour(60,11,112)) | |
748 | bpArt.SetColor(bp.BP_GRADIENT_COLOR_TO, wx.Colour(120,23,224)) | |
749 | bpArt.SetColor(bp.BP_BUTTONTEXT_COLOR, wx.Colour(70,143,255)) | |
750 | bpArt.SetColor(bp.BP_SEPARATOR_COLOR, | |
751 | bp.BrightenColour(wx.Colour(60, 11, 112), 0.85)) | |
752 | bpArt.SetColor(bp.BP_SELECTION_BRUSH_COLOR, wx.Color(225, 225, 255)) | |
753 | bpArt.SetColor(bp.BP_SELECTION_PEN_COLOR, wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION)) | |
754 | ||
755 | else: | |
756 | ||
757 | background = self.titleBar.GetBackgroundColour() | |
758 | bpArt.SetColor(bp.BP_TEXT_COLOR, wx.BLUE) | |
759 | bpArt.SetColor(bp.BP_BORDER_COLOR, | |
760 | bp.BrightenColour(background, 0.85)) | |
761 | bpArt.SetColor(bp.BP_SEPARATOR_COLOR, | |
762 | bp.BrightenColour(background, 0.85)) | |
763 | bpArt.SetColor(bp.BP_BUTTONTEXT_COLOR, wx.BLACK) | |
764 | bpArt.SetColor(bp.BP_SELECTION_BRUSH_COLOR, wx.Colour(242, 242, 235)) | |
765 | bpArt.SetColor(bp.BP_SELECTION_PEN_COLOR, wx.Colour(206, 206, 195)) | |
766 | ||
767 | self.titleBar.SetStyle(self.style) | |
768 | ||
769 | ||
770 | def OnAlignment(self, event): | |
771 | ||
772 | # Here we change the alignment property of ButtonPanel | |
773 | current = event.GetId() | |
774 | edit_menu = self.GetMenuBar().FindMenu("Edit") | |
775 | edit_menu = self.GetMenuBar().GetMenu(edit_menu) | |
776 | menu = edit_menu.FindItem("BP_ALIGN_LEFT") | |
777 | ||
778 | alignment = self.alignments[current - menu] | |
779 | self.alignment = alignment | |
780 | ||
781 | self.ChangeLayout() | |
782 | self.titleBar.SetAlignment(alignment) | |
783 | self.mainPanel.Layout() | |
784 | ||
785 | event.Skip() | |
786 | ||
787 | ||
788 | def OnDefaultStyle(self, event): | |
789 | ||
790 | # Restore the ButtonPanel default style (no gradient) | |
791 | self.style = bp.BP_DEFAULT_STYLE | |
792 | self.SetProperties() | |
793 | ||
794 | event.Skip() | |
795 | ||
796 | ||
797 | def OnGradientStyle(self, event): | |
798 | ||
799 | # Use gradients to paint ButtonPanel background | |
800 | self.style = bp.BP_USE_GRADIENT | |
801 | self.SetProperties() | |
802 | ||
803 | event.Skip() | |
804 | ||
805 | ||
806 | def OnDefaultDemo(self, event): | |
807 | ||
808 | # Reload the default startup demo | |
809 | self.CreateButtons() | |
810 | event.Skip() | |
811 | ||
812 | ||
813 | def OnButtonOnly(self, event): | |
814 | ||
815 | # Reload the button-only demo | |
816 | self.ButtonOnly() | |
817 | event.Skip() | |
818 | ||
819 | ||
820 | def OnButton(self, event): | |
821 | ||
822 | btn = event.GetId() | |
823 | indx = self.indices.index(btn) | |
824 | ||
825 | self.logtext.AppendText("Event Fired From " + self.strings[indx] + " Button\n") | |
826 | event.Skip() | |
827 | ||
828 | ||
829 | def OnSetBarText(self, event): | |
830 | ||
831 | dlg = wx.TextEntryDialog(self, "Enter The Text You Wish To Display On The Bar (Clear If No Text):", | |
832 | "Set Text", self.titleBar.GetBarText()) | |
833 | ||
834 | if dlg.ShowModal() == wx.ID_OK: | |
835 | ||
836 | val = dlg.GetValue() | |
837 | self.titleBar.SetBarText(val) | |
838 | self.titleBar.DoLayout() | |
839 | self.mainPanel.Layout() | |
840 | ||
841 | ||
842 | def OnSettingsPanel(self, event): | |
843 | ||
844 | if self.hassettingpanel: | |
845 | self.settingspanel.Raise() | |
846 | return | |
847 | ||
848 | self.settingspanel = SettingsPanel(self, -1) | |
849 | self.settingspanel.Show() | |
850 | self.hassettingpanel = True | |
851 | ||
852 | ||
853 | def OnClose(self, event): | |
854 | ||
855 | self.Destroy() | |
856 | event.Skip() | |
857 | ||
858 | ||
859 | def OnAbout(self, event): | |
860 | ||
861 | msg = "This Is The About Dialog Of The ButtonPanel Demo.\n\n" + \ | |
862 | "Author: Andrea Gavana @ 02 Oct 2006\n\n" + \ | |
863 | "Please Report Any Bug/Requests Of Improvements\n" + \ | |
864 | "To Me At The Following Adresses:\n\n" + \ | |
865 | "andrea.gavana@gmail.com\n" + "gavana@kpo.kz\n\n" + \ | |
866 | "Based On Eran C++ Implementation (wxWidgets Forum).\n\n" + \ | |
867 | "Welcome To wxPython " + wx.VERSION_STRING + "!!" | |
868 | ||
869 | dlg = wx.MessageDialog(self, msg, "ButtonPanel wxPython Demo", | |
870 | wx.OK | wx.ICON_INFORMATION) | |
871 | dlg.ShowModal() | |
872 | dlg.Destroy() | |
873 | ||
874 | ||
875 | #---------------------------------------------------------------------- | |
876 | ||
877 | class TestPanel(wx.Panel): | |
878 | def __init__(self, parent, log): | |
879 | self.log = log | |
880 | wx.Panel.__init__(self, parent, -1) | |
881 | ||
882 | b = wx.Button(self, -1, " Test ButtonPanel ", (50,50)) | |
883 | self.Bind(wx.EVT_BUTTON, self.OnButton, b) | |
884 | ||
885 | ||
886 | def OnButton(self, evt): | |
887 | self.win = ButtonPanelDemo(self) | |
888 | self.win.Show(True) | |
889 | ||
890 | ||
891 | #---------------------------------------------------------------------- | |
892 | ||
893 | def runTest(frame, nb, log): | |
894 | win = TestPanel(nb, log) | |
895 | return win | |
896 | ||
897 | #---------------------------------------------------------------------- | |
898 | ||
899 | ||
900 | ||
901 | overview = bp.__doc__ | |
902 | ||
903 | ||
904 | ||
905 | if __name__ == '__main__': | |
906 | import sys,os | |
907 | import run | |
908 | run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:]) | |
909 | ||
910 | ||
911 |