~ubuntu-branches/ubuntu/quantal/linphone/quantal

« back to all changes in this revision

Viewing changes to gnome/addressbook.c

  • Committer: Bazaar Package Importer
  • Author(s): Samuel Mimram
  • Date: 2004-06-30 13:58:16 UTC
  • Revision ID: james.westby@ubuntu.com-20040630135816-wwx75gdlodkqbabb
Tags: upstream-0.12.2
ImportĀ upstreamĀ versionĀ 0.12.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
                          addressbook.c  -  
 
3
                             -------------------
 
4
    begin                : Wed Jan 30 2002
 
5
    copyright            : (C) 2002 by Simon Morlat
 
6
    email                : simon.morlat@linphone.org
 
7
 ***************************************************************************/
 
8
 
 
9
/***************************************************************************
 
10
 *                                                                         *
 
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.                                   *
 
15
 *                                                                         *
 
16
 ***************************************************************************/
 
17
 
 
18
 
 
19
#include "linphone.h"
 
20
 
 
21
#define get_address_book()      (&uiobj->addressbook)
 
22
#define get_main_window() (&uiobj->main_window)
 
23
 
 
24
enum{
 
25
        SIP_ADDRESS_COLUMN,
 
26
        AB_NCOLUMNS
 
27
};
 
28
 
 
29
void choose_address_and_close(AddressBook *ab){
 
30
        GtkTreeSelection *select;
 
31
        GtkWidget *addressentry=get_main_window()->addressentry;
 
32
        GtkTreeIter iter;
 
33
        GtkTreeModel *model;
 
34
        gchar *address;
 
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))
 
38
        {
 
39
                gtk_tree_model_get (model, &iter,SIP_ADDRESS_COLUMN , &address, -1);
 
40
        }
 
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);
 
44
}
 
45
 
 
46
void address_selection_changed_cb(GtkTreeSelection *selection, gpointer data)
 
47
{
 
48
        AddressBook *ab=get_address_book();
 
49
        GtkTreeIter iter;
 
50
        GtkTreeModel *model;
 
51
        from_t *sipaddr;
 
52
        gchar *address=NULL;
 
53
        gchar *url;
 
54
        gint error;
 
55
        
 
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);
 
59
                from_init(&sipaddr);
 
60
                error=from_parse(sipaddr,address);
 
61
                if (error!=0){
 
62
                        g_warning("error parsing sip address\n");
 
63
                        goto end;
 
64
                }
 
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);
 
70
                from_free(sipaddr);
 
71
                sfree(sipaddr);
 
72
                sfree(url);
 
73
        }else return;
 
74
        end:
 
75
                g_free(address);
 
76
}
 
77
gboolean address_button_press(GtkWidget *widget,GdkEventButton *event,gpointer user_data)
 
78
{
 
79
        if (event->type==GDK_2BUTTON_PRESS){
 
80
                choose_address_and_close(get_address_book());
 
81
                return TRUE;
 
82
        }
 
83
        return FALSE;
 
84
}
 
85
 
 
86
void address_book_init(AddressBook *ab,LinphoneCore *lc,GtkWidget *main_entry)
 
87
{
 
88
        GtkListStore *store;
 
89
        GtkTreeIter iter;
 
90
        GtkCellRenderer *renderer;
 
91
        GtkTreeViewColumn *column;
 
92
        GtkTreeSelection *select;
 
93
        GList *list,*elem;
 
94
        
 
95
        if (ab->address_book!=NULL) {
 
96
                gtk_widget_show(ab->address_book);
 
97
                return;
 
98
        }
 
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;
 
104
        ab->lc=lc;
 
105
        /* setup the address list */
 
106
        ab->address_list=lookup_widget(ab->address_book,"address_list");
 
107
        list=linphone_core_get_address_list(lc);
 
108
        elem=list;
 
109
        while(elem!=NULL){
 
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);
 
114
        }
 
115
        if (list!=NULL) g_list_free(list);
 
116
        
 
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",
 
121
                                                   renderer,
 
