X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/152165863017eb70db9d824db5a087527824a721..a4cadca93a60d5a5019d2a063e39d66f50e576e2:/lib/python/Plugins/Extensions/CutListEditor/plugin.py diff --git a/lib/python/Plugins/Extensions/CutListEditor/plugin.py b/lib/python/Plugins/Extensions/CutListEditor/plugin.py index 25a5e742..b17fa176 100644 --- a/lib/python/Plugins/Extensions/CutListEditor/plugin.py +++ b/lib/python/Plugins/Extensions/CutListEditor/plugin.py @@ -37,13 +37,15 @@ class CutListContextMenu(FixedMenu): RET_DELETECUT = 2 RET_MARK = 3 RET_DELETEMARK = 4 + RET_REMOVEBEFORE = 5 + RET_REMOVEAFTER = 6 SHOW_STARTCUT = 0 SHOW_ENDCUT = 1 SHOW_DELETECUT = 2 def __init__(self, session, state, nearmark): - menu = [(_("back"), self.close), (None, )] + menu = [(_("back"), self.close)] #, (None, )] if state == self.SHOW_STARTCUT: menu.append((_("start cut here"), self.startCut)) @@ -60,7 +62,10 @@ class CutListContextMenu(FixedMenu): else: menu.append((_("delete cut"), )) - menu.append((None, )) + menu.append((_("remove before this position"), self.removeBefore)) + menu.append((_("remove after this position"), self.removeAfter)) + +# menu.append((None, )) if not nearmark: menu.append((_("insert mark here"), self.insertMark)) @@ -84,6 +89,13 @@ class CutListContextMenu(FixedMenu): def removeMark(self): self.close(self.RET_DELETEMARK) + + def removeBefore(self): + self.close(self.RET_REMOVEBEFORE) + + def removeAfter(self): + self.close(self.RET_REMOVEAFTER) + class CutList(GUIComponent): def __init__(self, list): @@ -99,21 +111,17 @@ class CutList(GUIComponent): def getCurrentIndex(self): return self.l.getCurrentSelectionIndex() - def GUIcreate(self, parent): - self.instance = eListbox(parent) - self.instance.setContent(self.l) - self.instance.setItemHeight(30) - self.instance.selectionChanged.get().append(self.selectionChanged) + GUI_WIDGET = eListbox + + def postWidgetCreate(self, instance): + instance.setContent(self.l) + instance.setItemHeight(30) + instance.selectionChanged.get().append(self.selectionChanged) def selectionChanged(self): for x in self.onSelectionChanged: x() - def GUIdelete(self): - self.instance.selectionChanged.get().remove(self.selectionChanged) - self.instance.setContent(None) - self.instance = None - def invalidateEntry(self, index): self.l.invalidateEntry(index) @@ -141,6 +149,7 @@ class CutListEditor(Screen, InfoBarSeek, InfoBarCueSheetSupport): Screen.__init__(self, session) InfoBarSeek.__init__(self) InfoBarCueSheetSupport.__init__(self) + self.old_service = session.nav.getCurrentlyPlayingServiceReference() session.nav.playService(service) service = session.nav.getCurrentService() @@ -177,7 +186,6 @@ class CutListEditor(Screen, InfoBarSeek, InfoBarCueSheetSupport): # to track new entries we save the last version of the cutlist self.last_cuts = [ ] - self.cut_start = None def showTutorial(self): @@ -195,8 +203,9 @@ Then seek to the end, press OK, select 'end cut'. That's it. pass def setType(self, index, type): - self.cut_list[index] = (self.cut_list[index][0], type) - self["Cutlist"].setIndex(index, CutListEntry(*self.cut_list[index])) + if len(self.cut_list): + self.cut_list[index] = (self.cut_list[index][0], type) + self["Cutlist"].setIndex(index, CutListEntry(*self.cut_list[index])) def setIn(self): m = self["Cutlist"].getCurrentIndex() @@ -223,6 +232,7 @@ Then seek to the end, press OK, select 'end cut'. That's it. self.removeMark(m) def exit(self): + self.session.nav.playService(self.old_service) self.close() def getCutlist(self): @@ -259,6 +269,11 @@ Then seek to the end, press OK, select 'end cut'. That's it. def getStateForPosition(self, pos): state = 0 # in + + # when first point is "in", the beginning is "out" + if len(self.cut_list) and self.cut_list[0][1] == 0: + state = 1 + for (where, what) in self.cut_list: if where < pos: if what == 0: # in @@ -337,9 +352,25 @@ Then seek to the end, press OK, select 'end cut'. That's it. elif result == CutListContextMenu.RET_DELETEMARK: self.cut_list.remove(self.context_nearest_mark) self.uploadCuesheet() + elif result == CutListContextMenu.RET_REMOVEBEFORE: + # remove in/out marks before current position + for (where, what) in self.cut_list[:]: + if where <= self.context_position and what in [0,1]: + self.cut_list.remove((where, what)) + # add 'in' point + bisect.insort(self.cut_list, (self.context_position, 0)) + self.uploadCuesheet() + elif result == CutListContextMenu.RET_REMOVEAFTER: + # remove in/out marks after current position + for (where, what) in self.cut_list[:]: + if where >= self.context_position and what in [0,1]: + self.cut_list.remove((where, what)) + # add 'out' point + bisect.insort(self.cut_list, (self.context_position, 1)) + self.uploadCuesheet() -def main(session, service): +def main(session, service, **kwargs): session.open(CutListEditor, service) -def Plugins(): +def Plugins(**kwargs): return PluginDescriptor(name="Cutlist Editor", description=_("Cutlist editor..."), where = PluginDescriptor.WHERE_MOVIELIST, fnc=main)