[totem] Fix the configuration dialogue in the jamendo plugin



commit da410ba883ec34ae6b559c7250fb68517c75617f
Author: Philip Withnall <philip tecnocode co uk>
Date:   Sun Jul 11 01:07:38 2010 +0100

    Fix the configuration dialogue in the jamendo plugin

 src/plugins/jamendo/jamendo.py |  116 ++++++++++--------
 src/plugins/jamendo/jamendo.ui |  258 +++++++++++++++-------------------------
 2 files changed, 158 insertions(+), 216 deletions(-)
---
diff --git a/src/plugins/jamendo/jamendo.py b/src/plugins/jamendo/jamendo.py
index b147584..33e9f54 100644
--- a/src/plugins/jamendo/jamendo.py
+++ b/src/plugins/jamendo/jamendo.py
@@ -88,40 +88,37 @@ class JamendoPlugin(gobject.GObject, Peas.Activatable, PeasUI.Configurable):
         Plugin activation.
         """
         # Initialise the interface
-        self.builder = Totem.plugin_load_interface ("jamendo", "jamendo.ui", True, totem_object.get_main_window (), self)
-        self.config_dialog = self.builder.get_object('config_dialog')
-        self.popup = self.builder.get_object('popup_menu')
-        container = self.builder.get_object('container')
-        self.notebook = self.builder.get_object('notebook')
-        self.search_entry = self.builder.get_object('search_entry')
-        self.search_combo = self.builder.get_object('search_combo')
+        builder = Totem.plugin_load_interface ("jamendo", "jamendo.ui", True, totem_object.get_main_window (), self)
+        self.popup = builder.get_object('popup_menu')
+        container = builder.get_object('container')
+        self.notebook = builder.get_object('notebook')
+        self.search_entry = builder.get_object('search_entry')
+        self.search_combo = builder.get_object('search_combo')
         self.search_combo.set_active(0)
-        self.album_button = self.builder.get_object('album_button')
-        self.previous_button = self.builder.get_object('previous_button')
-        self.next_button = self.builder.get_object('next_button')
+        self.album_button = builder.get_object('album_button')
+        self.previous_button = builder.get_object('previous_button')
+        self.next_button = builder.get_object('next_button')
         self.progressbars = [
-            self.builder.get_object('results_progressbar'),
-            self.builder.get_object('popular_progressbar'),
-            self.builder.get_object('latest_progressbar'),
+            builder.get_object('results_progressbar'),
+            builder.get_object('popular_progressbar'),
+            builder.get_object('latest_progressbar'),
         ]
         self.treeviews = [
-            self.builder.get_object('results_treeview'),
-            self.builder.get_object('popular_treeview'),
-            self.builder.get_object('latest_treeview'),
+            builder.get_object('results_treeview'),
+            builder.get_object('popular_treeview'),
+            builder.get_object('latest_treeview'),
         ]
         self.setup_treeviews()
 
         # Set up signals
-        self.builder.get_object('search_button').connect('clicked', self.on_search_button_clicked)
+        builder.get_object('search_button').connect('clicked', self.on_search_button_clicked)
         self.search_entry.connect('activate', self.on_search_entry_activate)
         self.notebook.connect('switch-page', self.on_notebook_switch_page)
         self.previous_button.connect('clicked', self.on_previous_button_clicked)
         self.next_button.connect('clicked', self.on_next_button_clicked)
         self.album_button.connect('clicked', self.on_album_button_clicked)
-        self.builder.get_object('cancel_button').connect('clicked', self.on_cancel_button_clicked)
-        self.builder.get_object('ok_button').connect('clicked', self.on_ok_button_clicked)
-        self.builder.get_object('add_to_playlist').connect('activate', self.on_add_to_playlist_activate)
-        self.builder.get_object('jamendo_album_page').connect('activate', self.on_open_jamendo_album_page_activate)
+        builder.get_object('add_to_playlist').connect('activate', self.on_add_to_playlist_activate)
+        builder.get_object('jamendo_album_page').connect('activate', self.on_open_jamendo_album_page_activate)
 
         self.totem = totem_object
         self.reset()
@@ -134,18 +131,56 @@ class JamendoPlugin(gobject.GObject, Peas.Activatable, PeasUI.Configurable):
         """
         totem_object.remove_sidebar_page("jamendo")
 
-    def do_create_configure_dialog(self):
+    def do_create_configure_widget(self):
         """
-        Plugin config dialog.
+        Plugin config widget.
+        This code must be independent from the rest of the plugin. FIXME: bgo#624073
         """
