Initial NodeBehavior implementation
parent
4d0f7365e3
commit
83d418f455
|
@ -1,18 +1,14 @@
|
||||||
from cefbrowser.cefbrowser import CEFBrowser
|
from cefbrowser.cefbrowser import CEFBrowser
|
||||||
from signage.fader import Node
|
from signage.fader import NodeBehavior
|
||||||
|
|
||||||
|
|
||||||
class BrowserNode(Node, CEFBrowser):
|
class BrowserNode(NodeBehavior, CEFBrowser):
|
||||||
hidden = False
|
hidden = False
|
||||||
|
|
||||||
def on_pre_enter(self):
|
def on_pre_enter(self):
|
||||||
self._browser.WasHidden(False)
|
self._browser.WasHidden(False)
|
||||||
self.hidden = False
|
self.hidden = False
|
||||||
|
|
||||||
def on_enter(self):
|
|
||||||
pass
|
|
||||||
#self._browser.WasResized()
|
|
||||||
|
|
||||||
def on_leave(self):
|
def on_leave(self):
|
||||||
self._browser.WasHidden(True)
|
self._browser.WasHidden(True)
|
||||||
self.hidden = True
|
self.hidden = True
|
||||||
|
|
|
@ -5,10 +5,10 @@ from kivy.properties import NumericProperty, StringProperty, \
|
||||||
ObjectProperty, AliasProperty
|
ObjectProperty, AliasProperty
|
||||||
from kivy.clock import Clock
|
from kivy.clock import Clock
|
||||||
|
|
||||||
from signage.fader import Screen
|
from signage.fader import NodeBehavior
|
||||||
|
|
||||||
|
|
||||||
class ClockNode(Label, Screen):
|
class ClockNode(NodeBehavior, Label):
|
||||||
update_interval = NumericProperty(1.0)
|
update_interval = NumericProperty(1.0)
|
||||||
format = StringProperty("%H:%M")
|
format = StringProperty("%H:%M")
|
||||||
now = ObjectProperty(None)
|
now = ObjectProperty(None)
|
||||||
|
|
|
@ -4,12 +4,90 @@ import random
|
||||||
from kivy.clock import Clock
|
from kivy.clock import Clock
|
||||||
from kivy.uix.screenmanager import ScreenManager, FadeTransition
|
from kivy.uix.screenmanager import ScreenManager, FadeTransition
|
||||||
from kivy.uix.screenmanager import Screen as BaseScreen
|
from kivy.uix.screenmanager import Screen as BaseScreen
|
||||||
from kivy.properties import NumericProperty, BooleanProperty
|
from kivy.uix.relativelayout import RelativeLayout
|
||||||
|
import kivy.uix.screenmanager
|
||||||
|
|
||||||
|
from kivy.properties import StringProperty, NumericProperty, BooleanProperty, ObjectProperty, OptionProperty
|
||||||
|
|
||||||
|
class NodeBehavior(object):
|
||||||
|
'''Screen is an element intended to be used with a :class:`ScreenManager`.
|
||||||
|
Check module documentation for more information.
|
||||||
|
:Events:
|
||||||
|
`on_pre_enter`: ()
|
||||||
|
Event fired when the screen is about to be used: the entering
|
||||||
|
animation is started.
|
||||||
|
`on_enter`: ()
|
||||||
|
Event fired when the screen is displayed: the entering animation is
|
||||||
|
complete.
|
||||||
|
`on_pre_leave`: ()
|
||||||
|
Event fired when the screen is about to be removed: the leaving
|
||||||
|
animation is started.
|
||||||
|
`on_leave`: ()
|
||||||
|
Event fired when the screen is removed: the leaving animation is
|
||||||
|
finished.
|
||||||
|
.. versionchanged:: 1.6.0
|
||||||
|
Events `on_pre_enter`, `on_enter`, `on_pre_leave` and `on_leave` were
|
||||||
|
added.
|
||||||
|
'''
|
||||||
|
|
||||||
|
name = StringProperty('')
|
||||||
|
'''
|
||||||
|
Name of the screen which must be unique within a :class:`ScreenManager`.
|
||||||
|
This is the name used for :attr:`ScreenManager.current`.
|
||||||
|
:attr:`name` is a :class:`~kivy.properties.StringProperty` and defaults to
|
||||||
|
''.
|
||||||
|
'''
|
||||||
|
|
||||||
|
manager = ObjectProperty(None, allownone=True)
|
||||||
|
''':class:`ScreenManager` object, set when the screen is added to a
|
||||||
|
manager.
|
||||||
|
:attr:`manager` is an :class:`~kivy.properties.ObjectProperty` and
|
||||||
|
defaults to None, read-only.
|
||||||
|
'''
|
||||||
|
|
||||||
|
transition_progress = NumericProperty(0.)
|
||||||
|
'''Value that represents the completion of the current transition, if any
|
||||||
|
is occurring.
|
||||||
|
If a transition is in progress, whatever the mode, the value will change
|
||||||
|
from 0 to 1. If you want to know if it's an entering or leaving animation,
|
||||||
|
check the :attr:`transition_state`.
|
||||||
|
:attr:`transition_progress` is a :class:`~kivy.properties.NumericProperty`
|
||||||
|
and defaults to 0.
|
||||||
|
'''
|
||||||
|
|
||||||
|
transition_state = OptionProperty('out', options=('in', 'out'))
|
||||||
|
'''Value that represents the state of the transition:
|
||||||
|
- 'in' if the transition is going to show your screen
|
||||||
|
- 'out' if the transition is going to hide your screen
|
||||||
|
After the transition is complete, the state will retain it's last value (in
|
||||||
|
or out).
|
||||||
|
:attr:`transition_state` is an :class:`~kivy.properties.OptionProperty` and
|
||||||
|
defaults to 'out'.
|
||||||
|
'''
|
||||||
|
|
||||||
|
__events__ = ('on_pre_enter', 'on_enter', 'on_pre_leave', 'on_leave')
|
||||||
|
|
||||||
class Node(BaseScreen):
|
|
||||||
interval = NumericProperty(0.0)
|
interval = NumericProperty(0.0)
|
||||||
|
|
||||||
|
def on_pre_enter(self, *args):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def on_enter(self, *args):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def on_pre_leave(self, *args):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def on_leave(self, *args):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<Screen name=%r>' % self.name
|
||||||
|
|
||||||
|
class Node(NodeBehavior, RelativeLayout):
|
||||||
|
pass
|
||||||
|
|
||||||
|
kivy.uix.screenmanager.Screen = NodeBehavior
|
||||||
Screen = Node
|
Screen = Node
|
||||||
|
|
||||||
class Fader(ScreenManager):
|
class Fader(ScreenManager):
|
||||||
|
@ -59,18 +137,18 @@ class Fader(ScreenManager):
|
||||||
|
|
||||||
def add_widget(self, screen):
|
def add_widget(self, screen):
|
||||||
"""Just wrap everything in Screen"""
|
"""Just wrap everything in Screen"""
|
||||||
if not isinstance(screen, Screen):
|
if not isinstance(screen, NodeBehavior):
|
||||||
print ('Wrapping!')
|
print ('Wrapping!', screen)
|
||||||
s = Screen()
|
s = Node()
|
||||||
s.add_widget(screen)
|
s.add_widget(screen)
|
||||||
screen = s
|
screen = s
|
||||||
return super(Fader, self).add_widget(screen)
|
return super(Fader, self).add_widget(screen)
|
||||||
|
|
||||||
def generate_ids(self):
|
def generate_ids(self):
|
||||||
"""Generates random IDs for all screens without set name"""
|
"""Generates random IDs for all screens without set name"""
|
||||||
for c in self.screens:
|
for i, c in enumerate(self.screens):
|
||||||
if not c.name:
|
if not c.name:
|
||||||
c.name = 'screen_%.4f' % (random.random())
|
c.name = 'screen_%i_%s' % (i, type(c))
|
||||||
|
|
||||||
def rotate_screens(self, dt):
|
def rotate_screens(self, dt):
|
||||||
self.generate_ids()
|
self.generate_ids()
|
||||||
|
|
Loading…
Reference in New Issue