class RescaleToSampleDialog(wx.Dialog):

    def __init__(self, parent, model, cols=None, id=wx.ID_ANY,
                 title="Choose compounds and sample size ...",
                 pos=wx.DefaultPosition, size=(400, 400),
                 style=wx.DEFAULT_FRAME_STYLE,
                 name="Rescale to Sample Dialog"):

        super(RescaleToSampleDialog, self).__init__(parent, id, title, pos,
                                                    size, style, name)

        panel = wx.Panel(self)

        self.olv = ObjectListView(panel, wx.ID_ANY,
                                  style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                  useAlternateBackColors=True)
        self.olv.evenRowsBackColor = "#DCF0C7"
        self.olv.oddRowsBackColor = "#FFFFFF"

        self.SetChemicals(model, cols)

        scalelbl = wx.StaticText(panel, -1, "Sample size [g]:")
        self.sample_size = wx.TextCtrl(panel, -1, str(model.sample_size))

        buttonOk = wx.Button(panel, id=wx.ID_OK)
        buttonOk.SetDefault()
        buttonCancel = wx.Button(panel, id=wx.ID_CANCEL)

        # layout

        sizer = wx.GridBagSizer(vgap=5, hgap=5)
        sizer.Add(self.olv, pos=(0, 0), span=(1, 4), flag=wx.GROW | wx.ALL,
                  border=5)
        sizer.Add(scalelbl, pos=(1, 0),
                  flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.BOTTOM,
                  border=10)
        sizer.Add(self.sample_size, pos=(1, 1), span=(1, 2),
                  flag=wx.EXPAND | wx.ALIGN_LEFT | wx.RIGHT | wx.BOTTOM,
                  border=10)
        sizer.Add(buttonCancel, pos=(2, 2), flag=wx.BOTTOM, border=10)
        sizer.Add(buttonOk, pos=(2, 3), flag=wx.BOTTOM | wx.RIGHT, border=10)
        sizer.AddGrowableCol(1)
        sizer.AddGrowableRow(0)
        panel.SetSizer(sizer)

    def SetChemicals(self, model, cols):
        '''Set the OLV columns and put current chemicals in the OLV'''

        self.olv.SetColumns(cols)
        self.olv.CreateCheckStateColumn()
        for item in model.chemicals:
            self.olv.Check(item)
        self.olv.SetObjects(model.chemicals)

    def GetCurrentSelections(self):
        '''
        Return the entered sample size and objects selected in the dialog.
        '''

        return self.sample_size.GetValue(), self.olv.GetCheckedObjects()
예제 #2
0
class TeamsWindow(wx.Panel):
    def __init__(self, parent, db=None):
        wx.Panel.__init__(self, parent, -1)
        self.listview = ObjectListView(self,
                                       wx.ID_ANY,
                                       style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.listview, 1, flag=wx.EXPAND)
        self.SetSizer(sizer)
        self.db = db
        pub.subscribe(self.onDivision, 'division')

    def onDivision(self, division):
        cursor = self.db.cursor(DictCursor)
        cursor.execute(
            '''SELECT team.id as db_id, team.name, flt_pos, clubname, venue_id, lat, lon, venue.name as vname
                          FROM team
                          LEFT JOIN division ON division_id=division.id
                          LEFT JOIN venue ON venue_id=venue.id
                          WHERE division.label = %s
                          ORDER BY clubname, name''', division)
        self.teams = dict([(x['db_id'], Team(x)) for x in cursor.fetchall()])
        self.listview.SetColumns([
            ColumnDefn("ID", "left", -1, "flt_pos"),
            ColumnDefn("Team Name", "left", -1, "name"),
            ColumnDefn("Club Name", "left", -1, "clubname"),
            ColumnDefn("Venue", "left", -1, "vname"),
        ])
        self.listview.CreateCheckStateColumn()
        self.listview.SetObjects(list(self.teams.values()))
        pub.sendMessage('teams', teams=self.teams.values())

    def onMapSelect(self, selected):
        if not selected:
            print('No selection', flush=True)
            return
        selection = []
        for x in selected:
            if x is not None:
                label, db_id, name = x
                if label == 'Venue':
                    self.listview.Check(self.venues[db_id])
        self.listview.Update()
