calltree.c 15.3 KB
Newer Older
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
1
2
/*
 *  Copyright (C) 2007 Savoir-Faire Linux inc.
3
 *  Author: Pierre-Luc Beaudoin <pierre-luc@squidy.info>
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 *                                                                              
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *                                                                                
 *  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 General Public License for more details.
 *                                                                              
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <gtk/gtk.h>
21
#include <actions.h>
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
22
23
#include <calltree.h>
#include <calllist.h>
24
#include <dbus.h>
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
25
26

GtkListStore * store;
27
28
GtkWidget *view;

29
30
31
32
33
34
35
GtkWidget   * toolbar;
GtkToolItem * callButton;
GtkToolItem * pickupButton;
GtkToolItem * hangupButton;
GtkToolItem * holdButton;
GtkToolItem * transfertButton;
GtkToolItem * unholdButton;
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
36
guint transfertButtonConnId; //The button toggled signal connection ID
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
37

38
/**
39
 * Make a call
40
41
 */
static void 
42
call_button( GtkWidget *widget, gpointer   data )
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
43
44
45
46
47
48
49
50
51
{
  sflphone_new_call();
}

/**
 * Pick up
 */
static void 
pick_up( GtkWidget *widget, gpointer   data )
52
{
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
53
  sflphone_pick_up();
54
55
56
}

/**
57
 * Hang up the line
58
59
 */
static void 
60
hang_up( GtkWidget *widget, gpointer   data )
61
{
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
62
  sflphone_hang_up();
63
64
65
}

/**
66
 * Hold the line
67
68
 */
static void 
69
hold( GtkWidget *widget, gpointer   data )
70
{
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
71
  sflphone_on_hold();
72
73
74
75
76
77
}

/**
 * Transfert the line
 */
static void 
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
78
79
transfert  (GtkToggleToolButton *toggle_tool_button,
            gpointer             user_data)
80
{
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
81
82
83
84
85
86
87
88
89
  gboolean up = gtk_toggle_tool_button_get_active(toggle_tool_button);
  if(up)
  {
    sflphone_set_transfert();
  }
  else
  {
    sflphone_unset_transfert();
  }
90
91
}

92
93
94
95
96
97
/**
 * Unhold call
 */
static void 
unhold( GtkWidget *widget, gpointer   data )
{
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
98
  sflphone_off_hold();
99
}
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
100

101
void 
102
toolbar_update_buttons ()
103
104
{
  gtk_widget_set_sensitive( GTK_WIDGET(callButton),       FALSE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
105
  gtk_widget_set_sensitive( GTK_WIDGET(pickupButton),     FALSE);
106
107
108
109
  gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     FALSE);
  gtk_widget_set_sensitive( GTK_WIDGET(holdButton),       FALSE);
  gtk_widget_set_sensitive( GTK_WIDGET(transfertButton),  FALSE);
  gtk_widget_set_sensitive( GTK_WIDGET(unholdButton),     FALSE);
110
111
112
113
114
  g_object_ref(holdButton);
  g_object_ref(unholdButton);
  gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton));
  gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(unholdButton));
  gtk_toolbar_insert(GTK_TOOLBAR(toolbar), holdButton, 3);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
115
	
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
116
117
118
119
	gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId);
  gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), FALSE);
  gtk_signal_handler_unblock(transfertButton, transfertButtonConnId);
	
