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