-        format = self.gconf.get_string('%s/format' % gconf_key)
-        num_per_page = self.gconf.get_int('%s/num_per_page' % gconf_key)
-        combo = self.builder.get_object('preferred_format_combo')
+        builder = Totem.plugin_load_interface ('jamendo', 'jamendo.ui', True, None, self)
+        print builder
+        gconf = GConf.Client.get_default()
+        config_widget = builder.get_object ('config_widget')
+        config_widget.connect ('destroy', self.on_config_widget_destroy)
+        print config_widget
+        format = gconf.get_string('%s/format' % gconf_key)
+        num_per_page = gconf.get_int('%s/num_per_page' % gconf_key)
+
+        combo = builder.get_object('preferred_format_combo')
         combo.set_active(self.AUDIO_FORMATS.index(format))
-        spinbutton = self.builder.get_object('album_num_spinbutton')
+        combo.connect ('changed', self.on_preferred_format_combo_changed)
+
+        spinbutton = builder.get_object('album_num_spinbutton')
         spinbutton.set_value(num_per_page)
-        self.config_dialog.set_default_response(Gtk.ResponseType.OK)
-        return self.config_dialog
+        spinbutton.connect ('value-changed', self.on_album_num_spinbutton_value_changed)
+
+        return config_widget
+
+    def on_preferred_format_combo_changed (self, combo):
+        """
+        Called when the preferred audio format combo box is changed in the configuration dialogue
+        """
+        gconf = GConf.Client.get_default()
+        format = self.AUDIO_FORMATS[combo.get_active()]
+        gconf.set_string('%s/format' % gconf_key, format)
+
+    def on_album_num_spinbutton_value_changed (self, spinbutton):
+        """
+        Called when the number-of-albums spinbutton is changed in the configuration dialogue
+        """
+        gconf = GConf.Client.get_default()
+        num_per_page = int(spinbutton.get_value())
+        gconf.set_int('%s/num_per_page' % gconf_key, num_per_page)
+
+    def on_config_widget_destroy (self, widget):
+        """
+        FIXME: The GConf stuff should be refactored so that it listens to notifications and doesn't update manually.
+        This function is hacky and should go away.
+        """
+        self.init_settings()
+        try:
+            self.reset()
+        except:
+            pass
 
     def reset(self):
         """
@@ -524,29 +559,6 @@ class JamendoPlugin(gobject.GObject, Peas.Activatable, PeasUI.Configurable):
         except:
             pass
 
-    def on_cancel_button_clicked(self, *args):
-        """
-        Called when the user clicked cancel in the config dialog.
-        """
-        self.config_dialog.hide()
-
-    def on_ok_button_clicked(self, *args):
-        """
-        Called when the user clicked ok in the config dialog.
-        """
-        combo = self.builder.get_object('preferred_format_combo')
-        spinbutton = self.builder.get_object('album_num_spinbutton')
-        format = self.AUDIO_FORMATS[combo.get_active()]
-        self.gconf.set_string('%s/format' % gconf_key, format)
-        num_per_page = int(spinbutton.get_value())
-        self.gconf.set_int('%s/num_per_page' % gconf_key, num_per_page)
-        self.init_settings()
-        self.config_dialog.hide()
-        try:
-            self.reset()
-        except:
-            pass
-
     def on_add_to_playlist_activate(self, *args):
         """
         Called when the user clicked on the add to playlist button of the
diff --git a/src/plugins/jamendo/jamendo.ui b/src/plugins/jamendo/jamendo.ui
index 39953e1..20d0d6a 100644
--- a/src/plugins/jamendo/jamendo.ui
+++ b/src/plugins/jamendo/jamendo.ui
@@ -502,176 +502,106 @@
 			</packing>
 		</child>
 	</object>
-	<object class="GtkDialog" id="config_dialog">
+	<object class="GtkTable" id="config_widget">
+		<property name="visible">True</property>
+		<property name="n_rows">2</property>
+		<property name="n_columns">2</property>
+		<property name="homogeneous">False</property>
+		<property name="row_spacing">6</property>
+		<property name="column_spacing">6</property>
 		<property name="border_width">5</property>
-		<property name="title" translatable="yes">Jamendo Plugin Configuration</property>
-		<property name="type">GTK_WINDOW_TOPLEVEL</property>
-		<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
-		<property name="modal">True</property>
-		<property name="resizable">True</property>
-		<property name="destroy_with_parent">False</property>
-		<property name="decorated">True</property>
-		<property name="skip_taskbar_hint">False</property>
-		<property name="skip_pager_hint">False</property>
-		<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-		<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-		<property name="focus_on_map">True</property>
-		<property name="urgency_hint">False</property>
-		<property name="has_separator">False</property>
-		<child internal-child="vbox">
-			<object class="GtkVBox" id="config_dialog_container">
+		<child>
+			<object class="GtkLabel" id="album_num_label">
 				<property name="visible">True</property>