120
	call_t * selectedCall = call_get_selected();
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
121
	if (selectedCall)
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
122
	{
123
    switch(selectedCall->state) 
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
124
125
  	{
  	  case CALL_STATE_INCOMING:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
126
        gtk_widget_set_sensitive( GTK_WIDGET(pickupButton),     TRUE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
127
128
129
130
131
        gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
        break;
      case CALL_STATE_HOLD:
    	  gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
        gtk_widget_set_sensitive( GTK_WIDGET(unholdButton),     TRUE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
132
        gtk_widget_set_sensitive( GTK_WIDGET(callButton),       TRUE);
133
134
135
        g_object_ref(holdButton);
        gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton));
        gtk_toolbar_insert(GTK_TOOLBAR(toolbar), unholdButton, 3);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
136
137
138
139
140
        break;
      case CALL_STATE_RINGING:
    	  gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
        break;
      case CALL_STATE_DIALING:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
141
        gtk_widget_set_sensitive( GTK_WIDGET(pickupButton),     TRUE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
142
        gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
143
        gtk_widget_set_sensitive( GTK_WIDGET(callButton),       TRUE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
144
145
146
147
148
        break;
      case CALL_STATE_CURRENT:
        gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
        gtk_widget_set_sensitive( GTK_WIDGET(holdButton),       TRUE);
        gtk_widget_set_sensitive( GTK_WIDGET(transfertButton),  TRUE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
149
        gtk_widget_set_sensitive( GTK_WIDGET(callButton),       TRUE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
150
151
152
153
154
        break;
      case CALL_STATE_BUSY:
      case CALL_STATE_FAILURE:
        gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
        break; 
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
155
156
157
158
159
160
161
162
163
164
      case CALL_STATE_TRANSFERT:
        gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId);
        gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(transfertButton), TRUE);
        gtk_signal_handler_unblock(transfertButton, transfertButtonConnId);
        gtk_widget_set_sensitive( GTK_WIDGET(callButton),       TRUE);
        gtk_widget_set_sensitive( GTK_WIDGET(pickupButton),     TRUE);
        gtk_widget_set_sensitive( GTK_WIDGET(hangupButton),     TRUE);
        gtk_widget_set_sensitive( GTK_WIDGET(holdButton),       TRUE);
        gtk_widget_set_sensitive( GTK_WIDGET(transfertButton),  TRUE);
        break;
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
165
  	  default:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
166
  	    g_warning("Should not happen!");
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
167
168
169
  	    break;
  	}
  }
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
170
171
  else 
  {
172
173
174
175
176
177
178
179
    if( account_list_get_size() > 0 )
    {
      gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE);
    }
    else
    {
      gtk_widget_set_sensitive( GTK_WIDGET(callButton), FALSE);
    }
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
180
  }
181
182
183
184
185
186
187
188
189
190
191
}
/* Call back when the user click on a call in the list */
static void 
selected(GtkTreeSelection *sel, GtkTreeModel *model) 
{
	GtkTreeIter  iter;
	GValue val;
	
	if (! gtk_tree_selection_get_selected (sel, &model, &iter))
		return;
  
192
	val.g_type = 0;
193
194
	gtk_tree_model_get_value (model, &iter, 2, &val);
	
195
	call_select((call_t*) g_value_get_pointer(&val));
196
  g_value_unset(&val);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
197
  
198
  toolbar_update_buttons();
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
199
200
}

201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
/* A row is activated when it is double clicked */
void  row_activated(GtkTreeView       *tree_view,
                    GtkTreePath       *path,
                    GtkTreeViewColumn *column,
                    void * foo) 
{
  call_t * selectedCall = call_get_selected();
	if (selectedCall)
	{
    switch(selectedCall->state)  
  	{
  	  case CALL_STATE_INCOMING:
        dbus_accept(selectedCall);
        break;
      case CALL_STATE_HOLD:
        dbus_unhold(selectedCall);
        break;
      case CALL_STATE_RINGING:
      case CALL_STATE_CURRENT:
      case CALL_STATE_BUSY:
      case CALL_STATE_FAILURE:
        break;
      case CALL_STATE_DIALING:
        sflphone_place_call (selectedCall);
        break;
  	  default:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
227
  	    g_warning("Should not happen!");
228
229
230
  	    break;
  	}
  }
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
}                  


GtkWidget * 
create_toolbar (){
  GtkWidget *ret;
  GtkWidget *image;

  ret = gtk_toolbar_new();
  
  toolbar = ret;

  image = gtk_image_new_from_file( ICONS_DIR "/call.svg");
  callButton = gtk_tool_button_new (image, "Place a Call");
  g_signal_connect (G_OBJECT (callButton), "clicked",
                    G_CALLBACK (call_button), NULL);
  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(callButton), -1);  

  image = gtk_image_new_from_file( ICONS_DIR "/accept.svg");
  pickupButton = gtk_tool_button_new (image, "Pick Up");
  gtk_widget_set_state( GTK_WIDGET(pickupButton), GTK_STATE_INSENSITIVE);
  g_signal_connect (G_OBJECT (pickupButton), "clicked",
                    G_CALLBACK (pick_up), NULL);
  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(pickupButton), -1);  

  image = gtk_image_new_from_file( ICONS_DIR "/hang_up.svg");
  hangupButton = gtk_tool_button_new (image, "Hang up");
  //gtk_widget_hide( hangupButton );
  gtk_widget_set_state( GTK_WIDGET(hangupButton), GTK_STATE_INSENSITIVE);
  g_signal_connect (G_OBJECT (hangupButton), "clicked",
                    G_CALLBACK (hang_up), NULL);
  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(hangupButton), -1);  
                    
  image = gtk_image_new_from_file( ICONS_DIR "/unhold.svg");
  unholdButton = gtk_tool_button_new (image, "Off Hold");
  gtk_widget_set_state( GTK_WIDGET(unholdButton), GTK_STATE_INSENSITIVE);
  g_signal_connect (G_OBJECT (unholdButton), "clicked",
                    G_CALLBACK (unhold), NULL);
  gtk_widget_show_all(GTK_WIDGET(unholdButton));
         
  image = gtk_image_new_from_file( ICONS_DIR "/hold.svg");
  holdButton =  gtk_tool_button_new (image, "On Hold");
  gtk_widget_set_state( GTK_WIDGET(holdButton), GTK_STATE_INSENSITIVE);
  g_signal_connect (G_OBJECT (holdButton), "clicked",
                    G_CALLBACK (hold), NULL);
  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(holdButton), -1);  
  
  image = gtk_image_new_from_file( ICONS_DIR "/transfert.svg");
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
279
280
281
  transfertButton = gtk_toggle_tool_button_new ();
  gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(transfertButton), image);
  gtk_tool_button_set_label(GTK_TOOL_BUTTON(transfertButton), "Transfert");
