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__ */