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.
25 #include "blacklist.h"
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
));
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());
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
);
55 g_warning("Cannot construct option page: %s", err
->message
);
60 void pref_construct_signals_and_values(GtkBuilder
* l_builder
)
62 GtkToggleButton
* check
;
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
)
145 GtkListStore
* store
= GTK_LIST_STORE(gtk_combo_box_get_model(l_combo
));
146 if(gtk_combo_box_get_active_iter(l_combo
, &iter
))
149 gtk_tree_model_get(GTK_TREE_MODEL(store
), &iter
, 0, &value
, -1);
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
);
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: */