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-21 12:00:32 (GMT)
committer florent <florent.pigout@gmail.com>2011-03-21 12:00:32 (GMT)
commitf45dffee8dffb0f04f750deab838451c6b470a4a (patch)
tree614b303656a9cb4dda650f94902ebdbe5c31840c
parent9b4ddead3f4dfd0b3f7fa8565ca3d4ea25907bb8 (diff)
fix errors in sound preview | manage sound duration and loop editing | some refactoring
-rw-r--r--activity.py6
-rw-r--r--atoidejouer/story/keys.py32
-rw-r--r--atoidejouer/ui/panel.py89
-rw-r--r--atoidejouer/ui/preview.py45
-rw-r--r--atoidejouer/ui/timeline.py6
-rw-r--r--static/sequences/graphics/blank0
-rw-r--r--static/sequences/sounds/blank0
7 files changed, 131 insertions, 47 deletions
diff --git a/activity.py b/activity.py
index 16bc7a3..ec4b547 100644
--- a/activity.py
+++ b/activity.py
@@ -77,6 +77,12 @@ class ThreadAnim(threading.Thread):
_s.timeline.refresh()
else:
pass
+ # update panel
+ if hasattr(_s, 'panel'):
+ # ..
+ _s.panel.refresh()
+ else:
+ pass
# update slider
_s.toolbar.refresh(self._time)
diff --git a/atoidejouer/story/keys.py b/atoidejouer/story/keys.py
index bb3d7d8..8e22a1b 100644
--- a/atoidejouer/story/keys.py
+++ b/atoidejouer/story/keys.py
@@ -52,6 +52,7 @@ class StoryKeys(object):
_seq_dict[_f] = {
'__align': [0, 0],
'__duration': 0,
+ '__loop': False,
'__file_type': None,
'__key_type': None
}
@@ -202,6 +203,7 @@ class StoryKeys(object):
dict_ = {
'__align': [0, 0],
'__duration': 0,
+ '__loop': False,
'__file_type': None,
'__key_type': None
}
@@ -337,11 +339,40 @@ class StoryKeys(object):
_d = self.get_duration(sequence_name, frame, filename)
# inc
_d += value
+ if _d < 0:
+ _d = 0
+ else:
+ pass
# update
self.set_duration(sequence_name, frame, filename, _d)
# return current pos
return _d
+ def set_loop(self, sequence_name, frame, filename, loop):
+ # .. 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]['__loop'] = loop
+
+ def get_loop(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 False
+ # ensure default
+ else:
+ if '__loop' in _f_dict:
+ return _f_dict['__loop']
+ else:
+ # set default
+ _f_dict['__loop'] = False
+ # return default
+ return False
+
def set_current(self, sequence_name, frame, filename, file_type='lib',
key_type='key'):
"""
@@ -404,6 +435,7 @@ class StoryKeys(object):
self.__keys[sequence_name][_frame][_filename] = {
'__align': [0, 0],
'__duration': 0,
+ '__loop': False,
'__file_type': None,
'__key_type': None
}
diff --git a/atoidejouer/ui/panel.py b/atoidejouer/ui/panel.py
index 4b20247..517d8ce 100644
--- a/atoidejouer/ui/panel.py
+++ b/atoidejouer/ui/panel.py
@@ -244,7 +244,7 @@ def _on_duration_clicked(widget, panel, value):
panel._sequence_name, _activity._thread._time)
# do nothing
if panel._sequence_name is None:
- panel.entry_x.set_text('')
+ panel.entry_duration.set_text('')
elif _filename is None\
or _k_type != 'key'\
or _activity._thread._pause is False:
@@ -259,10 +259,39 @@ def _on_duration_clicked(widget, panel, value):
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):
+ # get current image path
+ if toggle.get_active() is True:
+ _path = os.path.join('static', 'icons', 'repeat_grey.png')
+ else:
+ _path = os.path.join('static', 'icons', 'repeat.png')
+ # update image
+ image.set_from_file(_path)
+ # 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.ask_clear()
- # refresh scene
- panel.screen.scene.refresh()
+ panel.story_keys.refresh(panel._sequence_name)
+ # refresh timeline
+ panel.screen.timeline.refresh_sequence()
class Panel(gtk.Frame):
@@ -652,6 +681,8 @@ class PanelSounds(Panel):
Panel.__init__(self, screen)
# init commonf fields
self.entry_duration = None
+ self.toggle_loop = None
+ self.image_loop = None
# add specific
self._add_frame_sound()
# .. common
@@ -663,6 +694,7 @@ class PanelSounds(Panel):
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
@@ -735,28 +767,19 @@ class PanelSounds(Panel):
# return it
return _duration_box
- def _on_loop_click(self, toggle, event, image):
- # get current image path
- if toggle.get_active() is True:
- _path = os.path.join('static', 'icons', 'repeat.png')
- else:
- _path = os.path.join('static', 'icons', 'repeat_grey.png')
- # update image
- image.set_from_file(_path)
-
- def _get_loop_box(self):
+ def _init_loop_box(self):
# init row
_loop_box = gtk.HBox(homogeneous=False, spacing=4)
_loop_box.show()
# create image
- _image = gtk.Image()
- _image.show()
+ self.image_loop = gtk.Image()
+ self.image_loop.show()
# get img path
_path = os.path.join('static', 'icons', 'repeat.png')
- _image.set_from_file(_path)
- _image.set_size_request(48, -1)
+ self.image_loop.set_from_file(_path)
+ self.image_loop.set_size_request(48, -1)
# add image
- _loop_box.pack_start(_image, expand=False, fill=True)
+ _loop_box.pack_start(self.image_loop, expand=False, fill=True)
# create label
_label = gtk.Label(_('Repeat'))
_label.set_alignment(0, 0.5)
@@ -764,13 +787,12 @@ class PanelSounds(Panel):
# add label
_loop_box.pack_start(_label, expand=True, fill=True)
# create checkbox
- _button = gtk.ToggleButton()
- _button.show()
- _button.add(_loop_box)
+ self.toggle_loop = gtk.ToggleButton()
+ self.toggle_loop.show()
+ self.toggle_loop.add(_loop_box)
# set cb
- _button.connect('button-press-event', self._on_loop_click, _image)
- # return it
- return _button
+ self.toggle_loop.connect('toggled', _on_loop_click, self,
+ self.image_loop)
def _add_frame_sound(self):
# init frame
@@ -793,7 +815,8 @@ class PanelSounds(Panel):
# 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)
+ 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
@@ -807,6 +830,18 @@ class PanelSounds(Panel):
_d = self.story_keys.get_duration(self._sequence_name,
_activity._thread._time, _current)
# update panel x y
- self.entry_duration.set_text(str(_d))
+ 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)
+ # get current image path
+ if _l is True:
+ _path = os.path.join('static', 'icons', 'repeat_grey.png')
+ else:
+ _path = os.path.join('static', 'icons', 'repeat.png')
+ # update image
+ self.image_loop.set_from_file(_path)
else:
pass
diff --git a/atoidejouer/ui/preview.py b/atoidejouer/ui/preview.py
index 094a9c1..5f108b7 100644
--- a/atoidejouer/ui/preview.py
+++ b/atoidejouer/ui/preview.py
@@ -276,7 +276,7 @@ class ImagePreview(ItemPreview):
def _on_stop(widget, sound_view, filename):
# update playing flag
- sound_view.playing = not sound_view.playing
+ sound_view.playing = False
# thread update
sound_view._thread.pause(stop=True)
@@ -298,7 +298,6 @@ def _cb_slider(widget, event, sound_view):
if event.type == gtk.gdk.BUTTON_PRESS:
sound_view._thread._set_value = False
elif event.type == gtk.gdk.BUTTON_RELEASE:
- # toolbar.activity._thread.set_time(time_=widget.get_value())
# get time
_time = widget.get_value()
# udpate thread time
@@ -346,14 +345,19 @@ class ThreadPlayer(threading.Thread):
self._pause = True
# ..
self.sound_view.switch_button()
+ # ..
+ if self.sound_view._adjustment is None:
+ return
# reset time on stop
- if stop is True:
+ elif stop is True:
# reset time
self._time = 0
# update slider
self.sound_view._adjustment.set_value(0)
# stop player
self.sound_view.player.stop()
+ # ..
+ self.sound_view._slider.set_property('sensitive', False)
else:
# pause player
self.sound_view.player.pause()
@@ -362,7 +366,12 @@ class ThreadPlayer(threading.Thread):
self._pause = False
# pause player
self.sound_view.player.play()
+ # seek player
+ self.sound_view.player.seek(self._time)
+ # ..
self.sound_view.switch_button()
+ # ..
+ self.sound_view._slider.set_property('sensitive', True)
def kill(self):
# stop player
@@ -382,7 +391,10 @@ class ThreadPlayer(threading.Thread):
# just in case
self._time += self._rate
# ...
- if self._set_value is True:
+ if self.sound_view._adjustment is None:
+ pass
+ # ...
+ elif self._set_value is True:
self.sound_view._adjustment.set_value(self._time)
else:
pass
@@ -401,6 +413,7 @@ class SoundPreview(ItemPreview):
self.player = sound.Player()
# ..
self._adjustment = None
+ self._slider = None
self._button_play = None
self._thread = ThreadPlayer(self)
# set on destroy cb
@@ -417,7 +430,10 @@ class SoundPreview(ItemPreview):
# update image
_img.set_from_file(_path)
# update button
- self._button_play.set_image(_img)
+ if self._button_play is None:
+ pass
+ else:
+ self._button_play.set_image(_img)
def unset_item(self):
# call parent
@@ -458,18 +474,19 @@ class SoundPreview(ItemPreview):
# udpate max
self._thread.set_max(_timedelta.seconds)
# ..
- _hscale = gtk.HScale(self._adjustment)
- _hscale.set_draw_value(True)
- _hscale.set_digits(False)
- _hscale.set_update_policy(gtk.UPDATE_CONTINUOUS)
+ self._slider = gtk.HScale(self._adjustment)
+ self._slider.set_draw_value(True)
+ self._slider.set_digits(False)
+ self._slider.set_update_policy(gtk.UPDATE_CONTINUOUS)
+ self._slider.set_property('sensitive', False)
# manage cb
- _hscale.connect('button-press-event', _cb_slider, self)
- _hscale.connect('button-release-event', _cb_slider, self)
- _hscale.connect('format-value', _cb_format_value, self)
+ self._slider.connect('button-press-event', _cb_slider, self)
+ self._slider.connect('button-release-event', _cb_slider, self)
+ self._slider.connect('format-value', _cb_format_value, self)
# show
- _hscale.show()
+ self._slider.show()
# ..
- _hbox.pack_start(_hscale, expand=True, fill=True)
+ _hbox.pack_start(self._slider, expand=True, fill=True)
# ...
self.pack_start(_ebox_player, expand=False, fill=True)
diff --git a/atoidejouer/ui/timeline.py b/atoidejouer/ui/timeline.py
index 74636b3..97879f8 100644
--- a/atoidejouer/ui/timeline.py
+++ b/atoidejouer/ui/timeline.py
@@ -304,16 +304,10 @@ class Timeline(gtk.Frame):
# ...
_t_children = self._titles_box.children()
_k_children = self._keys_box.children()
- # 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]):
# ...
diff --git a/static/sequences/graphics/blank b/static/sequences/graphics/blank
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/static/sequences/graphics/blank
diff --git a/static/sequences/sounds/blank b/static/sequences/sounds/blank
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/static/sequences/sounds/blank