|
From: <si...@us...> - 2008-07-29 23:53:38
|
Revision: 530
http://osmo-pim.svn.sourceforge.net/osmo-pim/?rev=530&view=rev
Author: silloz
Date: 2008-07-29 23:53:47 +0000 (Tue, 29 Jul 2008)
Log Message:
-----------
* Improved birthdays browser
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/contacts_birthdays.c
trunk/src/contacts_birthdays.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-07-29 19:04:26 UTC (rev 529)
+++ trunk/ChangeLog 2008-07-29 23:53:47 UTC (rev 530)
@@ -1,5 +1,6 @@
2008-xx-xx: version 0.2.4
+ * Improved birthdays browser
* Option to save data after every modification
2008-07-22: version 0.2.2
Modified: trunk/src/contacts_birthdays.c
===================================================================
--- trunk/src/contacts_birthdays.c 2008-07-29 19:04:26 UTC (rev 529)
+++ trunk/src/contacts_birthdays.c 2008-07-29 23:53:47 UTC (rev 530)
@@ -146,14 +146,14 @@
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
GtkWidget *scrolledwindow;
-gint i, n, id;
-guint32 date, age;
-gchar *text, buffer[BUFFER_SIZE];
+gint i, n, id, age;
+guint32 date;
+gchar *text, buffer[BUFFER_SIZE], buff[BUFFER_SIZE];
GtkTreeIter iter, n_iter;
GDate *cdate_birthday, *cdate_current;
guint b_day, b_month, b_year;
guint c_day, c_month, c_year;
-gboolean flag;
+gboolean flag, leap;
cdate_birthday = g_date_new ();
g_return_if_fail (cdate_birthday != NULL);
@@ -175,7 +175,7 @@
appGUI->cnt->birthdays_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (appGUI->cnt->birthdays_window), _("Birthdays list"));
gtk_window_set_position (GTK_WINDOW (appGUI->cnt->birthdays_window), GTK_WIN_POS_CENTER_ON_PARENT);
- gtk_window_set_default_size (GTK_WINDOW (appGUI->cnt->birthdays_window), 450, 600);
+ gtk_window_set_default_size (GTK_WINDOW (appGUI->cnt->birthdays_window), 650, 600);
gtk_window_set_modal (GTK_WINDOW (appGUI->cnt->birthdays_window), TRUE);
g_signal_connect (G_OBJECT (appGUI->cnt->birthdays_window), "delete_event",
G_CALLBACK (birthdays_window_close_cb), appGUI);
@@ -196,10 +196,11 @@
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
appGUI->cnt->birthdays_list_store = gtk_list_store_new (BIRTHDAYS_NUM_COLUMNS,
- G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
+ G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING,
+ G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
appGUI->cnt->birthdays_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (appGUI->cnt->birthdays_list_store));
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), FALSE);
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), config.contacts_rules_hint);
gtk_widget_show (appGUI->cnt->birthdays_list);
GTK_WIDGET_SET_FLAGS (appGUI->cnt->birthdays_list, GTK_CAN_DEFAULT);
gtk_container_add (GTK_CONTAINER (scrolledwindow), appGUI->cnt->birthdays_list);
@@ -211,25 +212,40 @@
/* create columns */
renderer = gtk_cell_renderer_text_new ();
- g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ g_object_set (G_OBJECT (renderer), "xpad", 8, NULL);
column = gtk_tree_view_column_new_with_attributes (_("Name"), renderer, "text", B_COLUMN_NAME, NULL);
gtk_tree_view_column_set_visible (column, TRUE);
gtk_tree_view_column_set_expand (column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column);
+ gtk_tree_view_column_set_sort_column_id (column, B_COLUMN_NAME);
renderer = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Days to birthday"), renderer, "text", B_COLUMN_DAYS_NUM, NULL);
+ gtk_tree_view_column_set_visible (column, FALSE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column);
+
+ renderer = gtk_cell_renderer_text_new ();
+ g_object_set (G_OBJECT (renderer), "xalign", 1.0, NULL);
+ g_object_set (G_OBJECT (renderer), "xpad", 8, NULL);
column = gtk_tree_view_column_new_with_attributes (_("Days to birthday"), renderer, "text", B_COLUMN_DAYS, NULL);
gtk_tree_view_column_set_visible (column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column);
- gtk_tree_view_column_set_sort_column_id (column, B_COLUMN_DAYS);
+ gtk_tree_view_column_set_sort_column_id (column, B_COLUMN_DAYS_NUM);
g_signal_emit_by_name (column, "clicked");
- renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (_("Age"), renderer, "text", B_COLUMN_AGE, NULL);
gtk_tree_view_column_set_visible (column, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column);
gtk_tree_view_column_set_sort_column_id (column, B_COLUMN_AGE);
+ column = gtk_tree_view_column_new_with_attributes (_("Birthday date"), renderer, "text", B_COLUMN_DATE, NULL);
+ gtk_tree_view_column_set_visible (column, TRUE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column);
+
+ column = gtk_tree_view_column_new_with_attributes (_("Zodiac sign"), renderer, "text", B_COLUMN_ZODIAC, NULL);
+ gtk_tree_view_column_set_visible (column, TRUE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW (appGUI->cnt->birthdays_list), column);
+
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("ID", renderer, "text", B_COLUMN_ID, NULL);
gtk_tree_view_column_set_visible (column, FALSE);
@@ -248,17 +264,38 @@
gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_BIRTH_DAY_DATE, &date, -1);
if (g_date_valid_julian (date)) {
+
+ /* calculate age */
+ g_date_set_julian (cdate_birthday, date);
+ b_day = g_date_get_day (cdate_birthday);
+ b_month = g_date_get_month (cdate_birthday);
+ b_year = g_date_get_year (cdate_birthday);
+
+ age = (gint) c_year - b_year;
+ if (b_month < c_month || (b_month == c_month && b_day < c_day)) age++;
+
+ if (age < 1) continue;
+
+ /* name */
flag = FALSE;
+ g_snprintf (buff, BUFFER_SIZE, "(%s)", _("None"));
- gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_FIRST_NAME, &text, -1);
+ gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_LAST_NAME, &text, -1);
if (text != NULL) {
+ flag = TRUE;
+ if (strcmp (text, buff) == 0) {
+ text[0] = '\0';
+ flag = FALSE;
+ }
g_strlcpy (buffer, text, BUFFER_SIZE);
g_free (text);
- flag = TRUE;
}
- gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_LAST_NAME, &text, -1);
+ gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_FIRST_NAME, &text, -1);
if (text != NULL) {
+ if (strcmp (text, buff) == 0) {
+ text[0] = '\0';
+ }
if (flag == TRUE) {
g_strlcat (buffer, " ", BUFFER_SIZE);
g_strlcat (buffer, text, BUFFER_SIZE);
@@ -270,26 +307,33 @@
gtk_tree_model_get (GTK_TREE_MODEL (appGUI->cnt->contacts_list_store), &iter, COLUMN_ID, &id, -1);
gtk_list_store_append (appGUI->cnt->birthdays_list_store, &n_iter);
- gtk_list_store_set (appGUI->cnt->birthdays_list_store, &n_iter, B_COLUMN_NAME, buffer, B_COLUMN_ID, id, -1);
+ gtk_list_store_set (appGUI->cnt->birthdays_list_store, &n_iter,
+ B_COLUMN_ID, id, B_COLUMN_NAME, buffer, B_COLUMN_AGE, age, -1);
- /* calculate age */
- g_date_set_julian (cdate_birthday, date);
- b_day = g_date_get_day (cdate_birthday);
- b_month = g_date_get_month (cdate_birthday);
- b_year = g_date_get_year (cdate_birthday);
-
- age = c_year - b_year;
- if (b_month < c_month || (b_month == c_month && b_day < c_day)) age++;
- gtk_list_store_set (appGUI->cnt->birthdays_list_store, &n_iter, B_COLUMN_AGE, age, -1);
-
/* calculate days to birthday */
b_year = c_year;
if ((b_month < c_month) || (b_month == c_month && b_day < c_day)) b_year++;
- if (g_date_valid_dmy (b_day, b_month, b_year) == FALSE) g_date_set_day (cdate_birthday, b_day - 1);
+
+ leap = FALSE;
+ if (g_date_valid_dmy (b_day, b_month, b_year) == FALSE) {
+ g_date_set_day (cdate_birthday, b_day - 1);
+ leap = TRUE;
+ }
g_date_set_year (cdate_birthday, b_year);
date = g_date_days_between (cdate_current, cdate_birthday);
- gtk_list_store_set (appGUI->cnt->birthdays_list_store, &n_iter, B_COLUMN_DAYS, date, -1);
+ if (date == 0) {
+ g_snprintf (buffer, BUFFER_SIZE, "%s", _("today"));
+ } else {
+ g_snprintf (buffer, BUFFER_SIZE, leap ? "%d + 1" : "%d", date);
+ }
+
+ g_date_strftime (buff, BUFFER_SIZE, "%A, ", cdate_birthday);
+ g_strlcat (buff, julian_to_str (g_date_get_julian (cdate_birthday), config.date_format), BUFFER_SIZE);
+
+ gtk_list_store_set (appGUI->cnt->birthdays_list_store, &n_iter,
+ B_COLUMN_DAYS_NUM, date, B_COLUMN_DAYS, buffer,
+ B_COLUMN_DATE, buff, B_COLUMN_ZODIAC, get_zodiac_name (b_day, b_month), -1);
}
}
Modified: trunk/src/contacts_birthdays.h
===================================================================
--- trunk/src/contacts_birthdays.h 2008-07-29 19:04:26 UTC (rev 529)
+++ trunk/src/contacts_birthdays.h 2008-07-29 23:53:47 UTC (rev 530)
@@ -26,8 +26,11 @@
enum {
B_COLUMN_NAME = 0,
+ B_COLUMN_DAYS_NUM,
B_COLUMN_DAYS,
B_COLUMN_AGE,
+ B_COLUMN_DATE,
+ B_COLUMN_ZODIAC,
B_COLUMN_ID,
BIRTHDAYS_NUM_COLUMNS
};
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|