コード例 #1
0
ファイル: utils.py プロジェクト: alexras/lsmc
def new_obj_list_view(parent, edit_mode=ObjectListView.CELLEDIT_NONE):
    view = ObjectListView(
        parent, wx.ID_ANY, style=wx.LC_REPORT, cellEditMode=edit_mode)
    enable_single_selection(view, parent)
    view.oddRowsBackColor = wx.LIGHT_GREY

    return view
コード例 #2
0
    def __init__(self, parent):
        super().__init__(parent)
        self.search_results = []
        self.max_size = 300
        font = wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL)
        main_sizer = wx.BoxSizer(wx.VERTICAL)
        self.paths = wx.StandardPaths.Get()
        pub.subscribe(self.load_search_results, 'search_results')

        self.search_results_olv = ObjectListView(
            self, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.search_results_olv.SetEmptyListMsg("No Results Found")
        self.search_results_olv.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                     self.on_selection)
        main_sizer.Add(self.search_results_olv, 1, wx.EXPAND)
        self.update_search_results()

        main_sizer.AddSpacer(30)
        self.title = wx.TextCtrl(self, style=wx.TE_READONLY)
        self.title.SetFont(font)
        main_sizer.Add(self.title, 0, wx.ALL|wx.EXPAND, 5)
        img = wx.Image(240, 240)
        self.image_ctrl = wx.StaticBitmap(self,
                                          bitmap=wx.Bitmap(img))
        main_sizer.Add(self.image_ctrl, 0, wx.CENTER|wx.ALL, 5
                       )
        download_btn = wx.Button(self, label='Download Image')
        download_btn.Bind(wx.EVT_BUTTON, self.on_download)
        main_sizer.Add(download_btn, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(main_sizer)
コード例 #3
0
class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        wx.Frame.__init__(self, *args, **kwds)
        self.Init()

    def Init(self):
        self.InitModel()
        self.InitWidgets()
        self.InitObjectListView()

    def InitModel(self):
        self.songs = ExampleModel.GetTracks()

    def InitWidgets(self):
        panel = wx.Panel(self, -1)
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(panel, 1, wx.ALL|wx.EXPAND)
        self.SetSizer(sizer_1)

        self.myOlv = ObjectListView(panel, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
        sizer_2 = wx.BoxSizer(wx.VERTICAL)
        sizer_2.Add(self.myOlv, 1, wx.ALL|wx.EXPAND, 4)
        panel.SetSizer(sizer_2)

        self.Layout()

    def InitObjectListView(self):
        groupImage = self.myOlv.AddImages(ExampleImages.getGroup16Bitmap(), ExampleImages.getGroup32Bitmap())
        userImage = self.myOlv.AddImages(ExampleImages.getUser16Bitmap(), ExampleImages.getUser32Bitmap())
        musicImage = self.myOlv.AddImages(ExampleImages.getMusic16Bitmap(), ExampleImages.getMusic32Bitmap())

        soloArtists = ["Nelly Furtado", "Missy Higgins", "Moby", "Natalie Imbruglia",
                       "Dido", "Paul Simon", "Bruce Cockburn"]
        def artistImageGetter(track):
            if track.artist in soloArtists:
                return userImage
            else:
                return groupImage

        def sizeToNiceString(byteCount):
            """
            Convert the given byteCount into a string like: 9.9bytes/KB/MB/GB
            """
            for (cutoff, label) in [(1024*1024*1024, "GB"), (1024*1024, "MB"), (1024, "KB")]:
                if byteCount >= cutoff:
                    return "%.1f %s" % (byteCount * 1.0 / cutoff, label)

            if byteCount == 1:
                return "1 byte"
            else:
                return "%d bytes" % byteCount

        self.myOlv.SetColumns([
            ColumnDefn("Title", "left", 120, "title", imageGetter=musicImage),
            ColumnDefn("Artist", "left", 120, "artist", imageGetter=artistImageGetter),
            ColumnDefn("Size", "center", 100, "sizeInBytes", stringConverter=sizeToNiceString),
            ColumnDefn("Last Played", "left", 100, "lastPlayed", stringConverter="%d-%m-%Y"),
            ColumnDefn("Rating", "center", 100, "rating")
        ])
        self.myOlv.SetObjects(self.songs)
コード例 #4
0
 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')
コード例 #5
0
    def create_ui(self):
        # Create the widgets for the search path
        row_sizer = wx.BoxSizer()
        lbl = wx.StaticText(self, label='Location:')
        row_sizer.Add(lbl, 0, wx.ALL | wx.CENTER, 5)
        self.directory = wx.TextCtrl(self, style=wx.TE_READONLY)
        row_sizer.Add(self.directory, 1, wx.ALL | wx.EXPAND, 5)
        open_dir_btn = wx.Button(self, label='Choose Folder')
        open_dir_btn.Bind(wx.EVT_BUTTON, self.on_choose_folder)
        row_sizer.Add(open_dir_btn, 0, wx.ALL, 5)
        self.main_sizer.Add(row_sizer, 0, wx.EXPAND)

        # Add search bar
        self.search_ctrl = wx.SearchCtrl(
            self, style=wx.TE_PROCESS_ENTER, size=(-1, 25))
        self.search_ctrl.Bind(wx.EVT_SEARCHCTRL_SEARCH_BTN, self.on_search)
        self.search_ctrl.Bind(wx.EVT_TEXT_ENTER, self.on_search)
        self.main_sizer.Add(self.search_ctrl, 0, wx.ALL | wx.EXPAND, 5)

        # Search results widget
        self.search_results_olv = ObjectListView(
            self, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.search_results_olv.SetEmptyListMsg("No Results Found")
        self.search_results_olv.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                     self.on_selection)
        self.main_sizer.Add(self.search_results_olv, 1, wx.ALL | wx.EXPAND, 5)
        self.update_ui()

        self.results_txt = wx.TextCtrl(
            self, style=wx.TE_MULTILINE | wx.TE_READONLY)
        self.main_sizer.Add(self.results_txt, 1, wx.ALL | wx.EXPAND, 5)

        show_result_btn = wx.Button(self, label='Open Containing Folder')
        show_result_btn.Bind(wx.EVT_BUTTON, self.on_show_result)
        self.main_sizer.Add(show_result_btn, 0, wx.ALL | wx.CENTER, 5)
コード例 #6
0
    def create_ui(self):
        btn_sizer = wx.BoxSizer()
        add_btn = wx.Button(self, label='Add')
        add_btn.Bind(wx.EVT_BUTTON, self.on_add_file)
        btn_sizer.Add(add_btn, 0, wx.ALL, 5)
        remove_btn = wx.Button(self, label='Remove')
        remove_btn.Bind(wx.EVT_BUTTON, self.on_remove)
        btn_sizer.Add(remove_btn, 0, wx.ALL, 5)
        self.main_sizer.Add(btn_sizer)

        move_btn_sizer = wx.BoxSizer(wx.VERTICAL)
        row_sizer = wx.BoxSizer()

        self.pdf_olv = ObjectListView(self,
                                      style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.pdf_olv.SetEmptyListMsg("No PDFs Loaded")
        self.update_pdfs()
        row_sizer.Add(self.pdf_olv, 1, wx.ALL | wx.EXPAND)

        move_up_btn = wx.Button(self, label='Up')
        move_up_btn.Bind(wx.EVT_BUTTON, self.on_move)
        move_btn_sizer.Add(move_up_btn, 0, wx.ALL, 5)
        move_down_btn = wx.Button(self, label='Down')
        move_down_btn.Bind(wx.EVT_BUTTON, self.on_move)
        move_btn_sizer.Add(move_down_btn, 0, wx.ALL, 5)
        row_sizer.Add(move_btn_sizer)
        self.main_sizer.Add(row_sizer, 1, wx.ALL | wx.EXPAND, 5)

        merge_pdfs = wx.Button(self, label='Merge PDFs')
        merge_pdfs.Bind(wx.EVT_BUTTON, self.on_merge)
        self.main_sizer.Add(merge_pdfs, 0, wx.ALL | wx.CENTER, 5)

        self.SetSizer(self.main_sizer)
コード例 #7
0
    def __init__(self, parent):
        super(SearchDialog, self).__init__(parent=parent,
                                           title="pyjam Audio Search")
        self.parent = parent

        self.result_list = ObjectListView(parent=self,
                                          style=wx.LC_REPORT
                                          | wx.BORDER_SUNKEN,
                                          sortable=True,
                                          useAlternateBackColors=False)
        self.result_list.SetEmptyListMsg("No results")
        self.result_list.SetColumns([
            ColumnDefn(title="Title", valueGetter="title", width=150),
            ColumnDefn(title="Description", valueGetter="desc", width=300)
        ])

        self.search_recent = collections.deque([], 10)
        search_help = wx.StaticText(
            parent=self,
            label=(
                "Enter a search term and press Enter. "
                "Then, select the videos you want from the list and press OK."
            ))
        self.search_query = wx.SearchCtrl(parent=self,
                                          style=wx.TE_PROCESS_ENTER)
        self.search_query.ShowCancelButton(True)
        self.search_query.SetMenu(self.search_menu())

        top_sizer = wx.BoxSizer(wx.VERTICAL)
        olv_sizer = wx.BoxSizer(wx.VERTICAL)
        query_sizer = wx.BoxSizer(wx.VERTICAL)

        button_sizer = self.CreateButtonSizer(wx.OK | wx.CANCEL)

        olv_sizer.Add(self.result_list, 1,
                      wx.LEFT | wx.RIGHT | wx.EXPAND | wx.ALIGN_TOP, 5)
        query_sizer.Add(search_help, 0, wx.ALL ^ wx.TOP, 5)
        query_sizer.Add(self.search_query, 0, wx.ALL ^ wx.TOP | wx.EXPAND, 5)
        top_sizer.Add(olv_sizer, 1, wx.ALL | wx.EXPAND, 5)
        top_sizer.Add(query_sizer, 0, wx.ALL | wx.EXPAND, 5)
        top_sizer.Add(button_sizer, 0, wx.ALL | wx.ALIGN_CENTER, 5)

        # Context menu
        self.context_menu = wx.Menu()
        open_url = self.context_menu.Append(wx.ID_OPEN, "Open link in browser")
        copy_url = self.context_menu.Append(wx.ID_COPY, "Copy link address")

        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK,
                  handler=self.list_right_click,
                  source=self.result_list)
        self.Bind(wx.EVT_MENU, handler=self.copy_url, source=copy_url)
        self.Bind(wx.EVT_MENU, handler=self.open_url, source=open_url)

        self.Bind(wx.EVT_TEXT_ENTER,
                  handler=self.on_search,
                  source=self.search_query)
        self.Bind(wx.EVT_BUTTON, handler=self.on_ok, id=wx.ID_OK)
        self.SetSizerAndFit(top_sizer)
        self.Center()
        self.ShowModal()
コード例 #8
0
    def __init__(self, parent):
        """Constructor"""
        self.controller = Controller(SaleOrder, "sqlite:///odoo.db")
        controller = self.controller

        wx.Panel.__init__(self, parent)
        try:
            self.olvResults = controller.getAllRecords()
        except:
            self.olvResults = []

        #Panels
        search_panel = SearchPanel(self)
        button_panel = ButtonPanel(self)

        #ListView
        self.olvResultsOlv = ObjectListView(self,
                                            style=wx.LC_REPORT
                                            | wx.SUNKEN_BORDER)
        self.olvResultsOlv.SetEmptyListMsg("No Records Found")
        self.setRows()

        #Organize the shit
        mainSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(search_panel)
        mainSizer.Add(self.olvResultsOlv, 1, wx.ALL | wx.EXPAND, 5)
        mainSizer.Add(button_panel, 0, wx.CENTER)
        self.SetSizer(mainSizer)
コード例 #9
0
    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)
コード例 #10
0
    def __init__(self, parentNotebook, frame_myr, size=None, style=wx.BORDER_DEFAULT):
        wx.Panel.__init__(self, parent=parentNotebook, size=size, id=wx.ID_ANY, style=style)
        self.parentNotebook = parentNotebook
        self.frame_myr = frame_myr

        self.logPath = self.frame_myr.notebook.getTempConfigParam("logPath")

        self.wvLogs = webview.WebView.New(self)
        self.selection = None


        #scrollPanel = wx.Panel(self)
        self.listLogs = ObjectListView(self, size=(108, -1), style=wx.LC_REPORT, sortable=False)
        self.listLogs.oddRowsBackColor = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW)

        self.listLogs.SetColumns([
            ColumnDefn("Log File", "center", 94, "log")
        ])

        self.listLogs.SetFont(wx.Font(8.5, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False))

        self.loadList()

        self.listLogs.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onLogSelected)
        self.listLogs.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick)
        self.wvLogs.Bind(webview.EVT_WEBVIEW_TITLE_CHANGED, self.onFocusLost)

        sizer = wx.BoxSizer(wx.HORIZONTAL)

        self.wvLogs.SetPage('<html><body style="background-color: #111111;"></body></html>', "")

        sizer.Add(self.wvLogs, 1, wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.TOP, -3)
        sizer.Add(self.listLogs, 0, wx.EXPAND | wx.LEFT, 0)

        self.SetSizer(sizer)
