Skip to content
Snippets Groups Projects
Commit b7b7cdbd authored by Pierre-Luc Beaudoin's avatar Pierre-Luc Beaudoin
Browse files

New call tree that contains all calls.

The call tree is not cleared any more but updated.
parent 539543e4
No related branches found
No related tags found
No related merge requests found
...@@ -17,9 +17,11 @@ ...@@ -17,9 +17,11 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <gtk/gtk.h>
#include <string.h>
#include <actions.h> #include <actions.h>
#include <accountlist.h> #include <accountlist.h>
#include <gtk/gtk.h>
/** /**
* Terminate the gtk program * Terminate the gtk program
...@@ -52,10 +54,19 @@ void ...@@ -52,10 +54,19 @@ void
sflphone_hold(call_t * c ) sflphone_hold(call_t * c )
{ {
c->state = CALL_STATE_HOLD; c->state = CALL_STATE_HOLD;
update_call_tree(); update_call_tree(c);
screen_clear(); screen_clear();
} }
/**
* Put the call in Ringing state
*/
void
sflphone_ringing(call_t * c )
{
c->state = CALL_STATE_RINGING;
update_call_tree(c);
}
/* Fill account list */ /* Fill account list */
...@@ -121,7 +132,7 @@ void ...@@ -121,7 +132,7 @@ void
sflphone_unhold(call_t * c ) sflphone_unhold(call_t * c )
{ {
c->state = CALL_STATE_CURRENT; c->state = CALL_STATE_CURRENT;
update_call_tree(); update_call_tree(c);
screen_set_call(c); screen_set_call(c);
} }
...@@ -132,7 +143,7 @@ void ...@@ -132,7 +143,7 @@ void
sflphone_hang_up( call_t * c ) sflphone_hang_up( call_t * c )
{ {
call_list_remove(c->callID); call_list_remove(c->callID);
update_call_tree(); update_call_tree_remove(c);
screen_clear(); screen_clear();
} }
...@@ -143,7 +154,7 @@ void ...@@ -143,7 +154,7 @@ void
sflphone_current( call_t * c ) sflphone_current( call_t * c )
{ {
c->state = CALL_STATE_CURRENT; c->state = CALL_STATE_CURRENT;
update_call_tree(); update_call_tree(c);
screen_set_call(c); screen_set_call(c);
} }
...@@ -154,7 +165,7 @@ void ...@@ -154,7 +165,7 @@ void
sflphone_transfert( call_t * c, gchar * to ) sflphone_transfert( call_t * c, gchar * to )
{ {
screen_clear(); screen_clear();
update_call_tree(); update_call_tree_remove(c);
} }
/** /**
...@@ -164,7 +175,7 @@ void ...@@ -164,7 +175,7 @@ void
sflphone_incoming_call (call_t * c) sflphone_incoming_call (call_t * c)
{ {
call_list_add ( c ); call_list_add ( c );
update_call_tree(); update_call_tree_add(c);
} }
/** /**
* Signal Hung up * Signal Hung up
...@@ -173,7 +184,7 @@ void ...@@ -173,7 +184,7 @@ void
sflphone_hung_up (call_t * c ) sflphone_hung_up (call_t * c )
{ {
call_list_remove(c->callID); call_list_remove(c->callID);
update_call_tree(); update_call_tree_remove(c);
screen_clear(); screen_clear();
} }
...@@ -186,12 +197,32 @@ sflphone_keypad( guint keyval, gchar * key) ...@@ -186,12 +197,32 @@ sflphone_keypad( guint keyval, gchar * key)
switch (keyval) switch (keyval)
{ {
case 65293: /* ENTER */ case 65293: /* ENTER */
case 65421: /* ENTER numpad */
sflphone_place_call(c); sflphone_place_call(c);
break; break;
case 65307: /* ESCAPE */ case 65307: /* ESCAPE */
sflphone_hang_up(c); sflphone_hang_up(c);
break; break;
case 65288: /* BACKSPACE */ case 65288: /* BACKSPACE */
{ /* Brackets mandatory because of local vars */
gchar * before = c->to;
if(strlen(c->to) > 1){
c->to = g_strndup(c->to, strlen(c->to) -1);
g_free(before);
g_print("TO: %s\n", c->to);
g_free(c->from);
c->from = g_strconcat("\"\" <", c->to, ">", NULL);
screen_set_call(c);
update_call_tree();
}
else if(strlen(c->to) == 1)
{
sflphone_hang_up(c);
}
}
break;
case 65289: /* TAB */ case 65289: /* TAB */
case 65513: /* ALT */ case 65513: /* ALT */
case 65507: /* CTRL */ case 65507: /* CTRL */
......
...@@ -40,6 +40,8 @@ void sflphone_transfert ( call_t * c, gchar * to ); ...@@ -40,6 +40,8 @@ void sflphone_transfert ( call_t * c, gchar * to );
void sflphone_hold ( call_t * c); void sflphone_hold ( call_t * c);
void sflphone_ringing(call_t * c );
void sflphone_unhold ( call_t * c); void sflphone_unhold ( call_t * c);
/* signals */ /* signals */
......
...@@ -25,7 +25,8 @@ ...@@ -25,7 +25,8 @@
typedef enum typedef enum
{ {
CALL_STATE_INVALID = 0, CALL_STATE_INVALID = 0,
CALL_STATE_INCOMING, CALL_STATE_INCOMING, /* Ringing incoming call */
CALL_STATE_RINGING, /* Ringing outgoing call */
CALL_STATE_CURRENT, CALL_STATE_CURRENT,
CALL_STATE_DIALING, CALL_STATE_DIALING,
CALL_STATE_HOLD CALL_STATE_HOLD
......
...@@ -22,58 +22,74 @@ ...@@ -22,58 +22,74 @@
#include <calllist.h> #include <calllist.h>
GtkListStore * store; GtkListStore * store;
GtkWidget * acceptButton; GtkWidget *view;
GtkWidget * refuseButton;
GtkWidget * unholdButton;
GtkWidget * holdButton;
GtkWidget * callButton; GtkWidget * callButton;
GtkWidget * hangupButton; GtkWidget * hangupButton;
GtkWidget * holdButton;
GtkWidget * transfertButton; GtkWidget * transfertButton;
GtkWidget * unholdButton;
call_t * selectedCall; call_t * selectedCall;
/** /**
* Hold the line * Make a call
*/ */
static void static void
hold( GtkWidget *widget, gpointer data ) call_button( GtkWidget *widget, gpointer data )
{ {
call_t * c = (call_t*) call_list_get_by_state (CALL_STATE_CURRENT); if(selectedCall)
if(c) {
switch(selectedCall->state)
{ {
dbus_hold (c); case CALL_STATE_DIALING:
dbus_place_call (selectedCall);
break;
case CALL_STATE_INCOMING:
dbus_accept (selectedCall);
break;
}
} }
} }
/** /**
* Make a call * Hang up the line
*/ */
static void static void
place_call( GtkWidget *widget, gpointer data ) hang_up( GtkWidget *widget, gpointer data )
{ {
call_t * c = (call_t*) call_list_get_by_state (CALL_STATE_DIALING); if(selectedCall)
if(c)
{ {
sflphone_place_call(c); switch(selectedCall->state)
{
case CALL_STATE_CURRENT:
case CALL_STATE_HOLD:
case CALL_STATE_DIALING:
dbus_hang_up (selectedCall);
break;
case CALL_STATE_INCOMING:
dbus_refuse (selectedCall);
break;
}
} }
} }
/** /**
* Hang up the line * Hold the line
*/ */
static void static void
hang_up( GtkWidget *widget, gpointer data ) hold( GtkWidget *widget, gpointer data )
{ {
call_t * c = (call_t*) call_list_get_by_state (CALL_STATE_CURRENT); if(selectedCall)
if(c) {
switch(selectedCall->state)
{ {
dbus_hang_up(c); case CALL_STATE_CURRENT:
dbus_hold (selectedCall);
break;
}
} }
} }
/** /**
* Transfert the line * Transfert the line
...@@ -88,45 +104,63 @@ transfert( GtkWidget *widget, gpointer data ) ...@@ -88,45 +104,63 @@ transfert( GtkWidget *widget, gpointer data )
} }
} }
/* Call back when the user click on a call in the list */ /**
* Refuse incoming call
*/
static void static void
selected(GtkTreeSelection *sel, GtkTreeModel *model) refuse( GtkWidget *widget, gpointer data )
{ {
GtkTreeIter iter; if(selectedCall)
GValue val; {
dbus_refuse(selectedCall);
if (! gtk_tree_selection_get_selected (sel, &model, &iter)) }
return; }
val.g_type = G_TYPE_POINTER;
gtk_tree_model_get_value (model, &iter, 2, &val);
selectedCall = (call_t*) g_value_get_pointer(&val);
g_value_unset(&val);
/**
* Unhold call
*/
static void
unhold( GtkWidget *widget, gpointer data )
{
if(selectedCall) if(selectedCall)
{ {
if( selectedCall->state == CALL_STATE_INCOMING) switch(selectedCall->state)
{ {
gtk_widget_set_sensitive( GTK_WIDGET(acceptButton), TRUE); case CALL_STATE_HOLD:
gtk_widget_set_sensitive( GTK_WIDGET(refuseButton), TRUE); dbus_unhold (selectedCall);
break;
}
}
}
void
update_buttons ()
{
gtk_widget_set_sensitive( GTK_WIDGET(callButton), FALSE);
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); gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), FALSE);
if(selectedCall)
{
if( selectedCall->state == CALL_STATE_INCOMING)
{
gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE);
gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE);
} }
else if( selectedCall->state == CALL_STATE_HOLD) else if( selectedCall->state == CALL_STATE_HOLD)
{ {
gtk_widget_set_sensitive( GTK_WIDGET(acceptButton), FALSE); gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE);
gtk_widget_set_sensitive( GTK_WIDGET(refuseButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), TRUE);
} }
else if( selectedCall->state == CALL_STATE_RINGING)
{
gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE);
}
else if(selectedCall->state == CALL_STATE_DIALING) else if(selectedCall->state == CALL_STATE_DIALING)
{ {
/*gtk_widget_hide( hangupButton );
gtk_widget_show( callButton );
gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(callButton), TRUE);
gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), FALSE); gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE);
gtk_widget_set_sensitive( GTK_WIDGET(holdButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), FALSE);*/
} }
else if (selectedCall->state == CALL_STATE_CURRENT) else if (selectedCall->state == CALL_STATE_CURRENT)
{ {
...@@ -136,14 +170,30 @@ selected(GtkTreeSelection *sel, GtkTreeModel *model) ...@@ -136,14 +170,30 @@ selected(GtkTreeSelection *sel, GtkTreeModel *model)
//gtk_box_pack_start (GTK_BOX (hbox), hangupButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/); //gtk_box_pack_start (GTK_BOX (hbox), hangupButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/);
//gtk_box_reorder_child(GTK_BOX (hbox), hangupButton, 0); //gtk_box_reorder_child(GTK_BOX (hbox), hangupButton, 0);
gtk_widget_show( hangupButton ); gtk_widget_show( hangupButton );
gtk_widget_set_sensitive( GTK_WIDGET(callButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), TRUE);
gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(holdButton), TRUE);
gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE); gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), TRUE);
} }
} }
}
/* 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;
val.g_type = G_TYPE_POINTER;
gtk_tree_model_get_value (model, &iter, 2, &val);
selectedCall = (call_t*) g_value_get_pointer(&val);
g_value_unset(&val);
update_buttons();
} }
/** /**
...@@ -158,36 +208,13 @@ accept( GtkWidget *widget, gpointer data ) ...@@ -158,36 +208,13 @@ accept( GtkWidget *widget, gpointer data )
} }
} }
/**
* Refuse incoming call
*/
static void
refuse( GtkWidget *widget, gpointer data )
{
if(selectedCall)
{
dbus_refuse(selectedCall);
}
}
/**
* Unhold call
*/
static void
unhold( GtkWidget *widget, gpointer data )
{
if(selectedCall)
{
dbus_unhold(selectedCall);
}
}
GtkWidget * GtkWidget *
create_call_tree (){ create_call_tree (){
GtkWidget *ret; GtkWidget *ret;
GtkWidget *sw; GtkWidget *sw;
GtkWidget *hbox; GtkWidget *hbox;
GtkWidget *view;
GtkWidget *image; GtkWidget *image;
GtkWidget *bbox; GtkWidget *bbox;
GtkCellRenderer *rend; GtkCellRenderer *rend;
...@@ -199,10 +226,9 @@ create_call_tree (){ ...@@ -199,10 +226,9 @@ create_call_tree (){
gtk_container_set_border_width (GTK_CONTAINER (ret), 0); gtk_container_set_border_width (GTK_CONTAINER (ret), 0);
sw = gtk_scrolled_window_new( NULL, NULL); sw = gtk_scrolled_window_new( NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0);
store = gtk_list_store_new (3, store = gtk_list_store_new (3,
GDK_TYPE_PIXBUF,// Icon GDK_TYPE_PIXBUF,// Icon
G_TYPE_STRING, // Description G_TYPE_STRING, // Description
...@@ -213,9 +239,6 @@ create_call_tree (){ ...@@ -213,9 +239,6 @@ create_call_tree (){
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store)); view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(view), FALSE);
/*g_signal_connect(G_OBJECT(rend), "toggled",
G_CALLBACK(module_toggled), module_store);*/
rend = gtk_cell_renderer_pixbuf_new(); rend = gtk_cell_renderer_pixbuf_new();
col = gtk_tree_view_column_new_with_attributes ("Icon", col = gtk_tree_view_column_new_with_attributes ("Icon",
rend, rend,
...@@ -238,100 +261,127 @@ create_call_tree (){ ...@@ -238,100 +261,127 @@ create_call_tree (){
store); store);
/* Action button */ /* Action button */
hbox = gtk_hbutton_box_new (); hbox = gtk_hbox_new (FALSE, 5);
gtk_button_box_set_spacing ( hbox, 10); gtk_button_box_set_spacing ( hbox, 5);
gtk_button_box_set_layout ( GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_START);
acceptButton = gtk_button_new_with_label ("Accept");
image = gtk_image_new_from_file( PIXMAPS_DIR "/accept.svg");
gtk_image_set_pixel_size(GTK_IMAGE(image), 16);
gtk_button_set_image(GTK_BUTTON(acceptButton), image);
gtk_widget_set_state( GTK_WIDGET(acceptButton), GTK_STATE_INSENSITIVE);
gtk_box_pack_start (GTK_BOX (hbox), acceptButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/);
g_signal_connect (G_OBJECT (acceptButton), "clicked",
G_CALLBACK (accept), NULL);
refuseButton = gtk_button_new_with_label ("Refuse");
image = gtk_image_new_from_file( PIXMAPS_DIR "/refuse.svg");
gtk_button_set_image(GTK_BUTTON(refuseButton), image);
gtk_widget_set_state( GTK_WIDGET(refuseButton), GTK_STATE_INSENSITIVE);
gtk_box_pack_start (GTK_BOX (hbox), refuseButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/);
g_signal_connect (G_OBJECT (refuseButton), "clicked",
G_CALLBACK (refuse), NULL);
unholdButton = gtk_button_new_with_label ("Unhold");
image = gtk_image_new_from_file( PIXMAPS_DIR "/unhold.svg");
gtk_button_set_image(GTK_BUTTON(unholdButton), image);
gtk_widget_set_state( GTK_WIDGET(unholdButton), GTK_STATE_INSENSITIVE);
gtk_box_pack_start (GTK_BOX (hbox), unholdButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/);
g_signal_connect (G_OBJECT (unholdButton), "clicked",
G_CALLBACK (unhold), NULL);
gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
/* 2nd row */
hbox = gtk_hbutton_box_new ();
gtk_button_box_set_spacing ( GTK_BUTTON_BOX(hbox), 10);
gtk_button_box_set_layout ( GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_START); gtk_button_box_set_layout ( GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_START);
callButton = gtk_button_new_with_label ("Call"); callButton = gtk_button_new ();
gtk_widget_set_state( GTK_WIDGET(callButton), GTK_STATE_INSENSITIVE); gtk_widget_set_state( GTK_WIDGET(callButton), GTK_STATE_INSENSITIVE);
image = gtk_image_new_from_file( PIXMAPS_DIR "/call.svg"); image = gtk_image_new_from_file( PIXMAPS_DIR "/call.svg");
gtk_button_set_image(GTK_BUTTON(callButton), image); gtk_button_set_image(GTK_BUTTON(callButton), image);
//gtk_button_set_image_position( button, GTK_POS_TOP); //gtk_button_set_image_position( button, GTK_POS_TOP);
gtk_box_pack_start (GTK_BOX (hbox), callButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/); gtk_box_pack_start (GTK_BOX (hbox), callButton, FALSE /*expand*/, FALSE /*fill*/, 0 /*padding*/);
g_signal_connect (G_OBJECT (callButton), "clicked", g_signal_connect (G_OBJECT (callButton), "clicked",
G_CALLBACK (place_call), NULL); G_CALLBACK (call_button), NULL);
hangupButton = gtk_button_new_with_label ("Hang up"); hangupButton = gtk_button_new ();
gtk_widget_hide( hangupButton ); gtk_widget_hide( hangupButton );
gtk_widget_set_state( GTK_WIDGET(hangupButton), GTK_STATE_INSENSITIVE); gtk_widget_set_state( GTK_WIDGET(hangupButton), GTK_STATE_INSENSITIVE);
gtk_box_pack_end (GTK_BOX (hbox), hangupButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/); gtk_box_pack_start (GTK_BOX (hbox), hangupButton, FALSE /*expand*/, FALSE /*fill*/, 0 /*padding*/);
image = gtk_image_new_from_file( PIXMAPS_DIR "/hang_up.svg"); image = gtk_image_new_from_file( PIXMAPS_DIR "/hang_up.svg");
gtk_button_set_image(GTK_BUTTON(hangupButton), image); gtk_button_set_image(GTK_BUTTON(hangupButton), image);
//gtk_button_set_image_position( button, GTK_POS_TOP); //gtk_button_set_image_position( button, GTK_POS_TOP);
g_signal_connect (G_OBJECT (hangupButton), "clicked", g_signal_connect (G_OBJECT (hangupButton), "clicked",
G_CALLBACK (hang_up), NULL); G_CALLBACK (hang_up), NULL);
holdButton = gtk_button_new_with_label ("Hold"); unholdButton = gtk_button_new ();
gtk_widget_set_state( GTK_WIDGET(holdButton), GTK_STATE_INSENSITIVE); image = gtk_image_new_from_file( PIXMAPS_DIR "/unhold.svg");
gtk_button_set_image(GTK_BUTTON(unholdButton), image);
gtk_widget_set_state( GTK_WIDGET(unholdButton), GTK_STATE_INSENSITIVE);
gtk_box_pack_end (GTK_BOX (hbox), unholdButton, FALSE /*expand*/, FALSE /*fill*/, 0 /*padding*/);
g_signal_connect (G_OBJECT (unholdButton), "clicked",
G_CALLBACK (unhold), NULL);
holdButton = gtk_button_new ();
image = gtk_image_new_from_file( PIXMAPS_DIR "/hold.svg"); image = gtk_image_new_from_file( PIXMAPS_DIR "/hold.svg");
gtk_box_pack_end (GTK_BOX (hbox), holdButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/);
gtk_button_set_image(GTK_BUTTON(holdButton), image); gtk_button_set_image(GTK_BUTTON(holdButton), image);
gtk_widget_set_state( GTK_WIDGET(holdButton), GTK_STATE_INSENSITIVE);
gtk_box_pack_end (GTK_BOX (hbox), holdButton, FALSE /*expand*/, FALSE /*fill*/, 0 /*padding*/);
g_signal_connect (G_OBJECT (holdButton), "clicked", g_signal_connect (G_OBJECT (holdButton), "clicked",
G_CALLBACK (hold), NULL); G_CALLBACK (hold), NULL);
transfertButton = gtk_button_new_with_label ("Transfert"); transfertButton = gtk_button_new ();
gtk_widget_set_state( GTK_WIDGET(transfertButton), GTK_STATE_INSENSITIVE);
image = gtk_image_new_from_file( PIXMAPS_DIR "/transfert.svg"); image = gtk_image_new_from_file( PIXMAPS_DIR "/transfert.svg");
gtk_button_set_image(GTK_BUTTON(transfertButton), image); gtk_button_set_image(GTK_BUTTON(transfertButton), image);
gtk_box_pack_end (GTK_BOX (hbox), transfertButton, TRUE /*expand*/, TRUE /*fill*/, 10 /*padding*/); gtk_widget_set_state( GTK_WIDGET(transfertButton), GTK_STATE_INSENSITIVE);
gtk_box_pack_end (GTK_BOX (hbox), transfertButton, FALSE /*expand*/, FALSE /*fill*/, 0 /*padding*/);
g_signal_connect (G_OBJECT (transfertButton), "clicked", g_signal_connect (G_OBJECT (transfertButton), "clicked",
G_CALLBACK (transfert), NULL); G_CALLBACK (transfert), NULL);
gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE /*expand*/, FALSE /*fill*/, 0 /*padding*/);
gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (ret), hbox, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
gtk_widget_show(ret); gtk_widget_show(ret);
return ret; return ret;
} }
void
update_call_tree_remove (call_t * c)
{
GtkTreeIter iter;
GValue val;
call_t * iterCall;
val.g_type = G_TYPE_POINTER;
gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, 2, &val);
iterCall = (call_t*) g_value_get_pointer(&val);
g_value_unset(&val);
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))
{
val.g_type = G_TYPE_POINTER;
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);
}
}
}
if(selectedCall == c)
selectedCall = NULL;
update_buttons();
}
void void
update_call_tree () update_call_tree (call_t * c)
{ {
GdkPixbuf *pixbuf; GdkPixbuf *pixbuf;
GtkTreeIter iter; GtkTreeIter iter;
GValue val;
call_t * iterCall;
gtk_list_store_clear(store); val.g_type = G_TYPE_POINTER;
gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, 2, &val);
iterCall = (call_t*) g_value_get_pointer(&val);
g_value_unset(&val);
int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL);
int i; int i;
for( i = 0; i < call_list_get_size(); i++) for( i = 0; i < nbChild; i++)
{ {
call_t * c = call_list_get_nth (i); if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, NULL, i))
if (c) {
val.g_type = G_TYPE_POINTER;
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)
{ {
// Existing call in the list
gchar * markup; gchar * markup;
if (c->state == CALL_STATE_CURRENT) if (c->state == CALL_STATE_CURRENT)
{ {
...@@ -348,13 +398,13 @@ update_call_tree () ...@@ -348,13 +398,13 @@ update_call_tree ()
call_get_number(c)); call_get_number(c));
} }
gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter);
if (c->state == CALL_STATE_HOLD) if (c->state == CALL_STATE_HOLD)
{ {
pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/hold.svg", NULL); pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/hold.svg", NULL);
} }
else if (c->state == CALL_STATE_INCOMING) else if (c->state == CALL_STATE_RINGING)
{ {
pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/ring.svg", NULL); pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/ring.svg", NULL);
} }
...@@ -362,6 +412,51 @@ update_call_tree () ...@@ -362,6 +412,51 @@ update_call_tree ()
{ {
pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/current.svg", NULL); pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/current.svg", NULL);
} }
//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));
}
}
}
update_buttons();
//return row_ref;
}
void
update_call_tree_add (call_t * c)
{
GdkPixbuf *pixbuf;
GtkTreeIter iter;
// New call in the list
gchar * markup;
markup = g_markup_printf_escaped("<b>%s</b>\n"
"%s",
call_get_name(c),
call_get_number(c));
gtk_list_store_append (store, &iter);
if (c->state == CALL_STATE_INCOMING)
{
pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/ring.svg", NULL);
}
else if (c->state == CALL_STATE_DIALING) else if (c->state == CALL_STATE_DIALING)
{ {
pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/dial.svg", NULL); pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/dial.svg", NULL);
...@@ -385,16 +480,5 @@ update_call_tree () ...@@ -385,16 +480,5 @@ update_call_tree ()
//g_free(markup); //g_free(markup);
} update_buttons();
}
gtk_widget_set_sensitive( GTK_WIDGET(acceptButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(refuseButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(callButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), FALSE);
gtk_widget_set_sensitive( GTK_WIDGET(holdButton), FALSE);
//gtk_widget_set_sensitive( GTK_WIDGET(transfertButton), FALSE);
//return row_ref;
} }
...@@ -91,7 +91,7 @@ call_state_cb (DBusGProxy *proxy, ...@@ -91,7 +91,7 @@ call_state_cb (DBusGProxy *proxy,
} }
else if ( strcmp(state, "RINGING") == 0 ) else if ( strcmp(state, "RINGING") == 0 )
{ {
//sflphone_hung_up (c); sflphone_ringing (c);
} }
else if ( strcmp(state, "CURRENT") == 0 ) else if ( strcmp(state, "CURRENT") == 0 )
{ {
......
...@@ -106,7 +106,7 @@ create_main_window () ...@@ -106,7 +106,7 @@ create_main_window ()
window = gtk_window_new (GTK_WINDOW_TOPLEVEL); window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width (GTK_CONTAINER (window), 0); gtk_container_set_border_width (GTK_CONTAINER (window), 0);
gtk_window_set_title (GTK_WINDOW (window), PACKAGE); gtk_window_set_title (GTK_WINDOW (window), PACKAGE);
gtk_window_set_default_size (GTK_WINDOW (window), 200, 50); gtk_window_set_default_size (GTK_WINDOW (window), 250, 250);
gtk_window_set_default_icon_from_file (PIXMAPS_DIR "/sflphone.png", gtk_window_set_default_icon_from_file (PIXMAPS_DIR "/sflphone.png",
NULL); NULL);
...@@ -128,8 +128,8 @@ create_main_window () ...@@ -128,8 +128,8 @@ create_main_window ()
* and spacing settings */ * and spacing settings */
vbox = gtk_vbox_new ( FALSE /*homogeneous*/, 0 /*spacing*/); vbox = gtk_vbox_new ( FALSE /*homogeneous*/, 0 /*spacing*/);
subvbox = gtk_vbox_new ( FALSE /*homogeneous*/, 10 /*spacing*/); subvbox = gtk_vbox_new ( FALSE /*homogeneous*/, 5 /*spacing*/);
gtk_container_set_border_width (GTK_CONTAINER(subvbox), 10); gtk_container_set_border_width (GTK_CONTAINER(subvbox), 5);
button = create_menus(); button = create_menus();
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
...@@ -138,9 +138,12 @@ create_main_window () ...@@ -138,9 +138,12 @@ create_main_window ()
button = create_screen(); button = create_screen();
gtk_box_pack_start (GTK_BOX (subvbox), button, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/); gtk_box_pack_start (GTK_BOX (subvbox), button, FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
gtk_box_pack_start (GTK_BOX (subvbox), create_dialpad(), FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/); //gtk_box_pack_start (GTK_BOX (subvbox), create_dialpad(), FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
gtk_box_pack_start (GTK_BOX (subvbox), create_call_tree(), TRUE /*expand*/, TRUE /*fill*/, 0 /*padding*/); gtk_box_pack_start (GTK_BOX (subvbox), create_call_tree(), TRUE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
/* Status bar */
gtk_box_pack_start (GTK_BOX (vbox), gtk_statusbar_new(), FALSE /*expand*/, TRUE /*fill*/, 0 /*padding*/);
gtk_container_add (GTK_CONTAINER (window), vbox); gtk_container_add (GTK_CONTAINER (window), vbox);
/* make sure that everything, window and label, are visible */ /* make sure that everything, window and label, are visible */
......
...@@ -167,6 +167,35 @@ create_debug_menu() ...@@ -167,6 +167,35 @@ create_debug_menu()
} }
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
GtkWidget * GtkWidget *
create_view_menu()
{
GtkWidget * menu;
GtkWidget * root_menu;
GtkWidget * menu_items;
menu = gtk_menu_new ();
menu_items = gtk_menu_item_new_with_label ("Show Dialpad");
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
g_signal_connect_swapped (G_OBJECT (menu_items), "activate",
G_CALLBACK (debug_hang_up),
NULL);
gtk_widget_show (menu_items);
/*menu_items = gtk_menu_item_new_with_label ("Transfert current call");
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
g_signal_connect_swapped (G_OBJECT (menu_items), "activate",
G_CALLBACK (debug_transfert),
NULL);
gtk_widget_show (menu_items);*/
root_menu = gtk_menu_item_new_with_mnemonic ("_View");
gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), menu);
return root_menu;
}
/* ----------------------------------------------------------------- */
GtkWidget *
create_menus ( ) create_menus ( )
{ {
...@@ -179,6 +208,9 @@ create_menus ( ) ...@@ -179,6 +208,9 @@ create_menus ( )
root_menu = create_call_menu(); root_menu = create_call_menu();
gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu);
root_menu = create_view_menu();
gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu);
#ifdef DEBUG #ifdef DEBUG
root_menu = create_debug_menu(); root_menu = create_debug_menu();
gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu); gtk_menu_shell_append (GTK_MENU_SHELL (menu_bar), root_menu);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment