X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Frtm_view.py;h=8fab4129b59b826574a6e6884ac0a47e3f1512da;hb=25b0265962d7291801284a6f2b8b2f2e43508c48;hp=158e569f6dcb86a83b6b512dec360efafb318602;hpb=ccf52734bb6a0193b5f6e2cdf7d1c42a630e8d1d;p=doneit diff --git a/src/rtm_view.py b/src/rtm_view.py index 158e569..8fab412 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 @@ -322,114 +322,6 @@ class ItemListView(object): self._errorDisplay.push_exception() -class QuickAddView(object): - - def __init__(self, widgetTree, errorDisplay, addSink): - self._errorDisplay = errorDisplay - self._manager = None - self._projId = None - self._addSink = addSink - - 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._onAddId = None - self._onAddClickedId = None - self._onAddReleasedId = None - self._addToEditTimerId = None - self._onClearId = None - self._onPasteId = None - - def enable(self, manager, projId): - 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) - self._onAddReleasedId = self._addTaskButton.connect("released", self._on_add_released) - self._onPasteId = self._pasteTaskNameButton.connect("clicked", self._on_paste) - self._onClearId = self._clearTaskNameButton.connect("clicked", self._on_clear) - - def disable(self): - self._manager = None - self._projId = None - - self._addTaskButton.disconnect(self._onAddId) - self._addTaskButton.disconnect(self._onAddClickedId) - self._addTaskButton.disconnect(self._onAddReleasedId) - 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 _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)) - except StandardError, e: - self._errorDisplay.push_exception() - - def _on_add_edit(self, *args): - try: - name = self._taskNameEntry.get_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)) - except StandardError, e: - self._errorDisplay.push_exception() - - def _on_add_pressed(self, widget): - try: - self._addToEditTimerId = gobject.timeout_add(1000, self._on_add_edit) - except StandardError, e: - self._errorDisplay.push_exception() - - def _on_add_released(self, widget): - try: - if self._addToEditTimerId is not None: - gobject.source_remove(self._addToEditTimerId) - self._addToEditTimerId = None - except StandardError, e: - self._errorDisplay.push_exception() - - def _on_paste(self, *args): - try: - entry = self._taskNameEntry.get_text() - entry += self._clipboard.wait_for_text() - self._taskNameEntry.set_text(entry) - except StandardError, e: - self._errorDisplay.push_exception() - - def _on_clear(self, *args): - try: - self._taskNameEntry.set_text("") - except StandardError, e: - self._errorDisplay.push_exception() - - class GtkRtMilk(object): def __init__(self, widgetTree, errorDisplay): @@ -440,13 +332,21 @@ class GtkRtMilk(object): self._manager = None self._credentials = "", "", "" + self._editDialog = gtk_toolbox.EditTaskDialog(widgetTree) + self._projDialog = gtk_toolbox.ProjectsDialog(widgetTree) self._projectsList = gtk.ListStore(gobject.TYPE_STRING) self._projectsCombo = widgetTree.get_widget("projectsCombo") + self._projectCell = gtk.CellRendererText() self._onListActivateId = 0 + self._projectMenuItem = widgetTree.get_widget("projectMenuItem") + self._onProjectMenuItemActivated = 0 + self._itemView = ItemListView(widgetTree, self._errorDisplay) - addSink = coroutines.func_sink(lambda eventData: self._itemView.reset_task_list(eventData[0])) - self._addView = QuickAddView(widgetTree, self._errorDisplay, addSink) + 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 = gtk_toolbox.QuickAddView(widgetTree, self._errorDisplay, addSink, "add") self._credentialsDialog = gtk_toolbox.LoginWindow(widgetTree) @staticmethod @@ -507,28 +407,31 @@ 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"] - 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) + self._onProjectMenuItemActivated = self._projectMenuItem.connect("activate", self._on_proj_activate) def disable(self): """ @note UI Thread """ self._projectsCombo.disconnect(self._onListActivateId) + self._projectMenuItem.disconnect(self._onProjectMenuItemActivated) + 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,17 +443,17 @@ 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): 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 @@ -560,3 +463,29 @@ class GtkRtMilk(object): self._reset_task_list() except StandardError, e: self._errorDisplay.push_exception() + + def _on_add(self, eventData): + eventName, taskName, = eventData + projectName = self._get_project() + projId = self._manager.lookup_project(projectName)["id"] + + taskId = self._manager.add_task(projId, taskName) + + self._itemView.reset_task_list(projId) + + def _on_add_edit(self, eventData): + eventName, taskName, = eventData + 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) + + def _on_proj_activate(self, *args): + self._projDialog.enable(self._manager)