From: Stefan Pluecken Date: Tue, 28 Feb 2006 09:21:57 +0000 (+0000) Subject: use categories to categorize the plugins X-Git-Tag: 2.6.0~3952 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/d5cacc98a3f6f21cb03e29bf5dac733c710cc49d use categories to categorize the plugins --- diff --git a/data/expandable-plugins.png b/data/expandable-plugins.png new file mode 100644 index 00000000..2076d555 Binary files /dev/null and b/data/expandable-plugins.png differ diff --git a/data/expanded-plugins.png b/data/expanded-plugins.png new file mode 100644 index 00000000..ec355fee Binary files /dev/null and b/data/expanded-plugins.png differ diff --git a/lib/python/Components/MultiContent.py b/lib/python/Components/MultiContent.py index 691152b4..06ecde96 100644 --- a/lib/python/Components/MultiContent.py +++ b/lib/python/Components/MultiContent.py @@ -19,3 +19,8 @@ def MultiContentEntryText(pos = (0, 0), size = (0, 0), font = 0, flags = RT_HALI def MultiContentEntryPixmap(pos = (0, 0), size = (0, 0), png = None): return (eListboxPythonMultiContent.TYPE_PIXMAP, pos[0], pos[1], size[0], size[1], png) + +def MultiContentEntryPixmapAlphaTest(pos = (0, 0), size = (0, 0), png = None): + return (eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, pos[0], pos[1], size[0], size[1], png) + + \ No newline at end of file diff --git a/lib/python/Components/PluginList.py b/lib/python/Components/PluginList.py index 22682033..d458ce45 100644 --- a/lib/python/Components/PluginList.py +++ b/lib/python/Components/PluginList.py @@ -4,7 +4,7 @@ from GUIComponent import * from MenuList import MenuList from Tools.Directories import resolveFilename, SCOPE_SKIN_IMAGE -from Components.MultiContent import RT_HALIGN_LEFT, MultiContentEntryText, MultiContentEntryPixmap +from Components.MultiContent import RT_HALIGN_LEFT, MultiContentEntryText, MultiContentEntryPixmapAlphaTest from enigma import * @@ -18,7 +18,29 @@ def PluginEntryComponent(plugin): png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "/plugin.png")) else: png = plugin.icon - res.append(MultiContentEntryPixmap(pos=(10, 5), size=(60, 40), png = png)) + res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 5), size=(60, 40), png = png)) + + return res + +def PluginCategoryComponent(name, png): + res = [ name ] + + res.append(MultiContentEntryText(pos=(80, 5), size=(300, 25), font=0, text=name)) + res.append(MultiContentEntryPixmapAlphaTest(pos=(0, 0), size=(60, 50), png = png)) + + return res + +def PluginDownloadComponent(plugin, name): + res = [ plugin ] + + res.append(MultiContentEntryText(pos=(80, 5), size=(300, 25), font=0, text=name)) + res.append(MultiContentEntryText(pos=(80, 26), size=(300, 17), font=1, text=plugin.description)) + + if plugin.icon is None: + png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "/plugin.png")) + else: + png = plugin.icon + res.append(MultiContentEntryPixmapAlphaTest(pos=(0, 0), size=(60, 50), png = png)) return res diff --git a/lib/python/Plugins/Plugin.py b/lib/python/Plugins/Plugin.py index 4b5b7e2a..3db70397 100644 --- a/lib/python/Plugins/Plugin.py +++ b/lib/python/Plugins/Plugin.py @@ -34,8 +34,11 @@ class PluginDescriptor: self.where = [ where ] self.description = description - self.iconstr = icon - self.icon = None + if type(icon) is str or icon is None: + self.iconstr = icon + self.icon = None + else: + self.icon = icon self.__call__ = fnc diff --git a/lib/python/Screens/PluginBrowser.py b/lib/python/Screens/PluginBrowser.py index e9b009ae..41b3f32e 100644 --- a/lib/python/Screens/PluginBrowser.py +++ b/lib/python/Screens/PluginBrowser.py @@ -1,6 +1,6 @@ from Screen import Screen -from enigma import eConsoleAppContainer +from enigma import eConsoleAppContainer, loadPNG from Components.MenuList import MenuList from Components.ActionMap import ActionMap @@ -11,7 +11,7 @@ from Components.Label import Label from Screens.MessageBox import MessageBox from Screens.Console import Console from Plugins.Plugin import PluginDescriptor -from Tools.Directories import resolveFilename, SCOPE_PLUGINS +from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE class PluginBrowser(Screen): def __init__(self, session): @@ -73,6 +73,7 @@ class PluginDownloadBrowser(Screen): self.list = [] self["list"] = PluginList(self.list) self.pluginlist = [] + self.expanded = [] if self.type == self.DOWNLOAD: self["text"] = Label(_("Downloading plugin information. Please wait...")) @@ -88,18 +89,24 @@ class PluginDownloadBrowser(Screen): }) def go(self): - print "plugin: installing:", self.pluginlist[self["list"].l.getCurrentSelectionIndex()] - if self.type == self.DOWNLOAD: - self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"" + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][3] + "\"?")) - elif self.type == self.REMOVE: - self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to REMOVE\nthe plugin \"" + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][3] + "\"?")) + if type(self["list"].l.getCurrentSelection()[0]) is str: # category + if self["list"].l.getCurrentSelection()[0] in self.expanded: + self.expanded.remove(self["list"].l.getCurrentSelection()[0]) + else: + self.expanded.append(self["list"].l.getCurrentSelection()[0]) + self.updateList() + else: + if self.type == self.DOWNLOAD: + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to download\nthe plugin \"" + self["list"].l.getCurrentSelection()[0].name + "\"?")) + elif self.type == self.REMOVE: + self.session.openWithCallback(self.runInstall, MessageBox, _("Do you really want to REMOVE\nthe plugin \"" + self["list"].l.getCurrentSelection()[0].name + "\"?")) def runInstall(self, val): if val: if self.type == self.DOWNLOAD: - self.session.openWithCallback(self.installFinished, Console, ["ipkg install " + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][0]]) + self.session.openWithCallback(self.installFinished, Console, ["ipkg install " + "enigma2-plugin-" + self["list"].l.getCurrentSelection()[0].name]) elif self.type == self.REMOVE: - self.session.openWithCallback(self.installFinished, Console, ["ipkg remove " + self.pluginlist[self["list"].l.getCurrentSelectionIndex()][0]]) + self.session.openWithCallback(self.installFinished, Console, ["ipkg remove " + "enigma2-plugin-" + self["list"].l.getCurrentSelection()[0].name]) def setTitle(self): if self.type == self.DOWNLOAD: @@ -141,9 +148,26 @@ class PluginDownloadBrowser(Screen): def updateList(self): self.list = [] - for x in self.pluginlist: - plugin = PluginDescriptor(name = x[3], description = x[2]) - self.list.append(PluginEntryComponent(plugin)) + expandableIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "expandable-plugins.png")) + expandedIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "expanded-plugins.png")) + verticallineIcon = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "verticalline-plugins.png")) + self.plugins = {} + for x in self.pluginlist: + split = x[3].split('-') + if len(split) < 2: + continue + if not self.plugins.has_key(split[0]): + self.plugins[split[0]] = [] + + self.plugins[split[0]].append((PluginDescriptor(name = x[3], description = x[2], icon = verticallineIcon), split[1])) + + for x in self.plugins.keys(): + if x in self.expanded: + self.list.append(PluginCategoryComponent(x, expandedIcon)) + for plugin in self.plugins[x]: + self.list.append(PluginDownloadComponent(plugin[0], plugin[1])) + else: + self.list.append(PluginCategoryComponent(x, expandableIcon)) self["list"].l.setList(self.list)