| 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 | |