r3679 - in trunk/src/target/OM-2007.2/applications/openmoko-messages2: . src

chris at sita.openmoko.org chris at sita.openmoko.org
Tue Dec 18 16:05:08 CET 2007


Author: chris
Date: 2007-12-18 16:05:06 +0100 (Tue, 18 Dec 2007)
New Revision: 3679

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c
   trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h
Log:
        * src/sms-compose.c: (page_hidden):
        * src/sms-contacts.c: (page_shown), (delete_clicked_cb),
        (selection_changed_cb), (sms_contacts_update_delete_all),
        (sms_contacts_page_new):
        * src/sms-contacts.h:
        * src/sms-main.c: (main):
        * src/sms-notes.c: (page_shown), (row_inserted_cb),
        (row_deleted_cb), (selection_changed_cb), (sms_notes_page_new):
        * src/sms-utils.c: (sms_delete_selected_contact_messages),
        (sms_contacts_note_count_update):
        * src/sms-utils.h:
        Set buttons insensitive when their actions are not valid


Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog	2007-12-18 15:05:06 UTC (rev 3679)
@@ -1,5 +1,20 @@
 2007-12-18  Chris Lord  <chris at openedhand.com>
 
+	* src/sms-compose.c: (page_hidden):
+	* src/sms-contacts.c: (page_shown), (delete_clicked_cb),
+	(selection_changed_cb), (sms_contacts_update_delete_all),
+	(sms_contacts_page_new):
+	* src/sms-contacts.h:
+	* src/sms-main.c: (main):
+	* src/sms-notes.c: (page_shown), (row_inserted_cb),
+	(row_deleted_cb), (selection_changed_cb), (sms_notes_page_new):
+	* src/sms-utils.c: (sms_delete_selected_contact_messages),
+	(sms_contacts_note_count_update):
+	* src/sms-utils.h:
+	Set buttons insensitive when their actions are not valid
+
+2007-12-18  Chris Lord  <chris at openedhand.com>
+
 	* src/sms-compose.c: (text_changed_cb), (sms_compose_page_new):
 	Add a message length indicator to the composition page
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c	2007-12-18 15:05:06 UTC (rev 3679)
@@ -108,8 +108,6 @@
 	gtk_widget_set_sensitive (GTK_WIDGET (data->new_button), TRUE);
 	gtk_tool_button_set_stock_id (GTK_TOOL_BUTTON (data->new_button),
 		MOKO_STOCK_SMS_NEW);
-	gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button), TRUE);
-	gtk_widget_set_sensitive (GTK_WIDGET (data->delete_all_button), TRUE);
 }
 
 static void

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c	2007-12-18 15:05:06 UTC (rev 3679)
@@ -31,9 +31,17 @@
 
 static gboolean hidden = FALSE;
 
+static void selection_changed_cb (GtkTreeSelection *selection, SmsData *data);
+
 static void
 page_shown (SmsData *data)
 {
+	GtkTreeSelection *selection;
+	
+	/* Update delete/delete-all buttons */
+	sms_contacts_update_delete_all (data);
+	selection = gtk_tree_view_get_selection (data->contacts_treeview);
+	selection_changed_cb (selection, data);
 }
 
 static void
@@ -362,7 +370,10 @@
 {
 	if (hidden) return;
 	
-	sms_delete_selected_contact_messages (data);
+	if (sms_delete_selected_contact_messages (data)) {
+		gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button),
+			FALSE);
+	}
 }
 
 static void
@@ -521,11 +532,60 @@
 	}
 }
 
+static void
+selection_changed_cb (GtkTreeSelection *selection, SmsData *data)
+{
+	GtkTreeModel *model;
+	gboolean sensitive;
+	GtkTreeIter iter;
+	gchar *detail;
+	
+	if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+		gtk_widget_set_sensitive (GTK_WIDGET (
+			data->delete_button), FALSE);
+		return;
+	}
+	
+	/* Not the nicest way to know if there are messages, but better than 
+	 * doing multiple look-ups on the hash-tables
+	 */
+	gtk_tree_model_get (model, &iter, COL_DETAIL, &detail, -1);
+	if (!detail) {
+		sensitive = FALSE;
+	} else {
+		sensitive = TRUE;
+		if (detail[0] == '0') {
+			const gchar *next_line = strchr (detail, '\n') + 1;
+			if ((!next_line) || (next_line[0] == '0'))
+				sensitive = FALSE;
+		}
+		g_free (detail);
+	}
+
+	gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button), sensitive);
+}
+
+void
+sms_contacts_update_delete_all (SmsData *data)
+{
+	if (gtk_notebook_get_current_page (data->notebook) == SMS_PAGE_CONTACTS)
+	{
+		if (g_hash_table_size (data->note_count) > 0) {
+			gtk_widget_set_sensitive (GTK_WIDGET (
+				data->delete_all_button), TRUE);
+		} else {
+			gtk_widget_set_sensitive (GTK_WIDGET (
+				data->delete_all_button), FALSE);
+		}
+	}
+}
+
 GtkWidget *
 sms_contacts_page_new (SmsData *data)
 {
 	EBookQuery *qrys[(E_CONTACT_LAST_PHONE_ID-E_CONTACT_FIRST_PHONE_ID)+1];
 	GtkWidget *contacts_combo, *scroll, *vbox;
+	GtkTreeSelection *selection;
 	GtkCellRenderer *renderer;
 	EBookQuery *tel_query;
 	EBookView *view;
@@ -635,6 +695,11 @@
 		data->contacts_treeview), TRUE);
 	gtk_tree_view_set_headers_visible (
 		GTK_TREE_VIEW (data->contacts_treeview), FALSE);
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
+		data->contacts_treeview));
+	gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
+	g_signal_connect (selection, "changed",
+		G_CALLBACK (selection_changed_cb), data);
 	
 	/* Create renderer and column */
 	/* Slight abuse of the note cell renderer I suppose... */

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.h	2007-12-18 15:05:06 UTC (rev 3679)
@@ -33,6 +33,7 @@
 };
 
 GtkWidget *sms_contacts_page_new (SmsData *data);