コード例 #11
0
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(200, 100))
        self.serial_interface = serial_interface.SerialInterface()

        self.CreateStatusBar()  # A Statusbar in the bottom of the window

        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
        self.create_tools()
        self.create_filters()

        self.message_list = ObjectListView(self,
                                           style=wx.LC_REPORT
                                           | wx.SUNKEN_BORDER)
        self.batched_message_list = BatchedUpdate(self.message_list, 1)
        self.message_list.SetFilter(self.filter)
        self.main_sizer.Add(self.message_list,
                            1,
                            flag=wx.EXPAND | wx.ALL,
                            border=5)

        self.SetSizerAndFit(self.main_sizer)
        self.SetAutoLayout(True)
        self.Layout()

        self.init_message_list()
        self.Bind(wx.EVT_IDLE, self.on_idle)
        self.Bind(wx.EVT_CLOSE, self.on_close)

        self.Show()
コード例 #12
0
ファイル: venues.py プロジェクト: ahenshaw/rusty_venture
class VenueWindow(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)
        if db:
            self.load(db)
        # pub.subscribe(self.onMapSelect, "map_selection")
        self.listview.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSelect)

    def OnSelect(self, event):
        pub.sendMessage('selected_venues',
                        venues=self.listview.GetSelectedObjects())

    def load(self, db):
        cursor = db.cursor()
        cursor.execute("SELECT id, name, lat, lon FROM venue ORDER BY name")
        self.venues = dict([(x[0], Venue(x)) for x in cursor.fetchall()])
        self.listview.SetColumns([
            ColumnDefn("ID", "left", -1, "db_id"),
            ColumnDefn("Venue", "left", -1, "name"),
        ])
        # self.listview.CreateCheckStateColumn()
        self.listview.SetObjects(list(self.venues.values()))
        pub.sendMessage('venues', venues=list(self.venues.values()))
