Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorflorent <florent.pigout@gmail.com>2011-03-20 00:08:49 (GMT)
committer florent <florent.pigout@gmail.com>2011-03-20 00:08:49 (GMT)
commit9b4ddead3f4dfd0b3f7fa8565ca3d4ea25907bb8 (patch)
treef6608e9fc504a4ae98a9bbe633d07e41d3fa6428
parent76f0fb988722469e32efcc3e605432098202a87b (diff)
add story keys object to manage sounds && start sounds editing (panel+timeline)
-rw-r--r--activity.py3
-rw-r--r--atoidejouer/story/keys.py53
-rw-r--r--atoidejouer/ui/notebook.py16
-rw-r--r--atoidejouer/ui/panel.py346
-rw-r--r--atoidejouer/ui/preview.py12
-rw-r--r--atoidejouer/ui/screens.py35
-rw-r--r--atoidejouer/ui/timeline.py29
-rw-r--r--atoidejouer/ui/toolbar.py11
-rw-r--r--static/sequences/graphic/blank0
-rw-r--r--static/sequences/sound/blank0
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