from Components.ServicePosition import ServicePositionGauge
from Components.ActionMap import HelpableActionMap
from Components.MenuList import MenuList
-from Components.MultiContent import MultiContentEntryText, RT_HALIGN_RIGHT
+from Components.MultiContent import MultiContentEntryText
from Components.ServiceEventTracker import ServiceEventTracker
from Screens.InfoBarGenerics import InfoBarSeek, InfoBarCueSheetSupport
from Components.GUIComponent import GUIComponent
-from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService
+from enigma import eListboxPythonMultiContent, eListbox, gFont, iPlayableService, RT_HALIGN_RIGHT
from Screens.FixedMenu import FixedMenu
import bisect
type = "OUT"
elif what == 2:
type = "MARK"
+ elif what == 3:
+ type = "LAST"
res.append(MultiContentEntryText(size=(400, 20), text = "%dh:%02dm:%02ds:%03d" % (h, m, s, ms)))
res.append(MultiContentEntryText(pos=(400,0), size=(130, 20), text = type, flags = RT_HALIGN_RIGHT))
RET_ENDCUT = 1
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):
- menu = [(_("back"), self.close), (None, )]
+ def __init__(self, session, state, nearmark):
+ menu = [(_("back"), self.close)] #, (None, )]
if state == self.SHOW_STARTCUT:
menu.append((_("start cut here"), self.startCut))
else:
menu.append((_("start cut here"), ))
-
+
if state == self.SHOW_ENDCUT:
menu.append((_("end cut here"), self.endCut))
else:
menu.append((_("delete cut"), self.deleteCut))
else:
menu.append((_("delete cut"), ))
-
- menu.append((None, ))
- menu.append((_("insert mark here"), self.insertMark))
+
+ 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))
+ else:
+ menu.append((_("remove this mark"), self.removeMark))
+
FixedMenu.__init__(self, session, _("Cut"), menu)
self.skinName = "Menu"
-
+
def startCut(self):
self.close(self.RET_STARTCUT)
def insertMark(self):
self.close(self.RET_MARK)
+ 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):
GUIComponent.__init__(self)
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)
skin = """
<screen position="100,100" size="550,400" title="Test" >
<widget name="Timeline" position="10,0" size="530,40"
- pointer="/usr/share/enigma2/position_pointer.png:3,5" />
+ pointer="/usr/share/enigma2/position_pointer.png:3,5" foregroundColor="#225b7395" />
<widget name="Cutlist" position="10,50" size="530,300" scrollbarMode="showOnDemand" />
</screen>"""
def __init__(self, session, service):
Screen.__init__(self, session)
InfoBarSeek.__init__(self)
InfoBarCueSheetSupport.__init__(self)
+ self.old_service = session.nav.getCurrentlyPlayingServiceReference()
session.nav.playService(service)
service = session.nav.getCurrentService()
"removeMark": (self.__removeMark, _("Remove a mark")),
"leave": (self.exit, _("Exit editor")),
"showMenu": self.showMenu,
- })
+ }, prio=-4)
self.tutorial_seen = False
# to track new entries we save the last version of the cutlist
self.last_cuts = [ ]
-
self.cut_start = None
def showTutorial(self):
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()
self.removeMark(m)
def exit(self):
+ self.session.nav.playService(self.old_service)
self.close()
def getCutlist(self):
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
self.context_position = curpos
+ self.context_nearest_mark = self.toggleMark(onlyreturn=True)
+
cur_state = self.getStateForPosition(curpos)
if cur_state == 0:
print "currently in 'IN'"
print "currently in 'OUT'"
state = CutListContextMenu.SHOW_DELETECUT
- self.session.openWithCallback(self.menuCallback, CutListContextMenu, state)
+ if self.context_nearest_mark is None:
+ nearmark = False
+ else:
+ nearmark = True
+
+ self.session.openWithCallback(self.menuCallback, CutListContextMenu, state, nearmark)
def menuCallback(self, *result):
self.setSeekState(self.SEEK_STATE_PLAY)
self.uploadCuesheet()
elif result == CutListContextMenu.RET_MARK:
self.__addMark()
+ 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)