예제 #3
0
class TestObjectListView(wtc.WidgetTestCase):
    """
    Setup of all base tests used for all types of ObjectListView's and do test the
    normal ObjectListView.

    The other ObjectListView tests just override setUp to create the appropriate ListView.
    """
    def setUp(self):
        super(TestObjectListView, self).setUp()

        panel = wx.Panel(self.frame, -1)
        self.objectListView = ObjectListView(panel,
                                             -1,
                                             style=wx.LC_REPORT
                                             | wx.SUNKEN_BORDER)
        sizerPanel = wx.BoxSizer(wx.VERTICAL)
        sizerPanel.Add(self.objectListView, 1, wx.ALL | wx.EXPAND, 4)
        panel.SetSizer(sizerPanel)

        sizerFrame = wx.BoxSizer(wx.VERTICAL)
        sizerFrame.Add(panel, 1, wx.ALL | wx.EXPAND, 4)
        self.frame.SetSizer(sizerFrame)

        loadOLV(self.objectListView)

    def testInitialState(self):
        self.objectListView.ClearAll()
        self.assertEqual(self.objectListView.GetColumnCount(), 0)
        self.assertEqual(self.objectListView.GetItemCount(), 0)
        self.assertEqual(len(self.objectListView.modelObjects), 0)
        loadOLV(self.objectListView)

    def testBasicState(self):
        self.assertEqual(self.objectListView.GetColumnCount(),
                         len(personColumns))
        self.assertEqual(self.objectListView.GetItemCount(), len(persons))

    def testSelectObject(self):
        self.objectListView.SelectObject(persons[0])
        self.assertEqual(self.objectListView.GetSelectedObject(), persons[0])

        males = [x for x in persons if x.sex == "Male"]
        self.objectListView.SelectObjects(males)
        self.assertEqual(set(self.objectListView.GetSelectedObjects()),
                         set(males))

    def testSelectAll(self):
        self.objectListView.SelectAll()
        for i in range(0, self.objectListView.GetItemCount()):
            self.assertTrue(self.objectListView.IsSelected(i))

    def testDeSelectAll(self):
        self.objectListView.SelectAll()
        self.objectListView.DeselectAll()
        for i in range(0, self.objectListView.GetItemCount()):
            self.assertFalse(self.objectListView.IsSelected(i))

    def testGetSelectedObject(self):
        self.objectListView.SelectAll()
        self.assertEqual(self.objectListView.GetSelectedObject(), None)

        self.objectListView.DeselectAll()
        self.assertEqual(self.objectListView.GetSelectedObject(), None)

        self.objectListView.SelectObject(persons[0])
        self.assertEqual(self.objectListView.GetSelectedObject(), persons[0])

        self.objectListView.SelectObject(persons[1], False)
        self.assertEqual(self.objectListView.GetSelectedObject(), None)

    def testGetSelectedObjects(self):
        self.objectListView.SelectAll()
        self.assertEqual(set(self.objectListView.GetSelectedObjects()),
                         set(persons))

        self.objectListView.SelectObject(persons[0])
        self.assertEqual(len(self.objectListView.GetSelectedObjects()), 1)

        self.objectListView.DeselectAll()
        self.assertEqual(len(self.objectListView.GetSelectedObjects()), 0)

    def testRefresh(self):
        rowIndex = 1
        primaryColumn = self.objectListView.GetPrimaryColumnIndex()
        person = self.objectListView[rowIndex]
        nameInList = self.objectListView.GetItem(rowIndex,
                                                 primaryColumn).GetText()
        self.assertEqual(nameInList, person.name)

        person.name = "Some different name"
        self.assertNotEqual(nameInList, person.name)

        self.objectListView.RefreshObject(person)
        self.assertEqual(
            self.objectListView.GetItem(rowIndex, primaryColumn).GetText(),
            person.name)
        person.name = nameInList

    def testSorting(self):
        self.objectListView.SortBy(0, False)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "Zoe Meliko")
        self.objectListView.SortBy(0, True)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "ae cummings")
        self.objectListView.SortBy(2, False)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "Ginger Hawk")
        self.objectListView.SortBy(2, True)
        self.assertEqual(
            self.objectListView.GetItem(0).GetText(), "Ian Janide")

    def testColumnResizing(self):
        widths = [
            self.objectListView.GetColumnWidth(i)
            for i in range(len(self.objectListView.columns))
        ]
        self.frame.SetSize(self.frame.GetSize() + (100, 100))
        self.objectListView.Layout()

        # The space filling columns should have increased in width, but the
        # others should be the same
        for (colIndex, oldWidth) in enumerate(widths):
            if self.objectListView.columns[colIndex].isSpaceFilling:
                self.assertTrue(
                    oldWidth < self.objectListView.GetColumnWidth(colIndex))
            else:
                self.assertEqual(oldWidth,
                                 self.objectListView.GetColumnWidth(colIndex))

    def testEditing(self):
        rowIndex = 1
        primaryColumnIndex = self.objectListView.GetPrimaryColumnIndex()
        self.objectListView.cellEditMode = ObjectListView.CELLEDIT_F2ONLY
        # self.objectListView.SortBy(primaryColumnIndex+1)

        originalName = self.objectListView[rowIndex].name
        self.assertEqual(
            self.objectListView.GetItem(rowIndex,
                                        primaryColumnIndex).GetText(),
            originalName)
        self.objectListView.DeselectAll()
        self.objectListView.SetItemState(
            rowIndex, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED,
            wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)

        # Fake an F2, change the value of the edit, and then fake a Return to
        # commit the change
        evt = wx.KeyEvent(wx.EVT_CHAR.evtType[0])
        evt.m_keyCode = wx.WXK_F2
        self.objectListView._HandleChar(evt)
        self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex)
        self.objectListView.cellEditor.SetValue("new name for X")
        self.objectListView.FinishCellEdit()
        evt.m_keyCode = wx.WXK_RETURN
        self.objectListView._HandleChar(evt)
        self.assertEqual(
            self.objectListView.GetItem(rowIndex,
                                        primaryColumnIndex).GetText(),
            "new name for X")

        # Put the original value back
        evt.m_keyCode = wx.WXK_F2
        self.objectListView._HandleChar(evt)
        self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex)
        self.objectListView.cellEditor.SetValue(originalName)
        self.objectListView.FinishCellEdit()
        evt.m_keyCode = wx.WXK_RETURN
        self.objectListView._HandleChar(evt)
        self.assertEqual(
            self.objectListView.GetItem(rowIndex,
                                        primaryColumnIndex).GetText(),
            originalName)

    def testLackOfCheckboxes(self):
        self.objectListView.InstallCheckStateColumn(None)

        firstObject = self.objectListView[0]
        self.assertIn(self.objectListView.IsChecked(firstObject),
                      (None, False))

        self.assertEqual(self.objectListView.GetCheckedObjects(), list())

        self.objectListView.Check(firstObject)
        self.assertIn(self.objectListView.IsChecked(firstObject),
                      (None, False))

    def testCreateCheckStateColumn(self):
        self.objectListView.InstallCheckStateColumn(None)

        firstObject = self.objectListView[0]
        self.assertIn(self.objectListView.IsChecked(firstObject),
                      (False, None))

        self.objectListView.CreateCheckStateColumn()
        self.objectListView.Check(firstObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), True)

    def testAutoCheckboxes(self):
        col = ColumnDefn("Check")
        self.objectListView.AddColumnDefn(col)
        self.assertTrue(col.checkStateGetter is None)
        self.assertTrue(col.checkStateSetter is None)

        self.objectListView.InstallCheckStateColumn(col)
        self.assertTrue(col.checkStateGetter is not None)
        self.assertTrue(col.checkStateSetter is not None)

        object = self.objectListView[0]
        self.assertEqual(self.objectListView.IsChecked(object), False)

        self.objectListView.Check(object)
        self.assertEqual(self.objectListView.IsChecked(object), True)

    def testCheckboxes(self):
        def myGetter(modelObject):
            return getattr(modelObject, "isChecked", False)

        def mySetter(modelObject, newValue):
            modelObject.isChecked = newValue

        self.objectListView.SetImageLists()
        col = ColumnDefn("Check",
                         checkStateGetter=myGetter,
                         checkStateSetter=mySetter)
        self.objectListView.AddColumnDefn(col)
        self.assertEqual(self.objectListView.checkStateColumn, col)

        firstObject = self.objectListView[1]
        lastObject = self.objectListView[4]
        self.assertEqual(self.objectListView.IsChecked(firstObject), False)
        self.assertEqual(self.objectListView.IsChecked(lastObject), False)

        self.objectListView.Check(firstObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), True)
        self.assertEqual(self.objectListView.IsChecked(lastObject), False)

        self.objectListView.Check(lastObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), True)
        self.assertEqual(self.objectListView.IsChecked(lastObject), True)
        if not isinstance(self.objectListView, VirtualObjectListView):
            self.assertEqual(set(self.objectListView.GetCheckedObjects()),
                             set([firstObject, lastObject]))

        self.objectListView.Uncheck(firstObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), False)
        self.assertEqual(self.objectListView.IsChecked(lastObject), True)

        self.objectListView.ToggleCheck(lastObject)
        self.assertEqual(self.objectListView.IsChecked(firstObject), False)
        self.assertEqual(self.objectListView.IsChecked(lastObject), False)

    def testNoAlternateColours(self):
        # When there is no alternate colors, each row's background colour
        # should be invalid
        self.objectListView.useAlternateBackColors = False
        self.objectListView.RepopulateList()
        bkgdColours = [
            self.getBackgroundColour(i)
            for i in range(self.objectListView.GetItemCount())
        ]
        self.assertFalse(
            self.objectListView.oddRowsBackColor in set(bkgdColours))
        self.assertFalse(
            self.objectListView.evenRowsBackColor in set(bkgdColours))

    def testAlternateColours(self):
        self.objectListView.useAlternateBackColors = True
        self.objectListView.RepopulateList()
        for i in range(self.objectListView.GetItemCount()):
            if i & 1:
                self.assertEqual(self.objectListView.oddRowsBackColor,
                                 self.getBackgroundColour(i))
            else:
                self.assertEqual(self.objectListView.evenRowsBackColor,
                                 self.getBackgroundColour(i))

    def getBackgroundColour(self, i):
        # There is no consistent way to get the background color of an item (i.e. one that
        # works on both normal and virtual lists) so we have to split this into a method
        # so we can change it for a virtual list
        return self.objectListView.GetItemBackgroundColour(i)

    def testEmptyListMsg(self):
        self.objectListView.SetObjects(None)
        self.assertTrue(self.objectListView.stEmptyListMsg.IsShown())

        self.objectListView.SetObjects(persons)
        self.assertFalse(self.objectListView.stEmptyListMsg.IsShown())

    def testFilteringHead(self):
        self.objectListView.SetFilter(Filter.Head(1))
        self.objectListView.SetObjects(persons)
        self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1)
        self.assertEqual(self.objectListView.GetFilteredObjects()[0],
                         persons[0])

        self.objectListView.SetFilter(None)

    def testFilteringTail(self):
        self.objectListView.SetFilter(Filter.Tail(1))
        self.objectListView.SetObjects(persons)
        # The group list will have a group header at row 0 so skip it
        if isinstance(self.objectListView, GroupListView):
            firstDataIndex = 1
        else:
            firstDataIndex = 0
        self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1)
        self.assertEqual(self.objectListView.GetFilteredObjects()[0],
                         persons[-1])

        self.objectListView.SetFilter(None)

    def testFilteringPredicate(self):
        males = [x for x in persons if x.sex == "Male"]
        self.objectListView.SetFilter(
            Filter.Predicate(lambda person: person.sex == "Male"))
        self.objectListView.SetSortColumn(personColumns[-1])
        self.objectListView.SetObjects(persons)

        self.assertEqual(set(self.objectListView.GetFilteredObjects()),
                         set(males))

        self.objectListView.SetFilter(None)

    def testFilteringTextSearch(self):
        containsF = [
            x for x in persons
            if "f" in x.sex.lower() or "f" in x.name.lower()
        ]

        self.objectListView.SetFilter(
            Filter.TextSearch(self.objectListView, text="f"))
        self.objectListView.SetObjects(persons)
        self.assertEqual(set(self.objectListView.GetFilteredObjects()),
                         set(containsF))

        self.objectListView.SetFilter(None)

    def testFilteringChain(self):
        filterMale = Filter.Predicate(lambda person: person.sex == "Male")
        filterContainsF = Filter.TextSearch(self.objectListView, text="f")
        self.objectListView.SetFilter(Filter.Chain(filterMale,
                                                   filterContainsF))
        self.objectListView.SetObjects(persons)
        self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1)
        self.assertEqual(self.objectListView.GetFilteredObjects()[0].name,
                         "Eric Fandango")

        self.objectListView.SetFilter(None)
