Exemplo n.º 1
0
	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
Exemplo n.º 2
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)