コード例 #1
0
    def __init__(self, parent):
        super(RoutinePanel, self).__init__(parent, wx.ID_ANY)

        self.active_routine = self.GetParent().GetParent().active_routine

        if self.active_routine is not None:
            self.sessions = self.active_routine["sessions"]
        else:
            self.sessions = []

        self.routineView = GroupListView(self,
                                         wx.ID_ANY,
                                         style=wx.LC_REPORT | wx.SUNKEN_BORDER)

        self.routineView.SetColumns([
            ColumnDefn("Date", "left", 200, "date"),
            ColumnDefn("Workout Name", "left", 280, "workoutName"),
            ColumnDefn("Target", "left", 200, "muscleGroup"),
            ColumnDefn("Weight", "left", 150, "weight"),
            ColumnDefn("Sets", "right", 50, "sets"),
            ColumnDefn("Reps", "left", 50, "reps")
        ])

        self.routineView.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
        self.routineViewSizer = wx.BoxSizer(wx.VERTICAL)
        self.routineViewSizer.Add(self.routineView, 1, wx.ALL | wx.EXPAND, 5)
        self.SetSizer(self.routineViewSizer)
コード例 #2
0
ファイル: OL_Portail_demandes.py プロジェクト: CugeDe/Noethys
 def __init__(self, *args, **kwds):
     # Initialisation du listCtrl
     self.log = None
     self.cacher_traitees = True
     self.regroupement = None
     self.tri = "horodatage"
     GroupListView.__init__(self, *args, **kwds)
     # Binds perso
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
コード例 #3
0
 def __init__(self, *args, **kwds):
     # Initialisation du listCtrl
     self.listeFichiers = kwds.pop("listeFichiers", [])
     self.listeFichiersTrouves = []
     self.dictIDappareil = {}
     self.cacher_doublons = True
     self.index_regroupement = 4
     GroupListView.__init__(self, *args, **kwds)
     # Binds perso
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
コード例 #4
0
 def __init__(self, *args, **kwds):
     # Initialisation du listCtrl
     self.log = None
     self.cacher_traitees = True
     self.regroupement = None
     self.tri = "horodatage"
     GroupListView.__init__(self, *args, **kwds)
     # Binds perso
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
コード例 #5
0
 def __init__(self, *args, **kwds):
     # Initialisation du listCtrl
     self.listeFichiers = kwds.pop("listeFichiers", [])
     self.listeFichiersTrouves = []
     self.dictIDappareil = {}
     self.cacher_doublons = True
     self.index_regroupement = 4
     GroupListView.__init__(self, *args, **kwds)
     # Binds perso
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
コード例 #6
0
    def InitWidgets(self):
        panel = wx.Panel(self, -1)
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(panel, 1, wx.ALL | wx.EXPAND)
        self.SetSizer(sizer_1)

        self.myOlv = GroupListView(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()
コード例 #7
0
ファイル: OL_Suivi_budget.py プロジェクト: CugeDe/Noethys
 def __init__(self, *args, **kwds):
     # Récupération des paramètres perso
     self.selectionID = None
     self.selectionTrack = None
     self.criteres = ""
     self.itemSelected = False
     self.popupIndex = -1
     self.listeFiltres = []
     self.listeTracks = []
     self.dictBudget = None
     # Initialisation du listCtrl
     GroupListView.__init__(self, *args, **kwds)
     # Binds perso
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
コード例 #8
0
 def __init__(self, *args, **kwds):
     # Récupération des paramètres perso
     self.selectionID = None
     self.selectionTrack = None
     self.criteres = ""
     self.itemSelected = False
     self.popupIndex = -1
     self.listeFiltres = []
     self.listeTracks = []
     self.dictBudget = None
     # Initialisation du listCtrl
     GroupListView.__init__(self, *args, **kwds)
     # Binds perso
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
コード例 #9
0
 def __init__(self, *args, **kwds):
     GroupListView.__init__(self, *args, **kwds)
     self.selectionID = None
     self.selectionTrack = None
     self.IDactivite = None
     self.partis = True
     self.listeGroupes = []
     self.listeCategories = []
     self.regroupement = None
     self.listeColonnes = []
     self.labelParametres = ""
     # Binds perso
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated)
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
コード例 #10
0
 def __init__(self, *args, **kwds):
     GroupListView.__init__(self, *args, **kwds)
     self.selectionID = None
     self.selectionTrack = None
     self.IDactivite = None
     self.partis = True
     self.listeGroupes = []
     self.listeCategories = []
     self.regroupement = None
     self.listeColonnes = []
     self.labelParametres = ""
     # Binds perso
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated)
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
コード例 #11
0
 def __init__(self, *args, **kwds):
     self.selectionID = None
     self.selectionTrack = None
     self.IDactivite = None
     self.partis = True
     self.listeGroupes = []
     self.listeCategories = []
     self.regroupement = None
     self.labelParametres = ""
     # Initialisation du listCtrl
     self.nom_fichier_liste = __file__
     GroupListView.__init__(self, *args, **kwds)
     # Binds perso
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated)
     self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