-				<property name="homogeneous">False</property>
-				<property name="spacing">12</property>
-				<child internal-child="action_area">
-					<object class="GtkHButtonBox" id="buttons">
-						<property name="visible">True</property>
-						<property name="layout_style">GTK_BUTTONBOX_END</property>
-						<child>
-							<object class="GtkButton" id="cancel_button">
-								<property name="visible">True</property>
-								<property name="can_focus">True</property>
-								<property name="label">gtk-cancel</property>
-								<property name="use_stock">True</property>
-								<property name="relief">GTK_RELIEF_NORMAL</property>
-								<property name="focus_on_click">True</property>
-							</object>
-						</child>
-						<child>
-							<object class="GtkButton" id="ok_button">
-								<property name="visible">True</property>
-								<property name="can_focus">True</property>
-								<property name="label">gtk-ok</property>
-								<property name="use_stock">True</property>
-								<property name="relief">GTK_RELIEF_NORMAL</property>
-								<property name="focus_on_click">True</property>
-								<property name="can_default">True</property>
-								<property name="has_default">True</property>
-								<property name="receives_default">True</property>
-							</object>
-						</child>
-					</object>
-					<packing>
-						<property name="padding">0</property>
-						<property name="expand">False</property>
-						<property name="fill">True</property>
-						<property name="pack_type">GTK_PACK_END</property>
-					</packing>
-				</child>
+				<property name="label" translatable="yes">Number of albums to _retrieve:</property>
+				<property name="use_underline">True</property>
+				<property name="mnemonic-widget">album_num_spinbutton</property>
+				<property name="use_markup">False</property>
+				<property name="justify">GTK_JUSTIFY_LEFT</property>
+				<property name="wrap">False</property>
+				<property name="selectable">False</property>
+				<property name="xalign">0</property>
+				<property name="yalign">0.5</property>
+				<property name="xpad">0</property>
+				<property name="ypad">0</property>
+				<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				<property name="width_chars">-1</property>
+				<property name="single_line_mode">False</property>
+				<property name="angle">0</property>
+			</object>
+			<packing>
+				<property name="left_attach">0</property>
+				<property name="right_attach">1</property>
+				<property name="top_attach">1</property>
+				<property name="bottom_attach">2</property>
+			</packing>
+		</child>
+		<child>
+			<object class="GtkSpinButton" id="album_num_spinbutton">
+				<property name="visible">True</property>
+				<property name="can_focus">True</property>
+				<property name="climb_rate">1</property>
+				<property name="digits">0</property>
+				<property name="numeric">False</property>
+				<property name="update_policy">GTK_UPDATE_ALWAYS</property>
+				<property name="snap_to_ticks">False</property>
+				<property name="wrap">False</property>
+				<property name="adjustment">adjustment1</property>
+			</object>
+			<packing>
+				<property name="left_attach">1</property>
+				<property name="right_attach">2</property>
+				<property name="top_attach">1</property>
+				<property name="bottom_attach">2</property>
+			</packing>
+		</child>
+		<child>
+			<object class="GtkComboBox" id="preferred_format_combo">
+				<property name="model">preferred_format_combo_model</property>
+				<property name="visible">True</property>
+				<property name="add_tearoffs">False</property>
+				<property name="focus_on_click">True</property>
 				<child>
