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 #include "heraia_types.h"
00026
00027 static gboolean load_heraia_glade_xml(heraia_window_t *main_window);
00028 static void heraia_ui_connect_signals(heraia_window_t *main_window);
00029 static void record_and_hide_about_box(heraia_window_t *main_window);
00030 static void refresh_file_labels(heraia_window_t *main_window);
00031
00035 void on_quitter1_activate( GtkWidget *widget, gpointer data )
00036 {
00037 gtk_main_quit();
00038 }
00039
00043 void on_nouveau1_activate(GtkWidget *widget, gpointer data)
00044 {
00045 heraia_window_t *main_window = (heraia_window_t *) data;
00046
00047 log_message(main_window, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00048 }
00049
00053 void a_propos_activate(GtkWidget *widget, gpointer data)
00054 {
00055 heraia_window_t *main_window = (heraia_window_t *) data;
00056 GtkWidget *about_dialog = NULL;
00057
00058 about_dialog = heraia_get_widget(main_window->xmls->main, "about_dialog");
00059
00060 if (about_dialog != NULL)
00061 {
00062 if (GTK_MINOR_VERSION >= 12)
00063 {
00064 gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about_dialog), PACKAGE_NAME);
00065 }
00066 if (GTK_MINOR_VERSION >= 6)
00067 {
00068 gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_dialog), PACKAGE_VERSION);
00069 }
00070 main_window->win_prop->about_box = move_and_show_dialog_box(about_dialog, main_window->win_prop->about_box);
00071 }
00072 }
00073
00077 window_prop_t *move_and_show_dialog_box(GtkWidget *dialog_box, window_prop_t *dialog_prop)
00078 {
00079 if (dialog_prop->displayed == FALSE)
00080 {
00081 gtk_window_move(GTK_WINDOW(dialog_box), dialog_prop->x, dialog_prop->y);
00082
00083 gtk_widget_show_all(dialog_box);
00084 dialog_prop->displayed = TRUE;
00085 }
00086
00087 return dialog_prop;
00088 }
00089
00090
00094 window_prop_t *record_and_hide_dialog_box(GtkWidget *dialog_box, window_prop_t *dialog_prop)
00095 {
00096 gint x = 0;
00097 gint y = 0;
00098
00099 if (dialog_prop->displayed == TRUE)
00100 {
00101
00102 gtk_window_get_position(GTK_WINDOW(dialog_box), &x, &y);
00103
00104 dialog_prop->x = x;
00105 dialog_prop->y = y;
00106
00107 gtk_widget_hide(dialog_box);
00108 dialog_prop->displayed = FALSE;
00109 }
00110
00111 return dialog_prop;
00112 }
00113
00114
00118 static void record_and_hide_about_box(heraia_window_t *main_window)
00119 {
00120 GtkWidget *about_dialog = NULL;
00121
00122 about_dialog = heraia_get_widget(main_window->xmls->main, "about_dialog");
00123
00124 if (about_dialog != NULL)
00125 {
00126 main_window->win_prop->about_box = record_and_hide_dialog_box(about_dialog, main_window->win_prop->about_box);
00127 }
00128 }
00129
00130
00134 static void a_propos_response(GtkWidget *widget, gint response, gpointer data)
00135 {
00136 heraia_window_t *main_window = (heraia_window_t *) data;
00137 record_and_hide_about_box(main_window);
00138 }
00139
00140 static void a_propos_close(GtkWidget *widget, gpointer data)
00141 {
00142 heraia_window_t *main_window = (heraia_window_t *) data;
00143 record_and_hide_about_box(main_window);
00144 }
00145
00146 static gboolean a_propos_delete(GtkWidget *widget, GdkEvent *event, gpointer data)
00147 {
00148 heraia_window_t *main_window = (heraia_window_t *) data;
00149 record_and_hide_about_box(main_window);
00150
00151 return TRUE;
00152 }
00153
00154
00158 void on_supprimer1_activate( GtkWidget *widget, gpointer data )
00159 {
00160 heraia_window_t *main_window = (heraia_window_t *) data;
00161
00162 log_message(main_window, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00163 }
00164
00168 void on_couper1_activate( GtkWidget *widget, gpointer data )
00169 {
00170 heraia_window_t *main_window = (heraia_window_t *) data;
00171
00172 log_message(main_window, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00173 }
00174
00178 void on_copier1_activate( GtkWidget *widget, gpointer data )
00179 {
00180 heraia_window_t *main_window = (heraia_window_t *) data;
00181
00182 log_message(main_window, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00183 }
00184
00185
00189 void on_coller1_activate( GtkWidget *widget, gpointer data )
00190 {
00191 heraia_window_t *main_window = (heraia_window_t *) data;
00192
00193 log_message(main_window, G_LOG_LEVEL_WARNING, "Not implemented Yet (Please contribute !)");
00194 }
00195
00196
00202 static void refresh_file_labels(heraia_window_t *main_window)
00203 {
00204 GtkWidget *label = NULL;
00205 guint64 position = 0;
00206 gchar *text = NULL;
00207
00208 if (main_window != NULL)
00209 {
00210 if (main_window->current_DW != NULL && main_window->current_DW->current_hexwidget != NULL)
00211 {
00212 label = heraia_get_widget(main_window->xmls->main, "file_position_label");
00213 position = ghex_get_cursor_position(main_window->current_DW);
00214
00215
00216
00217 text = g_strdup_printf("<small>%Ld</small>", position + 1);
00218 gtk_label_set_markup(GTK_LABEL(label), text);
00219 g_free(text);
00220 }
00221 else
00222 {
00223 label = heraia_get_widget(main_window->xmls->main, "file_position_label");
00224 gtk_label_set_text(GTK_LABEL(label), "");
00225 }
00226 }
00227 }
00228
00229
00234 void refresh_event_handler(GtkWidget *widget, gpointer data)
00235 {
00236 heraia_window_t *main_window = (heraia_window_t *) data;
00237
00238 if (main_window != NULL)
00239 {
00240
00241 if (main_window->event == HERAIA_REFRESH_NOTHING)
00242 {
00243 main_window->event = HERAIA_REFRESH_CURSOR_MOVE;
00244 }
00245
00246 refresh_data_interpretor_window(widget, main_window);
00247 refresh_all_plugins(main_window);
00248 refresh_file_labels(main_window);
00249
00250 main_window->event = HERAIA_REFRESH_NOTHING;
00251 }
00252 }
00253
00254
00258 void on_ouvrir1_activate(GtkWidget *widget, gpointer data )
00259 {
00260 heraia_window_t *main_window = (heraia_window_t *) data;
00261
00262 if (select_file_to_load(main_window) == TRUE)
00263 {
00264 load_file_to_analyse(main_window, main_window->filename);
00265 }
00266
00267 main_window->event = HERAIA_REFRESH_NEW_FILE;
00268 refresh_event_handler(main_window->current_DW->current_hexwidget, main_window);
00269 }
00270
00271
00276 void on_save_activate( GtkWidget *widget, gpointer data )
00277 {
00278 heraia_window_t *main_window = (heraia_window_t *) data;
00279 HERAIA_ERROR erreur = HERAIA_NOERR;
00280 gchar *filename = NULL;
00281
00282 if (main_window != NULL)
00283 {
00284 erreur = heraia_hex_document_save(main_window);
00285 }
00286
00287 if (erreur != HERAIA_NOERR)
00288 {
00289 filename = heraia_hex_document_get_filename(main_window->current_doc);
00290 log_message(main_window, G_LOG_LEVEL_ERROR, "Error while saving file %s !", filename);
00291 }
00292 }
00293
00297 void on_save_as_activate( GtkWidget *widget, gpointer data )
00298 {
00299 heraia_window_t *main_window = (heraia_window_t *) data;
00300 HERAIA_ERROR erreur = HERAIA_NOERR;
00301 gchar *filename = NULL;
00302
00303 if (main_window != NULL && main_window->current_doc != NULL)
00304 {
00305 filename = select_a_file_to_save(main_window);
00306
00307 if (filename != NULL)
00308 {
00309 erreur = heraia_hex_document_save_as(main_window, filename);
00310 }
00311 else
00312 {
00313 erreur = HERAIA_CANCELLED;
00314 }
00315
00316 if (erreur != HERAIA_NOERR)
00317 {
00318 if (erreur == HERAIA_CANCELLED)
00319 {
00320 log_message(main_window, G_LOG_LEVEL_DEBUG, "Saving file as... : operation cancelled.");
00321 }
00322 else
00323 {
00324 log_message(main_window, G_LOG_LEVEL_ERROR, "Error while saving file as %s", main_window->current_doc->file_name);
00325 }
00326 }
00327 else
00328 {
00329
00330 update_main_window_name(main_window);
00331 set_notebook_tab_name(main_window);
00332 log_message(main_window, G_LOG_LEVEL_DEBUG, "File %s saved and now edited.", main_window->current_doc->file_name);
00333 }
00334 }
00335 }
00336
00341 void on_DIMenu_activate(GtkWidget *widget, gpointer data)
00342 {
00343
00344 heraia_window_t *main_window = (heraia_window_t *) data;
00345 data_window_t *dw = NULL;
00346 GtkNotebook *notebook = NULL;
00347
00348 if (main_window != NULL)
00349 {
00350 dw = main_window->current_DW;
00351
00352 if (dw != NULL)
00353 {
00354 if (dw->diw == NULL)
00355 {
00356 dw->diw = heraia_get_widget(main_window->xmls->main, "data_interpretor_window");
00357 }
00358
00359 if (dw->diw != NULL)
00360 {
00361
00362 notebook = GTK_NOTEBOOK(heraia_get_widget(main_window->xmls->main, "diw_notebook"));
00363
00364 if (main_window->win_prop->data_interpretor->displayed == FALSE)
00365 {
00366
00367 gtk_notebook_set_current_page(notebook, dw->tab_displayed);
00368
00369
00370 main_window->win_prop->data_interpretor = move_and_show_dialog_box(dw->diw, main_window->win_prop->data_interpretor);
00371
00372
00373 refresh_data_interpretor_window(widget, data);
00374 }
00375 else
00376 {
00377
00378 dw->tab_displayed = gtk_notebook_get_current_page(notebook);
00379 main_window->win_prop->data_interpretor = record_and_hide_dialog_box(dw->diw, main_window->win_prop->data_interpretor);
00380
00381 }
00382 }
00383 }
00384 }
00385 }
00386
00390 gboolean delete_main_window_event(GtkWidget *widget, GdkEvent *event, gpointer data)
00391 {
00392 gtk_widget_destroy(widget);
00393 return TRUE;
00394 }
00395
00396
00400 gboolean delete_dt_window_event(GtkWidget *widget, GdkEvent *event, gpointer data)
00401 {
00402 heraia_window_t *main_window = (heraia_window_t *) data;
00403
00404 g_signal_emit_by_name(heraia_get_widget(main_window->xmls->main, "DIMenu"), "activate");
00405
00406 return TRUE;
00407 }
00408
00409 void destroy_dt_window(GtkWidget *widget, GdkEvent *event, gpointer data)
00410 {
00411 heraia_window_t *main_window = (heraia_window_t *) data;
00412
00413 g_signal_emit_by_name(heraia_get_widget(main_window->xmls->main, "DIMenu"), "activate");
00414 }
00415
00416
00417
00423 static gchar *make_absolute_path(gchar *filename)
00424 {
00425 gchar *current_dir = NULL;
00426 gchar *new_dir = NULL;
00427
00428 if (g_path_is_absolute(filename) == TRUE)
00429 {
00430
00431 return g_path_get_dirname(filename);
00432 }
00433 else
00434 {
00435 current_dir = g_get_current_dir();
00436 new_dir = g_path_get_dirname(filename);
00437
00438 if (g_chdir(new_dir) == 0)
00439 {
00440 g_free(new_dir);
00441 new_dir = g_get_current_dir();
00442 g_chdir(current_dir);
00443 g_free(current_dir);
00444
00445 return new_dir;
00446 }
00447 else
00448 {
00449 g_free(current_dir);
00450
00451 return NULL;
00452 }
00453 }
00454 }
00455
00456
00462 static void set_the_working_directory(GtkFileChooser *file_chooser, gchar *filename)
00463 {
00464 gchar *dirname = NULL;
00465
00466 dirname = make_absolute_path(filename);
00467
00468 if (dirname != NULL)
00469 {
00470 gtk_file_chooser_set_current_folder(file_chooser, dirname);
00471 g_free(dirname);
00472 }
00473 }
00474
00475
00481 gboolean select_file_to_load(heraia_window_t *main_window)
00482 {
00483 GtkWidget *parent = NULL;
00484 GtkFileChooser *file_chooser = NULL;
00485 gboolean success = FALSE;
00486 gchar *filename = NULL;
00487
00488 parent = heraia_get_widget(main_window->xmls->main, "main_window");
00489
00490 file_chooser = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new("Select a file to analyse",
00491 GTK_WINDOW(parent),
00492 GTK_FILE_CHOOSER_ACTION_OPEN,
00493 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
00494 GTK_STOCK_OPEN, GTK_RESPONSE_OK,
00495 NULL));
00496
00501 gtk_window_set_modal(GTK_WINDOW(file_chooser), TRUE);
00502 gtk_file_chooser_set_select_multiple(file_chooser, FALSE);
00503
00508 if (main_window->filename != NULL)
00509 {
00510 set_the_working_directory(file_chooser, main_window->filename);
00511 }
00512
00513 switch (gtk_dialog_run(GTK_DIALOG(file_chooser)))
00514 {
00515 case GTK_RESPONSE_OK:
00516 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser));
00517 log_message(main_window, G_LOG_LEVEL_DEBUG, "filename selected : %s", filename);
00518
00519
00520 if (main_window->filename != NULL)
00521 {
00522 g_free(main_window->filename);
00523 }
00524
00525 main_window->filename = g_strdup_printf("%s", filename);
00526 success = TRUE;
00527 break;
00528 case GTK_RESPONSE_CANCEL:
00529 default:
00530 success = FALSE;
00531 break;
00532 }
00533
00534 g_free(filename);
00535 gtk_widget_destroy(GTK_WIDGET(file_chooser));
00536
00537 return success;
00538 }
00539
00544 gchar *select_a_file_to_save(heraia_window_t *main_window)
00545 {
00546 GtkWidget *parent = NULL;
00547 GtkFileChooser *fcd = NULL;
00548 gchar *filename = NULL;
00549
00550 parent = heraia_get_widget(main_window->xmls->main, "main_window");
00551
00552
00553 fcd = GTK_FILE_CHOOSER(gtk_file_chooser_dialog_new("Save As...",
00554 GTK_WINDOW(parent),
00555 GTK_FILE_CHOOSER_ACTION_SAVE,
00556 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
00557 GTK_STOCK_SAVE, GTK_RESPONSE_OK,
00558 NULL));
00559
00560
00561 gtk_window_set_modal(GTK_WINDOW(fcd), TRUE);
00562 gtk_file_chooser_set_select_multiple(fcd, FALSE);
00563 gtk_file_chooser_set_do_overwrite_confirmation(fcd, TRUE);
00564
00565
00566 if (main_window->filename != NULL)
00567 {
00568 set_the_working_directory(fcd, main_window->filename);
00569 }
00570
00571 switch(gtk_dialog_run(GTK_DIALOG(fcd)))
00572 {
00573 case GTK_RESPONSE_OK:
00574
00575 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fcd));
00576 break;
00577 default:
00578 filename = NULL;
00579 break;
00580 }
00581
00582 gtk_widget_destroy(GTK_WIDGET(fcd));
00583
00584 return filename;
00585 }
00586
00587
00591 void update_main_window_name(heraia_window_t *main_window)
00592 {
00593 GtkWidget *widget = NULL;
00594 gchar *filename = NULL;
00595
00596 if (main_window != NULL && main_window->current_doc != NULL)
00597 {
00598 widget = heraia_get_widget(main_window->xmls->main, "main_window");
00599 filename = g_filename_display_basename(main_window->current_doc->file_name);
00600
00601 gtk_window_set_title(GTK_WINDOW(widget), filename);
00602 }
00603 }
00604
00609 void set_notebook_tab_name(heraia_window_t *main_window)
00610 {
00611 GtkWidget *notebook = NULL;
00612 GtkWidget *page = NULL;
00613 GtkWidget *label = NULL;
00614 gchar *filename = NULL;
00615 gint current = 0;
00616
00617 if (main_window != NULL && main_window->current_doc != NULL)
00618 {
00619 notebook = heraia_get_widget(main_window->xmls->main, "file_notebook");
00620 current = gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook));
00621 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), current);
00622 label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page);
00623 filename = g_filename_display_basename(main_window->current_doc->file_name);
00624 gtk_label_set_text(GTK_LABEL(label), filename);
00625
00626
00627 if (GTK_MINOR_VERSION >= 12)
00628 {
00629 gtk_widget_set_tooltip_text(label, g_filename_display_name(main_window->current_doc->file_name));
00630 }
00631 }
00632 }
00633
00634
00641 void init_heraia_interface(heraia_window_t *main_window)
00642 {
00643 data_window_t *dw = NULL;
00644 GtkWidget *diw = NULL;
00645 GtkWidget *menu = NULL;
00646 GtkWidget *window = NULL;
00647 GtkWidget *notebook = NULL;
00648 all_window_prop_t *win_prop;
00649
00655 if (main_window != NULL)
00656 {
00657 dw = main_window->current_DW;
00658
00659 menu = heraia_get_widget(main_window->xmls->main, "DIMenu");
00660 window = heraia_get_widget(main_window->xmls->main, "main_window");
00661 win_prop = main_window->win_prop;
00662
00663
00664 notebook = heraia_get_widget(main_window->xmls->main, "file_notebook");
00665 gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 1);
00666 if (main_window->current_doc != NULL)
00667 {
00668 gtk_widget_show(notebook);
00669 }
00670 else
00671 {
00672 gtk_widget_hide(notebook);
00673 }
00674
00675 refresh_file_labels(main_window);
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704 }
00705 }
00706
00707
00715 static gboolean load_heraia_glade_xml(heraia_window_t *main_window)
00716 {
00717 gchar *filename = NULL;
00718
00719 if (main_window != NULL && main_window->xmls != NULL)
00720 {
00721
00722 filename = g_strdup_printf("heraia.glade");
00723 main_window->xmls->main = load_glade_xml_file(main_window->location_list, filename);
00724 g_free(filename);
00725
00732 if (main_window->xmls->main == NULL)
00733 return FALSE;
00734 else
00735 return TRUE;
00736 }
00737 else
00738 return FALSE;
00739 }
00740
00745 void connect_cursor_moved_signal(heraia_window_t *main_window)
00746 {
00747 g_signal_connect(G_OBJECT(main_window->current_DW->current_hexwidget), "cursor_moved",
00748 G_CALLBACK(refresh_event_handler), main_window);
00749 }
00750
00751
00755 static void heraia_ui_connect_signals(heraia_window_t *main_window)
00756 {
00757
00758
00759 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "DIMenu")), "activate",
00760 G_CALLBACK (on_DIMenu_activate), main_window);
00761
00762
00763 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "quitter1")), "activate",
00764 G_CALLBACK (on_quitter1_activate), main_window);
00765
00766
00767 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "nouveau1")), "activate",
00768 G_CALLBACK (on_nouveau1_activate), main_window);
00769
00770
00771 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "ouvrir1")), "activate",
00772 G_CALLBACK (on_ouvrir1_activate), main_window);
00773
00774
00775 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "save")), "activate",
00776 G_CALLBACK (on_save_activate), main_window);
00777
00778
00779 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "save_as")), "activate",
00780 G_CALLBACK (on_save_as_activate), main_window);
00781
00782
00783 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "couper1")), "activate",
00784 G_CALLBACK (on_couper1_activate), main_window);
00785
00786
00787 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "copier1")), "activate",
00788 G_CALLBACK (on_copier1_activate), main_window);
00789
00790
00791 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "coller1")), "activate",
00792 G_CALLBACK (on_coller1_activate), main_window);
00793
00794
00795
00796 g_signal_connect (G_OBJECT(heraia_get_widget(main_window->xmls->main, "a_propos1")), "activate",
00797 G_CALLBACK(a_propos_activate), main_window);
00798
00799 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "about_dialog")), "close",
00800 G_CALLBACK(a_propos_close), main_window);
00801
00802 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "about_dialog")), "response",
00803 G_CALLBACK(a_propos_response), main_window);
00804
00805 g_signal_connect(G_OBJECT(heraia_get_widget(main_window->xmls->main, "about_dialog")), "delete-event",
00806 G_CALLBACK(a_propos_delete), main_window);
00807
00808
00809
00810 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "main_window")), "delete_event",
00811 G_CALLBACK (delete_main_window_event), NULL);
00812
00813 g_signal_connect (G_OBJECT (heraia_get_widget(main_window->xmls->main, "main_window")), "destroy",
00814 G_CALLBACK (on_quitter1_activate), NULL);
00815
00816 }
00817
00825 int load_heraia_ui(heraia_window_t *main_window)
00826 {
00827 gboolean success = FALSE;
00828
00829
00830 success = load_heraia_glade_xml(main_window);
00831
00832 if (success == TRUE)
00833 {
00834
00835 if (main_window->debug == TRUE)
00836 {
00837 fprintf(stdout, "connecting heraia_ui signals ");
00838 }
00839
00840 heraia_ui_connect_signals(main_window);
00841
00842 if (main_window->debug == TRUE)
00843 {
00844 fprintf(stdout, " [Done]\n");
00845 }
00846
00847
00848
00849 if (main_window->debug == TRUE)
00850 {
00851 fprintf(stdout, "log window init interface ");
00852 }
00853
00854 log_window_init_interface(main_window);
00855
00856 if (main_window->debug == TRUE)
00857 {
00858 fprintf(stdout, " [Done]\n");
00859 }
00860
00861
00862
00863 if (main_window->debug == TRUE)
00864 {
00865 fprintf(stdout, "data interpretor init interface");
00866 }
00867
00868 data_interpretor_init_interface(main_window);
00869
00870 if (main_window->debug == TRUE)
00871 {
00872 fprintf(stdout, " [Done]\n");
00873 }
00874
00875
00876
00877 if (main_window->debug == TRUE)
00878 {
00879 fprintf(stdout, "list data types init interface ");
00880 }
00881
00882 list_data_types_init_interface(main_window);
00883
00884 if (main_window->debug == TRUE)
00885 {
00886 fprintf(stdout, " [Done]\n");
00887 }
00888
00889
00890
00891 if (main_window->debug == TRUE)
00892 {
00893 fprintf(stdout, "data type init interface ");
00894 }
00895
00896 data_type_init_interface(main_window);
00897
00898 if (main_window->debug == TRUE)
00899 {
00900 fprintf(stdout, " [Done]\n");
00901 }
00902 }
00903
00904 return success;
00905 }
00906
00907
00911 void add_text_to_textview(GtkTextView *textview, const char *format, ...)
00912 {
00913 va_list args;
00914 GtkTextBuffer *tb = NULL;
00915 GtkTextIter iEnd;
00916 gchar *display = NULL;
00917 GError *err = NULL;
00918
00919 va_start(args, format);
00920 display = g_locale_to_utf8(g_strdup_vprintf(format, args), -1, NULL, NULL, &err);
00921 va_end(args);
00922
00923 tb = GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)));
00924 gtk_text_buffer_get_end_iter(tb, &iEnd);
00925 gtk_text_buffer_insert(tb, &iEnd, display, -1);
00926 g_free(display);
00927 }
00928
00929
00933 void kill_text_from_textview(GtkTextView *textview)
00934 {
00935 GtkTextBuffer *tb = NULL;
00936 GtkTextIter iStart;
00937 GtkTextIter iEnd;
00938
00939 tb = GTK_TEXT_BUFFER(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview)));
00940 gtk_text_buffer_get_start_iter(tb, &iStart);
00941 gtk_text_buffer_get_end_iter(tb, &iEnd);
00942 gtk_text_buffer_delete (tb, &iStart, &iEnd);
00943 }
00944
00945
00951 GtkWidget *gtk_radio_button_get_active(GSList *group)
00952 {
00953 GSList *tmp_slist = group;
00954
00955 while (tmp_slist)
00956 {
00957 if (GTK_TOGGLE_BUTTON (tmp_slist->data)->active)
00958 {
00959 return GTK_WIDGET (tmp_slist->data);
00960 }
00961 tmp_slist = tmp_slist->next;
00962 }
00963
00964 return NULL;
00965 }
00966
00967
00975 GtkWidget *gtk_radio_button_get_active_from_widget(GtkRadioButton *radio_group_member)
00976 {
00977 if (radio_group_member)
00978 {
00979 return gtk_radio_button_get_active(radio_group_member->group);
00980 }
00981 else
00982 {
00983 return NULL;
00984 }
00985 }
00986
00987
00991 gboolean is_cmi_checked(GtkWidget *check_menu_item)
00992 {
00993 return gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(check_menu_item));
00994 }
00995
00996
01003 GtkWidget *heraia_get_widget(GladeXML *xml, gchar *widget_name)
01004 {
01005 if (xml != NULL && widget_name != NULL)
01006 {
01007 return glade_xml_get_widget(xml, widget_name);
01008 }
01009 else
01010 {
01011 return NULL;
01012 }
01013 }
01014
01015
01019 void destroy_a_single_widget(GtkWidget *widget)
01020 {
01021 if (widget != NULL)
01022 {
01023 gtk_widget_destroy(widget);
01024 }
01025 }