コード例 #12
0
class RoutinePanel(wx.Panel):
    def __init__(self, parent):
        super(RoutinePanel, self).__init__(parent, wx.ID_ANY)

        self.active_routine = self.GetParent().GetParent().active_routine

        if self.active_routine is not None:
            self.sessions = self.active_routine["sessions"]
        else:
            self.sessions = []

        self.routineView = GroupListView(self,
                                         wx.ID_ANY,
                                         style=wx.LC_REPORT | wx.SUNKEN_BORDER)

        self.routineView.SetColumns([
            ColumnDefn("Date", "left", 200, "date"),
            ColumnDefn("Workout Name", "left", 280, "workoutName"),
            ColumnDefn("Target", "left", 200, "muscleGroup"),
            ColumnDefn("Weight", "left", 150, "weight"),
            ColumnDefn("Sets", "right", 50, "sets"),
            ColumnDefn("Reps", "left", 50, "reps")
        ])

        self.routineView.cellEditMode = ObjectListView.CELLEDIT_DOUBLECLICK
        self.routineViewSizer = wx.BoxSizer(wx.VERTICAL)
        self.routineViewSizer.Add(self.routineView, 1, wx.ALL | wx.EXPAND, 5)
        self.SetSizer(self.routineViewSizer)

    # Routine Event Handler
    def onPageChangeListener(self, event=None):
        # Clear the routines
        self.sessions = []
        self.active_routine = self.GetParent().GetParent().active_routine

        # if active routine is set, generate list
        if self.active_routine is not None:
            sessions = self.active_routine["sessions"]

            # For each session, append the workouts
            for session in sessions:
                for workout in session["workouts"]:
                    # Append the date to each workout for ObjectListView grouping
                    workout["date"] = session["date"]

                self.sessions.extend(session["workouts"])

            self.routineView.SetObjects(self.sessions)
コード例 #13
0
    def setUp(self):
        super(TestGroupObjectListView, self).setUp()

        panel = wx.Panel(self.frame, -1)
        self.objectListView = GroupListView(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)
コード例 #14
0
    def __init__(self, *args, **kwds):
        # Initialisation du listCtrl
        self.IDfamille = kwds.pop("IDfamille", None)
        self.selectionID = None
        self.selectionTrack = None
        ##        locale.setlocale(locale.LC_ALL, 'FR')
        GroupListView.__init__(self, *args, **kwds)
        self.listePeriodes = []
        self.listeIndividus = []
        self.listeActivites = []
        self.listeFactures = []
        self.total = 0.0
        self.dictFiltres = {}
        ##        self.InitModel()
        ##        self.InitObjectListView()
        # Binds perso
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated)
        self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)

        self.SetShowGroups(False)
コード例 #15
0
ファイル: OL_Prestations.py プロジェクト: CugeDe/Noethys
    def __init__(self, *args, **kwds):
        # Initialisation du listCtrl
        self.IDfamille = kwds.pop("IDfamille", None)
        self.selectionID = None
        self.selectionTrack = None
##        locale.setlocale(locale.LC_ALL, 'FR')
        GroupListView.__init__(self, *args, **kwds)
        self.listePeriodes = []
        self.listeIndividus = []
        self.listeActivites = []
        self.listeFactures = []
        self.total = 0.0
        self.dictFiltres = {}
##        self.InitModel()
##        self.InitObjectListView()
        # Binds perso
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnActivated)
        self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
        
        self.SetShowGroups(False)
