diff --git a/data/display800/skin_display_templates.xml b/data/display800/skin_display_templates.xml index feff284bd2..0b47936d2f 100644 --- a/data/display800/skin_display_templates.xml +++ b/data/display800/skin_display_templates.xml @@ -437,5 +437,12 @@ + + + + + + + diff --git a/lib/python/Components/Addons/Pager.py b/lib/python/Components/Addons/Pager.py index 6cc9e71b18..967017e91a 100644 --- a/lib/python/Components/Addons/Pager.py +++ b/lib/python/Components/Addons/Pager.py @@ -35,8 +35,11 @@ def onContainerShown(self): if hasattr(self.source, "instance") and hasattr(self.source.instance, "setScrollbarMode"): self.source.instance.setScrollbarMode(2) - if self.initPager not in self.source.onSelectionChanged: + if hasattr(self.source, "onSelectionChanged") and self.initPager not in self.source.onSelectionChanged: self.source.onSelectionChanged.append(self.initPager) + if hasattr(self.source, "onSelChanged") and self.initPager not in self.source.onSelChanged: + self.source.onSelChanged.append(self.initPager) + self.initPager() GUI_WIDGET = eListbox diff --git a/lib/python/Plugins/SystemPlugins/OBH/ImageManager.py b/lib/python/Plugins/SystemPlugins/OBH/ImageManager.py index a43737eab8..518cfa334e 100644 --- a/lib/python/Plugins/SystemPlugins/OBH/ImageManager.py +++ b/lib/python/Plugins/SystemPlugins/OBH/ImageManager.py @@ -246,12 +246,15 @@ def __init__(self, session): if self.selectionChanged not in self["list"].onSelectionChanged: self["list"].onSelectionChanged.append(self.selectionChanged) + def createSummary(self): + from Screens.PluginBrowser import PluginBrowserSummary + return PluginBrowserSummary + def selectionChanged(self): - # Where is this used? self.onChangedEntry does not appear to be populated anywhere. Maybe dead code. item = self["list"].getCurrent() # (name, link) desc = self["backupstatus"].text if item: - name = item[1] + name = item[0] else: name = "" for cb in self.onChangedEntry: diff --git a/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py b/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py index 64553a424c..7c4114319e 100644 --- a/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py +++ b/lib/python/Plugins/SystemPlugins/OBH/PackageManager.py @@ -13,7 +13,7 @@ from Screens.Ipkg import Ipkg from Screens.MessageBox import MessageBox -from Screens.Screen import Screen +from Screens.Screen import Screen, ScreenSummary from Screens.Standby import TryQuitMainloop from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_CURRENT_PLUGIN, SCOPE_CURRENT_SKIN @@ -47,6 +47,11 @@ def load_cache(cache_file): return pickle.load(open(cache_file, "rb")) +class PackageManagerSummary(ScreenSummary): + def __init__(self, session, parent): + ScreenSummary.__init__(self, session, parent=parent) + + class PackageManager(Screen, NumericalTextInput): skin = [""" @@ -85,7 +90,7 @@ class PackageManager(Screen, NumericalTextInput): def __init__(self, session): Screen.__init__(self, session) NumericalTextInput.__init__(self) - self.setTitle(_("Package manager")) + self.title = _("Package manager") self.setUseableChars("1234567890abcdefghijklmnopqrstuvwxyz") @@ -93,7 +98,6 @@ def __init__(self, session): { "ok": self.go, "cancel": self.exit, - "save": self.reload, "gotAsciiCode": self.keyGotAscii, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, @@ -107,11 +111,21 @@ def __init__(self, session): "0": self.keyNumberGlobal }, -1) + self["filterActions"] = NumberActionMap(["SetupActions"], + { + "deleteBackward": self.filterPrev, + "deleteForward": self.filterNext, + "save": self.reload, + }, -1) + self["filterActions"].setEnabled(False) + self.list = [] self.statuslist = [] self["list"] = List(self.list) self["key_red"] = StaticText(_("Close")) - self["key_green"] = StaticText(_("Refresh list")) + self["key_green"] = StaticText() + self["key_previous"] = StaticText() + self["key_next"] = StaticText() self.imagePath = "%s/images/" % os.path.dirname(os.path.realpath(__file__)) self.list_updating = True @@ -125,6 +139,11 @@ def __init__(self, session): self.cache_file = "/etc/enigma2/packetmanager.cache" # Path to cache directory self.oktext = _("\nAfter pressing OK, please wait!") self.unwanted_extensions = ("-dbg", "-dev", "-doc", "-staticdev", "-src", "busybox") + self.filters = {"All": _("All"), "Installed": _("Installed"), "Upgradeable": _("Upgradeable"), "Installable": _("Installable")} + + self.installedpng = LoadPixmap(cached=True, path=self.imagePath + "installed.png") + self.upgradeablepng = LoadPixmap(cached=True, path=self.imagePath + "upgradeable.png") + self.installablepng = LoadPixmap(cached=True, path=self.imagePath + "installable.png") self.ipkg = IpkgComponent() self.ipkg.addCallback(self.ipkgCallback) @@ -334,18 +353,16 @@ def buildEntryComponent(self, name, version, description, state): if not description: description = "No description available." if state == "installed": - installedpng = LoadPixmap(cached=True, path=self.imagePath + "installed.png") - return ((name, version, _(description), state, installedpng, divpng)) + return ((name, version, _(description), state, self.installedpng, divpng)) elif state == "upgradeable": - upgradeablepng = LoadPixmap(cached=True, path=self.imagePath + "upgradeable.png") - return ((name, version, _(description), state, upgradeablepng, divpng)) + return ((name, version, _(description), state, self.upgradeablepng, divpng)) else: - installablepng = LoadPixmap(cached=True, path=self.imagePath + "installable.png") - return ((name, version, _(description), state, installablepng, divpng)) + return ((name, version, _(description), state, self.installablepng, divpng)) def buildPacketList(self): self.list = [] self.cachelist = [] + self.i = 0 if self.cache_ttl > 0 and self.vc != 0: print("Loading packagelist cache from ", self.cache_file) try: @@ -372,6 +389,48 @@ def buildPacketList(self): self.cachelist.append([x[0], x[1], x[2], status]) write_cache(self.cache_file, self.cachelist) self["list"].setList(self.list) + self.updateTexts() + + def filterPrev(self): + self.i -= 1 + self.filterList() + + def filterNext(self): + self.i += 1 + self.filterList() + + def filterList(self): + if self.list: + filter = self.getCurrentFilter() + if filter == "All": + self["list"].setList(self.list) + elif filter == "Installed": + self["list"].setList([x for x in self.list if x[4] is self.installedpng]) + elif filter == "Upgradeable": + self["list"].setList([x for x in self.list if x[4] is self.upgradeablepng]) + elif filter == "Installable": + self["list"].setList([x for x in self.list if x[4] is self.installablepng]) + self.updateTexts() + + def getCurrentFilter(self): + return list(self.filters.keys())[self.i % len(self.filters)] + + def updateTexts(self): + if self.list: + self["filterActions"].setEnabled(True) + self.title = _("Package manager") + " - " + self.filters[self.getCurrentFilter()] + self["key_green"].text = _("Refresh list") + self["key_previous"].text = _("PREVIOUS") + self["key_next"].text = _("NEXT") + else: + self["filterActions"].setEnabled(False) + self.title = _("Package manager") + self["key_green"].text = "" + self["key_previous"].text = "" + self["key_next"].text = "" def reloadPluginlist(self): plugins.readPluginList(resolveFilename(SCOPE_PLUGINS)) + + def createSummary(self): + return PackageManagerSummary