diff options
Diffstat (limited to 'atoidejouer/ui/screens/story.py')
-rw-r--r-- | atoidejouer/ui/screens/story.py | 171 |
1 files changed, 44 insertions, 127 deletions
diff --git a/atoidejouer/ui/screens/story.py b/atoidejouer/ui/screens/story.py index 5c4d7b1..9086410 100644 --- a/atoidejouer/ui/screens/story.py +++ b/atoidejouer/ui/screens/story.py @@ -19,38 +19,25 @@ logger = logging.getLogger('atoidejouer') def _on_drag_finish(image, event, scene, key, image_size): # get align values - _a_x, _a_y = scene._reverse_x_y(image_size, (image.x, image.y)) - # shortcut - # story_keys = scene._get_keys('graphics') - # update keys - # story_keys.set_align(sequence_name, frame, filename, - # (_a_x, _a_y)) - # update transitions - # story_keys.refresh(sequence_name) - # story_keys.ask_clear() - # refresh scene with rounded values - scene.refresh(key=key) - # get current screen - _screen = scene.toolbar.activity.get_current_screen() - # update position in panel - if hasattr(_screen, 'panel'): - _screen.panel.refresh() - else: - pass + key.x, key.y = scene._reverse_x_y(image_size, (image.x, image.y)) + # do update + rowcount = story.DB().update(key) + # DEBUG + # logger.debug('[ui.screen.story] _on_drag_finish - key: %s' % key) + # logger.debug('[ui.screen.story] _on_drag_finish - rowcount: %s' % rowcount) + # DEBUG + # refresh + scene.toolbar.activity.get_current_screen().refresh(key=key) def _on_click(image, event, scene, key): - # get current screen - _screen = scene.toolbar.activity.get_current_screen() # remove image on right click if event.button == 3: story.DB()._del(key) - scene.refresh() - # update panel - if hasattr(_screen, 'panel'): - _screen.panel.refresh() - else: - pass + # invalidate key + key = None + # refresh + scene.toolbar.activity.get_current_screen().refresh(key=key) class ScreenStory(graphics.Scene): @@ -84,15 +71,6 @@ class ScreenStory(graphics.Scene): # 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 set_fullscreen(self, fullscreen): # update fullscreen flag self.fullscreen = fullscreen @@ -126,35 +104,18 @@ class ScreenStory(graphics.Scene): else: return False - def refresh(self, key=None): + def refresh(self): + # ensure valid screen size + self._refresh_screen_size() # get the current frame _time = 0.0 if self.toolbar.activity._thread is None\ else self.toolbar.activity._thread._time # get the current rate _rate = config.Config().get_rate_value() - # clear ?? - # self._check_clear() - # .. - self._refresh_screen_size() - # .. - _currents = list() - """ - # for each images - for _n in self._get_keys('graphics').get_names(): - if sequence_name is None\ - or sequence_name == _n: - # do move - _currents.append(self.__refresh_image(_n, _time, _rate)) - else: - # just get code - _currents.append(self._get_current_code('graphics', _n, - _time)) - """ # using DB + _currents = list() for _k in story.DB().get(story.Key(mime_type='image/png', time=_time)): - # redraw only if necessary - if key is None or key.id == _k.id: - self.__refresh_image(_k, _rate) + self.__refresh_image(_k, _rate) _currents.append(_k.id) # draw mask _currents.append(self.__refresh_default('mask')) @@ -238,10 +199,8 @@ class ScreenStory(graphics.Scene): return _a_x, _a_y def _update_x_y(self, size, align): - # .. _new_w, _new_h, _w, _h = size _x, _y = align - # if self.fullscreen is True\ or self._screen_width < 1024: _scene_with = self._screen_width @@ -301,116 +260,74 @@ class ScreenStory(graphics.Scene): if _ratio < rate: return _x, _y else: - """ - _next_x, _next_y = self._get_keys('graphics').get_next_align( - sequence_name, int(time), filename, use_transition=True) - """ - _next_key = story.Key(name=key.name, mime_type="image/png", time=(key.time+1), - layer=key.layer) + _next_key = story.Key(title=key.title, mime_type="image/png", + time=(key.time+1), layer=key.layer) _next_key = story.DB().get(_next_key) _next_x, _next_y = _next_key.x, _next_key.y _next_x = _x if _next_x is None else _x + (_next_x - _x) * _ratio _next_y = _y if _next_y is None else _y + (_next_y - _y) * _ratio return _next_x, _next_y - """ - def _get_current_code(self, type_, sequence_name, time): - # get sequence filename - _current, _f_type, _k_type = self._get_keys(type_).get_current( - sequence_name, int(time)) - # need current - if _current is None: - return None - else: - pass - # get sequence file codes - return self._get_keys(type_).get_code( - self.toolbar.name, sequence_name, _current) - """ - def __refresh_image(self, key, rate): - """ - # get sequence filename - _current, _f_type, _k_type = self._get_keys('graphics').get_current( - sequence_name, int(time)) - # need current - if _current is None: - return None - else: - pass - # get sequence file codes - _code = self._get_keys('graphics').get_code( - self.toolbar.name, sequence_name, _current) - # current file code - _code = key.random_str() if _code is None else _code - """ # get/update width and height _size = self._update_w_h(key) # get align _align = self.__get_transition_align(key, rate) # ensure current image if key.id in self.__graphics: - # .. + # DEBUG + logger.debug('[ui.screen.story] __refresh_image - key: %s' % key) + # DEBUG _image = self.__graphics[key.id] # update x, y _image.x, _image.y = self._update_x_y(_size, _align) # get z_order _image.z_order = key.layer - # disconnect - if key.id in self.__dd_signals: - _image.disconnect(self.__dd_signals[key.id]) - else: - pass # scale _new_w, _new_h, _w, _h = _size - # re-connect - _h_id = _image.connect('on-drag-finish', _on_drag_finish, self, - key, (_new_w, _new_h)) - # .. - self.__dd_signals[key.id] = _h_id - # .. + # set visibility _image.visible = True + # refresh signals + self.__update_image_signals(key, _image, (_new_w, _new_h)) else: # draggable for edit only _draggable = self._set_canvas is False\ and config.Config().use_dnd() is True - # .. _image = self.__update_drawing_area(key, _size, _align, draggable=_draggable) - # .. self.__graphics[key.id] = _image - """ - self._get_keys('graphics').set_code(self.toolbar.name, sequence_name, - _current, _code) - """ + + def __update_image_signals(self, key, image, size): + # remove existing handlers + if key.id in self.__dd_signals: + _h_id_drag, _h_id_click = self.__dd_signals[key.id] + image.disconnect(_h_id_drag) + image.disconnect(_h_id_click) + # connect + _h_id_drag = image.connect('on-drag-finish', _on_drag_finish, self, + key, size) + _h_id_click = image.connect('on-click', _on_click, self, key) + # update signal dict + self.__dd_signals[key.id] = (_h_id_drag, _h_id_click) def __update_drawing_area(self, key, size, align, draggable=False): # update x, y _x, _y = self._update_x_y(size, align) - # scale _new_w, _new_h, _w, _h = size - # .. if _w is None or _w == 0: _scale = 1 else: _scale = float(_new_w)/_w + # DEBUG + logger.debug('[ui.screen.story] __update_drawing_area - key: %s' % key) + # DEBUG # image _image = graphics.Image(key.get_path(), x=_x, y=_y, scale_x=_scale, scale_y=_scale, z_order=key.layer, draggable=draggable) - # connect drag - if self._set_canvas is True\ - or config.Config().use_dnd() is False\ - or self.toolbar.name != 'graphics': - pass - else: - _h_id = _image.connect('on-drag-finish', _on_drag_finish, self, - key, (_new_w, _new_h)) - self.__dd_signals[key.id] = _h_id - # connect on click - _image.connect('on-click', _on_click, self, key) + # refresh signals + self.__update_image_signals(key, _image, (_new_w, _new_h)) # do add self.add_child(_image) - # .. return _image """ |