Exemple #1
0
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
Exemple #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)
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)
Exemple #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')
Exemple #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)
Exemple #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)
Exemple #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()
Exemple #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)
Exemple #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)
    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)
Exemple #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()
Exemple #12
0
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()))
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)
        
        
Exemple #14
0
    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 __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)
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()
Exemple #17
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, "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)
Exemple #18
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)
        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()
Exemple #19
0
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())
Exemple #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)
Exemple #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)
 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)
Exemple #23
0
 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')
Exemple #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()
Exemple #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
Exemple #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)
    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)
    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()
Exemple #29
0
 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)
Exemple #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)
Exemple #31
0
    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)
Exemple #32
0
 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)
 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)
Exemple #34
0
    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)
    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)
Exemple #36
0
 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))
Exemple #37
0
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)
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)
 def __init__(self, *args, **kwargs):
     ObjectListView.__init__(self, *args, **kwargs)
     self.selected = set()
     self.selectedItems = []
     self.lastSelected = -1
     self.deleting = -1