예제 #4
0
class exportDialog(wx.Dialog):
    def __init__(self, title, filename, name="exportDialog"):
        LoadLog.LogMsg(gen.logger.debug, u"打开数据导出对话框")
        wx.Dialog.__init__(self,
                           None,
                           -1,
                           title=title,
                           style=wx.DEFAULT_DIALOG_STYLE)
        self.filename = filename
        self.panel = panel = wx.Panel(self, -1)
        self.plist = ObjectListView(panel,
                                    id=-1,
                                    size=(-1, -1),
                                    style=wx.LC_REPORT | wx.LC_VRULES
                                    | wx.LC_HRULES | wx.BORDER_SUNKEN)

        self.setResults(self.filename)

        font = wx.Font(12, wx.MODERN, wx.NORMAL, wx.NORMAL, False, u'Consolas')
        text_information = wx.StaticText(panel, label=u"导出数据")
        text_information.SetFont(font)
        line = wx.StaticLine(panel)
        #self.SetBackgroundColour("while")

        selectbtn = wx.Button(panel,
                              label=u"全选",
                              size=(80, 22),
                              id=wx.ID_SELECTALL)
        unselectbtn = wx.Button(panel,
                                label=u"取消",
                                size=(80, 22),
                                id=gen.ID_UNSELECTALL)
        add_t = wx.StaticText(panel, label=u"导出位置:")
        self.path_t = path_t = wx.TextCtrl(
            panel,
            validator=InputValidator("save_path_t"),
            style=wx.TE_READONLY)
        #self.path_t.SetBackgroundColour("light blue")
        pathbtn = wx.Button(panel, label=u"选择", size=(80, 25), id=wx.ID_SAVEAS)
        button_save = wx.Button(panel, label=u"确定", size=(80, 25), id=wx.ID_OK)
        button_cancel = wx.Button(panel,
                                  label=u"取消",
                                  size=(80, 25),
                                  id=wx.ID_CANCEL)

        sizer = wx.GridBagSizer(7, 5)
        sizer.Add(text_information,
                  pos=(0, 0),
                  span=(1, 3),
                  flag=wx.TOP | wx.LEFT,
                  border=10)
        sizer.Add(line,
                  pos=(1, 0),
                  span=(1, 5),
                  flag=wx.EXPAND | wx.TOP,
                  border=0)
        sizer.Add(self.plist,
                  pos=(2, 0),
                  span=(1, 5),
                  flag=wx.EXPAND | wx.RIGHT | wx.LEFT,
                  border=10)
        sizer.Add(selectbtn,
                  pos=(3, 0),
                  span=(1, 1),
                  flag=wx.RIGHT | wx.LEFT,
                  border=10)
        sizer.Add(unselectbtn,
                  pos=(3, 1),
                  span=(1, 1),
                  flag=wx.RIGHT | wx.LEFT,
                  border=10)
        sizer.Add(add_t, pos=(4, 0), span=(1, 1), flag=wx.LEFT, border=10)
        sizer.Add(path_t,
                  pos=(5, 0),
                  span=(1, 4),
                  flag=wx.EXPAND | wx.LEFT,
                  border=10)
        sizer.Add(pathbtn, pos=(5, 4), span=(1, 1), flag=wx.RIGHT, border=10)
        sizer.Add(button_save,
                  pos=(7, 3),
                  span=(1, 1),
                  flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_RIGHT,
                  border=10)
        sizer.Add(button_cancel,
                  pos=(7, 4),
                  span=(1, 1),
                  flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_RIGHT,
                  border=10)
        #sizer.AddGrowableCol(0)
        panel.SetSizerAndFit(sizer)
        sizer.SetSizeHints(self)

        #self.OnSelectAll = self.evt.OnSelectAll

        self.Bind(wx.EVT_BUTTON, self.OnSelectAll, id=wx.ID_SELECTALL)
        self.Bind(wx.EVT_BUTTON, self.OnSelectAll, id=gen.ID_UNSELECTALL)
        self.Bind(wx.EVT_BUTTON, self.OnSelectFile, id=wx.ID_SAVEAS)

    def setResults(self, filename):
        self.plist.SetColumns([
            ColumnDefn(u"序号", "center", 40, "id"),
            ColumnDefn(u"名称", "left", 80, "name"),
            ColumnDefn(u"程序", "left", 120, "programe"),
            ColumnDefn(u"备注", "left", 100, "note"),
        ])
        self.plist.CreateCheckStateColumn()
        self.list_data = DataHandle(filename).handleList()
        self.plist.SetObjects(self.list_data)

    def OnSelectAll(self, event):
        objects = self.plist.GetObjects()
        for obj in objects:
            if event.GetId() == wx.ID_SELECTALL:
                self.plist.SetCheckState(obj, True)
            else:
                self.plist.SetCheckState(obj, False)
        self.plist.RefreshObjects(objects)

    def OnSelectFile(self, event):
        wildcard = "Json File (*.json)|*.json|" \
                    "All files (*.*)|*.*"
        dialog = wx.FileDialog(self, u"选择文件", "", "", wildcard,
                               wx.SAVE | wx.OVERWRITE_PROMPT)
        if dialog.ShowModal() == wx.ID_OK:
            self.filepath = dialog.GetPath()
            self.path_t.SetValue(self.filepath)
        dialog.Destroy()

    def handleExportDlg(self):
        allobj = self.plist.GetObjects()
        tbool = []
        LoadLog.LogMsg(gen.logger.debug, u"检测选项")
        for obj in allobj:
            if self.plist.IsChecked(obj) == True:
                tbool.append(self.plist.IsChecked(obj))
        if tbool.count(True) == 0:
            LoadLog.LogMsg(gen.logger.warning, u"未选取任何要导出的项目")
            wx.MessageBox(u"未选取内容,没有数据导出",
                          u'警告',
                          wx.OK | wx.ICON_WARNING,
                          parent=self.panel)
            return
        else:
            newDataDict = {}
            #print u"=====读取的文件:",self.filename
            readFileData = DataHandle(self.filename)

            pdata = readFileData.ReadData()
            #print u"====导出对话框从文件读取的字典:",pdata
            for obj in allobj:
                if self.plist.IsChecked(obj) == True:
                    kid = obj.kid
                    #print u"###选中的kid",kid
                    #print u"###字典,kid 对应的项",pdata[kid]
                    newDataDict[kid] = pdata[kid]
            try:
                print newDataDict
                exportObj = DataHandle(self.filepath)
                exportObj.WriteData(newDataDict)
                wx.MessageBox(u"数据文件成功导出!", u'信息', wx.OK | wx.ICON_INFORMATION)
                LoadLog.LogMsg(gen.logger.info, u"成功导出数据到文件")
            except:
                wx.MessageBox(u"保存文件出错,请检查文件权限", u'错误', wx.OK | wx.ICON_ERROR)
                LoadLog.LogMsg(gen.logger.warning, u"导出文件出错")
                return
