00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00031 #include <gtk/gtk.h>
00032 #include <fcntl.h>
00033 #include <stdio.h>
00034 #include <string.h>
00035 #include <sys/ioctl.h>
00036 #include <sys/soundcard.h>
00037 #include <unistd.h>
00038
00039 #include <liberregxml/erregapi.h>
00040 #include <libergtk/ergtk.h>
00041 #include <liberipc/eripc.h>
00042 #include <liberipc/eripcbusyd.h>
00043 #include <liberipc/eripccontentlister.h>
00044
00045 #include "setupLog.h"
00046 #include "displayStatus.h"
00047 #include "background.h"
00048 #include "erbusy.h"
00049 #include "iLiadUserScreen.h"
00050 #include "iLiadConfigScreen.h"
00051 #include "iLiadBgConnectScreen.h"
00052 #include "iLiadPincodeScreen.h"
00053 #include "iLiadConfigData.h"
00054 #include "iLiadDateTimeScreen.h"
00055 #include "iLiadPCConnectScreen.h"
00056 #include "iLiadArcLocData.h"
00057 #include "iLiadArcLocScreen.h"
00058 #include "iLiadStartUpScreen.h"
00059 #include "iLiadDeviceOverview.h"
00060 #include "iLiadTimediDSScreen.h"
00061 #include "languages.h"
00062 #include "settings.h"
00063
00064
00065
00066
00067 #define MIXER "/dev/mixer"
00068 #define AUDIO_DEVICE "/dev/dsp"
00069
00070
00071
00072
00073
00074
00075
00076 static regUserSetting_t *g_init_settings = NULL;
00077 static regUserSetting_t *g_user_settings = NULL;
00078 static regUserSetting_t *g_stored_settings = NULL;
00079
00080 static regUserSetting_t* user_setting_dup(const regUserSetting_t* settings);
00081
00082 static erClientChannel_t contentListerChannel;
00083
00084 void iLiad_config_data_init(void)
00085 {
00086 ST_LOGPRINTF("entry");
00087
00088 iLiad_config_data_destroy();
00089
00090 g_user_settings = erRegGetUserSetting();
00091
00092 if (g_user_settings == NULL)
00093 {
00094 ST_WARNPRINTF("use default values");
00095
00096 g_user_settings = g_new0(regUserSetting_t, 1);
00097 g_user_settings->language = strdup(DEFAULT_LOCALE);
00098 g_user_settings->volume = 75;
00099 g_user_settings->keyBuffering = 0;
00100 g_user_settings->longkeypressTimeout = 500;
00101 g_user_settings->flipbarLeftIsDown = TRUE;
00102 }
00103 else
00104 {
00105 g_stored_settings = user_setting_dup(g_user_settings);
00106 }
00107 g_init_settings = user_setting_dup(g_user_settings);
00108
00109 erIpcStartClient(ER_CONTENTLISTER_CHANNEL, &contentListerChannel);
00110 }
00111
00112 void iLiad_config_data_destroy(void)
00113 {
00114 ST_LOGPRINTF("entry");
00115
00116 if (g_user_settings)
00117 {
00118 erRegFreeUserSetting(g_user_settings);
00119 g_user_settings = NULL;
00120 }
00121
00122 if (g_stored_settings)
00123 {
00124 erRegFreeUserSetting(g_stored_settings);
00125 g_stored_settings = NULL;
00126 }
00127
00128 if (g_init_settings)
00129 {
00130 erRegFreeUserSetting(g_init_settings);
00131 g_init_settings = NULL;
00132 }
00133 }
00134
00135 void iLiad_config_data_display(void)
00136 {
00137 ST_LOGPRINTF("entry");
00138
00139 g_return_if_fail(NULL != g_user_settings);
00140 g_assert(NULL != g_user_settings);
00141
00142
00143 if (g_user_settings->language)
00144 {
00145 iLiad_config_set_language(g_user_settings->language);
00146 }
00147 else
00148 {
00149 iLiad_config_set_language(DEFAULT_LOCALE);
00150 }
00151
00152
00153 iLiad_config_set_keys(g_user_settings->longkeypressTimeout);
00154
00155
00156
00157 if(g_user_settings->volume == 0)
00158 {
00159 iLiad_config_set_volume(0);
00160 }
00161 else
00162 {
00163 iLiad_config_set_volume(1);
00164 }
00165
00166
00167 if(g_user_settings->keyBuffering == 0)
00168 {
00169 iLiad_config_set_keybuffering(0);
00170 }
00171 else
00172 {
00173 iLiad_config_set_keybuffering(1);
00174 }
00175
00176
00177 if(g_user_settings->flipbarLeftIsDown == TRUE)
00178 {
00179 iLiad_config_set_flipbar_direction(TRUE);
00180 }
00181 else
00182 {
00183 iLiad_config_set_flipbar_direction(FALSE);
00184 }
00185 display_update_request_screen_refresh(SETTING_ITEM_CHANGE, WAVEFORM_FULLSCREEN);
00186 }
00187
00188 gboolean iLiad_config_data_change_flipbar_direction()
00189 {
00190 gboolean ret = FALSE;
00191
00192 if (g_init_settings && g_user_settings)
00193 {
00194 if (g_init_settings->flipbarLeftIsDown
00195 == g_user_settings->flipbarLeftIsDown)
00196 ret = FALSE;
00197 else
00198 ret = TRUE;
00199 }
00200
00201 return ret;
00202 }
00203
00204 void on_keys_selection_update(erGtkSelectionGroup* selection, gpointer button, gpointer data)
00205 {
00206 ST_LOGPRINTF("entry");
00207
00208 g_return_if_fail(NULL != g_user_settings);
00209 g_assert(NULL != g_user_settings);
00210
00211 g_user_settings->longkeypressTimeout = iLiad_config_get_keys();
00212
00213 ST_LOGPRINTF("longkeypressTimeout = %d", g_user_settings->longkeypressTimeout);
00214
00215 display_update_request_screen_refresh(SETTING_ITEM_CHANGE, WAVEFORM_TYPING);
00216 }
00217
00218 void on_keybuffering_selection_update(erGtkSelectionGroup* selection, gpointer button, gpointer data)
00219 {
00220 ST_LOGPRINTF("entry");
00221
00222 g_return_if_fail(NULL != g_user_settings);
00223 g_assert(NULL != g_user_settings);
00224
00225 g_user_settings->keyBuffering = iLiad_config_get_keybuffering();
00226
00227
00228 if (g_user_settings->keyBuffering != 0)
00229 {
00230 g_user_settings->keyBuffering = 12;
00231 }
00232
00233 ST_LOGPRINTF("KeyBuffering %s", g_user_settings->keyBuffering == 0 ? "OFF" : "ON");
00234
00235 display_update_request_screen_refresh(SETTING_ITEM_CHANGE, WAVEFORM_TYPING);
00236 }
00237
00238 void on_flipbar_direction_selection_update(erGtkSelectionGroup* selection, gpointer button, gpointer data)
00239 {
00240 ST_LOGPRINTF("entry");
00241
00242 g_return_if_fail(NULL != g_user_settings);
00243 g_assert(NULL != g_user_settings);
00244
00245 g_user_settings->flipbarLeftIsDown = iLiad_config_get_flipbar_direction();
00246
00247 ST_LOGPRINTF("flipbarLeftIsDown %s", g_user_settings->flipbarLeftIsDown == TRUE ? "LEFT" : "RIGHT");
00248
00249 display_update_request_screen_refresh(SETTING_ITEM_CHANGE, WAVEFORM_TYPING);
00250 }
00251
00252 void on_language_selection_update(erGtkSelectionGroup* selection, gpointer button, gpointer data)
00253 {
00254 g_assert(NULL != g_user_settings);
00255 g_assert(NULL != g_user_settings->language);
00256
00257 ST_LOGPRINTF("entry");
00258
00259 const gchar *theLanguage = iLiad_config_get_language();
00260
00261 if ( strcmp(theLanguage, g_user_settings->language) != 0 )
00262 {
00263 erbusy_blink();
00264
00265 g_free(g_user_settings->language);
00266 g_user_settings->language = strdup(theLanguage);
00267 ST_LANGUAGEPRINTF("language [%s]", g_user_settings->language);
00268
00269
00270 languagesInit();
00271 bg_set_text();
00272 iLiad_startup_screen_set_text();
00273 iLiad_config_set_text();
00274 iLiad_archive_location_set_text();
00275 iLiad_user_set_text();
00276 iLiad_pincode_set_text();
00277 iLiad_pc_connect_screen_set_text();
00278 iLiad_autoconnect_set_text();
00279 iLiad_timedids_screen_set_text();
00280 iLiad_date_time_set_text();
00281 iLiad_device_overview_set_text();
00282
00283 display_update_request_screen_refresh(SETTING_ITEM_CHANGE, WAVEFORM_FULLSCREEN);
00284 }
00285
00286 ST_LOGPRINTF("done");
00287 }
00288
00289 void on_sound_selection_update(erGtkSelectionGroup* selection, gpointer button, gpointer data)
00290 {
00291 ST_LOGPRINTF("entry");
00292
00293 g_return_if_fail(NULL != g_user_settings);
00294 g_assert(NULL != g_user_settings);
00295
00296 g_user_settings->volume = iLiad_config_get_volume();
00297
00298
00299 if (g_user_settings->volume != 0)
00300 {
00301 g_user_settings->volume = 75;
00302 }
00303
00304 ST_LOGPRINTF("sound %s", g_user_settings->volume == 0 ? "OFF" : "ON");
00305
00306 display_update_request_screen_refresh(SETTING_ITEM_CHANGE, WAVEFORM_TYPING);
00307
00308 clEnableAudio(contentListerChannel, g_user_settings->volume);
00309 }
00310
00311 char *iLiad_config_data_get_language(void)
00312 {
00313 g_return_val_if_fail(NULL != g_user_settings, NULL);
00314 g_return_val_if_fail(NULL != g_user_settings->language, NULL);
00315
00316 return g_user_settings->language;
00317 }
00318
00319
00320 void iLiad_config_data_store(void)
00321 {
00322 ST_LOGPRINTF("entry");
00323
00324 g_return_if_fail(NULL != g_user_settings);
00325 g_assert(NULL != g_user_settings);
00326
00327 if ( g_stored_settings != NULL
00328 && strcmp(g_user_settings->language, g_stored_settings->language) == 0
00329 && g_user_settings->volume == g_stored_settings->volume
00330 && g_user_settings->keyBuffering == g_stored_settings->keyBuffering
00331 && g_user_settings->longkeypressTimeout == g_stored_settings->longkeypressTimeout
00332 && g_user_settings->flipbarLeftIsDown == g_stored_settings->flipbarLeftIsDown)
00333 {
00334
00335 return;
00336 }
00337
00338 prepare_registry_write();
00339
00340 ST_STOREPRINTF("calling erRegSetUserSetting");
00341 erRegSetUserSetting(g_user_settings);
00342
00343 g_stored_settings = user_setting_dup(g_user_settings);
00344
00345 do_registry_write();
00346 }
00347
00348
00349 static regUserSetting_t* user_setting_dup(const regUserSetting_t* settings)
00350 {
00351 regUserSetting_t* dup = NULL;
00352
00353 if (settings)
00354 {
00355 dup = g_new0(regUserSetting_t, 1);
00356 dup->language = strdup(settings->language);
00357 dup->volume = settings->volume;
00358 dup->longkeypressTimeout = settings->longkeypressTimeout;
00359 dup->keyBuffering = settings->keyBuffering;
00360 dup->flipbarLeftIsDown = settings->flipbarLeftIsDown;
00361 }
00362
00363 return dup;
00364 }