[tasque] Highlight overdue tasks red, and tasks due today blue (#563748)



commit a521a82f49ebb7e2d49d464bb236313c64d406fd
Author: Sandy Armstrong <sanfordarmstrong gmail com>
Date:   Sat Sep 19 07:46:33 2009 -0700

    Highlight overdue tasks red, and tasks due today blue (#563748)
    
    Colors are customizable, but currently do not interact with theme
    preferences in any way.  Completed tasks are always grey.
    
    Thanks to Steve George for helping with this patch.
    
    Signed-off-by: Sandy Armstrong <sanfordarmstrong gmail com>

 src/Preferences.cs       |    8 +++-
 src/PreferencesDialog.cs |  129 ++++++++++++++++++++++++++++++++++++++++++++-
 src/TaskTreeView.cs      |   16 +++++-
 3 files changed, 148 insertions(+), 5 deletions(-)
---
diff --git a/src/Preferences.cs b/src/Preferences.cs
index 26653d5..874d1b3 100644
--- a/src/Preferences.cs
+++ b/src/Preferences.cs
@@ -48,7 +48,9 @@ namespace Tasque
 		public const string InactivateTimeoutKey = "InactivateTimeout";
 		public const string SelectedCategoryKey = "SelectedCategory";
 		public const string ParseDateEnabledKey = "ParseDateEnabled";
-		
+		public const string TodayTaskTextColor = "TodayTaskTextColor";
+		public const string OverdueTaskTextColor = "OverdueTaskTextColor";
+
 		/// <summary>
 		/// A list of category names to show in the TaskWindow when the "All"
 		/// category is selected.
@@ -105,6 +107,10 @@ namespace Tasque
 			switch (settingKey) {
 			case ParseDateEnabledKey:
 				return true.ToString ();
+			case TodayTaskTextColor:
+				return "#181AB7";
+			case OverdueTaskTextColor:
+				return "#EB3320";
 			default:
 				return null;
 			}
diff --git a/src/PreferencesDialog.cs b/src/PreferencesDialog.cs
index 969fc41..3fe06b8 100644
--- a/src/PreferencesDialog.cs
+++ b/src/PreferencesDialog.cs
@@ -53,6 +53,15 @@ namespace Tasque
 		Gtk.TreeModelFilter		filteredCategories;
 		List<string>			categoriesToHide;
 		Gtk.TreeView			categoriesTree;
+
+		//
+		// Appearance Page Widgets
+		//
+		Gtk.Widget appearancePage;
+		Gtk.Entry txtTodaysTaskColor;
+		Gtk.ColorButton btnChangeTodaysTaskColor;
+		Gtk.Entry txtOverdueTaskColor;
+		Gtk.ColorButton btnChangeOverdueTaskColor;
 		
 		//
 		// Backend Page Widgets
@@ -105,7 +114,15 @@ namespace Tasque
 			generalPageId =
 				notebook.AppendPage (generalPage,
 									 new Label (Catalog.GetString ("General")));
-			
+
+			//
+			// Appearance Page
+			//
+			appearancePage = MakeAppearancePage ();
+			appearancePage.Show ();
+			notebook.AppendPage (appearancePage,
+			                     new Label (Catalog.GetString ("Appearance")));
+
 			//
 			// Backend Page
 			//
@@ -131,7 +148,87 @@ namespace Tasque
 
 			DeleteEvent += WindowDeleted;
 		}
-		
+
+		private Gtk.Widget MakeAppearancePage ()
+		{
+			VBox vbox = new VBox (false, 6);
+			vbox.BorderWidth = 10;
+
+			VBox sectionVBox = new VBox (false, 4);
+			Label l = new Label ();
+			l.Markup = string.Format ("<span size=\"large\" weight=\"bold\">{0}</span>",
+			                          Catalog.GetString ("Color Management"));
+			l.UseUnderline = false;
+			l.UseMarkup = true;
+			l.Wrap = false;
+			l.Xalign = 0;
+
+			l.Show ();
+			sectionVBox.PackStart (l, false, false, 0);
+
+			HBox hbox = new HBox (false, 6);
+			Label lblTodaysTaskColor = new Label ();
+			lblTodaysTaskColor.Text = Catalog.GetString ("Today:");
+			lblTodaysTaskColor.Xalign = 0;
+			lblTodaysTaskColor.WidthRequest = 75;
+			lblTodaysTaskColor.Show ();
+
+			Preferences prefs = Application.Preferences;
+			txtTodaysTaskColor = new Entry();
+			txtTodaysTaskColor.Text = prefs.Get (Preferences.TodayTaskTextColor);
+			txtTodaysTaskColor.Changed += OnTxtTodaysTaskColorChanged;
+			txtTodaysTaskColor.Show ();
+
+			btnChangeTodaysTaskColor = new ColorButton();
+			string todayTasksColor = prefs.Get (Preferences.TodayTaskTextColor);
+			Gdk.Color currentColor = new Gdk.Color();
+			Gdk.Color.Parse (todayTasksColor, ref currentColor);
+			btnChangeTodaysTaskColor.Color = currentColor;
+
+			btnChangeTodaysTaskColor.ColorSet += OnBtnChangeTodaysTaskColorColorSet;
+			btnChangeTodaysTaskColor.Show ();
+
+			hbox.PackStart (lblTodaysTaskColor, false, false, 0);
+			hbox.PackStart (txtTodaysTaskColor, false, false, 0);
+			hbox.PackStart (btnChangeTodaysTaskColor, false, false, 0);
+			hbox.Show ();
+
+			HBox hbox2 = new HBox (false, 6);
+
+			Label lblOverdueTaskColor = new Label ();
+			lblOverdueTaskColor.Text = Catalog.GetString ("Overdue:");
+			lblOverdueTaskColor.WidthRequest = 75;
+			lblOverdueTaskColor.Xalign = 0;
+			lblOverdueTaskColor.Show ();
+
+			txtOverdueTaskColor = new Entry();
+			txtOverdueTaskColor.Text = prefs.Get (Preferences.OverdueTaskTextColor);
+			txtOverdueTaskColor.Changed += OnTxtOverdueTaskColorChanged;
+			txtOverdueTaskColor.Show ();
+
+			btnChangeOverdueTaskColor = new ColorButton();
+			string overdueTasksColor = prefs.Get (Preferences.OverdueTaskTextColor);
+			Gdk.Color overdueColor = new Gdk.Color();
+			Gdk.Color.Parse (overdueTasksColor, ref overdueColor);
+			btnChangeOverdueTaskColor.Color = overdueColor;
+
+			btnChangeOverdueTaskColor.ColorSet += OnBtnChangeOverdueTaskColorColorSet;
+			btnChangeOverdueTaskColor.Show();
+
+			hbox2.PackStart (lblOverdueTaskColor, false, false, 0);
+			hbox2.PackStart (txtOverdueTaskColor, false, false, 0);
+			hbox2.PackStart (btnChangeOverdueTaskColor, false, false, 0);
+			hbox2.Show ();
+
+			sectionVBox.PackStart (hbox, false, false, 0);
+			sectionVBox.PackStart (hbox2, false, false, 0);
+			sectionVBox.Show();
+
+			vbox.PackStart (sectionVBox, false, false, 0);
+
+			return vbox;
+		}
+
 		private Gtk.Widget MakeGeneralPage ()
 		{
 			VBox vbox = new VBox (false, 6);
@@ -292,7 +389,33 @@ namespace Tasque
 					showCompletedTasksCheckButton.Active);
 			};
 		}