コード例 #13
0
class OpenInfoDialog(wx.Dialog):
    def __init__(self, info_list):
        wx.Dialog.__init__(self, None, size=(750, 600))
        self.SetTitle('Choose Run')
        #~ info_list = [{'description': 'Test',
                      #~ 'creation'   : '2017-07-11 08:30:00'}]
        panel = wx.Panel(self)
        self.lb = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lb.SetColumns([
            ColumnDefn('Description', 'left', 300, 'description'),
            ColumnDefn('# Triangles', 'center', 150, 'num_polys'),
            ColumnDefn('Date/Time', 'left', 300, 'creation'),
        ])
        self.lb.SetObjects(info_list)
        
        btn_sizer = wx.Dialog.CreateButtonSizer(self, wx.OK|wx.CANCEL)
        
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.lb, 1, flag=wx.EXPAND)
        sizer.Add(btn_sizer, 0, flag=wx.EXPAND)
        self.SetSizer(sizer)
        
        self.lb.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick)
        
    def onDoubleClick(self, event):
        self.EndModal(wx.ID_OK)
        
        
コード例 #14
0
ファイル: PMManager.py プロジェクト: xcool/PMManager
    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)
コード例 #15
0
    def __init__(self, *arg, **kwargs):
        super(SmsFrame, self).__init__(*arg, **kwargs, size=(700, 500))
        panel = wx.Panel(self)
        panel.SetBackgroundColour(wx.WHITE)
        wx.StaticText(self, -1, "Cari", pos=(10, 10))
        wx.TextCtrl(self, -1, pos=(10, 40), size=(650, 30))

        self.dataOlv = ObjectListView(self,
                                      -1,
                                      style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                      pos=(10, 100),
                                      size=(650, 350))
        self.dataOlv.SetColumns([
            ColumnDefn("No", "left", 150, "no_telp"),
            ColumnDefn("Tanggal Terkirim", "left", 130, "tgl"),
            ColumnDefn("Isi Pesan", "left", 240, 'isi')
        ])

        query = (
            "SELECT a.no_telp, a.tanggal, a.keterangan  FROM tb_sms_terkirim as a"
        )
        stmt = ''
        hasil = connector.Execute(query, stmt, 4)
        sql = hasil["Data"]
        data = []
        for i in sql:
            dict = {"no_telp": i[0], "tgl": i[1], "isi": i[2]}
            data.append(dict)

        self.dataOlv.SetObjects(data)
        self.SetTitle("SMS Archive")
        self.Show(True)
コード例 #16
0
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()
コード例 #17
0
ファイル: sms.py プロジェクト: dan990308/plateRecognition_GUI
	def __init__(self, *arg, **kwargs):
		super(SmsFrame, self).__init__(*arg, **kwargs, size=(700, 500))
		panel = wx.Panel(self)
		panel.SetBackgroundColour(wx.WHITE)
		wx.StaticText(self, -1, "Penerima", pos=(10, 10))
		self.nomor  = wx.TextCtrl(self, -1, pos=(10, 40), size=(300, 30))
		self.boxmsg = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE, pos=(330, 40), size=(330, 350))
		self.send = wx.Button(self,  -1, "Kirim", pos=(330, 400))
		wx.Button(self, -1, "Batal", pos=(420, 400))
		self.pilihb = wx.Button(self, -1 , "Pilih", pos=(510, 400))
		self.pilihb.Bind(wx.EVT_BUTTON, self.pilih)
		self.send.Bind(wx.EVT_BUTTON, self.kirim)

		self.dataOlv = ObjectListView(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER, pos=(10, 100), size=(300,350))
		self.dataOlv.SetColumns([
			ColumnDefn("No", "left", 150, "no_telp"),
			ColumnDefn("Nama", "left", 100, "nama")
			])
		query = ("SELECT nama_pel, no_telp FROM tb_member")
		stmt = ''
		hasil = connector.Execute(query, stmt, 4)
		sql = hasil["Data"]
		data = []
		for i in sql:
			dict = {"no_telp": i[0], "nama": i[1]} 
			data.append(dict)

		self.dataOlv.SetObjects(data)

		self.SetTitle("Sms Gateway")
		self.Show(True)
コード例 #18
0
ファイル: psgui.py プロジェクト: ofer515/project
class MainPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)
        self.procs = []

        self.procmonOlv = ObjectListView(self,
                                         style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.setProcs()

        mainSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(self.procmonOlv, 1, wx.EXPAND | wx.ALL, 5)
        self.SetSizer(mainSizer)
        self.updateDisplay()

        # check for updates every 5 seconds
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.update, self.timer)
        self.timer.Start(5000)

    #----------------------------------------------------------------------
    def setProcs(self):
        """"""
        cols = [
            ColumnDefn("name", "left", 150, "name"),
            ColumnDefn("pid", "left", 50, "pid"),
            ColumnDefn("exe location", "left", 100, "exe"),
            ColumnDefn("username", "left", 75, "user"),
            ColumnDefn("cpu", "left", 75, "cpu"),
            ColumnDefn("mem", "left", 75, "mem"),
            #ColumnDefn("description", "left", 200, "desc")
        ]
        self.procmonOlv.SetColumns(cols)
        self.procmonOlv.SetObjects(self.procs)

    #----------------------------------------------------------------------
    def update(self, event):
        """"""
        self.updateDisplay()

    #----------------------------------------------------------------------
    def updateDisplay(self):
        """"""
        pids = psutil.get_pid_list()
        for pid in pids:

            try:
                p = psutil.Process(pid)
                new_proc = Process(p.name, str(p.pid), p.exe, p.username,
                                   str(p.get_cpu_percent()),
                                   str(p.get_memory_percent()))
                self.procs.append(new_proc)
            except:
                pass

        self.setProcs()
