#Boa:Dialog:CreationOrderDlg import wx import Preferences, Utils def create(parent): return CreationOrderDlg(parent) [wxID_CREATIONORDERDLG, wxID_CREATIONORDERDLGBBDOWN, wxID_CREATIONORDERDLGBBDOWNLAST, wxID_CREATIONORDERDLGBBUP, wxID_CREATIONORDERDLGBBUPFIRST, wxID_CREATIONORDERDLGBTCANCEL, wxID_CREATIONORDERDLGBTOK, wxID_CREATIONORDERDLGCONTEXTHELPBUTTON1, wxID_CREATIONORDERDLGLBOBJECTS, wxID_CREATIONORDERDLGPANEL1, wxID_CREATIONORDERDLGSTATICBOX1, ] = [wx.NewId() for _init_ctrls in range(11)] class CreationOrderDlg(wx.Dialog): def _init_ctrls(self, prnt): # generated method, don't edit wx.Dialog.__init__(self, id=wxID_CREATIONORDERDLG, name='CreationOrderDlg', parent=prnt, pos=wx.Point(396, 265), size=wx.Size(280, 281), style=wx.DEFAULT_DIALOG_STYLE, title='Change creation order') self.SetClientSize(wx.Size(272, 254)) self.panel1 = wx.Panel(id=wxID_CREATIONORDERDLGPANEL1, name='panel1', parent=self, pos=wx.Point(1, 1), size=wx.Size(270, 252), style=wx.TAB_TRAVERSAL) self.panel1.SetHelpText('This dialog manages the order of controls on the level (share a parent). When the parent is recreated, the onjects will be recreated in the new order.') self.staticBox1 = wx.StaticBox(id=wxID_CREATIONORDERDLGSTATICBOX1, label='Current creation/tab order', name='staticBox1', parent=self.panel1, pos=wx.Point(8, 0), size=wx.Size(256, 208), style=0) self.lbObjects = wx.ListBox(choices=[], id=wxID_CREATIONORDERDLGLBOBJECTS, name='lbObjects', parent=self.panel1, pos=wx.Point(16, 16), size=wx.Size(200, 184), style=wx.LB_EXTENDED) self.bbUpFirst = wx.BitmapButton(bitmap=self.bmpUpFirst, id=wxID_CREATIONORDERDLGBBUPFIRST, name='bbUpFirst', parent=self.panel1, pos=wx.Point(224, 40), size=wx.Size(24, 24), style=wx.BU_AUTODRAW) self.bbUpFirst.Bind(wx.EVT_BUTTON, self.OnBbUpFirstButton, id=wxID_CREATIONORDERDLGBBUPFIRST) self.bbUp = wx.BitmapButton(bitmap=self.bmpUp, id=wxID_CREATIONORDERDLGBBUP, name='bbUp', parent=self.panel1, pos=wx.Point(224, 72), size=wx.Size(24, 24), style=wx.BU_AUTODRAW) self.bbUp.Bind(wx.EVT_BUTTON, self.OnBbupButton, id=wxID_CREATIONORDERDLGBBUP) self.bbDown = wx.BitmapButton(bitmap=self.bmpDown, id=wxID_CREATIONORDERDLGBBDOWN, name='bbDown', parent=self.panel1, pos=wx.Point(224, 104), size=wx.Size(24, 24), style=wx.BU_AUTODRAW) self.bbDown.Bind(wx.EVT_BUTTON, self.OnBbdownButton, id=wxID_CREATIONORDERDLGBBDOWN) self.bbDownLast = wx.BitmapButton(bitmap=self.bmpDownLast, id=wxID_CREATIONORDERDLGBBDOWNLAST, name='bbDownLast', parent=self.panel1, pos=wx.Point(224, 136), size=wx.Size(24, 24), style=wx.BU_AUTODRAW) self.bbDownLast.Bind(wx.EVT_BUTTON, self.OnBbDownLastButton, id=wxID_CREATIONORDERDLGBBDOWNLAST) self.btOK = wx.Button(id=wxID_CREATIONORDERDLGBTOK, label='OK', name='btOK', parent=self.panel1, pos=wx.Point(112, 224), size=wx.Size(72, 24), style=0) self.btOK.Bind(wx.EVT_BUTTON, self.OnBtokButton, id=wxID_CREATIONORDERDLGBTOK) self.btCancel = wx.Button(id=wxID_CREATIONORDERDLGBTCANCEL, label='Cancel', name='btCancel', parent=self.panel1, pos=wx.Point(192, 224), size=wx.Size(72, 24), style=0) self.btCancel.Bind(wx.EVT_BUTTON, self.OnBtcancelButton, id=wxID_CREATIONORDERDLGBTCANCEL) self.contextHelpButton1 = wx.ContextHelpButton(parent=self.panel1, pos=wx.Point(8, 229), size=wx.Size(20, 19), style=wx.BU_AUTODRAW) def __init__(self, parent, controls, allctrls): self.bmpUp = Preferences.IS.load('Images/Shared/up.png') self.bmpDown = Preferences.IS.load('Images/Shared/down.png') self.bmpUpFirst = Preferences.IS.load('Images/Shared/UpFirst.png') self.bmpDownLast = Preferences.IS.load('Images/Shared/DownLast.png') self._init_ctrls(parent) self.ctrlIdxs, self.ctrlNames = [], [] controls.sort() for idx, name in controls: self.ctrlIdxs.append(idx) self.ctrlNames.append(name) self.allCtrlIdxs, self.allCtrlNames = [], [] allctrls.sort() for idx, name in allctrls: self.allCtrlIdxs.append(idx) self.allCtrlNames.append(name) self.lbObjects.InsertItems(self.ctrlNames, 0) def OnBbUpFirstButton(self, event): selItems = self.lbObjects.GetSelections() if not selItems or selItems[0] < 1: return for item in selItems: self.moveObject(item, item - selItems[0]) def OnBbupButton(self, event): selItems = self.lbObjects.GetSelections() if not selItems or selItems[0] < 1: return for item in selItems: self.moveObject(item, item - 1) def OnBbdownButton(self, event): selItems = self.lbObjects.GetSelections() cnt = len(selItems) if not selItems or selItems[cnt-1] > ( len(self.ctrlNames) - 2 ): return for i in range( cnt ): item = selItems[cnt - i - 1] self.moveObject(item, item + 1) def OnBbDownLastButton(self, event): selItems = self.lbObjects.GetSelections() cnt = len(selItems) if not selItems or selItems[cnt-1] > ( len(self.ctrlNames) - 2 ): return shift = len(self.ctrlNames) - 1 - selItems[cnt - 1] for i in range( cnt ): item = selItems[cnt - i - 1] self.moveObject(item, item + shift) def OnBtokButton(self, event): self.EndModal(wx.ID_OK) def OnBtcancelButton(self, event): self.EndModal(wx.ID_CANCEL) def moveObject(self, selIdx, newIdx): if selIdx != newIdx: lbSel = newIdx #if newIdx > selIdx: # newIdx, selIdx = selIdx, newIdx name = self.ctrlNames[selIdx] newName = self.ctrlNames[newIdx] del self.ctrlNames[selIdx] self.allCtrlNames.remove(name) self.lbObjects.Delete(selIdx) self.ctrlNames.insert(newIdx, name) self.allCtrlNames.insert(self.allCtrlNames.index(newName), name) self.lbObjects.InsertItems([name], newIdx) self.lbObjects.SetSelection(lbSel) return True else: return False if __name__ == '__main__': app = wx.PySimpleApp() wx.InitAllImageHandlers() dlg = CreationOrderDlg(None, [(0, 'ctrl1'), (1, 'ctrl2'), (5, 'ctrl3')], [(0, 'ctrl1'), (1, 'ctrl2'), (2, 'ctrl4'), (3, 'ctrl5'), (5, 'ctrl3')]) try: dlg.ShowModal() print zip(dlg.allCtrlIdxs, dlg.allCtrlNames) finally: dlg.Destroy()