[Xfce4-commits] [apps/parole] 01/07: Add a dialog to go to a specific position in the stream
noreply at xfce.org
noreply at xfce.org
Mon Jun 9 02:49:17 CEST 2014
This is an automated email from the git hooks/post-receive script.
bluesabre pushed a commit to branch master
in repository apps/parole.
commit 959e0d523ee228f2c09fe4fb88a129447f905197
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date: Mon Mar 17 17:05:40 2014 +0100
Add a dialog to go to a specific position in the stream
---
data/interfaces/parole.ui | 80 +++++++++++++++++++++++++++++--------------
src/parole-player.c | 83 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 138 insertions(+), 25 deletions(-)
diff --git a/data/interfaces/parole.ui b/data/interfaces/parole.ui
index 782a376..65f07c6 100644
--- a/data/interfaces/parole.ui
+++ b/data/interfaces/parole.ui
@@ -1,11 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.16.1 -->
<interface>
- <!-- interface-requires gtk+ 3.0 -->
+ <requires lib="gtk+" version="3.0"/>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">100</property>
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
+ <object class="GtkImage" id="image_about">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">gtk-about-symbolic</property>
+ <property name="use_fallback">True</property>
+ </object>
+ <object class="GtkImage" id="image_disc">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="pixel_size">16</property>
+ <property name="icon_name">media-optical-symbolic</property>
+ <property name="use_fallback">True</property>
+ </object>
<object class="GtkImage" id="image_help_reportbug">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -48,32 +63,25 @@
<property name="icon_name">media-skip-backward-symbolic</property>
<property name="use_fallback">True</property>
</object>
- <object class="GtkImage" id="image_about">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="pixel_size">16</property>
- <property name="icon_name">gtk-about-symbolic</property>
- <property name="use_fallback">True</property>
- </object>
- <object class="GtkImage" id="image_disc">
+ <object class="GtkImage" id="image_menu_fullscreen">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
- <property name="icon_name">media-optical-symbolic</property>
+ <property name="icon_name">view-fullscreen-symbolic</property>
<property name="use_fallback">True</property>
</object>
- <object class="GtkImage" id="image_menu_fullscreen">
+ <object class="GtkImage" id="image_open">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
- <property name="icon_name">view-fullscreen-symbolic</property>
+ <property name="icon_name">document-open-symbolic</property>
<property name="use_fallback">True</property>
</object>
- <object class="GtkImage" id="image_open">
+ <object class="GtkImage" id="image_open1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
- <property name="icon_name">document-open-symbolic</property>
+ <property name="icon_name">go-jump-symbolic</property>
<property name="use_fallback">True</property>
</object>
<object class="GtkImage" id="image_open_location">
@@ -82,7 +90,7 @@
<property name="pixel_size">16</property>
<property name="icon_name">folder-remote-symbolic</property>
<property name="use_fallback">True</property>
- <property name="icon-size">1</property>
+ <property name="icon_size">1</property>
</object>
<object class="GtkImage" id="image_plugins">
<property name="visible">True</property>
@@ -145,10 +153,10 @@
<property name="title" translatable="yes">Parole Media Player</property>
<property name="window_position">center</property>
<property name="icon_name">parole</property>
- <signal name="destroy" handler="parole_player_destroy_cb" swapped="no"/>
<signal name="configure-event" handler="parole_player_configure_event_cb" swapped="no"/>
- <signal name="key-press-event" handler="parole_player_key_press" swapped="no"/>
<signal name="delete-event" handler="parole_player_delete_event_cb" after="yes" swapped="no"/>
+ <signal name="destroy" handler="parole_player_destroy_cb" swapped="no"/>
+ <signal name="key-press-event" handler="parole_player_key_press" swapped="no"/>
<child>
<object class="GtkBox" id="box1">
<property name="visible">True</property>
@@ -176,8 +184,8 @@
<property name="use_underline">True</property>
<property name="image">image_open</property>
<property name="use_stock">False</property>
- <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<signal name="activate" handler="parole_player_menu_add_cb" swapped="no"/>
+ <accelerator key="o" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
@@ -188,8 +196,8 @@
<property name="use_underline">True</property>
<property name="image">image_open_location</property>
<property name="use_stock">False</property>
- <accelerator key="l" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<signal name="activate" handler="parole_player_menu_open_location_cb" swapped="no"/>
+ <accelerator key="l" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
<child>
@@ -246,8 +254,8 @@
<property name="use_underline">True</property>
<property name="image">image_quit</property>
<property name="use_stock">False</property>
- <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<signal name="activate" handler="parole_player_menu_exit_cb" swapped="no"/>
+ <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
</object>
</child>
</object>
@@ -293,6 +301,16 @@
<accelerator key="F9" signal="activate"/>
</object>
</child>
+ <child>
+ <object class="GtkImageMenuItem" id="goto_position">
+ <property name="label" translatable="yes">Go to position</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="image">image_open1</property>
+ <property name="use_stock">False</property>
+ <accelerator key="g" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -429,9 +447,9 @@
<property name="use_underline">True</property>
<property name="image">image_volume_up</property>
<property name="use_stock">False</property>
- <accelerator key="equal" signal="activate"/>
- <accelerator key="plus" signal="activate"/>
<signal name="activate" handler="parole_player_volume_up" swapped="no"/>
+ <accelerator key="plus" signal="activate"/>
+ <accelerator key="equal" signal="activate"/>
</object>
</child>
<child>
@@ -442,8 +460,8 @@
<property name="use_underline">True</property>
<property name="image">image_volume_down</property>
<property name="use_stock">False</property>
- <accelerator key="minus" signal="activate"/>
<signal name="activate" handler="parole_player_volume_down" swapped="no"/>
+ <accelerator key="minus" signal="activate"/>
</object>
</child>
<child>
@@ -454,8 +472,8 @@
<property name="use_underline">True</property>
<property name="image">image_volume_mute</property>
<property name="use_stock">False</property>
- <accelerator key="0" signal="activate"/>
<signal name="activate" handler="parole_player_volume_mute" swapped="no"/>
+ <accelerator key="0" signal="activate"/>
</object>
</child>
</object>
@@ -1009,8 +1027,20 @@ audio-volume-high-symbolic
audio-volume-low-symbolic
audio-volume-medium-symbolic</property>
<property name="use_symbolic">True</property>
- <signal name="value-changed" handler="parole_player_volume_value_changed_cb" swapped="no"/>
<signal name="scroll-event" handler="parole_player_volume_scroll_event_cb" swapped="no"/>
+ <signal name="value-changed" handler="parole_player_volume_value_changed_cb" swapped="no"/>
+ <child internal-child="plus_button">
+ <object class="GtkButton" id="volumebutton-plus_button1">
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ </object>
+ </child>
+ <child internal-child="minus_button">
+ <object class="GtkButton" id="volumebutton-minus_button1">
+ <property name="can_focus">False</property>
+ <property name="receives_default">False</property>
+ </object>
+ </child>
</object>
<packing>
<property name="expand">False</property>
diff --git a/src/parole-player.c b/src/parole-player.c
index 3e013d1..33bed48 100644
--- a/src/parole-player.c
+++ b/src/parole-player.c
@@ -2653,6 +2653,86 @@ on_contents_clicked (GtkWidget *w, ParolePlayer *player)
}
}
+gboolean
+on_goto_position_clicked (GtkWidget *w, ParolePlayer *player)
+{
+ GtkWidget *dialog;
+ GtkWidget *vbox, *hbox, *label, *spin_hrs, *spin_mins, *spin_secs;
+ GtkAdjustment *adjustment;
+ gint response;
+ gdouble duration = 0;
+ int position, hrs, mins, secs;
+
+ /* Create dialog */
+ dialog = gtk_dialog_new_with_buttons (_("Go to position"),
+ GTK_WINDOW(player->priv->window),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ _("Cancel"), GTK_RESPONSE_CANCEL,
+ _("Go"), GTK_RESPONSE_OK,
+ NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+
+ /* pack boxes and spinbutton */
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
+ gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG(dialog))), vbox, TRUE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
+ //gtk_widget_show (vbox);
+
+ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
+ //gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Position:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0);
+ gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+ //gtk_widget_show (label);
+
+ /* Get the stream length and set that as maximum */
+ adjustment = gtk_range_get_adjustment (GTK_RANGE (player->priv->range));
+ duration = gtk_adjustment_get_upper (adjustment);
+
+ // FIXME: Always round the hrs down
+ spin_hrs = gtk_spin_button_new_with_range (0, duration / 3600, 1);
+ spin_mins = gtk_spin_button_new_with_range (0, 59, 1);
+ spin_secs = gtk_spin_button_new_with_range (0, 59, 1);
+ gtk_box_pack_start (GTK_BOX (hbox), spin_hrs, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), spin_mins, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), spin_secs, FALSE, FALSE, 0);
+ gtk_widget_show_all (vbox);
+
+ if ( duration < 3600 )
+ gtk_widget_set_sensitive (GTK_WIDGET (spin_hrs), FALSE);
+ if ( duration < 60 )
+ gtk_widget_set_sensitive (GTK_WIDGET (spin_mins), FALSE);
+ if ( duration = 0 )
+ {
+ gtk_widget_set_sensitive (GTK_WIDGET (spin_secs), FALSE);
+ gtk_label_set_text (GTK_LABEL (label), _("This stream isn't searchable."));
+ }
+
+ /* Should the player always be paused when opening up that dialog? */
+ //parole_gst_pause (PAROLE_GST (player->priv->gst));
+
+ // FIXME: Mouse-cursor disappears when it leaves the modal dialog and hovers the content-area
+ /* show dialog */
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+ if (response == GTK_RESPONSE_OK)
+ {
+ /* update range according to the value */
+ hrs = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin_hrs));
+ mins = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin_mins));
+ secs = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin_secs));
+ position = hrs*3600 + mins*60 + secs;
+ parole_gst_seek (PAROLE_GST (player->priv->gst), position);
+ parole_player_change_range_value (player, (double) position);
+ }
+
+ gtk_widget_destroy (dialog);
+
+ return (response == GTK_RESPONSE_OK);
+}
+
/**
*
* Draw a simple rectangular GtkOverlay
@@ -2883,6 +2963,7 @@ parole_player_init (ParolePlayer *player)
GtkRecentFilter *recent_filter;
GtkWidget *clear_recent;
GtkWidget *recent_separator;
+ GtkWidget *goto_position;
GtkWidget *bug_report, *contents;
@@ -3124,6 +3205,8 @@ parole_player_init (ParolePlayer *player)
g_signal_connect (bug_report, "activate", G_CALLBACK(on_bug_report_clicked), player);
contents = GTK_WIDGET (gtk_builder_get_object (builder, "contents"));
g_signal_connect (contents, "activate", G_CALLBACK(on_contents_clicked), player);
+ goto_position = GTK_WIDGET (gtk_builder_get_object (builder, "goto_position"));
+ g_signal_connect (goto_position, "activate", G_CALLBACK(on_goto_position_clicked), player);
/* End Menu Bar */
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list