]> git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/FlatNotebook.py
Have SetSizerProps internally handle the assignment of growable rows and cols.
[wxWidgets.git] / wxPython / demo / FlatNotebook.py
1 import wx
2 import wx.lib.flatnotebook as fnb
3 import random
4 import images
5
6
7 #----------------------------------------------------------------------
8 def GetMondrianData():
9 return \
10 '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
11 \x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00qID\
12 ATX\x85\xed\xd6;\n\x800\x10E\xd1{\xc5\x8d\xb9r\x97\x16\x0b\xad$\x8a\x82:\x16\
13 o\xda\x84pB2\x1f\x81Fa\x8c\x9c\x08\x04Z{\xcf\xa72\xbcv\xfa\xc5\x08 \x80r\x80\
14 \xfc\xa2\x0e\x1c\xe4\xba\xfaX\x1d\xd0\xde]S\x07\x02\xd8>\xe1wa-`\x9fQ\xe9\
15 \x86\x01\x04\x10\x00\\(Dk\x1b-\x04\xdc\x1d\x07\x14\x98;\x0bS\x7f\x7f\xf9\x13\
16 \x04\x10@\xf9X\xbe\x00\xc9 \x14K\xc1<={\x00\x00\x00\x00IEND\xaeB`\x82'
17
18
19 def GetMondrianBitmap():
20 return wx.BitmapFromImage(GetMondrianImage())
21
22
23 def GetMondrianImage():
24 import cStringIO
25 stream = cStringIO.StringIO(GetMondrianData())
26 return wx.ImageFromStream(stream)
27
28
29 def GetMondrianIcon():
30 icon = wx.EmptyIcon()
31 icon.CopyFromBitmap(GetMondrianBitmap())
32 return icon
33 #----------------------------------------------------------------------
34
35
36 MENU_EDIT_DELETE_ALL = wx.NewId()
37 MENU_EDIT_ADD_PAGE = wx.NewId()
38 MENU_EDIT_DELETE_PAGE = wx.NewId()
39 MENU_EDIT_SET_SELECTION = wx.NewId()
40 MENU_EDIT_ADVANCE_SELECTION_FWD = wx.NewId()
41 MENU_EDIT_ADVANCE_SELECTION_BACK = wx.NewId()
42 MENU_SET_ALL_TABS_SHAPE_ANGLE = wx.NewId()
43 MENU_SHOW_IMAGES = wx.NewId()
44 MENU_USE_VC71_STYLE = wx.NewId()
45 MENU_USE_DEFAULT_STYLE = wx.NewId()
46 MENU_USE_FANCY_STYLE = wx.NewId()
47 MENU_SELECT_GRADIENT_COLOR_FROM = wx.NewId()
48 MENU_SELECT_GRADIENT_COLOR_TO = wx.NewId()
49 MENU_SELECT_GRADIENT_COLOR_BORDER = wx.NewId()
50 MENU_SET_PAGE_IMAGE_INDEX = wx.NewId()
51 MENU_HIDE_X = wx.NewId()
52 MENU_HIDE_NAV_BUTTONS = wx.NewId()
53 MENU_USE_MOUSE_MIDDLE_BTN = wx.NewId()
54 MENU_DRAW_BORDER = wx.NewId()
55 MENU_USE_BOTTOM_TABS = wx.NewId()
56 MENU_ENABLE_TAB = wx.NewId()
57 MENU_DISABLE_TAB = wx.NewId()
58 MENU_ENABLE_DRAG_N_DROP = wx.NewId()
59 MENU_DCLICK_CLOSES_TAB = wx.NewId()
60 MENU_USE_VC8_STYLE = wx.NewId()
61 MENU_HIDE_ON_SINGLE_TAB = wx.NewId()
62
63 MENU_SET_ACTIVE_TEXT_COLOR = wx.NewId()
64 MENU_DRAW_TAB_X = wx.NewId()
65 MENU_SET_ACTIVE_TAB_COLOR = wx.NewId()
66 MENU_SET_TAB_AREA_COLOR = wx.NewId()
67 MENU_SELECT_NONACTIVE_TEXT_COLOR = wx.NewId()
68 MENU_GRADIENT_BACKGROUND = wx.NewId()
69 MENU_COLORFUL_TABS = wx.NewId()
70 MENU_SMART_TABS = wx.NewId()
71 MENU_USE_DROP_ARROW_BUTTON = wx.NewId()
72 MENU_ALLOW_FOREIGN_DND = wx.NewId()
73
74
75 class FlatNotebookDemo(wx.Frame):
76
77 def __init__(self, parent, log):
78
79 wx.Frame.__init__(self, parent, title="FlatNotebook Demo", size=(800,600))
80 self.log = log
81
82 self._bShowImages = False
83 self._bVCStyle = False
84 self._newPageCounter = 0
85
86 self._ImageList = wx.ImageList(16, 16)
87 self._ImageList.Add(images.get_book_redBitmap())
88 self._ImageList.Add(images.get_book_greenBitmap())
89 self._ImageList.Add(images.get_book_blueBitmap())
90
91 self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
92 self.statusbar.SetStatusWidths([-2, -1])
93 # statusbar fields
94 statusbar_fields = [("FlatNotebook wxPython Demo, Andrea Gavana @ 02 Oct 2006"),
95 ("Welcome To wxPython!")]
96
97 for i in range(len(statusbar_fields)):
98 self.statusbar.SetStatusText(statusbar_fields[i], i)
99
100 self.SetIcon(GetMondrianIcon())
101 self.CreateMenuBar()
102 self.CreateRightClickMenu()
103 self.LayoutItems()
104
105 self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGING, self.OnPageChanging)
106 self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
107 self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSING, self.OnPageClosing)
108
109 self.Bind(wx.EVT_UPDATE_UI, self.OnDropDownArrowUI, id=MENU_USE_DROP_ARROW_BUTTON)
110 self.Bind(wx.EVT_UPDATE_UI, self.OnHideNavigationButtonsUI, id=MENU_HIDE_NAV_BUTTONS)
111 self.Bind(wx.EVT_UPDATE_UI, self.OnAllowForeignDndUI, id=MENU_ALLOW_FOREIGN_DND)
112
113
114 def CreateMenuBar(self):
115
116 self._menuBar = wx.MenuBar(wx.MB_DOCKABLE)
117 self._fileMenu = wx.Menu()
118 self._editMenu = wx.Menu()
119 self._visualMenu = wx.Menu()
120
121 item = wx.MenuItem(self._fileMenu, wx.ID_ANY, "&Close\tCtrl-Q", "Close demo window")
122 self.Bind(wx.EVT_MENU, self.OnQuit, item)
123 self._fileMenu.AppendItem(item)
124
125 item = wx.MenuItem(self._editMenu, MENU_EDIT_ADD_PAGE, "New Page\tCtrl+N", "Add New Page")
126 self.Bind(wx.EVT_MENU, self.OnAddPage, item)
127 self._editMenu.AppendItem(item)
128
129 item = wx.MenuItem(self._editMenu, MENU_EDIT_DELETE_PAGE, "Delete Page\tCtrl+F4", "Delete Page")
130 self.Bind(wx.EVT_MENU, self.OnDeletePage, item)
131 self._editMenu.AppendItem(item)
132
133 item = wx.MenuItem(self._editMenu, MENU_EDIT_DELETE_ALL, "Delete All Pages", "Delete All Pages")
134 self.Bind(wx.EVT_MENU, self.OnDeleteAll, item)
135 self._editMenu.AppendItem(item)
136
137 item = wx.MenuItem(self._editMenu, MENU_EDIT_SET_SELECTION, "Set Selection", "Set Selection")
138 self.Bind(wx.EVT_MENU, self.OnSetSelection, item)
139 self._editMenu.AppendItem(item)
140
141 item = wx.MenuItem(self._editMenu, MENU_EDIT_ADVANCE_SELECTION_FWD, "Advance Selection Forward",
142 "Advance Selection Forward")
143 self.Bind(wx.EVT_MENU, self.OnAdvanceSelectionFwd, item)
144 self._editMenu.AppendItem(item)
145
146 item = wx.MenuItem(self._editMenu, MENU_EDIT_ADVANCE_SELECTION_BACK, "Advance Selection Backward",
147 "Advance Selection Backward")
148 self.Bind(wx.EVT_MENU, self.OnAdvanceSelectionBack, item)
149 self._editMenu.AppendItem(item)
150
151 item = wx.MenuItem(self._editMenu, MENU_SET_ALL_TABS_SHAPE_ANGLE, "Set an inclination of tab header borders",
152 "Set the shape of tab header")
153 self.Bind(wx.EVT_MENU, self.OnSetAllPagesShapeAngle, item)
154 self._visualMenu.AppendItem(item)
155
156 item = wx.MenuItem(self._editMenu, MENU_SET_PAGE_IMAGE_INDEX, "Set image index of selected page",
157 "Set image index")
158 self.Bind(wx.EVT_MENU, self.OnSetPageImage, item)
159 self._editMenu.AppendItem(item)
160
161 item = wx.MenuItem(self._editMenu, MENU_SHOW_IMAGES, "Show Images", "Show Images", wx.ITEM_CHECK)
162 self.Bind(wx.EVT_MENU, self.OnShowImages, item)
163 self._editMenu.AppendItem(item)
164
165 styleMenu = wx.Menu()
166 item = wx.MenuItem(styleMenu, MENU_USE_DEFAULT_STYLE, "Use Default Style", "Use VC71 Style", wx.ITEM_RADIO)
167 self.Bind(wx.EVT_MENU, self.OnDefaultStyle, item)
168 styleMenu.AppendItem(item)
169
170 item = wx.MenuItem(styleMenu, MENU_USE_VC71_STYLE, "Use VC71 Style", "Use VC71 Style", wx.ITEM_RADIO)
171 self.Bind(wx.EVT_MENU, self.OnVC71Style, item)
172 styleMenu.AppendItem(item)
173
174 item = wx.MenuItem(styleMenu, MENU_USE_VC8_STYLE, "Use VC8 Style", "Use VC8 Style", wx.ITEM_RADIO)
175 self.Bind(wx.EVT_MENU, self.OnVC8Style, item)
176 styleMenu.AppendItem(item)
177
178 item = wx.MenuItem(styleMenu, MENU_USE_FANCY_STYLE, "Use Fancy Style", "Use Fancy Style", wx.ITEM_RADIO)
179 self.Bind(wx.EVT_MENU, self.OnFancyStyle, item)
180 styleMenu.AppendItem(item)
181
182 self._visualMenu.AppendMenu(wx.ID_ANY, "Tabs Style", styleMenu)
183
184 item = wx.MenuItem(self._visualMenu, MENU_SELECT_GRADIENT_COLOR_FROM, "Select fancy tab style 'from' color",
185 "Select fancy tab style 'from' color")
186 self._visualMenu.AppendItem(item)
187
188 item = wx.MenuItem(self._visualMenu, MENU_SELECT_GRADIENT_COLOR_TO, "Select fancy tab style 'to' color",
189 "Select fancy tab style 'to' color")
190 self._visualMenu.AppendItem(item)
191
192 item = wx.MenuItem(self._visualMenu, MENU_SELECT_GRADIENT_COLOR_BORDER, "Select fancy tab style 'border' color",
193 "Select fancy tab style 'border' color")
194 self._visualMenu.AppendItem(item)
195
196 self._editMenu.AppendSeparator()
197
198 self.Bind(wx.EVT_MENU_RANGE, self.OnSelectColor, id=MENU_SELECT_GRADIENT_COLOR_FROM,
199 id2=MENU_SELECT_GRADIENT_COLOR_BORDER)
200
201 item = wx.MenuItem(self._editMenu, MENU_HIDE_ON_SINGLE_TAB, "Hide Page Container when only one Tab",
202 "Hide Page Container when only one Tab", wx.ITEM_CHECK)
203 self.Bind(wx.EVT_MENU, self.OnStyle, item)
204 self._editMenu.AppendItem(item)
205
206 item = wx.MenuItem(self._editMenu, MENU_HIDE_NAV_BUTTONS, "Hide Navigation Buttons",
207 "Hide Navigation Buttons", wx.ITEM_CHECK)
208 self._editMenu.AppendItem(item)
209
210 item = wx.MenuItem(self._editMenu, MENU_HIDE_X, "Hide X Button", "Hide X Button", wx.ITEM_CHECK)
211 self._editMenu.AppendItem(item)
212
213 item = wx.MenuItem(self._editMenu, MENU_SMART_TABS, "Smart tabbing", "Smart tabbing", wx.ITEM_CHECK)
214 self._editMenu.AppendItem(item)
215 self.Bind(wx.EVT_MENU, self.OnSmartTabs, item)
216 item.Check(False)
217
218 item = wx.MenuItem(self._editMenu, MENU_USE_DROP_ARROW_BUTTON, "Use drop down button for tab navigation",
219 "Use drop down arrow for quick tab navigation", wx.ITEM_CHECK)
220 self._editMenu.AppendItem(item)
221 self.Bind(wx.EVT_MENU, self.OnDropDownArrow, item)
222 item.Check(False);
223 self._editMenu.AppendSeparator()
224
225 item = wx.MenuItem(self._editMenu, MENU_USE_MOUSE_MIDDLE_BTN, "Use Mouse Middle Button as 'X' button",
226 "Use Mouse Middle Button as 'X' button", wx.ITEM_CHECK)
227 self._editMenu.AppendItem(item)
228
229 item = wx.MenuItem(self._editMenu, MENU_DCLICK_CLOSES_TAB, "Mouse double click closes tab",
230 "Mouse double click closes tab", wx.ITEM_CHECK)
231 self.Bind(wx.EVT_MENU, self.OnDClickCloseTab, item)
232 self._editMenu.AppendItem(item)
233 item.Check(False)
234
235 self._editMenu.AppendSeparator()
236
237 item = wx.MenuItem(self._editMenu, MENU_USE_BOTTOM_TABS, "Use Bottoms Tabs", "Use Bottoms Tabs",
238 wx.ITEM_CHECK)
239 self._editMenu.AppendItem(item)
240
241 self.Bind(wx.EVT_MENU_RANGE, self.OnStyle, id=MENU_HIDE_X, id2=MENU_USE_BOTTOM_TABS)
242
243 item = wx.MenuItem(self._editMenu, MENU_ENABLE_TAB, "Enable Tab", "Enable Tab")
244 self.Bind(wx.EVT_MENU, self.OnEnableTab, item)
245 self._editMenu.AppendItem(item)
246
247 item = wx.MenuItem(self._editMenu, MENU_DISABLE_TAB, "Disable Tab", "Disable Tab")
248 self.Bind(wx.EVT_MENU, self.OnDisableTab, item)
249 self._editMenu.AppendItem(item)
250
251 item = wx.MenuItem(self._editMenu, MENU_ENABLE_DRAG_N_DROP, "Enable Drag And Drop of Tabs",
252 "Enable Drag And Drop of Tabs", wx.ITEM_CHECK)
253 self.Bind(wx.EVT_MENU, self.OnEnableDrag, item)
254 self._editMenu.AppendItem(item)
255 item.Check(False)
256
257 item = wx.MenuItem(self._editMenu, MENU_ALLOW_FOREIGN_DND, "Enable Drag And Drop of Tabs from foreign notebooks",
258 "Enable Drag And Drop of Tabs from foreign notebooks", wx.ITEM_CHECK)
259 self.Bind(wx.EVT_MENU, self.OnAllowForeignDnd, item)
260 self._editMenu.AppendItem(item)
261 item.Check(False);
262
263 item = wx.MenuItem(self._visualMenu, MENU_DRAW_BORDER, "Draw Border around tab area",
264 "Draw Border around tab area", wx.ITEM_CHECK)
265 self.Bind(wx.EVT_MENU, self.OnStyle, item)
266 self._visualMenu.AppendItem(item)
267 item.Check(True)
268
269 item = wx.MenuItem(self._visualMenu, MENU_DRAW_TAB_X, "Draw X button On Active Tab",
270 "Draw X button On Active Tab", wx.ITEM_CHECK)
271 self.Bind(wx.EVT_MENU, self.OnDrawTabX, item)
272 self._visualMenu.AppendItem(item)
273
274 item = wx.MenuItem(self._visualMenu, MENU_SET_ACTIVE_TAB_COLOR, "Select Active Tab Color",
275 "Select Active Tab Color")
276 self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
277 self._visualMenu.AppendItem(item)
278
279 item = wx.MenuItem(self._visualMenu, MENU_SET_TAB_AREA_COLOR, "Select Tab Area Color",
280 "Select Tab Area Color")
281 self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
282 self._visualMenu.AppendItem(item)
283
284 item = wx.MenuItem(self._visualMenu, MENU_SET_ACTIVE_TEXT_COLOR, "Select active tab text color",
285 "Select active tab text color")
286 self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
287 self._visualMenu.AppendItem(item)
288
289 item = wx.MenuItem(self._visualMenu, MENU_SELECT_NONACTIVE_TEXT_COLOR,
290 "Select NON-active tab text color", "Select NON-active tab text color")
291 self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
292 self._visualMenu.AppendItem(item)
293
294 item = wx.MenuItem(self._visualMenu, MENU_GRADIENT_BACKGROUND, "Use Gradient Coloring for tab area",
295 "Use Gradient Coloring for tab area", wx.ITEM_CHECK)
296 self.Bind(wx.EVT_MENU, self.OnGradientBack, item)
297 self._visualMenu.AppendItem(item)
298 item.Check(False)
299
300 item = wx.MenuItem(self._visualMenu, MENU_COLORFUL_TABS, "Colorful tabs", "Colorful tabs", wx.ITEM_CHECK)
301 self.Bind(wx.EVT_MENU, self.OnColorfulTabs, item)
302 self._visualMenu.AppendItem(item)
303 item.Check(False)
304
305 help_menu = wx.Menu()
306 item = wx.MenuItem(help_menu, wx.ID_ANY, "About...", "Shows The About Dialog")
307 self.Bind(wx.EVT_MENU, self.OnAbout, item)
308 help_menu.AppendItem(item)
309
310 self._menuBar.Append(self._fileMenu, "&File")
311 self._menuBar.Append(self._editMenu, "&Edit")
312 self._menuBar.Append(self._visualMenu, "&Tab Appearance")
313
314 self._menuBar.Append(help_menu, "&Help")
315
316 self.SetMenuBar(self._menuBar)
317
318
319 def CreateRightClickMenu(self):
320
321 self._rmenu = wx.Menu()
322 item = wx.MenuItem(self._rmenu, MENU_EDIT_DELETE_PAGE, "Close Tab\tCtrl+F4", "Close Tab")
323 self._rmenu.AppendItem(item)
324
325
326 def LayoutItems(self):
327
328 mainSizer = wx.BoxSizer(wx.VERTICAL)
329 self.SetSizer(mainSizer)
330
331 bookStyle = fnb.FNB_NODRAG
332
333 self.book = fnb.FlatNotebook(self, wx.ID_ANY, style=bookStyle)
334
335 bookStyle &= ~(fnb.FNB_NODRAG)
336 bookStyle |= fnb.FNB_ALLOW_FOREIGN_DND
337 self.secondBook = fnb.FlatNotebook(self, wx.ID_ANY, style=bookStyle)
338
339 # Set right click menu to the notebook
340 self.book.SetRightClickMenu(self._rmenu)
341
342 # Set the image list
343 self.book.SetImageList(self._ImageList)
344 mainSizer.Add(self.book, 6, wx.EXPAND)
345
346 # Add spacer between the books
347 spacer = wx.Panel(self, -1)
348 spacer.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))
349 mainSizer.Add(spacer, 0, wx.ALL | wx.EXPAND)
350
351 mainSizer.Add(self.secondBook, 2, wx.EXPAND)
352
353 # Add some pages to the second notebook
354 self.Freeze()
355
356 text = wx.TextCtrl(self.secondBook, -1, "Second Book Page 1\n", style=wx.TE_MULTILINE|wx.TE_READONLY)
357 self.secondBook.AddPage(text, "Second Book Page 1")
358
359 text = wx.TextCtrl(self.secondBook, -1, "Second Book Page 2\n", style=wx.TE_MULTILINE|wx.TE_READONLY)
360 self.secondBook.AddPage(text, "Second Book Page 2")
361
362 self.Thaw()
363
364 mainSizer.Layout()
365 self.SendSizeEvent()
366
367
368 def OnStyle(self, event):
369
370 style = self.book.GetWindowStyleFlag()
371 eventid = event.GetId()
372
373 if eventid == MENU_HIDE_NAV_BUTTONS:
374 if event.IsChecked():
375 # Hide the navigation buttons
376 style |= fnb.FNB_NO_NAV_BUTTONS
377 else:
378 style &= ~fnb.FNB_NO_NAV_BUTTONS
379 style &= ~fnb.FNB_DROPDOWN_TABS_LIST
380
381 self.book.SetWindowStyleFlag(style)
382
383 elif eventid == MENU_HIDE_ON_SINGLE_TAB:
384 if event.IsChecked():
385 # Hide the navigation buttons
386 style |= fnb.FNB_HIDE_ON_SINGLE_TAB
387 else:
388 style &= ~(fnb.FNB_HIDE_ON_SINGLE_TAB)
389
390 self.book.SetWindowStyleFlag(style)
391
392 elif eventid == MENU_HIDE_X:
393 if event.IsChecked():
394 # Hide the X button
395 style |= fnb.FNB_NO_X_BUTTON
396 else:
397 if style & fnb.FNB_NO_X_BUTTON:
398 style ^= fnb.FNB_NO_X_BUTTON
399
400 self.book.SetWindowStyleFlag(style)
401
402 elif eventid == MENU_DRAW_BORDER:
403 if event.IsChecked():
404 style |= fnb.FNB_TABS_BORDER_SIMPLE
405 else:
406 if style & fnb.FNB_TABS_BORDER_SIMPLE:
407 style ^= fnb.FNB_TABS_BORDER_SIMPLE
408
409 self.book.SetWindowStyleFlag(style)
410
411 elif eventid == MENU_USE_MOUSE_MIDDLE_BTN:
412 if event.IsChecked():
413 style |= fnb.FNB_MOUSE_MIDDLE_CLOSES_TABS
414 else:
415 if style & fnb.FNB_MOUSE_MIDDLE_CLOSES_TABS:
416 style ^= fnb.FNB_MOUSE_MIDDLE_CLOSES_TABS
417
418 self.book.SetWindowStyleFlag(style)
419
420 elif eventid == MENU_USE_BOTTOM_TABS:
421 if event.IsChecked():
422 style |= fnb.FNB_BOTTOM
423 else:
424 if style & fnb.FNB_BOTTOM:
425 style ^= fnb.FNB_BOTTOM
426
427 self.book.SetWindowStyleFlag(style)
428 self.book.Refresh()
429
430
431 def OnQuit(self, event):
432
433 self.Destroy()
434
435
436 def OnDeleteAll(self, event):
437
438 self.book.DeleteAllPages()
439
440
441 def OnShowImages(self, event):
442
443 self._bShowImages = event.IsChecked()
444
445
446 def OnVC71Style(self, event):
447
448 style = self.book.GetWindowStyleFlag()
449
450 # remove old tabs style
451 mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
452 style &= mirror
453
454 style |= fnb.FNB_VC71
455
456 self.book.SetWindowStyleFlag(style)
457
458
459 def OnVC8Style(self, event):
460
461 style = self.book.GetWindowStyleFlag()
462
463 # remove old tabs style
464 mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
465 style &= mirror
466
467 # set new style
468 style |= fnb.FNB_VC8
469
470 self.book.SetWindowStyleFlag(style)
471
472
473 def OnDefaultStyle(self, event):
474
475 style = self.book.GetWindowStyleFlag()
476
477 # remove old tabs style
478 mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
479 style &= mirror
480
481 self.book.SetWindowStyleFlag(style)
482
483
484 def OnFancyStyle(self, event):
485
486 style = self.book.GetWindowStyleFlag()
487
488 # remove old tabs style
489 mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
490 style &= mirror
491
492 style |= fnb.FNB_FANCY_TABS
493 self.book.SetWindowStyleFlag(style)
494
495
496 def OnSelectColor(self, event):
497
498 eventid = event.GetId()
499
500 # Open a color dialog
501 data = wx.ColourData()
502
503 dlg = wx.ColourDialog(self, data)
504
505 if dlg.ShowModal() == wx.ID_OK:
506
507 if eventid == MENU_SELECT_GRADIENT_COLOR_BORDER:
508 self.book.SetGradientColourBorder(dlg.GetColourData().GetColour())
509 elif eventid == MENU_SELECT_GRADIENT_COLOR_FROM:
510 self.book.SetGradientColourFrom(dlg.GetColourData().GetColour())
511 elif eventid == MENU_SELECT_GRADIENT_COLOR_TO:
512 self.book.SetGradientColourTo(dlg.GetColourData().GetColour())
513 elif eventid == MENU_SET_ACTIVE_TEXT_COLOR:
514 self.book.SetActiveTabTextColour(dlg.GetColourData().GetColour())
515 elif eventid == MENU_SELECT_NONACTIVE_TEXT_COLOR:
516 self.book.SetNonActiveTabTextColour(dlg.GetColourData().GetColour())
517 elif eventid == MENU_SET_ACTIVE_TAB_COLOR:
518 self.book.SetActiveTabColour(dlg.GetColourData().GetColour())
519 elif eventid == MENU_SET_TAB_AREA_COLOR:
520 self.book.SetTabAreaColour(dlg.GetColourData().GetColour())
521
522 self.book.Refresh()
523
524
525 def OnAddPage(self, event):
526
527 caption = "New Page Added #" + str(self._newPageCounter)
528
529 self.Freeze()
530
531 image = -1
532 if self._bShowImages:
533 image = random.randint(0, self._ImageList.GetImageCount()-1)
534
535 self.book.AddPage(self.CreatePage(caption), caption, True, image)
536 self.Thaw()
537 self._newPageCounter = self._newPageCounter + 1
538
539
540 def CreatePage(self, caption):
541
542 p = wx.Panel(self.book)
543 wx.StaticText(p, -1, caption, (20,20))
544 wx.TextCtrl(p, -1, "", (20,40), (150,-1))
545 return p
546
547
548 def OnDeletePage(self, event):
549
550 self.book.DeletePage(self.book.GetSelection())
551
552
553 def OnSetSelection(self, event):
554
555 dlg = wx.TextEntryDialog(self, "Enter Tab Number to select:", "Set Selection")
556
557 if dlg.ShowModal() == wx.ID_OK:
558
559 val = dlg.GetValue()
560 self.book.SetSelection(int(val))
561
562
563 def OnEnableTab(self, event):
564
565 dlg = wx.TextEntryDialog(self, "Enter Tab Number to enable:", "Enable Tab")
566
567 if dlg.ShowModal() == wx.ID_OK:
568
569 val = dlg.GetValue()
570 self.book.Enable(int(val))
571
572
573 def OnDisableTab(self, event):
574
575 dlg = wx.TextEntryDialog(self, "Enter Tab Number to disable:", "Disable Tab")
576
577 if dlg.ShowModal() == wx.ID_OK:
578
579 val = dlg.GetValue()
580 self.book.Enable(int(val), False)
581
582
583 def OnEnableDrag(self, event):
584
585 style = self.book.GetWindowStyleFlag()
586 style2 = self.secondBook.GetWindowStyleFlag()
587
588 if event.IsChecked():
589 if style & fnb.FNB_NODRAG:
590 style ^= fnb.FNB_NODRAG
591 if style2 & fnb.FNB_NODRAG:
592 style2 ^= fnb.FNB_NODRAG
593 else:
594 style |= fnb.FNB_NODRAG
595 style2 |= fnb.FNB_NODRAG
596
597 self.book.SetWindowStyleFlag(style)
598 self.secondBook.SetWindowStyleFlag(style2)
599
600
601 def OnAllowForeignDnd(self, event):
602
603 style = self.book.GetWindowStyleFlag()
604 if event.IsChecked():
605 style |= fnb.FNB_ALLOW_FOREIGN_DND
606 else:
607 style &= ~(fnb.FNB_ALLOW_FOREIGN_DND)
608
609 self.book.SetWindowStyleFlag(style)
610 self.book.Refresh()
611
612
613 def OnSetAllPagesShapeAngle(self, event):
614
615
616 dlg = wx.TextEntryDialog(self, "Enter an inclination of header borders (0-15):", "Set Angle")
617 if dlg.ShowModal() == wx.ID_OK:
618
619 val = dlg.GetValue()
620 self.book.SetAllPagesShapeAngle(int(val))
621
622
623 def OnSetPageImage(self, event):
624
625 dlg = wx.TextEntryDialog(self, "Enter an image index (0-%i):"%(self.book.GetImageList().GetImageCount()-1), "Set Image Index")
626 if dlg.ShowModal() == wx.ID_OK:
627 val = dlg.GetValue()
628 self.book.SetPageImage(self.book.GetSelection(), int(val))
629
630
631 def OnAdvanceSelectionFwd(self, event):
632
633 self.book.AdvanceSelection(True)
634
635
636 def OnAdvanceSelectionBack(self, event):
637
638 self.book.AdvanceSelection(False)
639
640
641 def OnPageChanging(self, event):
642
643 self.log.write("Page Changing From %d To %d" % (event.GetOldSelection(), event.GetSelection()))
644 event.Skip()
645
646
647 def OnPageChanged(self, event):
648
649 self.log.write("Page Changed To %d" % event.GetSelection())
650 event.Skip()
651
652
653 def OnPageClosing(self, event):
654
655 self.log.write("Page Closing, Selection: %d" % event.GetSelection())
656 event.Skip()
657
658
659 def OnDrawTabX(self, event):
660
661 style = self.book.GetWindowStyleFlag()
662 if event.IsChecked():
663 style |= fnb.FNB_X_ON_TAB
664 else:
665 if style & fnb.FNB_X_ON_TAB:
666 style ^= fnb.FNB_X_ON_TAB
667
668 self.book.SetWindowStyleFlag(style)
669
670
671 def OnDClickCloseTab(self, event):
672
673 style = self.book.GetWindowStyleFlag()
674 if event.IsChecked():
675 style |= fnb.FNB_DCLICK_CLOSES_TABS
676 else:
677 style &= ~(fnb.FNB_DCLICK_CLOSES_TABS)
678
679 self.book.SetWindowStyleFlag(style)
680
681
682 def OnGradientBack(self, event):
683
684 style = self.book.GetWindowStyleFlag()
685 if event.IsChecked():
686 style |= fnb.FNB_BACKGROUND_GRADIENT
687 else:
688 style &= ~(fnb.FNB_BACKGROUND_GRADIENT)
689
690 self.book.SetWindowStyleFlag(style)
691 self.book.Refresh()
692
693
694 def OnColorfulTabs(self, event):
695
696 style = self.book.GetWindowStyleFlag()
697 if event.IsChecked():
698 style |= fnb.FNB_COLORFUL_TABS
699 else:
700 style &= ~(fnb.FNB_COLORFUL_TABS)
701
702 self.book.SetWindowStyleFlag(style)
703 self.book.Refresh()
704
705
706 def OnSmartTabs(self, event):
707
708 style = self.book.GetWindowStyleFlag()
709 if event.IsChecked():
710 style |= fnb.FNB_SMART_TABS
711 else:
712 style &= ~fnb.FNB_SMART_TABS
713
714 self.book.SetWindowStyleFlag(style)
715 self.book.Refresh()
716
717
718 def OnDropDownArrow(self, event):
719
720 style = self.book.GetWindowStyleFlag()
721
722 if event.IsChecked():
723
724 style |= fnb.FNB_DROPDOWN_TABS_LIST
725 style |= fnb.FNB_NO_NAV_BUTTONS
726
727 else:
728
729 style &= ~fnb.FNB_DROPDOWN_TABS_LIST
730 style &= ~fnb.FNB_NO_NAV_BUTTONS
731
732 self.book.SetWindowStyleFlag(style)
733 self.book.Refresh()
734
735
736 def OnHideNavigationButtonsUI(self, event):
737
738 style = self.book.GetWindowStyleFlag()
739 event.Check((style & fnb.FNB_NO_NAV_BUTTONS and [True] or [False])[0])
740
741
742 def OnDropDownArrowUI(self, event):
743
744 style = self.book.GetWindowStyleFlag()
745 event.Check((style & fnb.FNB_DROPDOWN_TABS_LIST and [True] or [False])[0])
746
747
748 def OnAllowForeignDndUI(self, event):
749
750 style = self.book.GetWindowStyleFlag()
751 event.Enable((style & fnb.FNB_NODRAG and [False] or [True])[0])
752
753
754 def OnAbout(self, event):
755
756 msg = "This Is The About Dialog Of The FlatNotebook Demo.\n\n" + \
757 "Author: Andrea Gavana @ 02 Oct 2006\n\n" + \
758 "Please Report Any Bug/Requests Of Improvements\n" + \
759 "To Me At The Following Adresses:\n\n" + \
760 "andrea.gavana@gmail.com\n" + "gavana@kpo.kz\n\n" + \
761 "Based On Eran C++ Implementation (wxWidgets Forum).\n\n" + \
762 "Welcome To wxPython " + wx.VERSION_STRING + "!!"
763
764 dlg = wx.MessageDialog(self, msg, "FlatNotebook wxPython Demo",
765 wx.OK | wx.ICON_INFORMATION)
766 dlg.ShowModal()
767 dlg.Destroy()
768
769
770 #---------------------------------------------------------------------------
771
772
773 class TestPanel(wx.Panel):
774 def __init__(self, parent, log):
775 self.log = log
776 wx.Panel.__init__(self, parent, -1)
777
778 b = wx.Button(self, -1, " Test FlatNotebook ", (50,50))
779 self.Bind(wx.EVT_BUTTON, self.OnButton, b)
780
781
782 def OnButton(self, evt):
783 self.win = FlatNotebookDemo(self, self.log)
784 self.win.Show(True)
785
786 #----------------------------------------------------------------------
787
788 def runTest(frame, nb, log):
789 win = TestPanel(nb, log)
790 return win
791
792 #----------------------------------------------------------------------
793
794
795 overview = fnb.__doc__
796
797
798
799 if __name__ == '__main__':
800 import sys,os
801 import run
802 run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
803