]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/demo/FlatNotebook.py
Add FlatNotebook
[wxWidgets.git] / wxPython / demo / FlatNotebook.py
diff --git a/wxPython/demo/FlatNotebook.py b/wxPython/demo/FlatNotebook.py
new file mode 100644 (file)
index 0000000..d90daf9
--- /dev/null
@@ -0,0 +1,693 @@
+
+import wx
+import wx.lib.flatnotebook as fnb
+import random
+import images
+
+#----------------------------------------------------------------------
+def GetMondrianData():
+    return \
+'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
+\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00qID\
+ATX\x85\xed\xd6;\n\x800\x10E\xd1{\xc5\x8d\xb9r\x97\x16\x0b\xad$\x8a\x82:\x16\
+o\xda\x84pB2\x1f\x81Fa\x8c\x9c\x08\x04Z{\xcf\xa72\xbcv\xfa\xc5\x08 \x80r\x80\
+\xfc\xa2\x0e\x1c\xe4\xba\xfaX\x1d\xd0\xde]S\x07\x02\xd8>\xe1wa-`\x9fQ\xe9\
+\x86\x01\x04\x10\x00\\(Dk\x1b-\x04\xdc\x1d\x07\x14\x98;\x0bS\x7f\x7f\xf9\x13\
+\x04\x10@\xf9X\xbe\x00\xc9 \x14K\xc1<={\x00\x00\x00\x00IEND\xaeB`\x82' 
+
+
+def GetMondrianBitmap():
+    return wx.BitmapFromImage(GetMondrianImage())
+
+
+def GetMondrianImage():
+    import cStringIO
+    stream = cStringIO.StringIO(GetMondrianData())
+    return wx.ImageFromStream(stream)
+
+
+def GetMondrianIcon():
+    icon = wx.EmptyIcon()
+    icon.CopyFromBitmap(GetMondrianBitmap())
+    return icon
+#----------------------------------------------------------------------
+
+
+MENU_EDIT_DELETE_ALL = wx.ID_HIGHEST + 1000
+MENU_EDIT_ADD_PAGE = MENU_EDIT_DELETE_ALL + 1
+MENU_EDIT_DELETE_PAGE = MENU_EDIT_DELETE_ALL + 2
+MENU_EDIT_SET_SELECTION = MENU_EDIT_DELETE_ALL + 3
+MENU_EDIT_ADVANCE_SELECTION_FWD = MENU_EDIT_DELETE_ALL + 4
+MENU_EDIT_ADVANCE_SELECTION_BACK = MENU_EDIT_DELETE_ALL + 5
+MENU_SET_ALL_TABS_SHAPE_ANGLE = MENU_EDIT_DELETE_ALL + 6
+MENU_SHOW_IMAGES = MENU_EDIT_DELETE_ALL + 7
+MENU_USE_VC71_STYLE = MENU_EDIT_DELETE_ALL + 8
+MENU_USE_DEFAULT_STYLE = MENU_EDIT_DELETE_ALL + 9
+MENU_USE_FANCY_STYLE = MENU_EDIT_DELETE_ALL + 10
+MENU_SELECT_GRADIENT_COLOR_FROM = MENU_EDIT_DELETE_ALL + 11
+MENU_SELECT_GRADIENT_COLOR_TO = MENU_EDIT_DELETE_ALL + 12
+MENU_SELECT_GRADIENT_COLOR_BORDER = MENU_EDIT_DELETE_ALL + 13
+MENU_SET_PAGE_IMAGE_INDEX = MENU_EDIT_DELETE_ALL + 14
+MENU_HIDE_X = MENU_EDIT_DELETE_ALL + 15
+MENU_HIDE_NAV_BUTTONS = MENU_EDIT_DELETE_ALL + 16
+MENU_USE_MOUSE_MIDDLE_BTN = MENU_EDIT_DELETE_ALL + 17
+MENU_DRAW_BORDER = MENU_EDIT_DELETE_ALL + 18
+MENU_USE_BOTTOM_TABS = MENU_EDIT_DELETE_ALL + 19
+MENU_ENABLE_TAB = MENU_EDIT_DELETE_ALL + 20
+MENU_DISABLE_TAB = MENU_EDIT_DELETE_ALL + 21
+MENU_ENABLE_DRAG_N_DROP = MENU_EDIT_DELETE_ALL + 22
+MENU_DCLICK_CLOSES_TAB = MENU_EDIT_DELETE_ALL + 23
+MENU_USE_VC8_STYLE = MENU_EDIT_DELETE_ALL + 24
+
+MENU_SET_ACTIVE_TEXT_COLOR = MENU_EDIT_DELETE_ALL + 27
+MENU_DRAW_TAB_X = MENU_EDIT_DELETE_ALL + 28
+MENU_SET_ACTIVE_TAB_COLOR = MENU_EDIT_DELETE_ALL + 29
+MENU_SET_TAB_AREA_COLOR = MENU_EDIT_DELETE_ALL + 30
+MENU_SELECT_NONACTIVE_TEXT_COLOR = MENU_EDIT_DELETE_ALL + 31
+MENU_GRADIENT_BACKGROUND = MENU_EDIT_DELETE_ALL + 32
+MENU_COLORFUL_TABS = MENU_EDIT_DELETE_ALL + 33
+
+
+class FlatNotebookDemo(wx.Frame):
+
+    def __init__(self, parent, id=wx.ID_ANY, title="", pos=wx.DefaultPosition, size=(800, 600),
+                 style=wx.DEFAULT_FRAME_STYLE | wx.MAXIMIZE |wx.NO_FULL_REPAINT_ON_RESIZE):
+
+        wx.Frame.__init__(self, parent, id, title, pos, size, style)
+
+        self._bShowImages = False
+        self._bVCStyle = False
+        self._newPageCounter = 0
+
+        self._ImageList = wx.ImageList(16, 16)
+        self._ImageList.Add(images.get_book_redBitmap())
+        self._ImageList.Add(images.get_book_greenBitmap())
+        self._ImageList.Add(images.get_book_blueBitmap())
+
+        self.statusbar = self.CreateStatusBar(2, wx.ST_SIZEGRIP)
+        self.statusbar.SetStatusWidths([-2, -1])
+        # statusbar fields
+        statusbar_fields = [("FlatNotebook wxPython Demo, Andrea Gavana @ 02 Oct 2006"),
+                            ("Welcome To wxPython!")]
+
+        for i in range(len(statusbar_fields)):
+            self.statusbar.SetStatusText(statusbar_fields[i], i)
+
+        self.SetIcon(GetMondrianIcon())
+        self.CreateMenuBar()
+        self.CreateRightClickMenu()
+        self.LayoutItems()
+
+        self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGING, self.OnPageChanging)
+        self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
+        self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CLOSING, self.OnPageClosing)
+
+
+
+    def CreateMenuBar(self):
+
+        self._menuBar = wx.MenuBar(wx.MB_DOCKABLE)
+        self._fileMenu = wx.Menu()
+        item = wx.MenuItem(self._fileMenu, wx.ID_ANY, "&Close\tCtrl-Q", "Close demo window")
+        self.Bind(wx.EVT_MENU, self.OnQuit, item)
+        self._fileMenu.AppendItem(item)
+        
+        self._editMenu = wx.Menu()
+        item = wx.MenuItem(self._editMenu, MENU_EDIT_ADD_PAGE, "New Page\tCtrl+N", "Add New Page")
+        self.Bind(wx.EVT_MENU, self.OnAddPage, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_EDIT_DELETE_PAGE, "Delete Page\tCtrl+F4", "Delete Page")
+        self.Bind(wx.EVT_MENU, self.OnDeletePage, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_EDIT_DELETE_ALL, "Delete All Pages", "Delete All Pages")
+        self.Bind(wx.EVT_MENU, self.OnDeleteAll, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_EDIT_SET_SELECTION, "Set Selection", "Set Selection")
+        self.Bind(wx.EVT_MENU, self.OnSetSelection, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_EDIT_ADVANCE_SELECTION_FWD, "Advance Selection Forward",
+                           "Advance Selection Forward")
+        self.Bind(wx.EVT_MENU, self.OnAdvanceSelectionFwd, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_EDIT_ADVANCE_SELECTION_BACK, "Advance Selection Backward",
+                           "Advance Selection Backward")
+        self.Bind(wx.EVT_MENU, self.OnAdvanceSelectionBack, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_SET_ALL_TABS_SHAPE_ANGLE, "Set an inclination of tab header borders",
+                           "Set the shape of tab header")
+        self.Bind(wx.EVT_MENU, self.OnSetAllPagesShapeAngle, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_SET_PAGE_IMAGE_INDEX, "Set image index of selected page",
+                           "Set image index")
+        self.Bind(wx.EVT_MENU, self.OnSetPageImageIndex, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_SHOW_IMAGES, "Show Images", "Show Images", wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.OnShowImages, item)
+        self._editMenu.AppendItem(item)
+
+        styleMenu = wx.Menu()
+        item = wx.MenuItem(styleMenu, MENU_USE_DEFAULT_STYLE, "Use Default Style", "Use VC71 Style", wx.ITEM_RADIO)
+        self.Bind(wx.EVT_MENU, self.OnDefaultStyle, item)
+        styleMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_USE_VC71_STYLE, "Use VC71 Style", "Use VC71 Style", wx.ITEM_RADIO)
+        self.Bind(wx.EVT_MENU, self.OnVC71Style, item)
+        styleMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_USE_VC8_STYLE, "Use VC8 Style", "Use VC8 Style", wx.ITEM_RADIO)
+        self.Bind(wx.EVT_MENU, self.OnVC8Style, item)
+        styleMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_USE_FANCY_STYLE, "Use Fancy Style", "Use Fancy Style", wx.ITEM_RADIO)
+        self.Bind(wx.EVT_MENU, self.OnFancyStyle, item)
+        styleMenu.AppendItem(item)
+
+        self._editMenu.AppendMenu(wx.ID_ANY, "Tabs Style", styleMenu)
+
+        item = wx.MenuItem(styleMenu, MENU_SELECT_GRADIENT_COLOR_FROM, "Select fancy tab style 'from' color",
+                           "Select fancy tab style 'from' color")
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_SELECT_GRADIENT_COLOR_TO, "Select fancy tab style 'to' color",
+                           "Select fancy tab style 'to' color")
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_SELECT_GRADIENT_COLOR_BORDER, "Select fancy tab style 'border' color",
+                           "Select fancy tab style 'border' color")
+        self._editMenu.AppendItem(item)
+
+        self.Bind(wx.EVT_MENU_RANGE, self.OnSelectColor, id=MENU_SELECT_GRADIENT_COLOR_FROM,
+                  id2=MENU_SELECT_GRADIENT_COLOR_BORDER)        
+
+        item = wx.MenuItem(self._editMenu, MENU_HIDE_NAV_BUTTONS, "Hide Navigation Buttons",
+                           "Hide Navigation Buttons", wx.ITEM_CHECK)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_HIDE_X, "Hide X Button", "Hide X Button", wx.ITEM_CHECK)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_USE_MOUSE_MIDDLE_BTN, "Use Mouse Middle Button as 'X' button",
+                           "Use Mouse Middle Button as 'X' button", wx.ITEM_CHECK)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_USE_BOTTOM_TABS, "Use Bottoms Tabs", "Use Bottoms Tabs",
+                           wx.ITEM_CHECK)
+        self._editMenu.AppendItem(item)
+
+        self.Bind(wx.EVT_MENU_RANGE, self.OnStyle, id=MENU_HIDE_X, id2=MENU_USE_BOTTOM_TABS)
+
+        item = wx.MenuItem(self._editMenu, MENU_ENABLE_TAB, "Enable Tab", "Enable Tab")
+        self.Bind(wx.EVT_MENU, self.OnEnableTab, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_DISABLE_TAB, "Disable Tab", "Disable Tab")
+        self.Bind(wx.EVT_MENU, self.OnDisableTab, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_ENABLE_DRAG_N_DROP, "Enable Drag And Drop of Tabs",
+                           "Enable Drag And Drop of Tabs", wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.OnEnableDrag, item)        
+        self._editMenu.AppendItem(item)
+        item.Check(True)
+
+        item = wx.MenuItem(self._editMenu, MENU_DRAW_BORDER, "Draw Border around tab area",
+                           "Draw Border around tab area", wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.OnStyle, item)
+        self._editMenu.AppendItem(item)
+        item.Check(True)
+
+        item = wx.MenuItem(self._editMenu, MENU_DRAW_TAB_X, "Draw X button On Active Tab",
+                           "Draw X button On Active Tab", wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.OnDrawTabX, item)
+        self._editMenu.AppendItem(item)
+        
+        item = wx.MenuItem(styleMenu, MENU_SET_ACTIVE_TAB_COLOR, "Select Active Tab Color",
+                           "Select Active Tab Color")
+        self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_SET_TAB_AREA_COLOR, "Select Tab Area Color",
+                           "Select Tab Area Color")
+        self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_SET_ACTIVE_TEXT_COLOR, "Select active tab text color",
+                           "Select active tab text color")
+        self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(styleMenu, MENU_SELECT_NONACTIVE_TEXT_COLOR,
+                           "Select NON-active tab text color", "Select NON-active tab text color")
+        self.Bind(wx.EVT_MENU, self.OnSelectColor, item)
+        self._editMenu.AppendItem(item)
+
+        item = wx.MenuItem(self._editMenu, MENU_DCLICK_CLOSES_TAB, "Mouse double click closes tab",
+                           "Mouse double click closes tab", wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.OnDClickCloseTab, item)
+        self._editMenu.AppendItem(item)
+        item.Check(False)
+        
+        item = wx.MenuItem(self._editMenu, MENU_GRADIENT_BACKGROUND, "Use Gradient Coloring for tab area",
+                           "Use Gradient Coloring for tab area", wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.OnGradientBack, item)
+        self._editMenu.AppendItem(item)
+        item.Check(False)
+
+        item = wx.MenuItem(self._editMenu, MENU_COLORFUL_TABS, "Colorful tabs", "Colorful tabs", wx.ITEM_CHECK)
+        self.Bind(wx.EVT_MENU, self.OnColorfulTabs, item)
+        self._editMenu.AppendItem(item)
+        item.Check(False)
+
+        help_menu = wx.Menu()
+        item = wx.MenuItem(help_menu, wx.ID_ANY, "About...", "Shows The About Dialog")
+        self.Bind(wx.EVT_MENU, self.OnAbout, item)
+        help_menu.AppendItem(item)
+
+        self._menuBar.Append(self._fileMenu, "&File")
+        self._menuBar.Append(self._editMenu, "&Edit")
+        self._menuBar.Append(help_menu, "&Help")
+
+        self.SetMenuBar(self._menuBar)
+
+
+    def CreateRightClickMenu(self):
+
+        self._rmenu = wx.Menu()
+        item = wx.MenuItem(self._rmenu, MENU_EDIT_DELETE_PAGE, "Close Tab\tCtrl+F4", "Close Tab")
+        self._rmenu.AppendItem(item)
+        
+
+    def LayoutItems(self):
+        
+        mainSizer = wx.BoxSizer(wx.VERTICAL)
+        self.SetSizer(mainSizer)
+
+        bookStyle = fnb.FNB_TABS_BORDER_SIMPLE
+
+        self.book = fnb.StyledNotebook(self, wx.ID_ANY, style=bookStyle)
+        self.secondBook = fnb.StyledNotebook(self, wx.ID_ANY, style=bookStyle)
+
+        # Set right click menu to the notebook
+        self.book.SetRightClickMenu(self._rmenu)
+
+        # Set the image list 
+        self.book.SetImageList(self._ImageList)
+        mainSizer.Add(self.book, 6, wx.EXPAND)
+
+        # Add spacer between the books
+        spacer = wx.Panel(self, -1)
+        spacer.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))
+        mainSizer.Add(spacer, 0, wx.ALL | wx.EXPAND)
+
+        mainSizer.Add(self.secondBook, 2, wx.EXPAND)
+
+        # Add some pages to the second notebook
+        self.Freeze()
+
+        text = wx.TextCtrl(self.secondBook, -1, "Second Book Page 1", style=wx.TE_MULTILINE)  
+        self.secondBook.AddPage(text, "Second Book Page 1")
+
+        text = wx.TextCtrl(self.secondBook, -1, "Second Book Page 2", style=wx.TE_MULTILINE)
+        self.secondBook.AddPage(text,  "Second Book Page 2")
+
+        self.Thaw()    
+
+        self.Centre() 
+        mainSizer.Layout()
+        self.SendSizeEvent()
+
+
+    def OnStyle(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+        eventid = event.GetId()
+        
+        if eventid == MENU_HIDE_NAV_BUTTONS:
+            if event.IsChecked():            
+                # Hide the navigation buttons
+                style |= fnb.FNB_NO_NAV_BUTTONS
+            else:
+                if style & fnb.FNB_NO_NAV_BUTTONS:
+                    style ^= fnb.FNB_NO_NAV_BUTTONS
+            
+            self.book.SetWindowStyleFlag(style)
+
+        elif eventid == MENU_HIDE_X:
+            if event.IsChecked():
+                # Hide the X button
+                style |= fnb.FNB_NO_X_BUTTON
+            else:
+                if style & fnb.FNB_NO_X_BUTTON:
+                    style ^= fnb.FNB_NO_X_BUTTON
+            
+            self.book.SetWindowStyleFlag(style)
+            
+        elif eventid == MENU_DRAW_BORDER:
+            if event.IsChecked():
+                style |= fnb.FNB_TABS_BORDER_SIMPLE
+            else:
+                if style & fnb.FNB_TABS_BORDER_SIMPLE:
+                    style ^= fnb.FNB_TABS_BORDER_SIMPLE
+            
+            self.book.SetWindowStyleFlag(style)
+
+        elif eventid == MENU_USE_MOUSE_MIDDLE_BTN:
+            if event.IsChecked():
+                style |= fnb.FNB_MOUSE_MIDDLE_CLOSES_TABS            
+            else:
+                if style & fnb.FNB_MOUSE_MIDDLE_CLOSES_TABS:
+                    style ^= fnb.FNB_MOUSE_MIDDLE_CLOSES_TABS
+            
+            self.book.SetWindowStyleFlag(style)
+
+        elif eventid == MENU_USE_BOTTOM_TABS:
+            if event.IsChecked():
+                style |= fnb.FNB_BOTTOM
+            else:
+                if style & fnb.FNB_BOTTOM:
+                    style ^= fnb.FNB_BOTTOM
+            
+            self.book.SetWindowStyleFlag(style)
+            self.book.Refresh()
+
+
+    def OnQuit(self, event):
+
+       self.Destroy()
+
+
+    def OnDeleteAll(self, event):
+
+       self.book.DeleteAllPages()
+
+
+    def OnShowImages(self, event):
+
+        self._bShowImages = event.IsChecked()
+
+
+    def OnVC71Style(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+
+        # remove old tabs style
+        mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
+        style &= mirror
+
+        style |= fnb.FNB_VC71
+
+        self.book.SetWindowStyleFlag(style)
+
+
+    def OnVC8Style(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+
+        # remove old tabs style
+        mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
+        style &= mirror
+
+        # set new style
+        style |= fnb.FNB_VC8
+
+        self.book.SetWindowStyleFlag(style)
+
+
+    def OnDefaultStyle(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+
+        # remove old tabs style
+        mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
+        style &= mirror
+
+        self.book.SetWindowStyleFlag(style)
+
+
+    def OnFancyStyle(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+
+        # remove old tabs style
+        mirror = ~(fnb.FNB_VC71 | fnb.FNB_VC8 | fnb.FNB_FANCY_TABS)
+        style &= mirror
+
+        style |= fnb.FNB_FANCY_TABS
+        self.book.SetWindowStyleFlag(style)
+
+
+    def OnSelectColor(self, event):
+
+        eventid = event.GetId()
+        
+        # Open a color dialog
+        data = wx.ColourData()
+        
+        dlg = wx.ColourDialog(self, data)
+        
+        if dlg.ShowModal() == wx.ID_OK:
+        
+            if eventid == MENU_SELECT_GRADIENT_COLOR_BORDER:
+                self.book.SetGradientColorBorder(dlg.GetColourData().GetColour())
+            elif eventid == MENU_SELECT_GRADIENT_COLOR_FROM:
+                self.book.SetGradientColorFrom(dlg.GetColourData().GetColour())
+            elif eventid == MENU_SELECT_GRADIENT_COLOR_TO:
+                self.book.SetGradientColorTo(dlg.GetColourData().GetColour())
+            elif eventid == MENU_SET_ACTIVE_TEXT_COLOR:
+                self.book.SetActiveTabTextColour(dlg.GetColourData().GetColour())
+            elif eventid == MENU_SELECT_NONACTIVE_TEXT_COLOR:
+                self.book.SetNonActiveTabTextColour(dlg.GetColourData().GetColour())
+            elif eventid == MENU_SET_ACTIVE_TAB_COLOR:
+                self.book.SetActiveTabColour(dlg.GetColourData().GetColour())
+            elif eventid == MENU_SET_TAB_AREA_COLOR:
+                self.book.SetTabAreaColour(dlg.GetColourData().GetColour())
+            
+            self.book.Refresh()
+        
+
+    def OnAddPage(self, event):
+
+        caption = "New Page Added #" + str(self._newPageCounter)
+        
+        self.Freeze()
+
+        image = -1
+        if self._bShowImages:
+            image = random.randint(0, self._ImageList.GetImageCount()-1)
+        
+        self.book.AddPage(self.CreatePage(caption), caption, True, image)
+        self.book.SetSelection(self.book.GetPageCount()-1)
+        self.Thaw()
+        self._newPageCounter = self._newPageCounter + 1
+
+
+    def CreatePage(self, caption):
+
+        return wx.TextCtrl(self.book, -1, caption, wx.DefaultPosition, self.book.GetPageBestSize(),
+                           wx.TE_MULTILINE)
+
+
+    def OnDeletePage(self, event):
+
+       self.book.DeletePage(self.book.GetSelection())
+
+
+    def OnSetSelection(self, event):
+
+        dlg = wx.TextEntryDialog(self, "Enter Tab Number to select:", "Set Selection")
+        
+        if dlg.ShowModal() == wx.ID_OK:
+        
+            val = dlg.GetValue()
+            self.book.SetSelection(int(val))
+
+
+    def OnEnableTab(self, event):
+
+        dlg = wx.TextEntryDialog(self, "Enter Tab Number to enable:", "Enable Tab")
+        
+        if dlg.ShowModal() == wx.ID_OK:
+        
+            val = dlg.GetValue()
+            self.book.Enable(int(val)) 
+
+
+    def OnDisableTab(self, event):
+
+        dlg = wx.TextEntryDialog(self, "Enter Tab Number to disable:", "Disable Tab")
+        
+        if dlg.ShowModal() == wx.ID_OK:
+        
+            val = dlg.GetValue()
+            self.book.Enable(int(val), False)  
+
+
+    def OnEnableDrag(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+        
+        if event.IsChecked():        
+            if style & fnb.FNB_NODRAG:
+                style ^= fnb.FNB_NODRAG
+        else:
+            style |= fnb.FNB_NODRAG
+        
+        self.book.SetWindowStyleFlag(style)
+
+
+    def OnSetAllPagesShapeAngle(self, event):
+
+        
+        dlg = wx.TextEntryDialog(self, "Enter an inclination of header borders (0-45):", "Set Angle")
+        if dlg.ShowModal() == wx.ID_OK:
+        
+            val = dlg.GetValue()
+            self.book.SetAllPagesShapeAngle(int(val))
+
+
+    def OnSetPageImageIndex(self, event):
+
+        dlg = wx.TextEntryDialog(self, "Enter an image index (0-%i):"%(self.book.GetImageList().GetImageCount()-1), "Set Image Index")
+        if dlg.ShowModal() == wx.ID_OK:
+            val = dlg.GetValue()
+            self.book.SetPageImageIndex(self.book.GetSelection(), int(val))
+
+
+    def OnAdvanceSelectionFwd(self, event):
+
+       self.book.AdvanceSelection(True)
+
+
+    def OnAdvanceSelectionBack(self, event):
+
+       self.book.AdvanceSelection(False)
+
+
+    def OnPageChanging(self, event):
+
+        print "Page Changing From", event.GetOldSelection(), "To", event.GetSelection()
+        event.Skip()
+
+
+    def OnPageChanged(self, event):
+
+        print "Page Changed To", event.GetSelection()
+        event.Skip()
+
+
+    def OnPageClosing(self, event):
+
+        print "Page Closing, Selection:", event.GetSelection()
+        event.Skip()
+
+
+    def OnDrawTabX(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+        if event.IsChecked():
+            style |= fnb.FNB_X_ON_TAB
+        else:
+            if style & fnb.FNB_X_ON_TAB:
+                style ^= fnb.FNB_X_ON_TAB              
+        
+        self.book.SetWindowStyleFlag(style)
+
+
+    def OnDClickCloseTab(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+        if event.IsChecked():       
+            style |= fnb.FNB_DCLICK_CLOSES_TABS
+        else:
+            style &= ~(fnb.FNB_DCLICK_CLOSES_TABS)             
+        
+        self.book.SetWindowStyleFlag(style)
+
+
+    def OnGradientBack(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+        if event.IsChecked():
+            style |= fnb.FNB_BACKGROUND_GRADIENT
+        else:
+            style &= ~(fnb.FNB_BACKGROUND_GRADIENT)
+            
+        self.book.SetWindowStyleFlag(style)
+        self.book.Refresh()
+
+
+    def OnColorfulTabs(self, event):
+
+        style = self.book.GetWindowStyleFlag()
+        if event.IsChecked():
+            style |= fnb.FNB_COLORFUL_TABS
+        else:
+            style &= ~(fnb.FNB_COLORFUL_TABS)
+
+        self.book.SetWindowStyleFlag(style)
+        self.book.Refresh()
+
+
+    def OnAbout(self, event):
+
+        msg = "This Is The About Dialog Of The FlatNotebook Demo.\n\n" + \
+              "Author: Andrea Gavana @ 02 Oct 2006\n\n" + \
+              "Please Report Any Bug/Requests Of Improvements\n" + \
+              "To Me At The Following Adresses:\n\n" + \
+              "andrea.gavana@gmail.com\n" + "gavana@kpo.kz\n\n" + \
+              "Based On Eran C++ Implementation (wxWidgets Forum).\n\n" + \
+              "Welcome To wxPython " + wx.VERSION_STRING + "!!"
+              
+        dlg = wx.MessageDialog(self, msg, "FlatNotebook wxPython Demo",
+                               wx.OK | wx.ICON_INFORMATION)
+        dlg.ShowModal()
+        dlg.Destroy()        
+
+
+#---------------------------------------------------------------------------
+
+
+class TestPanel(wx.Panel):
+    def __init__(self, parent, log):
+        self.log = log
+        wx.Panel.__init__(self, parent, -1)
+
+        b = wx.Button(self, -1, " Test ButtonPanel ", (50,50))
+        self.Bind(wx.EVT_BUTTON, self.OnButton, b)
+
+
+    def OnButton(self, evt):
+        self.win = FlatNotebookDemo(self, title="FlatNotebook Demo")
+        self.win.Show(True)
+
+#----------------------------------------------------------------------
+
+def runTest(frame, nb, log):
+    win = TestPanel(nb, log)
+    return win
+
+#----------------------------------------------------------------------
+
+
+
+overview = """<html><body>
+<h2><center>Say something nice here</center></h2>
+
+</body></html>
+"""
+
+
+
+if __name__ == '__main__':
+    import sys,os
+    import run
+    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
+