00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <libheraia.h>
00029
00030 static void verify_preference_file_path_presence(gchar *pathname);
00031 static void verify_preference_file_name_presence(gchar *filename);
00032
00033 static void save_window_preferences(GKeyFile *file, gchar *name, window_prop_t *window_prop);
00034
00035 static void save_mp_file_preferences_options(heraia_struct_t *main_struct);
00036 static void save_mp_display_preferences_options(heraia_struct_t *main_struct);
00037
00038 static void save_di_preferences(heraia_struct_t *main_struct);
00039
00040 static void save_mpwp_preferences(heraia_struct_t *main_struct);
00041
00042
00043 static void load_window_preferences(GKeyFile *file, gchar *name, window_prop_t *window_prop);
00044
00045 static void load_mp_file_preferences_options(heraia_struct_t *main_struct);
00046 static void load_mp_display_preferences_options(heraia_struct_t *main_struct);
00047
00048 static void load_di_preferences(heraia_struct_t *main_struct);
00049
00050
00051
00052
00053
00054
00055
00056 static void verify_preference_file_path_presence(gchar *pathname)
00057 {
00058 struct stat *buf = NULL;
00059 gint result = 0;
00060
00061 buf = (struct stat *) g_malloc0(sizeof(struct stat));
00062 result = g_stat(pathname, buf);
00063
00064 if (result != 0)
00065 {
00066 g_mkdir_with_parents(pathname, 488);
00067 }
00068 }
00069
00070
00071
00072
00073
00074
00075
00076 static void verify_preference_file_name_presence(gchar *filename)
00077 {
00078 FILE *fp = NULL;
00079
00080 fp = g_fopen(filename, "r");
00081
00082 if (fp == NULL)
00083 {
00084 fp = g_fopen(filename, "w");
00085 if (fp == NULL)
00086 {
00087 fprintf(stderr, Q_("Unable to open and create the main preference file %s\n"), filename);
00088 }
00089 else
00090 {
00091 fprintf(stderr, Q_("Main preference file %s created successfully\n"), filename);
00092 fclose(fp);
00093 }
00094 }
00095 else
00096 {
00097 fclose(fp);
00098 }
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
00108 void verify_preference_file(gchar *pathname, gchar *filename)
00109 {
00110 verify_preference_file_path_presence(pathname);
00111 verify_preference_file_name_presence(filename);
00112 }
00113
00114
00115
00116
00117
00118
00119
00120
00121 void init_preference_struct(heraia_struct_t *main_struct)
00122 {
00123 prefs_t *prefs = NULL;
00124
00125 if (main_struct->prefs == NULL)
00126 {
00127 main_struct->prefs = (prefs_t *) g_malloc0(sizeof(prefs_t));
00128 main_struct->prefs->file = g_key_file_new();
00129 main_struct->prefs->pathname = g_build_path(G_DIR_SEPARATOR_S, g_get_user_config_dir(), "heraia", NULL);
00130 main_struct->prefs->filename = g_build_filename(main_struct->prefs->pathname, "main_preferences", NULL);
00131 }
00132 else
00133 {
00134 prefs = main_struct->prefs;
00135
00136 if (prefs->file == NULL)
00137 {
00138 prefs->file = g_key_file_new();
00139 }
00140 }
00141 }
00142
00143
00144
00145
00146
00147
00148
00149
00150 static void save_window_preferences(GKeyFile *file, gchar *name, window_prop_t *window_prop)
00151 {
00152 gchar *keyname = NULL;
00153
00154 keyname = g_strconcat(name, " Displayed", NULL);
00155 g_key_file_set_boolean(file, GN_GLOBAL_PREFS, keyname, window_prop->displayed);
00156 g_free(keyname);
00157
00158 keyname = g_strconcat(name, " X_pos", NULL);
00159 g_key_file_set_integer(file, GN_GLOBAL_PREFS, keyname, window_prop->x);
00160 g_free(keyname);
00161
00162 keyname = g_strconcat(name, " Y_pos", NULL);
00163 g_key_file_set_integer(file, GN_GLOBAL_PREFS, keyname, window_prop->y);
00164 g_free(keyname);
00165
00166 keyname = g_strconcat(name, " Height", NULL);
00167 g_key_file_set_integer(file, GN_GLOBAL_PREFS, keyname, window_prop->height);
00168 g_free(keyname);
00169
00170 keyname = g_strconcat(name, " Width", NULL);
00171 g_key_file_set_integer(file, GN_GLOBAL_PREFS, keyname, window_prop->width);
00172 g_free(keyname);
00173 }
00174
00175
00176
00177
00178
00179
00180 static void save_mp_file_preferences_options(heraia_struct_t *main_struct)
00181 {
00182 prefs_t *prefs = NULL;
00183 gboolean activated = FALSE;
00184
00185 if (main_struct != NULL)
00186 {
00187 prefs = main_struct->prefs;
00188
00189
00190 activated = is_toggle_button_activated(main_struct->xmls->main, "save_window_position_bt");
00191 g_key_file_set_boolean(prefs->file, GN_GLOBAL_PREFS, KN_SAVE_WINDOW_PREFS, activated);
00192
00193
00194 if (activated == TRUE)
00195 {
00196 save_window_preferences(prefs->file, KN_ABOUT_BOX, main_struct->win_prop->about_box);
00197 save_window_preferences(prefs->file, KN_DATA_INTERPRETOR, main_struct->win_prop->data_interpretor);
00198 save_window_preferences(prefs->file, KN_LOG_BOX, main_struct->win_prop->log_box);
00199 save_window_preferences(prefs->file, KN_MAIN_DIALOG, main_struct->win_prop->main_dialog);
00200 save_window_preferences(prefs->file, KN_PLUGIN_LIST, main_struct->win_prop->plugin_list);
00201 save_window_preferences(prefs->file, KN_LDT, main_struct->win_prop->ldt);
00202 save_window_preferences(prefs->file, KN_MAIN_PREFS, main_struct->win_prop->main_pref_window);
00203 }
00204 }
00205 }
00206
00207
00208
00209
00210
00211
00212 static void save_mp_display_preferences_options(heraia_struct_t *main_struct)
00213 {
00214 prefs_t *prefs = NULL;
00215 gboolean activated = FALSE;
00216
00217 if (main_struct != NULL)
00218 {
00219 prefs = main_struct->prefs;
00220
00221
00222 activated = is_toggle_button_activated(main_struct->xmls->main, "mp_thousand_bt");
00223 g_key_file_set_boolean(prefs->file, GN_DISPLAY_PREFS, KN_DISP_THOUSAND, activated);
00224
00225
00226 activated = is_toggle_button_activated(main_struct->xmls->main, "mp_display_offset_bt");
00227 g_key_file_set_boolean(prefs->file, GN_DISPLAY_PREFS, KN_DISP_OFFSETS, activated);
00228 }
00229 }
00230
00231
00232
00233
00234
00235
00236 static void save_di_preferences(heraia_struct_t *main_struct)
00237 {
00238 gint selected_tab = -1;
00239 gint stream_size = -1;
00240 gint endianness = -1;
00241 prefs_t *prefs = NULL;
00242
00243 if (main_struct != NULL && main_struct->current_DW != NULL)
00244 {
00245 prefs = main_struct->prefs;
00246
00247 selected_tab = di_get_selected_tab(main_struct);
00248 if (selected_tab >= 0)
00249 {
00250 g_key_file_set_integer(prefs->file, GN_DI_PREFS, KN_DI_SELECTED_TAB, selected_tab);
00251 }
00252
00253 stream_size = di_get_stream_size(main_struct);
00254 if (stream_size >= 0)
00255 {
00256 g_key_file_set_integer(prefs->file, GN_DI_PREFS, KN_DI_STREAM_SIZE, stream_size);
00257 }
00258
00259 endianness = di_get_endianness(main_struct);
00260 if (endianness >= 0)
00261 {
00262 g_key_file_set_integer(prefs->file, GN_DI_PREFS, KN_DI_ENDIANNESS, endianness);
00263 }
00264 }
00265 }
00266
00267
00268
00269
00270
00271
00272 static void save_mpwp_preferences(heraia_struct_t *main_struct)
00273 {
00274 GtkNotebook *notebook = NULL;
00275 gint selected_tab = -1;
00276 prefs_t *prefs = NULL;
00277
00278 if (main_struct != NULL && main_struct->current_DW != NULL)
00279 {
00280 prefs = main_struct->prefs;
00281
00282 notebook = GTK_NOTEBOOK(heraia_get_widget(main_struct->xmls->main, "mp_first_notebook"));
00283
00284 if (notebook != NULL)
00285 {
00286 selected_tab = gtk_notebook_get_current_page(notebook);
00287
00288 if (selected_tab >= 0)
00289 {
00290 g_key_file_set_integer(prefs->file, GN_MPWP_PREFS, KN_MPWP_SELECTED_TAB, selected_tab);
00291 }
00292 }
00293 }
00294 }
00295
00296
00297
00298
00299
00300
00301 void save_preferences(heraia_struct_t *main_struct)
00302 {
00303 if (main_struct != NULL)
00304 {
00305
00306 save_mp_file_preferences_options(main_struct);
00307
00308
00309 save_mp_display_preferences_options(main_struct);
00310
00311
00312 save_di_preferences(main_struct);
00313
00314
00315 save_mpwp_preferences(main_struct);
00316
00317 if (main_struct->prefs != NULL)
00318 {
00319
00320 save_preferences_to_file(main_struct->prefs);
00321 }
00322 }
00323 }
00324
00325
00326
00327
00328
00329
00330
00331
00332 static void load_window_preferences(GKeyFile *file, gchar *name, window_prop_t *window_prop)
00333 {
00334 gchar *keyname = NULL;
00335
00336 keyname = g_strconcat(name, " Displayed", NULL);
00337 window_prop->displayed = g_key_file_get_boolean(file, GN_GLOBAL_PREFS, keyname, NULL);
00338 g_free(keyname);
00339
00340 keyname = g_strconcat(name, " X_pos", NULL);
00341 window_prop->x = g_key_file_get_integer(file, GN_GLOBAL_PREFS, keyname, NULL);
00342 g_free(keyname);
00343
00344 keyname = g_strconcat(name, " Y_pos", NULL);
00345 window_prop->y = g_key_file_get_integer(file, GN_GLOBAL_PREFS, keyname, NULL);
00346 g_free(keyname);
00347
00348 keyname = g_strconcat(name, " Height", NULL);
00349 window_prop->height = g_key_file_get_integer(file, GN_GLOBAL_PREFS, keyname, NULL);
00350 g_free(keyname);
00351
00352 keyname = g_strconcat(name, " Width", NULL);
00353 window_prop->width = g_key_file_get_integer(file, GN_GLOBAL_PREFS, keyname, NULL);
00354 g_free(keyname);
00355
00356 }
00357
00358
00359
00360
00361
00362
00363 static void load_mp_file_preferences_options(heraia_struct_t *main_struct)
00364 {
00365 prefs_t *prefs = NULL;
00366 GtkWidget *save_window_position_bt = NULL;
00367 gboolean activated = FALSE;
00368
00369 if (main_struct != NULL)
00370 {
00371 prefs = main_struct->prefs;
00372
00373
00374 activated = g_key_file_get_boolean(prefs->file, GN_GLOBAL_PREFS, KN_SAVE_WINDOW_PREFS, NULL);
00375 save_window_position_bt = heraia_get_widget(main_struct->xmls->main, "save_window_position_bt");
00376 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(save_window_position_bt), activated);
00377
00378 if (activated == TRUE)
00379 {
00380
00381 load_window_preferences(prefs->file, KN_ABOUT_BOX, main_struct->win_prop->about_box);
00382 load_window_preferences(prefs->file, KN_DATA_INTERPRETOR, main_struct->win_prop->data_interpretor);
00383 load_window_preferences(prefs->file, KN_LOG_BOX, main_struct->win_prop->log_box);
00384 load_window_preferences(prefs->file, KN_MAIN_DIALOG, main_struct->win_prop->main_dialog);
00385 load_window_preferences(prefs->file, KN_PLUGIN_LIST, main_struct->win_prop->plugin_list);
00386 load_window_preferences(prefs->file, KN_LDT, main_struct->win_prop->ldt);
00387 load_window_preferences(prefs->file, KN_MAIN_PREFS, main_struct->win_prop->main_pref_window);
00388 }
00389 }
00390 }
00391
00392
00393
00394
00395
00396
00397 static void load_mp_display_preferences_options(heraia_struct_t *main_struct)
00398 {
00399 prefs_t *prefs = NULL;
00400 GtkWidget *toggle_button = NULL;
00401 gboolean activated = FALSE;
00402
00403 if (main_struct != NULL)
00404 {
00405 prefs = main_struct->prefs;
00406
00407
00408 activated = g_key_file_get_boolean(prefs->file, GN_DISPLAY_PREFS, KN_DISP_THOUSAND, NULL);
00409 toggle_button = heraia_get_widget(main_struct->xmls->main, "mp_thousand_bt");
00410 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_button), activated);
00411
00412
00413 activated = g_key_file_get_boolean(prefs->file, GN_DISPLAY_PREFS, KN_DISP_OFFSETS, NULL);
00414 toggle_button = heraia_get_widget(main_struct->xmls->main, "mp_display_offset_bt");
00415 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toggle_button), activated);
00416 }
00417 }
00418
00419
00420
00421
00422
00423
00424 static void load_di_preferences(heraia_struct_t *main_struct)
00425 {
00426 GtkNotebook *notebook = NULL;
00427 gint selected_tab = -1;
00428 gint stream_size = -1;
00429 gint endianness = -1;
00430 prefs_t *prefs = NULL;
00431
00432 if (main_struct != NULL && main_struct->current_DW != NULL && main_struct->xmls != NULL && main_struct->xmls->main != NULL)
00433 {
00434
00435 prefs = main_struct->prefs;
00436
00437 selected_tab = g_key_file_get_integer(prefs->file, GN_DI_PREFS, KN_DI_SELECTED_TAB, NULL);
00438 stream_size = g_key_file_get_integer(prefs->file, GN_DI_PREFS, KN_DI_STREAM_SIZE, NULL);
00439 endianness = g_key_file_get_integer(prefs->file, GN_DI_PREFS, KN_DI_ENDIANNESS, NULL);
00440
00441 di_set_selected_tab(main_struct, selected_tab);
00442 di_set_stream_size(main_struct, stream_size);
00443 di_set_endianness(main_struct, endianness);
00444 }
00445 }
00446
00447
00448
00449
00450
00451
00452 static void load_mpwp_preferences(heraia_struct_t *main_struct)
00453 {
00454 GtkNotebook *notebook = NULL;
00455 GtkWidget *button = NULL;
00456 gint selected_tab;
00457 prefs_t *prefs = NULL;
00458
00459 if (main_struct != NULL && main_struct->current_DW != NULL && main_struct->xmls != NULL && main_struct->xmls->main != NULL)
00460 {
00461 notebook = GTK_NOTEBOOK(heraia_get_widget(main_struct->xmls->main, "mp_first_notebook"));
00462 prefs = main_struct->prefs;
00463
00464 if (notebook != NULL)
00465 {
00466 selected_tab = g_key_file_get_integer(prefs->file, GN_MPWP_PREFS, KN_MPWP_SELECTED_TAB, NULL);
00467
00468 switch (selected_tab)
00469 {
00470 case 0:
00471 gtk_notebook_set_current_page(notebook, selected_tab);
00472 button = heraia_get_widget(main_struct->xmls->main, "mp_tb_fp_bt");
00473 gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(button), TRUE);
00474 break;
00475
00476 case 1:
00477 gtk_notebook_set_current_page(notebook, selected_tab);
00478 button = heraia_get_widget(main_struct->xmls->main, "mp_tb_display_bt");
00479 gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(button), TRUE);
00480 break;
00481
00482 default:
00483 break;
00484 }
00485 }
00486 }
00487 }
00488
00489
00490
00491
00492
00493
00494 void load_preferences(heraia_struct_t *main_struct)
00495 {
00496 if (main_struct != NULL)
00497 {
00498
00499 load_mp_file_preferences_options(main_struct);
00500
00501
00502 load_mp_display_preferences_options(main_struct);
00503
00504
00505 load_di_preferences(main_struct);
00506
00507
00508 load_mpwp_preferences(main_struct);
00509 }
00510 }