コード例 #19
0
ファイル: sms.py プロジェクト: dan990308/plateRecognition_GUI
class SmsFrame(wx.Dialog):
	"""docstring for SmsFrame"""
	def __init__(self, *arg, **kwargs):
		super(SmsFrame, self).__init__(*arg, **kwargs, size=(700, 500))
		panel = wx.Panel(self)
		panel.SetBackgroundColour(wx.WHITE)
		wx.StaticText(self, -1, "Penerima", pos=(10, 10))
		self.nomor  = wx.TextCtrl(self, -1, pos=(10, 40), size=(300, 30))
		self.boxmsg = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE, pos=(330, 40), size=(330, 350))
		self.send = wx.Button(self,  -1, "Kirim", pos=(330, 400))
		wx.Button(self, -1, "Batal", pos=(420, 400))
		self.pilihb = wx.Button(self, -1 , "Pilih", pos=(510, 400))
		self.pilihb.Bind(wx.EVT_BUTTON, self.pilih)
		self.send.Bind(wx.EVT_BUTTON, self.kirim)

		self.dataOlv = ObjectListView(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER, pos=(10, 100), size=(300,350))
		self.dataOlv.SetColumns([
			ColumnDefn("No", "left", 150, "no_telp"),
			ColumnDefn("Nama", "left", 100, "nama")
			])
		query = ("SELECT nama_pel, no_telp FROM tb_member")
		stmt = ''
		hasil = connector.Execute(query, stmt, 4)
		sql = hasil["Data"]
		data = []
		for i in sql:
			dict = {"no_telp": i[0], "nama": i[1]} 
			data.append(dict)

		self.dataOlv.SetObjects(data)

		self.SetTitle("Sms Gateway")
		self.Show(True)
	def kirim(self, e):
		no_telp = self.nomor.GetValue()
		msg = self.boxmsg.GetValue()
		
		account_sid = "AC3cddc95d61ca0bb2e33dc5f8b48c93e8"
		auth_token = "f8d01a882f7e58b8b87d34fe1c6f1865"

		client = Client(account_sid, auth_token)

		message = client.messages.create(
			        to=no_telp,
			        from_="+15863718428",
			        body=msg
			    )
			    
		tglhari = datetime.datetime.now().date()
		query = ("INSERT INTO tb_sms_terkirim (status, no_telp, tanggal, keterangan) VALUES (%s,%s,%s,%s)")
		stmt = ("terkirim", no_telp, tglhari, msg)
		connector.Execute(query, stmt, 1)
	def pilih(self, e):
		ind = self.dataOlv.GetFirstSelected()
		if ind >= 0 :
			self.item = self.dataOlv.GetItem(ind, 1)
			self.nomor.SetValue(self.item.GetText())
コード例 #20
0
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        try:
            self.bookResults = controller.getAllRecords()
        except:
            self.bookResults = []

        mainSizer = wx.BoxSizer(wx.VERTICAL)
        searchSizer = wx.BoxSizer(wx.HORIZONTAL)
        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
        font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD)

        # create the search related widgets
        cat = ["Author", "Title", "ISBN", "Publisher"]
        searchByLbl = wx.StaticText(self, label="Search By:")
        searchByLbl.SetFont(font)
        searchSizer.Add(searchByLbl, 0, wx.ALL, 5)

        self.categories = wx.ComboBox(self, value="Author", choices=cat)
        searchSizer.Add(self.categories, 0, wx.ALL, 5)

        self.search = wx.SearchCtrl(self, style=wx.TE_PROCESS_ENTER)
        self.search.Bind(wx.EVT_TEXT_ENTER, self.onSearch)
        searchSizer.Add(self.search, 0, wx.ALL, 5)

        self.bookResultsOlv = ObjectListView(self,
                                             style=wx.LC_REPORT
                                             | wx.SUNKEN_BORDER)
        self.bookResultsOlv.SetEmptyListMsg("No Records Found")
        self.setBooks()

        # create the button row
        btnAddRecord = wx.Button(self, label="Add")
        btnAddRecord.Bind(wx.EVT_BUTTON, self.onAddRecord)
        btnSizer.Add(btnAddRecord, 0, wx.ALL, 5)

        btnEditRecord = wx.Button(self, label="Edit")
        btnEditRecord.Bind(wx.EVT_BUTTON, self.onEditRecord)
        btnSizer.Add(btnEditRecord, 0, wx.ALL, 5)

        btnDeleteRecord = wx.Button(self, label="Delete")
        btnDeleteRecord.Bind(wx.EVT_BUTTON, self.onDelete)
        btnSizer.Add(btnDeleteRecord, 0, wx.ALL, 5)

        btnShowAll = wx.Button(self, label="Show All")
        btnShowAll.Bind(wx.EVT_BUTTON, self.onShowAllRecord)
        btnSizer.Add(btnShowAll, 0, wx.ALL, 5)

        btnClose = wx.Button(self, label="Close")
        btnClose.Bind(wx.EVT_BUTTON, self.onClose)
        btnSizer.Add(btnClose, 0, wx.ALL, 5)

        mainSizer.Add(searchSizer)
        mainSizer.Add(self.bookResultsOlv, 1, wx.ALL | wx.EXPAND, 5)
        mainSizer.Add(btnSizer, 0, wx.CENTER)
        self.SetSizer(mainSizer)
コード例 #21
0
class MainPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)
        self.procs = []

        self.procmonOlv = ObjectListView(self,
                                         style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.setProcs()

        mainSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(self.procmonOlv, 1, wx.EXPAND | wx.ALL, 5)
        self.SetSizer(mainSizer)

        # check for updates every 5 seconds
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.update, self.timer)
        self.timer.Start(15000)
        self.setProcs()

        # create a pubsub receiver
        Publisher().subscribe(self.updateDisplay, "update")

    #----------------------------------------------------------------------
    def setProcs(self):
        """"""
        cols = [
            ColumnDefn("name", "left", 150, "name"),
            ColumnDefn("pid", "left", 50, "pid"),
            ColumnDefn("exe location", "left", 100, "exe"),
            ColumnDefn("username", "left", 75, "user"),
            ColumnDefn("cpu", "left", 75, "cpu"),
            ColumnDefn("mem", "left", 75, "mem"),
            #ColumnDefn("description", "left", 200, "desc")
        ]
        self.procmonOlv.SetColumns(cols)
        self.procmonOlv.SetObjects(self.procs)
        self.procmonOlv.sortAscending = True

    #----------------------------------------------------------------------
    def update(self, event):
        """
        Start a thread to get the pid information
        """
        self.timer.Stop()
        ProcThread()

    #----------------------------------------------------------------------
    def updateDisplay(self, msg):
        """"""
        self.procs = msg.data
        self.setProcs()
        if not self.timer.IsRunning():
            self.timer.Start(15000)