コード例 #16
0
ファイル: gui.py プロジェクト: pinguar/groove-dl
 def __init__(self, *args, **kwds):
     kwds["style"] = wx.DEFAULT_FRAME_STYLE
     wx.Frame.__init__(self, *args, **kwds)
     font = wx.Font(9, wx.FONTFAMILY_DEFAULT, style=wx.FONTSTYLE_NORMAL, weight=wx.FONTWEIGHT_NORMAL)
     self.lbl_query = wx.StaticText(self, -1, "  Song:  ", style=wx.ALIGN_CENTRE)
     self.lbl_query.SetFont(font)
     self.txt_query = wx.TextCtrl(self, 1, "", style=wx.TE_PROCESS_ENTER)
     self.fb = wx.StaticBitmap(self, bitmap=wx.BitmapFromImage(wx.ImageFromStream(fbicon, wx.BITMAP_TYPE_PNG)), size=(22,22))
     self.folder_chooser = wx.Button(self, -1, "Choose Destination", size=[-1, self.txt_query.GetSize().GetHeight()])
     self.lst_results = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_downloads = GroupListView(self, -1, style=wx.LC_REPORT)
     self.lst_artists = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_albums = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_songs = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_songs.ToggleWindowStyle(wx.HSCROLL)
     self.frame_statusbar = self.CreateStatusBar(1, wx.SB_RAISED)
     self.__set_properties()
     self.__do_layout()
     self.Bind(EVT_EXEC_FUNC, self._ExecFunc)
     self.Bind(wx.EVT_TEXT_ENTER, self._TextEnter, self.txt_query)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_results)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_songs)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_results)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_songs)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_downloads)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._DownloadsContext, self.lst_downloads)
     self.Bind(wx.EVT_BUTTON, self._ChooseFolder, self.folder_chooser)
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_artists)
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_albums)
     self.fb.Bind(wx.EVT_LEFT_DOWN, self._FBClick)
     self.txt_query.Bind(wx.EVT_KEY_DOWN, self._Tab)
     self.Bind(wx.EVT_CLOSE, self._Close)
     self.menu_results = {}
     self.menu_downloads = {}
     self.menu_results[ID_DOWNLOAD] = "Download"
     self.menu_downloads[ID_REMOVE] = "Remove"
     self.artists = []
     if sys.platform == 'win32':
         self.SetIcon(wx.Icon(sys.executable, wx.BITMAP_TYPE_ICO))
     else:
         if os.path.exists("groove.ico"): self.SetIcon(wx.Icon("groove.ico", wx.BITMAP_TYPE_ICO))
コード例 #17
0
ファイル: gui.py プロジェクト: KillerGoldFisch/groove-dl
 def __init__(self, *args, **kwds):
     kwds["style"] = wx.DEFAULT_FRAME_STYLE
     wx.Frame.__init__(self, *args, **kwds)
     font = wx.Font(9, wx.FONTFAMILY_DEFAULT, style=wx.FONTSTYLE_NORMAL, weight=wx.FONTWEIGHT_NORMAL)
     self.lbl_query = wx.StaticText(self, -1, "  Song:  ", style=wx.ALIGN_CENTRE)
     self.lbl_query.SetFont(font)
     self.txt_query = wx.TextCtrl(self, 1, "", style=wx.TE_PROCESS_ENTER)
     self.fb = wx.StaticBitmap(self, bitmap=wx.BitmapFromImage(wx.ImageFromStream(fbicon, wx.BITMAP_TYPE_PNG)), size=(22,22))
     self.folder_chooser = wx.Button(self, -1, "Choose Destination", size=[-1, self.txt_query.GetSize().GetHeight()])
     self.lst_results = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_downloads = GroupListView(self, -1, style=wx.LC_REPORT)
     self.lst_artists = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_albums = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_songs = ObjectListView(self, -1, style=wx.LC_REPORT)
     self.lst_songs.ToggleWindowStyle(wx.HSCROLL)
     self.frame_statusbar = self.CreateStatusBar(1, wx.SB_RAISED)
     self.__set_properties()
     self.__do_layout()
     self.Bind(EVT_EXEC_FUNC, self._ExecFunc)
     self.Bind(wx.EVT_TEXT_ENTER, self._TextEnter, self.txt_query)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_results)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_songs)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_results)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_songs)
     self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_downloads)
     self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._DownloadsContext, self.lst_downloads)
     self.Bind(wx.EVT_BUTTON, self._ChooseFolder, self.folder_chooser)
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_artists)
     self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_albums)
     self.fb.Bind(wx.EVT_LEFT_DOWN, self._FBClick)
     self.txt_query.Bind(wx.EVT_KEY_DOWN, self._Tab)
     self.Bind(wx.EVT_CLOSE, self._Close)
     self.menu_results = {}
     self.menu_downloads = {}
     self.menu_results[ID_DOWNLOAD] = "Download"
     self.menu_downloads[ID_REMOVE] = "Remove"
     self.artists = []
     if sys.platform == 'win32':
         self.SetIcon(wx.Icon(sys.executable, wx.BITMAP_TYPE_ICO))
     else:
         if os.path.exists("groove.ico"): self.SetIcon(wx.Icon("groove.ico", wx.BITMAP_TYPE_ICO))