282
  gtk_widget_set_state( GTK_WIDGET(transfertButton), GTK_STATE_INSENSITIVE);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
283
  transfertButtonConnId = g_signal_connect (G_OBJECT (transfertButton), "toggled",
284
285
286
287
288
289
290
                    G_CALLBACK (transfert), NULL);
  gtk_toolbar_insert(GTK_TOOLBAR(ret), GTK_TOOL_ITEM(transfertButton), -1);  
  

  return ret;

}  
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
291
292
293
294
295
296
297
298

GtkWidget * 
create_call_tree (){
  GtkWidget *ret;
	GtkWidget *sw;
	GtkCellRenderer *rend;
	GtkTreeViewColumn *col;
	GtkTreeSelection *sel;
299
	
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
300
301
302
303
	ret = gtk_vbox_new(FALSE, 10); 
	gtk_container_set_border_width (GTK_CONTAINER (ret), 0);

	sw = gtk_scrolled_window_new( NULL, NULL);
304
	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
305
306
307
308
309
310
311
312
313
314
	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);

	store = gtk_list_store_new (3, 
	  GDK_TYPE_PIXBUF,// Icon 
	  G_TYPE_STRING,  // Description
	  G_TYPE_POINTER  // Pointer to the Object
	  );


	view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
315
  gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
316
317
318
  g_signal_connect (G_OBJECT (view), "row-activated",
			  G_CALLBACK (row_activated),
			  NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
	
  rend = gtk_cell_renderer_pixbuf_new();
  col = gtk_tree_view_column_new_with_attributes ("Icon",
							rend,
							"pixbuf", 0,
							NULL);
	gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);

	rend = gtk_cell_renderer_text_new();
	col = gtk_tree_view_column_new_with_attributes ("Description",
							rend,
							"markup", 1,
							NULL);
	gtk_tree_view_append_column (GTK_TREE_VIEW(view), col);
	g_object_unref(G_OBJECT(store));
	gtk_container_add(GTK_CONTAINER(sw), view);

  sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
  g_signal_connect (G_OBJECT (sel), "changed",
			  G_CALLBACK (selected),
			  store);
  
341
342
  gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0);
	
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
343
344
	gtk_widget_show(ret); 
	
345
346
	toolbar_update_buttons();
	
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
347
348
349
350
	return ret;
	
}
void 
351
update_call_tree_remove (call_t * c)
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
352
353
{
	GtkTreeIter iter;
354
355
	GValue val;
	call_t * iterCall;
356
 
357
358
359
360
361
362
	int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
  int i;
	for( i = 0; i < nbChild; i++)
	{
	  if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, NULL, i))
	  {
363
	    val.g_type = 0;
364
365
366
367
368
369
370
371
372
373
374
    	gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, 2, &val);
    	
    	iterCall = (call_t*) g_value_get_pointer(&val);
      g_value_unset(&val);
      
      if(iterCall == c)
      {
        gtk_list_store_remove(store, &iter);
      }
	  }
	}
375
	call_t * selectedCall = call_get_selected();
376
	if(selectedCall == c)
377
	  call_select(NULL);
378
	toolbar_update_buttons();
379
}
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
380

