diff --git a/gnome/src/mainwindow.c b/gnome/src/mainwindow.c index 40482223b7a2e07cd60a6bdeb14d749545689ec5..081b6fddf80045dbae7040563bcf2bbd8e6a5ee6 100644 --- a/gnome/src/mainwindow.c +++ b/gnome/src/mainwindow.c @@ -244,6 +244,7 @@ create_main_window() seekslider = GTK_WIDGET(sfl_seekslider_new()); if(seekslider == NULL) WARN("Error could not create widget\n"); + gtk_box_pack_start(GTK_BOX(vbox), seekslider, FALSE, TRUE, 0); /* Add tree views */ @@ -293,6 +294,7 @@ create_main_window() gtk_widget_hide(contacts_tab->tree); /* show playback scale only if a recorded call is selected */ + sfl_seekslider_set_display(SFL_SEEKSLIDER(seekslider), SFL_SEEKSLIDER_DISPLAY_PLAY); gtk_widget_set_sensitive(seekslider, FALSE); /* don't show waiting layer */ diff --git a/gnome/src/seekslider.c b/gnome/src/seekslider.c index d8dd616240dd1b306a064742f369e013d2a8c361..3f53a743c7884f7807a7134a46a7b2d40a4c265d 100644 --- a/gnome/src/seekslider.c +++ b/gnome/src/seekslider.c @@ -37,6 +37,8 @@ #include "seekslider.h" #include "dbus.h" #include "logger.h" +#include "calltab.h" +// #include "uimanager.h" /** * SECTION:sfl-seekslider @@ -70,11 +72,17 @@ static gboolean on_playback_scale_pressed_cb(GtkWidget *widget, GdkEventButton * static gboolean on_playback_scale_released_cb(GtkWidget *widget, GdkEventButton *event, gpointer user_data); static gboolean on_playback_scale_moved_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data); static gboolean on_playback_scale_scrolled_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data); +static void sfl_seekslider_play_playback_record_cb (GtkButton *button G_GNUC_UNUSED, gpointer user_data); +static void sfl_seekslider_stop_playback_record_cb (GtkButton *button G_GNUC_UNUSED, gpointer user_data); struct SFLSeekSliderPrivate { GtkWidget *hbox; GtkWidget *hscale; + GtkWidget *playRecordWidget; + GtkWidget *stopRecordWidget; + GtkWidget *playRecordImage; + GtkWidget *stopRecordImage; gboolean can_update_scale; }; @@ -122,6 +130,18 @@ sfl_seekslider_init (SFLSeekSlider *seekslider) if(seekslider->priv->hbox == NULL) WARN("Could not create new horizontal box for seekslider"); + seekslider->priv->playRecordImage = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_BUTTON); + seekslider->priv->playRecordWidget = gtk_button_new(); + gtk_button_set_image(GTK_BUTTON(seekslider->priv->playRecordWidget), seekslider->priv->playRecordImage); + if(seekslider->priv->playRecordWidget == NULL) + WARN("Could not create new playback button for seekslider"); + + seekslider->priv->stopRecordImage = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE, GTK_ICON_SIZE_BUTTON); + seekslider->priv->stopRecordWidget = gtk_button_new(); + gtk_button_set_image(GTK_BUTTON(seekslider->priv->stopRecordWidget), seekslider->priv->stopRecordImage); + if(seekslider->priv->stopRecordWidget == NULL) + WARN("Could not create mew pause button for seekslider"); + g_signal_connect(G_OBJECT(seekslider->priv->hscale), "change-value", G_CALLBACK(on_playback_scale_value_changed_cb), seekslider); @@ -139,10 +159,21 @@ sfl_seekslider_init (SFLSeekSlider *seekslider) g_object_set(G_OBJECT(seekslider->priv->hscale), "draw-value", FALSE, NULL); + + g_signal_connect_object (G_OBJECT (seekslider->priv->playRecordWidget), "pressed", + G_CALLBACK(sfl_seekslider_play_playback_record_cb), seekslider, 0); + + g_signal_connect_object (G_OBJECT (seekslider->priv->stopRecordWidget), "pressed", + G_CALLBACK(sfl_seekslider_stop_playback_record_cb), seekslider, 0); + + gtk_box_pack_start(GTK_BOX(seekslider->priv->hbox), seekslider->priv->playRecordWidget, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(seekslider->priv->hbox), seekslider->priv->stopRecordWidget, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(seekslider->priv->hbox), seekslider->priv->hscale, TRUE, TRUE, 0); - gtk_widget_show (seekslider->priv->hscale); gtk_widget_show (seekslider->priv->hbox); + gtk_widget_show (seekslider->priv->hscale); + gtk_widget_hide (seekslider->priv->playRecordWidget); + gtk_widget_hide (seekslider->priv->stopRecordWidget); gtk_box_pack_start(GTK_BOX(&seekslider->parent), seekslider->priv->hbox, TRUE, TRUE, 0); @@ -249,6 +280,54 @@ on_playback_scale_scrolled_cb(GtkWidget *widget G_GNUC_UNUSED, GdkEvent *event G return TRUE; } +static void sfl_seekslider_play_playback_record_cb (GtkButton *button G_GNUC_UNUSED, gpointer user_data) +{ + DEBUG("Start playback button pressed"); + SFLSeekSlider *seekslider = (SFLSeekSlider *)user_data; + + callable_obj_t *selectedCall = calltab_get_selected_call(history_tab); + if (selectedCall == NULL) { + ERROR("No selected object in playback record callback"); + return; + } + + DEBUG("Start selected call file playback %s", selectedCall->_recordfile); + selectedCall->_record_is_playing = dbus_start_recorded_file_playback(selectedCall->_recordfile); + + // update_actions(); + + sfl_seekslider_set_display(seekslider, SFL_SEEKSLIDER_DISPLAY_PAUSE); +} + +static void sfl_seekslider_stop_playback_record_cb (GtkButton *button G_GNUC_UNUSED, gpointer user_data) +{ + DEBUG("Stop playback button pressed"); + SFLSeekSlider *seekslider = (SFLSeekSlider *)user_data; + + callable_obj_t *selectedCall = calltab_get_selected_call(history_tab); + + if (selectedCall == NULL) { + ERROR("No selected object in history treeview"); + return; + } + + if (selectedCall) { + if (selectedCall->_recordfile == NULL) { + ERROR("Record file is NULL"); + return; + } + + dbus_stop_recorded_file_playback(selectedCall->_recordfile); + DEBUG("Stop selected call file playback %s", selectedCall->_recordfile); + selectedCall->_record_is_playing = FALSE; + } + + // update_actions(); + + sfl_seekslider_set_display(seekslider, SFL_SEEKSLIDER_DISPLAY_PLAY); +} + + void sfl_seekslider_update_scale(SFLSeekSlider *seekslider, guint current, guint size) { if (size == 0) @@ -262,3 +341,24 @@ void sfl_seekslider_update_scale(SFLSeekSlider *seekslider, guint current, guint if (seekslider->priv->can_update_scale) gtk_range_set_value(GTK_RANGE(seekslider->priv->hscale), val); } + +void sfl_seekslider_set_display(SFLSeekSlider *seekslider, SFLSeekSliderDisplay display) { + + // g_return_if_fail (SFL_IS_SEEKSLIDER (seekslider)); + if(seekslider == NULL) + return; + + switch(display) { + case SFL_SEEKSLIDER_DISPLAY_PAUSE: + gtk_widget_hide(seekslider->priv->playRecordWidget); + gtk_widget_show(seekslider->priv->stopRecordWidget); + break; + case SFL_SEEKSLIDER_DISPLAY_PLAY: + gtk_widget_hide(seekslider->priv->stopRecordWidget); + gtk_widget_show(seekslider->priv->playRecordWidget); + break; + default: + WARN("Unknown display option for seekslider"); + break; + } +} diff --git a/gnome/src/seekslider.h b/gnome/src/seekslider.h index 73985807e1581d798722553a0a579e03a086b3da..a47d7881318eff063d6ec57ef9b92c9bc5deb6f2 100644 --- a/gnome/src/seekslider.h +++ b/gnome/src/seekslider.h @@ -55,12 +55,19 @@ struct _SFLSeekSliderClass GtkHBoxClass parent; }; +typedef enum { + SFL_SEEKSLIDER_DISPLAY_PAUSE, + SFL_SEEKSLIDER_DISPLAY_PLAY, +} SFLSeekSliderDisplay; + GType sfl_seekslider_get_type(void); SFLSeekSlider *sfl_seekslider_new(void); void sfl_seekslider_update_scale(SFLSeekSlider *seekslider, guint current, guint size); +void sfl_seekslider_set_display(SFLSeekSlider *seekslider, SFLSeekSliderDisplay display); + G_END_DECLS #endif /* __RB_SEEKSLIDER_H */ diff --git a/gnome/src/ui.xml b/gnome/src/ui.xml index 6dadc1bd3e4dcf8e1ba12b5974e64afdd1251601..a52121e40cb13b8ee252983ad0186cb4047e14e1 100644 --- a/gnome/src/ui.xml +++ b/gnome/src/ui.xml @@ -56,8 +56,6 @@ <toolitem name="VoicemailToolbar" action="Voicemail"/> <toolitem name="HistoryToolbar" action="History"/> - <toolitem name="StartPlaybackRecordToolbar" action="StartPlaybackRecord"/> - <toolitem name="StopPlaybackRecordToolbar" action="StopPlaybackRecord" /> </toolbar> <popup name="PopupMenu"> diff --git a/gnome/src/uimanager.c b/gnome/src/uimanager.c index 567e959654b7345ae1ee9136991981071c961766..848ea9dcd7db889f596ed14e4ef86d1f02aa6002 100644 --- a/gnome/src/uimanager.c +++ b/gnome/src/uimanager.c @@ -98,9 +98,6 @@ static GtkWidget * muteWidget_; static GtkWidget * voicemailToolbar_; static GtkWidget * imToolbar_; -static GtkWidget * playRecordWidget_; -static GtkWidget * stopRecordWidget_; - static GtkWidget * editable_num_; static GtkWidget * edit_dialog_; @@ -222,10 +219,6 @@ update_toolbar_for_call(callable_obj_t *selectedCall, gboolean instant_messaging else if (active_calltree_tab == history_tab) { if (is_non_empty(selectedCall->_recordfile)) { main_window_show_playback_scale(); - if (selectedCall->_record_is_playing) - add_to_toolbar(toolbar_, stopRecordWidget_, pos++); - else - add_to_toolbar(toolbar_, playRecordWidget_, pos++); } else { main_window_hide_playback_scale(); @@ -369,11 +362,6 @@ update_toolbar_for_conference(conference_obj_t * selectedConf, gboolean instant_ } else if (active_calltree_tab == history_tab) { if (is_non_empty(selectedConf->_recordfile)) { main_window_show_playback_scale(); - pos = 2; - if (selectedConf->_record_is_playing) - add_to_toolbar(toolbar_, stopRecordWidget_, pos); - else - add_to_toolbar(toolbar_, playRecordWidget_, pos); } else { main_window_hide_playback_scale(); @@ -476,8 +464,6 @@ update_actions() remove_from_toolbar(offHoldToolbar_); remove_from_toolbar(newCallWidget_); remove_from_toolbar(pickUpWidget_); - remove_from_toolbar(playRecordWidget_); - remove_from_toolbar(stopRecordWidget_); if (addrbook) { remove_from_toolbar(contactButton_); @@ -1111,11 +1097,12 @@ static const GtkActionEntry menu_entries[] = { N_("Quit the program"), G_CALLBACK(call_quit) }, { - "StartPlaybackRecord", GTK_STOCK_MEDIA_PLAY, N_("_Playback record"), NULL, + // "StartPlaybackRecord", GTK_STOCK_MEDIA_PLAY, N_("_Playback record"), NULL, + "StartPlaybackRecord", "OK", N_("_Playback record"), NULL, N_("Playback recorded file"), G_CALLBACK(start_playback_record_cb) }, { - "StopPlaybackRecord", GTK_STOCK_MEDIA_PAUSE, N_("_Stop playback"), NULL, + "StopPlaybackRecord", "AH", N_("_Stop playback"), NULL, N_("Stop recorded file playback"), G_CALLBACK(stop_playback_record_cb) }, @@ -1783,8 +1770,6 @@ create_toolbar_actions(GtkUIManager *ui) muteWidget_ = get_widget(ui, "/ToolbarActions/MuteToolbar"); imToolbar_ = get_widget(ui, "/ToolbarActions/InstantMessagingToolbar"); historyButton_ = get_widget(ui, "/ToolbarActions/HistoryToolbar"); - playRecordWidget_ = get_widget(ui, "/ToolbarActions/StartPlaybackRecordToolbar"); - stopRecordWidget_ = get_widget(ui, "/ToolbarActions/StopPlaybackRecordToolbar"); if (addrbook) contactButton_ = get_widget(ui, "/ToolbarActions/AddressbookToolbar");