Pan view calendar - show day-of-week legend
authorColin Clark <colin.clark@cclark.uk>
Sun, 27 May 2018 16:57:58 +0000 (17:57 +0100)
committerColin Clark <colin.clark@cclark.uk>
Sun, 27 May 2018 16:57:58 +0000 (17:57 +0100)
src/misc.c
src/misc.h
src/pan-view/pan-calendar.c

index 9aa9c4e..aee59c8 100644 (file)
@@ -252,5 +252,46 @@ gint date_get_first_day_of_week()
        return nl_langinfo(_NL_TIME_FIRST_WEEKDAY)[0];
 }
 
+/**
+ * @brief Get an abbreviated day name from locale
+ * @param day Integer in range 1 to 7, representing day of week
+ * @returns String containing abbreviated day name
+ * 
+ *  Uses current locale to get day name
+ * 
+ * Sunday == 1
+ * Result must be freed
+ */
+gchar *date_get_abbreviated_day_name(gint day)
+{
+       gchar *abday = NULL;
+
+       switch (day)
+               {
+               case 1:
+               abday = g_strdup(nl_langinfo(ABDAY_1));
+               break;
+               case 2:
+               abday = g_strdup(nl_langinfo(ABDAY_2));
+               break;
+               case 3:
+               abday = g_strdup(nl_langinfo(ABDAY_3));
+               break;
+               case 4:
+               abday = g_strdup(nl_langinfo(ABDAY_4));
+               break;
+               case 5:
+               abday = g_strdup(nl_langinfo(ABDAY_5));
+               break;
+               case 6:
+               abday = g_strdup(nl_langinfo(ABDAY_6));
+               break;
+               case 7:
+               abday = g_strdup(nl_langinfo(ABDAY_7));
+               break;
+               }
+
+       return abday;
+}
 
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index c9cf35b..ca5f4b1 100644 (file)
@@ -28,5 +28,6 @@ gchar *expand_tilde(const gchar *filename);
 int runcmd(gchar *cmd);
 gchar *decode_geo_parameters(const gchar *input_text);
 gint date_get_first_day_of_week();
+gchar *date_get_abbreviated_day_name(gint day);
 #endif /* MISC_H */
 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */
index 004a045..0f7a4b1 100644 (file)
@@ -56,6 +56,7 @@
 #define PAN_CAL_DOT_COLOR 128, 128, 128
 #define PAN_CAL_DOT_ALPHA 128
 
+#define PAN_CAL_DAY_OF_WEEK_COLOR 128, 128, 128
 
 /*
  *-----------------------------------------------------------------------------
@@ -200,6 +201,7 @@ void pan_calendar_compute(PanWindow *pw, FileData *dir_fd, gint *width, gint *he
        gint month = 0;
        gint end_year = 0;
        gint end_month = 0;
+       gint day_of_week;
 
        list = pan_list_tree(dir_fd, SORT_NONE, TRUE, pw->ignore_symlinks);
        pan_filter_fd_list(&list, pw->filter_ui->filter_elements);
@@ -268,6 +270,7 @@ void pan_calendar_compute(PanWindow *pw, FileData *dir_fd, gint *width, gint *he
                {
                PanItem *pi_month;
                PanItem *pi_text;
+               PanItem *pi_day_number;
                gint day;
                gint days;
                gint col;
@@ -391,11 +394,19 @@ void pan_calendar_compute(PanWindow *pw, FileData *dir_fd, gint *width, gint *he
                                }
 
                        buf = g_strdup_printf("%d", day);
-                       pan_item_text_new(pw, x + 4, y + 4, buf, PAN_TEXT_ATTR_BOLD | PAN_TEXT_ATTR_HEADING,
+                       pi_day_number = pan_item_text_new(pw, x + 4, y + 4, buf, PAN_TEXT_ATTR_BOLD | PAN_TEXT_ATTR_HEADING,
                                          PAN_TEXT_BORDER_SIZE,
                                          PAN_CAL_DAY_TEXT_COLOR, 255);
                        g_free(buf);
 
+                       day_of_week = date_get_first_day_of_week() + col;
+                       if (day_of_week > 7) day_of_week = day_of_week - 7;
+
+                       buf = date_get_abbreviated_day_name(day_of_week);
+                       pan_item_text_new(pw, x + 4 + pi_day_number->width + 4, y + 4, buf, PAN_TEXT_ATTR_NONE,
+                                         PAN_TEXT_BORDER_SIZE,
+                                         PAN_CAL_DAY_OF_WEEK_COLOR, 255);
+                       g_free(buf);
 
                        pan_item_size_coordinates(pi_day, PAN_BOX_BORDER, width, height);