From 2306ab5eb13fadec81801c61a73bcfc37e71b61a Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 22 Sep 2010 21:58:48 +0200 Subject: [PATCH 1/3] implement nice call logs interface --- gtk/call_logs.ui | 39 ++++++++++++++-------- gtk/calllogs.c | 86 ++++++++++++++++++++++++++++++++++++------------ 2 files changed, 91 insertions(+), 34 deletions(-) diff --git a/gtk/call_logs.ui b/gtk/call_logs.ui index 566f525f2..db6ad70e5 100644 --- a/gtk/call_logs.ui +++ b/gtk/call_logs.ui @@ -1,31 +1,41 @@ - + + + + + + + + + + 500 370 5 Call history - GTK_WIN_POS_CENTER_ON_PARENT + center-on-parent linphone2.png - GDK_WINDOW_TYPE_HINT_DIALOG + dialog False True + vertical 2 True True - GTK_POLICY_NEVER - GTK_POLICY_AUTOMATIC + never + automatic - + True True - False - GTK_WRAP_WORD + False + @@ -36,32 +46,35 @@ True - GTK_BUTTONBOX_END + end - + + gtk-close True True True - gtk-close True + False + False 1 False - GTK_PACK_END + end + 0 - button1 + call_logs_close diff --git a/gtk/calllogs.c b/gtk/calllogs.c index 06954191a..3f7875a9a 100644 --- a/gtk/calllogs.c +++ b/gtk/calllogs.c @@ -21,27 +21,61 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. void linphone_gtk_call_log_update(GtkWidget *w){ - GtkTextView *v=GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"logtextview")); - GtkTextBuffer *b=gtk_text_view_get_buffer(v); - GtkTextIter iter,begin; - int off; - char *logmsg; + GtkTreeView *v=GTK_TREE_VIEW(linphone_gtk_get_widget(w,"logs_view")); + GtkListStore *store; const MSList *logs; + + store=(GtkListStore*)gtk_tree_view_get_model(v); + if (store==NULL){ + store=gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING, G_TYPE_POINTER); + gtk_tree_view_set_model(v,GTK_TREE_MODEL(store)); + } + gtk_list_store_clear (store); + for (logs=linphone_core_get_call_logs(linphone_gtk_get_core());logs!=NULL;logs=logs->next){ LinphoneCallLog *cl=(LinphoneCallLog*)logs->data; - logmsg=linphone_call_log_to_str(cl); - gtk_text_buffer_get_end_iter(b,&iter); - off=gtk_text_iter_get_offset(&iter); - gtk_text_buffer_insert(b,&iter,logmsg,-1); - gtk_text_buffer_get_end_iter(b,&iter); - gtk_text_buffer_insert(b,&iter,"\n",-1); - gtk_text_buffer_get_end_iter(b,&iter); - gtk_text_buffer_get_iter_at_offset(b,&begin,off); - gtk_text_buffer_apply_tag_by_name(b,cl->dir==LinphoneCallOutgoing ? "green" : "blue" ,&begin,&iter); - ms_free(logmsg); + GtkTreeIter iter; + LinphoneAddress *la=cl->dir==LinphoneCallIncoming ? cl->from : cl->to; + char *addr= linphone_address_as_string_uri_only (la); + const char *display; + gchar *logtxt; + display=linphone_address_get_display_name (la); + if (display==NULL){ + display=linphone_address_get_username (la); + if (display==NULL) + display=linphone_address_get_domain (la); + } + logtxt=g_markup_printf_escaped("%s\t%s\n" + "%s\t%i minutes %i seconds",display, addr, cl->start_date, + cl->duration/60,cl->duration%60); + gtk_list_store_append (store,&iter); + gtk_list_store_set (store,&iter, + 0, cl->dir==LinphoneCallOutgoing ? GTK_STOCK_GO_UP : GTK_STOCK_GO_DOWN, + 1, logtxt,2,la,-1); + ms_free(addr); + g_free(logtxt); + } + +} + +void linphone_gtk_history_row_activated(GtkWidget *treeview){ + GtkTreeSelection *sel; + + sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); + if (sel!=NULL){ + GtkTreeModel *model=NULL; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected (sel,&model,&iter)){ + gpointer pla; + LinphoneAddress *la; + char *tmp; + gtk_tree_model_get(model,&iter,2,&pla,-1); + la=(LinphoneAddress*)pla; + tmp=linphone_address_as_string (la); + gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(linphone_gtk_get_main_window(),"uribar")),tmp); + ms_free(tmp); + } } - gtk_text_buffer_get_end_iter(b,&iter); - gtk_text_view_scroll_to_iter(v,&iter,0,FALSE,0,0); } void linphone_gtk_call_log_response(GtkWidget *w){ @@ -50,18 +84,28 @@ void linphone_gtk_call_log_response(GtkWidget *w){ gtk_widget_destroy(w); } +static void fill_renderers(GtkTreeView *v){ + GtkTreeViewColumn *c; + GtkCellRenderer *r=gtk_cell_renderer_pixbuf_new (); + + g_object_set(r,"stock-size",GTK_ICON_SIZE_BUTTON,NULL); + c=gtk_tree_view_column_new_with_attributes("icon",r,"stock-id",0,NULL); + gtk_tree_view_append_column (v,c); + + r=gtk_cell_renderer_text_new (); + c=gtk_tree_view_column_new_with_attributes("sipaddress",r,"markup",1,NULL); + gtk_tree_view_append_column (v,c); +} + GtkWidget * linphone_gtk_show_call_logs(void){ GtkWidget *mw=linphone_gtk_get_main_window(); - GtkTextBuffer *b; GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"call_logs"); if (w==NULL){ w=linphone_gtk_create_window("call_logs"); + fill_renderers(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"logs_view"))); g_object_set_data(G_OBJECT(mw),"call_logs",w); g_signal_connect(G_OBJECT(w),"response",(GCallback)linphone_gtk_call_log_response,NULL); gtk_widget_show(w); - b=gtk_text_view_get_buffer(GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"logtextview"))); - gtk_text_buffer_create_tag(b,"blue","foreground","blue",NULL); - gtk_text_buffer_create_tag(b,"green","foreground","green",NULL); linphone_gtk_call_log_update(w); }else gtk_window_present(GTK_WINDOW(w)); return w; From 27e4117f59104ef22a5802584d519bcc1d289ebe Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Wed, 22 Sep 2010 22:20:49 +0200 Subject: [PATCH 2/3] update ms2 --- mediastreamer2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediastreamer2 b/mediastreamer2 index 292e7943c..f2ddc59ed 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 292e7943c683fd8ada2dc0234fdcb1b9e299aba9 +Subproject commit f2ddc59ed02f26ff828243fa400abae925b6f730 From 176616e0fb7f02dd27469b44510428e7140a0461 Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Thu, 23 Sep 2010 15:14:46 +0200 Subject: [PATCH 3/3] beautifull call logs --- gtk/call_logs.ui | 35 ++++++++++++++++++++++++++++++++--- gtk/calllogs.c | 22 ++++++++++++++++++++-- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/gtk/call_logs.ui b/gtk/call_logs.ui index db6ad70e5..00c2dfbda 100644 --- a/gtk/call_logs.ui +++ b/gtk/call_logs.ui @@ -16,7 +16,6 @@ 5 Call history center-on-parent - linphone2.png dialog False @@ -48,7 +47,31 @@ True end - + + Clear all + True + True + True + image1 + + + False + False + 0 + + + + + Call back + True + True + True + + + False + False + 1 + @@ -61,7 +84,7 @@ False False - 1 + 2 @@ -74,7 +97,13 @@ + button1 + call_back_button call_logs_close + + True + gtk-clear + diff --git a/gtk/calllogs.c b/gtk/calllogs.c index 3f7875a9a..c196c2c41 100644 --- a/gtk/calllogs.c +++ b/gtk/calllogs.c @@ -29,6 +29,7 @@ void linphone_gtk_call_log_update(GtkWidget *w){ if (store==NULL){ store=gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING, G_TYPE_POINTER); gtk_tree_view_set_model(v,GTK_TREE_MODEL(store)); + g_object_unref(G_OBJECT(store)); } gtk_list_store_clear (store); @@ -58,7 +59,7 @@ void linphone_gtk_call_log_update(GtkWidget *w){ } -void linphone_gtk_history_row_activated(GtkWidget *treeview){ +static bool_t put_selection_to_uribar(GtkWidget *treeview){ GtkTreeSelection *sel; sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); @@ -74,16 +75,31 @@ void linphone_gtk_history_row_activated(GtkWidget *treeview){ tmp=linphone_address_as_string (la); gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(linphone_gtk_get_main_window(),"uribar")),tmp); ms_free(tmp); + return TRUE; } } + return FALSE; } -void linphone_gtk_call_log_response(GtkWidget *w){ +void linphone_gtk_history_row_activated(GtkWidget *treeview){ + put_selection_to_uribar(treeview); +} + +void linphone_gtk_call_log_response(GtkWidget *w, guint response_id){ GtkWidget *mw=linphone_gtk_get_main_window(); + if (response_id==1){ + if (put_selection_to_uribar(linphone_gtk_get_widget(w,"logs_view"))) + linphone_gtk_start_call(linphone_gtk_get_widget(mw,"start_call")); + }else if (response_id==2){ + linphone_core_clear_call_logs (linphone_gtk_get_core()); + linphone_gtk_call_log_update(w); + return; + } g_object_set_data(G_OBJECT(mw),"call_logs",NULL); gtk_widget_destroy(w); } + static void fill_renderers(GtkTreeView *v){ GtkTreeViewColumn *c; GtkCellRenderer *r=gtk_cell_renderer_pixbuf_new (); @@ -102,6 +118,8 @@ GtkWidget * linphone_gtk_show_call_logs(void){ GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"call_logs"); if (w==NULL){ w=linphone_gtk_create_window("call_logs"); + gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"call_back_button")), + create_pixmap (linphone_gtk_get_ui_config("callback_button","status-green.png"))); fill_renderers(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"logs_view"))); g_object_set_data(G_OBJECT(mw),"call_logs",w); g_signal_connect(G_OBJECT(w),"response",(GCallback)linphone_gtk_call_log_response,NULL);