Mercurial > audlegacy-plugins
comparison src/amidi-plug/i_configure-ap.c @ 12:3da1b8942b8b trunk
[svn] - remove src/Input src/Output src/Effect src/General src/Visualization src/Container
author | nenolod |
---|---|
date | Mon, 18 Sep 2006 03:14:20 -0700 |
parents | src/Input/amidi-plug/i_configure-ap.c@13389e613d67 |
children | 59d793da5395 |
comparison
equal
deleted
inserted
replaced
11:cff1d04026ae | 12:3da1b8942b8b |
---|---|
1 /* | |
2 * | |
3 * Author: Giacomo Lozito <james@develia.org>, (C) 2005-2006 | |
4 * | |
5 * This program is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License as published by the | |
7 * Free Software Foundation; either version 2 of the License, or (at your | |
8 * option) any later version. | |
9 * | |
10 * This program is distributed in the hope that it will be useful, but | |
11 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 * General Public License for more details. | |
14 * | |
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 | |
18 * | |
19 */ | |
20 | |
21 | |
22 #include "i_configure-ap.h" | |
23 #include "amidi-plug-icon.xpm" | |
24 | |
25 | |
26 enum | |
27 { | |
28 LISTBACKEND_NAME_COLUMN = 0, | |
29 LISTBACKEND_LONGNAME_COLUMN, | |
30 LISTBACKEND_DESC_COLUMN, | |
31 LISTBACKEND_FILENAME_COLUMN, | |
32 LISTBACKEND_PPOS_COLUMN, | |
33 LISTBACKEND_N_COLUMNS | |
34 }; | |
35 | |
36 | |
37 void i_configure_ev_backendlv_info( gpointer backend_lv ) | |
38 { | |
39 GtkTreeModel * store; | |
40 GtkTreeIter iter; | |
41 GtkTreeSelection *sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(backend_lv) ); | |
42 /* get the selected item */ | |
43 if ( gtk_tree_selection_get_selected( sel , &store , &iter ) ) | |
44 { | |
45 GtkWidget *bidialog; | |
46 GdkGeometry bi_hints; | |
47 GtkWidget *title_label, *title_frame; | |
48 GtkWidget *filename_entry, *filename_frame; | |
49 GtkWidget *description_label, *description_frame; | |
50 GtkWidget *parent_window = gtk_widget_get_toplevel( backend_lv ); | |
51 gchar *longname_title, *longname, *filename, *description; | |
52 gtk_tree_model_get( GTK_TREE_MODEL(store) , &iter , | |
53 LISTBACKEND_LONGNAME_COLUMN , &longname , | |
54 LISTBACKEND_DESC_COLUMN , &description , | |
55 LISTBACKEND_FILENAME_COLUMN , &filename , -1 ); | |
56 bidialog = gtk_dialog_new_with_buttons( _("AMIDI-Plug - backend information") , | |
57 GTK_WINDOW(parent_window) , | |
58 GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL , | |
59 GTK_STOCK_OK , GTK_RESPONSE_NONE , NULL ); | |
60 bi_hints.min_width = 360; bi_hints.min_height = -1; | |
61 gtk_window_set_geometry_hints( GTK_WINDOW(bidialog) , GTK_WIDGET(bidialog) , | |
62 &bi_hints , GDK_HINT_MIN_SIZE ); | |
63 | |
64 longname_title = g_markup_printf_escaped( "<span size=\"larger\" weight=\"bold\" >%s</span>" , longname ); | |
65 title_frame = gtk_frame_new( NULL ); | |
66 title_label = gtk_label_new( "" ); | |
67 gtk_label_set_markup( GTK_LABEL(title_label) , longname_title ); | |
68 g_free( longname_title ); g_free( longname ); | |
69 gtk_container_add( GTK_CONTAINER(title_frame) , title_label ); | |
70 gtk_box_pack_start( GTK_BOX(GTK_DIALOG(bidialog)->vbox) , title_frame , FALSE , FALSE , 0 ); | |
71 | |
72 filename_frame = gtk_frame_new( NULL ); | |
73 filename_entry = gtk_entry_new(); | |
74 gtk_entry_set_text( GTK_ENTRY(filename_entry) , filename ); | |
75 gtk_entry_set_alignment( GTK_ENTRY(filename_entry) , 0.5 ); | |
76 gtk_editable_set_editable( GTK_EDITABLE(filename_entry) , FALSE ); | |
77 gtk_entry_set_has_frame( GTK_ENTRY(filename_entry) , FALSE ); | |
78 g_free( filename ); | |
79 gtk_container_add( GTK_CONTAINER(filename_frame) , filename_entry ); | |
80 gtk_box_pack_start( GTK_BOX(GTK_DIALOG(bidialog)->vbox) , filename_frame , FALSE , FALSE , 0 ); | |
81 | |
82 description_frame = gtk_frame_new( NULL ); | |
83 description_label = gtk_label_new( description ); | |
84 gtk_misc_set_padding( GTK_MISC(description_label) , 4 , 4 ); | |
85 gtk_label_set_line_wrap( GTK_LABEL(description_label) , TRUE ); | |
86 g_free( description ); | |
87 gtk_container_add( GTK_CONTAINER(description_frame) , description_label ); | |
88 gtk_box_pack_start( GTK_BOX(GTK_DIALOG(bidialog)->vbox) , description_frame , TRUE , TRUE , 0 ); | |
89 | |
90 gtk_widget_show_all( bidialog ); | |
91 gtk_window_set_focus( GTK_WINDOW(bidialog) , NULL ); | |
92 gtk_dialog_run( GTK_DIALOG(bidialog) ); | |
93 gtk_widget_destroy( bidialog ); | |
94 } | |
95 return; | |
96 } | |
97 | |
98 | |
99 void i_configure_ev_backendlv_commit( gpointer backend_lv ) | |
100 { | |
101 GtkTreeModel * store; | |
102 GtkTreeIter iter; | |
103 GtkTreeSelection *sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(backend_lv) ); | |
104 /* get the selected item */ | |
105 if ( gtk_tree_selection_get_selected( sel , &store , &iter ) ) | |
106 { | |
107 g_free( amidiplug_cfg_ap.ap_seq_backend ); /* free previous */ | |
108 /* update amidiplug_cfg_ap.ap_seq_backend */ | |
109 gtk_tree_model_get( GTK_TREE_MODEL(store) , &iter , | |
110 LISTBACKEND_NAME_COLUMN , &amidiplug_cfg_ap.ap_seq_backend , -1 ); | |
111 } | |
112 return; | |
113 } | |
114 | |
115 | |
116 void i_configure_ev_settings_commit( gpointer settings_vbox ) | |
117 { | |
118 GtkWidget *settings_precalc_checkbt = g_object_get_data( G_OBJECT(settings_vbox) , | |
119 "ap_opts_length_precalc" ); | |
120 GtkWidget *settings_extractlyr_checkbt = g_object_get_data( G_OBJECT(settings_vbox) , | |
121 "ap_opts_lyrics_extract" ); | |
122 GtkWidget *settings_extractcomm_checkbt = g_object_get_data( G_OBJECT(settings_vbox) , | |
123 "ap_opts_comments_extract" ); | |
124 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(settings_precalc_checkbt) ) ) | |
125 amidiplug_cfg_ap.ap_opts_length_precalc = 1; | |
126 else | |
127 amidiplug_cfg_ap.ap_opts_length_precalc = 0; | |
128 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(settings_extractlyr_checkbt) ) ) | |
129 amidiplug_cfg_ap.ap_opts_lyrics_extract = 1; | |
130 else | |
131 amidiplug_cfg_ap.ap_opts_lyrics_extract = 0; | |
132 if ( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(settings_extractcomm_checkbt) ) ) | |
133 amidiplug_cfg_ap.ap_opts_comments_extract = 1; | |
134 else | |
135 amidiplug_cfg_ap.ap_opts_comments_extract = 0; | |
136 return; | |
137 } | |
138 | |
139 | |
140 gint i_configure_backendlist_sortf( GtkTreeModel * model , GtkTreeIter * a , | |
141 GtkTreeIter * b , gpointer data ) | |
142 { | |
143 gint v_a = 0, v_b = 0; | |
144 gtk_tree_model_get( model , a , LISTBACKEND_PPOS_COLUMN , &v_a , -1 ); | |
145 gtk_tree_model_get( model , b , LISTBACKEND_PPOS_COLUMN , &v_b , -1 ); | |
146 return (v_a - v_b); | |
147 } | |
148 | |
149 | |
150 void i_configure_gui_tab_ap( GtkWidget * ap_page_alignment , | |
151 gpointer backend_list_p , | |
152 gpointer commit_button ) | |
153 { | |
154 GtkWidget *ap_page_vbox; | |
155 GtkWidget *title_widget; | |
156 GtkWidget *content_vbox; /* this vbox will contain two items of equal space (50%/50%) */ | |
157 GtkWidget *settings_frame, *settings_vbox; | |
158 GtkWidget *settings_precalc_checkbt, *settings_extractcomm_checkbt, *settings_extractlyr_checkbt; | |
159 GtkWidget *backend_lv_frame, *backend_lv, *backend_lv_sw; | |
160 GtkWidget *backend_lv_hbox, *backend_lv_vbbox, *backend_lv_infobt; | |
161 GtkListStore *backend_store; | |
162 GtkCellRenderer *backend_lv_text_rndr; | |
163 GtkTreeViewColumn *backend_lv_name_col; | |
164 GtkTreeIter backend_lv_iter_selected; | |
165 GtkTreeSelection *backend_lv_sel; | |
166 GtkTreeIter iter; | |
167 GtkTooltips *tips; | |
168 GSList * backend_list = backend_list_p; | |
169 | |
170 tips = gtk_tooltips_new(); | |
171 g_object_set_data_full( G_OBJECT(ap_page_alignment) , "tt" , tips , g_object_unref ); | |
172 | |
173 ap_page_vbox = gtk_vbox_new( FALSE , 0 ); | |
174 | |
175 title_widget = i_configure_gui_draw_title( _("AMIDI-PLUG PREFERENCES") ); | |
176 gtk_box_pack_start( GTK_BOX(ap_page_vbox) , title_widget , FALSE , FALSE , 2 ); | |
177 | |
178 content_vbox = gtk_vbox_new( TRUE , 2 ); | |
179 | |
180 backend_store = gtk_list_store_new( LISTBACKEND_N_COLUMNS , G_TYPE_STRING , G_TYPE_STRING , | |
181 G_TYPE_STRING , G_TYPE_STRING , G_TYPE_INT ); | |
182 gtk_tree_sortable_set_default_sort_func( GTK_TREE_SORTABLE(backend_store) , | |
183 i_configure_backendlist_sortf , NULL , NULL ); | |
184 gtk_tree_sortable_set_sort_column_id( GTK_TREE_SORTABLE(backend_store) , | |
185 GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID , | |
186 GTK_SORT_ASCENDING ); | |
187 while ( backend_list != NULL ) | |
188 { | |
189 amidiplug_sequencer_backend_name_t * mn = backend_list->data; | |
190 gtk_list_store_append( backend_store , &iter ); | |
191 gtk_list_store_set ( backend_store, &iter, | |
192 LISTBACKEND_NAME_COLUMN , mn->name , | |
193 LISTBACKEND_LONGNAME_COLUMN , mn->longname , | |
194 LISTBACKEND_DESC_COLUMN , mn->desc , | |
195 LISTBACKEND_FILENAME_COLUMN , mn->filename , | |
196 LISTBACKEND_PPOS_COLUMN , mn->ppos , -1 ); | |
197 if ( !strcmp( mn->name , amidiplug_cfg_ap.ap_seq_backend ) ) | |
198 backend_lv_iter_selected = iter; | |
199 backend_list = backend_list->next; | |
200 } | |
201 | |
202 backend_lv_frame = gtk_frame_new( _("Backend selection") ); | |
203 backend_lv = gtk_tree_view_new_with_model( GTK_TREE_MODEL(backend_store) ); | |
204 g_object_unref( backend_store ); | |
205 backend_lv_text_rndr = gtk_cell_renderer_text_new(); | |
206 backend_lv_name_col = gtk_tree_view_column_new_with_attributes( _("Available backends") , | |
207 backend_lv_text_rndr , | |
208 "text" , 1 , NULL ); | |
209 gtk_tree_view_append_column( GTK_TREE_VIEW(backend_lv), backend_lv_name_col ); | |
210 | |
211 backend_lv_sel = gtk_tree_view_get_selection( GTK_TREE_VIEW(backend_lv) ); | |
212 gtk_tree_selection_set_mode( GTK_TREE_SELECTION(backend_lv_sel) , GTK_SELECTION_BROWSE ); | |
213 gtk_tree_selection_select_iter( GTK_TREE_SELECTION(backend_lv_sel) , &backend_lv_iter_selected ); | |
214 | |
215 backend_lv_sw = gtk_scrolled_window_new( NULL , NULL ); | |
216 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(backend_lv_sw) , | |
217 GTK_POLICY_NEVER , GTK_POLICY_ALWAYS ); | |
218 gtk_container_add( GTK_CONTAINER(backend_lv_sw) , backend_lv ); | |
219 g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" , | |
220 G_CALLBACK(i_configure_ev_backendlv_commit) , backend_lv ); | |
221 | |
222 backend_lv_hbox = gtk_hbox_new( FALSE , 0 ); | |
223 gtk_box_pack_start( GTK_BOX(backend_lv_hbox) , backend_lv_sw , TRUE , TRUE , 0 ); | |
224 backend_lv_vbbox = gtk_vbox_new( FALSE , 2 ); | |
225 gtk_box_pack_start( GTK_BOX(backend_lv_hbox) , backend_lv_vbbox , FALSE , FALSE , 3 ); | |
226 backend_lv_infobt = gtk_button_new(); | |
227 gtk_button_set_image( GTK_BUTTON(backend_lv_infobt) , | |
228 gtk_image_new_from_stock( GTK_STOCK_DIALOG_INFO , GTK_ICON_SIZE_BUTTON ) ); | |
229 g_signal_connect_swapped( G_OBJECT(backend_lv_infobt) , "clicked" , | |
230 G_CALLBACK(i_configure_ev_backendlv_info) , backend_lv ); | |
231 gtk_box_pack_start( GTK_BOX(backend_lv_vbbox) , backend_lv_infobt , FALSE , FALSE , 0 ); | |
232 gtk_container_add( GTK_CONTAINER(backend_lv_frame) , backend_lv_hbox ); | |
233 | |
234 settings_frame = gtk_frame_new( _("Advanced settings") ); | |
235 settings_vbox = gtk_vbox_new( FALSE , 0 ); | |
236 gtk_container_set_border_width( GTK_CONTAINER(settings_vbox), 4 ); | |
237 settings_precalc_checkbt = gtk_check_button_new_with_label( | |
238 _("pre-calculate length of MIDI files in playlist") ); | |
239 if ( amidiplug_cfg_ap.ap_opts_length_precalc ) | |
240 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(settings_precalc_checkbt) , TRUE ); | |
241 gtk_box_pack_start( GTK_BOX(settings_vbox) , settings_precalc_checkbt , FALSE , FALSE , 2 ); | |
242 settings_extractcomm_checkbt = gtk_check_button_new_with_label( | |
243 _("extract comments from MIDI file (if available)") ); | |
244 if ( amidiplug_cfg_ap.ap_opts_comments_extract ) | |
245 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(settings_extractcomm_checkbt) , TRUE ); | |
246 gtk_box_pack_start( GTK_BOX(settings_vbox) , settings_extractcomm_checkbt , FALSE , FALSE , 2 ); | |
247 settings_extractlyr_checkbt = gtk_check_button_new_with_label( | |
248 _("extract lyrics from MIDI file (if available)") ); | |
249 if ( amidiplug_cfg_ap.ap_opts_lyrics_extract ) | |
250 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON(settings_extractlyr_checkbt) , TRUE ); | |
251 gtk_box_pack_start( GTK_BOX(settings_vbox) , settings_extractlyr_checkbt , FALSE , FALSE , 2 ); | |
252 gtk_container_add( GTK_CONTAINER(settings_frame) , settings_vbox ); | |
253 /* attach pointers of options to settings_vbox so we can handle all of them in a single callback */ | |
254 g_object_set_data( G_OBJECT(settings_vbox) , "ap_opts_length_precalc" , settings_precalc_checkbt ); | |
255 g_object_set_data( G_OBJECT(settings_vbox) , "ap_opts_comments_extract" , settings_extractcomm_checkbt ); | |
256 g_object_set_data( G_OBJECT(settings_vbox) , "ap_opts_lyrics_extract" , settings_extractlyr_checkbt ); | |
257 g_signal_connect_swapped( G_OBJECT(commit_button) , "ap-commit" , | |
258 G_CALLBACK(i_configure_ev_settings_commit) , settings_vbox ); | |
259 | |
260 gtk_box_pack_start( GTK_BOX(content_vbox) , backend_lv_frame , TRUE , TRUE , 0 ); | |
261 gtk_box_pack_start( GTK_BOX(content_vbox) , settings_frame , TRUE , TRUE , 0 ); | |
262 gtk_box_pack_start( GTK_BOX(ap_page_vbox) , content_vbox , TRUE , TRUE , 2 ); | |
263 gtk_container_add( GTK_CONTAINER(ap_page_alignment) , ap_page_vbox ); | |
264 | |
265 gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , backend_lv , | |
266 _("* Backend selection *\n" | |
267 "AMIDI-Plug works with backends, in a modular fashion; here you should " | |
268 "select your backend; that is, the way MIDI events are going to be handled " | |
269 "and played.\nIf you have a hardware synthesizer on your audio card, and ALSA " | |
270 "supports it, you'll want to use the ALSA backend. It can also be " | |
271 "used with anything that provides an interface to the ALSA sequencer, including " | |
272 "software synths or external devices.\nIf you want to rely on a software " | |
273 "synthesizer and/or want to pipe audio into effect and output plugins of the " | |
274 "player you'll want to use the good FluidSynth backend.\nPress the info " | |
275 "button to read specific information about each backend.") , "" ); | |
276 gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settings_precalc_checkbt , | |
277 _("* Pre-calculate MIDI length *\n" | |
278 "If this option is enabled, AMIDI-Plug will calculate the MIDI file " | |
279 "length as soon as the player requests it, instead of doing that only " | |
280 "when the MIDI file is being played. In example, MIDI length " | |
281 "will be calculated straight after adding MIDI files in a playlist. " | |
282 "Disable this option if you want faster playlist loading (when a lot " | |
283 "of MIDI files are added), enable it to display more information " | |
284 "in the playlist straight after loading.") , "" ); | |
285 gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settings_extractcomm_checkbt , | |
286 _("* Extract comments from MIDI files *\n" | |
287 "Some MIDI files contain text comments (author, copyright, instrument notes, " | |
288 "etc.). If this option is enabled, AMIDI-Plug will extract and display comments " | |
289 "(if available) in the file information dialog.") , "" ); | |
290 gtk_tooltips_set_tip( GTK_TOOLTIPS(tips) , settings_extractlyr_checkbt , | |
291 _("* Extract lyrics from MIDI files *\n" | |
292 "Some MIDI files contain song lyrics. If this option is enabled, AMIDI-Plug " | |
293 "will extract and display song lyrics (if available) in the file " | |
294 "information dialog.") , "" ); | |
295 } | |
296 | |
297 | |
298 void i_configure_gui_tablabel_ap( GtkWidget * ap_page_alignment , | |
299 gpointer backend_list_p , | |
300 gpointer commit_button ) | |
301 { | |
302 GtkWidget *pagelabel_vbox, *pagelabel_image, *pagelabel_label; | |
303 GdkPixbuf *pagelabel_image_pix; | |
304 pagelabel_vbox = gtk_vbox_new( FALSE , 1 ); | |
305 pagelabel_image_pix = gdk_pixbuf_new_from_xpm_data( (const gchar **)amidi_plug_icon_xpm ); | |
306 pagelabel_image = gtk_image_new_from_pixbuf( pagelabel_image_pix ); g_object_unref( pagelabel_image_pix ); | |
307 pagelabel_label = gtk_label_new( "" ); | |
308 gtk_label_set_markup( GTK_LABEL(pagelabel_label) , "<span size=\"smaller\">AMIDI\nPlug</span>" ); | |
309 gtk_label_set_justify( GTK_LABEL(pagelabel_label) , GTK_JUSTIFY_CENTER ); | |
310 gtk_box_pack_start( GTK_BOX(pagelabel_vbox) , pagelabel_image , FALSE , FALSE , 1 ); | |
311 gtk_box_pack_start( GTK_BOX(pagelabel_vbox) , pagelabel_label , FALSE , FALSE , 1 ); | |
312 gtk_container_add( GTK_CONTAINER(ap_page_alignment) , pagelabel_vbox ); | |
313 gtk_widget_show_all( ap_page_alignment ); | |
314 return; | |
315 } |