~ubuntu-branches/ubuntu/wily/alsaplayer/wily

« back to all changes in this revision

Viewing changes to interface/gtk2/PreferencesWindow.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Hubert Chathi
  • Date: 2007-10-10 15:33:10 UTC
  • mto: (9.2.5 sid)
  • mto: This revision was merged to the branch mainline in revision 15.
  • Revision ID: james.westby@ubuntu.com-20071010153310-h3holq75eu2cigb0
Tags: upstream-0.99.80~rc4
ImportĀ upstreamĀ versionĀ 0.99.80~rc4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*  PreferencesWindow.cpp
 
2
 *  Copyright (C) 2007 Madej
 
3
 *
 
4
 *  This file is part of AlsaPlayer.
 
5
 *
 
6
 *  AlsaPlayer is free software; you can redistribute it and/or modify
 
7
 *  it under the terms of the GNU General Public License as published by
 
8
 *  the Free Software Foundation; either version 3 of the License, or
 
9
 *  (at your option) any later version.
 
10
 *
 
11
 *  AlsaPlayer is distributed in the hope that it will be useful,
 
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 *  GNU General Public License for more details.
 
15
 *
 
16
 *  You should have received a copy of the GNU General Public License
 
17
 *  along with this program; if not, see <http://www.gnu.org/licenses/>.
 
18
 *
 
19
*/ 
 
20
 
 
21
#include "PreferencesWindow.h"
 
22
#include "info_window.h"
 
23
#include "PlaylistWindow.h"
 
24
#include "prefs.h"
 
25
 
 
26
#ifdef HAVE_CONFIG_H
 
27
#include "config.h"
 
28
#endif
 
29
 
 
30
#ifdef ENABLE_NLS
 
31
#include <libintl.h>
 
32
#define _(String) gettext(String)
 
33
#define N_(String) noop_gettext(String)
 
34
#else
 
35
#define _(String) (String)
 
36
#define N_(String) String
 
37
#endif
 
38
 
 
39
static void
 
40
pref_dialog_accept(GtkWidget *dialog, GtkWidget *main_window)
 
41
{
 
42
        InfoWindow *info_window = (InfoWindow *) g_object_get_data(G_OBJECT(main_window), "info_window");
 
43
        PlaylistWindow *pl = (PlaylistWindow *) g_object_get_data(G_OBJECT(main_window), "playlist_window");
 
44
 
 
45
        /*      general */
 
46
        GtkWidget *bg = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_general_bg_colour_button"));
 
47
        GtkWidget *fg = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_general_fg_colour_button"));
 
48
        GtkWidget *font = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_general_fg_font_button"));
 
49
        GdkColor color;
 
50
        gchar *str;
 
51
        
 
52
        gtk_color_button_get_color(GTK_COLOR_BUTTON(bg), &color);
 
53
        str = gtk_color_selection_palette_to_string(&color, 1);
 
54
        prefs_set_string(ap_prefs, "gtk2_interface", "background_colour", str);
 
55
        info_window->set_background_color(str);
 
56
        g_free(str);
 
57
        
 
58
        gtk_color_button_get_color(GTK_COLOR_BUTTON(fg), &color);
 
59
        str = gtk_color_selection_palette_to_string(&color, 1);
 
60
        prefs_set_string(ap_prefs, "gtk2_interface", "font_colour", str);
 
61
        info_window->set_font_color(str);
 
62
        g_free(str);
 
63
        
 
64
        str = (gchar *) gtk_font_button_get_font_name(GTK_FONT_BUTTON(font)); // don't free str !
 
65
        prefs_set_string(ap_prefs, "gtk2_interface", "fonts", str); 
 
66
        info_window->set_fonts(str);
 
67
        /*      end     */
 
68
        
 
69
        /*      play    */
 
70
        GtkWidget *start = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_play_on_start"));;
 
71
        GtkWidget *add = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_play_on_add"));
 
72
        GtkWidget *title = GTK_WIDGET(g_object_get_data(G_OBJECT(dialog), "pref_play_on_title"));
 
73
        gboolean what;
 
74
        
 
75
        what = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(start)); 
 
76
        prefs_set_bool(ap_prefs, "main", "play_on_start", what);
 
77
        
 
78
        what = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(add));
 
79
        prefs_set_bool(ap_prefs, "gtk2_interface", "play_on_add", what);
 
