From e3f888001c80dabac477ece919e52185affbf404 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 20 Apr 2009 19:13:58 -0500 Subject: [PATCH] Start of preferences dialog Also got some minor bug fixes in to some of the gtk_toolbox code --- src/doneit.glade | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++- src/doneit_glade.py | 29 ++++++++++++---- src/gtk_toolbox.py | 64 +++++++++++++++++++++++++++++++++-- src/rtm_view.py | 13 ++++--- 4 files changed, 182 insertions(+), 17 deletions(-) diff --git a/src/doneit.glade b/src/doneit.glade index 61dbdc9..5aa296d 100644 --- a/src/doneit.glade +++ b/src/doneit.glade @@ -1,6 +1,6 @@ - + 800 @@ -73,6 +73,19 @@ True + + + True + + + + + True + gtk-preferences + True + True + + @@ -650,4 +663,82 @@ + + 5 + GTK_WIN_POS_CENTER_ON_PARENT + GDK_WINDOW_TYPE_HINT_DIALOG + False + + + True + 2 + + + True + True + + + True + + + True + + + False + False + + + + + + + True + Backend + + + tab + False + + + + + 1 + + + + + True + GTK_BUTTONBOX_END + + + True + True + True + gtk-cancel + True + 0 + + + + + True + True + True + gtk-apply + True + 0 + + + 1 + + + + + False + GTK_PACK_END + + + + + diff --git a/src/doneit_glade.py b/src/doneit_glade.py index 69bc6e0..86019f8 100755 --- a/src/doneit_glade.py +++ b/src/doneit_glade.py @@ -70,6 +70,7 @@ class DoneIt(object): self._clipboard = gtk.clipboard_get() self.__window = self._widgetTree.get_widget("mainWindow") self.__errorDisplay = gtk_toolbox.ErrorDisplay(self._widgetTree) + self._prefsDialog = gtk_toolbox.PreferencesDialog(self._widgetTree) self._app = None self._isFullScreen = False @@ -99,7 +100,8 @@ class DoneIt(object): "on_about": self._on_about_activate, } self._widgetTree.signal_autoconnect(callbackMapping) - self._widgetTree.get_widget("connectMenuItem").connect("activate", lambda *args: self._switch_ui(self._defaultUIName)) + self._widgetTree.get_widget("connectMenuItem").connect("activate", lambda *args: self.switch_ui(self._defaultUIName)) + self._widgetTree.get_widget("preferencesMenuItem").connect("activate", self._on_prefs) if self.__window: if hildon is None: @@ -199,9 +201,9 @@ class DoneIt(object): ) try: - self._switch_ui(activeUIName) + self.switch_ui(activeUIName) except KeyError, e: - self._switch_ui(self._defaultUIName) + self.switch_ui(self._defaultUIName) def save_settings(self, config): """ @@ -213,7 +215,13 @@ class DoneIt(object): for todoUI in self._todoUIs.itervalues(): todoUI.save_settings(config) - def _switch_ui(self, uiName): + def get_uis(self): + return (ui for ui in self._todoUIs.iteritems()) + + def get_default_ui(self): + return self._defaultUIName + + def switch_ui(self, uiName): """ @note UI Thread """ @@ -264,10 +272,10 @@ class DoneIt(object): if status == conic.STATUS_CONNECTED: self._deviceIsOnline = True - self._switch_ui(self._defaultUIName) + self.switch_ui(self._defaultUIName) elif status == conic.STATUS_DISCONNECTED: self._deviceIsOnline = False - self._switch_ui(self._fallbackUIName) + self.switch_ui(self._fallbackUIName) def _on_window_state_change(self, widget, event, *args): """ @@ -302,7 +310,14 @@ class DoneIt(object): def _on_logout(self, *args): self._todoUI.logout() - self._switch_ui(self._fallbackUIName) + self.switch_ui(self._fallbackUIName) + + def _on_prefs(self, *args): + self._prefsDialog.enable() + try: + self._prefsDialog.run(self) + finally: + self._prefsDialog.disable() def _on_about_activate(self, *args): dlg = gtk.AboutDialog() diff --git a/src/gtk_toolbox.py b/src/gtk_toolbox.py index 4828d5e..e6f6fc0 100644 --- a/src/gtk_toolbox.py +++ b/src/gtk_toolbox.py @@ -370,7 +370,7 @@ class NotesDialog(object): def disable(self): self._addButton.disconnect(self._onAddId) self._saveButton.disconnect(self._onSaveId) - self._cancelButton.disconnect(self._onAddId) + self._cancelButton.disconnect(self._onCancelId) def run(self, todoManager, taskId, parentWindow = None): if parentWindow is not None: @@ -490,7 +490,7 @@ class EditTaskDialog(object): self._pasteTaskNameButton.disconnect(self._onPasteTaskId) self._clearDueDate.disconnect(self._onClearDueDateId) self._addButton.disconnect(self._onAddId) - self._cancelButton.disconnect(self._onAddId) + self._cancelButton.disconnect(self._onCancelId) self._projectsList.clear() self._projectCombo.set_model(None) @@ -622,6 +622,66 @@ class EditTaskDialog(object): self._dialog.response(gtk.RESPONSE_CANCEL) +class PreferencesDialog(object): + + def __init__(self, widgetTree): + self._backendList = gtk.ListStore(gobject.TYPE_STRING) + self._backendCell = gtk.CellRendererText() + + self._dialog = widgetTree.get_widget("preferencesDialog") + self._backendSelector = widgetTree.get_widget("prefsBackendSelector") + self._applyButton = widgetTree.get_widget("applyPrefsButton") + self._cancelButton = widgetTree.get_widget("cancelPrefsButton") + + self._onApplyId = None + self._onCancelId = None + + def enable(self): + self._dialog.set_default_size(800, 300) + self._onApplyId = self._applyButton.connect("clicked", self._on_apply_clicked) + self._onCancelId = self._cancelButton.connect("clicked", self._on_cancel_clicked) + + cell = self._backendCell + self._backendSelector.pack_start(cell, True) + self._backendSelector.add_attribute(cell, 'text', 0) + self._backendSelector.set_model(self._backendList) + + def disable(self): + self._applyButton.disconnect(self._onApplyId) + self._cancelButton.disconnect(self._onCancelId) + + self._backendList.clear() + self._backendSelector.set_model(None) + + def run(self, app, parentWindow = None): + if parentWindow is not None: + self._dialog.set_transient_for(parentWindow) + + self._backendList.clear() + activeIndex = 0 + for i, (uiName, ui) in enumerate(app.get_uis()): + self._backendList.append((uiName, )) + if uiName == app.get_default_ui(): + activeIndex = i + self._backendSelector.set_active(activeIndex) + + try: + response = self._dialog.run() + if response != gtk.RESPONSE_OK: + raise RuntimeError("Edit Cancelled") + finally: + self._dialog.hide() + + backendName = self._backendSelector.get_active_text() + app.switch_ui(backendName) + + def _on_apply_clicked(self, *args): + self._dialog.response(gtk.RESPONSE_OK) + + def _on_cancel_clicked(self, *args): + self._dialog.response(gtk.RESPONSE_CANCEL) + + if __name__ == "__main__": if True: win = gtk.Window() diff --git a/src/rtm_view.py b/src/rtm_view.py index 158e569..a2593bf 100644 --- a/src/rtm_view.py +++ b/src/rtm_view.py @@ -241,7 +241,7 @@ class ItemListView(object): self._todoItemScroll.hide_all() self._itemList.clear() - self._itemList.set_model(None) + self._todoItemTree.set_model(None) def reset_task_list(self, projId): self._projId = projId @@ -442,6 +442,7 @@ class GtkRtMilk(object): self._projectsList = gtk.ListStore(gobject.TYPE_STRING) self._projectsCombo = widgetTree.get_widget("projectsCombo") + self._projectCell = gtk.CellRendererText() self._onListActivateId = 0 self._itemView = ItemListView(widgetTree, self._errorDisplay) @@ -507,6 +508,9 @@ class GtkRtMilk(object): """ self._projectsList.clear() self._populate_projects() + cell = self._projectCell + self._projectsCombo.pack_start(cell, True) + self._projectsCombo.add_attribute(cell, 'text', 0) currentProject = self._get_project() projId = self._manager.lookup_project(currentProject)["id"] @@ -520,15 +524,13 @@ class GtkRtMilk(object): @note UI Thread """ self._projectsCombo.disconnect(self._onListActivateId) + self._onListActivateId = 0 self._addView.disable() self._itemView.disable() self._projectsList.clear() self._projectsCombo.set_model(None) - self._projectsCombo.disconnect("changed", self._on_list_activate) - - self._manager = None def _populate_projects(self): projects = self._manager.get_projects() @@ -540,9 +542,6 @@ class GtkRtMilk(object): if isVisible: self._projectsList.append(row) self._projectsCombo.set_model(self._projectsList) - cell = gtk.CellRendererText() - self._projectsCombo.pack_start(cell, True) - self._projectsCombo.add_attribute(cell, 'text', 0) self._projectsCombo.set_active(0) def _reset_task_list(self): -- 1.7.9.5