diff options
author | florent <florent.pigout@gmail.com> | 2011-03-20 00:08:49 (GMT) |
---|---|---|
committer | florent <florent.pigout@gmail.com> | 2011-03-20 00:08:49 (GMT) |
commit | 9b4ddead3f4dfd0b3f7fa8565ca3d4ea25907bb8 (patch) | |
tree | f6608e9fc504a4ae98a9bbe633d07e41d3fa6428 | |
parent | 76f0fb988722469e32efcc3e605432098202a87b (diff) |
add story keys object to manage sounds && start sounds editing (panel+timeline)
-rw-r--r-- | activity.py | 3 | ||||
-rw-r--r-- | atoidejouer/story/keys.py | 53 | ||||
-rw-r--r-- | atoidejouer/ui/notebook.py | 16 | ||||
-rw-r--r-- | atoidejouer/ui/panel.py | 346 | ||||
-rw-r--r-- | atoidejouer/ui/preview.py | 12 | ||||
-rw-r--r-- | atoidejouer/ui/screens.py | 35 | ||||
-rw-r--r-- | atoidejouer/ui/timeline.py | 29 | ||||
-rw-r--r-- | atoidejouer/ui/toolbar.py | 11 | ||||
-rw-r--r-- | static/sequences/graphic/blank | 0 | ||||
-rw-r--r-- | static/sequences/sound/blank | 0 |
10 files changed, 335 insertions, 170 deletions
diff --git a/activity.py b/activity.py index 6192958..16bc7a3 100644 --- a/activity.py +++ b/activity.py @@ -114,7 +114,8 @@ class AToiDeJouerActivity(activity.Activity): # add tool bars self.set_toolbox(_toolbox) # sequence dict and list - self.story_keys = StoryKeys() + self.graphic_keys = StoryKeys('graphics') + self.sound_keys = StoryKeys('sounds') # keep thread & screen self._thread = None self._screens = dict() diff --git a/atoidejouer/story/keys.py b/atoidejouer/story/keys.py index 91d5b9c..bb3d7d8 100644 --- a/atoidejouer/story/keys.py +++ b/atoidejouer/story/keys.py @@ -20,7 +20,9 @@ logger = logging.getLogger('atoidejouer') class StoryKeys(object): - def __init__(self): + def __init__(self, type_): + # keep type + self._type = type_ # .. self.__names = list() self.__codes = { @@ -49,6 +51,7 @@ class StoryKeys(object): for _i, _f in enumerate(filenames): _seq_dict[_f] = { '__align': [0, 0], + '__duration': 0, '__file_type': None, '__key_type': None } @@ -198,6 +201,7 @@ class StoryKeys(object): if dict_ is None: dict_ = { '__align': [0, 0], + '__duration': 0, '__file_type': None, '__key_type': None } @@ -303,6 +307,41 @@ class StoryKeys(object): # return current pos return _x, _y + def set_duration(self, sequence_name, frame, filename, duration): + # .. get the dict + _f_dict = self.get_filename_dict(sequence_name, frame, filename) + # little check + if _f_dict is None: + return + else: + self.__keys[sequence_name][frame][filename]['__duration'] = duration + + def get_duration(self, sequence_name, frame, filename): + # .. get the dict + _f_dict = self.get_filename_dict(sequence_name, frame, filename) + # little check + if _f_dict is None: + return 0 + else: + # ensure default + if '__duration' in _f_dict: + return _f_dict['__duration'] + else: + # set default + _f_dict['__duration'] = 0 + # return default + return 0 + + def inc_duration(self, sequence_name, frame, filename, value): + # get duration first + _d = self.get_duration(sequence_name, frame, filename) + # inc + _d += value + # update + self.set_duration(sequence_name, frame, filename, _d) + # return current pos + return _d + def set_current(self, sequence_name, frame, filename, file_type='lib', key_type='key'): """ @@ -348,7 +387,7 @@ class StoryKeys(object): # default return None, None, None - def refresh(self, sequence_name): + def _refresh_graphic_keys(self, sequence_name): # get max frame _max_frame = self.get_max_frame() # little check @@ -364,6 +403,7 @@ class StoryKeys(object): # invalidate previous self.__keys[sequence_name][_frame][_filename] = { '__align': [0, 0], + '__duration': 0, '__file_type': None, '__key_type': None } @@ -416,3 +456,12 @@ class StoryKeys(object): self.set_align(sequence_name, _i, _f, (_new_x, _new_y)) else: pass + + def _refresh_sound_keys(self, sequence_name): + pass + + def refresh(self, sequence_name): + if self._type == 'graphics': + self._refresh_graphic_keys(sequence_name) + else: + self._refresh_sound_keys(sequence_name) diff --git a/atoidejouer/ui/notebook.py b/atoidejouer/ui/notebook.py index a8badc1..cb32eb4 100644 --- a/atoidejouer/ui/notebook.py +++ b/atoidejouer/ui/notebook.py @@ -51,7 +51,7 @@ def _cb_cursor_changed(treeview, notebook, type_): # get iter _iter = _model.get_iter(_path) # update current - if type_ in ['graphic', 'sound']: + if type_ in ['graphics', 'sounds']: # get value _filename = _model.get_value(_iter, 1) # udpate preview @@ -114,9 +114,9 @@ class ResourceNotebook(gtk.Frame): def _get_sequence_first_graphic(self, sequence_path): # .. _filename = self._get_sequence_first_graphic_name(sequence_path) - if self._type == 'graphic': + if self._type == 'graphics': _path = storage.get_image_path(_filename) - elif self._type == 'sound': + elif self._type == 'sounds': _path = storage.get_image_path('sound', dir_='data') else: _path = storage.get_image_path('blank', dir_='data') @@ -255,7 +255,7 @@ class ResourceNotebook(gtk.Frame): else: self._store_journal.clear() # app to get the journal entries - _app_name = 'paint' if self._type=='graphic' else 'record' + _app_name = 'paint' if self._type=='graphics' else 'record' # update store for _i in storage.list_info_from_journal(_app_name): # prepare preview @@ -288,9 +288,9 @@ class ResourceNotebook(gtk.Frame): # update store if type_ == 'sequence': _store = self._get_store_sequence() - elif type_ == 'graphic': + elif type_ == 'graphics': _store = self._get_store_graphic() - elif type_ == 'sound': + elif type_ == 'sounds': _store = self._get_store_sound() elif type_ == 'journal': _store = self._get_store_journal() @@ -319,7 +319,7 @@ class ResourceNotebook(gtk.Frame): # ... _label1.show() # specific tab name - _tab_name = _('Library Graphics') if self._type=='graphic'\ + _tab_name = _('Library Graphics') if self._type=='graphics'\ else _('Library Sounds') # get list 2 _list2 = self._get_treeview(type_=self._type) @@ -330,7 +330,7 @@ class ResourceNotebook(gtk.Frame): # ... _label2.show() # specific tab name - _tab_name = _('Journal Graphics') if self._type=='graphic'\ + _tab_name = _('Journal Graphics') if self._type=='graphics'\ else _('Journal Sounds') # get list 2 _list3 = self._get_treeview(type_='journal') diff --git a/atoidejouer/ui/panel.py b/atoidejouer/ui/panel.py index 4e01136..4b20247 100644 --- a/atoidejouer/ui/panel.py +++ b/atoidejouer/ui/panel.py @@ -18,12 +18,12 @@ from atoidejouer.tools import image, ui logger = logging.getLogger('atoidejouer') -def _get_sequence_graphics(sequence_path): +def _get_sequence_items(sequence_path): _f = open(sequence_path) - _gfx = _f.readlines() + _items = _f.readlines() _f.close() # .. - return [_n.strip() for _n in _gfx] + return [_n.strip() for _n in _items] def _get_filename(panel): @@ -44,7 +44,7 @@ def _on_graphic_combo_changed(combobox, panel): # get filename _filename = _get_filename(panel) # get current - _current, _f_type, _k_type = _activity.story_keys.get_current( + _current, _f_type, _k_type = panel.story_keys.get_current( panel._sequence_name, _activity._thread._time) # do nothing if _filename is None\ @@ -54,29 +54,33 @@ def _on_graphic_combo_changed(combobox, panel): # ... elif _filename == '': # remove key - _activity.story_keys.remove_filename(panel._sequence_name, + panel.story_keys.remove_filename(panel._sequence_name, _activity._thread._time, _current) # reset current - _activity.story_keys.set_current(panel._sequence_name, + panel.story_keys.set_current(panel._sequence_name, _activity._thread._time, None, file_type=None, key_type=None) elif _current != _filename: # update keys - _activity.story_keys.set_current(panel._sequence_name, + panel.story_keys.set_current(panel._sequence_name, _activity._thread._time, _filename, file_type='lib', key_type='key') - # get previous align - _prev_align = _activity.story_keys.get_previous_align( - panel._sequence_name, _activity._thread._time, _filename) - # set align - _activity.story_keys.set_align(panel._sequence_name, - _activity._thread._time, _filename, _prev_align) + # .. + if panel.screen.toolbar.name == 'graphics': + # get previous align + _prev_align = panel.story_keys.get_previous_align( + panel._sequence_name, _activity._thread._time, _filename) + # set align + panel.story_keys.set_align(panel._sequence_name, + _activity._thread._time, _filename, _prev_align) + else: + pass # ... - _activity.story_keys.refresh(panel._sequence_name) + panel.story_keys.refresh(panel._sequence_name) # refresh timeline panel.screen.timeline.refresh_sequence() # ... - _activity.story_keys.ask_clear() + panel.story_keys.ask_clear() # refresh scene panel.screen.scene.refresh() @@ -87,7 +91,7 @@ def _on_position_clicked(widget, panel, move, value): # get filename _filename = _get_filename(panel) # get current - _current, _f_type, _k_type = _activity.story_keys.get_current( + _current, _f_type, _k_type = panel.story_keys.get_current( panel._sequence_name, _activity._thread._time) # do nothing if _filename is None\ @@ -96,17 +100,17 @@ def _on_position_clicked(widget, panel, move, value): pass else: # update keys - _x, _y = _activity.story_keys.inc_position(panel._sequence_name, + _x, _y = panel.story_keys.inc_position(panel._sequence_name, _activity._thread._time, _filename, move, value) # ... - _activity.story_keys.refresh(panel._sequence_name) + 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)) # ... - _activity.story_keys.ask_clear() + panel.story_keys.ask_clear() # refresh scene panel.screen.scene.refresh() @@ -115,8 +119,8 @@ def _on_layout_clicked(widget, panel, move): # shortcut _activity = panel.screen.toolbar.activity # get current layout - _layout = _activity.story_keys.get_layout(panel._sequence_name) - _max_layout = _activity.story_keys.get_max_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 @@ -133,26 +137,26 @@ def _on_layout_clicked(widget, panel, move): # ?? return # .. - _activity.story_keys.set_layout(panel._sequence_name, _layout) + panel.story_keys.set_layout(panel._sequence_name, _layout) # ... - _activity.story_keys.refresh(panel._sequence_name) + panel.story_keys.refresh(panel._sequence_name) # refresh timeline panel.screen.timeline.refresh_sequence() # update entry panel.entry_layout.set_text(str(_layout)) # ... - _activity.story_keys.ask_clear() + panel.story_keys.ask_clear() # refresh scene panel.screen.scene.refresh() # reorder timeline panel.screen.timeline.reorder() -def _on_time_clicked(widget, panel, direction): +def _on_time_clicked(widget, panel, value): # shortcut _activity = panel.screen.toolbar.activity # get current - _current, _f_type, _k_type = _activity.story_keys.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: @@ -164,28 +168,19 @@ def _on_time_clicked(widget, panel, direction): else: _previous_frame = _activity._thread._time # time factory - if direction == 'go_right': - _new_frame = _previous_frame + 10 - elif direction == 'go_right_small': - _new_frame = _previous_frame + 1 - elif direction == 'go_left_small' and _previous_frame > 0: - _new_frame = _previous_frame - 1 - elif direction == 'go_left' and _previous_frame > 9: - _new_frame = _previous_frame - 10 - else: - # ?? - return + _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 - _activity.story_keys.set_frame(panel._sequence_name, _previous_frame, + panel.story_keys.set_frame(panel._sequence_name, _previous_frame, _new_frame) # ... - _activity.story_keys.refresh(panel._sequence_name) + panel.story_keys.refresh(panel._sequence_name) # refresh timeline panel.screen.timeline.refresh_sequence() # get new max - _max = _activity.story_keys.get_max_frame() + _max = panel.story_keys.get_max_frame() # set activity new number of keys _activity.set_number_of_keys(_max + 1) # update thread time @@ -198,13 +193,13 @@ def _on_remove_sequence_clicked(widget, panel): # shortcut _activity = panel.screen.toolbar.activity # clear keys - _activity.story_keys.remove_sequence(panel._sequence_name) + panel.story_keys.remove_sequence(panel._sequence_name) # reorder timeline panel.screen.timeline.remove_sequence(panel._sequence_name) # .. panel.clear() # ... - _activity.story_keys.ask_clear() + panel.story_keys.ask_clear() # refresh scene panel.screen.scene.refresh() @@ -213,7 +208,7 @@ def _on_remove_key_clicked(widget, panel): # shortcut _activity = panel.screen.toolbar.activity # get current - _current, _f_type, _k_type = _activity.story_keys.get_current( + _current, _f_type, _k_type = panel.story_keys.get_current( panel._sequence_name, _activity._thread._time) # .. if _k_type is None: @@ -221,24 +216,55 @@ def _on_remove_key_clicked(widget, panel): elif _k_type != 'key': return # remove key - _activity.story_keys.remove_filename(panel._sequence_name, + panel.story_keys.remove_filename(panel._sequence_name, _activity._thread._time, _current) # reset current - _activity.story_keys.set_current(panel._sequence_name, + panel.story_keys.set_current(panel._sequence_name, _activity._thread._time, None, file_type=None, key_type=None) # ... - _activity.story_keys.refresh(panel._sequence_name) + panel.story_keys.refresh(panel._sequence_name) # refresh timeline panel.screen.timeline.refresh_sequence() # ... - _activity.story_keys.ask_clear() + 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_x.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)) + # ... + panel.story_keys.ask_clear() + # refresh scene + panel.screen.scene.refresh() + + class Panel(gtk.Frame): def __init__(self, screen): @@ -247,6 +273,11 @@ class Panel(gtk.Frame): 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 # ... self.set_size_request(298, screen.scene._screen_height) # do show @@ -264,11 +295,39 @@ class Panel(gtk.Frame): # add it to the panel self.add(self.main_box) + def _init_sequence_box(self): + # update store + self.update_store() + # init combo + self.combo_box = gtk.ComboBox(model=self._store) + # 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, path='graphics'): + # .. + _graphic_dir = os.path.join(activity.get_bundle_path(), 'static', path) + # .. + _graphic_path = os.path.join(_graphic_dir, '%s.png' % graphic_name) + # .. + return image.get_pixbuf(_graphic_path, 48, 36), _graphic_path + def update_store(self): # init store if self._store is None: @@ -278,6 +337,9 @@ class Panel(gtk.Frame): 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 @@ -288,17 +350,39 @@ class Panel(gtk.Frame): self.update_store() else: pass + # prepare dir path + _seq_path = os.path.join(activity.get_bundle_path(), 'static', + '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 = _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 self.time_entry.set_text( '%1d:%02d' % divmod(_activity._thread._time, 60)) + # .. + return _seq_path, _current - def __get_time_button(self, name): + def __get_time_button(self, name, value): # init button _button = ui.get_button(stock_id=name) # set cb - _button.connect('clicked', _on_time_clicked, self, name) + _button.connect('clicked', _on_time_clicked, self, value) # .. return _button @@ -315,9 +399,9 @@ class Panel(gtk.Frame): _time_box.set_border_width(4) _time_box.show() # before .. - _time_box.pack_start(self.__get_time_button('go_left'), + _time_box.pack_start(self.__get_time_button('go_left', -10), expand=False, fill=True) - _time_box.pack_start(self.__get_time_button('go_left_small'), + _time_box.pack_start(self.__get_time_button('go_left_small', -1), expand=False, fill=True) # entry self.time_entry = gtk.Entry() @@ -330,9 +414,9 @@ class Panel(gtk.Frame): # 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'), + _time_box.pack_start(self.__get_time_button('go_right_small', 1), expand=False, fill=True) - _time_box.pack_start(self.__get_time_button('go_right'), + _time_box.pack_start(self.__get_time_button('go_right', 10), expand=False, fill=True) # do add _frame_time.add(_time_box) @@ -394,64 +478,41 @@ class PanelGraphics(Panel): self.entry_y.set_text('') def refresh(self, sequence_name=None, update_store=False): - # prepare dir path - _seq_path = os.path.join(activity.get_bundle_path(), 'static', - 'sequences', 'graphic', '%s.seq' % sequence_name) + # 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): - # update parent - Panel.refresh(self, sequence_name=sequence_name, - update_store=update_store) - # shortcut - _activity = self.screen.toolbar.activity - # .. - _filename, _f_type, _k_type = _activity.story_keys.get_current( - self._sequence_name, _activity._thread._time) - # get graphic names - _graphics = _get_sequence_graphics(_seq_path) - # get combo box active - if _filename in _graphics: - _active = _graphics.index(_filename) + 1 - else: - _active = 0 - # update combobox - self.combo_box.set_active(_active) # get current layout - _layout = _activity.story_keys.get_layout(self._sequence_name) + _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 = _activity.story_keys.get_align(self._sequence_name, - _activity._thread._time, _filename) + _x, _y = self.story_keys.get_align(self._sequence_name, + _activity._thread._time, _current) # update panel x y self.entry_x.set_text(str(_x)) self.entry_y.set_text(str(-_y)) else: pass - def _get_pixbuf(self, graphic_name, path='graphics'): - # .. - _graphic_dir = os.path.join(activity.get_bundle_path(), 'static', path) - # .. - _graphic_path = os.path.join(_graphic_dir, '%s.png' % graphic_name) - # .. - return image.get_pixbuf(_graphic_path, 48, 36), _graphic_path - def update_store(self): # init parent Panel.update_store(self) # prepare dir path _seq_path = os.path.join(activity.get_bundle_path(), 'static', - 'sequences', 'graphic', '%s.seq' % self._sequence_name) + 'sequences', 'graphics', '%s.seq' % self._sequence_name) # little check if os.path.exists(_seq_path): # get graphic names - _graphics = _get_sequence_graphics(_seq_path) + _items = _get_sequence_items(_seq_path) # add dummy row - _dummy_pix, _path = self._get_pixbuf('blank', path='icons') + _dummy_pix, _path = self._get_pixbuf('blank', path='data') self._store.append([_dummy_pix, '', None]) # for each graphics - for _filename in _graphics: + for _filename in _items: # prepare pixbuf _pixbuf, _path = self._get_pixbuf(_filename) # do update @@ -461,24 +522,8 @@ class PanelGraphics(Panel): self._store.clear() def _init_sequence_box(self): - # update store - self.update_store() - # init combo - self.combo_box = gtk.ComboBox(model=self._store) - # 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) + Panel._init_sequence_box(self) # set callback self.combo_box.connect('changed', _on_graphic_combo_changed, self) @@ -605,51 +650,87 @@ class PanelSounds(Panel): def __init__(self, screen): # init parent Panel.__init__(self, screen) + # init commonf fields + self.entry_duration = None # add specific self._add_frame_sound() # .. common self.add_frame_time() self.add_frame_remove() + def clear(self): + # clear parent + Panel.clear(self) + # .. + self.entry_duration.set_text('') + 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_bundle_path(), 'static', + 'sequences', 'sounds', '%s.seq' % self._sequence_name) + # little check + if os.path.exists(_seq_path): + # get graphic names + _items = _get_sequence_items(_seq_path) + # add dummy row + _dummy_pix, _path = self._get_pixbuf('blank', path='data') + self._store.append([_dummy_pix, '', None]) + # for each graphics + for _filename in _items: + # prepare pixbuf + _pixbuf, _path = self._get_pixbuf('sound', path='data') + # do update + self._store.append([_pixbuf, _filename, _path]) + # not exist .. clear + else: + self._store.clear() + def _init_sequence_box(self): - # init combobox - _cbox = gtk.combo_box_new_text() - # add DUMMY content - for _i in range(10): - _cbox.append_text(str(_i)) - # return it - return _cbox + # .. + Panel._init_sequence_box(self) + # set callback + self.combo_box.connect('changed', _on_graphic_combo_changed, self) + + def __get_duration_button(self, name, value): + # init button + _button = ui.get_button(stock_id=name) + # 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(ui.get_button(stock_id='less'), + _duration_box.pack_start(self.__get_duration_button('less', -10), expand=False, fill=True) - _duration_box.pack_start(ui.get_button(stock_id='less_small'), + _duration_box.pack_start(self.__get_duration_button('less_small', -1), expand=False, fill=True) # entry - _entry = gtk.Entry() + self.entry_duration = gtk.Entry() # show - _entry.show() + self.entry_duration.show() # set value - should be a string - _entry.set_text("") # self._get_time(0) - _entry.set_alignment(1) - _entry.set_property('editable', False) - _entry.set_size_request(64, -1) + 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(_entry, expand=False, fill=True) + _duration_box.pack_start(self.entry_duration, expand=False, fill=True) # .. up - _duration_box.pack_start(ui.get_button(stock_id='more_small'), + _duration_box.pack_start(self.__get_duration_button('more_small', 1), expand=False, fill=True) - _duration_box.pack_start(ui.get_button(stock_id='more'), + _duration_box.pack_start(self.__get_duration_button('more', 10), expand=False, fill=True) # return it return _duration_box @@ -707,8 +788,25 @@ class PanelSounds(Panel): # do add _frame_sound.add(_in_vbox) # add row sequence - _in_vbox.pack_start(self._init_sequence_box(), expand=False, fill=True) + 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 _in_vbox.pack_start(self._get_loop_box(), 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 + # 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(str(_d)) + else: + pass diff --git a/atoidejouer/ui/preview.py b/atoidejouer/ui/preview.py index 2762073..094a9c1 100644 --- a/atoidejouer/ui/preview.py +++ b/atoidejouer/ui/preview.py @@ -43,7 +43,7 @@ class SequencePreview(gtk.Frame): # keep type self._type = type_ # specific frame name - _frame_name = _('Sequence Graphics') if self._type=='graphic'\ + _frame_name = _('Sequence Graphics') if self._type=='graphics'\ else _('Sequence Sounds') # init parent gtk.Frame.__init__(self, _frame_name) @@ -176,9 +176,9 @@ class SequencePreview(gtk.Frame): # .. add _button.add(_image) # get graphics path - if self._type == 'graphic': + if self._type == 'graphics': _path = storage.get_image_path(filename) - elif self._type == 'sound': + elif self._type == 'sounds': _path = storage.get_image_path('sound', dir_='data') # ?? do nothing - TODO maybe log something else: @@ -227,9 +227,9 @@ class ItemPreview(gtk.VBox): # .. _ebox_image.add(_image) # get graphics path - if self._type == 'graphic': + if self._type == 'graphics': _path = storage.get_image_path(filename) - elif self._type == 'sound': + elif self._type == 'sounds': _path = storage.get_image_path('sound', dir_='data') else: _path = storage.get_image_path('blank', dir_='data') @@ -271,7 +271,7 @@ class ImagePreview(ItemPreview): def __init__(self, screen): # init parent - ItemPreview.__init__(self, screen, type_='graphic') + ItemPreview.__init__(self, screen, type_='graphics') def _on_stop(widget, sound_view, filename): diff --git a/atoidejouer/ui/screens.py b/atoidejouer/ui/screens.py index c6b4ffb..f6d0263 100644 --- a/atoidejouer/ui/screens.py +++ b/atoidejouer/ui/screens.py @@ -43,6 +43,7 @@ class ScreenStory(gtk.Fixed): gtk.Fixed.__init__(self) # keep toolbar self.toolbar = toolbar + # .. self._set_canvas = set_canvas self._image_cb = image_cb # set has window for bg color issue @@ -70,6 +71,13 @@ class ScreenStory(gtk.Fixed): # and show self._show() + def _get_keys(self, type_): + # .. + if type_ == 'graphics': + return self.toolbar.activity.graphic_keys + else: + return self.toolbar.activity.sound_keys + def _hide_all(self): # show dummy self.__dummy.show() @@ -100,10 +108,6 @@ class ScreenStory(gtk.Fixed): self._screen_height = gtk.gdk.screen_height() - self._height_offset self._screen_width = gtk.gdk.screen_width() - self._width_offset - def _get_keys(self): - # global value - return self.toolbar.activity.story_keys - def _clear_graphic(self, filecode): # ... if filecode in self.__graphics: @@ -124,12 +128,12 @@ class ScreenStory(gtk.Fixed): def _check_clear(self): # need clear - if self._get_keys().get_clear(self.toolbar.name) is True: + if self._get_keys('graphics').get_clear(self.toolbar.name) is True: # destroy all for _k in self.__graphics.keys()[:]: self._clear_graphic(_k) # done - self._get_keys().set_clear(self.toolbar.name, False) + self._get_keys('graphics').set_clear(self.toolbar.name, False) else: pass @@ -150,7 +154,7 @@ class ScreenStory(gtk.Fixed): else: pass # for each images - for _n in self._get_keys().get_names(): + for _n in self._get_keys('graphics').get_names(): # do move self.__refresh_image(_n, _frame) # draw mask @@ -218,10 +222,10 @@ class ScreenStory(gtk.Fixed): def __refresh_image(self, sequence_name, frame): # get sequence file codes - _seq_codes = self._get_keys().get_sequence_codes( + _seq_codes = self._get_keys('graphics').get_sequence_codes( self.toolbar.name, sequence_name) # get sequence filename - _current, _f_type, _k_type = self._get_keys().get_current( + _current, _f_type, _k_type = self._get_keys('graphics').get_current( sequence_name, frame) # .. self.__hide_previous_images(_seq_codes, _current) @@ -242,7 +246,8 @@ class ScreenStory(gtk.Fixed): # .. _image, _filecode = self._add_image(sequence_name, _current) # get align - _align = self._get_keys().get_align(sequence_name, frame, _current) + _align = self._get_keys('graphics').get_align(sequence_name, frame, + _current) # redraw all or move only if self._fullscreen_changed is True: # remove previous image @@ -278,10 +283,10 @@ class ScreenStory(gtk.Fixed): else: pass # update story key object - self._get_keys().set_code(self.toolbar.name, sequence_name, + self._get_keys('graphics').set_code(self.toolbar.name, sequence_name, current, filecode) # init positions - self._get_keys().set_align(self.toolbar.name, sequence_name, + self._get_keys('graphics').set_align(self.toolbar.name, sequence_name, current, align) # show _image.show() @@ -429,7 +434,7 @@ class ScreenBrowser(gtk.HBox): # add the box self.pack_start(_vbox, expand=True, fill=True) # init frame - self.item_preview = ImagePreview(self) if self._type == 'graphic'\ + self.item_preview = ImagePreview(self) if self._type == 'graphics'\ else SoundPreview(self) # add it _vbox.pack_start(self.item_preview, expand=True, fill=True) @@ -455,11 +460,11 @@ class ScreenBrowserGraphics(ScreenBrowser): def __init__(self, toolbar): # init parent - ScreenBrowser.__init__(self, toolbar, 'graphic') + ScreenBrowser.__init__(self, toolbar, 'graphics') class ScreenBrowserSounds(ScreenBrowser): def __init__(self, toolbar): # init parent - ScreenBrowser.__init__(self, toolbar, 'sound') + ScreenBrowser.__init__(self, toolbar, 'sounds') diff --git a/atoidejouer/ui/timeline.py b/atoidejouer/ui/timeline.py index de26b42..74636b3 100644 --- a/atoidejouer/ui/timeline.py +++ b/atoidejouer/ui/timeline.py @@ -22,7 +22,7 @@ def _on_title_clicked(widget, timeline, sequence_name): def _on_key_clicked(widget, timeline, sequence_name, frame): # shortcut - timeline.screen.toolbar.activity.story_keys.ask_clear() + timeline.story_keys.ask_clear() # update time and scene timeline.screen.toolbar.activity._thread.set_time(time_=frame) # do timeline update @@ -54,6 +54,11 @@ class Timeline(gtk.Frame): # .. self.add(self.scrolled_window) # .. + if screen.toolbar.name == 'graphics': + self.story_keys = self.screen.toolbar.activity.graphic_keys + else: + self.story_keys = self.screen.toolbar.activity.sound_keys + # .. self._main_hbox = None self._titles_box = None self._keys_box = None @@ -248,10 +253,8 @@ class Timeline(gtk.Frame): continue def reorder(self): - # shortcut - _keys = self.screen.toolbar.activity.story_keys # get new order - _names = [_n for _n in _keys.get_names()] + _names = [_n for _n in self.story_keys.get_names()] # ... _t_children = self._titles_box.children() _k_children = self._keys_box.children() @@ -274,7 +277,7 @@ class Timeline(gtk.Frame): # .. self.__init_rows() # .. - _seq_names = self.screen.toolbar.activity.story_keys.get_names() + _seq_names = self.story_keys.get_names() # restore all for _n in _seq_names: # first add title @@ -301,16 +304,20 @@ class Timeline(gtk.Frame): # ... _t_children = self._titles_box.children() _k_children = self._keys_box.children() - # shortcut - _activity = self.screen.toolbar.activity + # DEBUG + logger.debug('[timeline] refresh_sequence - ...') + # DEBUG # ... for _i, _r in enumerate(_t_children): # title row | row - eventbox - button - label _label = _r.children()[0].children()[0].children()[0].get_label() + # DEBUG + logger.debug('[timeline] refresh_sequence - _label: %s' % _label) + # DEBUG # ... for _frame, _c_key in enumerate(_k_children[_i].children()[0]): # ... - _current, _f_type, _k_type = _activity.story_keys.get_current( + _current, _f_type, _k_type = self.story_keys.get_current( _label, _frame) # get button _button = _c_key.children()[0] @@ -327,12 +334,12 @@ class Timeline(gtk.Frame): def __reset(self): # .. - _seq_names = self.screen.toolbar.activity.story_keys.get_names() + _seq_names = self.story_keys.get_names() # remove all for _n in _seq_names: self.remove_sequence(_n) - # .. - _seq_names = self.screen.toolbar.activity.story_keys.get_names() + # ?? + _seq_names = self.story_keys.get_names() # restore all for _n in _seq_names: # first add title diff --git a/atoidejouer/ui/toolbar.py b/atoidejouer/ui/toolbar.py index 60fd1a2..ffabd79 100644 --- a/atoidejouer/ui/toolbar.py +++ b/atoidejouer/ui/toolbar.py @@ -254,7 +254,7 @@ def _cb_import(widget, toolbar): # and back _cb_back(widget, toolbar) # add sequence to the story keys - if toolbar.activity.story_keys.add_sequence(_sequence_name, _filenames): + if toolbar.story_keys.add_sequence(_sequence_name, _filenames): # get screen now _screen = toolbar.activity.get_current_screen() # add sequence to the timeline @@ -469,16 +469,21 @@ class Toolbar(gtk.Toolbar): def __init__(self, activity, name='player'): # init parent gtk.Toolbar.__init__(self) + # keep the name + self.set_name(name) # keep activity self.activity = activity + # .. + if self.name == 'graphics': + self.story_keys = self.activity.graphic_keys + else: + self.story_keys = self.activity.sound_keys # adjustment self._adjustment = None self._number_of_keys = self.activity._number_of_keys # keep components self._sequence_entry = None self._frame_entry = None - # keep the name - self.set_name(name) # init widget dict self._button_dict = dict() # init buttons diff --git a/static/sequences/graphic/blank b/static/sequences/graphic/blank deleted file mode 100644 index e69de29..0000000 --- a/static/sequences/graphic/blank +++ /dev/null diff --git a/static/sequences/sound/blank b/static/sequences/sound/blank deleted file mode 100644 index e69de29..0000000 --- a/static/sequences/sound/blank +++ /dev/null |