From e840cb13811f3bea1b4ee9232138de7ae7d52f08 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Thu, 23 Apr 2009 22:00:02 -0500 Subject: [PATCH] Still a bit buggy but making QuickAddView a bit more reusable --- src/rtm_view.py | 93 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/src/rtm_view.py b/src/rtm_view.py index a2593bf..0fbcc7a 100644 --- a/src/rtm_view.py +++ b/src/rtm_view.py @@ -324,19 +324,17 @@ class ItemListView(object): class QuickAddView(object): - def __init__(self, widgetTree, errorDisplay, addSink): + def __init__(self, widgetTree, errorDisplay, signalSink, prefix = "add"): self._errorDisplay = errorDisplay self._manager = None - self._projId = None - self._addSink = addSink + self._signalSink = signalSink self._clipboard = gtk.clipboard_get() - self._editDialog = gtk_toolbox.EditTaskDialog(widgetTree) - self._taskNameEntry = widgetTree.get_widget("add-taskNameEntry") - self._addTaskButton = widgetTree.get_widget("add-addTaskButton") - self._pasteTaskNameButton = widgetTree.get_widget("add-pasteTaskNameButton") - self._clearTaskNameButton = widgetTree.get_widget("add-clearTaskNameButton") + self._taskNameEntry = widgetTree.get_widget(prefix+"-taskNameEntry") + self._addTaskButton = widgetTree.get_widget(prefix+"-addTaskButton") + self._pasteTaskNameButton = widgetTree.get_widget(prefix+"-pasteTaskNameButton") + self._clearTaskNameButton = widgetTree.get_widget(prefix+"-clearTaskNameButton") self._onAddId = None self._onAddClickedId = None self._onAddReleasedId = None @@ -344,9 +342,8 @@ class QuickAddView(object): self._onClearId = None self._onPasteId = None - def enable(self, manager, projId): + def enable(self, manager): self._manager = manager - self._projId = projId self._onAddId = self._addTaskButton.connect("clicked", self._on_add) self._onAddClickedId = self._addTaskButton.connect("pressed", self._on_add_pressed) @@ -356,7 +353,6 @@ class QuickAddView(object): def disable(self): self._manager = None - self._projId = None self._addTaskButton.disconnect(self._onAddId) self._addTaskButton.disconnect(self._onAddClickedId) @@ -364,40 +360,24 @@ class QuickAddView(object): self._pasteTaskNameButton.disconnect(self._onPasteId) self._clearTaskNameButton.disconnect(self._onClearId) - def reset_task_list(self, projId): - self._projId = projId - isMeta = self._manager.get_project(self._projId)["isMeta"] - # @todo RTM handles this by defaulting to a specific list - self._addTaskButton.set_sensitive(not isMeta) + def set_addability(self, addability): + self._addTaskButton.set_sensitive(addability) def _on_add(self, *args): try: name = self._taskNameEntry.get_text() - - projId = self._projId - taskId = self._manager.add_task(projId, name) - self._taskNameEntry.set_text("") - self._addSink.send((projId, taskId)) + + self._signalSink.stage.send(("add", name)) except StandardError, e: self._errorDisplay.push_exception() def _on_add_edit(self, *args): try: name = self._taskNameEntry.get_text() + self._taskNameEntry.set_text("") - projId = self._projId - taskId = self._manager.add_task(projId, name) - - try: - self._editDialog.enable(self._manager) - try: - self._editDialog.request_task(self._manager, taskId) - finally: - self._editDialog.disable() - finally: - self._taskNameEntry.set_text("") - self._addSink.send((projId, taskId)) + self._signalSink.stage.send(("add-edit", name)) except StandardError, e: self._errorDisplay.push_exception() @@ -418,7 +398,9 @@ class QuickAddView(object): def _on_paste(self, *args): try: entry = self._taskNameEntry.get_text() - entry += self._clipboard.wait_for_text() + addedText = self._clipboard.wait_for_text() + if addedText: + entry += addedText self._taskNameEntry.set_text(entry) except StandardError, e: self._errorDisplay.push_exception() @@ -440,13 +422,16 @@ class GtkRtMilk(object): self._manager = None self._credentials = "", "", "" + self._editDialog = gtk_toolbox.EditTaskDialog(widgetTree) 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) - addSink = coroutines.func_sink(lambda eventData: self._itemView.reset_task_list(eventData[0])) + addSink = coroutines.CoSwitch(["add", "add-edit"]) + addSink.register_sink("add", coroutines.func_sink(self._on_add)) + addSink.register_sink("add-edit", coroutines.func_sink(self._on_add_edit)) self._addView = QuickAddView(widgetTree, self._errorDisplay, addSink) self._credentialsDialog = gtk_toolbox.LoginWindow(widgetTree) @@ -488,7 +473,7 @@ class GtkRtMilk(object): while True: try: self._manager = rtm_backend.RtmBackend(*credentials) - self._manager = cache_backend.LazyCacheBackend(self._manager) + # self._manager = cache_backend.LazyCacheBackend(self._manager) self._credentials = credentials return # Login succeeded except rtm_api.AuthStateMachine.NoData: @@ -514,7 +499,7 @@ class GtkRtMilk(object): currentProject = self._get_project() projId = self._manager.lookup_project(currentProject)["id"] - self._addView.enable(self._manager, projId) + self._addView.enable(self._manager) self._itemView.enable(self._manager, projId) self._onListActivateId = self._projectsCombo.connect("changed", self._on_list_activate) @@ -547,9 +532,12 @@ class GtkRtMilk(object): def _reset_task_list(self): projectName = self._get_project() projId = self._manager.lookup_project(projectName)["id"] - self._addView.reset_task_list(projId) self._itemView.reset_task_list(projId) + isMeta = self._manager.get_project(projId)["isMeta"] + # @todo RTM handles this by defaulting to a specific list + self._addView.set_addability(not isMeta) + def _get_project(self): currentProjectName = self._projectsCombo.get_active_text() return currentProjectName @@ -559,3 +547,32 @@ class GtkRtMilk(object): self._reset_task_list() except StandardError, e: self._errorDisplay.push_exception() + + def _on_add(self, eventData): + eventName, taskName, = eventData + try: + projectName = self._get_project() + projId = self._manager.lookup_project(projectName)["id"] + + taskId = self._manager.add_task(projId, taskName) + + self._itemView.reset_task_list(projId) + except StandardError, e: + self._errorDisplay.push_exception() + + def _on_add_edit(self, eventData): + eventName, taskName, = eventData + try: + projectName = self._get_project() + projId = self._manager.lookup_project(projectName)["id"] + + taskId = self._manager.add_task(projId, taskName) + + self._editDialog.enable(self._manager) + try: + self._editDialog.request_task(self._manager, taskId) + finally: + self._editDialog.disable() + self._itemView.reset_task_list(projId) + except StandardError, e: + self._errorDisplay.push_exception() -- 1.7.9.5