remove agw
[iramuteq] / agw / aui / aui_switcherdialog.py
diff --git a/agw/aui/aui_switcherdialog.py b/agw/aui/aui_switcherdialog.py
deleted file mode 100644 (file)
index 552cb84..0000000
+++ /dev/null
@@ -1,1216 +0,0 @@
-"""
-Description
-===========
-
-The idea of `SwitcherDialog` is to make it easier to implement keyboard
-navigation in AUI and other applications that have multiple panes and
-tabs.
-
-A key combination with a modifier (such as ``Ctrl`` + ``Tab``) shows the
-dialog, and the user holds down the modifier whilst navigating with
-``Tab`` and arrow keys before releasing the modifier to dismiss the dialog
-and activate the selected pane.
-
-The switcher dialog is a multi-column menu with no scrolling, implemented
-by the `MultiColumnListCtrl` class. You can have headings for your items
-for logical grouping, and you can force a column break if you need to.
-
-The modifier used for invoking and dismissing the dialog can be customised,
-as can the colours, number of rows, and the key used for cycling through
-the items. So you can use different keys on different platforms if
-required (especially since ``Ctrl`` + ``Tab`` is reserved on some platforms).
-
-Items are shown as names and optional 16x16 images.
-
-
-Base Functionalities
-====================
-
-To use the dialog, you set up the items in a `SwitcherItems` object,
-before passing this to the `SwitcherDialog` instance.
-
-Call L{SwitcherItems.AddItem} and optionally L{SwitcherItems.AddGroup} to add items and headings. These
-functions take a label (to be displayed to the user), an identifying name,
-an integer id, and a bitmap. The name and id are purely for application-defined
-identification. You may also set a description to be displayed when each
-item is selected; and you can set a window pointer for convenience when
-activating the desired window after the dialog returns.
-
-Have created the dialog, you call `ShowModal()`, and if the return value is
-``wx.ID_OK``, retrieve the selection from the dialog and activate the pane.
-
-The sample code below shows a generic method of finding panes and notebook
-tabs within the current L{AuiManager}, and using the pane name or notebook
-tab position to display the pane.
-
-The only other code to add is a menu item with the desired accelerator,
-whose modifier matches the one you pass to L{SwitcherDialog.SetModifierKey} 
-(the default being ``wx.WXK_CONTROL``).
-
-
-Usage
-=====
-
-Menu item::
-
-    if wx.Platform == "__WXMAC__":
-        switcherAccel = "Alt+Tab"
-    elif wx.Platform == "__WXGTK__":
-        switcherAccel = "Ctrl+/"
-    else:
-        switcherAccel = "Ctrl+Tab"
-
-    view_menu.Append(ID_SwitchPane, _("S&witch Window...") + "\t" + switcherAccel)
-
-
-Event handler::
-
-    def OnSwitchPane(self, event):
-
-        items = SwitcherItems()
-        items.SetRowCount(12)
-
-        # Add the main windows and toolbars, in two separate columns
-        # We'll use the item 'id' to store the notebook selection, or -1 if not a page
-
-        for k in xrange(2):
-            if k == 0:
-                items.AddGroup(_("Main Windows"), "mainwindows")
-            else:
-                items.AddGroup(_("Toolbars"), "toolbars").BreakColumn()
-
-            for pane in self._mgr.GetAllPanes():
-                name = pane.name
-                caption = pane.caption
-
-                toolbar = isinstance(info.window, wx.ToolBar) or isinstance(info.window, aui.AuiToolBar)
-                if caption and (toolBar  and k == 1) or (not toolBar and k == 0):
-                    items.AddItem(caption, name, -1).SetWindow(pane.window)
-
-        # Now add the wxAuiNotebook pages
-
-        items.AddGroup(_("Notebook Pages"), "pages").BreakColumn()
-
-        for pane in self._mgr.GetAllPanes():
-            nb = pane.window
-            if isinstance(nb, aui.AuiNotebook):
-                for j in xrange(nb.GetPageCount()):
-
-                    name = nb.GetPageText(j)
-                    win = nb.GetPage(j)
-
-                    items.AddItem(name, name, j, nb.GetPageBitmap(j)).SetWindow(win)
-
-        # Select the focused window
-
-        idx = items.GetIndexForFocus()
-        if idx != wx.NOT_FOUND:
-            items.SetSelection(idx)
-
-        if wx.Platform == "__WXMAC__":
-            items.SetBackgroundColour(wx.WHITE)
-        
-        # Show the switcher dialog
-
-        dlg = SwitcherDialog(items, wx.GetApp().GetTopWindow())
-
-        # In GTK+ we can't use Ctrl+Tab; we use Ctrl+/ instead and tell the switcher
-        # to treat / in the same was as tab (i.e. cycle through the names)
-
-        if wx.Platform == "__WXGTK__":
-            dlg.SetExtraNavigationKey(wxT('/'))
-
-        if wx.Platform == "__WXMAC__":
-            dlg.SetBackgroundColour(wx.WHITE)
-            dlg.SetModifierKey(wx.WXK_ALT)
-
-        ans = dlg.ShowModal()
-
-        if ans == wx.ID_OK and dlg.GetSelection() != -1:
-            item = items.GetItem(dlg.GetSelection())
-
-            if item.GetId() == -1:
-                info = self._mgr.GetPane(item.GetName())
-                info.Show()
-                self._mgr.Update()
-                info.window.SetFocus()
-
-            else:
-                nb = item.GetWindow().GetParent()
-                win = item.GetWindow();
-                if isinstance(nb, aui.AuiNotebook):
-                    nb.SetSelection(item.GetId())
-                    win.SetFocus()
-
-
-"""
-
-import wx
-
-import auibook
-from aui_utilities import FindFocusDescendant
-from aui_constants import SWITCHER_TEXT_MARGIN_X, SWITCHER_TEXT_MARGIN_Y
-
-
-# Define a translation function
-_ = wx.GetTranslation
-
-    
-class SwitcherItem(object):
-    """ An object containing information about one item. """
-    
-    def __init__(self, item=None):
-        """ Default class constructor. """
-
-        self._id = 0
-        self._isGroup = False
-        self._breakColumn = False
-        self._rowPos = 0
-        self._colPos = 0
-        self._window = None
-        self._description = ""
-
-        self._textColour = wx.NullColour
-        self._bitmap = wx.NullBitmap
-        self._font = wx.NullFont
-        
-        if item:
-            self.Copy(item)
-
-
-    def Copy(self, item):
-        """
-        Copy operator between 2 L{SwitcherItem} instances.
-
-        :param `item`: another instance of L{SwitcherItem}.
-        """
-
-        self._id = item._id
-        self._name = item._name
-        self._title = item._title
-        self._isGroup = item._isGroup
-        self._breakColumn = item._breakColumn
-        self._rect = item._rect
-        self._font = item._font
-        self._textColour = item._textColour
-        self._bitmap = item._bitmap
-        self._description = item._description
-        self._rowPos = item._rowPos
-        self._colPos = item._colPos
-        self._window = item._window
-
-
-    def SetTitle(self, title):
-
-        self._title = title
-        return self
-    
-
-    def GetTitle(self):
-        
-        return self._title
-
-
-    def SetName(self, name):
-
-        self._name = name
-        return self
-
-    
-    def GetName(self):
-
-        return self._name
-
-
-    def SetDescription(self, descr):
-
-        self._description = descr
-        return self
-
-
-    def GetDescription(self):
-
-        return self._description
-    
-
-    def SetId(self, id):
-
-        self._id = id
-        return self
-
-    
-    def GetId(self):
-
-        return self._id
-
-
-    def SetIsGroup(self, isGroup):
-
-        self._isGroup = isGroup
-        return self
-
-    
-    def GetIsGroup(self):
-
-        return self._isGroup
-    
-
-    def BreakColumn(self, breakCol=True):
-
-        self._breakColumn = breakCol
-        return self
-
-    
-    def GetBreakColumn(self):
-
-        return self._breakColumn
-
-
-    def SetRect(self, rect):
-
-        self._rect = rect
-        return self
-
-    
-    def GetRect(self):
-        
-        return self._rect
-
-
-    def SetTextColour(self, colour):
-
-        self._textColour = colour
-        return self
-
-    
-    def GetTextColour(self):
-
-        return self._textColour
-    
-
-    def SetFont(self, font):
-
-        self._font = font
-        return self
-
-    
-    def GetFont(self):
-
-        return self._font
-    
-
-    def SetBitmap(self, bitmap):
-
-        self._bitmap = bitmap
-        return self
-
-    
-    def GetBitmap(self):
-
-        return self._bitmap
-
-
-    def SetRowPos(self, pos):
-
-        self._rowPos = pos
-        return self
-
-    
-    def GetRowPos(self):
-
-        return self._rowPos
-    
-
-    def SetColPos(self, pos):
-
-        self._colPos = pos
-        return self
-
-    
-    def GetColPos(self):
-
-        return self._colPos
-    
-
-    def SetWindow(self, win):
-
-        self._window = win
-        return self
-    
-
-    def GetWindow(self):
-
-        return self._window
-
-    
-class SwitcherItems(object):
-    """ An object containing switcher items. """
-
-    def __init__(self, items=None):
-        """ Default class constructor. """
-
-        self._selection = -1
-        self._rowCount = 10
-        self._columnCount = 0
-
-        self._backgroundColour = wx.NullColour
-        self._textColour = wx.NullColour
-        self._selectionColour = wx.NullColour
-        self._selectionOutlineColour = wx.NullColour
-        self._itemFont = wx.NullFont
-
-        self._items = []        
-        
-        if wx.Platform == "__WXMSW__":
-            # If on Windows XP/Vista, use more appropriate colours
-            self.SetSelectionOutlineColour(wx.Colour(49, 106, 197))
-            self.SetSelectionColour(wx.Colour(193, 210, 238))
-
-        if items:
-            self.Copy(items)
-            
-
-    def Copy(self, items):
-        """
-        Copy operator between 2 L{SwitcherItems}.
-
-        :param `items`: another instance of L{SwitcherItems}.
-        """
-        
-        self.Clear()
-
-        for item in items._items:
-            self._items.append(item)
-        
-        self._selection = items._selection
-        self._rowCount = items._rowCount
-        self._columnCount = items._columnCount
-
-        self._backgroundColour = items._backgroundColour
-        self._textColour = items._textColour
-        self._selectionColour = items._selectionColour
-        self._selectionOutlineColour = items._selectionOutlineColour
-        self._itemFont = items._itemFont
-
-
-    def AddItem(self, titleOrItem, name=None, id=0, bitmap=wx.NullBitmap):
-
-        if isinstance(titleOrItem, SwitcherItem):
-            self._items.append(titleOrItem)
-            return self._items[-1]
-        
-        item = SwitcherItem()
-        item.SetTitle(titleOrItem)
-        item.SetName(name)
-        item.SetId(id)
-        item.SetBitmap(bitmap)
-
-        self._items.append(item)
-        return self._items[-1]
-
-
-    def AddGroup(self, title, name, id=0, bitmap=wx.NullBitmap):
-
-        item = self.AddItem(title, name, id, bitmap)
-        item.SetIsGroup(True)
-
-        return item
-
-
-    def Clear(self):
-
-        self._items = []
-
-
-    def FindItemByName(self, name):
-
-        for i in xrange(len(self._items)):
-            if self._items[i].GetName() == name:
-                return i
-        
-        return wx.NOT_FOUND
-
-
-    def FindItemById(self, id):
-
-        for i in xrange(len(self._items)):
-            if self._items[i].GetId() == id:
-                return i
-        
-        return wx.NOT_FOUND
-
-
-    def SetSelection(self, sel):
-
-        self._selection = sel
-
-
-    def SetSelectionByName(self, name):
-
-        idx = self.FindItemByName(name)
-        if idx != wx.NOT_FOUND:
-            self.SetSelection(idx)
-
-
-    def GetSelection(self):
-
-        return self._selection
-    
-
-    def GetItem(self, i):
-
-        return self._items[i]
-
-
-    def GetItemCount(self):
-
-        return len(self._items)
-    
-
-    def SetRowCount(self, rows):
-
-        self._rowCount = rows
-
-        
-    def GetRowCount(self):
-
-        return self._rowCount
-
-
-    def SetColumnCount(self, cols):
-
-        self._columnCount = cols
-
-        
-    def GetColumnCount(self):
-
-        return self._columnCount
-    
-
-    def SetBackgroundColour(self, colour):
-
-        self._backgroundColour = colour
-
-        
-    def GetBackgroundColour(self):
-
-        return self._backgroundColour
-    
-
-    def SetTextColour(self, colour):
-
-        self._textColour = colour
-
-        
-    def GetTextColour(self):
-
-        return self._textColour
-    
-
-    def SetSelectionColour(self, colour):
-
-        self._selectionColour = colour
-
-        
-    def GetSelectionColour(self):
-
-        return self._selectionColour
-    
-
-    def SetSelectionOutlineColour(self, colour):
-
-        self._selectionOutlineColour = colour
-
-        
-    def GetSelectionOutlineColour(self):
-
-        return self._selectionOutlineColour
-    
-
-    def SetItemFont(self, font):
-
-        self._itemFont = font
-
-        
-    def GetItemFont(self):
-
-        return self._itemFont 
-    
-
-    def PaintItems(self, dc, win):
-
-        backgroundColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DFACE)
-        standardTextColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
-        selectionColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT)
-        selectionOutlineColour = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOWTEXT)
-        standardFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
-        groupFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
-        groupFont.SetWeight(wx.BOLD)
-
-        if self.GetBackgroundColour().IsOk():
-            backgroundColour = self.GetBackgroundColour()
-
-        if self.GetTextColour().IsOk():
-            standardTextColour = self.GetTextColour()
-
-        if self.GetSelectionColour().IsOk():
-            selectionColour = self.GetSelectionColour()
-
-        if self.GetSelectionOutlineColour().IsOk():
-            selectionOutlineColour = self.GetSelectionOutlineColour()
-
-        if self.GetItemFont().IsOk():
-        
-            standardFont = self.GetItemFont()   
-            groupFont = wx.Font(standardFont.GetPointSize(), standardFont.GetFamily(), standardFont.GetStyle(),
-                                wx.BOLD, standardFont.GetUnderlined(), standardFont.GetFaceName())
-        
-        textMarginX = SWITCHER_TEXT_MARGIN_X
-
-        dc.SetLogicalFunction(wx.COPY)
-        dc.SetBrush(wx.Brush(backgroundColour))
-        dc.SetPen(wx.TRANSPARENT_PEN)
-        dc.DrawRectangleRect(win.GetClientRect())
-        dc.SetBackgroundMode(wx.TRANSPARENT)
-
-        for i in xrange(len(self._items)):
-            item = self._items[i]
-            if i == self._selection:
-                dc.SetPen(wx.Pen(selectionOutlineColour))
-                dc.SetBrush(wx.Brush(selectionColour))
-                dc.DrawRectangleRect(item.GetRect())
-            
-            clippingRect = wx.Rect(*item.GetRect())
-            clippingRect.Deflate(1, 1)
-
-            dc.SetClippingRect(clippingRect)
-
-            if item.GetTextColour().IsOk():
-                dc.SetTextForeground(item.GetTextColour())
-            else:
-                dc.SetTextForeground(standardTextColour)
-            
-            if item.GetFont().IsOk():
-                dc.SetFont(item.GetFont())
-            else:
-                if item.GetIsGroup():
-                    dc.SetFont(groupFont)
-                else:
-                    dc.SetFont(standardFont)
-            
-            w, h = dc.GetTextExtent(item.GetTitle())
-            x = item.GetRect().x
-
-            x += textMarginX
-
-            if not item.GetIsGroup():
-                if item.GetBitmap().IsOk() and item.GetBitmap().GetWidth() <= 16 \
-                   and item.GetBitmap().GetHeight() <= 16:
-                    x -= textMarginX
-                    dc.DrawBitmap(item.GetBitmap(), x, item.GetRect().y + \
-                                  (item.GetRect().height - item.GetBitmap().GetHeight())/2,
-                                  True)
-                    x += 16 + textMarginX
-                #x += textMarginX
-            
-            y = item.GetRect().y + (item.GetRect().height - h)/2
-            dc.DrawText(item.GetTitle(), x, y)
-            dc.DestroyClippingRegion()
-    
-
-    def CalculateItemSize(self, dc):
-
-        # Start off allowing for an icon
-        sz = wx.Size(150, 16)
-        standardFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
-        groupFont = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
-        groupFont.SetWeight(wx.BOLD)
-
-        textMarginX = SWITCHER_TEXT_MARGIN_X
-        textMarginY = SWITCHER_TEXT_MARGIN_Y
-        maxWidth = 300
-        maxHeight = 40
-
-        if self.GetItemFont().IsOk():
-            standardFont = self.GetItemFont()   
-
-        for item in self._items:
-            if item.GetFont().IsOk():
-                dc.SetFont(item.GetFont())
-            else:
-                if item.GetIsGroup():
-                    dc.SetFont(groupFont)
-                else:
-                    dc.SetFont(standardFont)
-
-            w, h = dc.GetTextExtent(item.GetTitle())
-            w += 16 + 2*textMarginX
-
-            if w > sz.x:
-                sz.x = min(w, maxWidth)
-            if h > sz.y:
-                sz.y = min(h, maxHeight)
-        
-        if sz == wx.Size(16, 16):
-            sz = wx.Size(100, 25)
-        else:
-            sz.x += textMarginX*2
-            sz.y += textMarginY*2
-        
-        return sz
-
-
-    def GetIndexForFocus(self):
-
-        for i, item in enumerate(self._items):        
-            if item.GetWindow():
-            
-                if FindFocusDescendant(item.GetWindow()):
-                    return i
-            
-        return wx.NOT_FOUND
-
-
-class MultiColumnListCtrl(wx.PyControl):
-    """ A control for displaying several columns (not scrollable). """
-
-    def __init__(self, parent, aui_manager, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize,
-                 style=0, validator=wx.DefaultValidator, name="MultiColumnListCtrl"):
-
-        wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name)
-
-        self._overallSize = wx.Size(200, 100)
-        self._modifierKey = wx.WXK_CONTROL
-        self._extraNavigationKey = 0
-        self._aui_manager = aui_manager
-        
-        self.SetInitialSize(size)
-        self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM)
-
-        self.Bind(wx.EVT_PAINT, self.OnPaint)
-        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
-        self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouseEvent)
-        self.Bind(wx.EVT_CHAR, self.OnChar)
-        self.Bind(wx.EVT_KEY_DOWN, self.OnKey)
-        self.Bind(wx.EVT_KEY_UP, self.OnKey)
-
-
-    def __del__(self):
-
-        self._aui_manager.HideHint()
-
-        
-    def DoGetBestSize(self):
-
-        return self._overallSize
-
-
-    def OnEraseBackground(self, event):
-        
-        pass
-
-
-    def OnPaint(self, event):
-
-        dc = wx.AutoBufferedPaintDC(self)
-        rect = self.GetClientRect()
-
-        if self._items.GetColumnCount() == 0:
-            self.CalculateLayout(dc)
-
-        if self._items.GetColumnCount() == 0:
-            return
-
-        self._items.PaintItems(dc, self)
-
-
-    def OnMouseEvent(self, event):
-
-        if event.LeftDown():
-            self.SetFocus()
-    
-
-    def OnChar(self, event):
-
-        event.Skip()        
-
-
-    def OnKey(self, event):
-
-        if event.GetEventType() == wx.wxEVT_KEY_UP:
-            if event.GetKeyCode() == self.GetModifierKey():
-                topLevel = wx.GetTopLevelParent(self)
-                closeEvent = wx.CloseEvent(wx.wxEVT_CLOSE_WINDOW, topLevel.GetId())
-                closeEvent.SetEventObject(topLevel)
-                closeEvent.SetCanVeto(False)
-                
-                topLevel.GetEventHandler().ProcessEvent(closeEvent)
-                return
-                
-            event.Skip()
-            return
-
-        keyCode = event.GetKeyCode()
-        
-        if keyCode in [wx.WXK_ESCAPE, wx.WXK_RETURN]:
-            if keyCode == wx.WXK_ESCAPE:
-                self._items.SetSelection(-1)
-
-            topLevel = wx.GetTopLevelParent(self)
-            closeEvent = wx.CloseEvent(wx.wxEVT_CLOSE_WINDOW, topLevel.GetId())
-            closeEvent.SetEventObject(topLevel)
-            closeEvent.SetCanVeto(False)
-            
-            topLevel.GetEventHandler().ProcessEvent(closeEvent)
-            return
-        
-        elif keyCode in [wx.WXK_TAB, self.GetExtraNavigationKey()]:
-            if event.ShiftDown():
-            
-                self._items.SetSelection(self._items.GetSelection() - 1)
-                if self._items.GetSelection() < 0:
-                    self._items.SetSelection(self._items.GetItemCount() - 1)
-
-                self.AdvanceToNextSelectableItem(-1)
-            
-            else:
-            
-                self._items.SetSelection(self._items.GetSelection() + 1)
-                if self._items.GetSelection() >= self._items.GetItemCount():
-                    self._items.SetSelection(0)
-
-                self.AdvanceToNextSelectableItem(1)
-            
-            self.GenerateSelectionEvent()
-            self.Refresh()
-        
-        elif keyCode in [wx.WXK_DOWN, wx.WXK_NUMPAD_DOWN]:
-            self._items.SetSelection(self._items.GetSelection() + 1)
-            if self._items.GetSelection() >= self._items.GetItemCount():
-                self._items.SetSelection(0)
-            
-            self.AdvanceToNextSelectableItem(1)
-            self.GenerateSelectionEvent()
-            self.Refresh()
-        
-        elif keyCode in [wx.WXK_UP, wx.WXK_NUMPAD_UP]:
-            self._items.SetSelection(self._items.GetSelection() - 1)
-            if self._items.GetSelection() < 0:
-                self._items.SetSelection(self._items.GetItemCount() - 1)
-            
-            self.AdvanceToNextSelectableItem(-1)
-            self.GenerateSelectionEvent()
-            self.Refresh()
-        
-        elif keyCode in [wx.WXK_HOME, wx.WXK_NUMPAD_HOME]:
-            self._items.SetSelection(0)
-            self.AdvanceToNextSelectableItem(1)
-            self.GenerateSelectionEvent()
-            self.Refresh()
-        
-        elif keyCode in [wx.WXK_END, wx.WXK_NUMPAD_END]:
-            self._items.SetSelection(self._items.GetItemCount() - 1)
-            self.AdvanceToNextSelectableItem(-1)
-            self.GenerateSelectionEvent()
-            self.Refresh()
-        
-        elif keyCode in [wx.WXK_LEFT, wx.WXK_NUMPAD_LEFT]:
-            item = self._items.GetItem(self._items.GetSelection())
-
-            row = item.GetRowPos()
-            newCol = item.GetColPos() - 1
-            if newCol < 0:
-                newCol = self._items.GetColumnCount() - 1
-
-            # Find the first item from the end whose row matches and whose column is equal or lower
-            for i in xrange(self._items.GetItemCount()-1, -1, -1):
-                item2 = self._items.GetItem(i)
-                if item2.GetColPos() == newCol and item2.GetRowPos() <= row:
-                    self._items.SetSelection(i)
-                    break
-
-            self.AdvanceToNextSelectableItem(-1)
-            self.GenerateSelectionEvent()
-            self.Refresh()
-        
-        elif keyCode in [wx.WXK_RIGHT, wx.WXK_NUMPAD_RIGHT]:
-            item = self._items.GetItem(self._items.GetSelection())
-
-            row = item.GetRowPos()
-            newCol = item.GetColPos() + 1
-            if newCol >= self._items.GetColumnCount():
-                newCol = 0
-
-            # Find the first item from the end whose row matches and whose column is equal or lower
-            for i in xrange(self._items.GetItemCount()-1, -1, -1):
-                item2 = self._items.GetItem(i)
-                if item2.GetColPos() == newCol and item2.GetRowPos() <= row:
-                    self._items.SetSelection(i)
-                    break
-
-            self.AdvanceToNextSelectableItem(1)
-            self.GenerateSelectionEvent()
-            self.Refresh()
-        
-        else:
-            event.Skip()
-
-
-    def AdvanceToNextSelectableItem(self, direction):
-
-        if self._items.GetItemCount() < 2:
-            return
-
-        if self._items.GetSelection() == -1:
-            self._items.SetSelection(0)
-
-        oldSel = self._items.GetSelection()
-
-        while 1:
-        
-            if self._items.GetItem(self._items.GetSelection()).GetIsGroup():
-            
-                self._items.SetSelection(self._items.GetSelection() + direction)
-                if self._items.GetSelection() == -1:
-                    self._items.SetSelection(self._items.GetItemCount()-1)
-                elif self._items.GetSelection() == self._items.GetItemCount():
-                    self._items.SetSelection(0)
-                if self._items.GetSelection() == oldSel:
-                    break
-            
-            else:
-                break
-
-        self.SetTransparency()
-        selection = self._items.GetItem(self._items.GetSelection()).GetWindow()
-        pane = self._aui_manager.GetPane(selection)
-
-        if not pane.IsOk():
-            if isinstance(selection.GetParent(), auibook.AuiNotebook):
-                self.SetTransparency(selection)
-                self._aui_manager.ShowHint(selection.GetScreenRect())
-                wx.CallAfter(self.SetFocus)
-                self.SetFocus()
-                return
-            else:
-                self._aui_manager.HideHint()
-                return
-        if not pane.IsShown():
-            self._aui_manager.HideHint()
-            return
-
-        self.SetTransparency(selection)
-        self._aui_manager.ShowHint(selection.GetScreenRect())
-        # NOTE: this is odd but it is the only way for the focus to
-        #       work correctly on wxMac...
-        wx.CallAfter(self.SetFocus)
-        self.SetFocus()        
-    
-
-    def SetTransparency(self, selection=None):
-
-        if not self.GetParent().CanSetTransparent():
-            return
-        
-        if selection is not None:
-            intersects = False
-            if selection.GetScreenRect().Intersects(self.GetParent().GetScreenRect()):
-                intersects = True
-                self.GetParent().SetTransparent(200)
-                return
-
-        self.GetParent().SetTransparent(255)
-
-
-    def GenerateSelectionEvent(self):
-
-        event = wx.CommandEvent(wx.wxEVT_COMMAND_LISTBOX_SELECTED, self.GetId())
-        event.SetEventObject(self)
-        event.SetInt(self._items.GetSelection())
-        self.GetEventHandler().ProcessEvent(event)
-
-
-    def CalculateLayout(self, dc=None):
-
-        if dc is None:
-            dc = wx.ClientDC(self)
-
-        if self._items.GetSelection() == -1:
-            self._items.SetSelection(0)
-
-        columnCount = 1
-
-        # Spacing between edge of window or between columns
-        xMargin = 4
-        yMargin = 4
-
-        # Inter-row spacing
-        rowSpacing = 2
-
-        itemSize = self._items.CalculateItemSize(dc)
-        self._overallSize = wx.Size(350, 200)
-
-        currentRow = 0
-        x = xMargin
-        y = yMargin
-
-        breaking = False
-        i = 0
-        
-        while 1:
-        
-            oldOverallSize = self._overallSize
-            item = self._items.GetItem(i)
-            
-            item.SetRect(wx.Rect(x, y, itemSize.x, itemSize.y))
-            item.SetColPos(columnCount-1)
-            item.SetRowPos(currentRow)
-
-            if item.GetRect().GetBottom() > self._overallSize.y:
-                self._overallSize.y = item.GetRect().GetBottom() + yMargin
-
-            if item.GetRect().GetRight() > self._overallSize.x:
-                self._overallSize.x = item.GetRect().GetRight() + xMargin
-
-            currentRow += 1
-
-            y += rowSpacing + itemSize.y
-            stopBreaking = breaking
-
-            if currentRow > self._items.GetRowCount() or (item.GetBreakColumn() and not breaking and currentRow != 1):
-                currentRow = 0
-                columnCount += 1
-                x += xMargin + itemSize.x
-                y = yMargin
-
-                # Make sure we don't orphan a group
-                if item.GetIsGroup() or (item.GetBreakColumn() and not breaking):
-                    self._overallSize = oldOverallSize
-
-                    if item.GetBreakColumn():
-                        breaking = True
-
-                    # Repeat the last item, in the next column
-                    i -= 1
-                
-            if stopBreaking:
-                breaking = False
-
-            i += 1
-            
-            if i >= self._items.GetItemCount():
-                break
-            
-        self._items.SetColumnCount(columnCount)
-        self.InvalidateBestSize()
-
-
-    def SetItems(self, items):
-        
-        self._items = items
-
-        
-    def GetItems(self):
-
-        return self._items
-
-    def SetExtraNavigationKey(self, keyCode):
-        """
-        Set an extra key that can be used to cycle through items,
-        in case not using the ``Ctrl`` + ``Tab`` combination.
-        """
-
-        self._extraNavigationKey = keyCode
-
-
-    def GetExtraNavigationKey(self):
-
-        return self._extraNavigationKey
-
-
-    def SetModifierKey(self, modifierKey):
-        """
-        Set the modifier used to invoke the dialog, and therefore to test for
-        release.
-        """
-
-        self._modifierKey = modifierKey
-
-        
-    def GetModifierKey(self):
-
-        return self._modifierKey
-
-    
-
-class SwitcherDialog(wx.Dialog):
-    """
-    SwitcherDialog shows a L{MultiColumnListCtrl} with a list of panes
-    and tabs for the user to choose. ``Ctrl`` + ``Tab`` cycles through them.
-    """
-
-    def __init__(self, items, parent, aui_manager, id=wx.ID_ANY, title=_("Pane Switcher"), pos=wx.DefaultPosition,
-                 size=wx.DefaultSize, style=wx.STAY_ON_TOP|wx.DIALOG_NO_PARENT|wx.BORDER_SIMPLE):
-        """ Default class constructor. """
-        
-        self._switcherBorderStyle = (style & wx.BORDER_MASK)
-        if self._switcherBorderStyle == wx.BORDER_NONE:
-            self._switcherBorderStyle = wx.BORDER_SIMPLE
-
-        style &= wx.BORDER_MASK
-        style |= wx.BORDER_NONE
-
-        wx.Dialog.__init__(self, parent, id, title, pos, size, style)
-
-        self._listCtrl = MultiColumnListCtrl(self, aui_manager,
-                                             style=wx.WANTS_CHARS|wx.NO_BORDER)
-        self._listCtrl.SetItems(items)
-        self._listCtrl.CalculateLayout()
-
-        self._descriptionCtrl = wx.html.HtmlWindow(self, size=(-1, 100), style=wx.BORDER_NONE)
-        self._descriptionCtrl.SetBackgroundColour(self.GetBackgroundColour())
-
-        if wx.Platform == "__WXGTK__":
-            fontSize = 11
-            self._descriptionCtrl.SetStandardFonts(fontSize)
-
-        sizer = wx.BoxSizer(wx.VERTICAL)
-        self.SetSizer(sizer)
-        sizer.Add(self._listCtrl, 1, wx.ALL|wx.EXPAND, 10)
-        sizer.Add(self._descriptionCtrl, 0, wx.ALL|wx.EXPAND, 10)
-        sizer.SetSizeHints(self)
-
-        self._listCtrl.SetFocus()
-
-        self.Centre(wx.BOTH)
-
-        if self._listCtrl.GetItems().GetSelection() == -1:
-            self._listCtrl.GetItems().SetSelection(0)
-
-        self._listCtrl.AdvanceToNextSelectableItem(1)
-
-        self.ShowDescription(self._listCtrl.GetItems().GetSelection())
-
-        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
-        self.Bind(wx.EVT_ACTIVATE, self.OnActivate)
-        self.Bind(wx.EVT_LISTBOX, self.OnSelectItem)
-        self.Bind(wx.EVT_PAINT, self.OnPaint)
-
-        # Attributes
-        self._closing = False
-        if wx.Platform == "__WXMSW__":
-            self._borderColour = wx.Colour(49, 106, 197)
-        else:
-            self._borderColour = wx.BLACK
-
-        self._aui_manager = aui_manager
-        
-
-    def OnCloseWindow(self, event):
-
-        if self._closing:
-            return
-
-        if self.IsModal():
-            self._closing = True
-
-            if self.GetSelection() == -1:
-                self.EndModal(wx.ID_CANCEL)
-            else:
-                self.EndModal(wx.ID_OK)
-    
-        self._aui_manager.HideHint()
-
-
-    def GetSelection(self):
-
-        return self._listCtrl.GetItems().GetSelection()
-
-
-    def OnActivate(self, event):
-
-        if not event.GetActive():
-            if not self._closing:
-                self._closing = True
-                self.EndModal(wx.ID_CANCEL)
-            
-
-    def OnPaint(self, event):
-
-        dc = wx.PaintDC(self)
-
-        if self._switcherBorderStyle == wx.BORDER_SIMPLE:
-        
-            dc.SetPen(wx.Pen(self._borderColour))
-            dc.SetBrush(wx.TRANSPARENT_BRUSH)
-
-            rect = self.GetClientRect()
-            dc.DrawRectangleRect(rect)
-
-            # Draw border around the HTML control
-            rect = wx.Rect(*self._descriptionCtrl.GetRect())
-            rect.Inflate(1, 1)
-            dc.DrawRectangleRect(rect)
-
-    
-    def OnSelectItem(self, event):
-
-        self.ShowDescription(event.GetSelection())
-
-
-# Convert a colour to a 6-digit hex string
-    def ColourToHexString(self, col):
-
-        hx = '%02x%02x%02x' % tuple([int(c) for c in col])
-        return hx
-
-
-    def ShowDescription(self, i):
-
-        item = self._listCtrl.GetItems().GetItem(i)
-        colour = self._listCtrl.GetItems().GetBackgroundColour()
-        
-        if not colour.IsOk():
-            colour = self.GetBackgroundColour()
-
-        backgroundColourHex = self.ColourToHexString(colour)
-        html = _("<body bgcolor=\"#") + backgroundColourHex + _("\"><b>") + item.GetTitle() + _("</b>")
-
-        if item.GetDescription():
-            html += _("<p>")
-            html += item.GetDescription()
-        
-        html += _("</body>")
-        self._descriptionCtrl.SetPage(html)
-
-
-    def SetExtraNavigationKey(self, keyCode):
-
-        self._extraNavigationKey = keyCode
-        if self._listCtrl:
-            self._listCtrl.SetExtraNavigationKey(keyCode)
-
-
-    def GetExtraNavigationKey(self):
-
-        return self._extraNavigationKey
-    
-        
-    def SetModifierKey(self, modifierKey):
-
-        self._modifierKey = modifierKey
-        if self._listCtrl:
-            self._listCtrl.SetModifierKey(modifierKey)
-
-
-    def GetModifierKey(self):
-
-        return self._modifierKey        
-
-
-    def SetBorderColour(self, colour):
-
-        self._borderColour = colour
-
-        
\ No newline at end of file