コード例 #22
0
 def __init__(self, parent):
     super().__init__(parent)
     
     if not os.path.exists("books.db"):
         controller.setup_database()
     
     self.database = controller.Database()
     
     try:
         self.book_results = controller.get_all_records(self.session)
     except:
         self.book_results = []
 
     main_sizer = wx.BoxSizer(wx.VERTICAL)
     search_sizer = wx.BoxSizer(wx.HORIZONTAL)
     btn_sizer = wx.BoxSizer(wx.HORIZONTAL)
     font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD) 
 
     # create the search related widgets
     categories = ["Author", "Title", "ISBN", "Publisher"]
     search_label = wx.StaticText(self, label="Search By:")
     search_label.SetFont(font)
     search_sizer.Add(search_label, 0, wx.ALL, 5)
 
     self.categories = wx.ComboBox(self, value="Author", choices=categories)
     search_sizer.Add(self.categories, 0, wx.ALL, 5)
 
     self.search_ctrl = wx.SearchCtrl(self, style=wx.TE_PROCESS_ENTER)
     self.search_ctrl.Bind(wx.EVT_TEXT_ENTER, self.search)
     search_sizer.Add(self.search_ctrl, 0, wx.ALL, 5)
 
     self.book_results_olv = ObjectListView(self, style=wx.LC_REPORT
                                              |wx.SUNKEN_BORDER)
     self.book_results_olv.SetEmptyListMsg("No Records Found")
     self.update_book_results()
 
     # create the button row
     add_record_btn = wx.Button(self, label="Add")
     add_record_btn.Bind(wx.EVT_BUTTON, self.add_record)
     btn_sizer.Add(add_record_btn, 0, wx.ALL, 5)
 
     edit_record_btn = wx.Button(self, label="Edit")
     edit_record_btn.Bind(wx.EVT_BUTTON, self.edit_record)
     btn_sizer.Add(edit_record_btn, 0, wx.ALL, 5)
 
     delete_record_btn = wx.Button(self, label="Delete")
     delete_record_btn.Bind(wx.EVT_BUTTON, self.delete_record)
     btn_sizer.Add(delete_record_btn, 0, wx.ALL, 5)
 
     show_all_btn = wx.Button(self, label="Show All")
     show_all_btn.Bind(wx.EVT_BUTTON, self.on_show_all)
     btn_sizer.Add(show_all_btn, 0, wx.ALL, 5)
 
     main_sizer.Add(search_sizer)
     main_sizer.Add(self.book_results_olv, 1, wx.ALL|wx.EXPAND, 5)
     main_sizer.Add(btn_sizer, 0, wx.CENTER)
     self.SetSizer(main_sizer)
コード例 #23
0
ファイル: teams.py プロジェクト: ahenshaw/rusty_venture
 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')
コード例 #24
0
 def __init__(self, parent):
     ObjectListView.__init__(self,
                             parent,
                             wx.ID_ANY,
                             style=wx.LC_REPORT | wx.SUNKEN_BORDER)
     self.directory = '/home/james/PycharmProjects/final-year-project/working_data/20news_2topic/'
     self.files = []  # Files being displayed in the ListView.
     self.file_contents = []
     self.classes = []
     self.set_files()
コード例 #25
0
    def __init__(self, *args, **kwargs):
        ObjectListView.__init__(self, *args, **kwargs)
        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.OnRightClick)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated)

        self.Bind(EVT_XLS_WRITE_COMPLETED, self.OnComplete)
        self.Bind(EVT_XLS_WRITE_PROGRESS, self.OnProgress)
        self.Bind(EVT_XLS_WRITE_CANCELED, self.OnCanceled)

        self.SetColumns(ExpListColumnDefn)
        self.worker = None
コード例 #26
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):
        """
        Update the object list view widget
        """
        print "updating..."
        product_dict = [{"title":"Core Python Programming", "author":"Wesley Chun",
                         "isbn":"0132269937", "mfg":"Prentice Hall"},
                        {"title":"Python Programming for the Absolute Beginner",
                         "author":"Michael Dawson", "isbn":"1598631128",
                         "mfg":"Course Technology"},
                        {"title":"Learning Python", "author":"Mark Lutz",
                         "isbn":"0596513984", "mfg":"O'Reilly"}
                        ]
        data = self.products + product_dict
        self.dataOlv.SetObjects(data)


    def setBooks(self, data=None):
        self.dataOlv.SetColumns([
            ColumnDefn("Title", "left", 220, "title"),
            ColumnDefn("Author", "left", 200, "author"),
            ColumnDefn("ISBN", "right", 100, "isbn"),
            ColumnDefn("Mfg", "left", 180, "mfg")
        ])

        self.dataOlv.SetObjects(self.products)
コード例 #27
0
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        try:
            self.personResults = logic.getAllRecords()
        except:
            self.personResults = []

        mainSizer = wx.BoxSizer(wx.VERTICAL)
        searchSizer = wx.BoxSizer(wx.HORIZONTAL)
        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
        font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD)

        # create the search related widgets
        cat = ["First name", "E-Mail", "Contact Number"]
        searchByLbl = wx.StaticText(self, label="Search By:")
        searchByLbl.SetFont(font)
        searchSizer.Add(searchByLbl, 0, wx.ALL, 5)

        self.categories = wx.ComboBox(self, value="First Name", choices=cat)
        searchSizer.Add(self.categories, 0, wx.ALL, 5)

        self.search = wx.SearchCtrl(self, style=wx.TE_PROCESS_ENTER)
        self.search.Bind(wx.EVT_TEXT_ENTER, self.onSearch)
        searchSizer.Add(self.search, 0, wx.ALL, 5)

        self.personResultsOlv = ObjectListView(self,
                                               style=wx.LC_REPORT
                                               | wx.SUNKEN_BORDER)
        self.personResultsOlv.SetEmptyListMsg("No Details Found")
        self.setBooks()

        # create the button row
        addRecordBtn = wx.Button(self, label="Add")
        addRecordBtn.Bind(wx.EVT_BUTTON, self.onAddRecord)
        btnSizer.Add(addRecordBtn, 0, wx.ALL, 5)

        editRecordBtn = wx.Button(self, label="Edit")
        editRecordBtn.Bind(wx.EVT_BUTTON, self.onEditRecord)
        btnSizer.Add(editRecordBtn, 0, wx.ALL, 5)

        deleteRecordBtn = wx.Button(self, label="Delete")
        deleteRecordBtn.Bind(wx.EVT_BUTTON, self.onDelete)
        btnSizer.Add(deleteRecordBtn, 0, wx.ALL, 5)

        showAllBtn = wx.Button(self, label="Show All")
        showAllBtn.Bind(wx.EVT_BUTTON, self.onShowAllRecord)
        btnSizer.Add(showAllBtn, 0, wx.ALL, 5)

        mainSizer.Add(searchSizer)
        mainSizer.Add(self.personResultsOlv, 1, wx.ALL | wx.EXPAND, 5)
        mainSizer.Add(btnSizer, 0, wx.CENTER)
        self.SetSizer(mainSizer)
