diff -ru planner-0.14.4.orig/libplanner/mrp-calendar.c planner-0.14.4/libplanner/mrp-calendar.c
--- planner-0.14.4.orig/libplanner/mrp-calendar.c 2008-07-22 14:41:46.000000000 +0100
+++ planner-0.14.4/libplanner/mrp-calendar.c 2009-12-12 17:08:50.000000000 +0000
@@ -159,9 +159,10 @@
g_object_class_install_property (object_class,
PROP_PROJECT,
- g_param_spec_pointer ("project",
+ g_param_spec_object ("project",
"Project",
"The project this calendar belongs to",
+ G_TYPE_OBJECT,
G_PARAM_READWRITE));
imrp_day_setup_defaults ();
@@ -254,7 +255,7 @@
mrp_calendar_set_name (calendar, g_value_get_string (value));
break;
case PROP_PROJECT:
- priv->project = MRP_PROJECT (g_value_get_pointer (value));
+ priv->project = g_value_get_object (value);
break;
default:
break;
diff -ru planner-0.14.4.orig/src/planner-calendar.c planner-0.14.4/src/planner-calendar.c
--- planner-0.14.4.orig/src/planner-calendar.c 2009-12-14 08:55:30.000000000 +0000
+++ planner-0.14.4/src/planner-calendar.c 2009-12-13 15:47:15.000000000 +0000
@@ -180,10 +180,8 @@
#define HEADER_BG_COLOR(widget) (& (widget)->style->bg[GTK_WIDGET_STATE (widget)])
#define SELECTED_BG_COLOR(widget) (& (widget)->style->base[GTK_WIDGET_HAS_FOCUS (widget) ? GTK_STATE_SELECTED : GTK_STATE_ACTIVE])
#define SELECTED_FG_COLOR(widget) (& (widget)->style->text[GTK_WIDGET_HAS_FOCUS (widget) ? GTK_STATE_SELECTED : GTK_STATE_ACTIVE])
-#define NORMAL_DAY_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
#define PREV_MONTH_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
#define NEXT_MONTH_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
-#define MARKED_COLOR(widget) (& (widget)->style->fg[GTK_WIDGET_STATE (widget)])
#define BACKGROUND_COLOR(widget) (& (widget)->style->base[GTK_WIDGET_STATE (widget)])
#define HIGHLIGHT_BACK_COLOR(widget) (& (widget)->style->mid[GTK_WIDGET_STATE (widget)])
@@ -430,6 +428,25 @@
G_TYPE_NONE, 0);
}
+/* Tango palette */
+static const GdkColor tango_palette[14] =
+{
+ { 0, 0xcccc, 0x0000, 0x0000 },
+ { 0, 0x4e4e, 0x9a9a, 0x0606 },
+ { 0, 0xc4c4, 0xa0a0, 0x0000 },
+ { 0, 0x3434, 0x6565, 0xa4a4 },
+ { 0, 0x7575, 0x5050, 0x7b7b },
+ { 0, 0x0606, 0x9820, 0x9a9a },
+ { 0, 0x5555, 0x5757, 0x5353 },
+ { 0, 0xefef, 0x2929, 0x2929 },
+ { 0, 0x8a8a, 0xe2e2, 0x3434 },
+ { 0, 0xfcfc, 0xe9e9, 0x4f4f },
+ { 0, 0x7272, 0x9f9f, 0xcfcf },
+ { 0, 0xadad, 0x7f7f, 0xa8a8 },
+ { 0, 0x3434, 0xe2e2, 0xe2e2 },
+ { 0, 0xeeee, 0xeeee, 0xecec }
+};
+
static void
planner_calendar_init (PlannerCalendar *calendar)
{
@@ -470,8 +487,11 @@
calendar->year = 1900 + tm->tm_year;
for (i=0;i<31;i++)
- calendar->marked_date[i] = PLANNER_CALENDAR_MARK_NONE;
- calendar->num_marked_dates = 0;
+ calendar->marked_date[i] = NULL;
+
+ for (i=0;i<14;i++)
+ calendar->mark_colors[i] = tango_palette[i];
+
calendar->selected_day = tm->tm_mday;
calendar->display_flags = ( PLANNER_CALENDAR_SHOW_HEADING |
@@ -1049,6 +1069,7 @@
PlannerCalendarPrivateData *private_data;
GdkWindowAttr attributes;
gint attributes_mask;
+ gint i;
GdkGCValues values;
calendar = PLANNER_CALENDAR (widget);
@@ -1110,6 +1131,9 @@
&values,
GDK_GC_FOREGROUND |
GDK_GC_FUNCTION);
+
+ for (i=0;i<14;i++)
+ gdk_rgb_find_color(attributes.colormap, &(calendar->mark_colors[i]));
}
static void
@@ -1839,49 +1863,11 @@
gdk_draw_rectangle (private_data->main_win, gc, TRUE, x_left, y_top,
private_data->day_width, day_height);
}
- else
+ else if (calendar->marked_date[day-1])
{
- switch (calendar->marked_date[day-1]) {
- case PLANNER_CALENDAR_MARK_NONE:
- case PLANNER_CALENDAR_MARK_UNDERLINE:
- case PLANNER_CALENDAR_MARK_BOLD:
- break;
- case PLANNER_CALENDAR_MARK_SHADE:
- gdk_gc_set_foreground (gc, SHADED_BG_COLOR (GTK_WIDGET (calendar)));
- gdk_draw_rectangle (private_data->main_win, gc, TRUE, x_left, y_top,
- private_data->day_width, day_height);
- break;
- case PLANNER_CALENDAR_MARK_STRIPE:
- {
- static GdkBitmap *stripe_stipple = NULL;
- gchar stipple_pattern[] = { 2, 1, 8, 4 };
-
- if (!stripe_stipple) {
- stripe_stipple = gdk_bitmap_create_from_data (NULL,
- stipple_pattern,
- 4, 4);
- }
-
- gdk_gc_set_foreground (gc, STRIPED_BG_COLOR (GTK_WIDGET (calendar)));
- gdk_gc_set_fill (gc, GDK_STIPPLED);
- gdk_gc_set_stipple (gc, stripe_stipple);
- gdk_draw_rectangle (private_data->main_win, gc, TRUE, x_left, y_top,
- private_data->day_width, day_height);
- gdk_gc_set_fill (gc, GDK_SOLID);
- }
- break;
- }
- }
-
- switch (calendar->marked_date[day-1]) {
- case PLANNER_CALENDAR_MARK_BOLD:
- gdk_gc_set_foreground (gc, MARKED_COLOR (GTK_WIDGET (calendar)));
- break;
- case PLANNER_CALENDAR_MARK_SHADE:
- case PLANNER_CALENDAR_MARK_UNDERLINE:
- case PLANNER_CALENDAR_MARK_NONE:
- gdk_gc_set_foreground (gc, NORMAL_DAY_COLOR (GTK_WIDGET (calendar)));
- break;
+ gdk_gc_set_foreground (gc, calendar->marked_date[day-1]);
+ gdk_draw_rectangle (private_data->main_win, gc, TRUE, x_left, y_top,
+ private_data->day_width, day_height);
}
if (calendar->selected_day == day)
@@ -1901,17 +1887,6 @@
gdk_draw_layout (private_data->main_win, gc,
x_loc, y_loc, layout);
- switch (calendar->marked_date[day-1]) {
- case PLANNER_CALENDAR_MARK_BOLD:
- if (calendar->day_month[row][col] == MONTH_CURRENT)
- gdk_draw_layout (private_data->main_win, gc,
- x_loc-1, y_loc, layout);
- break;
-
- default:
- break;
- }
-
if (GTK_WIDGET_HAS_FOCUS (calendar)
&& calendar->focus_row == row && calendar->focus_col == col)
{
@@ -2257,46 +2232,6 @@
}
void
-planner_calendar_clear_marks (PlannerCalendar *calendar)
-{
- guint day;
-
- g_return_if_fail (PLANNER_IS_CALENDAR (calendar));
-
- for (day = 0; day < 31; day++)
- {
- calendar->marked_date[day] = PLANNER_CALENDAR_MARK_NONE;
- }
-
- calendar->num_marked_dates = 0;
-
- if (GTK_WIDGET_DRAWABLE (calendar))
- {
- planner_calendar_paint_main (GTK_WIDGET (calendar));
- }
-}
-
-gboolean
-planner_calendar_unmark_day (PlannerCalendar *calendar,
- guint day)
-{
- g_return_val_if_fail (PLANNER_IS_CALENDAR (calendar), FALSE);
-
- if (day >= 1 && day <= 31 && calendar->marked_date[day-1] == TRUE)
- {
- calendar->marked_date[day - 1] = FALSE;
- calendar->num_marked_dates--;
- }
-
- if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar)))
- {
- planner_calendar_paint_main (GTK_WIDGET (calendar));
- }
-
- return TRUE;
-}
-
-void
planner_calendar_get_date (PlannerCalendar *calendar,
guint *year,
guint *month,
@@ -2754,10 +2689,10 @@
/* ------------------------------- */
-void
+static void
planner_calendar_mark_day (PlannerCalendar *calendar,
guint day,
- PlannerCalendarMarkType type)
+ const GdkColor *color)
{
gint index;
@@ -2766,16 +2701,11 @@
index = day - 1;
- if (calendar->marked_date[index] == type) {
+ if (calendar->marked_date[index] == color) {
return;
}
- calendar->marked_date[index] = type;
- if (type != PLANNER_CALENDAR_MARK_NONE) {
- calendar->num_marked_dates++;
- } else {
- calendar->num_marked_dates--;
- }
+ calendar->marked_date[index] = color;
if (GTK_WIDGET_DRAWABLE (GTK_WIDGET (calendar))) {
planner_calendar_paint_main (GTK_WIDGET (calendar));
@@ -2790,9 +2720,19 @@
MrpTime *t;
mrptime time;
MrpDay *day;
+ MrpProject *project=NULL;
+ const GdkColor *color;
+ GList *daytypes;
+ gint dayindex;
planner_calendar_get_date (calendar, &y, &m, &d);
+ g_object_get (mrp_calendar, "project", &project, NULL);
+
+ daytypes = mrp_day_get_all (project);
+ daytypes = g_list_prepend (daytypes, mrp_day_get_nonwork ());
+ daytypes = g_list_prepend (daytypes, mrp_day_get_work ());
+
t = mrp_time2_new ();
mrp_time2_set_date (t, y, m+1, 1);
mrp_time2_set_time (t, 0, 0, 0);
@@ -2801,19 +2741,26 @@
time = mrp_time2_get_epoch (t);
day = mrp_calendar_get_day (mrp_calendar, time, TRUE);
+ dayindex = g_list_index (daytypes, day);
- if (day == mrp_day_get_nonwork ()) {
- planner_calendar_mark_day (calendar,
- d,
- PLANNER_CALENDAR_MARK_SHADE);
- }
- else if (day == mrp_day_get_work ()) {
- planner_calendar_mark_day (calendar,
- d,
- PLANNER_CALENDAR_MARK_NONE);
+ switch (dayindex)
+ {
+ case 0:
+ color = NULL;
+ break;
+ case 1:
+ color = SHADED_BG_COLOR (GTK_WIDGET (calendar));
+ break;
+ default:
+ color = &(calendar->mark_colors[(dayindex-2)%14]);
+ break;
}
+ planner_calendar_mark_day (calendar, d, color);
+
mrp_time2_add_days (t, 1);
}
mrp_time2_free (t);
+ g_list_free (daytypes);
+ g_object_unref (project);
}
diff -ru planner-0.14.4.orig/src/planner-calendar.h planner-0.14.4/src/planner-calendar.h
--- planner-0.14.4.orig/src/planner-calendar.h 2009-12-14 08:55:30.000000000 +0000
+++ planner-0.14.4/src/planner-calendar.h 2009-12-13 15:44:31.000000000 +0000
@@ -52,15 +52,6 @@
PLANNER_CALENDAR_SHOW_WEEK_NUMBERS = 1 << 3,
PLANNER_CALENDAR_WEEK_START_MONDAY = 1 << 4} PlannerCalendarDisplayOptions;
-typedef enum
-{
- PLANNER_CALENDAR_MARK_NONE,
- PLANNER_CALENDAR_MARK_BOLD,
- PLANNER_CALENDAR_MARK_UNDERLINE,
- PLANNER_CALENDAR_MARK_SHADE,
- PLANNER_CALENDAR_MARK_STRIPE
-} PlannerCalendarMarkType;
-
struct _PlannerCalendar
{
GtkWidget widget;
@@ -75,10 +66,9 @@
gint day_month[6][7];
gint day[6][7];
- gint num_marked_dates;
- gint marked_date[31];
+ const GdkColor *marked_date[31];
PlannerCalendarDisplayOptions display_flags;
- GdkColor marked_date_color[31];
+ GdkColor mark_colors[14];
GdkGC *gc;
GdkGC *xor_gc;
@@ -123,10 +113,6 @@
guint year);
void planner_calendar_select_day (PlannerCalendar *calendar,
guint day);
-gboolean planner_calendar_unmark_day (PlannerCalendar *calendar,
- guint day);
-void planner_calendar_clear_marks (PlannerCalendar *calendar);
-
void planner_calendar_display_options (PlannerCalendar *calendar,
PlannerCalendarDisplayOptions flags);
@@ -138,14 +124,8 @@
void planner_calendar_freeze (PlannerCalendar *calendar);
void planner_calendar_thaw (PlannerCalendar *calendar);
-
-
-void planner_calendar_mark_day (PlannerCalendar *calendar,
- guint day,
- PlannerCalendarMarkType type);
-
void planner_calendar_mark_days (PlannerCalendar *calendar,
- MrpCalendar *mrp_calendar);
+ MrpCalendar *mrp_calendar);
#endif /* __PLANNER_CALENDAR_H__ */