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
00029
00030
00031 #include <libheraia.h>
00032
00033 static void set_a_propos_properties(GtkWidget *about_dialog);
00034 static gboolean load_heraia_xml(heraia_struct_t *main_struct);
00035 static void heraia_ui_connect_signals(heraia_struct_t *main_struct);
00036 static void record_and_hide_about_box(heraia_struct_t *main_struct);
00037 static gboolean unsaved_documents(heraia_struct_t *main_struct);
00038 static gboolean close_heraia(heraia_struct_t *main_struct);
00039
00040
00041
00042
00043
00044
00045
00046
00047 void on_quit_activate(GtkWidget *widget, gpointer data)
00048 {
00049 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00050 gboolean quit_heraia = FALSE;
00051
00052 quit_heraia = close_heraia(main_struct);
00053
00054 if (quit_heraia == TRUE)
00055 {
00056 gtk_main_quit();
00057 }
00058 }
00059
00060
00061
00062
00063
00064
00065
00066
00067 void on_new_activate(GtkWidget *widget, gpointer data)
00068 {
00069 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00070
00071 log_message(main_struct, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 void on_preferences_activate(GtkWidget *widget, gpointer data)
00083 {
00084 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00085 GtkWidget *pref_window = NULL;
00086
00087 pref_window = heraia_get_widget(main_struct->xmls->main, "main_preferences_window");
00088
00089 if (pref_window != NULL)
00090 {
00091 move_and_show_dialog_box(pref_window, main_struct->win_prop->main_pref_window);
00092 }
00093
00094 }
00095
00096
00097
00098
00099
00100
00101
00102 static void set_a_propos_properties(GtkWidget *about_dialog)
00103 {
00104
00105 if (about_dialog != NULL)
00106 {
00107 if (GTK_MINOR_VERSION >= 12)
00108 {
00109 gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about_dialog), PACKAGE_NAME);
00110 }
00111 if (GTK_MINOR_VERSION >= 6)
00112 {
00113 gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_dialog), PACKAGE_VERSION);
00114 }
00115 }
00116 }
00117
00118
00119
00120
00121
00122
00123
00124
00125 void a_propos_activate(GtkWidget *widget, gpointer data)
00126 {
00127 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00128 GtkWidget *about_dialog = NULL;
00129
00130 about_dialog = heraia_get_widget(main_struct->xmls->main, "about_dialog");
00131
00132 if (about_dialog != NULL)
00133 {
00134 set_a_propos_properties(about_dialog);
00135 move_and_show_dialog_box(about_dialog, main_struct->win_prop->about_box);
00136 }
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146 void move_and_show_dialog_box(GtkWidget *dialog_box, window_prop_t *dialog_prop)
00147 {
00148 if (dialog_prop != NULL)
00149 {
00150
00151 if (dialog_prop->displayed == FALSE)
00152 {
00153 if (dialog_prop->x > 0 && dialog_prop->y > 0)
00154 {
00155 gtk_window_move(GTK_WINDOW(dialog_box), dialog_prop->x, dialog_prop->y);
00156 }
00157
00158 if (dialog_prop->width > 0 && dialog_prop->height > 0)
00159 {
00160 gtk_window_resize(GTK_WINDOW(dialog_box), dialog_prop->width, dialog_prop->height);
00161 }
00162
00163 gtk_widget_show_all(dialog_box);
00164 dialog_prop->displayed = TRUE;
00165 }
00166 }
00167 }
00168
00169
00170
00171
00172
00173
00174
00175
00176 void record_dialog_box_position(GtkWidget *dialog_box, window_prop_t *dialog_prop)
00177 {
00178 gint x = 0;
00179 gint y = 0;
00180 gint width = WPT_DEFAULT_WIDTH;
00181 gint height = WPT_DEFAULT_HEIGHT;
00182
00183 if (dialog_prop != NULL && dialog_prop->displayed == TRUE)
00184 {
00185 if (dialog_box != NULL)
00186 {
00187 gtk_window_get_position(GTK_WINDOW(dialog_box), &x, &y);
00188 gtk_window_get_size(GTK_WINDOW(dialog_box), &width, &height);
00189 dialog_prop->x = x;
00190 dialog_prop->y = y;
00191 dialog_prop->width = width;
00192 dialog_prop->height = height;
00193 }
00194 }
00195 }
00196
00197
00198
00199
00200
00201
00202
00203 void record_all_dialog_box_positions(heraia_struct_t *main_struct)
00204 {
00205 GtkWidget *dialog_box = NULL;
00206
00207 if (main_struct != NULL &&
00208 main_struct->xmls != NULL &&
00209 main_struct->xmls->main != NULL &&
00210 main_struct->win_prop != NULL &&
00211 main_struct->current_DW != NULL)
00212 {
00213
00214 dialog_box = main_struct->current_DW->diw;
00215 record_dialog_box_position(dialog_box, main_struct->win_prop->data_interpretor);
00216
00217
00218 dialog_box = heraia_get_widget (main_struct->xmls->main, "about_dialog");
00219 record_dialog_box_position(dialog_box, main_struct->win_prop->about_box);
00220
00221
00222 dialog_box = heraia_get_widget (main_struct->xmls->main, "log_window");
00223 record_dialog_box_position(dialog_box, main_struct->win_prop->log_box);
00224
00225
00226 dialog_box = heraia_get_widget (main_struct->xmls->main, "main_window");
00227 record_dialog_box_position(dialog_box, main_struct->win_prop->main_dialog);
00228
00229
00230 dialog_box = heraia_get_widget (main_struct->xmls->main, "plugin_list_window");
00231 record_dialog_box_position(dialog_box, main_struct->win_prop->plugin_list);
00232
00233
00234 dialog_box = heraia_get_widget (main_struct->xmls->main, "list_data_types_window");
00235 record_dialog_box_position(dialog_box, main_struct->win_prop->ldt);
00236
00237
00238 dialog_box = heraia_get_widget (main_struct->xmls->main, "main_preferences_window");
00239 record_dialog_box_position(dialog_box, main_struct->win_prop->main_pref_window);
00240 }
00241 }
00242
00243
00244
00245
00246
00247
00248
00249
00250 void record_and_hide_dialog_box(GtkWidget *dialog_box, window_prop_t *dialog_prop)
00251 {
00252
00253 if (dialog_prop->displayed == TRUE)
00254 {
00255 record_dialog_box_position(dialog_box, dialog_prop);
00256
00257 gtk_widget_hide(dialog_box);
00258 dialog_prop->displayed = FALSE;
00259 }
00260 }
00261
00262
00263
00264
00265
00266
00267
00268 static void record_and_hide_about_box(heraia_struct_t *main_struct)
00269 {
00270 GtkWidget *about_dialog = NULL;
00271
00272 about_dialog = heraia_get_widget(main_struct->xmls->main, "about_dialog");
00273
00274 if (about_dialog != NULL)
00275 {
00276 record_and_hide_dialog_box(about_dialog, main_struct->win_prop->about_box);
00277 }
00278 }
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288 static void a_propos_response(GtkWidget *widget, gint response, gpointer data)
00289 {
00290 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00291 record_and_hide_about_box(main_struct);
00292 }
00293
00294
00295
00296
00297
00298
00299
00300
00301 static void a_propos_close(GtkWidget *widget, gpointer data)
00302 {
00303 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00304 record_and_hide_about_box(main_struct);
00305 }
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 static gboolean a_propos_delete(GtkWidget *widget, GdkEvent *event, gpointer data)
00318 {
00319 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00320 record_and_hide_about_box(main_struct);
00321
00322 return TRUE;
00323 }
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334 void on_delete_activate(GtkWidget *widget, gpointer data)
00335 {
00336 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00337
00338 log_message(main_struct, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00339 }
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350 void on_cut_activate(GtkWidget *widget, gpointer data)
00351 {
00352 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00353
00354 log_message(main_struct, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00355 }
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366 void on_copy_activate(GtkWidget *widget, gpointer data)
00367 {
00368 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00369
00370 log_message(main_struct, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00371 }
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382 void on_paste_activate(GtkWidget *widget, gpointer data)
00383 {
00384 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00385
00386 log_message(main_struct, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00387 }
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397 void refresh_file_labels(heraia_struct_t *main_struct)
00398 {
00399 GtkWidget *position_label = NULL;
00400 GtkWidget *file_size_label = NULL;
00401 GtkWidget *file_sel_label = NULL;
00402 GtkWidget *file_sel_size_label = NULL;
00403 guint64 position = 0;
00404 guint64 file_size = 0;
00405 selection_t *sel = NULL;
00406 gchar *position_text = NULL;
00407 gchar *file_size_text = NULL;
00408 gchar *file_sel_text = NULL;
00409 gchar *file_sel_size_text = NULL;
00410
00411 if (main_struct != NULL)
00412 {
00413 position_label = heraia_get_widget(main_struct->xmls->main, "file_position_label");
00414 file_size_label = heraia_get_widget(main_struct->xmls->main, "file_size_label");
00415 file_sel_label = heraia_get_widget(main_struct->xmls->main, "file_selection_label");
00416 file_sel_size_label = heraia_get_widget(main_struct->xmls->main, "file_selection_size_label");
00417
00418 if (main_struct->current_doc != NULL && main_struct->current_doc->hex_widget != NULL)
00419 {
00420 position = ghex_get_cursor_position(main_struct->current_doc->hex_widget);
00421 file_size = ghex_file_size((Heraia_Hex *) main_struct->current_doc->hex_widget);
00422 sel = ghex_get_selection(main_struct->current_doc->hex_widget);
00423
00424
00425
00426
00427 if (is_toggle_button_activated(main_struct->xmls->main, "mp_thousand_bt") == TRUE)
00428 {
00429 position_text = g_strdup_printf("<small>%'lld</small>", position + 1);
00430 file_size_text = g_strdup_printf("<small>%'lld</small>", file_size);
00431 file_sel_text = g_strdup_printf("<small>%'lld -> %'lld</small>", sel->start + 1, sel->end + 1);
00432 file_sel_size_text = g_strdup_printf("<small>%'lld</small>", (sel->end - sel->start) + 1);
00433 }
00434 else
00435 {
00436 position_text = g_strdup_printf("<small>%lld</small>", position + 1);
00437 file_size_text = g_strdup_printf("<small>%lld</small>", file_size);
00438 file_sel_text = g_strdup_printf("<small>%lld - %lld</small>", sel->start, sel->end);
00439 file_sel_size_text = g_strdup_printf("<small>%lld</small>", (sel->end - sel->start));
00440 }
00441
00442 gtk_label_set_markup(GTK_LABEL(position_label), position_text);
00443 gtk_label_set_markup(GTK_LABEL(file_size_label), file_size_text);
00444 gtk_label_set_markup(GTK_LABEL(file_sel_label), file_sel_text);
00445 gtk_label_set_markup(GTK_LABEL(file_sel_size_label), file_sel_size_text);
00446
00447 g_free(position_text);
00448 g_free(file_size_text);
00449 g_free(file_sel_text);
00450 g_free(file_sel_size_text);
00451 g_free(sel);
00452
00453
00454 if (main_struct->current_doc->modified != main_struct->current_doc->hex_doc->changed)
00455 {
00456 main_struct->current_doc->modified = main_struct->current_doc->hex_doc->changed;
00457 set_notebook_tab_label_color(main_struct, main_struct->current_doc->hex_doc->changed);
00458 }
00459
00460 }
00461 else
00462 {
00463 gtk_label_set_text(GTK_LABEL(position_label), "");
00464 gtk_label_set_text(GTK_LABEL(file_size_label), "");
00465 gtk_label_set_text(GTK_LABEL(file_sel_label), "");
00466 gtk_label_set_text(GTK_LABEL(file_sel_size_label), "");
00467 }
00468 }
00469 }
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481 void refresh_event_handler(GtkWidget *widget, gpointer data)
00482 {
00483 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00484
00485 if (main_struct != NULL)
00486 {
00487
00488 if (main_struct->event == HERAIA_REFRESH_NOTHING)
00489 {
00490 main_struct->event = HERAIA_REFRESH_CURSOR_MOVE;
00491 }
00492
00493 refresh_data_interpretor_window(widget, main_struct);
00494 refresh_all_plugins(main_struct);
00495 refresh_file_labels(main_struct);
00496
00497 main_struct->event = HERAIA_REFRESH_NOTHING;
00498 }
00499 }
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510 void on_open_activate(GtkWidget *widget, gpointer data)
00511 {
00512 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00513 GSList *list = NULL;
00514 GSList *head = NULL;
00515 gboolean success = FALSE;
00516
00517 list = select_file_to_load(main_struct);
00518
00519 if (list != NULL)
00520 {
00521 head = list;
00522 while (list != NULL)
00523 {
00524 success = load_file_to_analyse(main_struct, list->data);
00525 g_free(list->data);
00526 list = g_slist_next(list);
00527 }
00528
00529 g_slist_free(head);
00530
00531 if (success == TRUE && main_struct->current_doc != NULL)
00532 {
00533
00534 main_struct->event = HERAIA_REFRESH_NEW_FILE;
00535 refresh_event_handler(main_struct->current_doc->hex_widget, main_struct);
00536 }
00537 }
00538 }
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549 void on_save_activate(GtkWidget *widget, gpointer data)
00550 {
00551 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00552 HERAIA_ERROR erreur = HERAIA_NOERR;
00553 gchar *filename = NULL;
00554
00555 if (main_struct != NULL && main_struct->current_doc != NULL)
00556 {
00557 erreur = heraia_hex_document_save(main_struct->current_doc);
00558
00559 if (erreur != HERAIA_NOERR)
00560 {
00561 filename = doc_t_document_get_filename(main_struct->current_doc);
00562 log_message(main_struct, G_LOG_LEVEL_ERROR, "Error while saving file %s !", filename);
00563 }
00564 else
00565 {
00566 set_notebook_tab_label_color(main_struct, FALSE);
00567 main_struct->current_doc->modified = FALSE;
00568 }
00569 }
00570 }
00571
00572
00573
00574
00575
00576
00577
00578
00579 void on_save_as_activate(GtkWidget *widget, gpointer data)
00580 {
00581 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00582 HERAIA_ERROR erreur = HERAIA_NOERR;
00583 gchar *filename = NULL;
00584
00585 if (main_struct != NULL && main_struct->current_doc != NULL)
00586 {
00587 filename = select_a_file_to_save(main_struct);
00588
00589 if (filename != NULL)
00590 {
00591 erreur = heraia_hex_document_save_as(main_struct->current_doc, filename);
00592 }
00593 else
00594 {
00595 erreur = HERAIA_CANCELLED;
00596 }
00597
00598 if (erreur != HERAIA_NOERR)
00599 {
00600 if (erreur == HERAIA_CANCELLED)
00601 {
00602 log_message(main_struct, G_LOG_LEVEL_DEBUG, "Saving file as... : operation cancelled.");
00603 }
00604 else
00605 {
00606 log_message(main_struct, G_LOG_LEVEL_ERROR, "Error while saving file as %s", doc_t_document_get_filename(main_struct->current_doc));
00607 }
00608 }
00609 else
00610 {
00611
00612 update_main_struct_name(main_struct);
00613 set_notebook_tab_name(main_struct);
00614 main_struct->current_doc->modified = FALSE;
00615 log_message(main_struct, G_LOG_LEVEL_DEBUG, "File %s saved and now edited.", doc_t_document_get_filename(main_struct->current_doc));
00616 }
00617 }
00618 }
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628 void on_DIMenu_activate(GtkWidget *widget, gpointer data)
00629 {
00630
00631 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00632 data_window_t *dw = NULL;
00633 GtkNotebook *notebook = NULL;
00634
00635 if (main_struct != NULL)
00636 {
00637 dw = main_struct->current_DW;
00638
00639 if (dw != NULL)
00640 {
00641 if (dw->diw == NULL)
00642 {
00643 dw->diw = heraia_get_widget(main_struct->xmls->main, "data_interpretor_window");
00644 }
00645
00646 if (dw->diw != NULL)
00647 {
00648 notebook = GTK_NOTEBOOK(heraia_get_widget(main_struct->xmls->main, "diw_notebook"));
00649
00650 if (main_struct->win_prop->data_interpretor->displayed == FALSE)
00651 {
00652
00653 gtk_notebook_set_current_page(notebook, dw->tab_displayed);
00654
00655
00656 move_and_show_dialog_box(dw->diw, main_struct->win_prop->data_interpretor);
00657
00658 refresh_data_interpretor_window(widget, data);
00659 }
00660 else
00661 {
00662
00663 dw->tab_displayed = gtk_notebook_get_current_page(notebook);
00664 record_and_hide_dialog_box(dw->diw, main_struct->win_prop->data_interpretor);
00665 }
00666 }
00667 }
00668 }
00669 }
00670
00671
00672
00673
00674
00675
00676
00677 void on_tests_menu_activate(GtkWidget *widget, gpointer data)
00678 {
00679 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00680 gboolean result = FALSE;
00681
00682 if (main_struct != NULL)
00683 {
00684 result = tests_ui(main_struct);
00685
00686 if (result == TRUE)
00687 {
00688 log_message(main_struct, G_LOG_LEVEL_INFO, "All tests went Ok.");
00689 }
00690 else
00691 {
00692 log_message(main_struct, G_LOG_LEVEL_WARNING, "Some tests failed.");
00693 }
00694 }
00695 }
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705 gboolean delete_main_struct_event(GtkWidget *widget, GdkEvent *event, gpointer data)
00706 {
00707
00708 on_quit_activate(widget, data);
00709
00710 return FALSE;
00711 }
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721 gboolean delete_dt_window_event(GtkWidget *widget, GdkEvent *event, gpointer data)
00722 {
00723 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00724
00725 g_signal_emit_by_name(heraia_get_widget(main_struct->xmls->main, "DIMenu"), "activate");
00726
00727 return TRUE;
00728 }
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738 void destroy_dt_window(GtkWidget *widget, GdkEvent *event, gpointer data)
00739 {
00740 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00741
00742 g_signal_emit_by_name(heraia_get_widget(main_struct->xmls->main, "DIMenu"), "activate");
00743 }
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754 gboolean file_notebook_tab_changed(GtkNotebook *notebook, GtkNotebookPage *page, gint tab_num, gpointer data)
00755 {
00756 heraia_struct_t *main_struct = (heraia_struct_t *) data;
00757
00758 if (main_struct != NULL)
00759 {
00760 main_struct->current_doc = g_ptr_array_index(main_struct->documents, tab_num);
00761 update_main_struct_name(main_struct);
00762 main_struct->event = HERAIA_REFRESH_TAB_CHANGED;
00763 refresh_event_handler(GTK_WIDGET(notebook), main_struct);
00764 main_struct->event = HERAIA_REFRESH_NOTHING;
00765
00766 }
00767
00768 return TRUE;
00769 }
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785 static gchar *make_absolute_path(gchar *filename)
00786 {
00787 gchar *current_dir = NULL;
00788 gchar *new_dir = NULL;
00789
00790 if (g_path_is_absolute(filename) == TRUE)
00791 {
00792
00793 return g_path_get_dirname(filename);
00794 }
00795 else
00796 {
00797 current_dir = g_get_current_dir();
00798 new_dir = g_path_get_dirname(filename);
00799
00800 if (g_chdir(new_dir) == 0)
00801 {
00802 g_free(new_dir);
00803 new_dir = g_get_current_dir();
00804 g_chdir(current_dir);
00805 g_free(current_dir);
00806
00807 return new_dir;
00808 }
00809 else
00810 {
00811 g_free(current_dir);
00812
00813 return NULL;
00814 }
00815 }
00816 }
00817
00818
00819
00820
00821
00822
00823
00824
00825 void set_the_working_directory(GtkFileChooser *file_chooser, gchar *filename)
00826 {
00827 gchar *dirname = NULL;
00828
00829 dirname = make_absolute_path(filename);
00830
00831 if (dirname != NULL)
00832 {
00833 gtk_file_chooser_set_current_folder(file_chooser, dirname);
00834 g_free(dirname);
00835 }
00836 }
00837
00838
00839
00840
00841
00842
00843
00844
00845 GSList *select_file_to_load(heraia_struct_t *main_struct)
00846 {
00847 GtkWidget *parent = NULL;
00848 GtkFileChooser *file_chooser = NULL;
00849 GSList *list = NULL;
00850
00851 parent = heraia_get_widget(main_struct->xmls->main, "main_window");
00852
00853 file_chooser = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new("Select a file to analyse",
00854 GTK_WINDOW(parent),
00855 GTK_FILE_CHOOSER_ACTION_OPEN,
00856 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
00857 GTK_STOCK_OPEN, GTK_RESPONSE_OK,
00858 NULL));
00859
00860
00861
00862
00863
00864 gtk_window_set_modal(GTK_WINDOW(file_chooser), TRUE);
00865 gtk_file_chooser_set_select_multiple(file_chooser, TRUE);
00866
00867
00868
00869
00870
00871 if (doc_t_document_get_filename(main_struct->current_doc) != NULL)
00872 {
00873 set_the_working_directory(file_chooser, doc_t_document_get_filename(main_struct->current_doc));
00874 }
00875
00876 switch (gtk_dialog_run(GTK_DIALOG(file_chooser)))
00877 {
00878 case GTK_RESPONSE_OK:
00879
00880 list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(file_chooser));
00881 gtk_widget_destroy(GTK_WIDGET(file_chooser));
00882
00883 return list;
00884 break;
00885
00886 case GTK_RESPONSE_CANCEL:
00887 default:
00888 gtk_widget_destroy(GTK_WIDGET(file_chooser));
00889
00890 return NULL;
00891 break;
00892 }
00893 }
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903 gchar *select_a_file_to_save(heraia_struct_t *main_struct)
00904 {
00905 GtkWidget *parent = NULL;
00906 GtkFileChooser *fcd = NULL;
00907 gchar *filename = NULL;
00908
00909 parent = heraia_get_widget(main_struct->xmls->main, "main_window");
00910
00911
00912 fcd = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new("Save As...",
00913 GTK_WINDOW(parent),
00914 GTK_FILE_CHOOSER_ACTION_SAVE,
00915 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
00916 GTK_STOCK_SAVE, GTK_RESPONSE_OK,
00917 NULL));
00918
00919
00920 gtk_window_set_modal(GTK_WINDOW(fcd), TRUE);
00921 gtk_file_chooser_set_select_multiple(fcd, FALSE);
00922 gtk_file_chooser_set_do_overwrite_confirmation(fcd, TRUE);
00923
00924
00925 if (doc_t_document_get_filename(main_struct->current_doc) != NULL)
00926 {
00927 set_the_working_directory(fcd, doc_t_document_get_filename(main_struct->current_doc));
00928 }
00929
00930 switch(gtk_dialog_run(GTK_DIALOG(fcd)))
00931 {
00932 case GTK_RESPONSE_OK:
00933
00934 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fcd));
00935 break;
00936 default:
00937 filename = NULL;
00938 break;
00939 }
00940
00941 gtk_widget_destroy(GTK_WIDGET(fcd));
00942
00943 return filename;
00944 }
00945
00946
00947
00948
00949
00950
00951
00952 void update_main_struct_name(heraia_struct_t *main_struct)
00953 {
00954 GtkWidget *widget = NULL;
00955 gchar *filename = NULL;
00956 gchar *whole_filename = NULL;
00957
00958 if (main_struct != NULL && main_struct->current_doc != NULL)
00959 {
00960 widget = heraia_get_widget(main_struct->xmls->main, "main_window");
00961
00962 whole_filename = doc_t_document_get_filename(main_struct->current_doc);
00963
00964 filename = g_filename_display_basename(whole_filename);
00965
00966 gtk_window_set_title(GTK_WINDOW(widget), filename);
00967 }
00968 }
00969
00970
00971
00972
00973
00974
00975
00976 void set_notebook_tab_name(heraia_struct_t *main_struct)
00977 {
00978 GtkWidget *notebook = NULL;
00979 GtkWidget *page = NULL;
00980 GtkWidget *label = NULL;
00981 doc_t *doc = NULL;
00982 gchar *filename = NULL;
00983 gchar *whole_filename;
00984 gint current = 0;
00985 gchar *markup= NULL;
00986
00987 if (main_struct != NULL && main_struct->current_doc != NULL)
00988 {
00989 notebook = heraia_get_widget(main_struct->xmls->main, "file_notebook");
00990 current = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
00991 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), current);
00992 label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page);
00993
00994 doc = g_ptr_array_index(main_struct->documents, current);
00995 whole_filename = doc_t_document_get_filename(doc);
00996
00997 if (whole_filename != NULL)
00998 {
00999 filename = g_filename_display_basename(whole_filename);
01000 markup = g_markup_printf_escaped("%s", filename);
01001 gtk_label_set_markup(GTK_LABEL(label), markup);
01002 gtk_widget_set_tooltip_text(label, g_filename_display_name(whole_filename));
01003 g_free(markup);
01004 }
01005 }
01006 }
01007
01008
01009
01010
01011
01012
01013
01014
01015 void set_notebook_tab_label_color(heraia_struct_t *main_struct, gboolean color)
01016 {
01017 GtkWidget *notebook = NULL;
01018 GtkWidget *page = NULL;
01019 GtkWidget *label = NULL;
01020 gint current = 0;
01021 gchar *markup= NULL;
01022 gchar *text = NULL;
01023
01024 if (main_struct != NULL && main_struct->current_doc != NULL)
01025 {
01026 notebook = heraia_get_widget(main_struct->xmls->main, "file_notebook");
01027 current = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
01028 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), current);
01029 label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page);
01030
01031 text = g_strdup(gtk_label_get_text(GTK_LABEL(label)));
01032
01033 if (color == TRUE)
01034 {
01035 markup = g_markup_printf_escaped("<span foreground=\"blue\">%s</span>", text);
01036 }
01037 else
01038 {
01039 markup = g_markup_printf_escaped("%s", text);
01040 }
01041
01042 log_message(main_struct, G_LOG_LEVEL_DEBUG, "Changing color for filename %s in tab : %d", markup, current);
01043 gtk_label_set_markup(GTK_LABEL(label), markup);
01044 g_free(markup);
01045 g_free(text);
01046 }
01047 }
01048
01049
01050
01051
01052
01053
01054
01055
01056 void grey_main_widgets(GtkBuilder *main, gboolean greyed)
01057 {
01058 GtkWidget *notebook = NULL;
01059
01060 if (main != NULL)
01061 {
01062 notebook = heraia_get_widget(main, "file_notebook");
01063 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);
01064
01065 if (greyed == TRUE)
01066 {
01067 gtk_widget_set_sensitive(heraia_get_widget(main, "save"), FALSE);
01068 gtk_widget_set_sensitive(heraia_get_widget(main, "save_as"), FALSE);
01069 gtk_widget_hide(notebook);
01070 }
01071 else
01072 {
01073 gtk_widget_set_sensitive(heraia_get_widget(main, "save"), TRUE);
01074 gtk_widget_set_sensitive(heraia_get_widget(main, "save_as"), TRUE);
01075 gtk_widget_show_all(notebook);
01076 }
01077 }
01078 }
01079
01080
01081
01082
01083
01084
01085
01086
01087
01088 void init_heraia_interface(heraia_struct_t *main_struct)
01089 {
01090
01091 if (main_struct != NULL)
01092 {
01093
01094 init_window_states(main_struct);
01095
01096 if (main_struct->current_doc != NULL)
01097 {
01098 grey_main_widgets(main_struct->xmls->main, FALSE);
01099 }
01100 else
01101 {
01102 grey_main_widgets(main_struct->xmls->main, TRUE);
01103 }
01104
01105 refresh_file_labels(main_struct);
01106 }
01107 }
01108
01109
01110
01111
01112
01113
01114
01115
01116
01117
01118
01119 static gboolean load_heraia_xml(heraia_struct_t *main_struct)
01120 {
01121 gchar *filename = NULL;
01122
01123 if (main_struct != NULL && main_struct->xmls != NULL)
01124 {
01125 filename = g_strdup_printf("heraia.gtkbuilder");
01126 main_struct->xmls->main = load_xml_file(main_struct->location_list, filename);
01127 g_free(filename);
01128
01129 if (main_struct->xmls->main == NULL)
01130 {
01131 return FALSE;
01132 }
01133 else
01134 {
01135 return TRUE;
01136 }
01137 }
01138 else
01139 {
01140 return FALSE;
01141 }
01142 }
01143
01144
01145
01146
01147
01148
01149
01150
01151 void connect_cursor_moved_signal(heraia_struct_t *main_struct, GtkWidget *hex_widget)
01152 {
01153 g_signal_connect(G_OBJECT(hex_widget), "cursor_moved",
01154 G_CALLBACK(refresh_event_handler), main_struct);
01155 }
01156
01157
01158
01159
01160
01161
01162 static void heraia_ui_connect_signals(heraia_struct_t *main_struct)
01163 {
01164
01165
01166 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "DIMenu")), "activate",
01167 G_CALLBACK(on_DIMenu_activate), main_struct);
01168
01169
01170 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "quit")), "activate",
01171 G_CALLBACK(on_quit_activate), main_struct);
01172
01173
01174 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "new")), "activate",
01175 G_CALLBACK(on_new_activate), main_struct);
01176
01177
01178 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "open")), "activate",
01179 G_CALLBACK(on_open_activate), main_struct);
01180
01181
01182 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "save")), "activate",
01183 G_CALLBACK(on_save_activate), main_struct);
01184
01185
01186 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "save_as")), "activate",
01187 G_CALLBACK(on_save_as_activate), main_struct);
01188
01189
01190 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "preferences")), "activate",
01191 G_CALLBACK(on_preferences_activate), main_struct);
01192
01193
01194 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "cut")), "activate",
01195 G_CALLBACK(on_cut_activate), main_struct);
01196
01197
01198 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "copy")), "activate",
01199 G_CALLBACK(on_copy_activate), main_struct);
01200
01201
01202 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "paste")), "activate",
01203 G_CALLBACK(on_paste_activate), main_struct);
01204
01205
01206 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "delete")), "activate",
01207 G_CALLBACK(on_delete_activate), main_struct);
01208
01209
01210 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "tests_menu")), "activate",
01211 G_CALLBACK(on_tests_menu_activate), main_struct);
01212
01213
01214
01215 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "a_propos")), "activate",
01216 G_CALLBACK(a_propos_activate), main_struct);
01217
01218 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "about_dialog")), "close",
01219 G_CALLBACK(a_propos_close), main_struct);
01220
01221 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "about_dialog")), "response",
01222 G_CALLBACK(a_propos_response), main_struct);
01223
01224 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "about_dialog")), "delete-event",
01225 G_CALLBACK(a_propos_delete), main_struct);
01226
01227
01228
01229 g_signal_connect(G_OBJECT(heraia_get_widget(main_struct->xmls->main, "file_notebook")),"switch-page",
01230 G_CALLBACK(file_notebook_tab_changed), main_struct);
01231
01232
01233
01234 g_signal_connect(G_OBJECT (heraia_get_widget(main_struct->xmls->main, "main_window")), "delete-event",
01235 G_CALLBACK(delete_main_struct_event), main_struct);
01236 }
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250 int load_heraia_ui(heraia_struct_t *main_struct)
01251 {
01252 gboolean success = FALSE;
01253
01254
01255 success = load_heraia_xml(main_struct);
01256
01257 if (success == TRUE)
01258 {
01259
01260 if (main_struct->debug == TRUE)
01261 {
01262 fprintf(stdout, "Connecting heraia_ui signals ");
01263 }
01264
01265 heraia_ui_connect_signals(main_struct);
01266
01267 if (main_struct->debug == TRUE)
01268 {
01269 fprintf(stdout, " [Done]\n");
01270 }
01271
01272
01273 if (main_struct->debug == TRUE)
01274 {
01275 fprintf(stdout, "log window init interface ");
01276 }
01277
01278 log_window_init_interface(main_struct);
01279
01280 if (main_struct->debug == TRUE)
01281 {
01282 fprintf(stdout, " [Done]\n");
01283 }
01284
01285
01286 if (main_struct->debug == TRUE)
01287 {
01288 fprintf(stdout, "preferences window init interface");
01289 }
01290
01291 main_pref_window_init_interface(main_struct);
01292
01293 if (main_struct->debug == TRUE)
01294 {
01295 fprintf(stdout, " [Done]\n");
01296 }
01297
01298
01299
01300 if (main_struct->debug == TRUE)
01301 {
01302 fprintf(stdout, "data interpretor init interface ");
01303 }
01304
01305 data_interpretor_init_interface(main_struct);
01306
01307 if (main_struct->debug == TRUE)
01308 {
01309 fprintf(stdout, " [Done]\n");
01310 }
01311
01312
01313
01314
01315 fprintf(stdout, "Loading heraia preference file ");
01316
01317 if (load_preference_file(main_struct) != TRUE)
01318 {
01319 fprintf(stdout, " [FAILED]\n");
01320 }
01321 else
01322 {
01323 fprintf(stdout, " [Done]\n");
01324 fprintf(stdout, "Setting up preferences ");
01325 load_preferences(main_struct);
01326 fprintf(stdout, " [Done]\n");
01327 }
01328 }
01329
01330 return success;
01331 }
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341 void add_text_to_textview(GtkTextView *textview, const char *format, ...)
01342 {
01343 va_list args;
01344 GtkTextBuffer *tb = NULL;
01345 GtkTextIter iEnd;
01346 gchar *display = NULL;
01347 GError *err = NULL;
01348
01349 va_start(args, format);
01350 display = g_locale_to_utf8(g_strdup_vprintf(format, args), -1, NULL, NULL, &err);
01351 va_end(args);
01352
01353 tb = GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)));
01354 gtk_text_buffer_get_end_iter(tb, &iEnd);
01355 gtk_text_buffer_insert(tb, &iEnd, display, -1);
01356 g_free(display);
01357 }
01358
01359
01360
01361
01362
01363
01364
01365 void kill_text_from_textview(GtkTextView *textview)
01366 {
01367 GtkTextBuffer *tb = NULL;
01368 GtkTextIter iStart;
01369 GtkTextIter iEnd;
01370
01371 tb = GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)));
01372 gtk_text_buffer_get_start_iter(tb, &iStart);
01373 gtk_text_buffer_get_end_iter(tb, &iEnd);
01374 gtk_text_buffer_delete (tb, &iStart, &iEnd);
01375 }
01376
01377
01378
01379
01380
01381
01382
01383
01384
01385
01386 GtkWidget *gtk_radio_button_get_active(GSList *group)
01387 {
01388 GSList *tmp_slist = group;
01389
01390 while (tmp_slist)
01391 {
01392 if (GTK_TOGGLE_BUTTON (tmp_slist->data)->active)
01393 {
01394 return GTK_WIDGET (tmp_slist->data);
01395 }
01396 tmp_slist = tmp_slist->next;
01397 }
01398
01399 return NULL;
01400 }
01401
01402
01403
01404
01405
01406
01407
01408
01409
01410 GtkWidget *gtk_radio_button_get_active_from_widget(GtkRadioButton *radio_group_member)
01411 {
01412 if (radio_group_member)
01413 {
01414 return gtk_radio_button_get_active(radio_group_member->group);
01415 }
01416 else
01417 {
01418 return NULL;
01419 }
01420 }
01421
01422
01423
01424
01425
01426
01427
01428
01429 gboolean is_cmi_checked(GtkWidget *check_menu_item)
01430 {
01431 return gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(check_menu_item));
01432 }
01433
01434
01435
01436
01437
01438
01439
01440
01441
01442
01443
01444 gboolean is_toggle_button_activated(GtkBuilder *main_xml, gchar *check_button)
01445 {
01446 gboolean activated = FALSE;
01447
01448 if (main_xml != NULL)
01449 {
01450 activated = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(heraia_get_widget(main_xml, check_button)));
01451 }
01452
01453 return activated;
01454 }
01455
01456
01457
01458
01459
01460
01461
01462
01463
01464
01465
01466
01467
01468 GtkWidget *heraia_get_widget(GtkBuilder *xml, gchar *widget_name)
01469 {
01470
01471
01472
01473
01474
01475 if (xml != NULL && widget_name != NULL)
01476 {
01477 return GTK_WIDGET(gtk_builder_get_object(xml, widget_name));
01478 }
01479 else
01480 {
01481 return NULL;
01482 }
01483 }
01484
01485
01486
01487
01488
01489
01490
01491 void destroy_a_single_widget(GtkWidget *widget)
01492 {
01493 if (widget != NULL)
01494 {
01495 gtk_widget_destroy(widget);
01496 }
01497 }
01498
01499
01500
01501
01502
01503
01504
01505
01506 static gboolean unsaved_documents(heraia_struct_t *main_struct)
01507 {
01508 doc_t *current_doc = NULL;
01509 gboolean result = FALSE;
01510 guint i = 0;
01511
01512 if (main_struct != NULL && main_struct->documents != NULL)
01513 {
01514 for(i = 0; i < main_struct->documents->len; i++)
01515 {
01516 current_doc = g_ptr_array_index(main_struct->documents, i);
01517 result = result | current_doc->modified;
01518 }
01519
01520 return result;
01521 }
01522
01523 return result;
01524 }
01525
01526
01527
01528
01529
01530
01531
01532
01533 static gboolean close_heraia(heraia_struct_t *main_struct)
01534 {
01535 gboolean unsaved = FALSE;
01536 gboolean quit_heraia = TRUE;
01537 GtkWidget *dialog = NULL;
01538 GtkWidget *label = NULL;
01539 GtkWidget *content_area = NULL;
01540 GtkWidget *parent = NULL;
01541 gint result = 0;
01542
01543 unsaved = unsaved_documents(main_struct);
01544
01545 if (unsaved == TRUE)
01546 {
01547
01548 parent = heraia_get_widget(main_struct->xmls->main, "main_window");
01549 dialog = gtk_dialog_new_with_buttons(Q_("Unsaved document(s) remains."), GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT,
01550 GTK_STOCK_YES, GTK_RESPONSE_YES,
01551 GTK_STOCK_NO, GTK_RESPONSE_NO, NULL);
01552 content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
01553 gtk_container_set_border_width(GTK_CONTAINER(content_area), 4);
01554 label = gtk_label_new(Q_("Do you want to quit without saving ?"));
01555 gtk_container_add(GTK_CONTAINER(content_area), label);
01556 gtk_widget_show_all(dialog);
01557
01558 gint result = gtk_dialog_run(GTK_DIALOG(dialog));
01559
01560 switch (result)
01561 {
01562 case GTK_RESPONSE_YES:
01563 quit_heraia = TRUE;
01564 break;
01565
01566 default:
01567 quit_heraia = FALSE;
01568 break;
01569 }
01570
01571 gtk_widget_destroy(dialog);
01572 }
01573
01574 if ( quit_heraia == TRUE)
01575 {
01576
01577 record_all_dialog_box_positions(main_struct);
01578
01579
01580 save_preferences(main_struct);
01581 }
01582
01583 return quit_heraia;
01584 }
01585
01586
01587
01588
01589
01590
01591
01592
01593
01594 static void init_one_cmi_window_state(GtkWidget *dialog_box, GtkWidget *cmi, window_prop_t *dialog_prop)
01595 {
01596 gboolean activated = FALSE;
01597
01598 if (dialog_box != NULL && cmi != NULL && dialog_prop != NULL)
01599 {
01600 activated = dialog_prop->displayed;
01601 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(cmi), activated);
01602 if (activated == TRUE)
01603 {
01604 gtk_window_move(GTK_WINDOW(dialog_box), dialog_prop->x, dialog_prop->y);
01605 gtk_window_resize(GTK_WINDOW(dialog_box), dialog_prop->width, dialog_prop->height);
01606 gtk_widget_show_all(dialog_box);
01607 }
01608 }
01609 }
01610
01611
01612
01613
01614
01615
01616
01617 void init_window_states(heraia_struct_t *main_struct)
01618 {
01619 GtkWidget *cmi = NULL;
01620 GtkWidget *dialog_box = NULL;
01621
01622 if (main_struct != NULL && main_struct->xmls != NULL && main_struct->xmls->main != NULL)
01623 {
01624 if (main_struct->win_prop)
01625 {
01626
01627 dialog_box = heraia_get_widget(main_struct->xmls->main, "main_window");
01628 if (main_struct->win_prop->main_dialog->displayed == TRUE)
01629 {
01630 gtk_window_move(GTK_WINDOW(dialog_box), main_struct->win_prop->main_dialog->x, main_struct->win_prop->main_dialog->y);
01631 gtk_window_resize(GTK_WINDOW(dialog_box), main_struct->win_prop->main_dialog->width, main_struct->win_prop->main_dialog->height);
01632 gtk_widget_show(dialog_box);
01633 }
01634
01635
01636 cmi = heraia_get_widget(main_struct->xmls->main, "mw_cmi_show_logw");
01637 dialog_box = heraia_get_widget(main_struct->xmls->main, "log_window");
01638 init_one_cmi_window_state(dialog_box, cmi, main_struct->win_prop->log_box);
01639
01640
01641 cmi = heraia_get_widget(main_struct->xmls->main, "DIMenu");
01642
01643 if (main_struct->win_prop->data_interpretor->displayed == TRUE)
01644 {
01645 main_struct->win_prop->data_interpretor->displayed = FALSE;
01646 g_signal_emit_by_name(heraia_get_widget(main_struct->xmls->main, "DIMenu"), "activate");
01647 }
01648
01649
01650 cmi = heraia_get_widget(main_struct->xmls->main, "ldt_menu");
01651 dialog_box = heraia_get_widget(main_struct->xmls->main, "list_data_types_window");
01652 init_one_cmi_window_state(dialog_box, cmi, main_struct->win_prop->ldt);
01653
01654
01655 cmi = heraia_get_widget(main_struct->xmls->main, "mw_cmi_plugin_list");
01656 dialog_box = heraia_get_widget(main_struct->xmls->main, "plugin_list_window");
01657 init_one_cmi_window_state(dialog_box, cmi, main_struct->win_prop->plugin_list);
01658
01659
01660 dialog_box = heraia_get_widget(main_struct->xmls->main, "main_preferences_window");
01661 if (main_struct->win_prop->main_pref_window->displayed == TRUE)
01662 {
01663 gtk_window_move(GTK_WINDOW(dialog_box), main_struct->win_prop->main_pref_window->x, main_struct->win_prop->main_pref_window->y);
01664 gtk_window_resize(GTK_WINDOW(dialog_box), main_struct->win_prop->main_pref_window->width, main_struct->win_prop->main_pref_window->height);
01665 gtk_widget_show_all(dialog_box);
01666 }
01667
01668
01669 dialog_box = heraia_get_widget(main_struct->xmls->main, "about_dialog");
01670 if (main_struct->win_prop->about_box->displayed == TRUE)
01671 {
01672 gtk_window_move(GTK_WINDOW(dialog_box), main_struct->win_prop->about_box->x, main_struct->win_prop->about_box->y);
01673 gtk_window_resize(GTK_WINDOW(dialog_box), main_struct->win_prop->about_box->width, main_struct->win_prop->about_box->height);
01674 set_a_propos_properties(dialog_box);
01675 gtk_widget_show_all(dialog_box);
01676 }
01677 }
01678 }
01679 }
01680
01681
01682
01683
01684
01685
01686 void add_new_tab_in_main_struct(heraia_struct_t *main_struct, doc_t *doc)
01687 {
01688 GtkWidget *vbox = NULL;
01689 GtkNotebook *notebook = NULL;
01690 GtkWidget *tab_label = NULL;
01691 gint tab_num = -1;
01692
01693 notebook = GTK_NOTEBOOK(heraia_get_widget(main_struct->xmls->main, "file_notebook"));
01694 vbox = gtk_vbox_new(FALSE, 2);
01695 gtk_box_pack_start(GTK_BOX(vbox), doc->hex_widget, TRUE, TRUE, 3);
01696
01697 tab_label = gtk_label_new(NULL);
01698
01699 gtk_widget_show_all(vbox);
01700 tab_num = gtk_notebook_append_page(notebook, vbox, tab_label);
01701
01702 gtk_notebook_set_current_page(notebook, tab_num);
01703 main_struct->current_doc = doc;
01704 }
01705
01706
01707
01708
01709
01710
01711
01712
01713 void show_hide_widget(GtkWidget *widget, gboolean show, window_prop_t *win_prop)
01714 {
01715 if (win_prop != NULL)
01716 {
01717 if (show)
01718 {
01719 move_and_show_dialog_box(widget, win_prop);
01720 }
01721 else
01722 {
01723 record_and_hide_dialog_box(widget, win_prop);
01724 }
01725 }
01726 else
01727 {
01728 if (show)
01729 {
01730 gtk_widget_show(widget);
01731 }
01732 else
01733 {
01734 gtk_widget_hide(widget);
01735 }
01736 }
01737 }