80
        pl->play_on_add = what;
 
81
        
 
82
        what = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title)); 
 
83
        prefs_set_bool(ap_prefs, "gtk2_interface", "play_on_title", what);
 
84
        if (!what)
 
85
                gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer");
 
86
}
 
87
 
 
88
static void
 
89
pref_dialog_hide(GtkWidget *dialog)
 
90
{
 
91
        if (GTK_WIDGET_VISIBLE(dialog))
 
92
                gtk_widget_hide_all(dialog);
 
93
}
 
94
 
 
95
static void
 
96
pref_dialog_response(GtkDialog *dialog, gint arg1, gpointer user_data)
 
97
{
 
98
        if (arg1 == GTK_RESPONSE_REJECT)
 
99
                pref_dialog_hide(GTK_WIDGET(dialog));
 
100
        else if (arg1 == GTK_RESPONSE_ACCEPT)
 
101
                pref_dialog_accept(GTK_WIDGET(dialog), GTK_WIDGET(user_data));
 
102
        else if (arg1 == GTK_RESPONSE_OK) {
 
103
                pref_dialog_accept(GTK_WIDGET(dialog), GTK_WIDGET(user_data));
 
104
                pref_dialog_hide(GTK_WIDGET(dialog));
 
105
        }
 
106
 
107
 
 
108
static GtkWidget*
 
109
play_tab(GtkWidget *dialog)
 
110
{
 
111
        GtkWidget *pref_play;
 
112
        GtkWidget *pref_play_on_start;
 
113
        GtkWidget *pref_play_on_add;
 
114
        GtkWidget *pref_play_on_title;
 
115
        
 
116
        pref_play = gtk_vbox_new(FALSE, 0);
 
117
        
 
118
        pref_play_on_start = gtk_check_button_new_with_label(_("Play on start"));       
 
119
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(pref_play_on_start), prefs_get_bool(ap_prefs, "main", "play_on_start", FALSE));
 
120
        g_object_set_data(G_OBJECT(dialog), "pref_play_on_start", pref_play_on_start);
 
121
        gtk_box_pack_start(GTK_BOX(pref_play), pref_play_on_start, FALSE, FALSE, 0);
 
122
        
 
123
        pref_play_on_add = gtk_check_button_new_with_label(_("Play song after adding to playlist"));
 
124
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(pref_play_on_add), prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_add", FALSE));
 
125
        g_object_set_data(G_OBJECT(dialog), "pref_play_on_add", pref_play_on_add); 
 
126
        gtk_box_pack_start(GTK_BOX(pref_play), pref_play_on_add, FALSE, FALSE, 0);
 
127
        
 
128
        pref_play_on_title = gtk_check_button_new_with_label(_("Show title in title-bar"));
 
129
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(pref_play_on_title), prefs_get_bool(ap_prefs, "gtk2_interface", "play_on_title", FALSE));
 
130
        g_object_set_data(G_OBJECT(dialog), "pref_play_on_title", pref_play_on_title); 
 
131
        gtk_box_pack_start(GTK_BOX(pref_play), pref_play_on_title, FALSE, FALSE, 0);
 
132
        
 
133
        return pref_play;       
 
134
}
 
135
 
 
136
static GtkWidget*
 
137
general_tab(GtkWidget *dialog)
 
