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
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)
def __init__(self, parent): wx.Panel.__init__(self, parent=parent) self.plots = [] self.pickedColors = [] self.colors = self.setupColors() self.plotsOlv = ObjectListView(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER, useAlternateBackColors=False) self.plotsOlv.Bind(OLVEvent.EVT_ITEM_CHECKED, self.checkboxClicked) self.plotsOlv.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick) #self.plotsOlv.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.onRightClick) self.getPlots() self.setColumns() self.plotsOlv.CreateCheckStateColumn() self.plotsOlv.SetObjects(self.plots) bsizer = wx.BoxSizer() #bsizer.Add(lb, 1, wx.EXPAND) bsizer.Add(self.plotsOlv, 1, wx.EXPAND) self.SetSizer(bsizer) self.checkedPlots = {} pub.subscribe(self.refreshList, 'list.updated') pub.subscribe(self.checkboxClicked, 'checkbox.clicked') pub.subscribe(self.onSavePlot, 'file.savePlot') pub.subscribe(self.onDelete, 'edit.delete')
def 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)
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)
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()
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)
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)
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()
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)
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()
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)
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()
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())
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)
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)
def __init__(self, parent, db=None): wx.Panel.__init__(self, parent, -1) self.listview = ObjectListView(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.listview, 1, flag=wx.EXPAND) self.SetSizer(sizer) self.db = db pub.subscribe(self.onDivision, 'division')
def __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()
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
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()
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 __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)
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)
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)
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)
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))
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