Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorflorent <florent.pigout@gmail.com>2011-04-29 00:56:54 (GMT)
committer florent <florent.pigout@gmail.com>2011-04-29 00:56:54 (GMT)
commit722bb25b353daf7970533937ccd1d25e196fe5ee (patch)
treea5c1ee7fd6d236a9582db382771bcf155c6ede9d
parent42d54d0d846809acc709235bc918bee51fa72865 (diff)
add key shortcuts binding for main graphic features
-rw-r--r--activity.py3
-rw-r--r--atoidejouer/ui/panel.py166
-rw-r--r--atoidejouer/ui/toolbar.py4
3 files changed, 172 insertions, 1 deletions
diff --git a/activity.py b/activity.py
index 673c3de..9d2965b 100644
--- a/activity.py
+++ b/activity.py
@@ -68,7 +68,7 @@ class ThreadAnim(threading.Thread):
# do pause on toolbar
if pause is True:
# ..
- if hasattr(_s, 'pause'):
+ if hasattr(_s.toolbar, 'pause'):
_s.toolbar.pause()
else:
pass
@@ -154,6 +154,7 @@ class AToiDeJouerActivity(activity.Activity):
self._thread = None
self._screens = dict()
self._current = None
+ self._handler_id = None
self._number_of_keys = 1
# show
self._toolbox.show()
diff --git a/atoidejouer/ui/panel.py b/atoidejouer/ui/panel.py
index 83abead..2112a4b 100644
--- a/atoidejouer/ui/panel.py
+++ b/atoidejouer/ui/panel.py
@@ -153,6 +153,12 @@ def _on_layout_clicked(widget, panel, move):
def _on_time_clicked(widget, panel, value):
+ # little check
+ if hasattr(panel, 'time_entry')\
+ or panel.time_entry is None:
+ pass
+ else:
+ return False
# shortcut
_activity = panel.screen.toolbar.activity
# get current
@@ -290,6 +296,152 @@ def _on_loop_click(toggle, panel, image):
panel.screen.timeline.refresh_sequence()
+def _get_next_time(panel, factor):
+ # get the current frame
+ _time = 0.0 if panel.screen.toolbar.activity._thread is None\
+ else panel.screen.toolbar.activity._thread._time
+ # get rate
+ _rate = config.Config().get_rate_value()
+ # next time
+ _next = _time + factor * _rate
+ # get max
+ _max = panel.screen.toolbar.activity._number_of_keys - 1
+ if _next < _max:
+ # ok!
+ return _next
+ else:
+ # return max + pause
+ return _max
+
+
+def _get_previous_time(panel, factor):
+ # get the current frame
+ _time = 0.0 if panel.screen.toolbar.activity._thread is None\
+ else panel.screen.toolbar.activity._thread._time
+ # get rate
+ _rate = config.Config().get_rate_value()
+ # previous time
+ _previous = _time - factor * _rate
+ # ..
+ if _previous < 0:
+ # return min
+ return 0
+ else:
+ # ok
+ return _previous
+
+
+def _on_key_press(widget, event, panel):
+ # ..
+ if isinstance(panel, Panel):
+ # ..
+ _keyval = event.keyval
+ _name = gtk.gdk.keyval_name(_keyval)
+ _mod = gtk.accelerator_get_label(_keyval, event.state)
+ # DEBUG
+ logger.debug('[panel] _on_key_press - _keyval: %s' % _keyval)
+ logger.debug('[panel] _on_key_press - _name: %s' % _name)
+ logger.debug('[panel] _on_key_press - _mod: %s' % _mod)
+ # DEBUG
+ # key factory
+ if panel.screen.toolbar.name == 'graphics':
+ # POSITION
+ if _mod == 'Mod2+4'\
+ or _mod == 'Mod2+Left': # left
+ # do move
+ _on_position_clicked(widget, panel, 'x', -1)
+ elif _mod == 'Ctrl+Mod2+4'\
+ or _mod == 'Ctrl+Mod2+Left': # big left
+ # do move
+ _on_position_clicked(widget, panel, 'x', -10)
+ elif _mod == 'Mod2+6'\
+ or _mod == 'Mod2+Right': # right
+ # do move
+ _on_position_clicked(widget, panel, 'x', 1)
+ elif _mod == 'Ctrl+Mod2+6'\
+ or _mod == 'Ctrl+Mod2+Right': # big right
+ # do move
+ _on_position_clicked(widget, panel, 'x', 10)
+ elif _mod == 'Mod2+8'\
+ or _mod == 'Mod2+Up': # top
+ # do move
+ _on_position_clicked(widget, panel, 'y', -1)
+ elif _mod == 'Ctrl+Mod2+8'\
+ or _mod == 'Ctrl+Mod2+Up': # big top
+ # do move
+ _on_position_clicked(widget, panel, 'y', -10)
+ elif _mod == 'Mod2+2'\
+ or _mod == 'Mod2+Down': # bottom
+ # do move
+ _on_position_clicked(widget, panel, 'y', 1)
+ elif _mod == 'Ctrl+Mod2+2'\
+ or _mod == 'Ctrl+Mod2+Down': # big bottom
+ # do move
+ _on_position_clicked(widget, panel, 'y', 10)
+ # LAYOUT
+ elif _mod == 'Mod2+Page Up':
+ _on_layout_clicked(widget, panel, 'move_up')
+ elif _mod == 'Ctrl+Mod2+Page Up':
+ _on_layout_clicked(widget, panel, 'move_up_up')
+ elif _mod == 'Mod2+Page Down':
+ _on_layout_clicked(widget, panel, 'move_down')
+ elif _mod == 'Ctrl+Mod2+Page Down':
+ _on_layout_clicked(widget, panel, 'move_down_down')
+ # TIME
+ elif _mod == 'Mod2++':
+ _on_time_clicked(widget, panel, 1)
+ elif _mod == 'Ctrl+Mod2++':
+ _on_time_clicked(widget, panel, 10)
+ elif _mod == 'Mod2+-':
+ _on_time_clicked(widget, panel, -1)
+ elif _mod == 'Ctrl+Mod2+-':
+ _on_time_clicked(widget, panel, -10)
+ # DELETE
+ elif _mod == 'Mod2+Delete':
+ _on_remove_key_clicked(widget, panel)
+ elif _mod == 'Ctrl+Mod2+Delete':
+ _on_remove_sequence_clicked(widget, panel)
+ # IMAGE
+ # TODO ...
+ elif panel.screen.toolbar.name == 'sounds':
+ pass
+ else:
+ pass
+ # IN EVERY CASE
+ if panel.screen.toolbar.name in ['graphics', 'sounds', 'story']:
+ # shortcut
+ _thread = panel.screen.toolbar.activity._thread
+ # ..
+ if _mod == 'Mod2+Space': # play right
+ #
+ _time = _get_next_time(panel, 1)
+ #
+ _thread.set_time(time_=_time, pause=True)
+ elif _mod == 'Ctrl+Mod2+Space': # play left
+ #
+ _time = _get_previous_time(panel, 1)
+ #
+ _thread.set_time(time_=_time, pause=True)
+ # PLAY
+ elif _mod == 'Mod2+Return':
+ # ..
+ if _thread._pause is True:
+ panel.screen.toolbar.play()
+ _thread.play()
+ # ..
+ else:
+ panel.screen.toolbar.pause()
+ _thread.pause()
+ else:
+ pass
+ else:
+ pass
+ # ..
+ widget.emit_stop_by_name('key-press-event')
+ # ..
+ return False
+
+
class Panel(gtk.Frame):
def __init__(self, screen):
@@ -322,6 +474,20 @@ class Panel(gtk.Frame):
self.main_box.show()
# add it to the panel
self.add(self.main_box)
+ # ..
+ self.__init_handler()
+
+ def __init_handler(self):
+ # shortcuts
+ _activity = self.screen.toolbar.activity
+ _handler_id = _activity._handler_id
+ if _handler_id is None:
+ pass
+ else:
+ _activity.disconnect(_handler_id)
+ # ..
+ _activity._handler_id = _activity.connect('key-press-event',
+ _on_key_press, self)
def _init_sequence_box(self):
# update store
diff --git a/atoidejouer/ui/toolbar.py b/atoidejouer/ui/toolbar.py
index dcd72fa..42a6efa 100644
--- a/atoidejouer/ui/toolbar.py
+++ b/atoidejouer/ui/toolbar.py
@@ -572,6 +572,10 @@ class Toolbar(gtk.Toolbar):
else:
return None
+ def play(self):
+ # do pause
+ _cb_play(None, self)
+
def pause(self):
# do pause
_cb_pause(None, self)