138
{
 
139
        GtkWidget *pref_general;
 
140
        GtkWidget *pref_general_bg_colour;
 
141
        GtkWidget *pref_general_bg_colour_button;
 
142
        GtkWidget *pref_general_fg_colour;
 
143
        GtkWidget *pref_general_fg_colour_button;
 
144
        GtkWidget *pref_general_fg_font;
 
145
        GtkWidget *pref_general_fg_font_button;
 
146
        GtkWidget *label;
 
147
        gchar *str;
 
148
        GdkColor color;
 
149
 
 
150
        pref_general = gtk_vbox_new(FALSE, 0);
 
151
        
 
152
        pref_general_bg_colour = gtk_hbox_new(FALSE, 0);
 
153
        gtk_box_pack_start(GTK_BOX(pref_general), pref_general_bg_colour, FALSE, FALSE, 0); 
 
154
        label = gtk_label_new(_("Background color"));
 
155
        gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 
156
        gtk_box_pack_start(GTK_BOX(pref_general_bg_colour), label, TRUE, TRUE, 3);
 
157
        
 
158
        str = prefs_get_string(ap_prefs, "gtk2_interface", "background_colour", "#000000");
 
159
        if (!gdk_color_parse(str, &color)) {
 
160
                color.red = 0;
 
161
                color.green = 0;
 
162
                color.blue = 0;
 
163
        }
 
164
        pref_general_bg_colour_button = gtk_color_button_new_with_color(&color);
 
165
        g_object_set_data(G_OBJECT(dialog), "pref_general_bg_colour_button", pref_general_bg_colour_button); 
 
166
        gtk_box_pack_start(GTK_BOX(pref_general_bg_colour), pref_general_bg_colour_button, FALSE, FALSE, 0);
 
167
        
 
168
        pref_general_fg_colour = gtk_hbox_new(FALSE, 0);
 
169
        gtk_box_pack_start(GTK_BOX(pref_general), pref_general_fg_colour, FALSE, FALSE, 0);
 
170
        label = gtk_label_new(_("Font color"));
 
171
        gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 
172
        gtk_box_pack_start(GTK_BOX(pref_general_fg_colour), label, TRUE, TRUE, 3);
 
173
        
 
174
        str = prefs_get_string(ap_prefs, "gtk2_interface", "font_colour", "#ffffff");
 
175
        if (!gdk_color_parse(str, &color)) {
 
176
                color.red = 255;
 
177
                color.green = 255;
 
178
                color.blue = 255;
 
179
        }
 
180
        pref_general_fg_colour_button = gtk_color_button_new_with_color(&color);
 
181
        g_object_set_data(G_OBJECT(dialog), "pref_general_fg_colour_button", pref_general_fg_colour_button);
 
182
        gtk_box_pack_start(GTK_BOX(pref_general_fg_colour), pref_general_fg_colour_button, FALSE, FALSE, 0);
 
183
        
 
184
        pref_general_fg_font = gtk_hbox_new(FALSE, 0);
 
185
        gtk_box_pack_start(GTK_BOX(pref_general), pref_general_fg_font, FALSE, FALSE, 0);
 
186
        label = gtk_label_new(_("Fonts"));
 
187
        gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
 
188
        gtk_box_pack_start(GTK_BOX(pref_general_fg_font), label, TRUE, TRUE, 3);
 
189
        
 
190
        str = prefs_get_string(ap_prefs, "gtk2_interface", "fonts", "");
 
191
        pref_general_fg_font_button = gtk_font_button_new_with_font(str);
 
192
        g_object_set_data(G_OBJECT(dialog), "pref_general_fg_font_button", pref_general_fg_font_button);
 
193
        gtk_box_pack_start(GTK_BOX(pref_general_fg_font), pref_general_fg_font_button, FALSE, FALSE, 0);
 
194
 
 
195
        return pref_general;    
 
196
}
 
197
                                                 
 
198
GtkWidget *init_preferences_window(GtkWidget *main_window)
 
199
{
 
200
        GtkWidget *dialog;
 
201
        GtkWidget *notebook;
 
202
        GtkWidget *label;
 
203
        GtkWidget *tab;
 
204
        
 
205
        dialog = gtk_dialog_new_with_buttons(_("Preferences"), GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT,
 
206
                                                                                        GTK_STOCK_OK,
 
207
                                                                                        GTK_RESPONSE_OK,
 
208
                                                                                        GTK_STOCK_APPLY,
 
209
                                                                                        GTK_RESPONSE_ACCEPT,
 
210
                                                                                        GTK_STOCK_CANCEL,
 
211
                                                                                        GTK_RESPONSE_REJECT,
 
212
                                                                                        NULL);
 
213
        gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 300);
 
214
                                                                                        
 
215
        notebook = gtk_notebook_new();
 
216
        gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_LEFT);
 
217
        gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), notebook);
 
218
        
 
219
        tab = general_tab(dialog);
 
220
        label = gtk_label_new(_("General"));
 
221
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, label);
 
222
        
 
223
        tab = play_tab(dialog);
 
224
        label = gtk_label_new(_("Play"));
 
225
        gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, label);
 
226
        
 
227
        g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(pref_dialog_response), (gpointer) main_window);
 
228
        g_signal_connect(G_OBJECT(dialog), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), NULL);
 
229
        
 
230
        return dialog;
 
231
}