-		
+
+		private void OnBtnChangeTodaysTaskColorColorSet (object sender, EventArgs args)
+		{
+			txtTodaysTaskColor.Text =
+				Utilities.ColorGetHex (btnChangeTodaysTaskColor.Color).ToUpper ();
+		}
+
+		private void OnTxtTodaysTaskColorChanged (object sender, EventArgs args)
+		{
+			// Save the user preference
+			Application.Preferences.Set (Preferences.TodayTaskTextColor,
+			                             ((Entry) sender).Text);
+		}
+
+		private void OnBtnChangeOverdueTaskColorColorSet(object sender, EventArgs args)
+		{
+			txtOverdueTaskColor.Text =
+				Utilities.ColorGetHex (btnChangeOverdueTaskColor.Color).ToUpper ();
+		}
+
+		private void OnTxtOverdueTaskColorChanged (object sender, EventArgs args)
+		{
+			// Save the user preference
+			Application.Preferences.Set (Preferences.OverdueTaskTextColor,
+			                             ((Entry) sender).Text);
+		}
+
 		private void OnBackendComboBoxChanged (object sender, EventArgs args)
 		{
 			if (selectedBackend >= 0) {
diff --git a/src/TaskTreeView.cs b/src/TaskTreeView.cs
index 86aa08c..202ca61 100644
--- a/src/TaskTreeView.cs
+++ b/src/TaskTreeView.cs
@@ -384,6 +384,19 @@ namespace Tasque
 			}
 			
 			string formatString = "{0}";
+
+			Preferences prefs = Application.Preferences;
+			string todayTasksColor = prefs.Get (Preferences.TodayTaskTextColor);
+			string overdueTaskColor = prefs.Get (Preferences.OverdueTaskTextColor);
+
+			if (task.IsComplete)
+				; // Completed tasks colored below
+			else if (task.DueDate.Date == DateTime.Today.Date)
+				crt.Foreground = todayTasksColor;
+			// Overdue and the task has a date assigned to it.
+			else if (task.DueDate < DateTime.Today && task.DueDate != DateTime.MinValue)
+				crt.Foreground = overdueTaskColor;
+
 			switch (task.State) {
 			case TaskState.Inactive:
 				// Strikeout the text
@@ -394,7 +407,8 @@ namespace Tasque
 				// Gray out the text and add strikeout
 				// TODO: Determine the grayed-out text color appropriate for the current theme
 				formatString =
-					"<span foreground=\"#AAAAAA\" strikethrough=\"true\">{0}</span>";
+					"<span strikethrough=\"true\">{0}</span>";
+				crt.Foreground = "#AAAAAA";
 				break;
 			}
 			



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]