-					<object class="GtkTable" id="table">
-						<property name="visible">True</property>
-						<property name="n_rows">2</property>
-						<property name="n_columns">2</property>
-						<property name="homogeneous">False</property>
-						<property name="row_spacing">6</property>
-						<property name="column_spacing">6</property>
-						<property name="border_width">5</property>
-						<child>
-							<object class="GtkLabel" id="album_num_label">
-								<property name="visible">True</property>
-								<property name="label" translatable="yes">Number of albums to _retrieve:</property>
-								<property name="use_underline">True</property>
-								<property name="mnemonic-widget">album_num_spinbutton</property>
-								<property name="use_markup">False</property>
-								<property name="justify">GTK_JUSTIFY_LEFT</property>
-								<property name="wrap">False</property>
-								<property name="selectable">False</property>
-								<property name="xalign">0</property>
-								<property name="yalign">0.5</property>
-								<property name="xpad">0</property>
-								<property name="ypad">0</property>
-								<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-								<property name="width_chars">-1</property>
-								<property name="single_line_mode">False</property>
-								<property name="angle">0</property>
-							</object>
-							<packing>
-								<property name="left_attach">0</property>
-								<property name="right_attach">1</property>
-								<property name="top_attach">1</property>
-								<property name="bottom_attach">2</property>
-							</packing>
-						</child>
-						<child>
-							<object class="GtkSpinButton" id="album_num_spinbutton">
-								<property name="visible">True</property>
-								<property name="can_focus">True</property>
-								<property name="climb_rate">1</property>
-								<property name="digits">0</property>
-								<property name="numeric">False</property>
-								<property name="update_policy">GTK_UPDATE_ALWAYS</property>
-								<property name="snap_to_ticks">False</property>
-								<property name="wrap">False</property>
-								<property name="adjustment">adjustment1</property>
-							</object>
-							<packing>
-								<property name="left_attach">1</property>
-								<property name="right_attach">2</property>
-								<property name="top_attach">1</property>
-								<property name="bottom_attach">2</property>
-							</packing>
-						</child>
-						<child>
-							<object class="GtkComboBox" id="preferred_format_combo">
-								<property name="model">preferred_format_combo_model</property>
-								<property name="visible">True</property>
-								<property name="add_tearoffs">False</property>
-								<property name="focus_on_click">True</property>
-								<child>
-									<object class="GtkCellRendererText" id="renderer2"/>
-									<attributes>
-										<attribute name="text">0</attribute>
-									</attributes>
-								</child>
-							</object>
-							<packing>
-								<property name="left_attach">1</property>
-								<property name="right_attach">2</property>
-								<property name="top_attach">0</property>
-								<property name="bottom_attach">1</property>
-								<property name="y_options"/>
-							</packing>
-						</child>
-						<child>
-							<object class="GtkLabel" id="preferred_format_label">
-								<property name="visible">True</property>
-								<property name="label" translatable="yes">Preferred audio _format:</property>
-								<property name="use_underline">True</property>
-								<property name="mnemonic-widget">preferred_format_combo</property>
-								<property name="use_markup">False</property>
-								<property name="justify">GTK_JUSTIFY_LEFT</property>
-								<property name="wrap">False</property>
-								<property name="selectable">False</property>
-								<property name="xalign">0</property>
-								<property name="yalign">0.5</property>
-								<property name="xpad">0</property>
-								<property name="ypad">0</property>
-								<property name="ellipsize">PANGO_ELLIPSIZE_END</property>
-								<property name="width_chars">-1</property>
-								<property name="single_line_mode">False</property>
-								<property name="angle">0</property>
-							</object>
-							<packing>
-								<property name="left_attach">0</property>
-								<property name="right_attach">1</property>
-								<property name="top_attach">0</property>
-								<property name="bottom_attach">1</property>
-							</packing>
-						</child>
-					</object>
-					<packing>
-						<property name="padding">0</property>
-						<property name="expand">False</property>
-						<property name="fill">True</property>
-					</packing>
+					<object class="GtkCellRendererText" id="renderer2"/>
+					<attributes>
+						<attribute name="text">0</attribute>
+					</attributes>
 				</child>
 			</object>
+			<packing>
+				<property name="left_attach">1</property>
+				<property name="right_attach">2</property>
+				<property name="top_attach">0</property>
+				<property name="bottom_attach">1</property>
+				<property name="y_options"/>
+			</packing>
+		</child>
+		<child>
+			<object class="GtkLabel" id="preferred_format_label">
+				<property name="visible">True</property>
+				<property name="label" translatable="yes">Preferred audio _format:</property>
+				<property name="use_underline">True</property>
+				<property name="mnemonic-widget">preferred_format_combo</property>
+				<property name="use_markup">False</property>
+				<property name="justify">GTK_JUSTIFY_LEFT</property>
+				<property name="wrap">False</property>
+				<property name="selectable">False</property>
+				<property name="xalign">0</property>
+				<property name="yalign">0.5</property>
+				<property name="xpad">0</property>
+				<property name="ypad">0</property>
+				<property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+				<property name="width_chars">-1</property>
+				<property name="single_line_mode">False</property>
+				<property name="angle">0</property>
+			</object>
+			<packing>
+				<property name="left_attach">0</property>
+				<property name="right_attach">1</property>
+				<property name="top_attach">0</property>
+				<property name="bottom_attach">1</property>
+			</packing>
 		</child>
-		<action-widgets>
-			<action-widget response="-6">cancel_button</action-widget><!-- GTK_RESPONSE_CANCEL -->
-			<action-widget response="-5">ok_button</action-widget><!-- GTK_RESPONSE_OK -->
-		</action-widgets>
 	</object>
 	<object class="GtkMenu" constructor="uimanager1" id="popup_menu"/>
 </interface>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]