381
382
383
384
385
386
387
388
389
void 
update_call_tree (call_t * c)
{
  GdkPixbuf *pixbuf;
  GtkTreeIter iter;
	GValue val;
	call_t * iterCall;
	
	int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
390
  int i;
391
	for( i = 0; i < nbChild; i++)
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
392
	{
393
394
	  if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, NULL, i))
	  {
395
	    val.g_type = 0;
396
397
398
399
400
401
    	gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, 2, &val);
    	
    	iterCall = (call_t*) g_value_get_pointer(&val);
      g_value_unset(&val);
      
      if(iterCall == c)
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
402
      {
403
404
        // Existing call in the list
        gchar * markup;
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
405
406
407
408
409
410
411
412
413
414
415
        if(c->state == CALL_STATE_TRANSFERT)
        {
          markup = g_markup_printf_escaped("<b>%s</b>\n"
    						    "%s\n<i>Transfert to:</i> %s",  
    						    call_get_name(c), 
    						    call_get_number(c), 
    						    c->to);
        }
        else
        {
          markup = g_markup_printf_escaped("<b>%s</b>\n"
416
417
418
    						    "%s", 
    						    call_get_name(c), 
    						    call_get_number(c));
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
419
420
        }
        
421
    		    		
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
422
    		switch(c->state)
423
    		{
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
424
      		case CALL_STATE_HOLD:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
425
      		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/hold.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
426
427
      		  break;
      		case CALL_STATE_RINGING:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
428
      		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
429
430
      		  break;
      		case CALL_STATE_CURRENT:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
431
      		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/current.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
432
433
      		  break;
      		case CALL_STATE_DIALING:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
434
      		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
435
436
      		  break;
      		case CALL_STATE_FAILURE:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
437
      		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/fail.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
438
439
      		  break;
      		case CALL_STATE_BUSY:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
440
      		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/busy.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
441
      		  break;
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
442
443
444
      		case CALL_STATE_TRANSFERT:
      		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/transfert.svg", NULL);
      		  break;
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
445
      		default:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
446
      		  g_warning("Should not happen!");
447
    		}
448
449
    	  //Resize it
        if(pixbuf)
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
450
        {
451
452
453
454
          if(gdk_pixbuf_get_width(pixbuf) > 32 || gdk_pixbuf_get_height(pixbuf) > 32)
          {
            pixbuf =  gdk_pixbuf_scale_simple(pixbuf, 32, 32, GDK_INTERP_BILINEAR);
          }
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
455
        }
456
    		gtk_list_store_set(store, &iter,
457
458
459
    				  0, pixbuf, // Icon
  		        1, markup, // Description
  		        -1);
460
461
462
463
464
465
    				   
    		if (pixbuf != NULL)
    			g_object_unref(G_OBJECT(pixbuf));
        
      } 
    }
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
466
467
    
  } 
468
  toolbar_update_buttons();
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
469
	//return row_ref;
470
471
472
473
474
475
476
477

}

void 
update_call_tree_add (call_t * c)
{
  GdkPixbuf *pixbuf;
	GtkTreeIter iter;
478
	GtkTreeSelection* sel;
479
480
481

  // New call in the list
  gchar * markup;
482
  markup = g_markup_printf_escaped("<b>%s</b>\n"
483
484
485
  				    "%s", 
  				    call_get_name(c), 
  				    call_get_number(c));
486
  
487
488
  gtk_list_store_append (store, &iter);

Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
489
490
491
  switch(c->state)
	{
		case CALL_STATE_INCOMING:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
492
		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
493
494
		  break;
		case CALL_STATE_DIALING:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
495
		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/dial.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
496
497
		  break;
		case CALL_STATE_RINGING:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
498
		  pixbuf = gdk_pixbuf_new_from_file(ICONS_DIR "/ring.svg", NULL);
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
499
500
		  break;
		default:
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
501
		  g_warning("Should not happen!");
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
502
503
	}
	
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
  //Resize it
  if(pixbuf)
  {
    if(gdk_pixbuf_get_width(pixbuf) > 32 || gdk_pixbuf_get_height(pixbuf) > 32)
    {
      pixbuf =  gdk_pixbuf_scale_simple(pixbuf, 32, 32, GDK_INTERP_BILINEAR);
    }
  }
  gtk_list_store_set(store, &iter,
  		   0, pixbuf, // Icon
  		   1, markup, // Description
  		   2, c,      // Pointer
  		   -1);
  		   
  if (pixbuf != NULL)
  	g_object_unref(G_OBJECT(pixbuf));

  //g_free(markup);
522
523
  sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
  gtk_tree_selection_select_iter(GTK_TREE_SELECTION(sel), &iter);
524
  toolbar_update_buttons();
525
	//return row_ref;
Pierre-Luc Beaudoin's avatar
Pierre-Luc Beaudoin committed
526
}