← Back to team overview

gtg team mailing list archive

[Merge] lp:~atit-anand-cs/gtg/random_tag_color into lp:gtg

 

Atit Anand has proposed merging lp:~atit-anand-cs/gtg/random_tag_color into lp:gtg.

Requested reviews:
  Gtg developers (gtg)

For more details, see:
https://code.launchpad.net/~atit-anand-cs/gtg/random_tag_color/+merge/208450

Fix for the bug #644993. Automatic generation of tag color
-- 
https://code.launchpad.net/~atit-anand-cs/gtg/random_tag_color/+merge/208450
Your team Gtg developers is requested to review the proposed merge of lp:~atit-anand-cs/gtg/random_tag_color into lp:gtg.
=== modified file 'AUTHORS'
--- AUTHORS	2014-02-25 18:19:31 +0000
+++ AUTHORS	2014-02-26 18:23:44 +0000
@@ -131,3 +131,5 @@
 * Pawan Hegde <h.pawan@xxxxxxxxx>
 * Sagar Ghuge <ghugesss@xxxxxxxxx>
 * Sushant Raikar <sushantthecoder@xxxxxxxxx>
+* Atit Anand <atit.anand.cs@xxxxxxxxx>
+

=== modified file 'CHANGELOG'
--- CHANGELOG	2014-02-25 18:38:16 +0000
+++ CHANGELOG	2014-02-26 18:23:44 +0000
@@ -14,6 +14,8 @@
     * Fix for bug #1248185: due label in task editor says "Due for" should say "Due on", by Pawan Hegde
     * Fix for bug #1282955: Clicking out side the calender widget should close the widget by Sagar Ghuge
     * Fix for bug #1033268: Mouseover String Incorrect, by Sushant Raikar
+    * Fix for bug #644993 : Automatic generation of tag color, by Atit Anand
+
 
 2013-11-24 Getting Things GNOME! 0.3.1
     * Fix for bug #1024473: Have 'Show Main Window' in notification area, by Antonio Roquentin
@@ -43,7 +45,7 @@
     * Fix for bug #1242384: send-email: toolbar item is not removed from an opened task, by Fabiano Fidencio
     * Fix for bug #1029342: Give an option to remove tag color, by kpytang
     * Fixed Hamster Plugin: bugs #487582, #487585, #1236066, #1242083 and #1242279, by Parin Porecha
-
+    
 2012-11-06 Getting Things GNOME! 0.3
     * Hide tasks with due date someday, #931376
     * New Date class by Paul Kishimoto and Izidor Matušov

=== modified file 'GTG/gtk/browser/CellRendererTags.py'
--- GTG/gtk/browser/CellRendererTags.py	2013-11-25 02:37:46 +0000
+++ GTG/gtk/browser/CellRendererTags.py	2014-02-26 18:23:44 +0000
@@ -61,7 +61,6 @@
     def __count_viewable_tags(self):
 
         count = 0
-
         if self.tag_list is not None:
             for my_tag in self.tag_list:
                 my_tag_color = my_tag.get_attribute("color")

=== modified file 'GTG/gtk/browser/tag_context_menu.py'
--- GTG/gtk/browser/tag_context_menu.py	2013-11-25 02:37:46 +0000
+++ GTG/gtk/browser/tag_context_menu.py	2014-02-26 18:23:44 +0000
@@ -27,7 +27,7 @@
 """
 
 from gi.repository import Gtk
-
+from GTG.gtk.colors import generate_tag_color, color_add, color_remove
 from GTG import _
 
 
@@ -53,8 +53,12 @@
             # Color chooser FIXME: SHOULD BECOME A COLOR PICKER
             self.mi_cc = Gtk.MenuItem()
             self.mi_cc.set_label(_("Edit Tag..."))
+            self.mi_ctag = Gtk.MenuItem()
+            self.mi_ctag.set_label(_("Generate Color"))
             self.append(self.mi_cc)
+            self.append(self.mi_ctag)
             self.mi_cc.connect('activate', self.on_mi_cc_activate)
+            self.mi_ctag.connect('activate', self.on_mi_ctag_activate)
             if self.tag.is_search_tag():
                 self.mi_del = Gtk.MenuItem()
                 self.mi_del.set_label(_("Delete"))
@@ -74,6 +78,14 @@
         """Callback: show the tag editor upon request"""
         self.vmanager.open_tag_editor(self.tag)
 
+    def on_mi_ctag_activate(self, widget):
+        random_color = generate_tag_color()
+        present_color = self.tag.get_attribute('color')
+        if(present_color is not None):
+                color_remove(present_color)
+        self.tag.set_attribute('color', random_color)
+        color_add(random_color)
+
     def on_mi_del_activate(self, widget):
         """ delete a selected search """
         self.req.remove_tag(self.tag.get_name())

=== modified file 'GTG/gtk/browser/tag_editor.py'
--- GTG/gtk/browser/tag_editor.py	2014-01-15 10:40:09 +0000
+++ GTG/gtk/browser/tag_editor.py	2014-02-26 18:23:44 +0000
@@ -32,6 +32,7 @@
 from GTG import _
 from GTG.gtk.browser.simple_color_selector import SimpleColorSelector
 from GTG.tools.logger import Log
+from GTG.gtk.colors import color_add, color_remove
 
 
 class TagIconSelector(Gtk.Window):
@@ -469,6 +470,13 @@
         """Callback: update the tag color depending on the current color
         selection"""
         color = self.tc_cc_colsel.get_selected_color()
+        if (color is None):
+                color_remove(self.tag.get_attribute('color'))
+        else:
+                my_color = Gdk.color_parse(color)
+                color = Gdk.Color(my_color.red, my_color.green, my_color.blue).to_string()
+                color_add(color)
+
         if self.tag is not None:
             if color is not None:
                 self.tag.set_attribute('color', color)

=== modified file 'GTG/gtk/browser/treeview_factory.py'
--- GTG/gtk/browser/treeview_factory.py	2013-11-25 02:37:46 +0000
+++ GTG/gtk/browser/treeview_factory.py	2014-02-26 18:23:44 +0000
@@ -77,9 +77,7 @@
         search_parent = self.req.get_tag(CoreConfig.SEARCH_TAG)
         for search_tag in search_parent.get_children():
             tag = self.req.get_tag(search_tag)
-            match = search_filter(node,
-                                  parse_search_query(
-                                  tag.get_attribute('query')))
+            match = search_filter(node, parse_search_query(tag.get_attribute('query')))
             if match and search_tag not in tags:
                 tags.append(tag)
 

=== modified file 'GTG/gtk/colors.py'
--- GTG/gtk/colors.py	2013-11-25 02:37:46 +0000
+++ GTG/gtk/colors.py	2014-02-26 18:23:44 +0000
@@ -19,10 +19,12 @@
 
 from gi.repository import Gdk
 from functools import reduce
-
+import random
 # Take list of Tags and give the background color that should be applied
 # The returned color might be None (in which case, the default is used)
 
+used_color = []
+
 
 def background_color(tags, bgcolor=None):
     if not bgcolor:
@@ -35,6 +37,8 @@
     blue = 0
     for my_tag in tags:
         my_color_str = my_tag.get_attribute("color")
+        if my_color_str is not None and my_color_str not in used_color:
+            used_color.append(my_color_str)
         if my_color_str:
             my_color = Gdk.color_parse(my_color_str)
             color_count = color_count + 1
@@ -90,4 +94,30 @@
         tags_txt = reduce(lambda a, b: a + ", " + b, tag_markups)
     return tags_txt
 
+
+def generate_tag_color():
+
+    maxvalue = 65535
+    flag = 0
+    while(flag == 0):
+        red = random.randint(0, maxvalue)
+        green = random.randint(0, maxvalue)
+        blue = random.randint(0, maxvalue)
+        my_color = Gdk.Color(red, green, blue).to_string()
+        if my_color not in used_color:
+            flag = 1
+    used_color.append(my_color)
+    return my_color
+
+
+def color_add(present_color):
+
+    if present_color not in used_color:
+        used_color.append(present_color)
+
+
+def color_remove(present_color):
+
+    if present_color in used_color:
+        used_color.remove(present_color)
 # -----------------------------------------------------------------------------


Follow ups