Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/atoidejouer/ui/panel.py
diff options
context:
space:
mode:
Diffstat (limited to 'atoidejouer/ui/panel.py')
-rw-r--r--atoidejouer/ui/panel.py1025
1 files changed, 0 insertions, 1025 deletions
diff --git a/atoidejouer/ui/panel.py b/atoidejouer/ui/panel.py
deleted file mode 100644
index 8e65bea..0000000
--- a/atoidejouer/ui/panel.py
+++ /dev/null
@@ -1,1025 +0,0 @@
-
-# python import
-import logging, os
-# ..
-from functools import partial
-from gettext import gettext as _
-
-# gtk import
-import gobject, gtk, glib
-
-# sugar import
-from sugar.activity import activity
-
-# atoidejouer import
-from atoidejouer.tools import config, image, storage, ui
-
-# get application logger
-logger = logging.getLogger('atoidejouer')
-
-
-def _get_filename(panel):
- # get model
- _model = panel.combo_box.get_model()
- # get iter
- _iter = panel.combo_box.get_active_iter()
- # get filename
- if isinstance(_iter, gtk.TreeIter):
- return _model.get_value(_iter, 1)
- else:
- return None
-
-
-def _on_graphic_combo_changed(combobox, panel):
- # shortcut
- _activity = panel.screen.toolbar.activity
- # get filename
- _filename = _get_filename(panel)
- # get current
- _current, _f_type, _k_type = panel.story_keys.get_current(
- panel.sequence_name, _activity._thread._time)
- # do nothing
- if _filename is None\
- or _k_type == 'transition'\
- or _activity._thread._pause is False:
- return
- # ...
- elif _filename == '':
- # remove key
- panel.story_keys.remove_filename(panel.sequence_name,
- _activity._thread._time, _current)
- # reset current
- panel.story_keys.set_current(panel.sequence_name,
- _activity._thread._time, None, file_type=None,
- key_type=None)
- elif _current != _filename:
- # update keys
- panel.story_keys.set_current(panel.sequence_name,
- _activity._thread._time, _filename, file_type='lib',
- key_type='key')
- # ..
- if panel.screen.toolbar.name == 'graphics':
- # get previous align
- _prev_align = panel.story_keys.get_previous_align(
- panel.sequence_name, _activity._thread._time)
- # set align
- panel.story_keys.set_align(panel.sequence_name,
- _activity._thread._time, _filename, _prev_align)
- else:
- pass
- # ...
- panel.story_keys.refresh(panel.sequence_name)
- # refresh timeline
- panel.screen.timeline.refresh_sequence()
- # refresh scene
- panel.screen.scene.refresh(sequence_name=panel.sequence_name)
-
-
-def _on_position_clicked(widget, panel, move, value):
- # shortcut
- _activity = panel.screen.toolbar.activity
- # get filename
- _filename = _get_filename(panel)
- # get current
- _current, _f_type, _k_type = panel.story_keys.get_current(
- panel.sequence_name, _activity._thread._time)
- # do nothing
- if _filename is None\
- or _k_type != 'key'\
- or _activity._thread._pause is False:
- pass
- else:
- # update keys
- _x, _y = panel.story_keys.inc_position(panel.sequence_name,
- _activity._thread._time, _filename, move, value)
- # ...
- panel.story_keys.refresh(panel.sequence_name)
- # refresh timeline
- panel.screen.timeline.refresh_sequence()
- # update panel entries
- panel.entry_x.set_text(str(_x))
- panel.entry_y.set_text(str(-_y))
- # refresh scene
- panel.screen.scene.refresh(sequence_name=panel.sequence_name)
-
-
-def _on_layout_clicked(widget, panel, move):
- # shortcut
- _activity = panel.screen.toolbar.activity
- # get current layout
- _layout = panel.story_keys.get_layout(panel.sequence_name)
- _max_layout = panel.story_keys.get_max_layout()
- # do nothing
- if _activity._thread._pause is False:
- return
- # layout factory
- elif move == 'move_up_up':
- _layout = _max_layout
- elif move == 'move_up':
- _layout = (_layout + 1) if _layout < _max_layout else _max_layout
- elif move == 'move_down':
- _layout = (_layout - 1) if _layout > 0 else 0
- elif move == 'move_down_down':
- _layout = 0
- else:
- # ??
- return
- # ..
- panel.story_keys.set_layout(panel.sequence_name, _layout)
- # ...
- panel.story_keys.refresh(panel.sequence_name)
- # refresh timeline
- panel.screen.timeline.refresh_sequence()
- # update entry
- panel.entry_layout.set_text(str(_layout))
- # refresh scene
- panel.screen.scene.refresh()
- # reorder timeline
- panel.screen.timeline.reorder()
-
-
-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
- _current, _f_type, _k_type = panel.story_keys.get_current(
- panel.sequence_name, _activity._thread._time)
- # little check
- if panel.sequence_name is None:
- return panel.time_entry.set_text('')
- # do nothing
- elif _k_type == 'transition'\
- or _activity._thread._pause is False:
- return
- else:
- _previous_frame = _activity._thread._time
- # time factory
- _new_frame = _previous_frame + value
- _new_frame = 0 if _new_frame < 0 else _new_frame
- # entry update
- panel.time_entry.set_text('%1d:%02d' % divmod(_new_frame, 60))
- # update keys
- panel.story_keys.set_frame(panel.sequence_name, _previous_frame,
- _new_frame)
- # ...
- panel.story_keys.refresh(panel.sequence_name)
- # refresh timeline
- panel.screen.timeline.refresh_sequence()
- # set activity new number of keys
- _activity.update_number_of_keys()
- # update thread time
- _activity._thread.set_time(time_=_new_frame)
- # restore current
- panel.screen.timeline.set_active_sequence(panel.sequence_name)
-
-
-def _on_remove_sequence_clicked(widget, panel):
- # shortcut
- _activity = panel.screen.toolbar.activity
- # clear keys
- panel.story_keys.remove_sequence(panel.sequence_name)
- # reorder timeline
- panel.screen.timeline.remove_sequence(panel.sequence_name)
- # ..
- panel.clear()
- # ...
- panel.story_keys.ask_clear()
- # refresh scene
- panel.screen.scene.refresh()
-
-
-def _on_remove_key_clicked(widget, panel):
- # shortcut
- _activity = panel.screen.toolbar.activity
- # get current
- _current, _f_type, _k_type = panel.story_keys.get_current(
- panel.sequence_name, _activity._thread._time)
- # ..
- if _k_type is None:
- pass
- elif _k_type != 'key':
- return
- # remove key
- panel.story_keys.remove_filename(panel.sequence_name,
- _activity._thread._time, _current)
- # reset current
- panel.story_keys.set_current(panel.sequence_name,
- _activity._thread._time, None, file_type=None,
- key_type=None)
- # ...
- panel.story_keys.refresh(panel.sequence_name)
- # refresh timeline
- panel.screen.timeline.refresh_sequence()
- # ...
- panel.story_keys.ask_clear()
- # refresh scene
- panel.screen.scene.refresh()
- # .. and reset panel
- panel.refresh()
-
-
-def _on_duration_clicked(widget, panel, value):
- # shortcut
- _activity = panel.screen.toolbar.activity
- # get filename
- _filename = _get_filename(panel)
- # get current
- _current, _f_type, _k_type = panel.story_keys.get_current(
- panel.sequence_name, _activity._thread._time)
- # do nothing
- if panel.sequence_name is None:
- panel.entry_duration.set_text('')
- elif _filename is None\
- or _k_type != 'key'\
- or _activity._thread._pause is False:
- pass
- else:
- # update keys
- _d = panel.story_keys.inc_duration(panel.sequence_name,
- _activity._thread._time, _filename, value)
- # ...
- panel.story_keys.refresh(panel.sequence_name)
- # refresh timeline
- panel.screen.timeline.refresh_sequence()
- # update panel entries
- panel.entry_duration.set_text('%1d:%02d' % divmod(_d, 60))
-
-
-def _on_loop_click(toggle, panel, image):
- # update image
- _stock_id = 'repeat_grey' if toggle.get_active() is True else 'repeat'
- image.set_from_file(storage.get_icon_path(_stock_id))
- # shortcut
- _activity = panel.screen.toolbar.activity
- # get filename
- _filename = _get_filename(panel)
- # get current
- _current, _f_type, _k_type = panel.story_keys.get_current(
- panel.sequence_name, _activity._thread._time)
- # do nothing
- if panel.sequence_name is None:
- panel.toggle_loop.set_active(False)
- elif _filename is None\
- or _k_type != 'key'\
- or _activity._thread._pause is False:
- pass
- else:
- _loop = toggle.get_active()
- # update keys
- panel.story_keys.set_loop(panel.sequence_name,
- _activity._thread._time, _filename, _loop)
- # ...
- panel.story_keys.refresh(panel.sequence_name)
- # refresh timeline
- 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)
- # ..
- if panel.screen != panel.screen.toolbar.activity.get_current_screen():
- return
- # key factory
- elif panel.screen.toolbar.name == 'graphics':
- # POSITION
- if _name == 'Left' and _mod.startswith('Ctrl+'): # big left
- _on_position_clicked(widget, panel, 'x', -10)
- elif _name == 'Left': # left
- _on_position_clicked(widget, panel, 'x', -1)
- elif _name == 'Right' and _mod.startswith('Ctrl+'): # big right
- _on_position_clicked(widget, panel, 'x', 10)
- elif _name == 'Right': # right
- _on_position_clicked(widget, panel, 'x', 1)
- elif _name == 'Up' and _mod.startswith('Ctrl+'): # big top
- _on_position_clicked(widget, panel, 'y', -10)
- elif _name == 'Up': # top
- _on_position_clicked(widget, panel, 'y', -1)
- elif _name == 'Down' and _mod.startswith('Ctrl+'): # big bottom
- _on_position_clicked(widget, panel, 'y', 10)
- elif _name == 'Down': # bottom
- _on_position_clicked(widget, panel, 'y', 1)
- # LAYOUT
- elif _name == 'Page_Up' and _mod.startswith('Ctrl+'):
- _on_layout_clicked(widget, panel, 'move_up_up')
- elif _name == 'Page_Up':
- _on_layout_clicked(widget, panel, 'move_up')
- elif _name == 'Page_Down' and _mod.startswith('Ctrl+'):
- _on_layout_clicked(widget, panel, 'move_down_down')
- elif _name == 'Page_Down':
- _on_layout_clicked(widget, panel, 'move_down')
- # TIME
- elif _name == 'plus' and _mod.startswith('Ctrl+'):
- _on_time_clicked(widget, panel, 10)
- elif _name == 'plus':
- _on_time_clicked(widget, panel, 1)
- elif _name == 'minus' and _mod.startswith('Ctrl+'):
- _on_time_clicked(widget, panel, -10)
- elif _name == 'minus':
- _on_time_clicked(widget, panel, -1)
- # DELETE
- elif _name == 'BackSpace' and _mod.startswith('Ctrl+'):
- _on_remove_sequence_clicked(widget, panel)
- elif _name == 'BackSpace':
- _on_remove_key_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 _name == 'space': # play right
- #
- _time = _get_next_time(panel, 1)
- #
- _thread.set_time(time_=_time, pause=True)
- elif _name == 'space' and _mod.startswith('Ctrl+'): # play left
- #
- _time = _get_previous_time(panel, 1)
- #
- _thread.set_time(time_=_time, pause=True)
- # PLAY
- elif _name == 'Return':
- # ..
- if _thread._pause is True:
- panel.screen.toolbar.play()
- _thread.play()
- # ..
- else:
- panel.screen.toolbar.pause()
- _thread.pause()
- else:
- pass
- # avoid propagation for rendering issue
- widget.emit_stop_by_name('key-press-event')
- # ..
- return False
- else:
- return False
- else:
- return False
-
-
-class Panel(gtk.Frame):
-
- def __init__(self, screen):
- # init parent
- gtk.Frame.__init__(self)
- self.set_shadow_type(gtk.SHADOW_NONE)
- # set screen
- self.screen = screen
- # ..
- if screen.toolbar.name == 'graphics':
- self.story_keys = self.screen.toolbar.activity.graphic_keys
- else:
- self.story_keys = self.screen.toolbar.activity.sound_keys
- # get mode
- self._mode = config.Config().get('activity>mode')
- self._conf = config.Config().get('mode>%s' % self._mode, type_=list)
- # ...
- self.set_size_request(298, screen.scene._screen_height)
- # do show
- self.show()
- # init vars
- self._store = None
- self.sequence_name = None
- # ..
- self.combo_box = None
- self.time_entry = None
- # add vbox to the panel for sub frames
- self.main_box = gtk.VBox(homogeneous=False, spacing=0)
- # do show
- 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
- self.update_store()
- # init combo
- self.combo_box = gtk.ComboBox(model=self._store)
- # set tooltip
- self.combo_box.set_tooltip_text(_('Choose a Sequence Item'))
- # set renderers
- _cell_pix = gtk.CellRendererPixbuf()
- _cell_pix.set_property('width', 48)
- _cell_pix.set_property('height', 36)
- # ..
- self.combo_box.pack_start(_cell_pix, expand=False)
- self.combo_box.add_attribute(_cell_pix, 'pixbuf', 0)
- # ..
- _cell_text = gtk.CellRendererText()
- _cell_text.set_property('xpad', 4)
- _cell_text.set_property('yalign', 0.5)
- # ..
- self.combo_box.pack_start(_cell_text, expand=True)
- self.combo_box.add_attribute(_cell_text, 'text', 1)
-
- def clear(self):
- self.sequence_name = None
- self.time_entry.set_text('')
- self.update_store()
-
- def _get_pixbuf(self, graphic_name, dir_='graphics'):
- # get the image path
- _graphic_path = storage.get_image_path(graphic_name, dir_=dir_)
- # return pix and path
- return image.get_pixbuf(_graphic_path, 48, 36), _graphic_path
-
- def update_store(self):
- # init store
- if self._store is None:
- self._store = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING,
- gobject.TYPE_PYOBJECT)
- else:
- self._store.clear()
-
- def refresh(self, sequence_name=None, update_store=False):
- pass
-
- def _refresh(self, type_, sequence_name=None, update_store=False):
- # keep older if not specified
- if sequence_name is None:
- pass
- else:
- self.sequence_name = sequence_name
- # update store
- if update_store is True:
- self.update_store()
- else:
- pass
- # prepare dir path
- _seq_path = os.path.join(activity.get_activity_root(), 'data',
- 'sequences', type_, '%s.seq' % self.sequence_name)
- # little check
- if os.path.exists(_seq_path):
- _activity = self.screen.toolbar.activity
- # ..
- _current, _f_type, _k_type = self.story_keys.get_current(
- self.sequence_name, _activity._thread._time)
- # get sound names
- _items = storage.get_sequence_items(_seq_path)
- # get combo box active
- if _current in _items:
- _active = _items.index(_current) + 1
- else:
- _active = 0
- # update combobox
- self.combo_box.set_active(_active)
- else:
- _current = None
- # shortcut
- _activity = self.screen.toolbar.activity
- # time entry update
- if self.time_entry is None:
- pass
- else:
- self.time_entry.set_text(
- '%1d:%02d' % divmod(_activity._thread._time, 60))
- # ..
- return _seq_path, _current
-
- def __get_time_button(self, name, value, tooltip_text):
- # init button
- _button = ui.get_button(stock_id=name)
- # set tooltip
- _button.set_tooltip_text(tooltip_text)
- # set cb
- _button.connect('clicked', _on_time_clicked, self, value)
- # ..
- return _button
-
- def add_frame_time(self):
- # init frame
- _frame_time = gtk.Frame(label=_('Time'))
- _frame_time.set_border_width(1)
- # do show
- _frame_time.show()
- # do add
- self.main_box.pack_start(_frame_time, expand=False, fill=True)
- # get over/under spin buttons
- _time_box = gtk.HBox(homogeneous=False, spacing=4)
- _time_box.set_border_width(4)
- _time_box.show()
- # before ..
- _time_box.pack_start(self.__get_time_button('go_left', -10,
- _('Play Before (10 Frames)')), expand=False, fill=True)
- _time_box.pack_start(self.__get_time_button('go_left_small', -1,
- _('Play Before (1 Frames)')), expand=False, fill=True)
- # entry
- self.time_entry = gtk.Entry()
- # show
- self.time_entry.show()
- # set value - should be a string
- self.time_entry.set_text('')
- self.time_entry.set_alignment(1)
- self.time_entry.set_property('editable', False)
- # add entry
- _time_box.pack_start(self.time_entry, expand=True, fill=True)
- # .. after
- _time_box.pack_start(self.__get_time_button('go_right_small', 1,
- _('Play After (1 Frames)')), expand=False, fill=True)
- _time_box.pack_start(self.__get_time_button('go_right', 10,
- _('Play After (10 Frames)')), expand=False, fill=True)
- # do add
- _frame_time.add(_time_box)
-
- def add_frame_remove(self):
- # init frame
- _frame_remove = gtk.Frame(label=_('Remove'))
- _frame_remove.set_border_width(1)
- # do show
- _frame_remove.show()
- # do add
- self.main_box.pack_start(_frame_remove, expand=False, fill=True)
- # init container
- _in_vbox = gtk.HBox(homogeneous=True, spacing=4)
- _in_vbox.set_border_width(4)
- # show
- _in_vbox.show()
- # do add
- _frame_remove.add(_in_vbox)
- # prepare remove sequence button
- _rm_seq_button = ui.get_button(label=_('Sequence'),
- stock_id='remove_sequence', width=48, padding=(8, 0))
- _rm_seq_button.set_tooltip_text(_('Remove Sequence'))
- # set cb
- _rm_seq_button.connect('clicked', _on_remove_sequence_clicked, self)
- # get remove sequence button
- _in_vbox.pack_start(_rm_seq_button, expand=False, fill=True)
- # prepare remove sequence button
- _rm_key_button = ui.get_button(label=_('Key'),
- stock_id='remove_item', width=48, padding=(12, 0))
- _rm_key_button.set_tooltip_text(_('Remove Key'))
- # set cb
- _rm_key_button.connect('clicked', _on_remove_key_clicked, self)
- # get remove image button
- _in_vbox.pack_start(_rm_key_button, expand=False, fill=True)
-
-
-class PanelGraphics(Panel):
-
- def __init__(self, screen):
- # init parent
- Panel.__init__(self, screen)
- # main vars
- self.entry_layout = None
- # ..
- self.entry_x = None
- self.entry_y = None
- # add specific
- if 'image' in self._conf:
- self._add_frame_image()
- else:
- pass
- if 'position' in self._conf:
- self._add_frame_position()
- else:
- pass
- # .. common
- if 'time' in self._conf:
- self.add_frame_time()
- else:
- pass
- # ..
- if 'remove' in self._conf:
- self.add_frame_remove()
- else:
- pass
-
- def clear(self):
- # clear parent
- Panel.clear(self)
- # ..
- self.entry_layout.set_text('')
- self.entry_x.set_text('')
- self.entry_y.set_text('')
-
- def refresh(self, sequence_name=None, update_store=False):
- # shortcut
- _activity = self.screen.toolbar.activity
- # update parent
- _seq_path, _current = Panel._refresh(self, 'graphics',
- sequence_name=sequence_name, update_store=update_store)
- # little check
- if os.path.exists(_seq_path):
- # get current layout
- _layout = self.story_keys.get_layout(self.sequence_name)
- # update layout
- self.entry_layout.set_text(str(_layout))
- # get current x and y
- _x, _y = self.story_keys.get_align(self.sequence_name,
- _activity._thread._time, _current)
- # update panel x
- if self.entry_x is None:
- pass
- else:
- self.entry_x.set_text(str(_x))
- # update panel y
- if self.entry_y is None:
- pass
- else:
- self.entry_y.set_text(str(-_y))
- else:
- pass
-
- def update_store(self):
- # init parent
- Panel.update_store(self)
- # prepare dir path
- _seq_path = os.path.join(activity.get_activity_root(), 'data',
- 'sequences', 'graphics', '%s.seq' % self.sequence_name)
- # little check
- if os.path.exists(_seq_path):
- # get graphic names
- _items = storage.get_sequence_items(_seq_path)
- # add dummy row
- _dummy_pix, _path = self._get_pixbuf('blank', dir_='data')
- self._store.append([_dummy_pix, '', None])
- # for each graphics
- for _filename in _items:
- # prepare pixbuf
- _pixbuf, _path = self._get_pixbuf(_filename)
- # do update
- self._store.append([_pixbuf, _filename, _path])
- # not exist .. clear
- else:
- self._store.clear()
-
- def _init_sequence_box(self):
- # ..
- Panel._init_sequence_box(self)
- # set callback
- self.combo_box.connect('changed', _on_graphic_combo_changed, self)
-
- def __get_layout_button(self, name, tooltip_text):
- # init button
- _button = ui.get_button(stock_id=name)
- # set tooltip
- _button.set_tooltip_text(tooltip_text)
- # set cb
- _button.connect('clicked', _on_layout_clicked, self, name)
- # ..
- return _button
-
- def _add_frame_image(self):
- # init frame
- _frame_sequence = gtk.Frame(label=_('Image'))
- _frame_sequence.set_border_width(1)
- # do show
- _frame_sequence.show()
- # do add
- self.main_box.pack_start(_frame_sequence, expand=False, fill=True)
- # vbox for the frame
- _in_vbox = gtk.VBox(homogeneous=False, spacing=4)
- _in_vbox.set_border_width(4)
- # do show
- _in_vbox.show()
- # do add
- _frame_sequence.add(_in_vbox)
- # init
- self._init_sequence_box()
- # add row sequence
- _in_vbox.pack_start(self.combo_box, expand=False, fill=True)
- # get over/under spin buttons
- _layer_box = gtk.HBox(homogeneous=True, spacing=4)
- _layer_box.show()
- # down ..
- _layer_box.pack_start(self.__get_layout_button('move_down_down',
- _('Layer to Bottom')), expand=False, fill=True)
- _layer_box.pack_start(self.__get_layout_button('move_down',
- _('Lower Layer')), expand=False, fill=True)
- # entry
- self.entry_layout = gtk.Entry()
- # show
- self.entry_layout.show()
- # set value - should be a string
- self.entry_layout.set_text("")
- self.entry_layout.set_alignment(1)
- self.entry_layout.set_property('editable', False)
- # add entry
- _layer_box.pack_start(self.entry_layout, expand=False, fill=True)
- # .. up
- _layer_box.pack_start(self.__get_layout_button('move_up',
- _('Raise Layer')), expand=False, fill=True)
- _layer_box.pack_start(self.__get_layout_button('move_up_up',
- _('Layer to Top')), expand=False, fill=True)
- # add row sequence
- _in_vbox.pack_start(_layer_box, expand=True, fill=True)
-
- def __get_position_button(self, name, move, value, tooltip_text):
- # init button
- _button = ui.get_button(stock_id=name)
- # set tooltip
- _button.set_tooltip_text(tooltip_text)
- # set cb
- _button.connect('clicked', _on_position_clicked, self, move, value)
- # ..
- return _button
-
- def _add_frame_position(self):
- # init frame
- _frame_position = gtk.Frame(label=_('Position'))
- _frame_position.set_border_width(1)
- # do show
- _frame_position.show()
- # do add
- self.main_box.pack_start(_frame_position, expand=False, fill=True)
- # _vbox
- _in_vbox = gtk.VBox(homogeneous=False, spacing=4)
- _in_vbox.set_border_width(4)
- _in_vbox.show()
- # first _row
- _in_vbox.pack_start(self.__get_position_button('y_up_up', 'y', -10,
- _('Move Up by 10%')), expand=False, fill=False)
- # second _row
- _in_vbox.pack_start(self.__get_position_button('y_up', 'y', -1,
- _('Move Up by 1%')), expand=False, fill=False)
- # third _row
- _row3 = gtk.HBox(homogeneous=False, spacing=4)
- _row3.show()
- _row3.pack_start(self.__get_position_button('x_left_left', 'x', -10,
- _('Move Left by 10%')), expand=False, fill=True)
- _row3.pack_start(self.__get_position_button('x_left', 'x', -1,
- _('Move Left by 1%')), expand=False, fill=True)
- # prepare middle box
- _middle_box = gtk.VBox(homogeneous=True, spacing=4)
- _middle_box.show()
- # get entries
- _entry_box_x = ui.get_entry(label='X')
- _entry_box_y = ui.get_entry(label='Y')
- # update main vars
- self.entry_x = _entry_box_x.get_children()[1]
- self.entry_y = _entry_box_y.get_children()[1]
- # add entries to the box
- _middle_box.pack_start(_entry_box_x, expand=False, fill=True)
- _middle_box.pack_start(_entry_box_y, expand=False, fill=True)
- _middle_box.set_size_request(64, -1)
- # add the box to the row
- _row3.pack_start(_middle_box, expand=True, fill=True)
- # ..
- _row3.pack_start(self.__get_position_button('x_right', 'x', 1,
- _('Move Right by 1%')), expand=False, fill=True)
- _row3.pack_start(self.__get_position_button('x_right_right', 'x', 10,
- _('Move Right by 10%')), expand=False, fill=True)
- # and add the third row
- _in_vbox.pack_start(_row3, expand=False, fill=False)
- # fourth _row
- _in_vbox.pack_start(self.__get_position_button('y_down', 'y', 1,
- _('Move Down by 1%')), expand=False, fill=False)
- # fifth _row
- _in_vbox.pack_start(self.__get_position_button('y_down_down', 'y', 10,
- _('Move Down by 10%')), expand=False, fill=False)
- # put it in
- _frame_position.add(_in_vbox)
-
-
-class PanelSounds(Panel):
-
- def __init__(self, screen):
- # init parent
- Panel.__init__(self, screen)
- # init commonf fields
- self.entry_duration = None
- self.toggle_loop = None
- self.image_loop = None
- # add specific
- if 'sound' in self._conf:
- self._add_frame_sound()
- else:
- pass
- # .. common
- if 'time' in self._conf:
- self.add_frame_time()
- else:
- pass
- # ..
- if 'remove' in self._conf:
- self.add_frame_remove()
- else:
- pass
-
-
- def clear(self):
- # clear parent
- Panel.clear(self)
- # ..
- self.entry_duration.set_text('')
- self.toggle_loop.set_active(False)
-
- def _get_time(self, value):
- """Format the time value to display
- """
- # return formated value
- return '%1d:%02d' % divmod(value, 60)
-
- def update_store(self):
- # init parent
- Panel.update_store(self)
- # prepare dir path
- _seq_path = os.path.join(activity.get_activity_root(), 'data',
- 'sequences', 'sounds', '%s.seq' % self.sequence_name)
- # little check
- if os.path.exists(_seq_path):
- # get graphic names
- _items = storage.get_sequence_items(_seq_path)
- # add dummy row
- _dummy_pix, _path = self._get_pixbuf('blank', dir_='data')
- self._store.append([_dummy_pix, '', None])
- # for each graphics
- for _filename in _items:
- # prepare pixbuf
- _pixbuf, _path = self._get_pixbuf('sound', dir_='data')
- # do update
- self._store.append([_pixbuf, _filename, _path])
- # not exist .. clear
- else:
- self._store.clear()
-
- def _init_sequence_box(self):
- # ..
- Panel._init_sequence_box(self)
- # set callback
- self.combo_box.connect('changed', _on_graphic_combo_changed, self)
-
- def __get_duration_button(self, name, value, tooltip_text):
- # init button
- _button = ui.get_button(stock_id=name)
- # ..
- _button.set_tooltip_text(tooltip_text)
- # set cb
- _button.connect('clicked', _on_duration_clicked, self, value)
- # ..
- return _button
-
- def _get_duration_box(self):
- # get less/more spin buttons
- _duration_box = gtk.HBox(homogeneous=True, spacing=4)
- _duration_box.show()
- # down ..
- _duration_box.pack_start(self.__get_duration_button('less', -10,
- _('Duration -10s')), expand=False, fill=True)
- _duration_box.pack_start(self.__get_duration_button('less_small', -1,
- _('Duration -1s')), expand=False, fill=True)
- # entry
- self.entry_duration = gtk.Entry()
- # show
- self.entry_duration.show()
- # set value - should be a string
- self.entry_duration.set_text('') # self._get_time(0)
- self.entry_duration.set_alignment(1)
- self.entry_duration.set_property('editable', False)
- self.entry_duration.set_size_request(64, -1)
- # add entry
- _duration_box.pack_start(self.entry_duration, expand=False, fill=True)
- # .. up
- _duration_box.pack_start(self.__get_duration_button('more_small', 1,
- _('Duration +1s')), expand=False, fill=True)
- _duration_box.pack_start(self.__get_duration_button('more', 10,
- _('Duration +10s')), expand=False, fill=True)
- # return it
- return _duration_box
-
- def _init_loop_box(self):
- # init row
- _loop_box = gtk.HBox(homogeneous=False, spacing=4)
- _loop_box.show()
- # create image
- self.image_loop = gtk.Image()
- self.image_loop.show()
- # get img path
- self.image_loop.set_from_file(storage.get_icon_path('repeat'))
- self.image_loop.set_size_request(48, -1)
- # add image
- _loop_box.pack_start(self.image_loop, expand=False, fill=True)
- # create label
- _label = gtk.Label(_('Repeat'))
- _label.set_alignment(0, 0.5)
- _label.show()
- # add label
- _loop_box.pack_start(_label, expand=True, fill=True)
- # create checkbox
- self.toggle_loop = gtk.ToggleButton()
- # set tooltip
- self.toggle_loop.set_tooltip_text(_('Loop (On/Off)'))
- # ..
- self.toggle_loop.show()
- self.toggle_loop.add(_loop_box)
- # set cb
- self.toggle_loop.connect('toggled', _on_loop_click, self,
- self.image_loop)
-
- def _add_frame_sound(self):
- # init frame
- _frame_sound = gtk.Frame(label=_('Sound'))
- _frame_sound.set_border_width(1)
- # do show
- _frame_sound.show()
- # do add
- self.main_box.pack_start(_frame_sound, expand=False, fill=True)
- # vbox for the fram
- _in_vbox = gtk.VBox(homogeneous=False, spacing=4)
- _in_vbox.set_border_width(4)
- # do show
- _in_vbox.show()
- # do add
- _frame_sound.add(_in_vbox)
- # add row sequence
- self._init_sequence_box()
- _in_vbox.pack_start(self.combo_box, expand=False, fill=True)
- # add duration box
- _in_vbox.pack_start(self._get_duration_box(), expand=False, fill=True)
- # add loop button
- self._init_loop_box()
- _in_vbox.pack_start(self.toggle_loop, expand=False, fill=True)
-
- def refresh(self, sequence_name=None, update_store=False):
- # update parent
- _seq_path, _current = Panel._refresh(self, 'sounds',
- sequence_name=sequence_name, update_store=update_store)
- # little check
- if os.path.exists(_seq_path):
- # shortcut
- _activity = self.screen.toolbar.activity
- if self.entry_duration is None:
- pass
- else:
- # get current x and y
- _d = self.story_keys.get_duration(self.sequence_name,
- _activity._thread._time, _current)
- # update panel x y
- self.entry_duration.set_text('%1d:%02d' % divmod(_d, 60))
- # ...
- _l = self.story_keys.get_loop(self.sequence_name,
- _activity._thread._time, _current)
- # ...
- self.toggle_loop.set_active(_l)
- # update image
- _stock_id = 'repeat_grey' if _l is True else 'repeat'
- self.image_loop.set_from_file(storage.get_icon_path(_stock_id))
- else:
- pass