Add/Update translations
[gmpc-dynamic-playlist.git] / src / prefs.c
blob7696ae3fd35b676acd96bbd6a69671239a89199d
1 /* gmpc-dynamic-playlist (GMPC plugin)
2 * Copyright (C) 2009 Andre Klitzing <andre@incubo.de>
3 * Homepage: http://www.incubo.de
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "prefs.h"
21 #include "plugin.h"
22 #include "search.h"
23 #include "played.h"
24 #include "prune.h"
25 #include "blacklist.h"
26 #include "defaults.h"
28 /* Menu */
29 static GtkWidget* m_menu_item = NULL;
30 static GtkWidget* m_menu = NULL;
31 static GtkWidget* m_menu_search = NULL;
32 static GtkWidget* m_menu_blacklist = NULL;
34 void pref_destroy(GtkWidget* l_con)
36 GtkWidget* child = gtk_bin_get_child(GTK_BIN(l_con));
37 if(child)
38 gtk_widget_destroy(child);
41 void pref_construct(GtkWidget* l_con)
43 GtkBuilder* builder = gtk_builder_new();
44 gtk_builder_set_translation_domain(builder, dyn_get_translation_domain());
45 GError* err = NULL;
47 if(gtk_builder_add_from_file(builder, UI_OPTIONS, &err))
49 GtkWidget* notebook = GTK_WIDGET(gtk_builder_get_object(builder, "ui-options"));
50 pref_construct_signals_and_values(builder);
51 gtk_container_add(GTK_CONTAINER(l_con), notebook);
53 else
55 g_warning("Cannot construct option page: %s", err->message);
56 g_error_free(err);
60 void pref_construct_signals_and_values(GtkBuilder* l_builder)
62 GtkToggleButton* check;
63 GtkSpinButton* spin;
64 GtkComboBox* combo;
66 /* Local ----------------------------------------------------------------------------------- */
67 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "dynamic_search"));
68 gtk_toggle_button_set_active(check, get_search_active());
69 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_search_active);
71 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "use_blacklists"));
72 gtk_toggle_button_set_active(check, get_active_blacklist());
73 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_active_blacklist);
75 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "search_genre"));
76 gtk_toggle_button_set_active(check, get_local_search_genre());
77 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_local_search_genre);
79 combo = GTK_COMBO_BOX(gtk_builder_get_object(l_builder, "search_genre_style"));
80 gtk_combo_box_set_active(combo, get_local_search_genre_style());
81 g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(pref_combo), set_local_search_genre_style);
83 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "search_comment"));
84 gtk_toggle_button_set_active(check, get_local_search_comment());
85 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_local_search_comment);
87 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_queue"));
88 gtk_spin_button_set_value(spin, get_queue_songs());
89 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_queue_songs);
91 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_delay"));
92 gtk_spin_button_set_value(spin, get_delay_time());
93 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_delay_time);
95 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_keep"));
96 gtk_spin_button_set_value(spin, get_prune_value());
97 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_prune_value);
99 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_block_song"));
100 gtk_spin_button_set_value(spin, get_played_limit_song());
101 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_played_limit_song);
103 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_block_artist"));
104 gtk_spin_button_set_value(spin, get_played_limit_artist());
105 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_played_limit_artist);
108 /* Metadata -------------------------------------------------------------------------------- */
109 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "song_toggle"));
110 gtk_toggle_button_set_active(check, get_search_song());
111 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_search_song);
113 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "artist_toggle"));
114 gtk_toggle_button_set_active(check, get_search_artist());
115 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_search_artist);
117 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "artist_same_toggle"));
118 gtk_toggle_button_set_active(check, get_search_artist_same());
119 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_search_artist_same);
121 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "genre_toggle"));
122 gtk_toggle_button_set_active(check, get_search_genre());
123 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_search_genre);
125 check = GTK_TOGGLE_BUTTON(gtk_builder_get_object(l_builder, "genre_same_toggle"));
126 gtk_toggle_button_set_active(check, get_search_genre_same());
127 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_toggle), set_search_genre_same);
129 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_song"));
130 gtk_spin_button_set_value(spin, get_search_song_max());
131 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_search_song_max);
133 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_artist"));
134 gtk_spin_button_set_value(spin, get_search_artist_max());
135 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_search_artist_max);
137 spin = GTK_SPIN_BUTTON(gtk_builder_get_object(l_builder, "spin_genre"));
138 gtk_spin_button_set_value(spin, get_search_genre_max());
139 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_spin), set_search_genre_max);
142 void pref_combo(GtkComboBox* l_combo, Combo l_func)
144 GtkTreeIter iter;
145 GtkListStore* store = GTK_LIST_STORE(gtk_combo_box_get_model(l_combo));
146 if(gtk_combo_box_get_active_iter(l_combo, &iter))
148 gint value;
149 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, 0, &value, -1);
150 l_func(value);
154 void pref_toggle(GtkToggleButton* l_button, Toggle l_func)
156 l_func( gtk_toggle_button_get_active(l_button) );
159 void pref_toggle_menu(GtkCheckMenuItem* l_item, Toggle l_func)
161 l_func( gtk_check_menu_item_get_active(l_item) );
164 void pref_spin(GtkSpinButton* l_button, Spin l_func)
166 l_func( gtk_spin_button_get_value_as_int(l_button) );
169 int dyn_tool_menu_integration(GtkMenu* l_menu)
171 m_menu_item = gtk_image_menu_item_new_with_label(_("Dynamic Playlist"));
172 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(m_menu_item), gtk_image_new_from_stock(GTK_STOCK_INDEX, GTK_ICON_SIZE_MENU));
173 m_menu = gtk_menu_new();
174 gtk_menu_item_set_submenu(GTK_MENU_ITEM(m_menu_item), m_menu);
175 gtk_menu_shell_append(GTK_MENU_SHELL(l_menu), m_menu_item);
177 m_menu_search = gtk_check_menu_item_new_with_label(_("Dynamic search"));
178 g_signal_connect(G_OBJECT(m_menu_search), "activate", G_CALLBACK(pref_toggle_menu), set_search_active);
179 gtk_menu_shell_append(GTK_MENU_SHELL(m_menu), m_menu_search);
181 m_menu_blacklist = gtk_check_menu_item_new_with_label(_("Use blacklists"));
182 g_signal_connect(G_OBJECT(m_menu_blacklist), "activate", G_CALLBACK(pref_toggle_menu), set_active_blacklist);
183 gtk_menu_shell_append(GTK_MENU_SHELL(m_menu), m_menu_blacklist);
185 GtkWidget* menu_add_song = gtk_image_menu_item_new_with_label(_("Add similar song"));
186 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_add_song), gtk_image_new_from_stock(GTK_STOCK_REFRESH, GTK_ICON_SIZE_MENU));
187 g_signal_connect(G_OBJECT(menu_add_song), "activate", G_CALLBACK(search_easy), NULL);
188 gtk_menu_shell_append(GTK_MENU_SHELL(m_menu), menu_add_song);
190 reload_menu_list();
191 return 1;
194 void reload_menu_list()
196 gtk_widget_set_sensitive(m_menu_item, dyn_get_enabled());
197 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(m_menu_search), get_search_active());
198 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(m_menu_blacklist), get_active_blacklist());
201 /* vim:set ts=4 sw=4: */