~ubuntu-branches/ubuntu/utopic/rhythmbox/utopic-proposed

« back to all changes in this revision

Viewing changes to shell/rb-shell-preferences.c

Tags: upstream-0.9.2
ImportĀ upstreamĀ versionĀ 0.9.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
31
31
#include <gtk/gtkoptionmenu.h>
32
32
#include <gtk/gtkradiobutton.h>
33
33
#include <gtk/gtknotebook.h>
 
34
#include <gtk/gtkvbox.h>
 
35
#include <gtk/gtkhbox.h>
 
36
#include <gtk/gtkcheckbutton.h>
34
37
#include <glade/glade.h>
35
38
#include <libgnome/gnome-help.h>
36
39
#include <string.h>
44
47
#include "eel-gconf-extensions.h"
45
48
#include "rb-preferences.h"
46
49
 
 
50
#ifdef WITH_AUDIOSCROBBLER
 
51
#include "rb-audioscrobbler.h"
 
52
#endif
 
53
 
47
54
static void rb_shell_preferences_class_init (RBShellPreferencesClass *klass);
48
55
static void rb_shell_preferences_init (RBShellPreferences *shell_preferences);
49
56
static void rb_shell_preferences_finalize (GObject *object);
83
90
        GtkWidget *rating_check;
84
91
        GtkWidget *play_count_check;
85
92
        GtkWidget *last_played_check;
 
93
        GtkWidget *first_seen_check;
86
94
        GtkWidget *quality_check;
 
95
        GtkWidget *year_check;
87
96
 
88
97
        gboolean loading;
89
98
};
90
99
 
91
 
static GObjectClass *parent_class = NULL;
92
 
 
93
 
GType
94
 
rb_shell_preferences_get_type (void)
95
 
{
96
 
        static GType rb_shell_preferences_type = 0;
97
 
 
98
 
        if (rb_shell_preferences_type == 0)
99
 
        {
100
 
                static const GTypeInfo our_info =
101
 
                {
102
 
                        sizeof (RBShellPreferencesClass),
103
 
                        NULL,
104
 
                        NULL,
105
 
                        (GClassInitFunc) rb_shell_preferences_class_init,
106
 
                        NULL,
107
 
                        NULL,
108
 
                        sizeof (RBShellPreferences),
109
 
                        0,
110
 
                        (GInstanceInitFunc) rb_shell_preferences_init
111
 
                };
112
 
 
113
 
                rb_shell_preferences_type = g_type_register_static (GTK_TYPE_DIALOG,
114
 
                                                                    "RBShellPreferences",
115
 
                                                                    &our_info, 0);
116
 
        }
117
 
 
118
 
        return rb_shell_preferences_type;
119
 
}
 
100
G_DEFINE_TYPE (RBShellPreferences, rb_shell_preferences, GTK_TYPE_DIALOG)
120
101
 
121
102
static void
122
103
rb_shell_preferences_class_init (RBShellPreferencesClass *klass)
123
104
{
124
105
        GObjectClass *object_class = G_OBJECT_CLASS (klass);
125
106
 
126
 
        parent_class = g_type_class_peek_parent (klass);
127
 
 
128
107
        object_class->finalize = rb_shell_preferences_finalize;
129
108
}
130
109
 
137
116
        gnome_help_display ("rhythmbox.xml", "prefs", &error);
138
117
 
139
118
        if (error != NULL) {
140
 
                rb_error_dialog (error->message);
 
119
                rb_error_dialog (NULL,
 
120
                                 _("Couldn't display help"),
 
121
                                 "%s", error->message);
141
122
 
142
123
                g_error_free (error);
143
124
        }
219
200
                glade_xml_get_widget (xml, "last_played_check");
220
201
        shell_preferences->priv->quality_check =
221
202
                glade_xml_get_widget (xml, "quality_check");
 
203
        shell_preferences->priv->year_check =
 
204
                glade_xml_get_widget (xml, "year_check");
 
205
        shell_preferences->priv->first_seen_check =
 
206
                glade_xml_get_widget (xml, "first_seen_check");
222
207
 
223
208
        gtk_notebook_append_page (GTK_NOTEBOOK (shell_preferences->priv->notebook),
224
209
                                  glade_xml_get_widget (xml, "general_vbox"),
247
232
 
248
233
        g_free (shell_preferences->priv);
249
234
 
250
 
        G_OBJECT_CLASS (parent_class)->finalize (object);
 
235
        G_OBJECT_CLASS (rb_shell_preferences_parent_class)->finalize (object);
251
236
}
252
237
 
