static void column_clicked(GtkTreeViewColumn* column, gpointer user_data) { int col = column2index(user_data, column); GtkSortType sort1 = gtk_tree_view_column_get_sort_order(column); GtkSortType sort2 = (options.local_sort_order ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); if(sort1 == sort2) { options.local_sort_order = !options.local_sort_order; clist_refresh(); } switch(col) { case COLUMN_NAME: options.local_sort = SORT_BY_NAME; clist_refresh(); break; case COLUMN_TYPE: options.local_sort = SORT_BY_TYPE; clist_refresh(); break; case COLUMN_SIZE: options.local_sort = SORT_BY_SIZE; clist_refresh(); break; case COLUMN_DATE: options.local_sort = SORT_BY_DATE; clist_refresh(); break; default: break; } }
GLADE_CB void on_run_to_cursor1_activate (GtkMenuItem *menuitem, gpointer user_data) { //GtkWidget *list = (GtkWidget *)(menuitem); // arg are swapped, why ? GtkTreeView *view = GTK_TREE_VIEW(list); GtkTreeModel *model = gtk_tree_view_get_model(view); GtkListStore *store = GTK_LIST_STORE(model); GtkTreeSelection *selection; GtkTreeIter iter; gboolean valid; gchar *str; uint32_t addr; selection = gtk_tree_view_get_selection(view); valid = gtk_tree_selection_get_selected(selection, NULL, &iter); // Get address to go gtk_tree_model_get(model, &iter, COL_ADDR, &str, -1); sscanf(str, "%x", &addr); tb_set_states(1, 0, 0, 0, 1, 0); ti68k_debug_skip(addr); tb_set_states(1, 1, 1, 1, 0, 1); clist_refresh(store); }
void dbgheap_refresh_window(void) { if(options3.heap.visible) { clist_refresh(store); } }
void on_tilp_recv(void) { int ret; if ((remote.selection1 != NULL) || (remote.selection2 != NULL)) { if (remote.selection1 != NULL) { ret = tilp_calc_recv_var(); if (ret < 0) return; else if (ret > 0) save_group(); } if (remote.selection2 != NULL) { ret = tilp_calc_recv_app(); if (ret != 0) return; } } else if ((options.calc_model == CALC_TI82) || (options.calc_model == CALC_TI85)) { ret = tilp_calc_recv_var(); if (ret < 0) return; else if (ret > 0) save_group(); } clist_refresh(); labels_refresh(); }
// trash TILP_EXPORT void on_tilp_button11_clicked(GtkButton* button, gpointer user_data) { tilp_file_selection_delete(); clist_refresh(); labels_refresh(); }
void dbgheap_refresh_window(void) { if(!options3.heap.closed) { clist_refresh(store); } }
// Toggle breakpoint GLADE_CB void dbgcode_button6_clicked (GtkButton *button, gpointer user_data) { //GtkWidget *list = GTK_WIDGET(button); // arg are swapped, why ? GtkTreeView *view = GTK_TREE_VIEW(list); GtkTreeModel *model = gtk_tree_view_get_model(view); GtkListStore *store = GTK_LIST_STORE(model); GtkTreeSelection *selection; GtkTreeIter iter; gboolean valid; gchar *str; uint32_t addr; selection = gtk_tree_view_get_selection(view); valid = gtk_tree_selection_get_selected(selection, NULL, &iter); gtk_tree_model_get(model, &iter, COL_ADDR, &str, -1); sscanf(str, "%x", &addr); if(g_list_find(bkpts.code, GINT_TO_POINTER(addr)) == NULL) ti68k_bkpt_set_address(addr); else ti68k_bkpt_del_address(addr); clist_refresh(store); refresh_dbgbkpts_window(); }
GLADE_CB void on_romversion_del1_clicked (GtkButton *button, gpointer user_data) { GtkTreeView *view = GTK_TREE_VIEW(button); GtkTreeModel *model = gtk_tree_view_get_model(view); GtkListStore *store = GTK_LIST_STORE(model); GtkTreeSelection *selection = gtk_tree_view_get_selection(view); GtkTreeIter iter; gchar *filename; gchar *path; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1); path = g_strconcat(inst_paths.img_dir, filename, NULL); // delete unlink(path); g_free(filename); g_free(path); } clist_refresh(store); }
// refresh TILP_EXPORT void on_tilp_button12_clicked(GtkButton* button, gpointer user_data) { if (!local.copy_cut) tilp_file_selection_destroy(); clist_refresh(); labels_refresh(); }
GLADE_CB gboolean on_treeview2_button_press_event(GtkWidget* widget, GdkEventButton* event, gpointer user_data) { GtkTreeView *view = GTK_TREE_VIEW(widget); GtkTreeModel *model = GTK_TREE_MODEL(list); GtkTreePath *path; GtkTreeViewColumn *column; GtkTreeIter iter; GdkEventButton *bevent; gint tx = (gint) event->x; gint ty = (gint) event->y; gint cx, cy; FileEntry *fe; gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx, &cy); switch (event->type) { case GDK_BUTTON_PRESS: if (event->button == 3) { bevent = (GdkEventButton *) (event); gtk_menu_popup(GTK_MENU(create_clist_rbm()), NULL, NULL, NULL, NULL, bevent->button, bevent->time); return TRUE; } break; case GDK_2BUTTON_PRESS: if (path == NULL) return FALSE; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COLUMN_DATA, &fe, -1); if (S_ISDIR(fe->attrib)) { // go into folder tilp_file_chdir(fe->name); g_free(local.cwdir); local.cwdir = g_get_current_dir(); clist_refresh(); labels_refresh(); } break; default: break; } return FALSE; // pass event on }
GLADE_CB void on_romversion_add1_clicked (GtkButton *button, gpointer user_data) { GtkTreeView *view = GTK_TREE_VIEW(button); GtkTreeModel *model = gtk_tree_view_get_model(view); GtkListStore *store = GTK_LIST_STORE(model); display_import_romversion_dbox(); clist_refresh(store); }
GtkWidget* refresh_dbgcode_window(void) { static GtkWidget *wnd = NULL; if(!already_open) wnd = display_dbgcode_window(); gtk_widget_set_sensitive(list, TRUE); tb_set_states(1, 1, 1, 1, 0, 1); gtk_list_store_clear(store); clist_refresh(store); return wnd; }
// change folder TILP_EXPORT void on_button14_clicked(GtkButton* button, gpointer user_data) { gchar *folder; folder = msg_entry(_("Path"), _("Enter new path"), local.cwdir); if(folder != NULL) { if(g_file_test(folder, G_FILE_TEST_IS_DIR)) { tilp_file_chdir(folder); g_free(local.cwdir); local.cwdir = g_get_current_dir(); clist_refresh(); labels_refresh(); } g_free(folder); } }
GtkWidget* dbgheap_display_window(void) { #ifdef WND_STATE if(!options3.heap.minimized) { gtk_window_resize(GTK_WINDOW(dbgw.heap), options3.heap.rect.w, options3.heap.rect.h); gtk_window_move(GTK_WINDOW(dbgw.heap), options3.heap.rect.x, options3.heap.rect.y); } else gtk_window_iconify(GTK_WINDOW(dbgw.heap)); #endif clist_refresh(store); if(!GTK_WIDGET_VISIBLE(dbgw.heap) && !options3.heap.closed) gtk_widget_show(dbgw.heap); return dbgw.heap; }
// make new dir TILP_EXPORT void on_tilp_button10_clicked(GtkButton* button, gpointer user_data) { gchar *utf8 = NULL; gsize br, bw; gchar *dirname; utf8 = gif->msg_entry(_("Make a new directory"), _("Name: "), _("new_directory")); if (utf8 == NULL) return; dirname = g_filename_from_utf8(utf8, -1, &br, &bw, NULL); g_free(utf8); tilp_file_mkdir(dirname); g_free(dirname); clist_refresh(); labels_refresh(); }
GLADE_CB void on_break1_activate (GtkMenuItem *menuitem, gpointer user_data) { // Mode 1 is fastest #if 1 //GtkWidget *list = (GtkWidget *)(menuitem); // arg are swapped, why ? GtkTreeView *view = GTK_TREE_VIEW(list); GtkTreeModel *model = gtk_tree_view_get_model(view); GtkListStore *store = GTK_LIST_STORE(model); ti68k_engine_halt(); gtk_widget_set_sensitive(list, TRUE); tb_set_states(1, 1, 1, 1, 0, 1); clist_refresh(store); #else ti68k_debug_break(); #endif }
GtkWidget* dbgheap_display_window(void) { if(!already_open) wnd = dbgheap_create_window(); #ifdef WND_STATE if(!options3.heap.minimized) { gtk_window_resize(GTK_WINDOW(wnd), options3.heap.rect.w, options3.heap.rect.h); gtk_window_move(GTK_WINDOW(wnd), options3.heap.rect.x, options3.heap.rect.y); } else gtk_window_iconify(GTK_WINDOW(wnd)); #endif clist_refresh(store); gtk_widget_show(wnd); return wnd; }
// Recv TIGroup TILP_EXPORT void on_tilp_button7_clicked(GtkButton* button, gpointer user_data) { char* src_filename; const char *dst_filename; const char *dst_filename2; int ret; int mode = TIG_ALL; ret = backup_box(_("Backup"), _("Data to backup:"), &mode); if(ret != BUTTON1) return; if (tilp_calc_recv_tigroup(mode) != 0) return; src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_TIGROUP, NULL); dst_filename = create_fsel(local.cwdir, "backup", "*.tig", TRUE); if(!dst_filename) { g_free(src_filename); return; } if (!strcmp(tifiles_fext_get(dst_filename), "")) dst_filename2 = g_strconcat(dst_filename, ".tig", NULL); else dst_filename2 = g_strdup(dst_filename); //g_free((void *)dst_filename); if (dst_filename2) { tilp_file_move_with_check(src_filename, dst_filename2); } g_free(src_filename); g_free((void *)dst_filename2); tilp_dirlist_local(); clist_refresh(); labels_refresh(); }
static int save_group(void) { char* src_filename; const char *dst_filename; const char *dst_filename2; char *ext; src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_GROUP, ".", tifiles_fext_of_group(options.calc_model), NULL); ext = g_strconcat("*.", tifiles_fext_of_group(options.calc_model), NULL); dst_filename = create_fsel(local.cwdir, "group", ext, TRUE); g_free(ext); if (!dst_filename) { g_free(src_filename); return -1; } if (!strcmp(tifiles_fext_get(dst_filename), "")) dst_filename2 = g_strconcat(dst_filename, ".", tifiles_fext_of_group(options.calc_model), NULL); else dst_filename2 = g_strdup(dst_filename); //g_free((void *)dst_filename); if (dst_filename2) { tilp_file_move_with_check(src_filename, dst_filename2); } g_free(src_filename); g_free((void *)dst_filename2); tilp_dirlist_local(); clist_refresh(); labels_refresh(); return 0; }
// Backup TILP_EXPORT void on_tilp_button3b_clicked(GtkButton* button, gpointer user_data) { char* src_filename; const char *dst_filename; const char *dst_filename2; char *ext; if (tilp_calc_recv_backup() != 0) return; src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_BACKUP, NULL); ext = g_strconcat("*.", tifiles_fext_of_backup(options.calc_model), NULL); dst_filename = create_fsel(local.cwdir, "backup", ext, TRUE); g_free(ext); if (!dst_filename) { g_free(src_filename); return; } if (!strcmp(tifiles_fext_get(dst_filename), "")) dst_filename2 = g_strconcat(dst_filename, ".", tifiles_fext_of_backup(options.calc_model), NULL); else dst_filename2 = g_strdup(dst_filename); //g_free((void *)dst_filename); if (dst_filename2) { tilp_file_move_with_check(src_filename, dst_filename2); } g_free(src_filename); g_free((void *)dst_filename2); tilp_dirlist_local(); clist_refresh(); labels_refresh(); }
TILP_EXPORT void on_rom_dump1_activate(GtkMenuItem* menuitem, gpointer user_data) { char* src_filename; const char *dst_filename; const char *dst_filename2; char filename[128]; if (tilp_calc_rom_dump()) return; src_filename = g_strconcat(g_get_tmp_dir(), G_DIR_SEPARATOR_S, TMPFILE_ROMDUMP, NULL); sprintf(filename, "dump%s", tifiles_model_to_string(options.calc_model)); dst_filename = create_fsel(local.cwdir, filename, "*.rom", TRUE); if (!dst_filename) { g_free(src_filename); return; } if (!strcmp(tifiles_fext_get(dst_filename), "")) dst_filename2 = g_strconcat(dst_filename, ".", "rom", NULL); else dst_filename2 = g_strdup(dst_filename); //g_free((void *)dst_filename); if (dst_filename2) { tilp_file_move_with_check(src_filename, dst_filename2); } g_free(src_filename); g_free((void *)dst_filename2); tilp_dirlist_local(); clist_refresh(); labels_refresh(); }
static void refresh_page(int page, int offset) { GtkNotebook *nb = GTK_NOTEBOOK(notebook); GtkWidget *tab; GtkWidget *label; G_CONST_RETURN gchar *text; uint32_t addr, len = DUMP_SIZE; GList *l, *elt; GtkWidget *list; GtkTreeView *view; GtkTreeModel *model; GtkListStore *store; gchar *str; gint i; // retrieve addr by tab name tab = gtk_notebook_get_nth_page(nb, page); label = gtk_notebook_get_tab_label(nb, tab); text = gtk_label_get_text(GTK_LABEL(label)); // get list pointer (we have 1 child) l = gtk_container_get_children(GTK_CONTAINER(nb)); elt = g_list_nth(l, page); list = GTK_WIDGET(elt->data); view = GTK_TREE_VIEW(list); model = gtk_tree_view_get_model(view); store = GTK_LIST_STORE(model); // get new address sscanf(text, "%x", &addr); len = DUMP_SIZE; addr += offset; addr &= 0xffffff; // refresh only if mem changed (speed-up) #ifndef FORCE_REFRESH if(!offset) { static uint8_t old_array[DUMP_SIZE] = { 0 }; gint diff = 0; // can't use memcmp due to banking for(i = 0; i < DUMP_SIZE; i++) { uint8_t old = old_array[i]; uint8_t mem = mem_rd_byte(addr + i); if(old != mem) { old = mem; diff = !0; } } if(!diff) return; } #endif // refresh tab str = g_strdup_printf("%06x", addr); gtk_label_set_text(GTK_LABEL(label), str); g_free(str); // and list clist_refresh(store, addr, len <= DUMP_SIZE ? len : DUMP_SIZE); // set column for(i = COL_0; i <= COL_F; i++) { GtkTreeViewColumn *col; col = gtk_tree_view_get_column(view, i); str = g_strdup_printf("%X", (addr + i - 1) & 0xf); gtk_tree_view_column_set_title(col, str); g_free(str); } }
int main(int argc, char *argv[]) { GdkPixbuf *icon; /* Redirect standard output to a file - printing to the Windows terminal slows operation down way too much */ #ifdef __WIN32__ gchar *tmp; FILE *log_file; tmp = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, LOG_FILE, NULL); log_file = g_fopen(tmp, "wt"); g_free(tmp); if (log_file != NULL) g_log_set_default_handler(&default_log_handler, log_file); #endif // Force GLib 2.32+ to print info and debug messages like older versions did, unless this variable is already set. // No effect on earlier GLib versions. g_setenv("G_MESSAGES_DEBUG", "all", /* overwrite = */ FALSE); /* Init the tilp core */ tilp_init(&argc, &argv); /* Init GTK+ */ gtk_init(&argc, &argv); add_pixmap_directory(inst_paths.pixmap_dir); add_pixmap_directory(inst_paths.icon_dir); splash_screen_start(); /* Get rid of glib, gdk, gtk warnings when compiled in Release mode */ #if !defined(_DEBUG) g_log_set_handler ("GLib", G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, my_blackhole_log_handler, NULL); g_log_set_handler ("Gdk", G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, my_blackhole_log_handler, NULL); g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, my_blackhole_log_handler, NULL); g_log_set_handler ("GLib", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, my_blackhole_log_handler, NULL); #endif /* Init the GUI-independent functions */ tilp_gif_set_gtk(); tilp_update_set_gtk(); /* Create the main window */ if(!(working_mode & MODE_CMD)) { #if WITH_KDE splash_screen_set_label(_("Initializing KDE...")); sp_kde_init(argc, argv, "tilp", _("TiLP"), VERSION, _("Tilp Is a Linking Program"), "Copyright (c) 1999-2008 Romain Lievin", "http://lpg.ticalc.org/prj_tilp/", "*****@*****.**"); atexit(sp_kde_finish); // Not needed unless we want to add a DCOP interface. // g_timeout_add(26, sp_kde_process_qt_events, NULL); #endif splash_screen_set_label(_("Loading GUI...")); main_wnd = display_tilp_dbox(); } /* Do a local directory list */ g_free(local.cwdir); local.cwdir = g_get_current_dir(); /* Update the local view (not visible yet) */ if(!(working_mode & MODE_CMD)) { clist_refresh(); labels_refresh(); } /* Inits are done ! */ working_mode &= ~MODE_INI; tilp_err(0); // pop errors (display console mode) /* In cmdline, does not display the entire window, only the pbar */ if(!(working_mode & MODE_CMD)) { gtk_widget_show(main_wnd); toolbar_refresh_buttons(); icon = create_pixbuf("tilp.xpm"); gtk_window_set_icon(GTK_WINDOW(main_wnd), icon); gdk_window_set_icon_name(main_wnd->window, _("TiLP2")); } /* If variables have been passed on the command line in GUI mode then send them */ if((working_mode & MODE_GUI) && (working_mode & MODE_CMD)) { splash_screen_set_label(_("Command line...")); if(local.selection0 || local.selection2 || local.selection5) on_tilp_send(""); else if(local.selection4) tilp_cmdline_send(); } /* GTK main loop */ splash_screen_stop(); if(!(working_mode & MODE_CMD)) gtk_main(); tilp_exit(); return 0; }
gint display_options_dbox() { GtkBuilder *builder; GError* error = NULL; GtkWidget *dbox; GtkWidget *data; gint result; builder = gtk_builder_new(); if (!gtk_builder_add_from_file (builder, tilp_paths_build_builder("options.ui"), &error)) { g_warning (_("Couldn't load builder file: %s\n"), error->message); g_error_free (error); return 0; // THIS RETURNS ! } gtk_builder_connect_signals(builder, NULL); dbox = GTK_WIDGET (gtk_builder_get_object (builder, "options_dbox")); gtk_dialog_set_alternative_button_order(GTK_DIALOG(dbox), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL,-1); memcpy(&tmp_options, &options, sizeof(options)); if(options.calc_model == CALC_NSPIRE) { data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton31")); gtk_widget_set_sensitive(data, FALSE); data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton32")); gtk_widget_set_sensitive(data, FALSE); } else { data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton31")); if (!options.backup_as_tigroup) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE); data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton32")); if (options.backup_as_tigroup) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE); } if(options.calc_model == CALC_NSPIRE) { data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton81")); gtk_widget_set_sensitive(data, FALSE); data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton82")); gtk_widget_set_sensitive(data, FALSE); } else { data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton81")); if (!options.recv_as_group) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE); data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton82")); if (options.recv_as_group) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE); } data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton51")); if (options.show_all) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE); data = GTK_WIDGET (gtk_builder_get_object (builder, "radiobutton52")); if (!options.show_all) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE); data = GTK_WIDGET (gtk_builder_get_object (builder, "checkbutton2")); if (options.overwrite == CONFIRM_YES) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), TRUE); else gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(data), FALSE); result = gtk_dialog_run(GTK_DIALOG(dbox)); switch (result) { case GTK_RESPONSE_OK: memcpy(&options, &tmp_options, sizeof(tmp_options)); clist_refresh(); break; case GTK_RESPONSE_HELP: break; default: break; } gtk_widget_destroy(dbox); return 0; }
GLADE_CB void on_go_to_pc1_activate (GtkMenuItem *menuitem, gpointer user_data) { clist_refresh(store); }