122
                                                   "text", SIP_ADDRESS_COLUMN,
 
123
                                                   NULL);
 
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),
 
130
                  NULL);
 
131
        
 
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);
 
135
}
 
136
 
 
137
 
 
138
void
 
139
on_modify_address_clicked              (GtkButton       *button,
 
140
                                        gpointer         user_data)
 
141
{
 
142
        gchar *address,*full_address,*displayname;
 
143
        from_t *sipaddr;
 
144
        gint error;
 
145
        AddressBook *ab=get_address_book();
 
146
        GtkTreeSelection *select;
 
147
        GtkTreeIter iter;
 
148
        GtkTreeModel *model;
 
149
        
 
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);
 
152
        from_init(&sipaddr);
 
153
        error=from_parse(sipaddr,address);
 
154
        if (error!=0)
 
155
        {
 
156
                g_warning("Sip address is incorrect.\n");
 
157
                free(sipaddr);
 
158
                g_free(address);
 
159
                g_free(displayname);
 
160
                return;
 
161
        }
 
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))
 
168
        {
 
169
                gtk_list_store_set(GTK_LIST_STORE(model), &iter,SIP_ADDRESS_COLUMN ,full_address, -1);
 
170
        }
 
171
}
 
172
 
 
173
void on_add_address_clicked(GtkButton *button,gpointer user_data)
 
174
{
 
175
        gchar *address,*full_address,*displayname;
 
176
        from_t *sipaddr;
 
177
        int error;
 
178
        GtkTreeIter iter;
 
179
        AddressBook *ab=get_address_book();
 
180
        GtkTreeModel *model=gtk_tree_view_get_model(GTK_TREE_VIEW(ab->address_list));
 
181
        
 
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);
 
184
        
 
185
        from_init(&sipaddr);
 
186
        error=from_parse(sipaddr,address);
 
187
        if (error!=0)
 
188
        {
 
189
                g_warning("Sip address is incorrect.\n");
 
190
                sfree(sipaddr);
 
191
                g_free(address);
 
192
                g_free(displayname);
 
193
                return;
 
194
        }
 
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);
 
200
 
 
201
        from_free(sipaddr);
 
202
        sfree(sipaddr);
 
203
        g_free(address);
 
204
        g_free(displayname);
 
205
}
 
206
 
 
207
void on_remove_address_clicked(GtkButton *button,gpointer user_data)
 
208
{
 
209
        AddressBook *ab=get_address_book();
 
210
        GtkTreeSelection *select;
 
211
        GtkTreeIter iter;
 
212
        GtkTreeModel *model;
 
213
        select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ab->address_list));
 
214
        if (gtk_tree_selection_get_selected (select, &model, &iter))
 
215
        {
 
216
                gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
 
217
        }
 
218
}
 
219
 
 
220
 
 
221
 
 
222
void on_select_address_clicked(GtkButton *button,gpointer user_data)
 
223
{
 
224
        
 
225
        AddressBook *ab=get_address_book();
 
226
        choose_address_and_close(ab);
 
227
}
 
228
 
 
229
void address_book_close(GtkButton *button,gpointer user_data)
 
230
{
 
231
        
 
232
        address_book_uninit(get_address_book(),TRUE);
 
233
}
 
234
 
 
235
void on_address_book_close(GtkWidget *ab){
 
236
        g_message("on_address_book_close");
 
237
        address_book_uninit(get_address_book(),FALSE);
 
238
}
 
239
 
 
240
void address_book_uninit(AddressBook *ab, gboolean destroy_widget)
 
241
{
 
242
        GtkTreeIter iter;
 
243
        GtkTreeModel *model=gtk_tree_view_get_model(GTK_TREE_VIEW(ab->address_list));
 
244
        GList *siplist=NULL;
 
245
        gchar *address;
 
246
        
 
247
        /* get the list from the view */
 
248
        if (gtk_tree_model_get_iter_first(model,&iter)){
 
249
        
 
250
                do{
 
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));
 
255
        }
 
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));
 
259
}