253
238
static void
256
241
                                       RBSource *source)
257
242
{
258
243
        GtkWidget *widget;
 
244
        GtkWidget *label;
 
245
        gboolean visible;
259
246
 
260
247
        g_return_if_fail (RB_IS_SHELL_PREFERENCES (prefs));
261
248
        g_return_if_fail (RB_IS_SOURCE (source));
262
249
 
263
250
        widget = rb_source_get_config_widget (source);
264
 
        if (widget)
 
251
        if (!widget)
 
252
                return;
 
253
        label = gtk_label_new (name);
 
254
        g_object_get (source, "visibility", &visible, NULL);
 
255
        if (!visible)
 
256
                gtk_widget_set_sensitive (label, FALSE);
 
257
        gtk_notebook_append_page (GTK_NOTEBOOK (prefs->priv->notebook),
 
258
                                  widget,
 
259
                                  label);
 
260
}
 
261
 
 
262
#ifdef WITH_DAAP_SUPPORT
 
263
 
 
264
#define CONF_ENABLE_SHARING "/apps/rhythmbox/sharing/enable_sharing"
 
265
#define CONF_NAME "/apps/rhythmbox/sharing/share_name"
 
266
 
 
267
static void
 
268
share_check_button_toggled_cb (GtkToggleButton *button, GtkWidget *hbox)
 
269
{
 
270
        gboolean b;
 
271
 
 
272
        b = gtk_toggle_button_get_active (button);
 
273
 
 
274
        eel_gconf_set_boolean (CONF_ENABLE_SHARING, b);
 
275
 
 
276
        gtk_widget_set_sensitive (hbox, b);
 
277
        
 
278
        return;
 
279
}
 
280
 
 
281
static gboolean
 
282
share_name_entry_focus_out_event_cb (GtkEntry *entry, GdkEventFocus *event, gpointer data)
 
283
{
 
284
        const gchar *name;
 
285
        char *old_name;
 
286
 
 
287
        name = gtk_entry_get_text (entry);
 
288
        old_name = eel_gconf_get_string (CONF_NAME);
 
289
 
 
290
        if (strcmp (name, old_name) != 0)
 
291
                eel_gconf_set_string (CONF_NAME, name);
 
292
 
 
293
        g_free (old_name);
 
294
 
 
295
        return FALSE;
 
296
}
 
297
 
 
298
static void
 
299
add_daap_preferences (RBShellPreferences *shell_preferences)
 
300
{
 
301
        GladeXML *xml;
 
302
        GtkWidget *check;
 
303
        GtkWidget *entry;
 
304
        GtkWidget *hbox;
 
305
        gboolean b;
 
306
 
 
307
        gchar *name;
 
308
 
 
309
        xml = rb_glade_xml_new ("daap-prefs.glade",
 
310
                                "daap_vbox",
 
311
                                shell_preferences);
 
312
 
 
313
        check = glade_xml_get_widget (xml, "daap_enable_check");
 
314
        entry = glade_xml_get_widget (xml, "daap_name_entry");
 
315
        hbox = glade_xml_get_widget (xml, "daap_hbox");
 
316
        
 
317
        b = eel_gconf_get_boolean (CONF_ENABLE_SHARING);
 
318
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check), b);
 
319
        g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (share_check_button_toggled_cb), hbox);
 
320
        
 
321
        name = eel_gconf_get_string (CONF_NAME);
 
322
        gtk_entry_set_text (GTK_ENTRY (entry), name);
 
323
        g_signal_connect (G_OBJECT (entry), "focus-out-event", G_CALLBACK (share_name_entry_focus_out_event_cb), NULL); 
 
324
 
 
325
        gtk_widget_set_sensitive (hbox, b);
 
326
        
 
327
        gtk_notebook_append_page (GTK_NOTEBOOK (shell_preferences->priv->notebook),
 
328
                                  glade_xml_get_widget (xml, "daap_vbox"),
 
329
                                  gtk_label_new (_("Sharing")));
 
330
}
 
331
#endif /* WITH_DAAP_SUPPORT */
 
332
 
 
333
#ifdef WITH_AUDIOSCROBBLER
 
334
static void
 
335
rb_shell_preferences_append_audioscrobbler_config (RBShellPreferences *prefs,
 
336
                                                   RBAudioscrobbler *audioscrobbler)
 
