diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-08-06 22:39:50 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2007-08-06 22:39:50 +0000 |
| commit | 5e0d91a196bfe872d04d676e5f6c2d5940786be0 (patch) | |
| tree | c80fe3786f7f78a835582ff90fd26552d9ee11c8 /lib/python/Screens/MovieSelection.py | |
| parent | 254ae3154f5a26b9b58407fe9ff66aa6eb1131b7 (diff) | |
| download | enigma2-5e0d91a196bfe872d04d676e5f6c2d5940786be0.tar.gz enigma2-5e0d91a196bfe872d04d676e5f6c2d5940786be0.zip | |
add possibility to select between different list styles via context menu
add possibility to sort the movielist by record time or alphanumeric
add possibility to show detailed information about current selected movie
thx to ralfk
Diffstat (limited to 'lib/python/Screens/MovieSelection.py')
| -rw-r--r-- | lib/python/Screens/MovieSelection.py | 203 |
1 files changed, 165 insertions, 38 deletions
diff --git a/lib/python/Screens/MovieSelection.py b/lib/python/Screens/MovieSelection.py index d345bddb..ad9a2aff 100644 --- a/lib/python/Screens/MovieSelection.py +++ b/lib/python/Screens/MovieSelection.py @@ -1,33 +1,92 @@ from Screen import Screen from Components.Button import Button -from Components.ActionMap import ActionMap +from Components.ActionMap import HelpableActionMap, ActionMap +from Components.MenuList import MenuList from Components.MovieList import MovieList from Components.DiskInfo import DiskInfo +from Components.Pixmap import Pixmap from Components.Label import Label from Components.PluginComponent import plugins +from Components.config import config, ConfigSubsection, ConfigInteger, configfile +from Components.Sources.ServiceEvent import ServiceEvent + from Plugins.Plugin import PluginDescriptor from Screens.MessageBox import MessageBox -from Screens.FixedMenu import FixedMenu from Screens.ChoiceBox import ChoiceBox +from Screens.HelpMenu import HelpableScreen from Tools.Directories import * from Tools.BoundFunction import boundFunction -from enigma import eServiceReference, eServiceCenter, eTimer +from enigma import eServiceReference, eServiceCenter, eTimer, eSize + +config.movielist = ConfigSubsection() +config.movielist.moviesort = ConfigInteger(default=MovieList.SORT_RECORDED) +config.movielist.listtype = ConfigInteger(default=MovieList.LISTTYPE_COMPACT_DESCRIPTION) +config.movielist.description = ConfigInteger(default=MovieList.HIDE_DESCRIPTION) -class ChannelContextMenu(FixedMenu): +class MovieContextMenu(Screen): def __init__(self, session, csel, service): + Screen.__init__(self, session) self.csel = csel self.service = service - menu = [(_("back"), self.close), (_("delete..."), self.delete)] + self["actions"] = ActionMap(["OkCancelActions"], + { + "ok": self.okbuttonClick, + "cancel": self.cancelClick + }) + menu = [(_("delete..."), self.delete)] + for p in plugins.getPlugins(PluginDescriptor.WHERE_MOVIELIST): menu.append((p.description, boundFunction(self.execPlugin, p))) + + if config.movielist.moviesort.value == MovieList.SORT_ALPHANUMERIC: + menu.append((_("sort by date"), boundFunction(self.sortBy, MovieList.SORT_RECORDED))) + else: + menu.append((_("alphabetic sort"), boundFunction(self.sortBy, MovieList.SORT_ALPHANUMERIC))) + + menu.append((_("list style default"), boundFunction(self.listType, MovieList.LISTTYPE_ORIGINAL))) + menu.append((_("list style compact with description"), boundFunction(self.listType, MovieList.LISTTYPE_COMPACT_DESCRIPTION))) + menu.append((_("list style compact"), boundFunction(self.listType, MovieList.LISTTYPE_COMPACT))) + menu.append((_("list style single line"), boundFunction(self.listType, MovieList.LISTTYPE_MINIMAL))) + + if config.movielist.description.value == MovieList.SHOW_DESCRIPTION: + menu.append((_("hide extended description"), boundFunction(self.showDescription, MovieList.HIDE_DESCRIPTION))) + else: + menu.append((_("show extended description"), boundFunction(self.showDescription, MovieList.SHOW_DESCRIPTION))) + self["menu"] = MenuList(menu) + + def okbuttonClick(self): + self["menu"].getCurrent()[1]() + + def cancelClick(self): + self.close(False) + + def sortBy(self, newType): + self.csel.saveflag = True + config.movielist.moviesort.value = newType + self.csel.selectedmovie = self.csel.getCurrent() + self.csel.setSortType(newType) + self.csel.reloadList() + self.csel.moveTo() + self.close() + + def listType(self, newType): + self.csel.saveflag = True + config.movielist.listtype.value = newType + self.csel.setListType(newType) + self.csel.list.redrawList() + self.close() - FixedMenu.__init__(self, session, _("Movie Menu"), menu) - self.skinName = "Menu" + def showDescription(self, newType): + self.csel.saveflag = True + config.movielist.description.value = newType + self.csel.setDescriptionState(newType) + self.csel.updateDescription() + self.close() def execPlugin(self, plugin): plugin(session=self.session, service=self.service) @@ -42,7 +101,6 @@ class ChannelContextMenu(FixedMenu): # simulate first if not offline.deleteFromDisk(1): result = True - if result == True: self.session.openWithCallback(self.deleteConfirmed, MessageBox, _("Do you really want to delete %s?") % (name)) else: @@ -51,7 +109,7 @@ class ChannelContextMenu(FixedMenu): def deleteConfirmed(self, confirmed): if not confirmed: return self.close() - + serviceHandler = eServiceCenter.getInstance() offline = serviceHandler.offlineOperations(self.service) result = False @@ -65,52 +123,98 @@ class ChannelContextMenu(FixedMenu): else: list = self.csel["list"].removeService(self.service) self.close() - -class MovieSelection(Screen): + +class SelectionEventInfo: + def __init__(self): + self["Service"] = ServiceEvent() + self.list.connectSelChanged(self.__selectionChanged) + self.timer = eTimer() + self.timer.timeout.get().append(self.updateEventInfo) + self.onShown.append(self.__selectionChanged) + + def __selectionChanged(self): + if self.execing and config.movielist.description.value == MovieList.SHOW_DESCRIPTION: + self.timer.start(100, True) + + def updateEventInfo(self): + serviceref = self.getCurrent() + self["Service"].newService(serviceref) + +class MovieSelection(Screen, HelpableScreen, SelectionEventInfo): def __init__(self, session, selectedmovie = None): Screen.__init__(self, session) - + HelpableScreen.__init__(self) + + self.saveflag = False + self.tags = [ ] self.selected_tags = None - + self.current_ref = eServiceReference("2:0:1:0:0:0:0:0:0:0:" + resolveFilename(SCOPE_HDD)) - + self.movemode = False self.bouquet_mark_edit = False - + self.delayTimer = eTimer() self.delayTimer.timeout.get().append(self.updateHDDData) - + self["waitingtext"] = Label(_("Please wait... Loading list...")) - - self["list"] = MovieList(None) + + # create optional description border and hide immediately + self["DescriptionBorder"] = Pixmap() + self["DescriptionBorder"].hide() + + self["list"] = MovieList(None, + config.movielist.listtype.value, + config.movielist.moviesort.value, + config.movielist.description.value) + self.list = self["list"] self.selectedmovie = selectedmovie - + + # Need list for init + SelectionEventInfo.__init__(self) + self["key_red"] = Button(_("All...")) self["key_green"] = Button("") self["key_yellow"] = Button("") self["key_blue"] = Button("") - - #self["okbutton"] = Button("ok", [self.channelSelected]) - self["freeDiskSpace"] = DiskInfo(resolveFilename(SCOPE_HDD), DiskInfo.FREE, update=False) - - self["actions"] = ActionMap(["OkCancelActions", "MovieSelectionActions", "ColorActions"], + + #self["freeDiskSpace"] = DiskInfo(resolveFilename(SCOPE_HDD), DiskInfo.FREE, update=False) + self["freeDiskSpace"] = self.diskinfo = DiskInfo(resolveFilename(SCOPE_HDD), DiskInfo.FREE, update=False) + + self["MovieSelectionActions"] = HelpableActionMap(self, "MovieSelectionActions", { - "cancel": self.abort, - "ok": self.movieSelected, - "showEventInfo": self.showEventInformation, - "contextMenu": self.doContext, - - "red": self.showAll, - "green": self.showTagsFirst, - "yellow": self.showTagsSecond, - "blue": self.showTagsMenu, + "contextMenu": (self.doContext, _("menu")), + "showEventInfo": (self.showEventInformation, _("show event details")), }) - self["actions"].csel = self + + self["ColorActions"] = HelpableActionMap(self, "ColorActions", + { + "red": (self.showAll, _("show all")), + "green": (self.showTagsFirst, _("show first tag")), + "yellow": (self.showTagsSecond, _("show second tag")), + "blue": (self.showTagsMenu, _("show tag menu")), + }) + + self["OkCancelActions"] = HelpableActionMap(self, "OkCancelActions", + { + "cancel": (self.abort, _("exit movielist")), + "ok": (self.movieSelected, _("select movie")), + }) + self.onShown.append(self.go) self.inited = False + def updateDescription(self): + if config.movielist.description.value == MovieList.SHOW_DESCRIPTION: + self["DescriptionBorder"].show() + self["list"].instance.resize(eSize(self.listWidth, self.listHeight-self["DescriptionBorder"].instance.size().height())) + else: + self["Service"].newService(None) + self["DescriptionBorder"].hide() + self["list"].instance.resize(eSize(self.listWidth, self.listHeight)) + def showEventInformation(self): from Screens.EventView import EventViewSimple from ServiceReference import ServiceReference @@ -124,15 +228,19 @@ class MovieSelection(Screen): # this is of course not the right way to do this. self.delayTimer.start(10, 1) self.inited=True + # as this workaround is here anyways we can wait until the skin is initialized + # and afterwards read out the information we need to draw the dynamic style + listsize = self["list"].instance.size() + self.listWidth = listsize.width() + self.listHeight = listsize.height() + self.updateDescription() def updateHDDData(self): self.reloadList() if self.selectedmovie is not None: self.moveTo() - self["waitingtext"].instance.hide() - + self["waitingtext"].visible = False self["freeDiskSpace"].update() - self.updateTags() def moveTo(self): @@ -144,16 +252,26 @@ class MovieSelection(Screen): def movieSelected(self): current = self.getCurrent() if current is not None: + self.saveconfig() self.close(current) def doContext(self): current = self.getCurrent() if current is not None: - self.session.open(ChannelContextMenu, self, current) + self.session.open(MovieContextMenu, self, current) def abort(self): + self.saveconfig() self.close(None) + def saveconfig(self): + if self.saveflag == True: + config.movielist.moviesort.save() + config.movielist.listtype.save() + config.movielist.description.save() + configfile.save() + self.saveflag = False + def getTagDescription(self, tag): # TODO: access the tag database return tag @@ -184,6 +302,15 @@ class MovieSelection(Screen): else: self["key_blue"].text = "" + def setListType(self, type): + self["list"].setListType(type) + + def setDescriptionState(self, val): + self["list"].setDescriptionState(val) + + def setSortType(self, type): + self["list"].setSortType(type) + def reloadList(self): self["list"].reload(self.current_ref, self.selected_tags) title = _("Recorded files...") |