コード例 #18
0
        def __init__(self, *args, **kwds):
            kwds["style"] = wx.DEFAULT_FRAME_STYLE
            wx.Frame.__init__(self, *args, **kwds)

            global theObjectListView, theFastObjectListView, theVirtualObjectListView, theGroupObjectListView, theFrame
            theFrame = self

            self.panel = wx.Panel(self, -1)
            theObjectListView = ObjectListView(self.panel,
                                               -1,
                                               style=wx.LC_REPORT
                                               | wx.SUNKEN_BORDER)
            theFastObjectListView = FastObjectListView(self.panel,
                                                       -1,
                                                       style=wx.LC_REPORT
                                                       | wx.SUNKEN_BORDER)
            theVirtualObjectListView = VirtualObjectListView(
                self.panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
            theGroupObjectListView = GroupListView(self.panel,
                                                   -1,
                                                   style=wx.LC_REPORT
                                                   | wx.SUNKEN_BORDER)

            sizer_2 = wx.BoxSizer(wx.VERTICAL)
            sizer_2.Add(theObjectListView, 1, wx.ALL | wx.EXPAND, 4)
            sizer_2.Add(theFastObjectListView, 1, wx.ALL | wx.EXPAND, 4)
            sizer_2.Add(theVirtualObjectListView, 1, wx.ALL | wx.EXPAND, 4)
            sizer_2.Add(theGroupObjectListView, 1, wx.ALL | wx.EXPAND, 4)
            self.panel.SetSizer(sizer_2)
            self.panel.Layout()

            sizer_1 = wx.BoxSizer(wx.VERTICAL)
            sizer_1.Add(self.panel, 1, wx.EXPAND)
            self.SetSizer(sizer_1)
            self.Layout()

            wx.CallAfter(self.runTests)
コード例 #19
0
ファイル: wxsens.py プロジェクト: SukkoPera/Arduino-Sensoria
	def _makeListView (self, parent):
		if self.config.groupByGenre:
			listView = GroupListView (parent, wx.ID_ANY, style = wx.LC_REPORT | wx.SUNKEN_BORDER, useAlternateBackColors = False)
		else:
			listView = ObjectListView (parent, wx.ID_ANY, style = wx.LC_REPORT | wx.SUNKEN_BORDER, useAlternateBackColors = False)

		listView.rowFormatter = self.rowFormatter
		listView.SetEmptyListMsg ("No transducers found")

		# COLUMNS:
		# Normal: DR
		# Grp: D(G)R
		# Det: DNGSR
		# Det+Grp: DN(G)SR
		cols = ([
			ColumnDefn ("Description", "left", 220, "smartName"),
			ColumnDefn ("Reading", "right", 100, "lastRead", isSpaceFilling = True),
		])

		if self.config.viewDetails:
			cols.insert (1, ColumnDefn ("Name", "center", 50, "name"))
			if self.config.groupByGenre:
				# This col is only used for grouping, use 0 width and make entries empty to hide it
				cols.insert (2, ColumnDefn ("Genre", "center", 0, "genre", maximumWidth = 0, stringConverter = lambda g: "", groupKeyConverter = lambda g: "Sensors" if g == Sensoria.SENSOR else "Actuators"))
			else:
				cols.insert (2, ColumnDefn ("Genre", "center", 100, "genre", stringConverter = lambda g: "Sensor" if g == Sensoria.SENSOR else "Actuator"))
			cols.insert (3, ColumnDefn ("Stereo", "center", 50, "stereotype"))
		elif self.config.groupByGenre:
				# This col is only used for grouping, use 0 width and make entries empty to hide it
				cols.insert (2, ColumnDefn ("Genre", "center", 50, "genre", maximumWidth = 0, stringConverter = lambda g: "", groupKeyConverter = lambda g: "Sensors" if g == Sensoria.SENSOR else "Actuators"))

		listView.SetColumns (cols)

		if self.config.groupByGenre:
			listView.showItemCounts = False
			listView.SetShowGroups = True
			listView.alwaysGroupByColumnIndex = 3			# col 0 is expansion icon
			listView.SetSortColumn (listView.columns[1])
		else:
			listView.SetSortColumn (listView.columns[0])

		listView.Bind (wx.EVT_LIST_ITEM_ACTIVATED, self.onItemDoubleClicked)
		listView.Bind (wx.EVT_LIST_ITEM_RIGHT_CLICK, self.onItemRightClicked)

		return listView
コード例 #20
0
ファイル: gui.py プロジェクト: KillerGoldFisch/groove-dl
class MyFrame(wx.Frame):
    results=[]
    downloads=[]
    def __init__(self, *args, **kwds):
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        font = wx.Font(9, wx.FONTFAMILY_DEFAULT, style=wx.FONTSTYLE_NORMAL, weight=wx.FONTWEIGHT_NORMAL)
        self.lbl_query = wx.StaticText(self, -1, "  Song:  ", style=wx.ALIGN_CENTRE)
        self.lbl_query.SetFont(font)
        self.txt_query = wx.TextCtrl(self, 1, "", style=wx.TE_PROCESS_ENTER)
        self.fb = wx.StaticBitmap(self, bitmap=wx.BitmapFromImage(wx.ImageFromStream(fbicon, wx.BITMAP_TYPE_PNG)), size=(22,22))
        self.folder_chooser = wx.Button(self, -1, "Choose Destination", size=[-1, self.txt_query.GetSize().GetHeight()])
        self.lst_results = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_downloads = GroupListView(self, -1, style=wx.LC_REPORT)
        self.lst_artists = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_albums = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_songs = ObjectListView(self, -1, style=wx.LC_REPORT)
        self.lst_songs.ToggleWindowStyle(wx.HSCROLL)
        self.frame_statusbar = self.CreateStatusBar(1, wx.SB_RAISED)
        self.__set_properties()
        self.__do_layout()
        self.Bind(EVT_EXEC_FUNC, self._ExecFunc)
        self.Bind(wx.EVT_TEXT_ENTER, self._TextEnter, self.txt_query)
        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_results)
        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._ResultsContext, self.lst_songs)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_results)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_songs)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._DoubleClick, self.lst_downloads)
        self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._DownloadsContext, self.lst_downloads)
        self.Bind(wx.EVT_BUTTON, self._ChooseFolder, self.folder_chooser)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_artists)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._ObjectSelected, self.lst_albums)
        self.fb.Bind(wx.EVT_LEFT_DOWN, self._FBClick)
        self.txt_query.Bind(wx.EVT_KEY_DOWN, self._Tab)
        self.Bind(wx.EVT_CLOSE, self._Close)
        self.menu_results = {}
        self.menu_downloads = {}
        self.menu_results[ID_DOWNLOAD] = "Download"
        self.menu_downloads[ID_REMOVE] = "Remove"
        self.artists = []
        if sys.platform == 'win32':
            self.SetIcon(wx.Icon(sys.executable, wx.BITMAP_TYPE_ICO))
        else:
            if os.path.exists("groove.ico"): self.SetIcon(wx.Icon("groove.ico", wx.BITMAP_TYPE_ICO))
    def __set_properties(self):
        self.SetTitle("groove-dl v" + version)
        self.SetSize((600, 400))
        self.frame_statusbar.SetStatusWidths([-1])
        frame_statusbar_fields = [""]
        columns = [
        ColumnDefn("Title", "left", 0, valueGetter = "SongName", isSpaceFilling=True),
        ColumnDefn("Album", "center", 0, valueGetter = "AlbumName", isSpaceFilling=True),
        ColumnDefn("Artist", "center", 0, valueGetter = "ArtistName", isSpaceFilling=True)]
        columns[0].freeSpaceProportion = 2
        columns[1].freeSpaceProportion = columns[2].freeSpaceProportion = 1
        self.lst_results.SetColumns(columns)
        self.lst_results.SetObjects(self.results)
        self.lst_results.SetEmptyListMsg(emptylistmsg)
        self.lst_results._ResizeSpaceFillingColumns()
        self.lst_results.useAlternateBackColors = False
        columns = [
        ColumnDefn("Title", "left", 160, valueGetter = "filename", groupKeyGetter= "album", isSpaceFilling=True),
        ColumnDefn("Bitrate", "center", 60, valueGetter = "bitrate"),
        ColumnDefn("Speed", "center", 75, valueGetter = "speed"),
        ColumnDefn("Done/Total", "center", 100, valueGetter = "size"),
        ColumnDefn("Progress", "center", 80, valueGetter = "progress")]
        self.lst_downloads.SetColumns(columns)
        self.lst_downloads.SetObjects(self.downloads)
        self.lst_downloads.SetEmptyListMsg("N/A")
        self.lst_downloads.SortBy(1)
        self.lst_downloads.useAlternateBackColors = False
        self.lst_downloads.putBlankLineBetweenGroups = False
        self.lst_downloads.SetShowGroups(False)
        columns = [ColumnDefn("Artist", "center", 100, valueGetter = "name", isSpaceFilling=True)]
        self.lst_artists.SetColumns(columns)
        self.lst_artists.SetEmptyListMsg("N/A")
        self.lst_artists.useAlternateBackColors = False
        columns = [ColumnDefn("Album", "center", 100, valueGetter = "name", isSpaceFilling=True)]
        self.lst_albums.SetColumns(columns)
        self.lst_albums.SetEmptyListMsg("N/A")
        self.lst_albums.useAlternateBackColors = False
        columns = [ColumnDefn("Song", "center", 100, valueGetter = "Name", isSpaceFilling=True)]
        self.lst_songs.SetColumns(columns)
        self.lst_songs.SetEmptyListMsg("N/A")
        self.lst_songs.useAlternateBackColors = False
        for i in range(len(frame_statusbar_fields)):
            self.frame_statusbar.SetStatusText(frame_statusbar_fields[i], i)
        self.frame_statusbar.SetStatusStyles([wx.SB_FLAT])
        self.list_by_mode = self.lst_results
    def __do_layout(self):
        self.sizer_1 = wx.BoxSizer(wx.VERTICAL)
        self.sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        self.sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
        self.sizer_1.Add(self.sizer_2, 0, wx.EXPAND, 0)
        self.sizer_1.Add(self.lst_results, 2, wx.EXPAND, 10)
        self.sizer_1.Add(self.sizer_3, 2, wx.EXPAND, 0)
        self.sizer_1.Add(self.lst_downloads, 1, wx.EXPAND, 0)
        self.sizer_2.Add(self.lbl_query, 0, wx.ALIGN_CENTER, 0)
        self.sizer_2.Add(self.txt_query, 2, 0, 0)
        self.sizer_2.Add(self.folder_chooser, 0, wx.ALIGN_CENTER, 0)
        self.sizer_2.Add(self.fb, 0, wx.ALIGN_CENTER, 0)
        self.sizer_3.Add(self.lst_artists, 1, wx.EXPAND, 0)
        self.sizer_3.Add(self.lst_albums, 1, wx.EXPAND, 0)
        self.sizer_3.Add(self.lst_songs, 2, wx.EXPAND, 0)
        self.SetSizer(self.sizer_1)
        self.sizer_1.Show(self.sizer_3, False)
        self.Layout()
    def _TextEnter(self, event):
        self.artists = []
        if self.lbl_query.GetLabel() == "  Artist:  ":
            self.lst_albums.DeleteAllItems()
            self.lst_songs.DeleteAllItems()
            search_thread = t_search_object(self, _query=event.GetString())
        elif self.lbl_query.GetLabel() == "  Song:  ":
            search_thread = t_search_flat(self, event.GetString())
        search_thread.start()
    def _ExecFunc(self, event):
        event.func(self, event)
    def _FBClick(self, event):
        webbrowser.open_new_tab('http://www.facebook.com/groove.dl')
    def _ResultsContext(self, event):
        menu = wx.Menu()
        menu.Append(ID_DOWNLOAD, "Download")
        wx.EVT_MENU( menu, ID_DOWNLOAD, self._ContextSelection )
        if self.lbl_query.GetLabel() == "  Song:  ":
            lst = self.lst_results
        elif self.lbl_query.GetLabel() == "  Artist:  ":
            lst = self.lst_songs
        self.PopupMenu(menu, event.GetPoint() + lst.GetPosition())
        menu.Destroy()
    def _DownloadsContext(self, event):
        menu = wx.Menu()
        for (id,title) in self.menu_downloads.items():
            menu.Append(id,title)
            wx.EVT_MENU( menu, id, self._ContextSelection )
        self.PopupMenu(menu, event.GetPoint() + self.lst_downloads.GetPosition())
        menu.Destroy()
    def _DoubleClick(self, event):
        if event.GetEventObject() in [self.lst_results, self.lst_songs]:
            self._ContextSelection(ID_DOWNLOAD)
        elif event.GetEventObject() == self.lst_downloads:
            try:
                path = os.path.join(dest, self.lst_downloads.GetSelectedObjects()[0]["filename"])
                if sys.platform == 'win32': os.startfile(path)
                elif sys.platform == 'linux2': subprocess.Popen(['xdg-open', path])
            except:pass
    def _ContextSelection(self, event, flag=None):
        if (event == ID_DOWNLOAD) or (event.GetId() == ID_DOWNLOAD):
            if self.lbl_query.GetLabel() == "  Song:  ":
                lst = self.lst_results
                name = 'SongName'
            elif self.lbl_query.GetLabel() == "  Artist:  ":
                lst = self.lst_songs
                name = 'Name'
            for song in lst.GetSelectedObjects():
                filename = format
                filename = filename.replace('artist', strip(song["ArtistName"], "<>:\"/\|?*"))
                filename = filename.replace('title', strip(song[name], "<>:\"/\|?*"))
                filename = filename.replace('album', strip(song["AlbumName"], "<>:\"/\|?*"))
                c = 2
                fn = filename
                while os.path.exists(os.path.join(dest, fn+'.mp3')) or fn+'.mp3' in [i['filename'] for i in self.downloads]:
                    fn = filename + ' (%d)' % c
                    c += 1
                filename = fn + '.mp3'
                t = t_download(self, song)
                t.download = {"progress":"Initializing", "thread":t, "filename":filename, "album":song["AlbumName"]}
                self.downloads.append(t.download)
                self.lst_downloads.SetObjects(self.downloads)
                t.start()
        elif (flag != None and flag.flag == ID_REMOVE) or (event.GetId() == ID_REMOVE):
            for d in self.lst_downloads.GetSelectedObjects():
                d["thread"].cancelled = True
                self.downloads.remove(d)
            self.lst_downloads.RemoveObjects(self.lst_downloads.GetSelectedObjects())
    def _ChooseFolder(self, event):
        global dest
        dialog = wx.DirDialog(None, "Please choose the destination directory:", os.getenv('USERPROFILE') if sys.platform == 'win32' else os.getenv('HOME'))
        if dialog.ShowModal() == wx.ID_OK:
            dest = dialog.GetPath()
        dialog.Destroy()
    def _Tab(self, event):
        if event.GetKeyCode() == 9:
            if self.lbl_query.GetLabel() == "  Song:  ":
                self.sizer_1.Show(self.sizer_3, True)
                self.sizer_1.Show(self.lst_results, False)
                self.sizer_1.Layout()
                self.lbl_query.SetLabel("  Artist:  ")
                self.list_by_mode = self.lst_artists
                self.lst_downloads.SetShowGroups(True)
                self.lst_downloads._ResizeSpaceFillingColumns()
            elif self.lbl_query.GetLabel() == "  Artist:  ":
                self.sizer_1.Show(self.sizer_3, False)
                self.sizer_1.Show(self.lst_results, True)
                self.sizer_1.Layout()
                self.lbl_query.SetLabel("  Song:  ")
                self.list_by_mode = self.lst_results
                self.lst_downloads.SetShowGroups(False)
                self.lst_downloads._ResizeSpaceFillingColumns()
        event.Skip()
    def _ObjectSelected(self, event):
        if event.GetEventObject() == self.lst_artists:
            self.lst_albums.DeleteAllItems()
            self.lst_songs.DeleteAllItems()
            obj = self.lst_artists.GetSelectedObject()
            artist_thread = t_search_object(self, obj)
            artist_thread.start()
        elif event.GetEventObject() == self.lst_albums:
            self.lst_songs.SetObjects(self.lst_albums.GetSelectedObject().Songs)
    def _Close(self, event):
        l = 0
        for i in self.downloads:
            if i["progress"] != "Completed" and i["progress"] != "Error":
                l += 1
        if l > 0: 
            if wx.MessageDialog(self, "There are currently %d active downloads. Are you sure you want to cancel them and exit ?" % l, "Active downloads", wx.YES_NO|wx.CENTRE).ShowModal() == wx.ID_NO:
                return
        for d in self.downloads:
            d["thread"].cancelled = True
        config = ConfigParser.RawConfigParser()
        config.add_section("groove-dl")
        config.set("groove-dl", "dest", dest)
        config.set("groove-dl", "format", format)
        config.write(open(os.path.join(conf, "settings.ini"), "wb"))
        sys.stdout.close()
        sys.stderr.close()
        while (threading.active_count() > 3): time.sleep(0.1)
        os._exit(0)
