changeset 2762:735a3fbc4b28

Pan view calendar - show day-of-week legend
author Colin Clark <colin.clark@cclark.uk>
date Sun, 27 May 2018 17:57:58 +0100
parents 031705583caf
children 5e4e640df4d8
files src/misc.c src/misc.h src/pan-view/pan-calendar.c
diffstat 3 files changed, 54 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/misc.c	Sun May 27 10:45:10 2018 +0100
+++ b/src/misc.c	Sun May 27 17:57:58 2018 +0100
@@ -252,5 +252,46 @@
 	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: */
--- a/src/misc.h	Sun May 27 10:45:10 2018 +0100
+++ b/src/misc.h	Sun May 27 17:57:58 2018 +0100
@@ -28,5 +28,6 @@
 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: */
--- a/src/pan-view/pan-calendar.c	Sun May 27 10:45:10 2018 +0100
+++ b/src/pan-view/pan-calendar.c	Sun May 27 17:57:58 2018 +0100
@@ -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 @@
 	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 @@
 		{
 		PanItem *pi_month;
 		PanItem *pi_text;
+		PanItem *pi_day_number;
 		gint day;
 		gint days;
 		gint col;
@@ -391,11 +394,19 @@
 				}
 
 			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);