Author: jprantan
Date: Wed May 20 03:53:24 2009
New Revision: 66

Modified:
   trunk/src/mabot/ui/abstracttkdialog.py
   trunk/src/mabot/ui/main.py
   trunk/src/mabot/ui/ui.py
   trunk/src/mabot/utils/utils.py

Log:
Improved adding and removing tags.

Modified: trunk/src/mabot/ui/abstracttkdialog.py
==============================================================================
--- trunk/src/mabot/ui/abstracttkdialog.py      (original)
+++ trunk/src/mabot/ui/abstracttkdialog.py      Wed May 20 03:53:24 2009
@@ -27,7 +27,7 @@
         self.result = None
         body = Frame(self)
         self.initial_focus = self.body(body)
-        body.pack(padx=5, pady=5)
+        body.pack(padx=5, pady=5, expand=1, fill=BOTH)
         self.buttonbox()
         self.grab_set()
         if not self.initial_focus:

Modified: trunk/src/mabot/ui/main.py
==============================================================================
--- trunk/src/mabot/ui/main.py  (original)
+++ trunk/src/mabot/ui/main.py  Wed May 20 03:53:24 2009
@@ -17,6 +17,7 @@
 from Tkinter import _setit
 import tkMessageBox
 import tkFileDialog
+import tkSimpleDialog
 from idlelib import TreeWidget

 from tree import SuiteTreeItem
@@ -205,32 +206,34 @@
         self._create_new_editor()

     def _add_tag(self, event=None):
-        if self._active_node is not None \
+        if self._active_node \
             and not self._active_node.item.model_item.is_keyword():
-            dialog = EditTagDialog(self.root, "Add")
-            if dialog.pressed == 'OK':
-                self._add_new_tag(dialog.message)
-            dialog.destroy()
+            tags = tkSimpleDialog.askstring('Add Tags',
+ "Add tags (separated with ', ' i.e. tag-1, tag-2)")
+            self._add_new_tags(tags)
         else:
             self._no_node_selected("No test suite or test case selected!")

     def _remove_tag(self, event=None):
         if self._active_node is not None \
             and not self._active_node.item.model_item.is_keyword():
-            dialog = EditTagDialog(self.root, "Remove")
+ tags = sorted(self._active_node.item.model_item.get_all_visible_tags([]))
+            dialog = RemoveTagsDialog(self.root, tags)
             if dialog.pressed == 'OK':
-                self._remove_old_tag(dialog.message)
+                self._remove_old_tag(dialog.tags)
             dialog.destroy()
         else:
             self._no_node_selected("No test suite or test case selected!")

-    def _add_new_tag(self, tag):
-        self._active_node.item.model_item.add_tag(tag)
+    def _add_new_tags(self, tags):
+        for tag in utils.get_tags_from_string(tags):
+            self._active_node.item.model_item.add_tag(tag)
         self._create_new_editor()
         self._update_visibility()

-    def _remove_old_tag(self, tag):
-        self._active_node.item.model_item.remove_tag(tag)
+    def _remove_old_tag(self, tags):
+        for tag in tags:
+            self._active_node.item.model_item.remove_tag(tag)
         self._create_new_editor()
         self._update_visibility()

@@ -267,12 +270,14 @@
             saved, changes = self.io.save_data(path)
             progress.destroy()
             if changes:
+                print "Changes!"
                 self._init_tree_view()
                 self._update_visibility()
                 self._create_new_editor()
             if saved:
                 message = 'Wrote output to ' + self.io.output
                 self._statusbar_right.configure(text=message)
+                self.current_editor.update()
             else:
                 if changes:
                     message = 'Loaded changes from ' + self.io.output

Modified: trunk/src/mabot/ui/ui.py
==============================================================================
--- trunk/src/mabot/ui/ui.py    (original)
+++ trunk/src/mabot/ui/ui.py    Wed May 20 03:53:24 2009
@@ -44,6 +44,27 @@
     def validate(self):
         return self.message_field.get(START, END) != ''

+class EntryDialog(AbstractTkDialog):
+
+    def __init__(self, parent, title, label, default_message=""):
+        self._label = label
+        self._default_message = default_message
+        AbstractTkDialog.__init__(self, parent, title)
+
+    def body(self, master):
+        Label(master, text=self._label).grid(row=0, sticky=W+E)
+        self._entry = Entry(master)
+        self._entry.insert(0, self._default_message)
+        self._entry.grid(row=1, sticky=W+E)
+        return self._entry # initial focus
+
+    def apply(self):
+        self.message = self._entry.get()
+
+    def validate(self):
+        return self._entry.get() != ''
+
+
 class SettingsDialog(AbstractTkDialog):

     def __init__(self, parent, title):
@@ -148,11 +169,39 @@
                                    "Give reason for failure:" , 5, 50,
                                    SETTINGS["default_message"])

-class EditTagDialog(TextMessageDialog):
+class AddTagsDialog(EntryDialog):
+
+    def __init__(self, parent):
+        EntryDialog.__init__(self, parent, "Add Tags",
+                                   "Give tags (i.e. tag1, tag2)")
+
+    def apply(self):
+        EntryDialog.apply(self)
+        self.tags = utils.get_tags_from_string(self.message)
+
+class RemoveTagsDialog(AbstractTkDialog):
+
+    def __init__(self, parent, tags):
+        self._all_tags = tags
+        self.tags = []
+        AbstractTkDialog.__init__(self, parent, 'Remove Tags')
+
+    def body(self, master):
+        scrollbar = Scrollbar(master, orient=VERTICAL)
+        self.listbox = Listbox(master, selectmode=EXTENDED,
+                               yscrollcommand=scrollbar.set)
+        scrollbar.config(command=self.listbox.yview)
+        scrollbar.pack(side=RIGHT, fill=Y)
+        self.listbox.pack(fill=BOTH, expand=1)
+        for tag in self._all_tags:
+            self.listbox.insert(END, tag)
+
+    def validate(self):
+        return self.listbox.curselection()
+
+    def apply(self):
+ self.tags = [ self._all_tags[int(i)] for i in self.listbox.curselection() ]

-    def __init__(self, parent, type):
-        TextMessageDialog.__init__(self, parent, type + " Tag",
-                                   "Give tag:", 2, 20)

 class AskAdditionalTagsDialog(TextMessageDialog):


Modified: trunk/src/mabot/utils/utils.py
==============================================================================
--- trunk/src/mabot/utils/utils.py      (original)
+++ trunk/src/mabot/utils/utils.py      Wed May 20 03:53:24 2009
@@ -15,7 +15,10 @@

 def get_tags_from_string(tags_string):
     """Return list of tags from given string"""
-    tags = tags_string.split(', ')
+    if tags_string:
+        tags = tags_string.split(', ')
+    else:
+        tags = []
     return [ tag for tag in tags if tag ]

 def get_status_color(item):

Reply via email to