コード例 #21
0
class TestGroupObjectListView(TestObjectListView):
    def setUp(self):
        super(TestGroupObjectListView, self).setUp()

        panel = wx.Panel(self.frame, -1)
        self.objectListView = GroupListView(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)

    #-------------------------------------------------------------------------
    # Override inherited tests

    def testBasicState(self):
        self.assertEqual(self.objectListView.GetColumnCount(),
                         len(personColumns) + 1)
        self.assertEqual(
            self.objectListView.GetItemCount(),
            len(persons) + len(self.objectListView.groups) * 2 - 1)

    def testSorting(self):
        # Sorting within a GroupListView is completely different from an
        # ObjectListView
        pass

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

    def testAlternateColours(self):
        # Not ever row has alternate colours -- only those for model objects
        self.objectListView.useAlternateBackColors = True
        self.objectListView.RepopulateList()
        for i in range(self.objectListView.GetItemCount()):
            if self.objectListView.GetObjectAt(i):
                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 direct way to get the background colour of an item in a virtual
        # list, so we have to cheat by approximating the process of building a
        # list item
        attr = self.objectListView.OnGetItemAttr(i)
        if attr is None or not attr.HasBackgroundColour():
            # this returns an invalid color
            return self.objectListView.GetItemBackgroundColour(i)
        else:
            return attr.GetBackgroundColour()
