diff options
author | florent <florent.pigout@gmail.com> | 2011-04-29 00:56:54 (GMT) |
---|---|---|
committer | florent <florent.pigout@gmail.com> | 2011-04-29 00:56:54 (GMT) |
commit | 722bb25b353daf7970533937ccd1d25e196fe5ee (patch) | |
tree | a5c1ee7fd6d236a9582db382771bcf155c6ede9d | |
parent | 42d54d0d846809acc709235bc918bee51fa72865 (diff) |
add key shortcuts binding for main graphic features
-rw-r--r-- | activity.py | 3 | ||||
-rw-r--r-- | atoidejouer/ui/panel.py | 166 | ||||
-rw-r--r-- | atoidejouer/ui/toolbar.py | 4 |
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) |