r568 - trunk/src/target/OM-2007/applications/openmoko-dialer/src
tony_guan at sita.openmoko.org
tony_guan at sita.openmoko.org
Wed Jan 17 09:06:40 CET 2007
Author: tony_guan
Date: 2007-01-17 09:06:23 +0100 (Wed, 17 Jan 2007)
New Revision: 568
Added:
trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c
Removed:
trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c
Log:
for(int i...) issue.
Deleted: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c 2007-01-17 02:55:39 UTC (rev 567)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c 2007-01-17 08:06:23 UTC (rev 568)
@@ -1,413 +0,0 @@
-/* moko-dialer-autolist .c
- *
- * Authored by Tony Guan<tonyguan at fic-sh.com.cn>
- *
- * Copyright (C) 2006 FIC Shanghai Lab
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Public License as published by
- * the Free Software Foundation; version 2.1 of the license.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser Public License for more details.
- *
- * Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
- */
-
- #include "moko-dialer-autolist.h"
- #include "error.h"
-#include "common.h"
-G_DEFINE_TYPE (MokoDialerAutolist, moko_dialer_autolist, GTK_TYPE_HBOX)
-
-enum {
- SELECTED_SIGNAL,
- CONFIRMED_SIGNAL,
- NOMATCH_SIGNAL,
- LAST_SIGNAL
-};
-
-//forward definition
-
-gboolean on_tip_press_event (MokoDialerTip *tip,GdkEventButton *event,gpointer user_data);
-
-static gint moko_dialer_autolist_signals[LAST_SIGNAL] = { 0 };
-
-static void
-moko_dialer_autolist_class_init (MokoDialerAutolistClass *class)
-{
-/*
- GtkVBoxClass* vbox_class;
-
- vbox_class= (GtkVBoxClass*) class;
-*/
-
- GtkObjectClass *object_class;
-
- object_class = (GtkObjectClass*) class;
-
- g_print("moko_dialer_autolist:start signal register\n");
-
- moko_dialer_autolist_signals[SELECTED_SIGNAL] =
- g_signal_new ("user_selected",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (MokoDialerAutolistClass, moko_dialer_autolist_selected),
- NULL,NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,g_type_from_name("gpointer"));
-
-
-
-
-
- moko_dialer_autolist_signals[CONFIRMED_SIGNAL] =
- g_signal_new ("user_confirmed",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (MokoDialerAutolistClass, moko_dialer_autolist_confirmed),
- NULL,NULL,
- g_cclosure_marshal_VOID__POINTER,
- G_TYPE_NONE, 1,g_type_from_name("gpointer"));
-
-//moko_dialer_autolist_nomatch
- moko_dialer_autolist_signals[NOMATCH_SIGNAL] =
- g_signal_new ("autolist_nomatch",
- G_OBJECT_CLASS_TYPE (object_class),
- G_SIGNAL_RUN_FIRST,
- G_STRUCT_OFFSET (MokoDialerAutolistClass, moko_dialer_autolist_nomatch),
- NULL,NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
-
-
-}
-
-
-static void
-moko_dialer_autolist_init (MokoDialerAutolist *moko_dialer_autolist)
-{
-//DBG_ENTER();
-for(int i=0;i<MOKO_DIALER_MAX_TIPS;i++)
- moko_dialer_autolist->tips[i]=0;
-moko_dialer_autolist-> tipscreated=FALSE;
-moko_dialer_autolist->head=0;
-moko_dialer_autolist->g_alternatecount=0;
-moko_dialer_autolist->imagePerson=0;
-gtk_widget_set_size_request (GTK_WIDGET(moko_dialer_autolist), 480, 40);
-
-}
-/**
- * @brief please call this function first before the autolist start to work.
-*/
-gboolean moko_dialer_autolist_set_data (MokoDialerAutolist *moko_dialer_autolist,DIALER_CONTACTS_LIST_HEAD* head)
-{
-/*
-if(moko_dialer_autolist->head)
- contact_release_contact_list(moko_dialer_autolist->head);
- */
-
-moko_dialer_autolist->head=head;
-
-//contact_print_contact_list(moko_dialer_autolist->head);
-
-return TRUE;
-}
-
-gint moko_dialer_autolist_hide_all_tips(MokoDialerAutolist *moko_dialer_autolist)
-{
-
-if(moko_dialer_autolist->tipscreated)
-{
- moko_dialer_autolist->selected=FALSE;
- //no alternative, hide all 3 labels.
- for(gint i=0;i<MOKO_DIALER_MAX_TIPS;i++)
- {
- moko_dialer_tip_set_selected(moko_dialer_autolist->tips[i],FALSE);
- gtk_widget_hide(moko_dialer_autolist->tips[i]);
- }
- //hide the imagePerson
- gtk_widget_hide(moko_dialer_autolist->imagePerson);
-}
- return 1;
-
-}
-
-/**
- * @brief initiate the font for widget of textviewCodes
- *
- *
- *
- * @param text_view GtkWidget*, any widget which can help to lookup for labelcontactN
- * @param count gint, the count of the alternative, max set to MAXDISPNAMENUM.
- * @param selectdefault if selectdefault, then we will automatically emit the message to fill the sensed string,
- * else, we only refresh our tip list.
- * @retval
- */
-
-int moko_dialer_autolist_fill_alternative(MokoDialerAutolist *moko_dialer_autolist,gint count,gboolean selectdefault)
-{
-gint i;
-//DBG_ENTER();
-moko_dialer_autolist->selected=FALSE;
-
-moko_dialer_autolist->g_alternatecount=count;
-
-if(count>0)
-{
- //init the labels.
- for(i=0;i<count&&i<MOKO_DIALER_MAX_TIPS;i++)
- {
- moko_dialer_tip_set_label(moko_dialer_autolist->tips[i],moko_dialer_autolist->readycontacts[i].p_contact->name);
- moko_dialer_tip_set_index(moko_dialer_autolist->tips[i],i);
- moko_dialer_tip_set_selected(moko_dialer_autolist->tips[i],FALSE);
- gtk_widget_show(moko_dialer_autolist->tips[i]);
- }
-
- for(;i<MOKO_DIALER_MAX_TIPS;i++)
- {
- moko_dialer_tip_set_index(moko_dialer_autolist->tips[i],-1);
- moko_dialer_tip_set_label(moko_dialer_autolist->tips[i],"");
- gtk_widget_hide(moko_dialer_autolist->tips[i]);
- moko_dialer_tip_set_selected(moko_dialer_autolist->tips[i],FALSE);
- }
-
- if(selectdefault)
- {
- //we set the first one as defaultly selected
- moko_dialer_autolist_set_select(moko_dialer_autolist, 0);
- }
-}
-else
- {
- moko_dialer_autolist_hide_all_tips(moko_dialer_autolist);
- //notify the client that no match has been foudn
-// autolist_nomatch
- g_signal_emit (moko_dialer_autolist, moko_dialer_autolist_signals[NOMATCH_SIGNAL],0,0);
- }
- return 1;
-}
-
-//if selectdefault, then we will automatically emit the message to fill the sensed string
-//else, we only refresh our tip list.
-gint moko_dialer_autolist_refresh_by_string (MokoDialerAutolist *moko_dialer_autolist,gchar * string,gboolean selectdefault)
-{
-//first, we fill the ready list
-
- DIALER_CONTACT* contacts;//=moko_dialer_autolist->head->contacts;
-
- DIALER_CONTACT_ENTRY* entry;
-
- gint inserted=0;
-
-
- gint len;
-
- if(string)
- len=strlen(string);
- else
- len=0;
-// DBG_TRACE();
-
-//insert the tips here to avoid the _show_all show it from the start.
- GtkWidget * imagePerson;
- GtkWidget * tip;
-
-if(!moko_dialer_autolist->tipscreated)
-{
- gchar filepath[MOKO_DIALER_MAX_PATH_LEN+1];
- if(file_create_data_path_for_the_file(MOKO_DIALER_DEFAULT_PERSON_IMAGE_PATH,filepath))
- {
- imagePerson = gtk_image_new_from_file(filepath);
- }
- else
- {
- imagePerson=gtk_image_new_from_stock("gtk-yes",GTK_ICON_SIZE_DND);
- }
- gtk_widget_hide (imagePerson);
- gtk_widget_set_size_request (imagePerson, 40, 40);
-// gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, TRUE, TRUE, 0);
-//gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, TRUE, FALSE, 0);
- gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, FALSE, FALSE, 0);
-
- moko_dialer_autolist->imagePerson=imagePerson;
-
- for(int i=0;i<MOKO_DIALER_MAX_TIPS;i++)
- {
- tip=moko_dialer_tip_new();
-
- moko_dialer_tip_set_index(tip, i);
-
- moko_dialer_tip_set_label(tip,"tony guan");
-
- moko_dialer_tip_set_selected(tip,FALSE);
-
- gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, TRUE, TRUE, 0);
-// gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, FALSE,FALSE, 0);
-// gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, FALSE,TRUE, 0);
-// gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, TRUE, FALSE,0);
-
- g_signal_connect ((gpointer) tip, "button_press_event",G_CALLBACK (on_tip_press_event),moko_dialer_autolist);
-
-// gtk_widget_set_size_request (tip, 20, 20);
-
- gtk_widget_hide(tip);
-
- moko_dialer_autolist-> tips[i]=tip;
- }
- moko_dialer_autolist-> tipscreated=TRUE;
-}
-
- contacts=moko_dialer_autolist->head->contacts;
-
-// DBG_MESSAGE("CONTACTS:%d,list at 0x%x,first at 0x%x",moko_dialer_autolist->head->length,moko_dialer_autolist->head,moko_dialer_autolist->head->contacts);
-
-// DBG_TRACE();
- while(contacts!= NULL&&inserted<MOKO_DIALER_MAX_TIPS)
- {
- // DBG_TRACE();
- entry=contacts->entry;
- // DBG_TRACE();
- while(entry!=NULL&&inserted<MOKO_DIALER_MAX_TIPS)
- {
-// DBG_TRACE();
- //judge if the entry includes the string
- if(contact_string_has_sensentive(entry->content,string))
- {
- //if the person not inserted, then insert first
- moko_dialer_autolist->readycontacts[inserted].p_contact=contacts;
- moko_dialer_autolist->readycontacts[inserted].p_entry=entry;
- inserted++;
- //break;
- }
- entry=entry->next;
- }
-
- contacts= contacts->next;
-
- }
-
-//DBG_MESSAGE("inserted=%d",inserted);
-moko_dialer_autolist_fill_alternative(moko_dialer_autolist,inserted,selectdefault);
-
-//DBG_LEAVE();
- return inserted;
-}
-
-gboolean on_tip_press_event (MokoDialerTip *tip,GdkEventButton *event,gpointer user_data)
-{
-
-//DBG_ENTER();
-MokoDialerAutolist *moko_dialer_autolist;
-moko_dialer_autolist=(MokoDialerAutolist *)user_data;
-
-gint selected=moko_dialer_tip_get_index(tip);
-
-
-if(selected!=-1&&selected<MOKO_DIALER_MAX_TIPS&&moko_dialer_autolist->g_alternatecount)
-{
-
- return moko_dialer_autolist_set_select(moko_dialer_autolist,selected);
-
-}
-else
-{
-//we notify the client that no match found!
-DBG_WARN("the selected index is out of range!");
-return FALSE;
-}
-
-
-}
-
-gboolean moko_dialer_autolist_has_selected(MokoDialerAutolist *moko_dialer_autolist)
-{
- return moko_dialer_autolist->selected;
-}
-
-// selected ==-1 means there are no selected tips
-gboolean moko_dialer_autolist_set_select(MokoDialerAutolist *moko_dialer_autolist,gint selected)
-{
-
- if(selected==-1)
- {
-
- //set the selected status to be false
- for(gint i=0;i<moko_dialer_autolist->g_alternatecount;i++)
- {
- moko_dialer_tip_set_selected( moko_dialer_autolist->tips[i], FALSE);
- }
- //set
- gtk_widget_hide(moko_dialer_autolist->imagePerson);
- moko_dialer_autolist->selected=FALSE;
- return TRUE;
- }
-
-
-if(selected<MOKO_DIALER_MAX_TIPS&&moko_dialer_autolist->g_alternatecount)
- {
- //first of all, determin if this tip is already selected previously.
- if(moko_dialer_tip_is_selected(moko_dialer_autolist->tips[selected]))
- {
-
- //hide the others;
- for(gint i=0;i<moko_dialer_autolist->g_alternatecount;i++)
- {
- if(i!=selected)
- {//hide the others
- gtk_widget_hide( moko_dialer_autolist->tips[i]);
- }
- }
- moko_dialer_autolist->selected=FALSE;
- //emit confirm message;
-// DBG_MESSAGE("we confirm %s is right.",moko_dialer_autolist->readycontacts[selected].p_contact->name);
- g_signal_emit (moko_dialer_autolist, moko_dialer_autolist_signals[CONFIRMED_SIGNAL],0,&(moko_dialer_autolist->readycontacts[selected]));
-
- }
- else
- {
-
- //refresh the imagePerson widget
-// file_load_person_image_from_relative_path(moko_dialer_autolist->imagePerson,moko_dialer_autolist->readycontacts[selected].p_contact->picpath);
- file_load_person_image_scalable_from_relative_path(moko_dialer_autolist->imagePerson,moko_dialer_autolist->readycontacts[selected].p_contact->picpath);
- gtk_widget_show(moko_dialer_autolist->imagePerson);
- //just change the selected attribute of the tips
- for(gint i=0;i<moko_dialer_autolist->g_alternatecount;i++)
- {
- if(i!=selected)
- {//set selected to false;
- moko_dialer_tip_set_selected( moko_dialer_autolist->tips[i], FALSE);
- }
- else
- moko_dialer_tip_set_selected( moko_dialer_autolist->tips[i], TRUE);
- }
- moko_dialer_autolist->selected=TRUE;
- //emit selected message
-// DBG_MESSAGE(" %s is selectd.",moko_dialer_autolist->readycontacts[selected].p_contact->name);
- g_signal_emit (moko_dialer_autolist, moko_dialer_autolist_signals[SELECTED_SIGNAL],0,&(moko_dialer_autolist->readycontacts[selected]));
- }
- return TRUE;
- }
-else
- {
- DBG_WARN("the selected index is out of range!");
- return FALSE;
- }
-
-}
-
-GtkWidget* moko_dialer_autolist_new()
-{
-DBG_ENTER();
-
-MokoDialerAutolist * dp;
-
-dp=(MokoDialerAutolist * )g_object_new (MOKO_TYPE_DIALER_AUTOLIST, NULL);
-return GTK_WIDGET(dp);
-
-}
-
-
-
Added: trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c
===================================================================
--- trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c 2007-01-17 02:55:39 UTC (rev 567)
+++ trunk/src/target/OM-2007/applications/openmoko-dialer/src/moko-dialer-autolist.c 2007-01-17 08:06:23 UTC (rev 568)
@@ -0,0 +1,415 @@
+/* moko-dialer-autolist .c
+ *
+ * Authored by Tony Guan<tonyguan at fic-sh.com.cn>
+ *
+ * Copyright (C) 2006 FIC Shanghai Lab
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Public License as published by
+ * the Free Software Foundation; version 2.1 of the license.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser Public License for more details.
+ *
+ * Current Version: $Rev$ ($Date) [$Author: Tony Guan $]
+ */
+
+ #include "moko-dialer-autolist.h"
+ #include "error.h"
+#include "common.h"
+G_DEFINE_TYPE (MokoDialerAutolist, moko_dialer_autolist, GTK_TYPE_HBOX)
+
+enum {
+ SELECTED_SIGNAL,
+ CONFIRMED_SIGNAL,
+ NOMATCH_SIGNAL,
+ LAST_SIGNAL
+};
+
+//forward definition
+
+gboolean on_tip_press_event (MokoDialerTip *tip,GdkEventButton *event,gpointer user_data);
+
+static gint moko_dialer_autolist_signals[LAST_SIGNAL] = { 0 };
+
+static void
+moko_dialer_autolist_class_init (MokoDialerAutolistClass *class)
+{
+/*
+ GtkVBoxClass* vbox_class;
+
+ vbox_class= (GtkVBoxClass*) class;
+*/
+
+ GtkObjectClass *object_class;
+
+ object_class = (GtkObjectClass*) class;
+
+ g_print("moko_dialer_autolist:start signal register\n");
+
+ moko_dialer_autolist_signals[SELECTED_SIGNAL] =
+ g_signal_new ("user_selected",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MokoDialerAutolistClass, moko_dialer_autolist_selected),
+ NULL,NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,g_type_from_name("gpointer"));
+
+
+
+
+
+ moko_dialer_autolist_signals[CONFIRMED_SIGNAL] =
+ g_signal_new ("user_confirmed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MokoDialerAutolistClass, moko_dialer_autolist_confirmed),
+ NULL,NULL,
+ g_cclosure_marshal_VOID__POINTER,
+ G_TYPE_NONE, 1,g_type_from_name("gpointer"));
+
+//moko_dialer_autolist_nomatch
+ moko_dialer_autolist_signals[NOMATCH_SIGNAL] =
+ g_signal_new ("autolist_nomatch",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (MokoDialerAutolistClass, moko_dialer_autolist_nomatch),
+ NULL,NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+
+
+}
+
+
+static void
+moko_dialer_autolist_init (MokoDialerAutolist *moko_dialer_autolist)
+{
+//DBG_ENTER();
+int i;
+for(i=0;i<MOKO_DIALER_MAX_TIPS;i++)
+ moko_dialer_autolist->tips[i]=0;
+moko_dialer_autolist-> tipscreated=FALSE;
+moko_dialer_autolist->head=0;
+moko_dialer_autolist->g_alternatecount=0;
+moko_dialer_autolist->imagePerson=0;
+gtk_widget_set_size_request (GTK_WIDGET(moko_dialer_autolist), 480, 40);
+
+}
+/**
+ * @brief please call this function first before the autolist start to work.
+*/
+gboolean moko_dialer_autolist_set_data (MokoDialerAutolist *moko_dialer_autolist,DIALER_CONTACTS_LIST_HEAD* head)
+{
+/*
+if(moko_dialer_autolist->head)
+ contact_release_contact_list(moko_dialer_autolist->head);
+ */
+
+moko_dialer_autolist->head=head;
+
+//contact_print_contact_list(moko_dialer_autolist->head);
+
+return TRUE;
+}
+
+gint moko_dialer_autolist_hide_all_tips(MokoDialerAutolist *moko_dialer_autolist)
+{
+
+if(moko_dialer_autolist->tipscreated)
+{
+ moko_dialer_autolist->selected=FALSE;
+ //no alternative, hide all 3 labels.
+ gint i;
+ for(i=0;i<MOKO_DIALER_MAX_TIPS;i++)
+ {
+ moko_dialer_tip_set_selected(moko_dialer_autolist->tips[i],FALSE);
+ gtk_widget_hide(moko_dialer_autolist->tips[i]);
+ }
+ //hide the imagePerson
+ gtk_widget_hide(moko_dialer_autolist->imagePerson);
+}
+ return 1;
+
+}
+
+/**
+ * @brief initiate the font for widget of textviewCodes
+ *
+ *
+ *
+ * @param text_view GtkWidget*, any widget which can help to lookup for labelcontactN
+ * @param count gint, the count of the alternative, max set to MAXDISPNAMENUM.
+ * @param selectdefault if selectdefault, then we will automatically emit the message to fill the sensed string,
+ * else, we only refresh our tip list.
+ * @retval
+ */
+
+int moko_dialer_autolist_fill_alternative(MokoDialerAutolist *moko_dialer_autolist,gint count,gboolean selectdefault)
+{
+gint i;
+//DBG_ENTER();
+moko_dialer_autolist->selected=FALSE;
+
+moko_dialer_autolist->g_alternatecount=count;
+
+if(count>0)
+{
+ //init the labels.
+ for(i=0;i<count&&i<MOKO_DIALER_MAX_TIPS;i++)
+ {
+ moko_dialer_tip_set_label(moko_dialer_autolist->tips[i],moko_dialer_autolist->readycontacts[i].p_contact->name);
+ moko_dialer_tip_set_index(moko_dialer_autolist->tips[i],i);
+ moko_dialer_tip_set_selected(moko_dialer_autolist->tips[i],FALSE);
+ gtk_widget_show(moko_dialer_autolist->tips[i]);
+ }
+
+ for(;i<MOKO_DIALER_MAX_TIPS;i++)
+ {
+ moko_dialer_tip_set_index(moko_dialer_autolist->tips[i],-1);
+ moko_dialer_tip_set_label(moko_dialer_autolist->tips[i],"");
+ gtk_widget_hide(moko_dialer_autolist->tips[i]);
+ moko_dialer_tip_set_selected(moko_dialer_autolist->tips[i],FALSE);
+ }
+
+ if(selectdefault)
+ {
+ //we set the first one as defaultly selected
+ moko_dialer_autolist_set_select(moko_dialer_autolist, 0);
+ }
+}
+else
+ {
+ moko_dialer_autolist_hide_all_tips(moko_dialer_autolist);
+ //notify the client that no match has been foudn
+// autolist_nomatch
+ g_signal_emit (moko_dialer_autolist, moko_dialer_autolist_signals[NOMATCH_SIGNAL],0,0);
+ }
+ return 1;
+}
+
+//if selectdefault, then we will automatically emit the message to fill the sensed string
+//else, we only refresh our tip list.
+gint moko_dialer_autolist_refresh_by_string (MokoDialerAutolist *moko_dialer_autolist,gchar * string,gboolean selectdefault)
+{
+//first, we fill the ready list
+
+ DIALER_CONTACT* contacts;//=moko_dialer_autolist->head->contacts;
+
+ DIALER_CONTACT_ENTRY* entry;
+
+ gint inserted=0;
+
+
+ gint len;
+
+ if(string)
+ len=strlen(string);
+ else
+ len=0;
+// DBG_TRACE();
+
+//insert the tips here to avoid the _show_all show it from the start.
+ GtkWidget * imagePerson;
+ GtkWidget * tip;
+
+if(!moko_dialer_autolist->tipscreated)
+{
+ gchar filepath[MOKO_DIALER_MAX_PATH_LEN+1];
+ if(file_create_data_path_for_the_file(MOKO_DIALER_DEFAULT_PERSON_IMAGE_PATH,filepath))
+ {
+ imagePerson = gtk_image_new_from_file(filepath);
+ }
+ else
+ {
+ imagePerson=gtk_image_new_from_stock("gtk-yes",GTK_ICON_SIZE_DND);
+ }
+ gtk_widget_hide (imagePerson);
+ gtk_widget_set_size_request (imagePerson, 40, 40);
+// gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, TRUE, TRUE, 0);
+//gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, TRUE, FALSE, 0);
+ gtk_box_pack_start (GTK_CONTAINER(moko_dialer_autolist), imagePerson, FALSE, FALSE, 0);
+
+ moko_dialer_autolist->imagePerson=imagePerson;
+ gint i;
+ for(i=0;i<MOKO_DIALER_MAX_TIPS;i++)
+ {
+ tip=moko_dialer_tip_new();
+
+ moko_dialer_tip_set_index(tip, i);
+
+ moko_dialer_tip_set_label(tip,"tony guan");
+
+ moko_dialer_tip_set_selected(tip,FALSE);
+
+ gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, TRUE, TRUE, 0);
+// gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, FALSE,FALSE, 0);
+// gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, FALSE,TRUE, 0);
+// gtk_box_pack_start(GTK_CONTAINER(moko_dialer_autolist), tip, TRUE, FALSE,0);
+
+ g_signal_connect ((gpointer) tip, "button_press_event",G_CALLBACK (on_tip_press_event),moko_dialer_autolist);
+
+// gtk_widget_set_size_request (tip, 20, 20);
+
+ gtk_widget_hide(tip);
+
+ moko_dialer_autolist-> tips[i]=tip;
+ }
+ moko_dialer_autolist-> tipscreated=TRUE;
+}
+
+ contacts=moko_dialer_autolist->head->contacts;
+
+// DBG_MESSAGE("CONTACTS:%d,list at 0x%x,first at 0x%x",moko_dialer_autolist->head->length,moko_dialer_autolist->head,moko_dialer_autolist->head->contacts);
+
+// DBG_TRACE();
+ while(contacts!= NULL&&inserted<MOKO_DIALER_MAX_TIPS)
+ {
+ // DBG_TRACE();
+ entry=contacts->entry;
+ // DBG_TRACE();
+ while(entry!=NULL&&inserted<MOKO_DIALER_MAX_TIPS)
+ {
+// DBG_TRACE();
+ //judge if the entry includes the string
+ if(contact_string_has_sensentive(entry->content,string))
+ {
+ //if the person not inserted, then insert first
+ moko_dialer_autolist->readycontacts[inserted].p_contact=contacts;
+ moko_dialer_autolist->readycontacts[inserted].p_entry=entry;
+ inserted++;
+ //break;
+ }
+ entry=entry->next;
+ }
+
+ contacts= contacts->next;
+
+ }
+
+//DBG_MESSAGE("inserted=%d",inserted);
+moko_dialer_autolist_fill_alternative(moko_dialer_autolist,inserted,selectdefault);
+
+//DBG_LEAVE();
+ return inserted;
+}
+
+gboolean on_tip_press_event (MokoDialerTip *tip,GdkEventButton *event,gpointer user_data)
+{
+
+//DBG_ENTER();
+MokoDialerAutolist *moko_dialer_autolist;
+moko_dialer_autolist=(MokoDialerAutolist *)user_data;
+
+gint selected=moko_dialer_tip_get_index(tip);
+
+
+if(selected!=-1&&selected<MOKO_DIALER_MAX_TIPS&&moko_dialer_autolist->g_alternatecount)
+{
+
+ return moko_dialer_autolist_set_select(moko_dialer_autolist,selected);
+
+}
+else
+{
+//we notify the client that no match found!
+DBG_WARN("the selected index is out of range!");
+return FALSE;
+}
+
+
+}
+
+gboolean moko_dialer_autolist_has_selected(MokoDialerAutolist *moko_dialer_autolist)
+{
+ return moko_dialer_autolist->selected;
+}
+
+// selected ==-1 means there are no selected tips
+gboolean moko_dialer_autolist_set_select(MokoDialerAutolist *moko_dialer_autolist,gint selected)
+{
+gint i;
+ if(selected==-1)
+ {
+
+ //set the selected status to be false
+ for( i=0;i<moko_dialer_autolist->g_alternatecount;i++)
+ {
+ moko_dialer_tip_set_selected( moko_dialer_autolist->tips[i], FALSE);
+ }
+ //set
+ gtk_widget_hide(moko_dialer_autolist->imagePerson);
+ moko_dialer_autolist->selected=FALSE;
+ return TRUE;
+ }
+
+
+if(selected<MOKO_DIALER_MAX_TIPS&&moko_dialer_autolist->g_alternatecount)
+ {
+ //first of all, determin if this tip is already selected previously.
+ if(moko_dialer_tip_is_selected(moko_dialer_autolist->tips[selected]))
+ {
+
+ //hide the others;
+ for( i=0;i<moko_dialer_autolist->g_alternatecount;i++)
+ {
+ if(i!=selected)
+ {//hide the others
+ gtk_widget_hide( moko_dialer_autolist->tips[i]);
+ }
+ }
+ moko_dialer_autolist->selected=FALSE;
+ //emit confirm message;
+// DBG_MESSAGE("we confirm %s is right.",moko_dialer_autolist->readycontacts[selected].p_contact->name);
+ g_signal_emit (moko_dialer_autolist, moko_dialer_autolist_signals[CONFIRMED_SIGNAL],0,&(moko_dialer_autolist->readycontacts[selected]));
+
+ }
+ else
+ {
+
+ //refresh the imagePerson widget
+// file_load_person_image_from_relative_path(moko_dialer_autolist->imagePerson,moko_dialer_autolist->readycontacts[selected].p_contact->picpath);
+ file_load_person_image_scalable_from_relative_path(moko_dialer_autolist->imagePerson,moko_dialer_autolist->readycontacts[selected].p_contact->picpath);
+ gtk_widget_show(moko_dialer_autolist->imagePerson);
+ //just change the selected attribute of the tips
+ for( i=0;i<moko_dialer_autolist->g_alternatecount;i++)
+ {
+ if(i!=selected)
+ {//set selected to false;
+ moko_dialer_tip_set_selected( moko_dialer_autolist->tips[i], FALSE);
+ }
+ else
+ moko_dialer_tip_set_selected( moko_dialer_autolist->tips[i], TRUE);
+ }
+ moko_dialer_autolist->selected=TRUE;
+ //emit selected message
+// DBG_MESSAGE(" %s is selectd.",moko_dialer_autolist->readycontacts[selected].p_contact->name);
+ g_signal_emit (moko_dialer_autolist, moko_dialer_autolist_signals[SELECTED_SIGNAL],0,&(moko_dialer_autolist->readycontacts[selected]));
+ }
+ return TRUE;
+ }
+else
+ {
+ DBG_WARN("the selected index is out of range!");
+ return FALSE;
+ }
+
+}
+
+GtkWidget* moko_dialer_autolist_new()
+{
+DBG_ENTER();
+
+MokoDialerAutolist * dp;
+
+dp=(MokoDialerAutolist * )g_object_new (MOKO_TYPE_DIALER_AUTOLIST, NULL);
+return GTK_WIDGET(dp);
+
+}
+
+
+
More information about the commitlog
mailing list