1
/* PreferencesWindow.cpp
2
* Copyright (C) 2007 Madej
4
* This file is part of AlsaPlayer.
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.
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.
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/>.
21
#include "PreferencesWindow.h"
22
#include "info_window.h"
23
#include "PlaylistWindow.h"
32
#define _(String) gettext(String)
33
#define N_(String) noop_gettext(String)
35
#define _(String) (String)
36
#define N_(String) String
40
pref_dialog_accept(GtkWidget *dialog, GtkWidget *main_window)
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");
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"));
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);
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);
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);
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"));
75
what = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(start));
76
prefs_set_bool(ap_prefs, "main", "play_on_start", what);
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;
82
what = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(title));
83
prefs_set_bool(ap_prefs, "gtk2_interface", "play_on_title", what);
85
gtk_window_set_title(GTK_WINDOW(main_window), "AlsaPlayer");
89
pref_dialog_hide(GtkWidget *dialog)
91
if (GTK_WIDGET_VISIBLE(dialog))
92
gtk_widget_hide_all(dialog);
96
pref_dialog_response(GtkDialog *dialog, gint arg1, gpointer user_data)
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));
109
play_tab(GtkWidget *dialog)
111
GtkWidget *pref_play;
112
GtkWidget *pref_play_on_start;
113
GtkWidget *pref_play_on_add;
114
GtkWidget *pref_play_on_title;
116
pref_play = gtk_vbox_new(FALSE, 0);
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);
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);
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);
137
general_tab(GtkWidget *dialog)
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;
150
pref_general = gtk_vbox_new(FALSE, 0);
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);
158
str = prefs_get_string(ap_prefs, "gtk2_interface", "background_colour", "#000000");
159
if (!gdk_color_parse(str, &color)) {
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);
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);
174
str = prefs_get_string(ap_prefs, "gtk2_interface", "font_colour", "#ffffff");
175
if (!gdk_color_parse(str, &color)) {
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);
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);
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);
198
GtkWidget *init_preferences_window(GtkWidget *main_window)
205
dialog = gtk_dialog_new_with_buttons(_("Preferences"), GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT,
213
gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 300);
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);
219
tab = general_tab(dialog);
220
label = gtk_label_new(_("General"));
221
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, label);
223
tab = play_tab(dialog);
224
label = gtk_label_new(_("Play"));
225
gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, label);
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);