# -*- coding: utf-8 -*- # Не удалять эту строку - для правильного определения кодировки " 65001 (UTF-8) без BOM " from Components.config import config, ConfigNumber, ConfigSubsection, ConfigYesNo from Plugins.Plugin import PluginDescriptor from . import _ config.plugins.Animation = ConfigSubsection() config.plugins.Animation.enabled = ConfigYesNo(default=False) config.plugins.Animation.delay = ConfigNumber(default=500) config.plugins.Animation.aspect = ConfigYesNo(default=True) ##From Animation.py## from os.path import exists from enigma import ePicLoad, eTimer, getDesktop from Components.config import config from Components.Pixmap import Pixmap from Screens.Screen import Screen from Tools.Directories import resolveFilename, SCOPE_PLUGINS class AnimationScreen(Screen): def __init__(self, session): Screen.__init__(self, session) self.screenWidth = getDesktop(0).size().width() self.screenHeight = getDesktop(0).size().height() self.skin = """ """ % (self.screenWidth, self.screenHeight) self['Animation'] = Pixmap() self['Animation'].hide() self.pixmapCount = 0 self.picload = None self.pixmaps = {} if config.plugins.Animation.aspect.value: from Components.AVSwitch import AVSwitch self.sc = AVSwitch().getFramebufferScale() else: self.sc = [0, 0] self.pixmapTaimer = eTimer() self.pixmapTaimer.timeout.callback.append(self.updatePixmaps) self.animeTimer = eTimer() self.animeTimer.callback.append(self.startAnimation) self.onLayoutFinish.append(self.decodeAllPixmaps) def decodeAllPixmaps(self): animePixmap = resolveFilename(SCOPE_PLUGINS, 'Extensions/Animation/anime/anime-%02d.png' % self.pixmapCount) if exists(animePixmap): self.decodePixmap(animePixmap) else: if self.pixmapCount == 0: print '[AnimationScreen] ERROR: Pixmaps not fund', animePixmap self.close() else: self.pixmapCount = 0 self['Animation'].show() self.animeTimer.start(config.plugins.Animation.delay.value, False) def decodePixmap(self, animePixmap): self.picload = ePicLoad() self.picload.PictureData.get().append(self.finishDecode) self.picload.setPara(( self.screenWidth, self.screenHeight, self.sc[0], self.sc[1], False, 1, '#ff000000')) self.picload.startDecode(animePixmap) def finishDecode(self, picInfo=None): ptr = self.picload.getData() if ptr: self.pixmaps[self.pixmapCount] = ptr self.picload = None self.pixmapTaimer.start(1) def updatePixmaps(self): self.pixmapTaimer.stop() if self.picload is not None: self.pixmapTaimer.start(1) else: self.pixmapCount += 1 self.decodeAllPixmaps() def startAnimation(self): self['Animation'].instance.setPixmap(self.pixmaps[self.pixmapCount].__deref__()) self.pixmapCount += 1 if self.pixmapCount == len(self.pixmaps): self.pixmapCount = 0 class Animation(): def __init__(self): self.dialog = None def startSession(self, session): self.dialog = session.instantiateDialog(AnimationScreen) self.dialog.show() def stopSession(self, session): session.deleteDialog(self.dialog) self.dialog = None AnimationSession = Animation() ##From AnimationSetup.py## from Components.ActionMap import ActionMap from Components.config import config, getConfigListEntry from Components.ConfigList import ConfigListScreen from Components.Label import Label from Components.Sources.StaticText import StaticText from Screens.Screen import Screen from . import _ #from Animation import AnimationSession class AnimationSetup(ConfigListScreen, Screen): def __init__(self, session): Screen.__init__(self, session) self.session = session self.skinName = ['AnimationSetup', 'Setup'] self['key_red'] = StaticText(_('Cancel')) self['key_green'] = StaticText(_('Ok')) self['description'] = Label('') self['setupActions'] = ActionMap(['SetupActions', 'ColorActions'], { 'cancel': self.keyCancel, 'red': self.keyCancel, 'ok': self.ok, 'green': self.ok }, -2) configlist = [] ConfigListScreen.__init__(self, configlist, session=session) configlist.append(getConfigListEntry(_('Start animation'), config.plugins.Animation.enabled, _('Start showing an animation.\nIt will work also after restart.'))) configlist.append(getConfigListEntry(_('Dealey between animations'), config.plugins.Animation.delay, _('How long you will see one animated picture.\nAnimation will be faster at less value.'))) configlist.append(getConfigListEntry(_('Keep aspect ratio'), config.plugins.Animation.aspect, _('Keep animation picture aspect ratio when scale it over the whole screen.'))) self['config'].list = configlist self['config'].l.setList(configlist) self.setTitle(_('Animation setup')) def ok(self): if AnimationSession.dialog is not None: AnimationSession.stopSession(self.session) if config.plugins.Animation.delay.value < 1: config.plugins.Animation.delay.value = 1 if config.plugins.Animation.enabled.value: AnimationSession.startSession(self.session) self.keySave() ##################### def sessionstart(reason, **kwargs): if reason == 0: #from Animation import AnimationSession AnimationSession.startSession(kwargs['session']) def main(session, **kwargs): #from AnimationSetup import AnimationSetup session.open(AnimationSetup) def Plugins(**kwargs): plugin = [PluginDescriptor( name=_('Snow'), description=_('Show the "Snow" on the screen'), where=[PluginDescriptor.WHERE_PLUGINMENU], #PluginDescriptor.WHERE_EXTENSIONSMENU], icon='plugin.png', fnc=main)] if config.plugins.Animation.enabled.value: plugin.append(PluginDescriptor( where=[PluginDescriptor.WHERE_SESSIONSTART], fnc=sessionstart)) return plugin