コード例 #22
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.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("JTR's Grooveshark Downloader 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_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_1.Add(self.sizer_2, 0, wx.EXPAND, 0)
        self.sizer_1.Add(self.lst_results, 2, wx.EXPAND, 0)
        self.sizer_1.Add(self.sizer_3, 2, wx.EXPAND, 0)
        self.sizer_1.Add(self.lst_downloads, 1, wx.EXPAND, 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
                while os.path.exists(os.path.join(dest, filename + '.mp3')):
                    filename = filename + ' (%d)' % c
                    c += 1
                filename += '.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
        print "BWAH"
        for d in self.downloads:
            d["thread"].cancelled = True
        config = ConfigParser.RawConfigParser()
        config.add_section("groove-dl")
        config.set("groove-dl", "dest", dest)
        print "BWAH"
        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)
コード例 #23
0
class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        wx.Frame.__init__(self, *args, **kwds)
        self.Init()

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

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

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

        self.myOlv = GroupListView(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

        def lastPlayedGroupKey(track):
            """
            Return the grouping key for the given track when group by last played column
            """
            # We only want to group tracks by the month in which they were played
            return datetime.date(track.lastPlayed.year, track.lastPlayed.month,
                                 1)

        def lastPlayedGroupKeyConverter(groupKey):
            # Convert the given group key (which is a date) into a representation string
            return groupKey.strftime("%B %Y")

        self.myOlv.useExpansionColumn = True
        self.myOlv.SetColumns([
            ColumnDefn("Title",
                       "left",
                       120,
                       "title",
                       imageGetter=musicImage,
                       useInitialLetterForGroupKey=True),
            ColumnDefn("Artist",
                       "left",
                       120,
                       "artist",
                       imageGetter=artistImageGetter),
            ColumnDefn("Size",
                       "center",
                       100,
                       "sizeInBytes",
                       stringConverter=sizeToNiceString),
            ColumnDefn("Last Played",
                       "left",
                       100,
                       "lastPlayed",
                       groupKeyGetter=lastPlayedGroupKey,
                       groupKeyConverter=lastPlayedGroupKeyConverter),
            ColumnDefn("Rating", "center", 100, "rating")
        ])
        #self.myOlv.CreateCheckStateColumn()
        self.myOlv.SetSortColumn(self.myOlv.columns[2])
        self.myOlv.SetObjects(self.songs)