r4224 - in trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src/dialer
thomas at sita.openmoko.org
thomas at sita.openmoko.org
Wed Mar 19 16:00:54 CET 2008
Author: thomas
Date: 2008-03-19 16:00:53 +0100 (Wed, 19 Mar 2008)
New Revision: 4224
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/dialer/moko-history.c
Log:
2008-03-19 Thomas Wood <thomas at openedhand.com>
* src/dialer/moko-history.c: Add a "Save" button to the call log window
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog 2008-03-19 11:04:27 UTC (rev 4223)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog 2008-03-19 15:00:53 UTC (rev 4224)
@@ -1,3 +1,7 @@
+2008-03-19 Thomas Wood <thomas at openedhand.com>
+
+ * src/dialer/moko-history.c: Add a "Save" button to the call log window
+
2008-03-07 Chia-I Wu <olv at openmoko.com>
* src/common/moko-contacts.c (moko_contacts_init): Create addressbook
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/dialer/moko-history.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/dialer/moko-history.c 2008-03-19 11:04:27 UTC (rev 4223)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/dialer/moko-history.c 2008-03-19 15:00:53 UTC (rev 4224)
@@ -60,10 +60,26 @@
"moko-history-call-out",
"moko-history-call-missed"};
static GdkPixbuf *icons[N_CALL_TYPES] = {NULL, NULL, NULL};
-
+
+struct _SaveButtonInfo
+{
+ GtkWidget *dialog;
+ gint response_id;
+ gchar *number;
+};
+
+typedef struct _SaveButtonInfo SaveButtonInfo;
+
struct _MokoHistoryPrivate
{
MokoJournal *journal;
+
+ GtkToolItem *save_button;
+ GtkToolItem *delete_button;
+ GtkToolItem *sms_button;
+ GtkToolItem *dial_button;
+
+ GtkWidget *save_menu;
GtkWidget *treeview;
GtkWidget *combo;
@@ -199,6 +215,86 @@
}
static void
+on_btn_save_clicked (GtkWidget *button, SaveButtonInfo *info)
+{
+ gint action = info->response_id;
+ gchar *number = g_strdup (info->number);
+
+ /* this also destroys info data */
+ gtk_widget_destroy (info->dialog);
+
+ if (action == 1)
+ { /* create new contact */ }
+ else
+ {/* add to contact */ }
+
+ g_free (number);
+}
+
+static void
+btn_save_info_weak_notify (SaveButtonInfo *info, GObject *object)
+{
+ g_free (info->number);
+ g_free (info);
+}
+
+static void
+on_save_clicked (GtkWidget *button, MokoHistory *history)
+{
+ MokoHistoryPrivate *priv;
+ GtkTreeSelection *selection;
+ GtkTreeView *treeview;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gchar *number;
+ GtkWidget *window, *btn;
+ SaveButtonInfo *btn_info;
+
+ g_return_if_fail (MOKO_IS_HISTORY (history));
+ priv = history->priv;
+
+ treeview = GTK_TREE_VIEW (priv->treeview);
+ selection = gtk_tree_view_get_selection (treeview);
+ model = gtk_tree_view_get_model (treeview);
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+
+ gtk_tree_model_get (model, &iter, NUMBER_COLUMN, &number, -1);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_title (GTK_WINDOW (window), number);
+
+ GtkWidget *vbox;
+ vbox = gtk_vbox_new (TRUE, 0);
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+
+ btn = gtk_button_new_with_label ("Create New Contact");
+ gtk_box_pack_start_defaults (GTK_BOX (vbox), btn);
+ btn_info = g_new0 (SaveButtonInfo, 1);
+ btn_info->dialog = window;
+ btn_info->response_id = 1;
+ btn_info->number = g_strdup (number);
+ g_signal_connect (btn, "clicked", G_CALLBACK (on_btn_save_clicked), btn_info);
+ g_object_weak_ref (G_OBJECT (btn), (GWeakNotify) btn_save_info_weak_notify, btn_info);
+
+ btn = gtk_button_new_with_label ("Add to Contact");
+ gtk_box_pack_start_defaults (GTK_BOX (vbox), btn);
+ btn_info = g_new0 (SaveButtonInfo, 1);
+ btn_info->dialog = window;
+ btn_info->response_id = 2;
+ btn_info->number = g_strdup (number);
+ g_signal_connect (btn, "clicked", G_CALLBACK (on_btn_save_clicked), btn_info);
+ g_object_weak_ref (G_OBJECT (btn), (GWeakNotify) btn_save_info_weak_notify, btn_info);
+
+ g_free (number);
+
+ gtk_widget_show_all (window);
+}
+
+static void
on_delete_clicked (GtkWidget *button, MokoHistory *history)
{
MokoHistoryPrivate *priv;
@@ -437,6 +533,26 @@
}
+void
+on_tree_selection_changed (GtkTreeSelection *selection, MokoHistory *history)
+{
+ MokoHistoryPrivate *priv;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean selected;
+
+ g_return_if_fail (MOKO_IS_HISTORY (history));
+ priv = history->priv;
+
+
+ selected = gtk_tree_selection_get_selected (selection, &model, &iter);
+
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->dial_button), selected);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->sms_button), selected);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->save_button), selected);
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->delete_button), selected);
+}
+
static gint
sort_by_date (MokoJournalEntry *a, MokoJournalEntry *b)
{
@@ -632,7 +748,7 @@
gint i;
GtkListStore *store;
GtkTreeIter iter;
- GtkWidget *toolbar, *combo, *treeview, *image, *scroll;
+ GtkWidget *toolbar, *combo, *image, *scroll;
GtkToolItem *item;
GtkCellRenderer *renderer;
GdkPixbuf *icon;
@@ -660,25 +776,31 @@
gtk_tool_item_set_expand (item, TRUE);
g_signal_connect (G_OBJECT (item), "clicked",
G_CALLBACK (on_dial_clicked), (gpointer)history);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, 0);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+ priv->dial_button = item;
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), gtk_separator_tool_item_new (), 1);
-
icon = gdk_pixbuf_new_from_file (PKGDATADIR"/sms.png", NULL);
image = gtk_image_new_from_pixbuf (icon);
item = gtk_tool_button_new (image, "SMS");
gtk_tool_item_set_expand (item, TRUE);
g_signal_connect (G_OBJECT (item), "clicked",
G_CALLBACK (on_sms_clicked), (gpointer)history);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, 2);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+ priv->sms_button = item;
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), gtk_separator_tool_item_new (), 3);
+ item = gtk_tool_button_new_from_stock (GTK_STOCK_SAVE);
+ gtk_tool_item_set_expand (item, TRUE);
+ g_signal_connect (item, "clicked",
+ G_CALLBACK (on_save_clicked), history);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+ priv->save_button = item;
item = gtk_tool_button_new_from_stock (GTK_STOCK_DELETE);
gtk_tool_item_set_expand (item, TRUE);
g_signal_connect (G_OBJECT (item), "clicked",
G_CALLBACK (on_delete_clicked), (gpointer)history);
- gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, 4);
+ gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+ priv->delete_button = item;
/* Filter combo */
store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT);
@@ -709,6 +831,23 @@
2, HISTORY_FILTER_ALL,
-1);
+
+ /* add to contact/save menu */
+ GtkWidget *menu_item;
+
+ priv->save_menu = gtk_menu_new ();
+ gtk_menu_attach_to_widget (GTK_MENU (priv->save_menu), GTK_WIDGET (priv->save_button), NULL);
+
+ menu_item = gtk_menu_item_new_with_label ("New Contact");
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->save_menu), menu_item);
+
+ menu_item = gtk_menu_item_new_with_label ("Add to Contact");
+ gtk_menu_shell_append (GTK_MENU_SHELL (priv->save_menu), menu_item);
+
+ gtk_widget_show_all (priv->save_menu);
+
+
+ /* filter combo */
combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
priv->combo = combo;
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
@@ -734,10 +873,13 @@
scroll = moko_finger_scroll_new ();
gtk_box_pack_start (GTK_BOX (history), scroll, TRUE, TRUE, 0);
- treeview = priv->treeview = gtk_tree_view_new ();
- gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
- gtk_container_add (GTK_CONTAINER (scroll), treeview);
+ priv->treeview = gtk_tree_view_new ();
+ gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (priv->treeview), TRUE);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (priv->treeview), FALSE);
+ gtk_container_add (GTK_CONTAINER (scroll), priv->treeview);
+
+ g_signal_connect (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview)),
+ "changed", G_CALLBACK (on_tree_selection_changed), history);
gtk_widget_show_all (GTK_WIDGET (history));
}
More information about the commitlog
mailing list