+void sms_contacts_update_delete_all (SmsData *data);
 
 #endif
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c	2007-12-18 15:05:06 UTC (rev 3679)
@@ -94,12 +94,14 @@
 	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data.delete_all_button, 1);
 	/*gtk_toolbar_insert (GTK_TOOLBAR (toolbar),
 		gtk_separator_tool_item_new (), 3);*/
+	gtk_widget_set_sensitive (GTK_WIDGET (data.delete_all_button), FALSE);
 	
 	/* Delete button */
 	data.delete_button = gtk_tool_button_new_from_stock (
 		GTK_STOCK_DELETE);
 	gtk_tool_item_set_expand (data.delete_button, TRUE);
 	gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data.delete_button, 2);
+	gtk_widget_set_sensitive (GTK_WIDGET (data.delete_button), FALSE);
 	
 	/* Create notebook */
 	data.notebook = gtk_notebook_new ();

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c	2007-12-18 15:05:06 UTC (rev 3679)
@@ -142,6 +142,8 @@
 	gboolean found_match = FALSE;
 	EContact *contact = NULL;
 	
+	gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button), FALSE);
+	
 	if (!open) return;
 	
 	/* Attach to scrolling signals so we can mark messages as read */
@@ -622,6 +624,38 @@
 	}
 }
 
+static void
+row_inserted_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter,
+		 SmsData *data)
+{
+	gtk_widget_set_sensitive (GTK_WIDGET (data->delete_all_button), TRUE);
+}
+
+static void
+row_deleted_cb (GtkTreeModel *model, GtkTreePath *path, SmsData *data)
+{
+	GtkTreeIter iter;
+	
+	if (!gtk_tree_model_get_iter_first (model, &iter))
+		gtk_widget_set_sensitive (GTK_WIDGET (
+			data->delete_all_button), FALSE);
+}
+
+static void
+selection_changed_cb (GtkTreeSelection *selection, SmsData *data)
+{
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	
+	if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+		gtk_widget_set_sensitive (GTK_WIDGET (
+			data->delete_button), FALSE);
+	} else {
+		gtk_widget_set_sensitive (GTK_WIDGET (
+			data->delete_button), TRUE);
+	}
+}
+
 GtkWidget *
 sms_notes_page_new (SmsData *data)
 {
@@ -650,6 +684,10 @@
 	gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter *)
 		data->note_filter, (GtkTreeModelFilterVisibleFunc)
 		notes_visible_func, data, NULL);
+	g_signal_connect (data->note_filter, "row-inserted",
+		G_CALLBACK (row_inserted_cb), data);
+	g_signal_connect (data->note_filter, "row-deleted",
+		G_CALLBACK (row_deleted_cb), data);
 	
 	/* Create a category-colour hash for the cell renderer */
 	colours_hash = g_hash_table_new (g_str_hash, g_str_equal);
@@ -665,6 +703,9 @@
 	gtk_tree_view_insert_column_with_data_func (
 		GTK_TREE_VIEW (data->notes_treeview), 0, "Messages", renderer,
 		(GtkTreeCellDataFunc)sms_notes_data_func, data, NULL);
+	g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (
+		data->notes_treeview)), "changed",
+		G_CALLBACK (selection_changed_cb), data);
 	
 	/* Create search bar */
 	notes_combo = gtk_combo_box_new_text ();

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.c	2007-12-18 15:05:06 UTC (rev 3679)
@@ -61,7 +61,7 @@
 	return contact;
 }
 
-void
+gboolean
 sms_delete_selected_contact_messages (SmsData *data)
 {
 	EContact *contact;
@@ -79,7 +79,7 @@
 	
 	if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_YES) {
 		gtk_widget_destroy (dialog);
-		return;
+		return FALSE;
 	}
 	
 	gtk_widget_destroy (dialog);
@@ -128,6 +128,8 @@
 				data->unassigned_notes, data->unassigned_notes);
 		}
 	}
+	
+	return TRUE;
 }
 
 /* Following two functions taken from pimlico Contacts and modified slightly */
@@ -216,6 +218,9 @@
 	
 	data->note_count_idle = 0;
 
+	/* Update the delete-all button if we're on the contacts page */
+	sms_contacts_update_delete_all (data);
+
 	/* Change sort column so changing priorities doesn't break iterating 
 	 * through the model.
 	 */

Modified: trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h	2007-12-18 12:18:10 UTC (rev 3678)
+++ trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-utils.h	2007-12-18 15:05:06 UTC (rev 3679)
@@ -26,6 +26,6 @@
 EContact *sms_get_selected_contact (SmsData *data);
 GdkPixbuf *sms_contact_load_photo (EContact *contact);
 gboolean sms_contacts_note_count_update (SmsData *data);
-void sms_delete_selected_contact_messages (SmsData *data);
+gboolean sms_delete_selected_contact_messages (SmsData *data);
 
 #endif /* SMS_UTILS_H */





More information about the commitlog mailing list