diff options
Diffstat (limited to 'atoideweb/ui/toolbar.py')
-rw-r--r-- | atoideweb/ui/toolbar.py | 595 |
1 files changed, 28 insertions, 567 deletions
diff --git a/atoideweb/ui/toolbar.py b/atoideweb/ui/toolbar.py index a2da877..0c0bc03 100644 --- a/atoideweb/ui/toolbar.py +++ b/atoideweb/ui/toolbar.py @@ -1,6 +1,6 @@ # python import -import logging, os, re, shutil +import logging # ... from functools import partial from gettext import gettext as _ @@ -14,490 +14,59 @@ from sugar.activity import activity # sugar import from sugar.graphics.toolbutton import ToolButton -# atoidejouer import -from atoideweb.tools import config, storage -# from atoidejouer.ui import screens +# atoideweb import +from atoideweb.tools import config +# from atoideweb.ui import screens # get application logger -logger = logging.getLogger('atoidejouer') +logger = logging.getLogger('atoideweb') -def _clean_dir(dir_path): - # little check first - if os.path.exists(dir_path): - pass - # ??? - else: - return - # .. - for _filename in os.listdir(dir_path): - # .. - _path = os.path.join(dir_path, _filename) - # little check - if os.path.isfile(_path): - os.remove(_path) - elif os.path.isdir(_path): - _clean_dir(_path) - else: - # ERRROR - logger.error('[toolbar] _clean_dir - path error: %s' % dir_path) - # remove dir at the end - os.removedirs(dir_path) - - -def _cb_seq_new(widget, toolbar): - # get screen - _screen = toolbar.activity.get_current_screen() - # remove items from preview boxes - _screen.sequence_preview.clear() - # .. - _screen.notebook.current_sequence = None - # clear entry - toolbar._sequence_entry.set_text("") - - -NON_ALPHA_NUM_PATTERN = re.compile('[\W_]+') - - -def _cb_seq_name(entry): - # ensure good string - _str = NON_ALPHA_NUM_PATTERN.sub('-', entry.get_text()) - # update entry - entry.set_text(_str) - - -def _cb_seq_remove(widget, toolbar): - # get sequence name - _name = toolbar._sequence_entry.get_text() - # get screen - _screen = toolbar.activity.get_current_screen() - # type shortcut 'graphic' or 'sound' - _type = _screen.notebook._type - # little check - if _name.strip() == '': - # do nothing - pass - else: - # get sequence path - _seq_path = storage.get_sequence_path(_type, _name) - # remove dir - if os.path.exists(_seq_path): - # do clean - os.remove(_seq_path) - # and clear all at the end - _screen.sequence_preview.clear() - # clear entry - toolbar._sequence_entry.set_text("") - # update notebook - _screen.notebook._get_store_sequence() - # nothing to do - else: - pass - - -def _cb_seq_save(widget, toolbar, remove=False): - # get sequence name - _name = toolbar._sequence_entry.get_text() - # get screen - _screen = toolbar.activity.get_current_screen() - # get nb of graphics - _nb_of_items = _screen.sequence_preview.number_of_items() - # type shortcut 'graphic' or 'sound' - _type = _screen.notebook._type - # little check - if _name.strip() == '': - return - elif _nb_of_items == 0\ - and remove is True: - # get sequence path - _seq_path = storage.get_sequence_path(_type, _name) - # remove from files - os.remove(_seq_path) - # .. - _keys = toolbar.activity.graphic_keys\ - if toolbar.name == 'graphics_add'\ - else toolbar.activity.sound_keys - # remove from keys - _keys.remove_sequence(_name) - else: - # get sequence path - _seq_path = storage.get_sequence_path(_type, _name) - # open file - _file = open(_seq_path, 'wb') - # update - for _filename in _screen.sequence_preview.items: - _filename = _filename.strip() - if _filename == '': - continue - else: - _file.write('%s\n' % _filename) - _file.close() - # update notebook - _screen.notebook._get_store_sequence() - - -""" -def _show_browser(toolbar, cls): - # next screen name - _screen_name = '%s_add' % toolbar.name - # do switch - toolbar._switch(_screen_name) - # get or create screen - _screen = toolbar.activity.get_screen(_screen_name)\ - if toolbar.activity.has_screen(_screen_name)\ - else cls(toolbar) - # update activity screens - toolbar.activity.set_current_screen(_screen_name, _screen) - # do show - _screen._show() - # update entry - _seq_name = _screen.notebook.current_sequence - if _seq_name is None: - pass - else: - # .. - toolbar._sequence_entry.set_text(_seq_name) - # pos - _current_pos = _screen.sequence_preview.get_current_pos() - toolbar._frame_entry.set_text(str(_current_pos)) -""" - - -def _cb_add(widget, toolbar): - # browser screen factory - if toolbar.name == 'graphics': - # _show_browser(toolbar, screens.ScreenBrowserGraphics) - pass - # add graphic to the sequence - elif toolbar.name in ['graphics_add', 'sounds_add']: - # get current screen - _screen = toolbar.activity.get_current_screen() - # get graphic name - _item_name = _screen.notebook.current_item - # .. - _sequence_name = _screen.notebook.current_sequence - if _sequence_name is None\ - or _sequence_name.strip() == ''\ - or _item_name is None: - pass - else: - # udpate sequence preview - _screen.sequence_preview.add_item(_item_name) - # update sequence file - _cb_seq_save(widget, toolbar) - # .. - elif toolbar.name == 'sounds': - # _show_browser(toolbar, screens.ScreenBrowserSounds) - pass - # ?? - else: - # ERROR - logger.error('[toolbar] _cb_add - unknown: %s' % toolbar.name) - - -def _cb_remove(widget, toolbar): - # browser screen factory - if toolbar.name == 'graphics': - pass - # add graphic to the sequence - elif toolbar.name in ['graphics_add', 'sounds_add']: - # .. - _screen = toolbar.activity.get_current_screen() - # udpate sequence preview - _screen.sequence_preview.remove_current() - # seq name - _seq_name = _screen.notebook.current_sequence - _file_name = _screen.notebook.current_item - # .. - _keys = toolbar.activity.graphic_keys\ - if toolbar.name == 'graphics_add'\ - else toolbar.activity.sound_keys - # remove from keys - _keys.remove_filename_from_all(_seq_name, _file_name) - # update sequence file - _cb_seq_save(widget, toolbar, remove=True) - # .. - elif toolbar.name == 'sounds': - pass - # add graphic to the sequence - elif toolbar.name == 'sounds_add': - pass - # ?? - else: - # ERROR - logger.error('[toolbar] _cb_remove - name: %s' % toolbar.name) - - -def _cb_frame_after(widget, toolbar): - # get previous value - _value = int(toolbar._frame_entry.get_text()) - # inc it - _update_frame_entry(widget, toolbar, _value + 1) - # update sequence file - _cb_seq_save(widget, toolbar) - - -def _cb_frame_before(widget, toolbar): - # get previous value - _value = int(toolbar._frame_entry.get_text()) - # dec it - _update_frame_entry(widget, toolbar, _value - 1) - # update sequence file - _cb_seq_save(widget, toolbar) - - -def _update_frame_entry(entry, toolbar, value): - # get screen - _screen = toolbar.activity.get_current_screen() - # get max value - _max = _screen.sequence_preview.number_of_items() - 1 - # prepare value - _new_val = None - if value > _max: - _new_val = _max - elif value < 0: - _new_val = 0 - # reset max just in case - else: - _new_val = value - # update entry - toolbar._frame_entry.set_text(str(_new_val)) - # update sequence - _screen.sequence_preview.move_current(_new_val) - - -def _cb_open(widget, toolbar): - pass - - -def _cb_back(widget, toolbar): - # do switch - toolbar._switch(toolbar.name.replace('_add', '')) - # restore screen - toolbar.activity._change_screen(toolbar) - - -def _cb_import(widget, toolbar): - # get the current sequence name - _sequence_name = toolbar._sequence_entry.get_text() - # get filenames - _screen = toolbar.activity.get_current_screen() - # shortcut - _filenames = _screen.sequence_preview.items - # and back - _cb_back(widget, toolbar) - # add sequence to the story keys - if toolbar.story_keys.add_sequence(_sequence_name, _filenames): - # get screen now - _screen = toolbar.activity.get_current_screen() - # add sequence to the timeline - _screen.timeline.add_sequence(_sequence_name) - # .. - _screen.scene.refresh() - # already added - else: - pass - - -def _cb_play(widget, toolbar): - # replace play button - toolbar._replace_button('play', 'pause') - # trigger playing - toolbar.activity._thread.play() - - -def _cb_pause(widget, toolbar): - # replace pause button - toolbar._replace_button('pause', 'play') - # trigger pausing - toolbar.activity._thread.pause() - - -def _cb_stop(widget, toolbar): - # replace pause button - if playing - if toolbar._has_button('pause'): - # .. - toolbar._replace_button('pause', 'play') - else: - pass - # update main thread - toolbar.activity._thread.pause(stop=True) - # .. - toolbar.activity._thread.set_time() - - -def _cb_view_fullscreen(widget, toolbar): - # replace fullscreen button with return button - toolbar._replace_button('view_fullscreen', 'view_return') - # ask_clear - toolbar.story_keys.ask_clear() - # get current screen - _screen = toolbar.activity.get_current_screen() - # enbale fullscreen - _screen.set_fullscreen(True) - - -def _cb_view_return(widget, toolbar): - # remove return button with fullscreen button - toolbar._replace_button('view_return', 'view_fullscreen') - # ask_clear - toolbar.story_keys.ask_clear() - # get current screen - _screen = toolbar.activity.get_current_screen() - # disable fullscreen - _screen.set_fullscreen(False) - - -def _cb_slider(widget, event, toolbar): - """action = 'press' or 'release' - """ - # ... - if event.type == gtk.gdk.BUTTON_PRESS: - pass - elif event.type == gtk.gdk.BUTTON_RELEASE: - toolbar.activity._thread.set_time(time_=widget.get_value()) - # ?? - else: - pass - - -def _cb_format_value(widget, value, toolbar): - """Format the slider value to display - """ - # return formated value - return '%1d:%02d' % divmod(value, 60) - +def _cb_default(widget, toolbar): + # DEBUG + logger.debug('[toolbar] cb - toolbar.name: %s' % toolbar.name) BUTTONS = { - 'add' : ['list-add', _cb_add], - 'back' : ['edit-undo', _cb_back], - 'backward' : ['media-seek-backward', None], - 'forward' : ['media-seek-forward', None], - 'frame_after' : ['go-right', _cb_frame_after], - 'frame_before' : ['go-left', _cb_frame_before], - 'frame_entry' : [None, None], - 'import' : ['insert-image', _cb_import], - 'open' : ['media', _cb_open], - 'pause' : ['media-playback-pause', _cb_pause], - 'play' : ['media-playback-start', _cb_play], - 'remove' : ['list-remove', _cb_remove], + 'add' : ['list-add', _cb_default], + 'back' : ['edit-undo', _cb_default], + 'backward' : ['media-seek-backward', _cb_default], + 'forward' : ['media-seek-forward', _cb_default], + 'open' : ['media', _cb_default], + 'pause' : ['media-playback-pause', _cb_default], + 'play' : ['media-playback-start', _cb_default], + 'remove' : ['list-remove', _cb_default], 'separator' : [None, None], - 'seq_new' : ['document-generic', _cb_seq_new], - 'seq_name' : [None, _cb_seq_name], - 'seq_remove' : ['button_cancel', _cb_seq_remove], - 'seq_save' : ['dialog-apply', _cb_seq_save], - 'slider' : [None, _cb_slider], - 'stop' : ['media-playback-stop', _cb_stop], - 'view_fullscreen' : ['view-fullscreen', _cb_view_fullscreen], - 'view_return' : ['view-return', _cb_view_return], + 'stop' : ['media-playback-stop', _cb_default], } TOOLBARS = { - 'graphics' : [ - ['stop', 'play', 'slider', # 'backward', 'forward' - 'separator', - 'add'], - [] - ], - 'graphics_add' : [ - ['seq_new', 'seq_name', 'seq_save', 'seq_remove', - 'separator', - 'add', 'remove', - 'separator', - 'frame_before', 'frame_entry', 'frame_after'], - ['import', 'back'] - ], - 'sounds' : [ - ['stop', 'play', 'slider', # 'backward', 'forward' + 'eating' : [ + ['stop', 'play', 'slider', 'separator', 'add'], [] ], - 'sounds_add' : [ - ['seq_new', 'seq_name', 'seq_save', 'seq_remove', - 'separator', - 'add', 'remove', - 'separator', - 'frame_before', 'frame_entry', 'frame_after'], - ['import', 'back'] - ], - 'story' : [ - ['stop', 'play', 'slider', # 'backward', 'forward' - 'separator', - 'view_fullscreen'], + 'spare-time' : [ + ['stop', 'play',], [] ], } TITLES = { - 'graphics' : { + 'eating' : { 'toolbox': _('Graphic'), 'buttons': { - # 'backward': _('Seek Backward'), - # 'forward': _('Seek Forward'), - 'pause': _('Pause Story'), - 'play': _('Play Story'), - 'slider': _('Progress Bar'), - 'stop': _('Stop Story'), - 'add': _('Add Graphic'), - } - }, - 'graphics_add' : { - 'toolbox': None, - 'buttons': { - 'add': _('Add Graphic'), - 'back': _('Back'), - 'frame_after': _('Frame Before'), - 'frame_before': _('Frame After'), - 'frame_entry': None, - 'import': _('Import Sequence'), - 'remove': _('Remove Graphic'), - 'seq_new': _('New Sequence'), - 'seq_name': None, - 'seq_remove': _('Remove Sequence'), - 'seq_save': _('Save Sequence'), - } - }, - 'sounds' : { - 'toolbox': _('Sound'), - 'buttons': { - # 'backward': _('Seek Backward'), - # 'forward': _('Seek Forward'), - 'pause': _('Pause Story'), - 'play': _('Play Story'), + 'play': _('Play'), 'slider': _('Progress Bar'), - 'stop': _('Stop Story'), - 'add': _('Add Sound'), + 'stop': _('Stop'), + 'add': _('Add'), } }, - 'sounds_add' : { + 'spare-time' : { 'toolbox': None, 'buttons': { - 'add': _('Add Sound'), - 'back': _('Back'), - 'frame_after': _('Frame Before'), - 'frame_before': _('Frame After'), - 'frame_entry': None, - 'import': _('Import Sequence'), - 'remove': _('Remove Sound'), - 'seq_new': _('New Sound'), - 'seq_name': None, - 'seq_remove': _('Remove Sequence'), - 'seq_save': _('Save Sequence'), - } - }, - 'story' : { - 'toolbox': _('Story'), - 'buttons': { - # 'open': _('Open Story'), - # 'backward': _('Seek Backward'), - # 'forward': _('Seek Forward'), - 'pause': _('Pause Story'), - 'play': _('Play Story'), - 'slider': _('Progress Bar'), - 'stop': _('Stop Story'), - 'view_fullscreen': _('Fullscreen'), - 'view_return': _('Default Screen'), + 'play': _('Play'), + 'stop': _('Stop'), } }, } @@ -512,18 +81,8 @@ class Toolbar(gtk.Toolbar): self.set_name(name) # keep activity self.activity = activity - # .. - if self.name == 'graphics'\ - or self.name == 'story': - 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 # init widget dict self._button_dict = dict() # init buttons @@ -577,60 +136,6 @@ class Toolbar(gtk.Toolbar): # add button self._add_button(_b) - def update_slider(self, time_, pause): - # get slider - _s = self.get_slider() - # slider stuff - if _s is None: - pass - else: - _s.set_value(time_) - # update pause status - if pause is True: - self._replace_button('pause', 'play') - else: - self._replace_button('play', 'pause') - - def get_slider(self): - # little check - if 'slider' in self._button_dict: - _children = self._button_dict['slider'].get_children() - return None if len(_children) == 0 else _children[0] - else: - return None - - def play(self): - # do pause - _cb_play(None, self) - - def pause(self): - # do pause - _cb_pause(None, self) - - def refresh(self, value): - # ... - if self._number_of_keys != self.activity._number_of_keys: - # update nb of keys - self._number_of_keys = self.activity._number_of_keys - # update adjustment - if hasattr(self._adjustment, 'set_upper'): - self._adjustment.set_upper(self._number_of_keys-1) - else: - self._adjustment.upper = self._number_of_keys-1 - else: - pass - # get slider - _s = self.get_slider() - # slider stuff - if _s is None: - # just in case - value = 0 - else: - # update value - _s.set_value(int(value)) - # return _v to keep time value in thread - return value - def _on_focus(self, widget, direction): if self.name in ['graphics_add', 'sounds_add']: self._switch(self.name.replace('_add', '')) @@ -656,50 +161,6 @@ class Toolbar(gtk.Toolbar): if button_id == 'separator': _buton = gtk.SeparatorToolItem() _buton.set_draw(True) - # manage slider - elif button_id == 'slider': - # - self._adjustment = gtk.Adjustment(0, 0, self._number_of_keys-1, 1) - # .. - _hscale = gtk.HScale(self._adjustment) - _hscale.set_draw_value(True) - _hscale.set_digits(False) - _hscale.set_update_policy(gtk.UPDATE_CONTINUOUS) - # manage cb - _hscale.connect('button-release-event', _cb, self) - _hscale.connect('format-value', _cb_format_value, self) - # show - _hscale.show() - # .. - _buton = gtk.ToolItem() - _buton.set_expand(True) - _buton.add(_hscale) - elif button_id == 'seq_name': - self._sequence_entry = gtk.Entry() - # show - self._sequence_entry.show() - # .. - self._sequence_entry.connect('changed', _cb) - # .. - _buton = gtk.ToolItem() - _buton.set_expand(True) - _buton.add(self._sequence_entry) - elif button_id == 'frame_entry': - # ... - self._frame_entry = gtk.Entry() - # .. - self._frame_entry.set_editable(False) - self._frame_entry.set_width_chars(2) - self._frame_entry.set_size_request(44, -1) - # set value - self._frame_entry.set_text('0') - # center text - self._frame_entry.set_alignment(1) - # show - self._frame_entry.show() - # .. - _buton = gtk.ToolItem() - _buton.add(self._frame_entry) # standard button elif button_id in BUTTONS: # get tooltip |