diff options
Diffstat (limited to 'atoidejouer/ui/panel.py')
-rw-r--r-- | atoidejouer/ui/panel.py | 1025 |
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 |