[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