コード例 #28
0
    def InitWidgets(self):
        panel = wx.Panel(self, -1)
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(panel, 1, wx.ALL|wx.EXPAND)
        self.SetSizer(sizer_1)

        self.myOlv = ObjectListView(panel, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
        sizer_2 = wx.BoxSizer(wx.VERTICAL)
        sizer_2.Add(self.myOlv, 1, wx.ALL|wx.EXPAND, 4)
        panel.SetSizer(sizer_2)

        self.Layout()
コード例 #29
0
ファイル: venues.py プロジェクト: ahenshaw/rusty_venture
 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)
     if db:
         self.load(db)
     # pub.subscribe(self.onMapSelect, "map_selection")
     self.listview.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSelect)
コード例 #30
0
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent=parent)
        self.file_list = []

        file_drop_target = MyFileDropTarget(self)
        self.olv = ObjectListView(self, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.olv.SetDropTarget(file_drop_target)
        self.setFiles()

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.olv, 1, wx.EXPAND)
        self.SetSizer(sizer)
コード例 #31
0
ファイル: app.py プロジェクト: n-Holmes/pdfjoin
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)
        self.file_list = []

        self.list_view = ObjectListView(self,
                                        style=wx.LC_REPORT | wx.SUNKEN_BORDER,
                                        sortable=False)
        self._set_files()

        main_sizer = wx.BoxSizer(wx.VERTICAL)
        main_sizer.Add(self.list_view, 1, wx.EXPAND)
        self._control_setup(main_sizer)
        self.SetSizer(main_sizer)
コード例 #32
0
ファイル: OL_entretiens.py プロジェクト: Noethys/Teamworks
 def __init__(self, *args, **kwds):
     # Récupération des paramètres perso
     self.IDcandidat = kwds.pop("IDcandidat", None)
     self.IDpersonne = kwds.pop("IDpersonne", None)
     self.modeAffichage = kwds.pop("modeAffichage", None)
     self.colorerSalaries = kwds.pop("colorerSalaries", True)
     self.prochainsEntretiens = kwds.pop("prochainsEntretiens", False)
     self.afficheHyperlink = kwds.pop("afficheHyperlink", True)
     self.selectionID = None
     self.selectionTrack = None
     self.presents = False
     self.donnees = []
     self.criteres = ""
     self.listeFiltres = []
     self.itemSelected = False
     self.donnees = []
         
     # Initialisation du listCtrl
     ObjectListView.__init__(self, *args, **kwds)
     if self.modeAffichage == None or self.modeAffichage == "sans_nom" : self.listeColonnes = LISTE_COLONNES_1
     if self.modeAffichage == "avec_nom" : self.listeColonnes = LISTE_COLONNES_2
     if self.modeAffichage == "gadget" : self.listeColonnes = LISTE_COLONNES_3
     self.listeColonnesOriginale = list(self.listeColonnes)
     
     # Initialisation du mot de passe :
     global VERROUILLAGE
     if VERROUILLAGE == None :
         password = FonctionsPerso.Parametres(mode="get", categorie="recrutement", nom="password_entretien", valeur="")
         if password == "" :
             VERROUILLAGE = False
         else:
             VERROUILLAGE = True
             
     # Texte
     self.imgVerrouillage = wx.StaticBitmap(self, -1, wx.Bitmap(Chemins.GetStaticPath("Images/Special/Cadenas.png"), wx.BITMAP_TYPE_ANY), pos=(2, self.GetSize()[1]+1-18))
     self.imgVerrouillage.SetBackgroundColour(self.GetBackgroundColour())
     self.texteVerrouillage = Hyperlink(self, label=u"", infobulle=u"", pos=(14, self.GetSize()[1]+18))
     self.texteVerrouillage.SetBackgroundColour(self.GetBackgroundColour())
     self.SetLabelHyperlink()
     if self.afficheHyperlink == False :
         self.imgVerrouillage.Show(False)
         self.texteVerrouillage.Show(False)
     
     # Binds perso
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
     self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
     self.Bind(wx.EVT_SIZE, self.OnSize)
コード例 #33
0
 def __init__(self, *args, **kwds):
     # Récupération des paramètres perso
     self.IDscenario = kwds.pop("IDscenario", None)
     self.IDpersonne = kwds.pop("IDpersonne", None)
     selectionID = kwds.pop("selectionID", None)
     # Initialisation du listCtrl
     ObjectListView.__init__(self, *args, **kwds)
     self.selectionID = None
     self.selectionTrack = None
     self.desactiveMAJ = False
     self.InitModel()
     self.InitObjectListView()
     # Binds perso
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
     self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
コード例 #34
0
ファイル: OL_emplois.py プロジェクト: Noethys/Teamworks
    def __init__(self, *args, **kwds):
        # Récupération des paramètres perso
        self.selectionID = None
        self.selectionTrack = None
        self.presents = False
        self.criteres = ""
        self.listeFiltres = []
        self.itemSelected = False
        self.donnees = []
        # Initialisation du listCtrl
        ObjectListView.__init__(self, *args, **kwds)
        self.listeColonnes = LISTE_COLONNES_1
        self.listeColonnesOriginale = list(self.listeColonnes)
##        self.InitModel()
##        self.InitObjectListView()
        # Binds perso
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
        self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
        self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
コード例 #35
0
    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)
コード例 #36
0
ファイル: gui.py プロジェクト: KillerGoldFisch/groove-dl
 def __init__(self, *args, **kwds):
     kwds["style"] = wx.DEFAULT_FRAME_STYLE
     wx.Frame.__init__(self, *args, **kwds)
     font = wx.Font(9, wx.FONTFAMILY_DEFAULT, style=wx.FONTSTYLE_NORMAL, weight=wx.FONTWEIGHT_NORMAL)
     self.lbl_query = wx.StaticText(self, -1, "  Song:  ", style=wx.ALIGN_CENTRE)
     self.lbl_query.SetFont(font)
     self.txt_query = wx.TextCtrl(self, 1, "", style=wx.TE_PROCESS_ENTER)
     self.fb = wx.StaticBitmap(self, bitmap=wx.BitmapFromImage(wx.ImageFromStream(fbicon, wx.BITMAP_TYPE_PNG)), size=(22,22))
     self.folder_chooser = wx.Button(self, -1, "Choose Destination", size=[-1, self.txt_query.GetSize().GetHeight()])
     self.lst_results = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_downloads = GroupListView(self, -1, style=wx.LC_REPORT)
     self.lst_artists = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_albums = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_songs = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_songs.ToggleWindowStyle(wx.HSCROLL)
     self.frame_statusbar = self.CreateStatusBar(1, wx.SB_RAISED)
     self.__set_properties()
     self.__do_layout()
     self.Bind(EVT_EXEC_FUNC, self._ExecFunc)
     self.Bind(wx.EVT_TEXT_ENTER, self._TextEnter, self.txt_query)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_results)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_songs)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_results)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_songs)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_downloads)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._DownloadsContext, self.lst_downloads)
     self.Bind(wx.EVT_BUTTON, self._ChooseFolder, self.folder_chooser)
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_artists)
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_albums)
     self.fb.Bind(wx.EVT_LEFT_DOWN, self._FBClick)
     self.txt_query.Bind(wx.EVT_KEY_DOWN, self._Tab)
     self.Bind(wx.EVT_CLOSE, self._Close)
     self.menu_results = {}
     self.menu_downloads = {}
     self.menu_results[ID_DOWNLOAD] = "Download"
     self.menu_downloads[ID_REMOVE] = "Remove"
     self.artists = []
     if sys.platform == 'win32':
         self.SetIcon(wx.Icon(sys.executable, wx.BITMAP_TYPE_ICO))
     else:
         if os.path.exists("groove.ico"): self.SetIcon(wx.Icon("groove.ico", wx.BITMAP_TYPE_ICO))
