Mercurial > hg > xmms-sid
comparison src/xs_config.c @ 660:b0743dc9165d
Change tabs to 4 spaces, everywhere.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 02 Apr 2008 22:10:05 +0300 |
parents | acaba070cf49 |
children | 94186706beed |
comparison
equal
deleted
inserted
replaced
659:04ea91a61225 | 660:b0743dc9165d |
---|---|
22 */ | 22 */ |
23 #include "xs_config.h" | 23 #include "xs_config.h" |
24 | 24 |
25 #ifdef AUDACIOUS_PLUGIN | 25 #ifdef AUDACIOUS_PLUGIN |
26 #include <audacious/plugin.h> | 26 #include <audacious/plugin.h> |
27 #define XS_CONFIG_FILE ConfigDb | 27 #define XS_CONFIG_FILE ConfigDb |
28 #define XS_CONFIG_OPEN aud_cfg_db_open | 28 #define XS_CONFIG_OPEN aud_cfg_db_open |
29 #define XS_CONFIG_FREE aud_cfg_db_close | 29 #define XS_CONFIG_FREE aud_cfg_db_close |
30 | 30 |
31 #define XS_CFG_SET_STRING aud_cfg_db_set_string | 31 #define XS_CFG_SET_STRING aud_cfg_db_set_string |
32 #define XS_CFG_SET_FLOAT aud_cfg_db_set_float | 32 #define XS_CFG_SET_FLOAT aud_cfg_db_set_float |
33 #define XS_CFG_SET_INT aud_cfg_db_set_int | 33 #define XS_CFG_SET_INT aud_cfg_db_set_int |
34 #define XS_CFG_SET_BOOL aud_cfg_db_set_bool | 34 #define XS_CFG_SET_BOOL aud_cfg_db_set_bool |
35 #define XS_CFG_GET_STRING aud_cfg_db_get_string | 35 #define XS_CFG_GET_STRING aud_cfg_db_get_string |
36 #define XS_CFG_GET_FLOAT aud_cfg_db_get_float | 36 #define XS_CFG_GET_FLOAT aud_cfg_db_get_float |
37 #define XS_CFG_GET_INT aud_cfg_db_get_int | 37 #define XS_CFG_GET_INT aud_cfg_db_get_int |
38 #define XS_CFG_GET_BOOL aud_cfg_db_get_bool | 38 #define XS_CFG_GET_BOOL aud_cfg_db_get_bool |
39 #else | 39 #else |
40 #include <xmms/configfile.h> | 40 #include <xmms/configfile.h> |
41 #define XS_CONFIG_FILE ConfigFile | 41 #define XS_CONFIG_FILE ConfigFile |
42 #define XS_CONFIG_OPEN xmms_cfg_open_default_file | 42 #define XS_CONFIG_OPEN xmms_cfg_open_default_file |
43 #define XS_CONFIG_FREE xmms_cfg_free | 43 #define XS_CONFIG_FREE xmms_cfg_free |
44 | 44 |
45 #define XS_CFG_SET_STRING xmms_cfg_write_string | 45 #define XS_CFG_SET_STRING xmms_cfg_write_string |
46 #define XS_CFG_SET_FLOAT xmms_cfg_write_float | 46 #define XS_CFG_SET_FLOAT xmms_cfg_write_float |
47 #define XS_CFG_SET_INT xmms_cfg_write_int | 47 #define XS_CFG_SET_INT xmms_cfg_write_int |
48 #define XS_CFG_SET_BOOL xmms_cfg_write_boolean | 48 #define XS_CFG_SET_BOOL xmms_cfg_write_boolean |
49 #define XS_CFG_GET_STRING xmms_cfg_read_string | 49 #define XS_CFG_GET_STRING xmms_cfg_read_string |
50 #define XS_CFG_GET_FLOAT xmms_cfg_read_float | 50 #define XS_CFG_GET_FLOAT xmms_cfg_read_float |
51 #define XS_CFG_GET_INT xmms_cfg_read_int | 51 #define XS_CFG_GET_INT xmms_cfg_read_int |
52 #define XS_CFG_GET_BOOL xmms_cfg_read_boolean | 52 #define XS_CFG_GET_BOOL xmms_cfg_read_boolean |
53 #endif | 53 #endif |
54 #include <stdio.h> | 54 #include <stdio.h> |
55 #include <ctype.h> | 55 #include <ctype.h> |
56 #include "xs_glade.h" | 56 #include "xs_glade.h" |
57 #include "xs_interface.h" | 57 #include "xs_interface.h" |
60 | 60 |
61 /* | 61 /* |
62 * Global widgets | 62 * Global widgets |
63 */ | 63 */ |
64 static GtkWidget *xs_configwin = NULL, | 64 static GtkWidget *xs_configwin = NULL, |
65 *xs_sldb_fileselector = NULL, | 65 *xs_sldb_fileselector = NULL, |
66 *xs_stil_fileselector = NULL, | 66 *xs_stil_fileselector = NULL, |
67 *xs_hvsc_selector = NULL, | 67 *xs_hvsc_selector = NULL, |
68 *xs_filt_importselector = NULL, | 68 *xs_filt_importselector = NULL, |
69 *xs_filt_exportselector = NULL; | 69 *xs_filt_exportselector = NULL; |
70 | 70 |
71 #define LUW(x) lookup_widget(xs_configwin, x) | 71 #define LUW(x) lookup_widget(xs_configwin, x) |
72 | 72 |
73 /* Samplerates | 73 /* Samplerates |
74 */ | 74 */ |
75 static const gchar *xs_samplerates_table[] = { | 75 static const gchar *xs_samplerates_table[] = { |
76 "8000", "11025", "22050", | 76 "8000", "11025", "22050", |
77 "44100", "48000", "64000", | 77 "44100", "48000", "64000", |
78 "96000" | 78 "96000" |
79 }; | 79 }; |
80 | 80 |
81 static const gint xs_nsamplerates_table = (sizeof(xs_samplerates_table) / sizeof(xs_samplerates_table[0])); | 81 static const gint xs_nsamplerates_table = (sizeof(xs_samplerates_table) / sizeof(xs_samplerates_table[0])); |
82 | 82 |
83 /* | 83 /* |
85 */ | 85 */ |
86 XS_MUTEX(xs_cfg); | 86 XS_MUTEX(xs_cfg); |
87 struct t_xs_cfg xs_cfg; | 87 struct t_xs_cfg xs_cfg; |
88 | 88 |
89 static t_xs_cfg_item xs_cfgtable[] = { | 89 static t_xs_cfg_item xs_cfgtable[] = { |
90 { CTYPE_INT, &xs_cfg.audioBitsPerSample, "audioBitsPerSample" }, | 90 { CTYPE_INT, &xs_cfg.audioBitsPerSample, "audioBitsPerSample" }, |
91 { CTYPE_INT, &xs_cfg.audioChannels, "audioChannels" }, | 91 { CTYPE_INT, &xs_cfg.audioChannels, "audioChannels" }, |
92 { CTYPE_INT, &xs_cfg.audioFrequency, "audioFrequency" }, | 92 { CTYPE_INT, &xs_cfg.audioFrequency, "audioFrequency" }, |
93 | 93 |
94 { CTYPE_BOOL, &xs_cfg.mos8580, "mos8580" }, | 94 { CTYPE_BOOL, &xs_cfg.mos8580, "mos8580" }, |
95 { CTYPE_BOOL, &xs_cfg.forceModel, "forceModel" }, | 95 { CTYPE_BOOL, &xs_cfg.forceModel, "forceModel" }, |
96 { CTYPE_BOOL, &xs_cfg.emulateFilters, "emulateFilters" }, | 96 { CTYPE_BOOL, &xs_cfg.emulateFilters, "emulateFilters" }, |
97 { CTYPE_FLOAT, &xs_cfg.sid1FilterFs, "filterFs" }, | 97 { CTYPE_FLOAT, &xs_cfg.sid1FilterFs, "filterFs" }, |
98 { CTYPE_FLOAT, &xs_cfg.sid1FilterFm, "filterFm" }, | 98 { CTYPE_FLOAT, &xs_cfg.sid1FilterFm, "filterFm" }, |
99 { CTYPE_FLOAT, &xs_cfg.sid1FilterFt, "filterFt" }, | 99 { CTYPE_FLOAT, &xs_cfg.sid1FilterFt, "filterFt" }, |
100 { CTYPE_INT, &xs_cfg.memoryMode, "memoryMode" }, | 100 { CTYPE_INT, &xs_cfg.memoryMode, "memoryMode" }, |
101 { CTYPE_INT, &xs_cfg.clockSpeed, "clockSpeed" }, | 101 { CTYPE_INT, &xs_cfg.clockSpeed, "clockSpeed" }, |
102 { CTYPE_BOOL, &xs_cfg.forceSpeed, "forceSpeed" }, | 102 { CTYPE_BOOL, &xs_cfg.forceSpeed, "forceSpeed" }, |
103 | 103 |
104 { CTYPE_INT, &xs_cfg.playerEngine, "playerEngine" }, | 104 { CTYPE_INT, &xs_cfg.playerEngine, "playerEngine" }, |
105 | 105 |
106 { CTYPE_INT, &xs_cfg.sid2Builder, "sid2Builder" }, | 106 { CTYPE_INT, &xs_cfg.sid2Builder, "sid2Builder" }, |
107 { CTYPE_INT, &xs_cfg.sid2OptLevel, "sid2OptLevel" }, | 107 { CTYPE_INT, &xs_cfg.sid2OptLevel, "sid2OptLevel" }, |
108 { CTYPE_INT, &xs_cfg.sid2NFilterPresets, "sid2NFilterPresets" }, | 108 { CTYPE_INT, &xs_cfg.sid2NFilterPresets, "sid2NFilterPresets" }, |
109 | 109 |
110 { CTYPE_BOOL, &xs_cfg.oversampleEnable, "oversampleEnable" }, | 110 { CTYPE_BOOL, &xs_cfg.oversampleEnable, "oversampleEnable" }, |
111 { CTYPE_INT, &xs_cfg.oversampleFactor, "oversampleFactor" }, | 111 { CTYPE_INT, &xs_cfg.oversampleFactor, "oversampleFactor" }, |
112 | 112 |
113 { CTYPE_BOOL, &xs_cfg.playMaxTimeEnable, "playMaxTimeEnable" }, | 113 { CTYPE_BOOL, &xs_cfg.playMaxTimeEnable, "playMaxTimeEnable" }, |
114 { CTYPE_BOOL, &xs_cfg.playMaxTimeUnknown, "playMaxTimeUnknown" }, | 114 { CTYPE_BOOL, &xs_cfg.playMaxTimeUnknown, "playMaxTimeUnknown" }, |
115 { CTYPE_INT, &xs_cfg.playMaxTime, "playMaxTime" }, | 115 { CTYPE_INT, &xs_cfg.playMaxTime, "playMaxTime" }, |
116 { CTYPE_BOOL, &xs_cfg.playMinTimeEnable, "playMinTimeEnable" }, | 116 { CTYPE_BOOL, &xs_cfg.playMinTimeEnable, "playMinTimeEnable" }, |
117 { CTYPE_INT, &xs_cfg.playMinTime, "playMinTime" }, | 117 { CTYPE_INT, &xs_cfg.playMinTime, "playMinTime" }, |
118 { CTYPE_BOOL, &xs_cfg.songlenDBEnable, "songlenDBEnable" }, | 118 { CTYPE_BOOL, &xs_cfg.songlenDBEnable, "songlenDBEnable" }, |
119 { CTYPE_STR, &xs_cfg.songlenDBPath, "songlenDBPath" }, | 119 { CTYPE_STR, &xs_cfg.songlenDBPath, "songlenDBPath" }, |
120 | 120 |
121 { CTYPE_BOOL, &xs_cfg.stilDBEnable, "stilDBEnable" }, | 121 { CTYPE_BOOL, &xs_cfg.stilDBEnable, "stilDBEnable" }, |
122 { CTYPE_STR, &xs_cfg.stilDBPath, "stilDBPath" }, | 122 { CTYPE_STR, &xs_cfg.stilDBPath, "stilDBPath" }, |
123 { CTYPE_STR, &xs_cfg.hvscPath, "hvscPath" }, | 123 { CTYPE_STR, &xs_cfg.hvscPath, "hvscPath" }, |
124 | 124 |
125 #ifndef AUDACIOUS_PLUGIN | 125 #ifndef AUDACIOUS_PLUGIN |
126 { CTYPE_INT, &xs_cfg.subsongControl, "subsongControl" }, | 126 { CTYPE_INT, &xs_cfg.subsongControl, "subsongControl" }, |
127 { CTYPE_BOOL, &xs_cfg.detectMagic, "detectMagic" }, | 127 { CTYPE_BOOL, &xs_cfg.detectMagic, "detectMagic" }, |
128 #endif | 128 #endif |
129 | 129 |
130 { CTYPE_BOOL, &xs_cfg.titleOverride, "titleOverride" }, | 130 { CTYPE_BOOL, &xs_cfg.titleOverride, "titleOverride" }, |
131 { CTYPE_STR, &xs_cfg.titleFormat, "titleFormat" }, | 131 { CTYPE_STR, &xs_cfg.titleFormat, "titleFormat" }, |
132 | 132 |
133 { CTYPE_BOOL, &xs_cfg.subAutoEnable, "subAutoEnable" }, | 133 { CTYPE_BOOL, &xs_cfg.subAutoEnable, "subAutoEnable" }, |
134 { CTYPE_BOOL, &xs_cfg.subAutoMinOnly, "subAutoMinOnly" }, | 134 { CTYPE_BOOL, &xs_cfg.subAutoMinOnly, "subAutoMinOnly" }, |
135 { CTYPE_INT, &xs_cfg.subAutoMinTime, "subAutoMinTime" }, | 135 { CTYPE_INT, &xs_cfg.subAutoMinTime, "subAutoMinTime" }, |
136 }; | 136 }; |
137 | 137 |
138 static const gint xs_cfgtable_max = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item)); | 138 static const gint xs_cfgtable_max = (sizeof(xs_cfgtable) / sizeof(t_xs_cfg_item)); |
139 | 139 |
140 | 140 |
141 static t_xs_wid_item xs_widtable[] = { | 141 static t_xs_wid_item xs_widtable[] = { |
142 { WTYPE_BGROUP, CTYPE_INT, "cfg_res_16bit", &xs_cfg.audioBitsPerSample, XS_RES_16BIT }, | 142 { WTYPE_BGROUP, CTYPE_INT, "cfg_res_16bit", &xs_cfg.audioBitsPerSample, XS_RES_16BIT }, |
143 { WTYPE_BGROUP, CTYPE_INT, "cfg_res_8bit", &xs_cfg.audioBitsPerSample, XS_RES_8BIT }, | 143 { WTYPE_BGROUP, CTYPE_INT, "cfg_res_8bit", &xs_cfg.audioBitsPerSample, XS_RES_8BIT }, |
144 { WTYPE_BGROUP, CTYPE_INT, "cfg_chn_mono", &xs_cfg.audioChannels, XS_CHN_MONO }, | 144 { WTYPE_BGROUP, CTYPE_INT, "cfg_chn_mono", &xs_cfg.audioChannels, XS_CHN_MONO }, |
145 { WTYPE_BGROUP, CTYPE_INT, "cfg_chn_stereo", &xs_cfg.audioChannels, XS_CHN_STEREO }, | 145 { WTYPE_BGROUP, CTYPE_INT, "cfg_chn_stereo", &xs_cfg.audioChannels, XS_CHN_STEREO }, |
146 { WTYPE_BGROUP, CTYPE_INT, "cfg_chn_autopan", &xs_cfg.audioChannels, XS_CHN_AUTOPAN }, | 146 { WTYPE_BGROUP, CTYPE_INT, "cfg_chn_autopan", &xs_cfg.audioChannels, XS_CHN_AUTOPAN }, |
147 { WTYPE_COMBO, CTYPE_INT, "cfg_samplerate", &xs_cfg.audioFrequency, XS_AUDIO_FREQ }, | 147 { WTYPE_COMBO, CTYPE_INT, "cfg_samplerate", &xs_cfg.audioFrequency, XS_AUDIO_FREQ }, |
148 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_oversample", &xs_cfg.oversampleEnable, 0 }, | 148 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_oversample", &xs_cfg.oversampleEnable, 0 }, |
149 { WTYPE_SPIN, CTYPE_INT, "cfg_oversample_factor",&xs_cfg.oversampleFactor, 0 }, | 149 { WTYPE_SPIN, CTYPE_INT, "cfg_oversample_factor",&xs_cfg.oversampleFactor, 0 }, |
150 | 150 |
151 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay1", &xs_cfg.playerEngine, XS_ENG_SIDPLAY1 }, | 151 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay1", &xs_cfg.playerEngine, XS_ENG_SIDPLAY1 }, |
152 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay2", &xs_cfg.playerEngine, XS_ENG_SIDPLAY2 }, | 152 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sidplay2", &xs_cfg.playerEngine, XS_ENG_SIDPLAY2 }, |
153 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_real", &xs_cfg.memoryMode, XS_MPU_REAL }, | 153 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_real", &xs_cfg.memoryMode, XS_MPU_REAL }, |
154 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_banksw", &xs_cfg.memoryMode, XS_MPU_BANK_SWITCHING }, | 154 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_banksw", &xs_cfg.memoryMode, XS_MPU_BANK_SWITCHING }, |
155 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_transrom", &xs_cfg.memoryMode, XS_MPU_TRANSPARENT_ROM }, | 155 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_transrom", &xs_cfg.memoryMode, XS_MPU_TRANSPARENT_ROM }, |
156 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_playsid", &xs_cfg.memoryMode, XS_MPU_PLAYSID_ENVIRONMENT }, | 156 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_mem_playsid", &xs_cfg.memoryMode, XS_MPU_PLAYSID_ENVIRONMENT }, |
157 | 157 |
158 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_mos8580", &xs_cfg.mos8580, 0 }, | 158 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_mos8580", &xs_cfg.mos8580, 0 }, |
159 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sid_force", &xs_cfg.forceModel, 0 }, | 159 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sid_force", &xs_cfg.forceModel, 0 }, |
160 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_ntsc", &xs_cfg.clockSpeed, XS_CLOCK_NTSC }, | 160 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_ntsc", &xs_cfg.clockSpeed, XS_CLOCK_NTSC }, |
161 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_pal", &xs_cfg.clockSpeed, XS_CLOCK_PAL }, | 161 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_clock_pal", &xs_cfg.clockSpeed, XS_CLOCK_PAL }, |
162 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_clock_force", &xs_cfg.forceSpeed, 0 }, | 162 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_clock_force", &xs_cfg.forceSpeed, 0 }, |
163 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sp2_opt", &xs_cfg.sid2OptLevel, 0 }, | 163 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_sp2_opt", &xs_cfg.sid2OptLevel, 0 }, |
164 | 164 |
165 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sp2_resid", &xs_cfg.sid2Builder, XS_BLD_RESID }, | 165 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sp2_resid", &xs_cfg.sid2Builder, XS_BLD_RESID }, |
166 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sp2_hardsid", &xs_cfg.sid2Builder, XS_BLD_HARDSID }, | 166 { WTYPE_BGROUP, CTYPE_INT, "cfg_emu_sp2_hardsid", &xs_cfg.sid2Builder, XS_BLD_HARDSID }, |
167 | 167 |
168 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_filters", &xs_cfg.emulateFilters, 0 }, | 168 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_emu_filters", &xs_cfg.emulateFilters, 0 }, |
169 { WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_fs", &xs_cfg.sid1FilterFs, 0 }, | 169 { WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_fs", &xs_cfg.sid1FilterFs, 0 }, |
170 { WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_fm", &xs_cfg.sid1FilterFm, 0 }, | 170 { WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_fm", &xs_cfg.sid1FilterFm, 0 }, |
171 { WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_ft", &xs_cfg.sid1FilterFt, 0 }, | 171 { WTYPE_SCALE, CTYPE_FLOAT, "cfg_sp1_filter_ft", &xs_cfg.sid1FilterFt, 0 }, |
172 | 172 |
173 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_maxtime_enable", &xs_cfg.playMaxTimeEnable, 0 }, | 173 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_maxtime_enable", &xs_cfg.playMaxTimeEnable, 0 }, |
174 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_maxtime_unknown", &xs_cfg.playMaxTimeUnknown, 0 }, | 174 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_maxtime_unknown", &xs_cfg.playMaxTimeUnknown, 0 }, |
175 { WTYPE_SPIN, CTYPE_INT, "cfg_maxtime", &xs_cfg.playMaxTime, 0 }, | 175 { WTYPE_SPIN, CTYPE_INT, "cfg_maxtime", &xs_cfg.playMaxTime, 0 }, |
176 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_mintime_enable", &xs_cfg.playMinTimeEnable, 0 }, | 176 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_mintime_enable", &xs_cfg.playMinTimeEnable, 0 }, |
177 { WTYPE_SPIN, CTYPE_INT, "cfg_mintime", &xs_cfg.playMinTime, 0 }, | 177 { WTYPE_SPIN, CTYPE_INT, "cfg_mintime", &xs_cfg.playMinTime, 0 }, |
178 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_sld_enable", &xs_cfg.songlenDBEnable, 0 }, | 178 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_sld_enable", &xs_cfg.songlenDBEnable, 0 }, |
179 { WTYPE_TEXT, CTYPE_STR, "cfg_sld_dbpath", &xs_cfg.songlenDBPath, 0 }, | 179 { WTYPE_TEXT, CTYPE_STR, "cfg_sld_dbpath", &xs_cfg.songlenDBPath, 0 }, |
180 | 180 |
181 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_stil_enable", &xs_cfg.stilDBEnable, 0 }, | 181 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_stil_enable", &xs_cfg.stilDBEnable, 0 }, |
182 { WTYPE_TEXT, CTYPE_STR, "cfg_stil_dbpath", &xs_cfg.stilDBPath, 0 }, | 182 { WTYPE_TEXT, CTYPE_STR, "cfg_stil_dbpath", &xs_cfg.stilDBPath, 0 }, |
183 { WTYPE_TEXT, CTYPE_STR, "cfg_hvsc_path", &xs_cfg.hvscPath, 0 }, | 183 { WTYPE_TEXT, CTYPE_STR, "cfg_hvsc_path", &xs_cfg.hvscPath, 0 }, |
184 | 184 |
185 #ifndef AUDACIOUS_PLUGIN | 185 #ifndef AUDACIOUS_PLUGIN |
186 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_none", &xs_cfg.subsongControl, XS_SSC_NONE }, | 186 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_none", &xs_cfg.subsongControl, XS_SSC_NONE }, |
187 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_seek", &xs_cfg.subsongControl, XS_SSC_SEEK }, | 187 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_seek", &xs_cfg.subsongControl, XS_SSC_SEEK }, |
188 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_popup", &xs_cfg.subsongControl, XS_SSC_POPUP }, | 188 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_popup", &xs_cfg.subsongControl, XS_SSC_POPUP }, |
189 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_patch", &xs_cfg.subsongControl, XS_SSC_PATCH }, | 189 { WTYPE_BGROUP, CTYPE_INT, "cfg_subctrl_patch", &xs_cfg.subsongControl, XS_SSC_PATCH }, |
190 | 190 |
191 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_detectmagic", &xs_cfg.detectMagic, 0 }, | 191 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_detectmagic", &xs_cfg.detectMagic, 0 }, |
192 #endif | 192 #endif |
193 | 193 |
194 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_ftitle_override", &xs_cfg.titleOverride, 0 }, | 194 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_ftitle_override", &xs_cfg.titleOverride, 0 }, |
195 { WTYPE_TEXT, CTYPE_STR, "cfg_ftitle_format", &xs_cfg.titleFormat, 0 }, | 195 { WTYPE_TEXT, CTYPE_STR, "cfg_ftitle_format", &xs_cfg.titleFormat, 0 }, |
196 | 196 |
197 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_subauto_enable", &xs_cfg.subAutoEnable, 0 }, | 197 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_subauto_enable", &xs_cfg.subAutoEnable, 0 }, |
198 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_subauto_min_only", &xs_cfg.subAutoMinOnly, 0 }, | 198 { WTYPE_BUTTON, CTYPE_BOOL, "cfg_subauto_min_only", &xs_cfg.subAutoMinOnly, 0 }, |
199 { WTYPE_SPIN, CTYPE_INT, "cfg_subauto_mintime", &xs_cfg.subAutoMinTime, 0 }, | 199 { WTYPE_SPIN, CTYPE_INT, "cfg_subauto_mintime", &xs_cfg.subAutoMinTime, 0 }, |
200 }; | 200 }; |
201 | 201 |
202 static const gint xs_widtable_max = (sizeof(xs_widtable) / sizeof(t_xs_wid_item)); | 202 static const gint xs_widtable_max = (sizeof(xs_widtable) / sizeof(t_xs_wid_item)); |
203 | 203 |
204 | 204 |
205 /* Reset/initialize the configuration | 205 /* Reset/initialize the configuration |
206 */ | 206 */ |
207 void xs_init_configuration(void) | 207 void xs_init_configuration(void) |
208 { | 208 { |
209 /* Lock configuration mutex */ | 209 /* Lock configuration mutex */ |
210 XSDEBUG("initializing configuration ...\n"); | 210 XSDEBUG("initializing configuration ...\n"); |
211 XS_MUTEX_LOCK(xs_cfg); | 211 XS_MUTEX_LOCK(xs_cfg); |
212 | 212 |
213 memset(&xs_cfg, 0, sizeof(xs_cfg)); | 213 memset(&xs_cfg, 0, sizeof(xs_cfg)); |
214 | 214 |
215 /* Initialize values with sensible defaults */ | 215 /* Initialize values with sensible defaults */ |
216 xs_cfg.audioBitsPerSample = XS_RES_16BIT; | 216 xs_cfg.audioBitsPerSample = XS_RES_16BIT; |
217 xs_cfg.audioChannels = XS_CHN_MONO; | 217 xs_cfg.audioChannels = XS_CHN_MONO; |
218 xs_cfg.audioFrequency = XS_AUDIO_FREQ; | 218 xs_cfg.audioFrequency = XS_AUDIO_FREQ; |
219 | 219 |
220 xs_cfg.mos8580 = FALSE; | 220 xs_cfg.mos8580 = FALSE; |
221 xs_cfg.forceModel = FALSE; | 221 xs_cfg.forceModel = FALSE; |
222 | 222 |
223 /* Filter values */ | 223 /* Filter values */ |
224 xs_cfg.emulateFilters = TRUE; | 224 xs_cfg.emulateFilters = TRUE; |
225 xs_cfg.sid1FilterFs = XS_SIDPLAY1_FS; | 225 xs_cfg.sid1FilterFs = XS_SIDPLAY1_FS; |
226 xs_cfg.sid1FilterFm = XS_SIDPLAY1_FM; | 226 xs_cfg.sid1FilterFm = XS_SIDPLAY1_FM; |
227 xs_cfg.sid1FilterFt = XS_SIDPLAY1_FT; | 227 xs_cfg.sid1FilterFt = XS_SIDPLAY1_FT; |
228 | 228 |
229 #ifdef HAVE_SIDPLAY2 | 229 #ifdef HAVE_SIDPLAY2 |
230 xs_cfg.playerEngine = XS_ENG_SIDPLAY2; | 230 xs_cfg.playerEngine = XS_ENG_SIDPLAY2; |
231 xs_cfg.memoryMode = XS_MPU_REAL; | 231 xs_cfg.memoryMode = XS_MPU_REAL; |
232 #else | 232 #else |
233 #ifdef HAVE_SIDPLAY1 | 233 #ifdef HAVE_SIDPLAY1 |
234 xs_cfg.playerEngine = XS_ENG_SIDPLAY1; | 234 xs_cfg.playerEngine = XS_ENG_SIDPLAY1; |
235 xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING; | 235 xs_cfg.memoryMode = XS_MPU_BANK_SWITCHING; |
236 #else | 236 #else |
237 #error This should not happen! No emulator engines configured in! | 237 #error This should not happen! No emulator engines configured in! |
238 #endif | 238 #endif |
239 #endif | 239 #endif |
240 | 240 |
241 xs_cfg.clockSpeed = XS_CLOCK_PAL; | 241 xs_cfg.clockSpeed = XS_CLOCK_PAL; |
242 xs_cfg.forceSpeed = FALSE; | 242 xs_cfg.forceSpeed = FALSE; |
243 | 243 |
244 xs_cfg.sid2OptLevel = 0; | 244 xs_cfg.sid2OptLevel = 0; |
245 xs_cfg.sid2NFilterPresets = 0; | 245 xs_cfg.sid2NFilterPresets = 0; |
246 | 246 |
247 #ifdef HAVE_RESID_BUILDER | 247 #ifdef HAVE_RESID_BUILDER |
248 xs_cfg.sid2Builder = XS_BLD_RESID; | 248 xs_cfg.sid2Builder = XS_BLD_RESID; |
249 #else | 249 #else |
250 #ifdef HAVE_HARDSID_BUILDER | 250 #ifdef HAVE_HARDSID_BUILDER |
251 xs_cfg.sid2Builder = XS_BLD_HARDSID; | 251 xs_cfg.sid2Builder = XS_BLD_HARDSID; |
252 #else | 252 #else |
253 #ifdef HAVE_SIDPLAY2 | 253 #ifdef HAVE_SIDPLAY2 |
254 #error This should not happen! No supported SIDPlay2 builders configured in! | 254 #error This should not happen! No supported SIDPlay2 builders configured in! |
255 #endif | 255 #endif |
256 #endif | 256 #endif |
257 #endif | 257 #endif |
258 | 258 |
259 xs_cfg.oversampleEnable = FALSE; | 259 xs_cfg.oversampleEnable = FALSE; |
260 xs_cfg.oversampleFactor = XS_MIN_OVERSAMPLE; | 260 xs_cfg.oversampleFactor = XS_MIN_OVERSAMPLE; |
261 | 261 |
262 xs_cfg.playMaxTimeEnable = FALSE; | 262 xs_cfg.playMaxTimeEnable = FALSE; |
263 xs_cfg.playMaxTimeUnknown = FALSE; | 263 xs_cfg.playMaxTimeUnknown = FALSE; |
264 xs_cfg.playMaxTime = 150; | 264 xs_cfg.playMaxTime = 150; |
265 | 265 |
266 xs_cfg.playMinTimeEnable = FALSE; | 266 xs_cfg.playMinTimeEnable = FALSE; |
267 xs_cfg.playMinTime = 15; | 267 xs_cfg.playMinTime = 15; |
268 | 268 |
269 xs_cfg.songlenDBEnable = FALSE; | 269 xs_cfg.songlenDBEnable = FALSE; |
270 xs_pstrcpy(&xs_cfg.songlenDBPath, "~/C64Music/Songlengths.txt"); | 270 xs_pstrcpy(&xs_cfg.songlenDBPath, "~/C64Music/Songlengths.txt"); |
271 | 271 |
272 xs_cfg.stilDBEnable = FALSE; | 272 xs_cfg.stilDBEnable = FALSE; |
273 xs_pstrcpy(&xs_cfg.stilDBPath, "~/C64Music/DOCUMENTS/STIL.txt"); | 273 xs_pstrcpy(&xs_cfg.stilDBPath, "~/C64Music/DOCUMENTS/STIL.txt"); |
274 xs_pstrcpy(&xs_cfg.hvscPath, "~/C64Music"); | 274 xs_pstrcpy(&xs_cfg.hvscPath, "~/C64Music"); |
275 | 275 |
276 #if defined(HAVE_SONG_POSITION) && !defined(AUDACIOUS_PLUGIN) | 276 #if defined(HAVE_SONG_POSITION) && !defined(AUDACIOUS_PLUGIN) |
277 xs_cfg.subsongControl = XS_SSC_PATCH; | 277 xs_cfg.subsongControl = XS_SSC_PATCH; |
278 #else | 278 #else |
279 xs_cfg.subsongControl = XS_SSC_POPUP; | 279 xs_cfg.subsongControl = XS_SSC_POPUP; |
280 #endif | 280 #endif |
281 xs_cfg.detectMagic = FALSE; | 281 xs_cfg.detectMagic = FALSE; |
282 | 282 |
283 #ifndef HAVE_XMMSEXTRA | 283 #ifndef HAVE_XMMSEXTRA |
284 xs_cfg.titleOverride = TRUE; | 284 xs_cfg.titleOverride = TRUE; |
285 #endif | 285 #endif |
286 | 286 |
287 #ifdef AUDACIOUS_PLUGIN | 287 #ifdef AUDACIOUS_PLUGIN |
288 xs_pstrcpy(&xs_cfg.titleFormat, "${artist} - ${title} (${copyright}) <${subsong-id}/${subsong-num}> [${sid-model}/${sid-speed}]"); | 288 xs_pstrcpy(&xs_cfg.titleFormat, "${artist} - ${title} (${copyright}) <${subsong-id}/${subsong-num}> [${sid-model}/${sid-speed}]"); |
289 #else | 289 #else |
290 xs_pstrcpy(&xs_cfg.titleFormat, "%p - %t (%c) <%n/%N> [%m/%C]"); | 290 xs_pstrcpy(&xs_cfg.titleFormat, "%p - %t (%c) <%n/%N> [%m/%C]"); |
291 #endif | 291 #endif |
292 | 292 |
293 xs_cfg.subAutoEnable = FALSE; | 293 xs_cfg.subAutoEnable = FALSE; |
294 xs_cfg.subAutoMinOnly = TRUE; | 294 xs_cfg.subAutoMinOnly = TRUE; |
295 xs_cfg.subAutoMinTime = 15; | 295 xs_cfg.subAutoMinTime = 15; |
296 | 296 |
297 | 297 |
298 /* Unlock the configuration */ | 298 /* Unlock the configuration */ |
299 XS_MUTEX_UNLOCK(xs_cfg); | 299 XS_MUTEX_UNLOCK(xs_cfg); |
300 } | 300 } |
301 | 301 |
302 | 302 |
303 /* Filter configuration handling | 303 /* Filter configuration handling |
304 */ | 304 */ |
305 #define XS_FITEM (4 * 2) | 305 #define XS_FITEM (4 * 2) |
306 | 306 |
307 static gboolean xs_filter_load_into(XS_CONFIG_FILE *cfg, gint nFilter, t_xs_sid2_filter *pResult) | 307 static gboolean xs_filter_load_into(XS_CONFIG_FILE *cfg, gint nFilter, t_xs_sid2_filter *pResult) |
308 { | 308 { |
309 gchar tmpKey[64], *tmpStr; | 309 gchar tmpKey[64], *tmpStr; |
310 gint i, j; | 310 gint i, j; |
311 | 311 |
312 /* Get fields from config */ | 312 /* Get fields from config */ |
313 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dNPoints", nFilter); | 313 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dNPoints", nFilter); |
314 if (!XS_CFG_GET_INT(cfg, XS_CONFIG_IDENT, tmpKey, &(pResult->npoints))) | 314 if (!XS_CFG_GET_INT(cfg, XS_CONFIG_IDENT, tmpKey, &(pResult->npoints))) |
315 return FALSE; | 315 return FALSE; |
316 | 316 |
317 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dName", nFilter); | 317 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dName", nFilter); |
318 if (!XS_CFG_GET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, &tmpStr)) | 318 if (!XS_CFG_GET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, &tmpStr)) |
319 return FALSE; | 319 return FALSE; |
320 | 320 |
321 pResult->name = g_strdup(tmpStr); | 321 pResult->name = g_strdup(tmpStr); |
322 if (pResult->name == NULL) { | 322 if (pResult->name == NULL) { |
323 g_free(pResult); | 323 g_free(pResult); |
324 return FALSE; | 324 return FALSE; |
325 } | 325 } |
326 | 326 |
327 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dPoints", nFilter); | 327 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dPoints", nFilter); |
328 if (!XS_CFG_GET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, &tmpStr)) | 328 if (!XS_CFG_GET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, &tmpStr)) |
329 return FALSE; | 329 return FALSE; |
330 | 330 |
331 for (i = 0, j = 0; i < pResult->npoints; i++, j += XS_FITEM) { | 331 for (i = 0, j = 0; i < pResult->npoints; i++, j += XS_FITEM) { |
332 if (sscanf(&tmpStr[j], "%4x%4x", | 332 if (sscanf(&tmpStr[j], "%4x%4x", |
333 &(pResult->points[i].x), | 333 &(pResult->points[i].x), |
334 &(pResult->points[i].y)) != 2) | 334 &(pResult->points[i].y)) != 2) |
335 return FALSE; | 335 return FALSE; |
336 } | 336 } |
337 | 337 |
338 return TRUE; | 338 return TRUE; |
339 } | 339 } |
340 | 340 |
341 | 341 |
342 static t_xs_sid2_filter * xs_filter_load(XS_CONFIG_FILE *cfg, gint nFilter) | 342 static t_xs_sid2_filter * xs_filter_load(XS_CONFIG_FILE *cfg, gint nFilter) |
343 { | 343 { |
344 t_xs_sid2_filter *pResult; | 344 t_xs_sid2_filter *pResult; |
345 | 345 |
346 /* Allocate filter struct */ | 346 /* Allocate filter struct */ |
347 if ((pResult = g_malloc0(sizeof(t_xs_sid2_filter))) == NULL) | 347 if ((pResult = g_malloc0(sizeof(t_xs_sid2_filter))) == NULL) |
348 return NULL; | 348 return NULL; |
349 | 349 |
350 if (!xs_filter_load_into(cfg, nFilter, pResult)) { | 350 if (!xs_filter_load_into(cfg, nFilter, pResult)) { |
351 g_free(pResult); | 351 g_free(pResult); |
352 return NULL; | 352 return NULL; |
353 } else | 353 } else |
354 return pResult; | 354 return pResult; |
355 } | 355 } |
356 | 356 |
357 #if 0 | 357 #if 0 |
358 static gboolean xs_filter_save(XS_CONFIG_FILE *cfg, t_xs_sid2_filter *pFilter, gint nFilter) | 358 static gboolean xs_filter_save(XS_CONFIG_FILE *cfg, t_xs_sid2_filter *pFilter, gint nFilter) |
359 { | 359 { |
360 gchar *tmpValue, tmpKey[64]; | 360 gchar *tmpValue, tmpKey[64]; |
361 gint i, j; | 361 gint i, j; |
362 | 362 |
363 /* Allocate memory for value string */ | 363 /* Allocate memory for value string */ |
364 tmpValue = g_malloc(sizeof(gchar) * XS_FITEM * (pFilter->npoints + 1)); | 364 tmpValue = g_malloc(sizeof(gchar) * XS_FITEM * (pFilter->npoints + 1)); |
365 if (tmpValue == NULL) | 365 if (tmpValue == NULL) |
366 return FALSE; | 366 return FALSE; |
367 | 367 |
368 /* Make value string */ | 368 /* Make value string */ |
369 for (i = 0, j = 0; i < pFilter->npoints; i++, j += XS_FITEM) { | 369 for (i = 0, j = 0; i < pFilter->npoints; i++, j += XS_FITEM) { |
370 g_snprintf(&tmpValue[j], XS_FITEM+1, "%04x%04x", | 370 g_snprintf(&tmpValue[j], XS_FITEM+1, "%04x%04x", |
371 pFilter->points[i].x, | 371 pFilter->points[i].x, |
372 pFilter->points[i].y); | 372 pFilter->points[i].y); |
373 } | 373 } |
374 | 374 |
375 /* Write into the configuration */ | 375 /* Write into the configuration */ |
376 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dName", nFilter); | 376 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dName", nFilter); |
377 XS_CFG_SET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, pFilter->name); | 377 XS_CFG_SET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, pFilter->name); |
378 | 378 |
379 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dNPoints", nFilter); | 379 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dNPoints", nFilter); |
380 XS_CFG_SET_INT(cfg, XS_CONFIG_IDENT, tmpKey, pFilter->npoints); | 380 XS_CFG_SET_INT(cfg, XS_CONFIG_IDENT, tmpKey, pFilter->npoints); |
381 | 381 |
382 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dPoints", nFilter); | 382 g_snprintf(tmpKey, sizeof(tmpKey), "filter%dPoints", nFilter); |
383 XS_CFG_SET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, tmpValue); | 383 XS_CFG_SET_STRING(cfg, XS_CONFIG_IDENT, tmpKey, tmpValue); |
384 | 384 |
385 g_free(tmpValue); | 385 g_free(tmpValue); |
386 return TRUE; | 386 return TRUE; |
387 } | 387 } |
388 #endif | 388 #endif |
389 | 389 |
390 /* Filter exporting and importing. These functions export/import | 390 /* Filter exporting and importing. These functions export/import |
391 * filter settings to/from SIDPlay2 INI-type files. | 391 * filter settings to/from SIDPlay2 INI-type files. |
392 */ | 392 */ |
393 static gboolean xs_fgetitem(gchar *inLine, size_t *linePos, gchar sep, gchar *tmpStr, size_t tmpMax) | 393 static gboolean xs_fgetitem(gchar *inLine, size_t *linePos, gchar sep, gchar *tmpStr, size_t tmpMax) |
394 { | 394 { |
395 size_t i; | 395 size_t i; |
396 for (i = 0; i < tmpMax && inLine[*linePos] && | 396 for (i = 0; i < tmpMax && inLine[*linePos] && |
397 !isspace(inLine[*linePos]) && | 397 !isspace(inLine[*linePos]) && |
398 inLine[*linePos] != sep; i++, (*linePos)++) | 398 inLine[*linePos] != sep; i++, (*linePos)++) |
399 tmpStr[i] = inLine[*linePos]; | 399 tmpStr[i] = inLine[*linePos]; |
400 tmpStr[i] = 0; | 400 tmpStr[i] = 0; |
401 xs_findnext(inLine, linePos); | 401 xs_findnext(inLine, linePos); |
402 return (inLine[*linePos] == sep); | 402 return (inLine[*linePos] == sep); |
403 } | 403 } |
404 | 404 |
405 static gboolean xs_filters_import(const gchar *pcFilename, t_xs_sid2_filter **pFilters, gint *nFilters) | 405 static gboolean xs_filters_import(const gchar *pcFilename, t_xs_sid2_filter **pFilters, gint *nFilters) |
406 { | 406 { |
407 FILE *inFile; | 407 FILE *inFile; |
408 gchar inLine[XS_BUF_SIZE], tmpStr[XS_BUF_SIZE]; | 408 gchar inLine[XS_BUF_SIZE], tmpStr[XS_BUF_SIZE]; |
409 gchar *sectName = NULL; | 409 gchar *sectName = NULL; |
410 gboolean sectBegin; | 410 gboolean sectBegin; |
411 size_t lineNum, i; | 411 size_t lineNum, i; |
412 t_xs_sid2_filter *tmpFilter; | 412 t_xs_sid2_filter *tmpFilter; |
413 | 413 |
414 fprintf(stderr, "xs_filters_import(%s)\n", pcFilename); | 414 fprintf(stderr, "xs_filters_import(%s)\n", pcFilename); |
415 | 415 |
416 if ((inFile = fopen(pcFilename, "ra")) == NULL) | 416 if ((inFile = fopen(pcFilename, "ra")) == NULL) |
417 return FALSE; | 417 return FALSE; |
418 | 418 |
419 fprintf(stderr, "importing...\n"); | 419 fprintf(stderr, "importing...\n"); |
420 | 420 |
421 sectBegin = FALSE; | 421 sectBegin = FALSE; |
422 lineNum = 0; | 422 lineNum = 0; |
423 while (fgets(inLine, XS_BUF_SIZE, inFile) != NULL) { | 423 while (fgets(inLine, XS_BUF_SIZE, inFile) != NULL) { |
424 size_t linePos = 0; | 424 size_t linePos = 0; |
425 lineNum++; | 425 lineNum++; |
426 | 426 |
427 xs_findnext(inLine, &linePos); | 427 xs_findnext(inLine, &linePos); |
428 if (isalpha(inLine[linePos]) && sectBegin) { | 428 if (isalpha(inLine[linePos]) && sectBegin) { |
429 /* A new key/value pair */ | 429 /* A new key/value pair */ |
430 if (!xs_fgetitem(inLine, &linePos, '=', tmpStr, XS_BUF_SIZE)) { | 430 if (!xs_fgetitem(inLine, &linePos, '=', tmpStr, XS_BUF_SIZE)) { |
431 fprintf(stderr, "invalid line: %s [expect =']'", inLine); | 431 fprintf(stderr, "invalid line: %s [expect =']'", inLine); |
432 } else { | 432 } else { |
433 linePos++; | 433 linePos++; |
434 xs_findnext(inLine, &linePos); | 434 xs_findnext(inLine, &linePos); |
435 if (!strncmp(tmpStr, "points", 6)) { | 435 if (!strncmp(tmpStr, "points", 6)) { |
436 fprintf(stderr, "points=%s\n", &inLine[linePos]); | 436 fprintf(stderr, "points=%s\n", &inLine[linePos]); |
437 } else if (!strncmp(tmpStr, "point", 5)) { | 437 } else if (!strncmp(tmpStr, "point", 5)) { |
438 } else if (!strncmp(tmpStr, "type", 4)) { | 438 } else if (!strncmp(tmpStr, "type", 4)) { |
439 } else { | 439 } else { |
440 fprintf(stderr, "warning: ukn def: %s @ %s\n", | 440 fprintf(stderr, "warning: ukn def: %s @ %s\n", |
441 tmpStr, sectName); | 441 tmpStr, sectName); |
442 } | 442 } |
443 } | 443 } |
444 } else if (inLine[linePos] == '[') { | 444 } else if (inLine[linePos] == '[') { |
445 /* Check for existing section */ | 445 /* Check for existing section */ |
446 if (sectBegin) { | 446 if (sectBegin) { |
447 /* Submit definition */ | 447 /* Submit definition */ |
448 fprintf(stderr, "filter ends: %s\n", sectName); | 448 fprintf(stderr, "filter ends: %s\n", sectName); |
449 if ((tmpFilter = g_malloc0(sizeof(t_xs_sid2_filter))) == NULL) { | 449 if ((tmpFilter = g_malloc0(sizeof(t_xs_sid2_filter))) == NULL) { |
450 fprintf(stderr, "could not allocate ..\n"); | 450 fprintf(stderr, "could not allocate ..\n"); |
451 } else { | 451 } else { |
452 | 452 |
453 } | 453 } |
454 g_free(sectName); | 454 g_free(sectName); |
455 } | 455 } |
456 | 456 |
457 /* New filter(?) section starts */ | 457 /* New filter(?) section starts */ |
458 linePos++; | 458 linePos++; |
459 for (i = 0; i < XS_BUF_SIZE && inLine[linePos] && inLine[linePos] != ']'; i++, linePos++) | 459 for (i = 0; i < XS_BUF_SIZE && inLine[linePos] && inLine[linePos] != ']'; i++, linePos++) |
460 tmpStr[i] = inLine[linePos]; | 460 tmpStr[i] = inLine[linePos]; |
461 tmpStr[i] = 0; | 461 tmpStr[i] = 0; |
462 | 462 |
463 if (inLine[linePos] != ']') { | 463 if (inLine[linePos] != ']') { |
464 fprintf(stderr, "invalid! expected ']': %s\n", inLine); | 464 fprintf(stderr, "invalid! expected ']': %s\n", inLine); |
465 } else { | 465 } else { |
466 sectName = strdup(tmpStr); | 466 sectName = strdup(tmpStr); |
467 fprintf(stderr, "filter: %s\n", sectName); | 467 fprintf(stderr, "filter: %s\n", sectName); |
468 sectBegin = TRUE; | 468 sectBegin = TRUE; |
469 } | 469 } |
470 } else if ((inLine[linePos] != ';') && (inLine[linePos] != 0)) { | 470 } else if ((inLine[linePos] != ';') && (inLine[linePos] != 0)) { |
471 /* Syntax error */ | 471 /* Syntax error */ |
472 fprintf(stderr, "syntax error: %s\n", inLine); | 472 fprintf(stderr, "syntax error: %s\n", inLine); |
473 } | 473 } |
474 } | 474 } |
475 | 475 |
476 fclose(inFile); | 476 fclose(inFile); |
477 return TRUE; | 477 return TRUE; |
478 } | 478 } |
479 | 479 |
480 | 480 |
481 static gboolean xs_filters_export(const gchar *pcFilename, t_xs_sid2_filter **pFilters, gint nFilters) | 481 static gboolean xs_filters_export(const gchar *pcFilename, t_xs_sid2_filter **pFilters, gint nFilters) |
482 { | 482 { |
483 FILE *outFile; | 483 FILE *outFile; |
484 t_xs_sid2_filter *f; | 484 t_xs_sid2_filter *f; |
485 gint n; | 485 gint n; |
486 | 486 |
487 /* Open/create the file */ | 487 /* Open/create the file */ |
488 if ((outFile = fopen(pcFilename, "wa")) == NULL) | 488 if ((outFile = fopen(pcFilename, "wa")) == NULL) |
489 return FALSE; | 489 return FALSE; |
490 | 490 |
491 /* Header */ | 491 /* Header */ |
492 fprintf(outFile, | 492 fprintf(outFile, |
493 "; SIDPlay2 compatible filter definition file\n" | 493 "; SIDPlay2 compatible filter definition file\n" |
494 "; Exported by " PACKAGE_STRING "\n\n"); | 494 "; Exported by " PACKAGE_STRING "\n\n"); |
495 | 495 |
496 /* Write each filter spec in "INI"-style format */ | 496 /* Write each filter spec in "INI"-style format */ |
497 for (n = 0; n < nFilters; n++) { | 497 for (n = 0; n < nFilters; n++) { |
498 gint i; | 498 gint i; |
499 f = pFilters[n]; | 499 f = pFilters[n]; |
500 | 500 |
501 fprintf(outFile, | 501 fprintf(outFile, |
502 "[%s]\n" | 502 "[%s]\n" |
503 "type=1\n" | 503 "type=1\n" |
504 "points=%d\n", | 504 "points=%d\n", |
505 f->name, f->npoints); | 505 f->name, f->npoints); |
506 | 506 |
507 for (i = 0; i < f->npoints; i++) { | 507 for (i = 0; i < f->npoints; i++) { |
508 fprintf(outFile, | 508 fprintf(outFile, |
509 "point%d=%d,%d\n", | 509 "point%d=%d,%d\n", |
510 i + 1, | 510 i + 1, |
511 f->points[i].x, | 511 f->points[i].x, |
512 f->points[i].y); | 512 f->points[i].y); |
513 } | 513 } |
514 | 514 |
515 fprintf(outFile, "\n"); | 515 fprintf(outFile, "\n"); |
516 f++; | 516 f++; |
517 } | 517 } |
518 | 518 |
519 fclose(outFile); | 519 fclose(outFile); |
520 return TRUE; | 520 return TRUE; |
521 } | 521 } |
522 | 522 |
523 /* Get the configuration (from file or default) | 523 /* Get the configuration (from file or default) |
524 */ | 524 */ |
525 void xs_read_configuration(void) | 525 void xs_read_configuration(void) |
526 { | 526 { |
527 XS_CONFIG_FILE *cfg; | 527 XS_CONFIG_FILE *cfg; |
528 gint i; | 528 gint i; |
529 gchar *tmpStr; | 529 gchar *tmpStr; |
530 | 530 |
531 /* Try to open the XMMS configuration file */ | 531 /* Try to open the XMMS configuration file */ |
532 XS_MUTEX_LOCK(xs_cfg); | 532 XS_MUTEX_LOCK(xs_cfg); |
533 XSDEBUG("loading from config-file ...\n"); | 533 XSDEBUG("loading from config-file ...\n"); |
534 | 534 |
535 cfg = XS_CONFIG_OPEN(); | 535 cfg = XS_CONFIG_OPEN(); |
536 | 536 |
537 if (cfg == NULL) { | 537 if (cfg == NULL) { |
538 XSDEBUG("Could not open configuration, trying to write defaults...\n"); | 538 XSDEBUG("Could not open configuration, trying to write defaults...\n"); |
539 xs_write_configuration(); | 539 xs_write_configuration(); |
540 return; | 540 return; |
541 } | 541 } |
542 | 542 |
543 /* Read the new settings from XMMS configuration file */ | 543 /* Read the new settings from XMMS configuration file */ |
544 for (i = 0; i < xs_cfgtable_max; i++) { | 544 for (i = 0; i < xs_cfgtable_max; i++) { |
545 switch (xs_cfgtable[i].itemType) { | 545 switch (xs_cfgtable[i].itemType) { |
546 case CTYPE_INT: | 546 case CTYPE_INT: |
547 XS_CFG_GET_INT(cfg, XS_CONFIG_IDENT, | 547 XS_CFG_GET_INT(cfg, XS_CONFIG_IDENT, |
548 xs_cfgtable[i].itemName, | 548 xs_cfgtable[i].itemName, |
549 (gint *) xs_cfgtable[i].itemData); | 549 (gint *) xs_cfgtable[i].itemData); |
550 break; | 550 break; |
551 | 551 |
552 case CTYPE_BOOL: | 552 case CTYPE_BOOL: |
553 XS_CFG_GET_BOOL(cfg, XS_CONFIG_IDENT, | 553 XS_CFG_GET_BOOL(cfg, XS_CONFIG_IDENT, |
554 xs_cfgtable[i].itemName, | 554 xs_cfgtable[i].itemName, |
555 (gboolean *) xs_cfgtable[i].itemData); | 555 (gboolean *) xs_cfgtable[i].itemData); |
556 break; | 556 break; |
557 | 557 |
558 case CTYPE_FLOAT: | 558 case CTYPE_FLOAT: |
559 XS_CFG_GET_FLOAT(cfg, XS_CONFIG_IDENT, | 559 XS_CFG_GET_FLOAT(cfg, XS_CONFIG_IDENT, |
560 xs_cfgtable[i].itemName, | 560 xs_cfgtable[i].itemName, |
561 (gfloat *) xs_cfgtable[i].itemData); | 561 (gfloat *) xs_cfgtable[i].itemData); |
562 break; | 562 break; |
563 | 563 |
564 case CTYPE_STR: | 564 case CTYPE_STR: |
565 if (XS_CFG_GET_STRING(cfg, XS_CONFIG_IDENT, | 565 if (XS_CFG_GET_STRING(cfg, XS_CONFIG_IDENT, |
566 xs_cfgtable[i].itemName, (gchar **) &tmpStr)) { | 566 xs_cfgtable[i].itemName, (gchar **) &tmpStr)) { |
567 xs_pstrcpy((gchar **) xs_cfgtable[i].itemData, tmpStr); | 567 xs_pstrcpy((gchar **) xs_cfgtable[i].itemData, tmpStr); |
568 g_free(tmpStr); | 568 g_free(tmpStr); |
569 } | 569 } |
570 break; | 570 break; |
571 } | 571 } |
572 } | 572 } |
573 | 573 |
574 /* Filters and presets are a special case */ | 574 /* Filters and presets are a special case */ |
575 xs_filter_load_into(cfg, 0, &xs_cfg.sid2Filter); | 575 xs_filter_load_into(cfg, 0, &xs_cfg.sid2Filter); |
576 | 576 |
577 if (xs_cfg.sid2NFilterPresets > 0) { | 577 if (xs_cfg.sid2NFilterPresets > 0) { |
578 xs_cfg.sid2FilterPresets = g_malloc0(xs_cfg.sid2NFilterPresets * sizeof(t_xs_sid2_filter *)); | 578 xs_cfg.sid2FilterPresets = g_malloc0(xs_cfg.sid2NFilterPresets * sizeof(t_xs_sid2_filter *)); |
579 if (!xs_cfg.sid2FilterPresets) { | 579 if (!xs_cfg.sid2FilterPresets) { |
580 xs_error(_("Allocation of sid2FilterPresets structure failed!\n")); | 580 xs_error(_("Allocation of sid2FilterPresets structure failed!\n")); |
581 } else { | 581 } else { |
582 for (i = 0; i < xs_cfg.sid2NFilterPresets; i++) { | 582 for (i = 0; i < xs_cfg.sid2NFilterPresets; i++) { |
583 xs_cfg.sid2FilterPresets[i] = xs_filter_load(cfg, i); | 583 xs_cfg.sid2FilterPresets[i] = xs_filter_load(cfg, i); |
584 } | 584 } |
585 } | 585 } |
586 } | 586 } |
587 | 587 |
588 XS_CONFIG_FREE(cfg); | 588 XS_CONFIG_FREE(cfg); |
589 | 589 |
590 XS_MUTEX_UNLOCK(xs_cfg); | 590 XS_MUTEX_UNLOCK(xs_cfg); |
591 XSDEBUG("OK\n"); | 591 XSDEBUG("OK\n"); |
592 } | 592 } |
593 | 593 |
594 | 594 |
595 /* Write the current configuration | 595 /* Write the current configuration |
596 */ | 596 */ |
597 gint xs_write_configuration(void) | 597 gint xs_write_configuration(void) |
598 { | 598 { |
599 XS_CONFIG_FILE *cfg; | 599 XS_CONFIG_FILE *cfg; |
600 gint i; | 600 gint i; |
601 | 601 |
602 XSDEBUG("writing configuration ...\n"); | 602 XSDEBUG("writing configuration ...\n"); |
603 XS_MUTEX_LOCK(xs_cfg); | 603 XS_MUTEX_LOCK(xs_cfg); |
604 | 604 |
605 /* Try to open the XMMS configuration file */ | 605 /* Try to open the XMMS configuration file */ |
606 cfg = XS_CONFIG_OPEN(); | 606 cfg = XS_CONFIG_OPEN(); |
607 | 607 |
608 #ifndef AUDACIOUS_PLUGIN | 608 #ifndef AUDACIOUS_PLUGIN |
609 if (!cfg) cfg = xmms_cfg_new(); | 609 if (!cfg) cfg = xmms_cfg_new(); |
610 if (!cfg) return -1; | 610 if (!cfg) return -1; |
611 #endif | 611 #endif |
612 | 612 |
613 /* Write the new settings to XMMS configuration file */ | 613 /* Write the new settings to XMMS configuration file */ |
614 for (i = 0; i < xs_cfgtable_max; i++) { | 614 for (i = 0; i < xs_cfgtable_max; i++) { |
615 switch (xs_cfgtable[i].itemType) { | 615 switch (xs_cfgtable[i].itemType) { |
616 case CTYPE_INT: | 616 case CTYPE_INT: |
617 XS_CFG_SET_INT(cfg, XS_CONFIG_IDENT, | 617 XS_CFG_SET_INT(cfg, XS_CONFIG_IDENT, |
618 xs_cfgtable[i].itemName, | 618 xs_cfgtable[i].itemName, |
619 *(gint *) xs_cfgtable[i].itemData); | 619 *(gint *) xs_cfgtable[i].itemData); |
620 break; | 620 break; |
621 | 621 |
622 case CTYPE_BOOL: | 622 case CTYPE_BOOL: |
623 XS_CFG_SET_BOOL(cfg, XS_CONFIG_IDENT, | 623 XS_CFG_SET_BOOL(cfg, XS_CONFIG_IDENT, |
624 xs_cfgtable[i].itemName, | 624 xs_cfgtable[i].itemName, |
625 *(gboolean *) xs_cfgtable[i].itemData); | 625 *(gboolean *) xs_cfgtable[i].itemData); |
626 break; | 626 break; |
627 | 627 |
628 case CTYPE_FLOAT: | 628 case CTYPE_FLOAT: |
629 XS_CFG_SET_FLOAT(cfg, XS_CONFIG_IDENT, | 629 XS_CFG_SET_FLOAT(cfg, XS_CONFIG_IDENT, |
630 xs_cfgtable[i].itemName, | 630 xs_cfgtable[i].itemName, |
631 *(gfloat *) xs_cfgtable[i].itemData); | 631 *(gfloat *) xs_cfgtable[i].itemData); |
632 break; | 632 break; |
633 | 633 |
634 case CTYPE_STR: | 634 case CTYPE_STR: |
635 XS_CFG_SET_STRING(cfg, XS_CONFIG_IDENT, | 635 XS_CFG_SET_STRING(cfg, XS_CONFIG_IDENT, |
636 xs_cfgtable[i].itemName, | 636 xs_cfgtable[i].itemName, |
637 *(gchar **) xs_cfgtable[i].itemData); | 637 *(gchar **) xs_cfgtable[i].itemData); |
638 break; | 638 break; |
639 } | 639 } |
640 } | 640 } |
641 | 641 |
642 | 642 |
643 #ifndef AUDACIOUS_PLUGIN | 643 #ifndef AUDACIOUS_PLUGIN |
644 xmms_cfg_write_default_file(cfg); | 644 xmms_cfg_write_default_file(cfg); |
645 #endif | 645 #endif |
646 XS_CONFIG_FREE(cfg); | 646 XS_CONFIG_FREE(cfg); |
647 | 647 |
648 XS_MUTEX_UNLOCK(xs_cfg); | 648 XS_MUTEX_UNLOCK(xs_cfg); |
649 | 649 |
650 return 0; | 650 return 0; |
651 } | 651 } |
652 | 652 |
653 | 653 |
654 /* Configuration panel was canceled | 654 /* Configuration panel was canceled |
655 */ | 655 */ |
658 | 658 |
659 /* Configuration was accepted, save the settings | 659 /* Configuration was accepted, save the settings |
660 */ | 660 */ |
661 void xs_cfg_ok(void) | 661 void xs_cfg_ok(void) |
662 { | 662 { |
663 gint i; | 663 gint i; |
664 gfloat tmpValue; | 664 gfloat tmpValue; |
665 gint tmpInt; | 665 gint tmpInt; |
666 const gchar *tmpStr; | 666 const gchar *tmpStr; |
667 | 667 |
668 /* Get lock on configuration */ | 668 /* Get lock on configuration */ |
669 XS_MUTEX_LOCK(xs_cfg); | 669 XS_MUTEX_LOCK(xs_cfg); |
670 | 670 |
671 XSDEBUG("get data from widgets to config...\n"); | 671 XSDEBUG("get data from widgets to config...\n"); |
672 | 672 |
673 for (i = 0; i < xs_widtable_max; i++) { | 673 for (i = 0; i < xs_widtable_max; i++) { |
674 switch (xs_widtable[i].widType) { | 674 switch (xs_widtable[i].widType) { |
675 case WTYPE_BGROUP: | 675 case WTYPE_BGROUP: |
676 /* Check if toggle-button is active */ | 676 /* Check if toggle-button is active */ |
677 if (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active) { | 677 if (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active) { |
678 /* Yes, set the constant value */ | 678 /* Yes, set the constant value */ |
679 *((gint *) xs_widtable[i].itemData) = xs_widtable[i].itemSet; | 679 *((gint *) xs_widtable[i].itemData) = xs_widtable[i].itemSet; |
680 } | 680 } |
681 break; | 681 break; |
682 | 682 |
683 case WTYPE_COMBO: | 683 case WTYPE_COMBO: |
684 /* Get text from text-widget */ | 684 /* Get text from text-widget */ |
685 tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName))); | 685 tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName))); |
686 if (sscanf(tmpStr, "%d", &tmpInt) != 1) | 686 if (sscanf(tmpStr, "%d", &tmpInt) != 1) |
687 tmpInt = xs_widtable[i].itemSet; | 687 tmpInt = xs_widtable[i].itemSet; |
688 | 688 |
689 *((gint *) xs_widtable[i].itemData) = tmpInt; | 689 *((gint *) xs_widtable[i].itemData) = tmpInt; |
690 break; | 690 break; |
691 | 691 |
692 case WTYPE_SPIN: | 692 case WTYPE_SPIN: |
693 case WTYPE_SCALE: | 693 case WTYPE_SCALE: |
694 /* Get the value */ | 694 /* Get the value */ |
695 switch (xs_widtable[i].widType) { | 695 switch (xs_widtable[i].widType) { |
696 case WTYPE_SPIN: | 696 case WTYPE_SPIN: |
697 tmpValue = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName)))->value; | 697 tmpValue = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName)))->value; |
698 break; | 698 break; |
699 | 699 |
700 case WTYPE_SCALE: | 700 case WTYPE_SCALE: |
701 tmpValue = gtk_range_get_adjustment(GTK_RANGE(LUW(xs_widtable[i].widName)))->value; | 701 tmpValue = gtk_range_get_adjustment(GTK_RANGE(LUW(xs_widtable[i].widName)))->value; |
702 break; | 702 break; |
703 | 703 |
704 default: | 704 default: |
705 tmpValue = -1; | 705 tmpValue = -1; |
706 break; | 706 break; |
707 } | 707 } |
708 | 708 |
709 /* Set the value */ | 709 /* Set the value */ |
710 switch (xs_widtable[i].itemType) { | 710 switch (xs_widtable[i].itemType) { |
711 case CTYPE_INT: | 711 case CTYPE_INT: |
712 *((gint *) xs_widtable[i].itemData) = (gint) tmpValue; | 712 *((gint *) xs_widtable[i].itemData) = (gint) tmpValue; |
713 break; | 713 break; |
714 | 714 |
715 case CTYPE_FLOAT: | 715 case CTYPE_FLOAT: |
716 *((gfloat *) xs_widtable[i].itemData) = tmpValue; | 716 *((gfloat *) xs_widtable[i].itemData) = tmpValue; |
717 break; | 717 break; |
718 } | 718 } |
719 break; | 719 break; |
720 | 720 |
721 case WTYPE_BUTTON: | 721 case WTYPE_BUTTON: |
722 /* Check if toggle-button is active */ | 722 /* Check if toggle-button is active */ |
723 *((gboolean *) xs_widtable[i].itemData) = | 723 *((gboolean *) xs_widtable[i].itemData) = |
724 (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active); | 724 (GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName))->active); |
725 break; | 725 break; |
726 | 726 |
727 case WTYPE_TEXT: | 727 case WTYPE_TEXT: |
728 /* Get text from text-widget */ | 728 /* Get text from text-widget */ |
729 xs_pstrcpy((gchar **) xs_widtable[i].itemData, | 729 xs_pstrcpy((gchar **) xs_widtable[i].itemData, |
730 gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName)))); | 730 gtk_entry_get_text(GTK_ENTRY(LUW(xs_widtable[i].widName)))); |
731 break; | 731 break; |
732 } | 732 } |
733 } | 733 } |
734 | 734 |
735 /* Get filter settings */ | 735 /* Get filter settings */ |
736 /* | 736 /* |
737 if (!xs_curve_get_points(XS_CURVE(LUW("")), &xs_cfg.sid2Filter.points, &xs_cfg.sid2Filter.npoints)) { | 737 if (!xs_curve_get_points(XS_CURVE(LUW("")), &xs_cfg.sid2Filter.points, &xs_cfg.sid2Filter.npoints)) { |
738 xs_error(_("Warning: Could not get filter curve widget points!\n")); | 738 xs_error(_("Warning: Could not get filter curve widget points!\n")); |
739 } | 739 } |
740 */ | 740 */ |
741 | 741 |
742 /* Release lock */ | 742 /* Release lock */ |
743 XS_MUTEX_UNLOCK(xs_cfg); | 743 XS_MUTEX_UNLOCK(xs_cfg); |
744 | 744 |
745 /* Close window */ | 745 /* Close window */ |
746 gtk_widget_destroy(xs_configwin); | 746 gtk_widget_destroy(xs_configwin); |
747 xs_configwin = NULL; | 747 xs_configwin = NULL; |
748 | 748 |
749 /* Write settings */ | 749 /* Write settings */ |
750 xs_write_configuration(); | 750 xs_write_configuration(); |
751 | 751 |
752 /* Re-initialize */ | 752 /* Re-initialize */ |
753 xs_reinit(); | 753 xs_reinit(); |
754 } | 754 } |
755 | 755 |
756 | 756 |
757 /* Confirmation window | 757 /* Confirmation window |
758 */ | 758 */ |
759 gboolean xs_confirmwin_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) | 759 gboolean xs_confirmwin_delete(GtkWidget *widget, GdkEvent *event, gpointer user_data) |
760 { | 760 { |
761 (void) widget; | 761 (void) widget; |
762 (void) event; | 762 (void) event; |
763 (void) user_data; | 763 (void) user_data; |
764 | 764 |
765 return FALSE; | 765 return FALSE; |
766 } | 766 } |
767 | 767 |
768 | 768 |
769 | 769 |
770 /* HVSC songlength-database file selector response-functions | 770 /* HVSC songlength-database file selector response-functions |
771 */ | 771 */ |
772 void xs_cfg_sldb_browse(GtkButton * button, gpointer user_data) | 772 void xs_cfg_sldb_browse(GtkButton * button, gpointer user_data) |
773 { | 773 { |
774 (void) button; | 774 (void) button; |
775 (void) user_data; | 775 (void) user_data; |
776 | 776 |
777 if (xs_sldb_fileselector != NULL) { | 777 if (xs_sldb_fileselector != NULL) { |
778 gdk_window_raise(xs_sldb_fileselector->window); | 778 gdk_window_raise(xs_sldb_fileselector->window); |
779 return; | 779 return; |
780 } | 780 } |
781 | 781 |
782 xs_sldb_fileselector = create_xs_sldb_fs(); | 782 xs_sldb_fileselector = create_xs_sldb_fs(); |
783 XS_MUTEX_LOCK(xs_cfg); | 783 XS_MUTEX_LOCK(xs_cfg); |
784 gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_sldb_fileselector), xs_cfg.songlenDBPath); | 784 gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_sldb_fileselector), xs_cfg.songlenDBPath); |
785 XS_MUTEX_UNLOCK(xs_cfg); | 785 XS_MUTEX_UNLOCK(xs_cfg); |
786 gtk_widget_show(xs_sldb_fileselector); | 786 gtk_widget_show(xs_sldb_fileselector); |
787 } | 787 } |
788 | 788 |
789 | 789 |
790 void xs_sldb_fs_ok(GtkButton *button, gpointer user_data) | 790 void xs_sldb_fs_ok(GtkButton *button, gpointer user_data) |
791 { | 791 { |
792 (void) button; | 792 (void) button; |
793 (void) user_data; | 793 (void) user_data; |
794 | 794 |
795 /* Selection was accepted! */ | 795 /* Selection was accepted! */ |
796 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")), | 796 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_sld_dbpath")), |
797 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector))); | 797 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_sldb_fileselector))); |
798 | 798 |
799 /* Close file selector window */ | 799 /* Close file selector window */ |
800 gtk_widget_destroy(xs_sldb_fileselector); | 800 gtk_widget_destroy(xs_sldb_fileselector); |
801 xs_sldb_fileselector = NULL; | 801 xs_sldb_fileselector = NULL; |
802 } | 802 } |
803 | 803 |
804 XS_DEF_WINDOW_CLOSE(sldb_fs_cancel, sldb_fileselector) | 804 XS_DEF_WINDOW_CLOSE(sldb_fs_cancel, sldb_fileselector) |
805 XS_DEF_WINDOW_DELETE(sldb_fs, sldb_fileselector) | 805 XS_DEF_WINDOW_DELETE(sldb_fs, sldb_fileselector) |
806 | 806 |
807 | 807 |
808 /* STIL-database file selector response-functions | 808 /* STIL-database file selector response-functions |
809 */ | 809 */ |
810 void xs_cfg_stil_browse(GtkButton * button, gpointer user_data) | 810 void xs_cfg_stil_browse(GtkButton * button, gpointer user_data) |
811 { | 811 { |
812 (void) button; | 812 (void) button; |
813 (void) user_data; | 813 (void) user_data; |
814 | 814 |
815 if (xs_stil_fileselector != NULL) { | 815 if (xs_stil_fileselector != NULL) { |
816 gdk_window_raise(xs_stil_fileselector->window); | 816 gdk_window_raise(xs_stil_fileselector->window); |
817 return; | 817 return; |
818 } | 818 } |
819 | 819 |
820 xs_stil_fileselector = create_xs_stil_fs(); | 820 xs_stil_fileselector = create_xs_stil_fs(); |
821 XS_MUTEX_LOCK(xs_cfg); | 821 XS_MUTEX_LOCK(xs_cfg); |
822 gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_stil_fileselector), xs_cfg.stilDBPath); | 822 gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_stil_fileselector), xs_cfg.stilDBPath); |
823 XS_MUTEX_UNLOCK(xs_cfg); | 823 XS_MUTEX_UNLOCK(xs_cfg); |
824 gtk_widget_show(xs_stil_fileselector); | 824 gtk_widget_show(xs_stil_fileselector); |
825 } | 825 } |
826 | 826 |
827 | 827 |
828 void xs_stil_fs_ok(GtkButton *button, gpointer user_data) | 828 void xs_stil_fs_ok(GtkButton *button, gpointer user_data) |
829 { | 829 { |
830 (void) button; | 830 (void) button; |
831 (void) user_data; | 831 (void) user_data; |
832 | 832 |
833 /* Selection was accepted! */ | 833 /* Selection was accepted! */ |
834 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_dbpath")), | 834 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_stil_dbpath")), |
835 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector))); | 835 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_stil_fileselector))); |
836 | 836 |
837 /* Close file selector window */ | 837 /* Close file selector window */ |
838 gtk_widget_destroy(xs_stil_fileselector); | 838 gtk_widget_destroy(xs_stil_fileselector); |
839 xs_stil_fileselector = NULL; | 839 xs_stil_fileselector = NULL; |
840 } | 840 } |
841 | 841 |
842 | 842 |
843 XS_DEF_WINDOW_CLOSE(stil_fs_cancel, stil_fileselector) | 843 XS_DEF_WINDOW_CLOSE(stil_fs_cancel, stil_fileselector) |
844 XS_DEF_WINDOW_DELETE(stil_fs, stil_fileselector) | 844 XS_DEF_WINDOW_DELETE(stil_fs, stil_fileselector) |
846 | 846 |
847 /* HVSC location selector response-functions | 847 /* HVSC location selector response-functions |
848 */ | 848 */ |
849 void xs_cfg_hvsc_browse(GtkButton * button, gpointer user_data) | 849 void xs_cfg_hvsc_browse(GtkButton * button, gpointer user_data) |
850 { | 850 { |
851 (void) button; | 851 (void) button; |
852 (void) user_data; | 852 (void) user_data; |
853 | 853 |
854 if (xs_hvsc_selector != NULL) { | 854 if (xs_hvsc_selector != NULL) { |
855 gdk_window_raise(xs_hvsc_selector->window); | 855 gdk_window_raise(xs_hvsc_selector->window); |
856 return; | 856 return; |
857 } | 857 } |
858 | 858 |
859 xs_hvsc_selector = create_xs_hvsc_fs(); | 859 xs_hvsc_selector = create_xs_hvsc_fs(); |
860 XS_MUTEX_LOCK(xs_cfg); | 860 XS_MUTEX_LOCK(xs_cfg); |
861 gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_hvsc_selector), xs_cfg.hvscPath); | 861 gtk_file_selection_set_filename(GTK_FILE_SELECTION(xs_hvsc_selector), xs_cfg.hvscPath); |
862 XS_MUTEX_UNLOCK(xs_cfg); | 862 XS_MUTEX_UNLOCK(xs_cfg); |
863 gtk_widget_show(xs_hvsc_selector); | 863 gtk_widget_show(xs_hvsc_selector); |
864 } | 864 } |
865 | 865 |
866 | 866 |
867 void xs_hvsc_fs_ok(GtkButton *button, gpointer user_data) | 867 void xs_hvsc_fs_ok(GtkButton *button, gpointer user_data) |
868 { | 868 { |
869 (void) button; | 869 (void) button; |
870 (void) user_data; | 870 (void) user_data; |
871 | 871 |
872 /* Selection was accepted! */ | 872 /* Selection was accepted! */ |
873 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_hvsc_path")), | 873 gtk_entry_set_text(GTK_ENTRY(LUW("cfg_hvsc_path")), |
874 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_hvsc_selector))); | 874 gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_hvsc_selector))); |
875 | 875 |
876 /* Close file selector window */ | 876 /* Close file selector window */ |
877 gtk_widget_destroy(xs_hvsc_selector); | 877 gtk_widget_destroy(xs_hvsc_selector); |
878 xs_hvsc_selector = NULL; | 878 xs_hvsc_selector = NULL; |
879 } | 879 } |
880 | 880 |
881 | 881 |
882 XS_DEF_WINDOW_CLOSE(hvsc_fs_cancel, hvsc_selector) | 882 XS_DEF_WINDOW_CLOSE(hvsc_fs_cancel, hvsc_selector) |
883 XS_DEF_WINDOW_DELETE(hvsc_fs, hvsc_selector) | 883 XS_DEF_WINDOW_DELETE(hvsc_fs, hvsc_selector) |
885 | 885 |
886 /* Filter handling | 886 /* Filter handling |
887 */ | 887 */ |
888 void xs_cfg_sp1_filter_reset(GtkButton * button, gpointer user_data) | 888 void xs_cfg_sp1_filter_reset(GtkButton * button, gpointer user_data) |
889 { | 889 { |
890 (void) button; | 890 (void) button; |
891 (void) user_data; | 891 (void) user_data; |
892 | 892 |
893 gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_fs"))), XS_SIDPLAY1_FS); | 893 gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_fs"))), XS_SIDPLAY1_FS); |
894 gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_fm"))), XS_SIDPLAY1_FM); | 894 gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_fm"))), XS_SIDPLAY1_FM); |
895 gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_ft"))), XS_SIDPLAY1_FT); | 895 gtk_adjustment_set_value(gtk_range_get_adjustment(GTK_RANGE(LUW("cfg_sp1_filter_ft"))), XS_SIDPLAY1_FT); |
896 } | 896 } |
897 | 897 |
898 | 898 |
899 void xs_cfg_sp2_filter_update(XSCurve *curve, t_xs_sid2_filter *f) | 899 void xs_cfg_sp2_filter_update(XSCurve *curve, t_xs_sid2_filter *f) |
900 { | 900 { |
901 assert(curve); | 901 assert(curve); |
902 assert(f); | 902 assert(f); |
903 | 903 |
904 xs_curve_reset(curve); | 904 xs_curve_reset(curve); |
905 xs_curve_set_range(curve, 0,0, XS_SIDPLAY2_NFPOINTS, XS_SIDPLAY2_FMAX); | 905 xs_curve_set_range(curve, 0,0, XS_SIDPLAY2_NFPOINTS, XS_SIDPLAY2_FMAX); |
906 if (!xs_curve_set_points(curve, f->points, f->npoints)) { | 906 if (!xs_curve_set_points(curve, f->points, f->npoints)) { |
907 // FIXME | 907 // FIXME |
908 xs_error(_("Warning: Could not set filter curve widget points!\n")); | 908 xs_error(_("Warning: Could not set filter curve widget points!\n")); |
909 } | 909 } |
910 } | 910 } |
911 | 911 |
912 | 912 |
913 void xs_cfg_sp2_presets_update(void) | 913 void xs_cfg_sp2_presets_update(void) |
914 { | 914 { |
915 GList *tmpList = NULL; | 915 GList *tmpList = NULL; |
916 gint i; | 916 gint i; |
917 | 917 |
918 for (i = 0; i < xs_cfg.sid2NFilterPresets; i++) { | 918 for (i = 0; i < xs_cfg.sid2NFilterPresets; i++) { |
919 tmpList = g_list_append(tmpList, | 919 tmpList = g_list_append(tmpList, |
920 (gpointer) xs_cfg.sid2FilterPresets[i]->name); | 920 (gpointer) xs_cfg.sid2FilterPresets[i]->name); |
921 } | 921 } |
922 | 922 |
923 gtk_combo_set_popdown_strings(GTK_COMBO(LUW("cfg_sp2_filter_combo")), tmpList); | 923 gtk_combo_set_popdown_strings(GTK_COMBO(LUW("cfg_sp2_filter_combo")), tmpList); |
924 g_list_free(tmpList); | 924 g_list_free(tmpList); |
925 } | 925 } |
926 | 926 |
927 | 927 |
928 void xs_cfg_sp2_filter_load(GtkButton *button, gpointer user_data) | 928 void xs_cfg_sp2_filter_load(GtkButton *button, gpointer user_data) |
929 { | 929 { |
930 const gchar *tmpStr; | 930 const gchar *tmpStr; |
931 gint i, j; | 931 gint i, j; |
932 | 932 |
933 (void) button; | 933 (void) button; |
934 (void) user_data; | 934 (void) user_data; |
935 | 935 |
936 XS_MUTEX_LOCK(xs_cfg); | 936 XS_MUTEX_LOCK(xs_cfg); |
937 | 937 |
938 tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry"))); | 938 tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry"))); |
939 for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) { | 939 for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) { |
940 if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) { | 940 if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) { |
941 j = i; | 941 j = i; |
942 break; | 942 break; |
943 } | 943 } |
944 } | 944 } |
945 | 945 |
946 if (j != -1) { | 946 if (j != -1) { |
947 fprintf(stderr, "Updating from '%s'\n", tmpStr); | 947 fprintf(stderr, "Updating from '%s'\n", tmpStr); |
948 xs_cfg_sp2_filter_update( | 948 xs_cfg_sp2_filter_update( |
949 XS_CURVE(LUW("cfg_sp2_filter_curve")), | 949 XS_CURVE(LUW("cfg_sp2_filter_curve")), |
950 xs_cfg.sid2FilterPresets[i]); | 950 xs_cfg.sid2FilterPresets[i]); |
951 } else { | 951 } else { |
952 /* error/warning: no such filter preset */ | 952 /* error/warning: no such filter preset */ |
953 fprintf(stderr, "No such filter preset '%s'!\n", tmpStr); | 953 fprintf(stderr, "No such filter preset '%s'!\n", tmpStr); |
954 } | 954 } |
955 | 955 |
956 XS_MUTEX_UNLOCK(xs_cfg); | 956 XS_MUTEX_UNLOCK(xs_cfg); |
957 } | 957 } |
958 | 958 |
959 | 959 |
960 void xs_cfg_sp2_filter_save(GtkButton *button, gpointer user_data) | 960 void xs_cfg_sp2_filter_save(GtkButton *button, gpointer user_data) |
961 { | 961 { |
962 /* | 962 /* |
963 1) check if textentry matches any current filter name | 963 1) check if textentry matches any current filter name |
964 yes) ask if saving over ok? | 964 yes) ask if saving over ok? |
965 no) ... | 965 no) ... |
966 | 966 |
967 2) save current filter to the name | 967 2) save current filter to the name |
968 */ | 968 */ |
969 const gchar *tmpStr; | 969 const gchar *tmpStr; |
970 gint i, j; | 970 gint i, j; |
971 | 971 |
972 (void) button; | 972 (void) button; |
973 (void) user_data; | 973 (void) user_data; |
974 | 974 |
975 XS_MUTEX_LOCK(xs_cfg); | 975 XS_MUTEX_LOCK(xs_cfg); |
976 | 976 |
977 tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry"))); | 977 tmpStr = gtk_entry_get_text(GTK_ENTRY(LUW("cfg_sp2_filter_combo_entry"))); |
978 for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) { | 978 for (i = 0, j = -1; i < xs_cfg.sid2NFilterPresets; i++) { |
979 if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) { | 979 if (!strcmp(tmpStr, xs_cfg.sid2FilterPresets[i]->name)) { |
980 j = i; | 980 j = i; |
981 break; | 981 break; |
982 } | 982 } |
983 } | 983 } |
984 | 984 |
985 if (j != -1) { | 985 if (j != -1) { |
986 fprintf(stderr, "Found, confirm overwrite?\n"); | 986 fprintf(stderr, "Found, confirm overwrite?\n"); |
987 } | 987 } |
988 | 988 |
989 fprintf(stderr, "saving!\n"); | 989 fprintf(stderr, "saving!\n"); |
990 | 990 |
991 xs_cfg_sp2_presets_update(); | 991 xs_cfg_sp2_presets_update(); |
992 | 992 |
993 XS_MUTEX_UNLOCK(xs_cfg); | 993 XS_MUTEX_UNLOCK(xs_cfg); |
994 } | 994 } |
995 | 995 |
996 | 996 |
997 void xs_cfg_sp2_filter_delete(GtkButton *button, gpointer user_data) | 997 void xs_cfg_sp2_filter_delete(GtkButton *button, gpointer user_data) |
998 { | 998 { |
999 (void) button; | 999 (void) button; |
1000 (void) user_data; | 1000 (void) user_data; |
1001 /* | 1001 /* |
1002 1) confirm | 1002 1) confirm |
1003 2) delete | 1003 2) delete |
1004 */ | 1004 */ |
1005 } | 1005 } |
1006 | 1006 |
1007 | 1007 |
1008 void xs_cfg_sp2_filter_import(GtkButton *button, gpointer user_data) | 1008 void xs_cfg_sp2_filter_import(GtkButton *button, gpointer user_data) |
1009 { | 1009 { |
1010 (void) button; | 1010 (void) button; |
1011 (void) user_data; | 1011 (void) user_data; |
1012 | 1012 |
1013 if (xs_filt_importselector != NULL) { | 1013 if (xs_filt_importselector != NULL) { |
1014 gdk_window_raise(xs_filt_importselector->window); | 1014 gdk_window_raise(xs_filt_importselector->window); |
1015 return; | 1015 return; |
1016 } | 1016 } |
1017 | 1017 |
1018 xs_filt_importselector = create_xs_filter_import_fs(); | 1018 xs_filt_importselector = create_xs_filter_import_fs(); |
1019 gtk_widget_show(xs_filt_importselector); | 1019 gtk_widget_show(xs_filt_importselector); |
1020 } | 1020 } |
1021 | 1021 |
1022 | 1022 |
1023 void xs_filter_import_fs_ok(GtkButton *button, gpointer user_data) | 1023 void xs_filter_import_fs_ok(GtkButton *button, gpointer user_data) |
1024 { | 1024 { |
1025 const gchar *tmpStr; | 1025 const gchar *tmpStr; |
1026 (void) button; | 1026 (void) button; |
1027 (void) user_data; | 1027 (void) user_data; |
1028 | 1028 |
1029 XS_MUTEX_LOCK(xs_cfg); | 1029 XS_MUTEX_LOCK(xs_cfg); |
1030 | 1030 |
1031 /* Selection was accepted! */ | 1031 /* Selection was accepted! */ |
1032 tmpStr = gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_filt_importselector)); | 1032 tmpStr = gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_filt_importselector)); |
1033 xs_filters_import(tmpStr, xs_cfg.sid2FilterPresets, &xs_cfg.sid2NFilterPresets); | 1033 xs_filters_import(tmpStr, xs_cfg.sid2FilterPresets, &xs_cfg.sid2NFilterPresets); |
1034 xs_cfg_sp2_presets_update(); | 1034 xs_cfg_sp2_presets_update(); |
1035 | 1035 |
1036 /* Close file selector window */ | 1036 /* Close file selector window */ |
1037 gtk_widget_destroy(xs_filt_importselector); | 1037 gtk_widget_destroy(xs_filt_importselector); |
1038 xs_filt_importselector = NULL; | 1038 xs_filt_importselector = NULL; |
1039 XS_MUTEX_UNLOCK(xs_cfg); | 1039 XS_MUTEX_UNLOCK(xs_cfg); |
1040 } | 1040 } |
1041 | 1041 |
1042 | 1042 |
1043 XS_DEF_WINDOW_CLOSE(filter_import_fs_cancel, filt_importselector) | 1043 XS_DEF_WINDOW_CLOSE(filter_import_fs_cancel, filt_importselector) |
1044 XS_DEF_WINDOW_DELETE(filter_import_fs, filt_importselector) | 1044 XS_DEF_WINDOW_DELETE(filter_import_fs, filt_importselector) |
1045 | 1045 |
1046 | 1046 |
1047 void xs_cfg_sp2_filter_export(GtkButton *button, gpointer user_data) | 1047 void xs_cfg_sp2_filter_export(GtkButton *button, gpointer user_data) |
1048 { | 1048 { |
1049 (void) button; | 1049 (void) button; |
1050 (void) user_data; | 1050 (void) user_data; |
1051 | 1051 |
1052 if (xs_filt_exportselector != NULL) { | 1052 if (xs_filt_exportselector != NULL) { |
1053 gdk_window_raise(xs_filt_exportselector->window); | 1053 gdk_window_raise(xs_filt_exportselector->window); |
1054 return; | 1054 return; |
1055 } | 1055 } |
1056 | 1056 |
1057 xs_filt_exportselector = create_xs_filter_export_fs(); | 1057 xs_filt_exportselector = create_xs_filter_export_fs(); |
1058 gtk_widget_show(xs_filt_exportselector); | 1058 gtk_widget_show(xs_filt_exportselector); |
1059 } | 1059 } |
1060 | 1060 |
1061 | 1061 |
1062 void xs_filter_export_fs_ok(GtkButton *button, gpointer user_data) | 1062 void xs_filter_export_fs_ok(GtkButton *button, gpointer user_data) |
1063 { | 1063 { |
1064 const gchar *tmpStr; | 1064 const gchar *tmpStr; |
1065 (void) button; | 1065 (void) button; |
1066 (void) user_data; | 1066 (void) user_data; |
1067 | 1067 |
1068 XS_MUTEX_LOCK(xs_cfg); | 1068 XS_MUTEX_LOCK(xs_cfg); |
1069 | 1069 |
1070 /* Selection was accepted! */ | 1070 /* Selection was accepted! */ |
1071 tmpStr = gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_filt_exportselector)); | 1071 tmpStr = gtk_file_selection_get_filename(GTK_FILE_SELECTION(xs_filt_exportselector)); |
1072 xs_filters_export(tmpStr, xs_cfg.sid2FilterPresets, xs_cfg.sid2NFilterPresets); | 1072 xs_filters_export(tmpStr, xs_cfg.sid2FilterPresets, xs_cfg.sid2NFilterPresets); |
1073 | 1073 |
1074 /* Close file selector window */ | 1074 /* Close file selector window */ |
1075 gtk_widget_destroy(xs_filt_exportselector); | 1075 gtk_widget_destroy(xs_filt_exportselector); |
1076 xs_filt_exportselector = NULL; | 1076 xs_filt_exportselector = NULL; |
1077 XS_MUTEX_UNLOCK(xs_cfg); | 1077 XS_MUTEX_UNLOCK(xs_cfg); |
1078 } | 1078 } |
1079 | 1079 |
1080 | 1080 |
1081 XS_DEF_WINDOW_CLOSE(filter_export_fs_cancel, filt_exportselector) | 1081 XS_DEF_WINDOW_CLOSE(filter_export_fs_cancel, filt_exportselector) |
1082 XS_DEF_WINDOW_DELETE(filter_export_fs, filt_exportselector) | 1082 XS_DEF_WINDOW_DELETE(filter_export_fs, filt_exportselector) |
1084 | 1084 |
1085 /* Selection toggle handlers | 1085 /* Selection toggle handlers |
1086 */ | 1086 */ |
1087 void xs_cfg_emu_filters_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1087 void xs_cfg_emu_filters_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1088 { | 1088 { |
1089 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1089 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1090 | 1090 |
1091 (void) user_data; | 1091 (void) user_data; |
1092 | 1092 |
1093 gtk_widget_set_sensitive(LUW("cfg_filters_notebook"), isActive); | 1093 gtk_widget_set_sensitive(LUW("cfg_filters_notebook"), isActive); |
1094 } | 1094 } |
1095 | 1095 |
1096 | 1096 |
1097 void xs_cfg_ftitle_override_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1097 void xs_cfg_ftitle_override_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1098 { | 1098 { |
1099 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1099 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1100 | 1100 |
1101 (void) user_data; | 1101 (void) user_data; |
1102 | 1102 |
1103 gtk_widget_set_sensitive(LUW("cfg_ftitle_box"), isActive); | 1103 gtk_widget_set_sensitive(LUW("cfg_ftitle_box"), isActive); |
1104 } | 1104 } |
1105 | 1105 |
1106 | 1106 |
1107 void xs_cfg_emu_sidplay1_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1107 void xs_cfg_emu_sidplay1_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1108 { | 1108 { |
1109 (void) togglebutton; | 1109 (void) togglebutton; |
1110 (void) user_data; | 1110 (void) user_data; |
1111 } | 1111 } |
1112 | 1112 |
1113 | 1113 |
1114 void xs_cfg_emu_sidplay2_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1114 void xs_cfg_emu_sidplay2_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1115 { | 1115 { |
1116 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1116 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1117 | 1117 |
1118 (void) user_data; | 1118 (void) user_data; |
1119 | 1119 |
1120 gtk_widget_set_sensitive(LUW("cfg_emu_mem_real"), isActive); | 1120 gtk_widget_set_sensitive(LUW("cfg_emu_mem_real"), isActive); |
1121 | 1121 |
1122 gtk_widget_set_sensitive(LUW("cfg_sidplay2_frame"), isActive); | 1122 gtk_widget_set_sensitive(LUW("cfg_sidplay2_frame"), isActive); |
1123 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), isActive); | 1123 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_opt"), isActive); |
1124 | 1124 |
1125 gtk_widget_set_sensitive(LUW("cfg_chn_autopan"), !isActive); | 1125 gtk_widget_set_sensitive(LUW("cfg_chn_autopan"), !isActive); |
1126 | 1126 |
1127 #ifdef HAVE_RESID_BUILDER | 1127 #ifdef HAVE_RESID_BUILDER |
1128 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), isActive); | 1128 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), isActive); |
1129 #else | 1129 #else |
1130 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), FALSE); | 1130 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_resid"), FALSE); |
1131 #endif | 1131 #endif |
1132 | 1132 |
1133 #ifdef HAVE_HARDSID_BUILDER | 1133 #ifdef HAVE_HARDSID_BUILDER |
1134 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), isActive); | 1134 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), isActive); |
1135 #else | 1135 #else |
1136 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), FALSE); | 1136 gtk_widget_set_sensitive(LUW("cfg_emu_sp2_hardsid"), FALSE); |
1137 #endif | 1137 #endif |
1138 } | 1138 } |
1139 | 1139 |
1140 | 1140 |
1141 void xs_cfg_oversample_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1141 void xs_cfg_oversample_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1142 { | 1142 { |
1143 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1143 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1144 | 1144 |
1145 (void) user_data; | 1145 (void) user_data; |
1146 | 1146 |
1147 gtk_widget_set_sensitive(LUW("cfg_oversample_box"), isActive); | 1147 gtk_widget_set_sensitive(LUW("cfg_oversample_box"), isActive); |
1148 } | 1148 } |
1149 | 1149 |
1150 | 1150 |
1151 void xs_cfg_mintime_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1151 void xs_cfg_mintime_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1152 { | 1152 { |
1153 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1153 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1154 | 1154 |
1155 (void) user_data; | 1155 (void) user_data; |
1156 | 1156 |
1157 gtk_widget_set_sensitive(LUW("cfg_mintime_box"), isActive); | 1157 gtk_widget_set_sensitive(LUW("cfg_mintime_box"), isActive); |
1158 } | 1158 } |
1159 | 1159 |
1160 | 1160 |
1161 void xs_cfg_maxtime_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1161 void xs_cfg_maxtime_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1162 { | 1162 { |
1163 gboolean isActive = GTK_TOGGLE_BUTTON(LUW("cfg_maxtime_enable"))->active; | 1163 gboolean isActive = GTK_TOGGLE_BUTTON(LUW("cfg_maxtime_enable"))->active; |
1164 | 1164 |
1165 (void) togglebutton; | 1165 (void) togglebutton; |
1166 (void) user_data; | 1166 (void) user_data; |
1167 | 1167 |
1168 gtk_widget_set_sensitive(LUW("cfg_maxtime_unknown"), isActive); | 1168 gtk_widget_set_sensitive(LUW("cfg_maxtime_unknown"), isActive); |
1169 gtk_widget_set_sensitive(LUW("cfg_maxtime_box"), isActive); | 1169 gtk_widget_set_sensitive(LUW("cfg_maxtime_box"), isActive); |
1170 } | 1170 } |
1171 | 1171 |
1172 | 1172 |
1173 void xs_cfg_sldb_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1173 void xs_cfg_sldb_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1174 { | 1174 { |
1175 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1175 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1176 | 1176 |
1177 (void) user_data; | 1177 (void) user_data; |
1178 | 1178 |
1179 gtk_widget_set_sensitive(LUW("cfg_sld_box"), isActive); | 1179 gtk_widget_set_sensitive(LUW("cfg_sld_box"), isActive); |
1180 } | 1180 } |
1181 | 1181 |
1182 | 1182 |
1183 void xs_cfg_stil_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1183 void xs_cfg_stil_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1184 { | 1184 { |
1185 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1185 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1186 | 1186 |
1187 (void) user_data; | 1187 (void) user_data; |
1188 | 1188 |
1189 gtk_widget_set_sensitive(LUW("cfg_stil_box1"), isActive); | 1189 gtk_widget_set_sensitive(LUW("cfg_stil_box1"), isActive); |
1190 gtk_widget_set_sensitive(LUW("cfg_stil_box2"), isActive); | 1190 gtk_widget_set_sensitive(LUW("cfg_stil_box2"), isActive); |
1191 } | 1191 } |
1192 | 1192 |
1193 | 1193 |
1194 void xs_cfg_subauto_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1194 void xs_cfg_subauto_enable_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1195 { | 1195 { |
1196 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; | 1196 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active; |
1197 | 1197 |
1198 (void) user_data; | 1198 (void) user_data; |
1199 | 1199 |
1200 gtk_widget_set_sensitive(LUW("cfg_subauto_min_only"), isActive); | 1200 gtk_widget_set_sensitive(LUW("cfg_subauto_min_only"), isActive); |
1201 gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive); | 1201 gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive); |
1202 } | 1202 } |
1203 | 1203 |
1204 | 1204 |
1205 void xs_cfg_subauto_min_only_toggled(GtkToggleButton * togglebutton, gpointer user_data) | 1205 void xs_cfg_subauto_min_only_toggled(GtkToggleButton * togglebutton, gpointer user_data) |
1206 { | 1206 { |
1207 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active && | 1207 gboolean isActive = GTK_TOGGLE_BUTTON(togglebutton)->active && |
1208 GTK_TOGGLE_BUTTON(LUW("cfg_subauto_enable"))->active; | 1208 GTK_TOGGLE_BUTTON(LUW("cfg_subauto_enable"))->active; |
1209 | 1209 |
1210 (void) user_data; | 1210 (void) user_data; |
1211 | 1211 |
1212 gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive); | 1212 gtk_widget_set_sensitive(LUW("cfg_subauto_box"), isActive); |
1213 } | 1213 } |
1214 | 1214 |
1215 | 1215 |
1216 void xs_cfg_mintime_changed(GtkEditable * editable, gpointer user_data) | 1216 void xs_cfg_mintime_changed(GtkEditable * editable, gpointer user_data) |
1217 { | 1217 { |
1218 gint tmpValue; | 1218 gint tmpValue; |
1219 GtkAdjustment *tmpAdj; | 1219 GtkAdjustment *tmpAdj; |
1220 | 1220 |
1221 (void) user_data; | 1221 (void) user_data; |
1222 | 1222 |
1223 tmpAdj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW("cfg_maxtime"))); | 1223 tmpAdj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW("cfg_maxtime"))); |
1224 | 1224 |
1225 tmpValue = (gint) gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(editable))->value; | 1225 tmpValue = (gint) gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(editable))->value; |
1226 | 1226 |
1227 if (tmpValue > tmpAdj->value) | 1227 if (tmpValue > tmpAdj->value) |
1228 gtk_adjustment_set_value(tmpAdj, tmpValue); | 1228 gtk_adjustment_set_value(tmpAdj, tmpValue); |
1229 } | 1229 } |
1230 | 1230 |
1231 | 1231 |
1232 void xs_cfg_maxtime_changed(GtkEditable * editable, gpointer user_data) | 1232 void xs_cfg_maxtime_changed(GtkEditable * editable, gpointer user_data) |
1233 { | 1233 { |
1234 gint tmpValue; | 1234 gint tmpValue; |
1235 GtkAdjustment *tmpAdj; | 1235 GtkAdjustment *tmpAdj; |
1236 | 1236 |
1237 (void) user_data; | 1237 (void) user_data; |
1238 | 1238 |
1239 tmpAdj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW("cfg_mintime"))); | 1239 tmpAdj = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(LUW("cfg_mintime"))); |
1240 | 1240 |
1241 tmpValue = (gint) gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(editable))->value; | 1241 tmpValue = (gint) gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(editable))->value; |
1242 | 1242 |
1243 if (tmpValue < tmpAdj->value) | 1243 if (tmpValue < tmpAdj->value) |
1244 gtk_adjustment_set_value(tmpAdj, tmpValue); | 1244 gtk_adjustment_set_value(tmpAdj, tmpValue); |
1245 } | 1245 } |
1246 | 1246 |
1247 | 1247 |
1248 XS_DEF_WINDOW_DELETE(configwin, configwin) | 1248 XS_DEF_WINDOW_DELETE(configwin, configwin) |
1249 | 1249 |
1250 | 1250 |
1251 /* Execute the configuration panel | 1251 /* Execute the configuration panel |
1252 */ | 1252 */ |
1253 void xs_configure(void) | 1253 void xs_configure(void) |
1254 { | 1254 { |
1255 gint i; | 1255 gint i; |
1256 gfloat tmpValue; | 1256 gfloat tmpValue; |
1257 gchar tmpStr[64]; | 1257 gchar tmpStr[64]; |
1258 GList *tmpList = NULL; | 1258 GList *tmpList = NULL; |
1259 GtkWidget *tmpCurve; | 1259 GtkWidget *tmpCurve; |
1260 | 1260 |
1261 /* Check if the window already exists */ | 1261 /* Check if the window already exists */ |
1262 if (xs_configwin) { | 1262 if (xs_configwin) { |
1263 gdk_window_raise(xs_configwin->window); | 1263 gdk_window_raise(xs_configwin->window); |
1264 return; | 1264 return; |
1265 } | 1265 } |
1266 | 1266 |
1267 /* Create the window */ | 1267 /* Create the window */ |
1268 xs_configwin = create_xs_configwin(); | 1268 xs_configwin = create_xs_configwin(); |
1269 | 1269 |
1270 /* Get lock on configuration */ | 1270 /* Get lock on configuration */ |
1271 XS_MUTEX_LOCK(xs_cfg); | 1271 XS_MUTEX_LOCK(xs_cfg); |
1272 | 1272 |
1273 /* Add samplerates */ | 1273 /* Add samplerates */ |
1274 for (i = 0; i < xs_nsamplerates_table; i++) { | 1274 for (i = 0; i < xs_nsamplerates_table; i++) { |
1275 tmpList = g_list_append (tmpList, | 1275 tmpList = g_list_append (tmpList, |
1276 (gpointer) xs_samplerates_table[i]); | 1276 (gpointer) xs_samplerates_table[i]); |
1277 } | 1277 } |
1278 gtk_combo_set_popdown_strings(GTK_COMBO(LUW("cfg_samplerate_combo")), tmpList); | 1278 gtk_combo_set_popdown_strings(GTK_COMBO(LUW("cfg_samplerate_combo")), tmpList); |
1279 g_list_free(tmpList); | 1279 g_list_free(tmpList); |
1280 | 1280 |
1281 /* Create the custom filter curve widget for libSIDPlay2 */ | 1281 /* Create the custom filter curve widget for libSIDPlay2 */ |
1282 xs_cfg_sp2_presets_update(); | 1282 xs_cfg_sp2_presets_update(); |
1283 tmpCurve = xs_curve_new(); | 1283 tmpCurve = xs_curve_new(); |
1284 xs_cfg_sp2_filter_update(XS_CURVE(tmpCurve), &xs_cfg.sid2Filter); | 1284 xs_cfg_sp2_filter_update(XS_CURVE(tmpCurve), &xs_cfg.sid2Filter); |
1285 gtk_widget_set_name(tmpCurve, "cfg_sp2_filter_curve"); | 1285 gtk_widget_set_name(tmpCurve, "cfg_sp2_filter_curve"); |
1286 gtk_widget_ref(tmpCurve); | 1286 gtk_widget_ref(tmpCurve); |
1287 gtk_object_set_data_full(GTK_OBJECT(xs_configwin), | 1287 gtk_object_set_data_full(GTK_OBJECT(xs_configwin), |
1288 "cfg_sp2_filter_curve", tmpCurve, (GtkDestroyNotify) gtk_widget_unref); | 1288 "cfg_sp2_filter_curve", tmpCurve, (GtkDestroyNotify) gtk_widget_unref); |
1289 gtk_widget_show(tmpCurve); | 1289 gtk_widget_show(tmpCurve); |
1290 gtk_container_add(GTK_CONTAINER(LUW("cfg_sp2_filter_frame")), tmpCurve); | 1290 gtk_container_add(GTK_CONTAINER(LUW("cfg_sp2_filter_frame")), tmpCurve); |
1291 | 1291 |
1292 | 1292 |
1293 /* Based on available optional parts, gray out options */ | 1293 /* Based on available optional parts, gray out options */ |
1294 #ifndef HAVE_SIDPLAY1 | 1294 #ifndef HAVE_SIDPLAY1 |
1295 gtk_widget_set_sensitive(LUW("cfg_emu_sidplay1"), FALSE); | 1295 gtk_widget_set_sensitive(LUW("cfg_emu_sidplay1"), FALSE); |
1296 gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay1"), FALSE); | 1296 gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay1"), FALSE); |
1297 #endif | 1297 #endif |
1298 | 1298 |
1299 #ifndef HAVE_SIDPLAY2 | 1299 #ifndef HAVE_SIDPLAY2 |
1300 gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2"), FALSE); | 1300 gtk_widget_set_sensitive(LUW("cfg_emu_sidplay2"), FALSE); |
1301 gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay2"), FALSE); | 1301 gtk_widget_set_sensitive(LUW("cfg_box_filter_sidplay2"), FALSE); |
1302 #endif | 1302 #endif |
1303 | 1303 |
1304 gtk_widget_set_sensitive(LUW("cfg_resid_frame"), FALSE); | 1304 gtk_widget_set_sensitive(LUW("cfg_resid_frame"), FALSE); |
1305 | 1305 |
1306 #if !defined(HAVE_XMMSEXTRA) && !defined(AUDACIOUS_PLUGIN) | 1306 #if !defined(HAVE_XMMSEXTRA) && !defined(AUDACIOUS_PLUGIN) |
1307 gtk_widget_set_sensitive(LUW("cfg_ftitle_override"), FALSE); | 1307 gtk_widget_set_sensitive(LUW("cfg_ftitle_override"), FALSE); |
1308 xs_cfg.titleOverride = TRUE; | 1308 xs_cfg.titleOverride = TRUE; |
1309 #endif | 1309 #endif |
1310 | 1310 |
1311 #if !defined(HAVE_SONG_POSITION) && !defined(AUDACIOUS_PLUGIN) | 1311 #if !defined(HAVE_SONG_POSITION) && !defined(AUDACIOUS_PLUGIN) |
1312 gtk_widget_set_sensitive(LUW("cfg_subctrl_patch"), FALSE); | 1312 gtk_widget_set_sensitive(LUW("cfg_subctrl_patch"), FALSE); |
1313 #endif | 1313 #endif |
1314 | 1314 |
1315 xs_cfg_ftitle_override_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override")), NULL); | 1315 xs_cfg_ftitle_override_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_ftitle_override")), NULL); |
1316 xs_cfg_emu_filters_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters")), NULL); | 1316 xs_cfg_emu_filters_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_filters")), NULL); |
1317 xs_cfg_emu_sidplay1_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay1")), NULL); | 1317 xs_cfg_emu_sidplay1_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay1")), NULL); |
1318 xs_cfg_emu_sidplay2_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay2")), NULL); | 1318 xs_cfg_emu_sidplay2_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_emu_sidplay2")), NULL); |
1319 xs_cfg_oversample_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_oversample")), NULL); | 1319 xs_cfg_oversample_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_oversample")), NULL); |
1320 xs_cfg_mintime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_mintime_enable")), NULL); | 1320 xs_cfg_mintime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_mintime_enable")), NULL); |
1321 xs_cfg_maxtime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_maxtime_enable")), NULL); | 1321 xs_cfg_maxtime_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_maxtime_enable")), NULL); |
1322 xs_cfg_sldb_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_sld_enable")), NULL); | 1322 xs_cfg_sldb_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_sld_enable")), NULL); |
1323 xs_cfg_stil_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_stil_enable")), NULL); | 1323 xs_cfg_stil_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_stil_enable")), NULL); |
1324 xs_cfg_subauto_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_subauto_enable")), NULL); | 1324 xs_cfg_subauto_enable_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_subauto_enable")), NULL); |
1325 xs_cfg_subauto_min_only_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_subauto_min_only")), NULL); | 1325 xs_cfg_subauto_min_only_toggled(GTK_TOGGLE_BUTTON(LUW("cfg_subauto_min_only")), NULL); |
1326 | 1326 |
1327 | 1327 |
1328 /* Set current data to widgets */ | 1328 /* Set current data to widgets */ |
1329 for (i = 0; i < xs_widtable_max; i++) { | 1329 for (i = 0; i < xs_widtable_max; i++) { |
1330 switch (xs_widtable[i].widType) { | 1330 switch (xs_widtable[i].widType) { |
1331 case WTYPE_BGROUP: | 1331 case WTYPE_BGROUP: |
1332 assert(xs_widtable[i].itemType == CTYPE_INT); | 1332 assert(xs_widtable[i].itemType == CTYPE_INT); |
1333 /* Check if current value matches the given one */ | 1333 /* Check if current value matches the given one */ |
1334 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)), | 1334 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)), |
1335 (*((gint *) xs_widtable[i].itemData) == xs_widtable[i].itemSet)); | 1335 (*((gint *) xs_widtable[i].itemData) == xs_widtable[i].itemSet)); |
1336 break; | 1336 break; |
1337 | 1337 |
1338 case WTYPE_COMBO: | 1338 case WTYPE_COMBO: |
1339 assert(xs_widtable[i].itemType == CTYPE_INT); | 1339 assert(xs_widtable[i].itemType == CTYPE_INT); |
1340 g_snprintf(tmpStr, sizeof(tmpStr), "%d", *(gint *) xs_widtable[i].itemData); | 1340 g_snprintf(tmpStr, sizeof(tmpStr), "%d", *(gint *) xs_widtable[i].itemData); |
1341 gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)), tmpStr); | 1341 gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)), tmpStr); |
1342 break; | 1342 break; |
1343 | 1343 |
1344 case WTYPE_SPIN: | 1344 case WTYPE_SPIN: |
1345 case WTYPE_SCALE: | 1345 case WTYPE_SCALE: |
1346 /* Get the value */ | 1346 /* Get the value */ |
1347 switch (xs_widtable[i].itemType) { | 1347 switch (xs_widtable[i].itemType) { |
1348 case CTYPE_INT: | 1348 case CTYPE_INT: |
1349 tmpValue = (gfloat) * ((gint *) xs_widtable[i].itemData); | 1349 tmpValue = (gfloat) * ((gint *) xs_widtable[i].itemData); |
1350 break; | 1350 break; |
1351 | 1351 |
1352 case CTYPE_FLOAT: | 1352 case CTYPE_FLOAT: |
1353 tmpValue = *((gfloat *) xs_widtable[i].itemData); | 1353 tmpValue = *((gfloat *) xs_widtable[i].itemData); |
1354 break; | 1354 break; |
1355 | 1355 |
1356 default: | 1356 default: |
1357 tmpValue = -1; | 1357 tmpValue = -1; |
1358 assert(0); | 1358 assert(0); |
1359 break; | 1359 break; |
1360 } | 1360 } |
1361 | 1361 |
1362 /* Set the value */ | 1362 /* Set the value */ |
1363 switch (xs_widtable[i].widType) { | 1363 switch (xs_widtable[i].widType) { |
1364 case WTYPE_SPIN: | 1364 case WTYPE_SPIN: |
1365 gtk_adjustment_set_value(gtk_spin_button_get_adjustment | 1365 gtk_adjustment_set_value(gtk_spin_button_get_adjustment |
1366 (GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName))), tmpValue); | 1366 (GTK_SPIN_BUTTON(LUW(xs_widtable[i].widName))), tmpValue); |
1367 break; | 1367 break; |
1368 | 1368 |
1369 case WTYPE_SCALE: | 1369 case WTYPE_SCALE: |
1370 gtk_adjustment_set_value(gtk_range_get_adjustment | 1370 gtk_adjustment_set_value(gtk_range_get_adjustment |
1371 (GTK_RANGE(LUW(xs_widtable[i].widName))), tmpValue); | 1371 (GTK_RANGE(LUW(xs_widtable[i].widName))), tmpValue); |
1372 break; | 1372 break; |
1373 } | 1373 } |
1374 break; | 1374 break; |
1375 | 1375 |
1376 case WTYPE_BUTTON: | 1376 case WTYPE_BUTTON: |
1377 assert(xs_widtable[i].itemType == CTYPE_BOOL); | 1377 assert(xs_widtable[i].itemType == CTYPE_BOOL); |
1378 /* Set toggle-button */ | 1378 /* Set toggle-button */ |
1379 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)), | 1379 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LUW(xs_widtable[i].widName)), |
1380 *((gboolean *) xs_widtable[i].itemData)); | 1380 *((gboolean *) xs_widtable[i].itemData)); |
1381 break; | 1381 break; |
1382 | 1382 |
1383 case WTYPE_TEXT: | 1383 case WTYPE_TEXT: |
1384 assert(xs_widtable[i].itemType == CTYPE_STR); | 1384 assert(xs_widtable[i].itemType == CTYPE_STR); |
1385 /* Set text to text-widget */ | 1385 /* Set text to text-widget */ |
1386 if (*(gchar **) xs_widtable[i].itemData != NULL) { | 1386 if (*(gchar **) xs_widtable[i].itemData != NULL) { |
1387 gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)), | 1387 gtk_entry_set_text(GTK_ENTRY(LUW(xs_widtable[i].widName)), |
1388 *(gchar **) xs_widtable[i].itemData); | 1388 *(gchar **) xs_widtable[i].itemData); |
1389 } | 1389 } |
1390 break; | 1390 break; |
1391 } | 1391 } |
1392 } | 1392 } |
1393 | 1393 |
1394 /* Release the configuration */ | 1394 /* Release the configuration */ |
1395 XS_MUTEX_UNLOCK(xs_cfg); | 1395 XS_MUTEX_UNLOCK(xs_cfg); |
1396 | 1396 |
1397 /* Show the widget */ | 1397 /* Show the widget */ |
1398 gtk_widget_show(xs_configwin); | 1398 gtk_widget_show(xs_configwin); |
1399 } | 1399 } |