337
{
 
338
        GtkWidget *widget;
 
339
 
 
340
        g_return_if_fail (RB_IS_SHELL_PREFERENCES (prefs));
 
341
 
 
342
        widget = rb_audioscrobbler_get_config_widget (audioscrobbler);
 
343
        if (widget) {
 
344
                rb_debug ("got widget!");
265
345
                gtk_notebook_append_page (GTK_NOTEBOOK (prefs->priv->notebook),
266
346
                                          widget,
267
 
                                          gtk_label_new (name));
268
 
        else
269
 
                rb_debug ("No config widget for source %s", name);
 
347
                                          gtk_label_new (_("Audioscrobbler")));
 
348
        } else {
 
349
                rb_debug ("No config widget for Audioscrobbler");
 
350
        }
270
351
}
271
352
 
272
353
GtkWidget *
 
354
rb_shell_preferences_new (GList *views,
 
355
                          RBAudioscrobbler *audioscrobbler)
 
356
{
 
357
        RBShellPreferences *shell_preferences;
 
358
 
 
359
        shell_preferences = g_object_new (RB_TYPE_SHELL_PREFERENCES,
 
360
                                          NULL);
 
361
 
 
362
        g_return_val_if_fail (shell_preferences->priv != NULL, NULL);
 
363
 
 
364
        for (; views; views = views->next)
 
365
        {
 
366
                const char *name = NULL;
 
367
                g_object_get (G_OBJECT (views->data), "name", &name, NULL);
 
368
                g_assert (name != NULL);
 
369
                rb_shell_preferences_append_view_page (shell_preferences,
 
370
                                                       name,
 
371
                                                       RB_SOURCE (views->data));
 
372
        }
 
373
 
 
374
        rb_shell_preferences_append_audioscrobbler_config (shell_preferences,
 
375
                                                           audioscrobbler);
 
376
#else
 
377
GtkWidget *
273
378
rb_shell_preferences_new (GList *views)
274
379
{
275
380
        RBShellPreferences *shell_preferences;
276
381
 
277
382
        shell_preferences = g_object_new (RB_TYPE_SHELL_PREFERENCES,
278
 
                                          NULL);
 
383
                                          NULL, NULL);
279
384
 
280
385
        g_return_val_if_fail (shell_preferences->priv != NULL, NULL);
281
386
 
288
393
                                                       name,
289
394
                                                       RB_SOURCE (views->data));
290
395
        }
 
396
#endif /* WITH_AUDIOSCROBBLER */
 
397
 
 
398
#ifdef WITH_DAAP_SUPPORT
 
399
        add_daap_preferences (shell_preferences);
 
400
#endif /* WITH_DAAP_SUPPORT */
 
401
 
291
402
        return GTK_WIDGET (shell_preferences);
292
403
}
293
404
 
348
459
                colname = "RHYTHMDB_PROP_PLAY_COUNT";
349
460
        else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->last_played_check))
350
461
                colname = "RHYTHMDB_PROP_LAST_PLAYED";
 
462
        else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->year_check))
 
463
                colname = "RHYTHMDB_PROP_DATE";
351
464
        else if (shell_preferences->priv->quality_check
352
465
                 && butt == GTK_CHECK_BUTTON (shell_preferences->priv->quality_check))
353
466
                colname = "RHYTHMDB_PROP_BITRATE";
 
467
        else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->first_seen_check))
 
468
                colname = "RHYTHMDB_PROP_FIRST_SEEN";
354
469
        else
355
470
                g_assert_not_reached ();
356
471
 
376
491
}
377
492
 
378
493
static void
 
494
rb_shell_preferences_sync_column_button (RBShellPreferences *preferences,
 
495
                                         GtkWidget *button,
 
496
                                         const char *columns,
 
497
                                         const char *propid)
 
498
{
 
499
        g_signal_handlers_block_by_func (G_OBJECT (button),
 
500
                                         rb_shell_preferences_column_check_changed_cb,
 
501
                                         preferences);
 
502
        
 
503
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), 
 
504
                                      strstr (columns, propid) != NULL);
 
505
 
 
506
        g_signal_handlers_unblock_by_func (G_OBJECT (button),
 
507
                                           rb_shell_preferences_column_check_changed_cb,
 
508
                                           preferences);
 
509
}
 
