← Back to team overview

gtg team mailing list archive

[Merge] lp:~tomkadwill/gtg/delete-tag2 into lp:gtg

 

Tom Kadwill has proposed merging lp:~tomkadwill/gtg/delete-tag2 into lp:gtg.

Requested reviews:
  Gtg developers (gtg)

For more details, see:
https://code.launchpad.net/~tomkadwill/gtg/delete-tag2/+merge/141682

Have fixed bug Bug #1044639
-- 
https://code.launchpad.net/~tomkadwill/gtg/delete-tag2/+merge/141682
Your team Gtg developers is requested to review the proposed merge of lp:~tomkadwill/gtg/delete-tag2 into lp:gtg.
=== modified file 'CHANGELOG'
--- CHANGELOG	2013-01-01 16:24:57 +0000
+++ CHANGELOG	2013-01-02 23:31:24 +0000
@@ -6,6 +6,7 @@
     * Fix for bug #1047753: Changing due date doesn't update "days left" information, by Codee
     * Fix for bug #1090301: "Deactivating the untouched tasks plugin leaves "add @untouched tag" in plugins menu", by Nimit Shah
     * Fix for bug #1039651: Urgency coloring of parent tasks in collapsed view, by Parin Porecha
+    * Fix for bug #1095451: Can now delete tags from Tags Sidebar
 
 2012-11-06 Getting Things GNOME! 0.3
     * Hide tasks with due date someday, #931376

=== modified file 'GTG/gtk/browser/browser.py'
--- GTG/gtk/browser/browser.py	2012-12-13 15:44:18 +0000
+++ GTG/gtk/browser/browser.py	2013-01-02 23:31:24 +0000
@@ -620,12 +620,12 @@
         self.config.set('tasklist_sort_column', sort_column)
         self.config.set('tasklist_sort_order', sort_order)
 
-    def on_move(self, widget = None, data = None):
+    def on_move(self, widget=None, data=None):
         xpos, ypos = self.window.get_position()
         self.config.set('x_pos', xpos)
         self.config.set('y_pos', ypos)
 
-    def on_size_allocate(self, widget = None, data = None):
+    def on_size_allocate(self, widget=None, data=None):
         width, height = self.window.get_size()
         self.config.set('width', width)
         self.config.set('height', height)
@@ -868,6 +868,9 @@
         keyname = gtk.gdk.keyval_name(event.keyval)
         is_shift_f10 = (keyname == "F10" and
             event.get_state() & gtk.gdk.SHIFT_MASK)
+        if keyname == "Delete":
+            self.on_delete_tags()
+            return True
         if is_shift_f10 or keyname == "Menu":
             selected_tags = self.get_selected_tags(nospecial=True)
             selected_search = self.get_selected_search()
@@ -885,6 +888,12 @@
                 self.reset_cursor()
             return True
 
+    def on_delete_tags(self, widget=None, tid=None):
+        selected_tags = self.get_selected_tags(nospecial=True)
+        Log.debug("going to delete %s" % selected_tags)
+        if self.vmanager.ask_delete_tags(selected_tags):
+            self.req.remove_tag(selected_tags[0])
+
     def on_task_treeview_button_press_event(self, treeview, event):
         """ Pop up context menu on right mouse click in the main
         task tree view """

=== modified file 'GTG/gtk/delete_dialog.py'
--- GTG/gtk/delete_dialog.py	2012-12-02 12:25:37 +0000
+++ GTG/gtk/delete_dialog.py	2013-01-02 23:31:24 +0000
@@ -131,3 +131,43 @@
             return tasklist
         else:
             return []
+
+    def delete_tags(self, tags):
+        # We fill the text and the buttons' labels according to the number
+        # of tasks to delete
+        label = self.builder.get_object("label1")
+        label_text = label.get_text()
+        cdlabel2 = self.builder.get_object("cd-label2")
+        cdlabel3 = self.builder.get_object("cd-label3")
+        cdlabel4 = self.builder.get_object("cd-label4")
+        singular = len(tags)
+        label_text = ngettext("Deleting a tag cannot be undone, "
+                              "and will delete the following tag: ",
+                              "Deleting a tag cannot be undone, "
+                              "and will delete the following tags: ",
+                              singular)
+        cdlabel2.set_label(ngettext("Are you sure you want to delete this "
+                                    "tag?",
+                                    "Are you sure you want to delete these "
+                                    "tag?",
+                                    singular))
+
+        cdlabel3.set_label(ngettext("Keep selected tag",
+                                    "Keep selected tag",
+                                    singular))
+        cdlabel4.set_label(ngettext("Permanently remove tag",
+                                    "Permanently remove tag",
+                                    singular))
+        label_text = label_text[0:label_text.find(":") + 1]
+
+        delete_dialog = self.builder.get_object("confirm_delete")
+        titles = "".join("\n - " + tag for tag in tags)
+        label.set_text(label_text + titles)
+        delete_dialog.resize(1, 1)
+        cancel_button = self.builder.get_object("cancel")
+        cancel_button.grab_focus()
+        if delete_dialog.run() != 1:
+            delete_dialog.hide()
+        else:
+            delete_dialog.hide()
+            return True

=== modified file 'GTG/gtk/manager.py'
--- GTG/gtk/manager.py	2012-12-13 15:44:18 +0000
+++ GTG/gtk/manager.py	2013-01-02 23:31:24 +0000
@@ -238,6 +238,17 @@
             if t.get_id() in self.opened_task:
                 self.close_task(t.get_id())
 
+    def ask_delete_tags(self, tags):
+        self.delete_dialog = DeletionUI(self.req)
+        if self.delete_dialog.delete_tags(tags):
+            requester = self.plugin_api.get_requester()
+            closed_tree = requester.get_tasks_tree(name = 'inactive')
+            closed_tasks = [requester.get_task(tid) for tid in \
+                                            closed_tree.get_all_nodes()]
+            for task in closed_tasks:
+                task.remove_tag(tags[0])
+            return True
+
     def open_tag_editor(self, tag):
         if not self.tag_editor_dialog:
             self.tag_editor_dialog = TagEditor(self.req, self, tag)