diff options
-rw-r--r-- | detailview.py | 42 | ||||
-rwxr-xr-x | journalactivity.py | 91 | ||||
-rw-r--r-- | journaltoolbox.py | 73 |
3 files changed, 98 insertions, 108 deletions
diff --git a/detailview.py b/detailview.py index 9811a5b..51e5ad6 100644 --- a/detailview.py +++ b/detailview.py @@ -30,33 +30,39 @@ from expandedentry import ExpandedEntry from keepicon import KeepIcon class DetailView(gtk.VBox): - - def __init__(self, model): + def __init__(self): gtk.VBox.__init__(self) - self._jobject = model - + self._jobject = None + self._expanded_entry = None + canvas = hippo.Canvas() self.pack_start(canvas) canvas.show() - root = hippo.CanvasBox() - root.props.background_color = style.COLOR_PANEL_GREY.get_int() - canvas.set_root(root) - - self._expanded_object = ExpandedEntry(self._jobject.object_id) - root.append(self._expanded_object, hippo.PACK_EXPAND) + self._root = hippo.CanvasBox() + self._root.props.background_color = style.COLOR_PANEL_GREY.get_int() + canvas.set_root(self._root) def _fav_icon_activated_cb(self, fav_icon): - keep = not self._expanded_object.get_keep() - self._expanded_object.set_keep(keep) + keep = not self._expanded_entry.get_keep() + self._expanded_entry.set_keep(keep) fav_icon.props.keep = keep - def refresh(self): - logging.debug('DetailView.refresh') - self._jobject = datastore.get(self._jobject.object_id) + def _update_view(self): + if self._expanded_entry: + self._root.remove(self._expanded_entry) + self._expanded_entry.destroy() + if self._jobject: + self._expanded_entry = ExpandedEntry(self._jobject.object_id) + self._root.append(self._expanded_entry, hippo.PACK_EXPAND) - self._hbox.remove(self._expanded_object) - self._expanded_object = ExpandedEntry(self._jobject.object_id) - self._hbox.append(self._expanded_object, hippo.PACK_EXPAND) + def set_jobject(self, jobject): + self._jobject = jobject + self._update_view() + def refresh(self): + logging.debug('DetailView.refresh') + if self._jobject: + self._jobject = datastore.get(self._jobject.object_id) + self._update_view() diff --git a/journalactivity.py b/journalactivity.py index e4cd03f..9f3b021 100755 --- a/journalactivity.py +++ b/journalactivity.py @@ -29,7 +29,7 @@ from sugar.bundle.activitybundle import ActivityBundle from sugar.bundle.contentbundle import ContentBundle from sugar.datastore import datastore -from journaltoolbox import JournalToolbox, EntryToolbar +from journaltoolbox import MainToolbox, DetailToolbox from listview import ListView from detailview import DetailView from volumestoolbar import VolumesToolbar @@ -42,82 +42,62 @@ class JournalActivity(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle, create_jobject=False) - logging.debug('Starting the journal activity') - self._can_close = False - self._detail_view = None - self._is_dirty = False + self.iconify() + self._setup_main_view() + self._setup_secondary_view() self.connect('key-press-event', self._key_press_event_cb) - self._toolbox = JournalToolbox() - self._toolbox.search_toolbar.connect('query-changed', self._query_changed_cb) - self.set_toolbox(self._toolbox) - self._toolbox.show() + bus = dbus.SessionBus() + data_store = dbus.Interface( + bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH), DS_DBUS_INTERFACE) + data_store.connect_to_signal('Created', self._data_store_created_cb) + data_store.connect_to_signal('Updated', self._data_store_updated_cb) + def _setup_main_view(self): + self._main_toolbox = MainToolbox() self._main_view = gtk.VBox() - self.set_canvas(self._main_view) - self._main_view.show() self._list_view = ListView() self._list_view.connect('entry-activated', self._entry_activated_cb) self._main_view.pack_start(self._list_view) self._list_view.show() - self._volumes_toolbar = VolumesToolbar() - self._volumes_toolbar.connect('volume-changed', self._volume_changed_cb) - self._main_view.pack_start(self._volumes_toolbar, expand=False) - - self.connect('notify::active', self._notify_active_cb) + volumes_toolbar = VolumesToolbar() + volumes_toolbar.connect('volume-changed', self._volume_changed_cb) + self._main_view.pack_start(volumes_toolbar, expand=False) - internal_flash = datastore.mounts()[0] - self._toolbox.search_toolbar.set_volume_id(internal_flash['id']) + search_toolbar = self._main_toolbox.search_toolbar + search_toolbar.connect('query-changed', self._query_changed_cb) + search_toolbar.set_volume_id(datastore.mounts()[0]['id']) - self._listen_for_datastore_changes() + def _setup_secondary_view(self): + self._secondary_view = gtk.VBox() - self.iconify() + self._detail_toolbox = DetailToolbox() + entry_toolbar = self._detail_toolbox.entry_toolbar + entry_toolbar.connect('entry-erased', self._entry_erased_cb) + entry_toolbar.connect('go-back-clicked', self._go_back_clicked_cb) + + self._detail_view = DetailView() + self._secondary_view.pack_end(self._detail_view) + self._detail_view.show() def _key_press_event_cb(self, widget, event): keyname = gtk.gdk.keyval_name(event.keyval) if keyname == 'Escape': self._show_main_view() - def _listen_for_datastore_changes(self): - bus = dbus.SessionBus() - data_store = dbus.Interface(bus.get_object(DS_DBUS_SERVICE, DS_DBUS_PATH), - DS_DBUS_INTERFACE) - data_store.connect_to_signal('Created', self._data_store_created_cb) - data_store.connect_to_signal('Updated', self._data_store_updated_cb) - - def _notify_active_cb(self, widget, pspec): - if self.props.active and self._is_dirty: - gobject.idle_add(self._refresh) - return False - def _refresh(self): self._toolbox.search_toolbar.refresh_filters() if self.canvas == self._detail_view: self._detail_view.refresh() else: self._list_view.refresh() - self._is_dirty = False def _entry_activated_cb(self, list_view, entry): - self._toolbox.hide() - - vbox = gtk.VBox() - self.set_canvas(vbox) - vbox.show() - - self._entry_toolbar = EntryToolbar(entry.jobject) - self._entry_toolbar.connect('entry-erased', self._entry_erased_cb) - self._entry_toolbar.connect('go-back-clicked', self._go_back_clicked_cb) - vbox.pack_start(self._entry_toolbar, expand=False, fill=False) - self._entry_toolbar.show() - - self._detail_view = DetailView(entry.jobject) - vbox.pack_end(self._detail_view) - self._detail_view.show() + self._show_secondary_view(entry.jobject) def _go_back_clicked_cb(self, detail_view): self._list_view.refresh() @@ -128,16 +108,21 @@ class JournalActivity(activity.Activity): self._show_main_view() def _show_main_view(self): - if self._detail_view == None: - return + self.set_toolbox(self._main_toolbox) + self._main_toolbox.show() self.set_canvas(self._main_view) self._main_view.show() - self._toolbox.show() - self._toolbox.set_current_toolbar(0) + def _show_secondary_view(self, jobject): + self._detail_toolbox.entry_toolbar.set_jobject(jobject) + self.set_toolbox(self._detail_toolbox) + self._detail_toolbox.show() + + self._detail_view.set_jobject(jobject) - self._detail_view = None + self.set_canvas(self._secondary_view) + self._secondary_view.show() def _entry_erased_cb(self, toolbar): self._show_main_view() diff --git a/journaltoolbox.py b/journaltoolbox.py index 85b4dd8..dc02fc6 100644 --- a/journaltoolbox.py +++ b/journaltoolbox.py @@ -41,7 +41,7 @@ import backup _AUTOSEARCH_TIMEOUT = 1000 -class JournalToolbox(Toolbox): +class MainToolbox(Toolbox): def __init__(self): Toolbox.__init__(self) @@ -305,6 +305,29 @@ class ManageToolbar(gtk.Toolbar): def __init__(self): gtk.Toolbar.__init__(self) +class BackupToolbar(gtk.Toolbar): + __gtype_name__ = 'BackupToolbar' + + def __init__(self): + gtk.Toolbar.__init__(self) + + self._backup = ToolButton('document-save') + self._backup.set_tooltip(_('Backup')) + self._backup.connect('clicked', self._backup_clicked_cb) + self.insert(self._backup, -1) + self._backup.show() + + def _backup_clicked_cb(self, button): + backup.backup_gui() + +class DetailToolbox(Toolbox): + def __init__(self): + Toolbox.__init__(self) + + self.entry_toolbar = EntryToolbar() + self.add_toolbar('', self.entry_toolbar) + self.entry_toolbar.show() + class EntryToolbar(gtk.Toolbar): __gtype_name__ = 'EntryToolbar' @@ -317,17 +340,9 @@ class EntryToolbar(gtk.Toolbar): ([])) } - def __init__(self, jobject): + def __init__(self): gtk.Toolbar.__init__(self) - self._jobject = jobject - - separator = gtk.SeparatorToolItem() - separator.set_size_request(style.GRID_CELL_SIZE, -1) - separator.props.draw = False - self.add(separator) - separator.show() - go_back_button = ToolButton('go-previous-mini') go_back_button.set_tooltip(_('Go back')) go_back_button.connect('clicked', self._go_back_button_clicked_cb) @@ -372,17 +387,14 @@ class EntryToolbar(gtk.Toolbar): self.add(self._resume) self._resume.show() - separator = gtk.SeparatorToolItem() - separator.set_size_request(style.GRID_CELL_SIZE, -1) - separator.props.draw = False - self.add(separator) - separator.show() - + def set_jobject(self, jobject): + self._jobject = jobject self._refresh_copy_palette() self._refresh_resume_palette() def _resume_clicked_cb(self, button): - self._jobject.resume() + if self._jobject: + self._jobject.resume() def _copy_clicked_cb(self, button): clipboard = gtk.Clipboard() @@ -397,18 +409,21 @@ class EntryToolbar(gtk.Toolbar): pass def _erase_button_clicked_cb(self, button): - datastore.delete(self._jobject.object_id) - self.emit('entry-erased') + if self._jobject: + datastore.delete(self._jobject.object_id) + self.emit('entry-erased') def _go_back_button_clicked_cb(self, back_bar): self.emit('go-back-clicked') return False def _resume_menu_item_activate_cb(self, menu_item, service_name): - self._jobject.resume(service_name) + if self._jobject: + self._jobject.resume(service_name) def _copy_menu_item_activate_cb(self, menu_item, volume): - datastore.copy(self._jobject, volume.id) + if self._jobject: + datastore.copy(self._jobject, volume.id) def _refresh_copy_palette(self): palette = self._copy.get_palette() @@ -443,19 +458,3 @@ class EntryToolbar(gtk.Toolbar): activity.service_name) palette.menu.append(menu_item) menu_item.show() - -class BackupToolbar(gtk.Toolbar): - __gtype_name__ = 'BackupToolbar' - - def __init__(self): - gtk.Toolbar.__init__(self) - - self._backup = ToolButton('document-save') - self._backup.set_tooltip(_('Backup')) - self._backup.connect('clicked', self._backup_clicked_cb) - self.insert(self._backup, -1) - self._backup.show() - - def _backup_clicked_cb(self, button): - backup.backup_gui() - |