コード例 #37
0
ファイル: gui.py プロジェクト: KillerGoldFisch/groove-dl
class MyFrame(wx.Frame):
    results=[]
    downloads=[]
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        font = wx.Font(9, wx.FONTFAMILY_DEFAULT, style=wx.FONTSTYLE_NORMAL, weight=wx.FONTWEIGHT_NORMAL)
        self.lbl_query = wx.StaticText(self, -1, "  Song:  ", style=wx.ALIGN_CENTRE)
        self.lbl_query.SetFont(font)
        self.txt_query = wx.TextCtrl(self, 1, "", style=wx.TE_PROCESS_ENTER)
        self.fb = wx.StaticBitmap(self, bitmap=wx.BitmapFromImage(wx.ImageFromStream(fbicon, wx.BITMAP_TYPE_PNG)), size=(22,22))
        self.folder_chooser = wx.Button(self, -1, "Choose Destination", size=[-1, self.txt_query.GetSize().GetHeight()])
        self.lst_results = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_downloads = GroupListView(self, -1, style=wx.LC_REPORT)
        self.lst_artists = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_albums = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_songs = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_songs.ToggleWindowStyle(wx.HSCROLL)
        self.frame_statusbar = self.CreateStatusBar(1, wx.SB_RAISED)
        self.__set_properties()
        self.__do_layout()
        self.Bind(EVT_EXEC_FUNC, self._ExecFunc)
        self.Bind(wx.EVT_TEXT_ENTER, self._TextEnter, self.txt_query)
        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_results)
        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_songs)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_results)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_songs)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_downloads)
        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._DownloadsContext, self.lst_downloads)
        self.Bind(wx.EVT_BUTTON, self._ChooseFolder, self.folder_chooser)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_artists)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_albums)
        self.fb.Bind(wx.EVT_LEFT_DOWN, self._FBClick)
        self.txt_query.Bind(wx.EVT_KEY_DOWN, self._Tab)
        self.Bind(wx.EVT_CLOSE, self._Close)
        self.menu_results = {}
        self.menu_downloads = {}
        self.menu_results[ID_DOWNLOAD] = "Download"
        self.menu_downloads[ID_REMOVE] = "Remove"
        self.artists = []
        if sys.platform == 'win32':
            self.SetIcon(wx.Icon(sys.executable, wx.BITMAP_TYPE_ICO))
        else:
            if os.path.exists("groove.ico"): self.SetIcon(wx.Icon("groove.ico", wx.BITMAP_TYPE_ICO))
    def __set_properties(self):
        self.SetTitle("groove-dl v" + version)
        self.SetSize((600, 400))
        self.frame_statusbar.SetStatusWidths([-1])
        frame_statusbar_fields = [""]
        columns = [
        ColumnDefn("Title", "left", 0, valueGetter = "SongName", isSpaceFilling=True),
        ColumnDefn("Album", "center", 0, valueGetter = "AlbumName", isSpaceFilling=True),
        ColumnDefn("Artist", "center", 0, valueGetter = "ArtistName", isSpaceFilling=True)]
        columns[0].freeSpaceProportion = 2
        columns[1].freeSpaceProportion = columns[2].freeSpaceProportion = 1
        self.lst_results.SetColumns(columns)
        self.lst_results.SetObjects(self.results)
        self.lst_results.SetEmptyListMsg(emptylistmsg)
        self.lst_results._ResizeSpaceFillingColumns()
        self.lst_results.useAlternateBackColors = False
        columns = [
        ColumnDefn("Title", "left", 160, valueGetter = "filename", groupKeyGetter= "album", isSpaceFilling=True),
        ColumnDefn("Bitrate", "center", 60, valueGetter = "bitrate"),
        ColumnDefn("Speed", "center", 75, valueGetter = "speed"),
        ColumnDefn("Done/Total", "center", 100, valueGetter = "size"),
        ColumnDefn("Progress", "center", 80, valueGetter = "progress")]
        self.lst_downloads.SetColumns(columns)
        self.lst_downloads.SetObjects(self.downloads)
        self.lst_downloads.SetEmptyListMsg("N/A")
        self.lst_downloads.SortBy(1)
        self.lst_downloads.useAlternateBackColors = False
        self.lst_downloads.putBlankLineBetweenGroups = False
        self.lst_downloads.SetShowGroups(False)
        columns = [ColumnDefn("Artist", "center", 100, valueGetter = "name", isSpaceFilling=True)]
        self.lst_artists.SetColumns(columns)
        self.lst_artists.SetEmptyListMsg("N/A")
        self.lst_artists.useAlternateBackColors = False
        columns = [ColumnDefn("Album", "center", 100, valueGetter = "name", isSpaceFilling=True)]
        self.lst_albums.SetColumns(columns)
        self.lst_albums.SetEmptyListMsg("N/A")
        self.lst_albums.useAlternateBackColors = False
        columns = [ColumnDefn("Song", "center", 100, valueGetter = "Name", isSpaceFilling=True)]
        self.lst_songs.SetColumns(columns)
        self.lst_songs.SetEmptyListMsg("N/A")
        self.lst_songs.useAlternateBackColors = False
        for i in range(len(frame_statusbar_fields)):
            self.frame_statusbar.SetStatusText(frame_statusbar_fields[i], i)
        self.frame_statusbar.SetStatusStyles([wx.SB_FLAT])
        self.list_by_mode = self.lst_results
    def __do_layout(self):
        self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
        self.sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        self.sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
        self.sizer_1.Add(self.sizer_2, 0, wx.EXPAND, 0)
        self.sizer_1.Add(self.lst_results, 2, wx.EXPAND, 10)
        self.sizer_1.Add(self.sizer_3, 2, wx.EXPAND, 0)
        self.sizer_1.Add(self.lst_downloads, 1, wx.EXPAND, 0)
        self.sizer_2.Add(self.lbl_query, 0, wx.ALIGN_CENTER, 0)
        self.sizer_2.Add(self.txt_query, 2, 0, 0)
        self.sizer_2.Add(self.folder_chooser, 0, wx.ALIGN_CENTER, 0)
        self.sizer_2.Add(self.fb, 0, wx.ALIGN_CENTER, 0)
        self.sizer_3.Add(self.lst_artists, 1, wx.EXPAND, 0)
        self.sizer_3.Add(self.lst_albums, 1, wx.EXPAND, 0)
        self.sizer_3.Add(self.lst_songs, 2, wx.EXPAND, 0)
        self.SetSizer(self.sizer_1)
        self.sizer_1.Show(self.sizer_3, False)
        self.Layout()
    def _TextEnter(self, event):
        self.artists = []
        if self.lbl_query.GetLabel() == "  Artist:  ":
            self.lst_albums.DeleteAllItems()
            self.lst_songs.DeleteAllItems()
            search_thread = t_search_object(self, _query=event.GetString())
        elif self.lbl_query.GetLabel() == "  Song:  ":
            search_thread = t_search_flat(self, event.GetString())
        search_thread.start()
    def _ExecFunc(self, event):
        event.func(self, event)
    def _FBClick(self, event):
        webbrowser.open_new_tab('http://www.facebook.com/groove.dl')
    def _ResultsContext(self, event):
        menu = wx.Menu()
        menu.Append(ID_DOWNLOAD, "Download")
        wx.EVT_MENU( menu, ID_DOWNLOAD, self._ContextSelection )
        if self.lbl_query.GetLabel() == "  Song:  ":
            lst = self.lst_results
        elif self.lbl_query.GetLabel() == "  Artist:  ":
            lst = self.lst_songs
        self.PopupMenu(menu, event.GetPoint() + lst.GetPosition())
        menu.Destroy()
    def _DownloadsContext(self, event):
        menu = wx.Menu()
        for (id,title) in self.menu_downloads.items():
            menu.Append(id,title)
            wx.EVT_MENU( menu, id, self._ContextSelection )
        self.PopupMenu(menu, event.GetPoint() + self.lst_downloads.GetPosition())
        menu.Destroy()
    def _DoubleClick(self, event):
        if event.GetEventObject() in [self.lst_results, self.lst_songs]:
            self._ContextSelection(ID_DOWNLOAD)
        elif event.GetEventObject() == self.lst_downloads:
            try:
                path = os.path.join(dest, self.lst_downloads.GetSelectedObjects()[0]["filename"])
                if sys.platform == 'win32': os.startfile(path)
                elif sys.platform == 'linux2': subprocess.Popen(['xdg-open', path])
            except:pass
    def _ContextSelection(self, event, flag=None):
        if (event == ID_DOWNLOAD) or (event.GetId() == ID_DOWNLOAD):
            if self.lbl_query.GetLabel() == "  Song:  ":
                lst = self.lst_results
                name = 'SongName'
            elif self.lbl_query.GetLabel() == "  Artist:  ":
                lst = self.lst_songs
                name = 'Name'
            for song in lst.GetSelectedObjects():
                filename = format
                filename = filename.replace('artist', strip(song["ArtistName"], "<>:\"/\|?*"))
                filename = filename.replace('title', strip(song[name], "<>:\"/\|?*"))
                filename = filename.replace('album', strip(song["AlbumName"], "<>:\"/\|?*"))
                c = 2
                fn = filename
                while os.path.exists(os.path.join(dest, fn+'.mp3')) or fn+'.mp3' in [i['filename'] for i in self.downloads]:
                    fn = filename + ' (%d)' % c
                    c += 1
                filename = fn + '.mp3'
                t = t_download(self, song)
                t.download = {"progress":"Initializing", "thread":t, "filename":filename, "album":song["AlbumName"]}
                self.downloads.append(t.download)
                self.lst_downloads.SetObjects(self.downloads)
                t.start()
        elif (flag != None and flag.flag == ID_REMOVE) or (event.GetId() == ID_REMOVE):
            for d in self.lst_downloads.GetSelectedObjects():
                d["thread"].cancelled = True
                self.downloads.remove(d)
            self.lst_downloads.RemoveObjects(self.lst_downloads.GetSelectedObjects())
    def _ChooseFolder(self, event):
        global dest
        dialog = wx.DirDialog(None, "Please choose the destination directory:", os.getenv('USERPROFILE') if sys.platform == 'win32' else os.getenv('HOME'))
        if dialog.ShowModal() == wx.ID_OK:
            dest = dialog.GetPath()
        dialog.Destroy()
    def _Tab(self, event):
        if event.GetKeyCode() == 9:
            if self.lbl_query.GetLabel() == "  Song:  ":
                self.sizer_1.Show(self.sizer_3, True)
                self.sizer_1.Show(self.lst_results, False)
                self.sizer_1.Layout()
                self.lbl_query.SetLabel("  Artist:  ")
                self.list_by_mode = self.lst_artists
                self.lst_downloads.SetShowGroups(True)
                self.lst_downloads._ResizeSpaceFillingColumns()
            elif self.lbl_query.GetLabel() == "  Artist:  ":
                self.sizer_1.Show(self.sizer_3, False)
                self.sizer_1.Show(self.lst_results, True)
                self.sizer_1.Layout()
                self.lbl_query.SetLabel("  Song:  ")
                self.list_by_mode = self.lst_results
                self.lst_downloads.SetShowGroups(False)
                self.lst_downloads._ResizeSpaceFillingColumns()
        event.Skip()
    def _ObjectSelected(self, event):
        if event.GetEventObject() == self.lst_artists:
            self.lst_albums.DeleteAllItems()
            self.lst_songs.DeleteAllItems()
            obj = self.lst_artists.GetSelectedObject()
            artist_thread = t_search_object(self, obj)
            artist_thread.start()
        elif event.GetEventObject() == self.lst_albums:
            self.lst_songs.SetObjects(self.lst_albums.GetSelectedObject().Songs)
    def _Close(self, event):
        l = 0
        for i in self.downloads:
            if i["progress"] != "Completed" and i["progress"] != "Error":
                l += 1
        if l > 0: 
            if wx.MessageDialog(self, "There are currently %d active downloads. Are you sure you want to cancel them and exit ?" % l, "Active downloads", wx.YES_NO|wx.CENTRE).ShowModal() == wx.ID_NO:
                return
        for d in self.downloads:
            d["thread"].cancelled = True
        config = ConfigParser.RawConfigParser()
        config.add_section("groove-dl")
        config.set("groove-dl", "dest", dest)
        config.set("groove-dl", "format", format)
        config.write(open(os.path.join(conf, "settings.ini"), "wb"))
        sys.stdout.close()
        sys.stderr.close()
        while (threading.active_count() > 3): time.sleep(0.1)
        os._exit(0)
コード例 #38
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)
コード例 #39
0
 def __init__(self, *args, **kwargs):
     ObjectListView.__init__(self, *args, **kwargs)
     self.selected = set()
     self.selectedItems = []
     self.lastSelected = -1
     self.deleting = -1