1
/***************************************************************************
4
begin : Wed Jan 30 2002
5
copyright : (C) 2002 by Simon Morlat
6
email : simon.morlat@linphone.org
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
21
#define get_address_book() (&uiobj->addressbook)
22
#define get_main_window() (&uiobj->main_window)
29
void choose_address_and_close(AddressBook *ab){
30
GtkTreeSelection *select;
31
GtkWidget *addressentry=get_main_window()->addressentry;
35
select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ab->address_list));
36
if (select==NULL) return;
37
if (gtk_tree_selection_get_selected (select, &model, &iter))
39
gtk_tree_model_get (model, &iter,SIP_ADDRESS_COLUMN , &address, -1);
41
g_return_if_fail(address!=NULL);
42
gtk_entry_set_text (GTK_ENTRY(gnome_entry_gtk_entry(GNOME_ENTRY(addressentry))),address);
43
address_book_uninit(ab,TRUE);
46
void address_selection_changed_cb(GtkTreeSelection *selection, gpointer data)
48
AddressBook *ab=get_address_book();
56
if (gtk_tree_selection_get_selected (selection, &model, &iter)){
57
gtk_tree_model_get (model, &iter,SIP_ADDRESS_COLUMN , &address, -1);
58
g_return_if_fail(address!=NULL);
60
error=from_parse(sipaddr,address);
62
g_warning("error parsing sip address\n");
65
gtk_entry_set_text(GTK_ENTRY(ab->name_entry),sipaddr->displayname);
66
sfree(sipaddr->displayname);
67
sipaddr->displayname=NULL;
68
from_2char(sipaddr,&url);
69
gtk_entry_set_text(GTK_ENTRY(ab->address_entry),url);
77
gboolean address_button_press(GtkWidget *widget,GdkEventButton *event,gpointer user_data)
79
if (event->type==GDK_2BUTTON_PRESS){
80
choose_address_and_close(get_address_book());
86
void address_book_init(AddressBook *ab,LinphoneCore *lc,GtkWidget *main_entry)
90
GtkCellRenderer *renderer;
91
GtkTreeViewColumn *column;
92
GtkTreeSelection *select;
95
if (ab->address_book!=NULL) {
96
gtk_widget_show(ab->address_book);
99
store = gtk_list_store_new (AB_NCOLUMNS, G_TYPE_STRING);
100
ab->address_book=create_address_book();
101
ab->name_entry=lookup_widget(ab->address_book,"name_entry");
102
ab->address_entry=lookup_widget(ab->address_book,"address_entry");
103
ab->main_entry=main_entry;
105
/* setup the address list */
106
ab->address_list=lookup_widget(ab->address_book,"address_list");
107
list=linphone_core_get_address_list(lc);
110
/* get an iterator */
111
gtk_list_store_append(store,&iter);
112
gtk_list_store_set(store,&iter,SIP_ADDRESS_COLUMN,elem->data,-1);
113
elem=g_list_next(elem);
115
if (list!=NULL) g_list_free(list);
117
gtk_tree_view_set_model(GTK_TREE_VIEW(ab->address_list),GTK_TREE_MODEL(store));
118
g_object_unref(G_OBJECT(store));
119
renderer = gtk_cell_renderer_text_new ();
120
column = gtk_tree_view_column_new_with_attributes ("SIP Address list",
122
"text", SIP_ADDRESS_COLUMN,
124
gtk_tree_view_append_column (GTK_TREE_VIEW (ab->address_list), column);
125
/* Setup the selection handler */
126
select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ab->address_list));
127
gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE);
128
g_signal_connect (G_OBJECT (select), "changed",
129
G_CALLBACK (address_selection_changed_cb),
132
/* setup handler for double click */
133
g_signal_connect(G_OBJECT(ab->address_list),"button-press-event",G_CALLBACK(address_button_press),(gpointer)NULL);
134
gtk_widget_show(ab->address_book);
139
on_modify_address_clicked (GtkButton *button,
142
gchar *address,*full_address,*displayname;
145
AddressBook *ab=get_address_book();
146
GtkTreeSelection *select;
150
address=gtk_editable_get_chars(GTK_EDITABLE(ab->address_entry),0,-1);
151
displayname=gtk_editable_get_chars(GTK_EDITABLE(ab->name_entry),0,-1);
153
error=from_parse(sipaddr,address);
156
g_warning("Sip address is incorrect.\n");
162
sipaddr->displayname=sgetcopy(displayname);
163
from_2char(sipaddr,&full_address);
164
g_return_if_fail(full_address!=NULL);
165
/* change the address in the view */
166
select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ab->address_list));
167
if (gtk_tree_selection_get_selected (select, &model, &iter))
169
gtk_list_store_set(GTK_LIST_STORE(model), &iter,SIP_ADDRESS_COLUMN ,full_address, -1);
173
void on_add_address_clicked(GtkButton *button,gpointer user_data)
175
gchar *address,*full_address,*displayname;
179
AddressBook *ab=get_address_book();
180
GtkTreeModel *model=gtk_tree_view_get_model(GTK_TREE_VIEW(ab->address_list));
182
address=gtk_editable_get_chars(GTK_EDITABLE(ab->address_entry),0,-1);
183
displayname=gtk_editable_get_chars(GTK_EDITABLE(ab->name_entry),0,-1);
186
error=from_parse(sipaddr,address);
189
g_warning("Sip address is incorrect.\n");
195
sipaddr->displayname=sgetcopy(displayname);
196
from_2char(sipaddr,&full_address);
197
g_return_if_fail(full_address!=NULL);
198
gtk_list_store_append(GTK_LIST_STORE(model),&iter);
199
gtk_list_store_set(GTK_LIST_STORE(model),&iter,SIP_ADDRESS_COLUMN,full_address,-1);
207
void on_remove_address_clicked(GtkButton *button,gpointer user_data)
209
AddressBook *ab=get_address_book();
210
GtkTreeSelection *select;
213
select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ab->address_list));
214
if (gtk_tree_selection_get_selected (select, &model, &iter))
216
gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
222
void on_select_address_clicked(GtkButton *button,gpointer user_data)
225
AddressBook *ab=get_address_book();
226
choose_address_and_close(ab);
229
void address_book_close(GtkButton *button,gpointer user_data)
232
address_book_uninit(get_address_book(),TRUE);
235
void on_address_book_close(GtkWidget *ab){
236
g_message("on_address_book_close");
237
address_book_uninit(get_address_book(),FALSE);
240
void address_book_uninit(AddressBook *ab, gboolean destroy_widget)
243
GtkTreeModel *model=gtk_tree_view_get_model(GTK_TREE_VIEW(ab->address_list));
247
/* get the list from the view */
248
if (gtk_tree_model_get_iter_first(model,&iter)){
251
gtk_tree_model_get (model, &iter,SIP_ADDRESS_COLUMN , &address, -1);
252
g_return_if_fail(address!=NULL);
253
siplist=g_list_append(siplist,(gpointer)address);
254
} while(gtk_tree_model_iter_next(model,&iter));
256
linphone_core_set_address_list(ab->lc,siplist);
257
if (destroy_widget) gtk_widget_destroy(ab->address_book);
258
memset(ab,0,sizeof(AddressBook));