예제 #5
0
class MainPanel(wx.Panel):
    #----------------------------------------------------------------------
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
        self.products = [
            Book("wxPython in Action", "Robin Dunn", "1932394621", "Manning"),
            Book("Hello World", "Warren and Carter Sande", "1933988495",
                 "Manning")
        ]

        self.dataOlv = ObjectListView(self,
                                      wx.ID_ANY,
                                      style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.setBooks()

        # Allow the cell values to be edited when double-clicked
        self.dataOlv.cellEditMode = ObjectListView.CELLEDIT_SINGLECLICK

        # create an update button
        updateBtn = wx.Button(self, wx.ID_ANY, "Update OLV")
        updateBtn.Bind(wx.EVT_BUTTON, self.updateControl)

        # Create some sizers
        mainSizer = wx.BoxSizer(wx.VERTICAL)

        mainSizer.Add(self.dataOlv, 1, wx.ALL | wx.EXPAND, 5)
        mainSizer.Add(updateBtn, 0, wx.ALL | wx.CENTER, 5)
        self.SetSizer(mainSizer)

    #----------------------------------------------------------------------
    def updateControl(self, event):
        """
 
        """
        print("updating...")
        product_dict = [{
            "title": "Core Python Programming",
            "author": "Wesley Chun",
            "date": "0132269937",
            "URL": "Prentice Hall"
        }, {
            "title": "Python Programming for the Absolute Beginner",
            "author": "Michael Dawson",
            "date": "1598631128",
            "URL": "Course Technology"
        }, {
            "title": "Learning Python",
            "author": "Mark Lutz",
            "date": "0596513984",
            "URL": "O'Reilly"
        }]
        data = self.products + product_dict
        self.dataOlv.CreateCheckStateColumn()
        self.dataOlv.SetObjects(data)
        self.CheckBoxes = True

    #----------------------------------------------------------------------
    def setBooks(self, data=None):
        self.dataOlv.SetColumns([
            ColumnDefn("Title", "left", 220, "title"),
            ColumnDefn("Author", "left", 200, "author"),
            ColumnDefn("date", "right", 100, "date"),
            ColumnDefn("URL", "left", 180, "URL")
        ])

        self.dataOlv.SetObjects(self.products)
예제 #6
0
class ModifyPanel(wx.Panel):
    """"""
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)
        main_Sizer = wx.BoxSizer(wx.VERTICAL)

        #strinfo=u" 对apk渠道各个资源的配置写在channelconfig.xlsx,并且放到程序目录下"
        #self.infosta= wx.StaticText(self, -1, strinfo)

        #select a apk ui
        self.apk_Box = wx.StaticBox(self, -1, u"Apk")
        apkBoxSizer = wx.StaticBoxSizer(self.apk_Box, wx.HORIZONTAL)
        self.apksta = wx.StaticText(self, -1, u"apk包:  ")
        self.apkdiredit = wx.TextCtrl(self, -1, "")
        self.apkdirbtn = wx.Button(self, label=u"...")
        apkBoxSizer.Add(self.apksta, 0, wx.ALL | wx.ALIGN_TOP, 5)
        apkBoxSizer.Add(self.apkdiredit, 1, wx.ALL | wx.ALIGN_TOP, 5)
        apkBoxSizer.Add(self.apkdirbtn, 0, wx.ALL | wx.ALIGN_TOP, 5)

        #select a resource ui
        """
        self.res_Box = wx.StaticBox(self, -1, u"Resource")
        resBoxSizer = wx.StaticBoxSizer(self.res_Box, wx.HORIZONTAL)
        self.ressta = wx.StaticText(self, -1, u"资源目录:")
        self.resdiredit = wx.TextCtrl(self, -1, "")
        self.resdirbtn = wx.Button(self, label=u"...")
        resBoxSizer.Add(self.ressta, 0, wx.ALL|wx.ALIGN_TOP, 5)
        resBoxSizer.Add(self.resdiredit, 1, wx.ALL|wx.ALIGN_TOP, 5)
        resBoxSizer.Add(self.resdirbtn, 0, wx.ALL|wx.ALIGN_TOP, 5)
        """
        #set out put directory
        self.outPut_Box = wx.StaticBox(self, -1, u"Output")
        outPutBoxSizer = wx.StaticBoxSizer(self.outPut_Box, wx.HORIZONTAL)
        self.outPutsta = wx.StaticText(self, -1, u"输出目录:")
        self.outPutdiredit = wx.TextCtrl(self, -1, "")
        self.outPutdirbtn = wx.Button(self, label=u"...")
        outPutBoxSizer.Add(self.outPutsta, 0, wx.ALL | wx.ALIGN_TOP, 5)
        outPutBoxSizer.Add(self.outPutdiredit, 1, wx.ALL | wx.ALIGN_TOP, 5)
        outPutBoxSizer.Add(self.outPutdirbtn, 0, wx.ALL | wx.ALIGN_TOP, 5)

        #layout operate button
        #The list static box
        self.choiceList_Box = wx.StaticBox(self, -1, u"列表")
        self.choiceSel = wx.Choice(self, -1, choices=[u"全不选", u"反选", u"全选"])
        self.choiceSel.SetSelection(0)
        self.keyStoreChoiceSel = wx.Choice(self, -1)
        choice_BoxSizer = wx.StaticBoxSizer(self.choiceList_Box, wx.HORIZONTAL)
        choice_BoxSizer.Add(self.choiceSel, 0, wx.ALL | wx.ALIGN_TOP, 5)
        choice_BoxSizer.Add(self.keyStoreChoiceSel, 0, wx.ALL | wx.ALIGN_TOP,
                            5)

        self.saveBtn = wx.Button(self, label=u"保存UI")
        self.GenBtn = wx.Button(self, label=u"生成")

        operate_Sizer = wx.BoxSizer(wx.HORIZONTAL)
        operate_Sizer.Add(choice_BoxSizer, 0,
                          wx.ALIGN_LEFT | wx.EXPAND | wx.ALL, 5)
        operate_Sizer.Add(self.saveBtn, 0, wx.ALIGN_LEFT | wx.EXPAND | wx.ALL,
                          5)
        operate_Sizer.Add(self.GenBtn, 0, wx.ALIGN_LEFT | wx.EXPAND | wx.ALL,
                          5)

        #add listctrl
        self.resultsOlv = ObjectListView(self,
                                         style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.InitColumns()

        self.progress = wx.Gauge(self, -1)
        self.progress.SetRange(100)

        #main_Sizer.Add(self.infosta, 0, wx.EXPAND|wx.ALL, 5)
        main_Sizer.Add(apkBoxSizer, 0, wx.EXPAND | wx.ALL, 5)
        #main_Sizer.Add(resBoxSizer, 0, wx.EXPAND|wx.ALL, 5)
        main_Sizer.Add(outPutBoxSizer, 0, wx.EXPAND | wx.ALL, 5)
        main_Sizer.Add(self.resultsOlv, 1, wx.EXPAND | wx.ALL, 5)
        main_Sizer.Add(self.progress, 0, wx.EXPAND | wx.ALL, 5)
        main_Sizer.Add(operate_Sizer, 0, wx.EXPAND | wx.ALL, 5)
        self.SetSizer(main_Sizer)

        self.apkdirbtn.Bind(wx.EVT_BUTTON, self.onSelApkButton)
        #self.resdirbtn.Bind(wx.EVT_BUTTON, self.onSelResButton)
        self.outPutdirbtn.Bind(wx.EVT_BUTTON, self.onSelOutDirButton)
        self.choiceSel.Bind(wx.EVT_CHOICE, self.OnSelChoice)
        self.saveBtn.Bind(wx.EVT_BUTTON, self.onSaveUIButton)
        self.GenBtn.Bind(wx.EVT_BUTTON, self.onGenButton)

        #Set choice change event.
        self.choicesDict = {}
        self.choicesDict[u"全不选"] = self.ListCheckNotSel
        self.choicesDict[u"反选"] = self.ListCheckInverSel
        self.choicesDict[u"全选"] = self.ListCheckSelAll

        self.progress.SetValue(0)
        self.loadChannelCofigToList()

    #=======================Init End=====================================#

    def loadChannelCofigToList(self):
        """ Load Channel config then show to UI listCtrl"""

        UIConfigParser.getInstance().Read()
        ChannelResConfigParser.getInstance().Read()
        self.test_data = []
        configData = ChannelResConfigParser.getInstance().getConfigData()
        for (key, value) in configData.items():
            if key == "keystore":
                continue
            self.test_data.append(Results(str(key), "", ""))
        #Set value to list.
        self.resultsOlv.SetObjects(self.test_data)
        objects = self.resultsOlv.GetObjects()
        #Refresh UI.
        self.resultsOlv.RefreshObjects(objects)
        if configData.has_key("keystore"):
            for (key, value) in configData["keystore"].items():
                self.keyStoreChoiceSel.Append(key)

        self.keyStoreChoiceSel.SetSelection(0)
        self.apkdiredit.SetValue(UIConfigParser.getInstance().getApkPath())
        self.outPutdiredit.SetValue(
            UIConfigParser.getInstance().getOutPutPath())

    def InitColumns(self):
        """Init list colums."""

        self.resultsOlv.SetColumns([
            ColumnDefn(u"渠道", "left", 150, "channal_id"),
            #ColumnDefn(u"渠道信息", "left", 160, "channal_alias"),
            #ColumnDefn(u"渠道特制", "left", 320, "channal_custom")
        ])
        self.resultsOlv.CreateCheckStateColumn()

    def onSelApkButton(self, event):
        file_wildcard = "source file(*.apk)|*.apk"
        dialog = wx.FileDialog(
            self,
            "Get a apk file",
            #os.getcwd(),
            style=wx.FD_OPEN | wx.FD_CHANGE_DIR,
            wildcard=file_wildcard)
        if dialog.ShowModal() != wx.ID_OK:
            return
        self.apkdiredit.SetValue(dialog.GetPath())
        pass

    def onSelResButton(self, event):
        dialog = wx.DirDialog(None,
                              u"选择资源目录:",
                              style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
        if dialog.ShowModal() == wx.ID_OK:
            self.resdiredit.SetValue(dialog.GetPath())

    def onSelOutDirButton(self, event):
        dialog = wx.DirDialog(None,
                              u"选择输出目录:",
                              style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
        if dialog.ShowModal() == wx.ID_OK:
            self.outPutdiredit.SetValue(dialog.GetPath())
        pass

    def onSaveUIButton(self, event):
        self.saveUiInfo()

    def saveUiInfo(self):
        UIConfigParser.getInstance().setApkPath(self.apkdiredit.GetValue())
        UIConfigParser.getInstance().setOutPutPath(
            self.outPutdiredit.GetValue())
        UIConfigParser.getInstance().Write()

    def onGenButton(self, event):
        apkFile = self.apkdiredit.GetValue()
        if apkFile.strip() == "":
            self.messageBox(u"未选择APK")
            return
        if self.fileNoExist(apkFile):
            return
        """
        resdir = self.resdiredit.GetValue()
        if resdir.strip() == "":
            self.messageBox(u"未选择资源目录")
            return
        if self.fileNoExist(resdir):
            return
        """
        outPutdir = self.outPutdiredit.GetValue()
        if outPutdir.strip() == "":
            self.messageBox(u"未选择输出目录")
            return
        if self.fileNoExist(outPutdir):
            return

        iSel = self.keyStoreChoiceSel.GetSelection()
        keyStore = self.keyStoreChoiceSel.GetString(iSel)
        if keyStore.strip() == "":
            self.messageBox(u"keyStore为空")
            return
        if self.fileNoExist("%s/%s" % (sys.path[0], keyStore)):
            return

        #If the channel be selected,it's value is 1.
        #otherwise it's value is 0.
        selChanneldict = {}
        objects = self.resultsOlv.GetObjects()
        for obj in objects:
            if self.resultsOlv.GetCheckState(obj, 0):
                selChanneldict[self.resultsOlv.GetStringValueAt(obj, 1)] = 0

        #No select channel.
        if len(selChanneldict) <= 0:
            self.messageBox(u"未选择渠道")
            return

        self.saveUiInfo()
        #Call parse
        modify.callParse(selChanneldict, apkFile, outPutdir, keyStore,
                         self.progress)
        dlg = wx.MessageDialog(None, u"渠道处理完成", u"", wx.wx.OK)
        result = dlg.ShowModal()
        dlg.Destroy()
        self.progress.SetValue(0)

    def fileNoExist(self, filename):
        if os.path.exists(filename):
            return False
        dlg = wx.MessageDialog(None, u"%s 不存在" % (filename), u"错误",
                               wx.OK | wx.ICON_ERROR)
        result = dlg.ShowModal()
        dlg.Destroy()
        return True

    def messageBox(self, errorMsg):
        dlg = wx.MessageDialog(None, errorMsg, u"错误", wx.OK | wx.ICON_ERROR)
        result = dlg.ShowModal()
        dlg.Destroy()

    #========================choice event====================#
    def OnSelChoice(self, event):
        """Choice change event"""

        iSel = self.choiceSel.GetSelection()
        selString = self.choiceSel.GetString(iSel)
        self.choicesDict[selString]()

    def ListCheckSelAll(self):
        """Select all channals"""

        objects = self.resultsOlv.GetObjects()
        for obj in objects:
            self.resultsOlv.SetCheckState(obj, True)
        self.resultsOlv.RefreshObjects(objects)

    def ListCheckInverSel(self):
        """Inverse selection"""

        objects = self.resultsOlv.GetObjects()
        for obj in objects:
            self.resultsOlv.SetCheckState(
                obj, not self.resultsOlv.GetCheckState(obj))
        self.resultsOlv.RefreshObjects(objects)

    def ListCheckNotSel(self):
        """No select channals """

        objects = self.resultsOlv.GetObjects()
        for obj in objects:
            self.resultsOlv.SetCheckState(obj, False)
        self.resultsOlv.RefreshObjects(objects)
예제 #7
0
class LeftPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)
        self.plots = []
        self.pickedColors = []
        self.colors = self.setupColors()
        self.plotsOlv = ObjectListView(self,
                                       wx.ID_ANY,
                                       style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                       useAlternateBackColors=False)
        self.plotsOlv.Bind(OLVEvent.EVT_ITEM_CHECKED, self.checkboxClicked)
        self.plotsOlv.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick)
        #self.plotsOlv.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.onRightClick)
        self.getPlots()
        self.setColumns()
        self.plotsOlv.CreateCheckStateColumn()
        self.plotsOlv.SetObjects(self.plots)
        bsizer = wx.BoxSizer()
        #bsizer.Add(lb, 1, wx.EXPAND)
        bsizer.Add(self.plotsOlv, 1, wx.EXPAND)
        self.SetSizer(bsizer)
        self.checkedPlots = {}
        pub.subscribe(self.refreshList, 'list.updated')
        pub.subscribe(self.checkboxClicked, 'checkbox.clicked')
        pub.subscribe(self.onSavePlot, 'file.savePlot')
        pub.subscribe(self.onDelete, 'edit.delete')

    def onDoubleClick(self, event):
        #print event.m_itemIndex
        dlg = wx.ColourDialog(self)
        # Ensure the full colour dialog is displayed,
        # not the abbreviated version.
        dlg.GetColourData().SetChooseFull(True)
        if dlg.ShowModal() == wx.ID_OK:
            data = dlg.GetColourData()
        color = data.GetColour().Get()
        htmlColor = "#%02x%02x%02x" % color
        dlg.Destroy()
        index = event.m_itemIndex
        stored.plots[index]['Color'] = htmlColor
        self.plots[index].icon = self.plots[index].createIcon(
            self.plotsOlv, htmlColor)
        self.plotsOlv.RefreshObject(self.plots[index])
        pub.sendMessage('item.checked', data=self.checkedPlots)

    def onDelete(self):
        if self.plotsOlv.GetSelectedObjects():
            objectList = self.plotsOlv.GetSelectedObjects()
            for object in objectList:
                index = object.index
                stored.plots.pop(index)
                self.plots.pop(index)
            self.refreshList()
            pub.sendMessage('update.statusBar', data="Plots deleted!")
        else:
            pub.sendMessage(
                'update.statusBar',
                data="Cannot delete plots! Please select one ore more plots!")

    def onSavePlot(self):
        if self.plotsOlv.GetSelectedObject():
            index = self.plotsOlv.GetSelectedObject().index
            data = stored.plots[index]
            outputString = "%s\n" % data['Title']
            outputString += "%s\n" % data['Type']
            outputString += "%s,%s\n" % (data['xTitle'], data['xTitle'])
            for idx, row in enumerate(data['xData'].tolist()):
                z = 0
                outputString += "%1.3f,%1.3f\n" % (data['xData'][idx],
                                                   data['yData'][idx])
            if stored.plots[index]['Type'] == "DifferenceMap" or stored.plots[
                    index]['Type'] == "DistanceMap":
                outputString += "z-Data:\n"
                numpy.set_printoptions(threshold=numpy.nan)
                zData = numpy.array_str(data['zData'])
                outputString += zData
            dialog = wx.FileDialog(None,
                                   message="Save plot data as ...",
                                   defaultDir=os.getcwd(),
                                   defaultFile=stored.plots[index]['Title'],
                                   wildcard="*.dat",
                                   style=wx.SAVE | wx.OVERWRITE_PROMPT)
            if dialog.ShowModal() == wx.ID_OK:
                path = dialog.GetPath()
                dataFile = open(path, 'w')
                print "\nSaving data...",
                dataFile.write(outputString)
                print "Done!\n"
                dataFile.close()
            dialog.Destroy()
            pub.sendMessage('update.statusBar', data="Plot data saved!")
        else:
            pub.sendMessage('update.statusBar',
                            data="Cannot save data! Please select one plot!")

    def setupColors(self):
        cnames = {
            'aliceblue': '#F0F8FF',
            'antiquewhite': '#FAEBD7',
            'aqua': '#00FFFF',
            'aquamarine': '#7FFFD4',
            'azure': '#F0FFFF',
            'beige': '#F5F5DC',
            'bisque': '#FFE4C4',
            'black': '#000000',
            'blanchedalmond': '#FFEBCD',
            'blue': '#0000FF',
            'blueviolet': '#8A2BE2',
            'brown': '#A52A2A',
            'burlywood': '#DEB887',
            'cadetblue': '#5F9EA0',
            'chartreuse': '#7FFF00',
            'chocolate': '#D2691E',
            'coral': '#FF7F50',
            'cornflowerblue': '#6495ED',
            'cornsilk': '#FFF8DC',
            'crimson': '#DC143C',
            'cyan': '#00FFFF',
            'darkblue': '#00008B',
            'darkcyan': '#008B8B',
            'darkgoldenrod': '#B8860B',
            'darkgray': '#A9A9A9',
            'darkgreen': '#006400',
            'darkkhaki': '#BDB76B',
            'darkmagenta': '#8B008B',
            'darkolivegreen': '#556B2F',
            'darkorange': '#FF8C00',
            'darkorchid': '#9932CC',
            'darkred': '#8B0000',
            'darksalmon': '#E9967A',
            'darkseagreen': '#8FBC8F',
            'darkslateblue': '#483D8B',
            'darkslategray': '#2F4F4F',
            'darkturquoise': '#00CED1',
            'darkviolet': '#9400D3',
            'deeppink': '#FF1493',
            'deepskyblue': '#00BFFF',
            'dimgray': '#696969',
            'dodgerblue': '#1E90FF',
            'firebrick': '#B22222',
            'floralwhite': '#FFFAF0',
            'forestgreen': '#228B22',
            'fuchsia': '#FF00FF',
            'gainsboro': '#DCDCDC',
            'ghostwhite': '#F8F8FF',
            'gold': '#FFD700',
            'goldenrod': '#DAA520',
            'gray': '#808080',
            'green': '#008000',
            'greenyellow': '#ADFF2F',
            'honeydew': '#F0FFF0',
            'hotpink': '#FF69B4',
            'indianred': '#CD5C5C',
            'indigo': '#4B0082',
            'ivory': '#FFFFF0',
            'khaki': '#F0E68C',
            'lavender': '#E6E6FA',
            'lavenderblush': '#FFF0F5',
            'lawngreen': '#7CFC00',
            'lemonchiffon': '#FFFACD',
            'lightblue': '#ADD8E6',
            'lightcoral': '#F08080',
            'lightcyan': '#E0FFFF',
            'lightgoldenrodyellow': '#FAFAD2',
            'lightgreen': '#90EE90',
            'lightgray': '#D3D3D3',
            'lightpink': '#FFB6C1',
            'lightsalmon': '#FFA07A',
            'lightseagreen': '#20B2AA',
            'lightskyblue': '#87CEFA',
            'lightslategray': '#778899',
            'lightsteelblue': '#B0C4DE',
            'lightyellow': '#FFFFE0',
            'lime': '#00FF00',
            'limegreen': '#32CD32',
            'linen': '#FAF0E6',
            'magenta': '#FF00FF',
            'maroon': '#800000',
            'mediumaquamarine': '#66CDAA',
            'mediumblue': '#0000CD',
            'mediumorchid': '#BA55D3',
            'mediumpurple': '#9370DB',
            'mediumseagreen': '#3CB371',
            'mediumslateblue': '#7B68EE',
            'mediumspringgreen': '#00FA9A',
            'mediumturquoise': '#48D1CC',
            'mediumvioletred': '#C71585',
            'midnightblue': '#191970',
            'mintcream': '#F5FFFA',
            'mistyrose': '#FFE4E1',
            'moccasin': '#FFE4B5',
            'navajowhite': '#FFDEAD',
            'navy': '#000080',
            'oldlace': '#FDF5E6',
            'olive': '#808000',
            'olivedrab': '#6B8E23',
            'orange': '#FFA500',
            'orangered': '#FF4500',
            'orchid': '#DA70D6',
            'palegoldenrod': '#EEE8AA',
            'palegreen': '#98FB98',
            'paleturquoise': '#AFEEEE',
            'palevioletred': '#DB7093',
            'papayawhip': '#FFEFD5',
            'peachpuff': '#FFDAB9',
            'peru': '#CD853F',
            'pink': '#FFC0CB',
            'plum': '#DDA0DD',
            'powderblue': '#B0E0E6',
            'purple': '#800080',
            'red': '#FF0000',
            'rosybrown': '#BC8F8F',
            'royalblue': '#4169E1',
            'saddlebrown': '#8B4513',
            'salmon': '#FA8072',
            'sandybrown': '#FAA460',
            'seagreen': '#2E8B57',
            'seashell': '#FFF5EE',
            'sienna': '#A0522D',
            'silver': '#C0C0C0',
            'skyblue': '#87CEEB',
            'slateblue': '#6A5ACD',
            'slategray': '#708090',
            'snow': '#FFFAFA',
            'springgreen': '#00FF7F',
            'steelblue': '#4682B4',
            'tan': '#D2B48C',
            'teal': '#008080',
            'thistle': '#D8BFD8',
            'tomato': '#FF6347',
            'turquoise': '#40E0D0',
            'violet': '#EE82EE',
            'wheat': '#F5DEB3',
            'white': '#FFFFFF',
            'whitesmoke': '#F5F5F5',
            'yellow': '#FFFF00',
            'yellowgreen': '#9ACD32'
        }
        return cnames

    def setColumns(self, data=None):
        self.plotsOlv.SetColumns([
            #imageGetter: "icon" is a property of plotListEntry objects
            ColumnDefn("Title", "left", 500, "title", imageGetter="icon")
        ])
        #print "hallo"

    def refreshList(self):
        self.plotsOlv.ClearAll()
        self.plots = []
        self.pickedColors = []
        self.colors = self.setupColors()
        self.getPlots()
        self.setColumns()
        self.plotsOlv.CreateCheckStateColumn()
        self.plotsOlv.SetObjects(self.plots)
        self.checkedPlots = {}

    def getPlots(self):
        for idx, plot in enumerate(stored.plots):
            #print self.colors
            if not "Color" in plot:
                allowedColor = False
                preferredCnames = {
                    'blue': '#0000FF',
                    'green': '#008000',
                    'red': '#FF00FF',
                    'orange': '#FFA500',
                    'violet': '#EE82EE',
                    'magenta': '#FF0000'
                }
                while not allowedColor:
                    if len(preferredCnames) > 0:
                        color = preferredCnames.popitem()[1]
                    else:
                        color = self.colors.popitem()[1]
                    if not color in self.pickedColors:
                        allowedColor = True
                    self.pickedColors.append(color)
                    #print color
                plot['Color'] = color
            else:
                pass
            olv = self.plotsOlv
            self.plots.append(
                PlotListEntry(olv, plot['Type'], plot['Title'], plot['Color'],
                              idx))
        #print self.plots

    def checkboxClicked(self, data):
        data.rowModel.toggleState()
        index = data.rowModel.index
        isChecked = data.rowModel.isChecked
        currentPlot = stored.plots[index]
        currentId = index
        currentType = currentPlot["Type"]
        allowed = True
        nonSuperposeableTypes = ["DifferenceMap", "DistanceMap"]
        if len(self.checkedPlots) == 0 and isChecked:
            #this is the first checked plot, just add it
            self.checkedPlots[currentId] = currentPlot
            #print "Added first plot"
        elif len(self.checkedPlots) > 0 and isChecked:
            #check if of same type as other checked plots
            for key, value in self.checkedPlots.iteritems():
                #value will be a graph dict from mtsslWizard
                if currentType != value[
                        "Type"] or currentType in nonSuperposeableTypes:
                    allowed = False
                    #print "False, cannot add plot"
            if allowed:
                self.checkedPlots[currentId] = currentPlot
                #print "True, plot added"
            else:
                #self.lb.Check(index, check=False)
                print "New:"
                print self.plotsOlv.GetCheckState(data.rowModel)
                self.plotsOlv.SetCheckState(data.rowModel, False)
                #data.rowModel.setCheckedState(False)
                pub.sendMessage(
                    'update.statusBar',
                    data="Plots are not of same type or not superposeable!")
                print self.plotsOlv.GetCheckState(data.rowModel)
                self.plotsOlv.RefreshObject(data.rowModel)
        elif len(self.checkedPlots) > 0 and not isChecked:
            self.checkedPlots.pop(currentId, None)
            #print "removed plot from plot list"
        pub.sendMessage('item.checked', data=self.checkedPlots)
class RescaleToItemDialog(wx.Dialog):

    def __init__(self, parent, objects, cols=None, id=wx.ID_ANY,
                 title="Choose an item and the amount",
                 pos=wx.DefaultPosition, size=(400, 400),
                 style=wx.DEFAULT_FRAME_STYLE, name="Rescale to Item Dialog"):
        '''
        A dialog to get the selected objects (components or chemicals) and the
        amount (moles or grams). The dialog is used in the conventional batch
        calculation (moles to masses) as well as in the inverse (masses to
        moles).
        '''

        super(RescaleToItemDialog, self).__init__(parent, id, title, pos, size,
                                                  style, name)

        panel = wx.Panel(self)

        self.olv = ObjectListView(panel, wx.ID_ANY,
                                  style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                  useAlternateBackColors=True)
        self.olv.evenRowsBackColor = "#DCF0C7"
        self.olv.oddRowsBackColor = "#FFFFFF"

        self.SetObjects(objects, cols)

        scalelbl = wx.StaticText(panel, -1, "Amount:")
        self.amount = wx.TextCtrl(panel, -1, "{0:6.2f}".format(1.0).strip())

        buttonOk = wx.Button(panel, id=wx.ID_OK)
        buttonOk.SetDefault()
        buttonCancel = wx.Button(panel, id=wx.ID_CANCEL)

        # layout

        sizer = wx.GridBagSizer(vgap=5, hgap=5)
        sizer.Add(self.olv, pos=(0, 0), span=(1, 4), flag=wx.GROW | wx.ALL,
                  border=5)
        sizer.Add(scalelbl,  pos=(1, 0),
                  flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.BOTTOM,
                  border=10)
        sizer.Add(self.amount, pos=(1, 1), span=(1, 2),
                  flag=wx.EXPAND | wx.ALIGN_LEFT | wx.RIGHT | wx.BOTTOM,
                  border=10)
        sizer.Add(buttonCancel, pos=(2, 2), flag=wx.BOTTOM, border=10)
        sizer.Add(buttonOk, pos=(2, 3), flag=wx.BOTTOM | wx.RIGHT, border=10)
        sizer.AddGrowableCol(1)
        sizer.AddGrowableRow(0)
        panel.SetSizer(sizer)

    def SetObjects(self, objects, cols):
        '''Set the OLV columns and put current objects in the OLV'''

        self.olv.SetColumns(cols)
        self.olv.CreateCheckStateColumn()
        self.olv.SetObjects(objects)

    def GetCurrentSelections(self):
        '''Return the entered amount and objects selected in the dialog.'''

        return self.amount.GetValue(), self.olv.GetCheckedObjects()
예제 #9
0
class ProvPanel(wx.Panel):
    def __init__(self, parent, id, style):
        LoadLog.LogMsg(gen.logger.info, u"加载下边框架面板")
        wx.Panel.__init__(self, id=id, parent=parent, style=style)
        vSizer = wx.BoxSizer(wx.VERTICAL)
        self.SetBackgroundColour("while")
        self.ProgrameList = ObjectListView(self,
                                           id=wx.ID_VIEW_LIST,
                                           size=(-1, 50),
                                           style=wx.LC_REPORT
                                           | wx.SUNKEN_BORDER | wx.LC_VRULES
                                           | wx.LC_HRULES)

        #self.ProgrameList.cellEditMode = ObjectListView.CELLEDIT_SINGLECLICK
        self.setResults(gen._filedata)

        self.ListButtonUI()
        ##列表控件布局
        vSizer.Add(self.ProgrameList, 1, wx.EXPAND | wx.ALL, 5)
        ##按钮的布局
        vSizer.Add(self.sSizer, 0, wx.ALL, 2)
        self.SetSizerAndFit(vSizer)

        ##双击列表事件绑定
        self.evt = EventHandle(gen._filedata, self.ProgrameList)
        ##实例调用EventHandle 类的一个对话框事件方法
        self.OnAdd_Edit_Dialog = self.evt.OnAdd_Edit_Dialog
        self.ProgrameList.Bind(wx.EVT_LIST_ITEM_ACTIVATED,
                               self.OnAdd_Edit_Dialog,
                               id=wx.ID_VIEW_LIST)

    def setResults(self, filename):
        self.ProgrameList.SetColumns([
            ColumnDefn(u"序号", "left", 40, "id"),
            ColumnDefn(u"名称", "left", 100, "name"),
            ColumnDefn(u"程序", "left", 150, "programe"),
            ColumnDefn(u"参数", "left", 150, "logfile"),
            ColumnDefn(u"状态", "center", 60, "status"),
            ColumnDefn(u"监控", "left", 40, "monitor"),
            ColumnDefn(u"条件", "center", 50, "operator"),
            ColumnDefn(u"进程数", "left", 50, "processNum"),
            ColumnDefn(u"启动方式", "center", 60, "runAs"),
            ColumnDefn(u"备注", "left", 150, "note"),
        ])
        ##使用checkBox 复选框
        self.ProgrameList.CreateCheckStateColumn()
        self.SetDataInListctrl(filename)

    def SetDataInListctrl(self, filename):
        LoadLog.LogMsg(gen.logger.info, u"加载控件列表,初始化数据")
        ##获取数据列表
        self.list_data = DataHandle(filename).handleList()
        ##设置数据列表到列表控件
        self.ProgrameList.SetObjects(self.list_data)

    ##列表控件下面的按钮
    def ListButtonUI(self):
        self.sSizer = sSizer = wx.BoxSizer(wx.HORIZONTAL)
        SelectAllButton = wx.Button(self,
                                    id=wx.ID_SELECTALL,
                                    size=(50, 22),
                                    label=u"全选")
        RSelectAllButton = wx.Button(self,
                                     id=gen.ID_UNSELECTALL,
                                     size=(50, 22),
                                     label=u"取消")
        #ClearButton = wx.Button(self,id=gen.ID_SELECTCLEAR,size=(50,22),label = u"测试")
        #ImportButton = wx.Button(self,id=gen.ID_IMPORT,size=(50,22),label = u"导入")
        #ExportButton = wx.Button(self,id=gen.ID_EXPORT,size=(50,22),label = u"导出")
        sSizer.Add(SelectAllButton, 0, wx.LEFT, 2)
        sSizer.Add(RSelectAllButton, 0, wx.LEFT, 10)
        #sSizer.Add(ClearButton,0,wx.LEFT,10)
        #sSizer.Add(ImportButton,0,wx.LEFT,10)
        #sSizer.Add(ExportButton,0,wx.LEFT,10)

        self.evt = EventHandle(gen._filedata, self.ProgrameList)
        self.Bind(wx.EVT_BUTTON, self.evt.OnSelectAll, id=wx.ID_SELECTALL)
        self.Bind(wx.EVT_BUTTON, self.evt.OnSelectAll, id=gen.ID_UNSELECTALL)