510
 
 
511
static void
379
512
rb_shell_preferences_sync (RBShellPreferences *shell_preferences)
380
513
{
381
514
        char *columns;
387
520
        columns = eel_gconf_get_string (CONF_UI_COLUMNS_SETUP);
388
521
        if (columns != NULL)
389
522
        {
390
 
                gtk_toggle_button_set_active
391
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->artist_check), 
392
 
                         strstr (columns, "RHYTHMDB_PROP_ARTIST") != NULL);
393
 
                gtk_toggle_button_set_active
394
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->album_check),
395
 
                         strstr (columns, "RHYTHMDB_PROP_ALBUM") != NULL);
396
 
                gtk_toggle_button_set_active
397
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->genre_check),
398
 
                         strstr (columns, "RHYTHMDB_PROP_GENRE") != NULL);
399
 
                gtk_toggle_button_set_active
400
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->duration_check),
401
 
                         strstr (columns, "RHYTHMDB_PROP_DURATION") != NULL);
402
 
                gtk_toggle_button_set_active
403
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->track_check),
404
 
                         strstr (columns, "RHYTHMDB_PROP_TRACK_NUMBER") != NULL);
405
 
                gtk_toggle_button_set_active
406
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->rating_check),
407
 
                         strstr (columns, "RHYTHMDB_PROP_RATING") != NULL);
408
 
                gtk_toggle_button_set_active
409
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->play_count_check),
410
 
                         strstr (columns, "RHYTHMDB_PROP_PLAY_COUNT") != NULL);
411
 
                gtk_toggle_button_set_active
412
 
                        (GTK_TOGGLE_BUTTON (shell_preferences->priv->last_played_check),
413
 
                         strstr (columns, "RHYTHMDB_PROP_LAST_PLAYED") != NULL);
 
523
                rb_shell_preferences_sync_column_button (shell_preferences,
 
524
                                                         shell_preferences->priv->artist_check,
 
525
                                                         columns, "RHYTHMDB_PROP_ARTIST");
 
526
                rb_shell_preferences_sync_column_button (shell_preferences,
 
527
                                                         shell_preferences->priv->album_check,
 
528
                                                         columns, "RHYTHMDB_PROP_ALBUM");
 
529
                rb_shell_preferences_sync_column_button (shell_preferences,
 
530
                                                         shell_preferences->priv->genre_check,
 
531
                                                         columns, "RHYTHMDB_PROP_GENRE");
 
532
                rb_shell_preferences_sync_column_button (shell_preferences,
 
533
                                                         shell_preferences->priv->duration_check,
 
534
                                                         columns, "RHYTHMDB_PROP_DURATION");
 
535
                rb_shell_preferences_sync_column_button (shell_preferences,
 
536
                                                         shell_preferences->priv->track_check,
 
537
                                                         columns, "RHYTHMDB_PROP_TRACK_NUMBER");
 
538
                rb_shell_preferences_sync_column_button (shell_preferences,
 
539
                                                         shell_preferences->priv->rating_check,
 
540
                                                         columns, "RHYTHMDB_PROP_RATING");
 
541
                rb_shell_preferences_sync_column_button (shell_preferences,
 
542
                                                         shell_preferences->priv->play_count_check,
 
543
                                                         columns, "RHYTHMDB_PROP_PLAY_COUNT");
 
544
                rb_shell_preferences_sync_column_button (shell_preferences,
 
545
                                                         shell_preferences->priv->last_played_check,
 
546
                                                         columns, "RHYTHMDB_PROP_LAST_PLAYED");
 
547
                rb_shell_preferences_sync_column_button (shell_preferences,
 
548
                                                         shell_preferences->priv->year_check,
 
549
                                                         columns, "RHYTHMDB_PROP_DATE");
 
550
                rb_shell_preferences_sync_column_button (shell_preferences,
 
551
                                                         shell_preferences->priv->first_seen_check,
 
552
                                                         columns, "RHYTHMDB_PROP_FIRST_SEEN");
414
553
                if (shell_preferences->priv->quality_check)
415
 
                        gtk_toggle_button_set_active
416
 
                                (GTK_TOGGLE_BUTTON (shell_preferences->priv->quality_check),
417
 
                                 strstr (columns, "RHYTHMDB_PROP_BITRATE") != NULL);
 
554
                        rb_shell_preferences_sync_column_button (shell_preferences,
 
555
                                                                 shell_preferences->priv->quality_check,
 
556
                                                                 columns, "RHYTHMDB_PROP_BITRATE");
418
557
        }
419
558
 
420
559
        g_free (columns);