GLADE_CB void on_mkdir_clicked (GtkToolButton *toolbutton, gpointer user_data) { gchar *ret; GNode *node; VarEntry *ve; if(GFMFile.trees.vars == NULL) return; if(tifiles_calc_is_ti8x(GFMFile.model)) return; ret = msgbox_input(_("New Folder"), _("folder"), _("Name of folder to create:")); if(ret == NULL) return; ret[8] = '\0'; ve = tifiles_ve_create(); strcpy(ve->name, ret); ve->type = tifiles_folder_type(GFMFile.model); node = g_node_new(ve); g_node_append(GFMFile.trees.vars, node); ctree_refresh(); labels_refresh(); }
static gboolean allow_selection(GtkTreeSelection * selection, GtkTreeModel * model, GtkTreePath * path, gboolean path_currently_selected, gpointer data) { GtkTreeIter iter; VarEntry *ve; (void)selection; (void)data; (void)path_currently_selected; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COLUMN_DATA, &ve, -1); if (ve == NULL) return FALSE; if (ve->type == tifiles_folder_type(GFMFile.model)) return FALSE; if(ve->type == tifiles_flash_type(GFMFile.model)) return FALSE; return TRUE; }
static gboolean select_func(GtkTreeSelection * selection, GtkTreeModel * model, GtkTreePath * path, gboolean path_currently_selected, gpointer data) { GtkTreeIter iter; VarEntry *ve; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COLUMN_DATA, &ve, -1); if (ve == NULL) return FALSE; if (ve->type == tifiles_folder_type(options.calc_model)) return FALSE; return TRUE; }
/** * ti9x_file_write_regular: * @filename: name of single/group file where to write or NULL. * @content: the file content to write. * @real_filename: pointer address or NULL. Must be freed if needed when no longer needed. * * Write one (or several) variable(s) into a single (group) file. If filename is set to NULL, * the function build a filename from varname and allocates resulting filename in %real_fname. * %filename and %real_filename can be NULL but not both ! * * %real_filename must be freed when no longer used. * * Return value: an error code, 0 otherwise. **/ int ti9x_file_write_regular(const char *fname, Ti9xRegular *content, char **real_fname) { FILE *f; unsigned int i; char *filename = NULL; uint32_t offset = 0x52; int **table; unsigned int num_folders; char default_folder[FLDNAME_MAX]; char fldname[FLDNAME_MAX], varname[VARNAME_MAX]; if (content->entries == NULL) { tifiles_warning("%s: skipping content with NULL content->entries", __FUNCTION__); return 0; } if (fname != NULL) { filename = g_strdup(fname); if (filename == NULL) { return ERR_MALLOC; } } else { if (content->entries[0]) { filename = tifiles_build_filename(content->model_dst, content->entries[0]); } else { tifiles_warning("%s: asked to build a filename from null content->entries[0], bailing out", __FUNCTION__); if (real_fname != NULL) { *real_fname = NULL; } return 0; } if (real_fname != NULL) { *real_fname = g_strdup(filename); } } // build the table of folder & variable entries table = tifiles_create_table_of_entries((FileContent *)content, &num_folders); if (table == NULL) { g_free(filename); return ERR_MALLOC; } f = g_fopen(filename, "wb"); if (f == NULL) { tifiles_info( "Unable to open this file: %s", filename); tifiles_free_table_of_entries(table); g_free(filename); return ERR_FILE_OPEN; } // write header if (fwrite_8_chars(f, tifiles_calctype2signature(content->model)) < 0) goto tfwr; if (fwrite(fsignature, 1, 2, f) < 2) goto tfwr; if (content->num_entries == 1) // folder entry for single var is placed here { strncpy(content->default_folder, content->entries[0]->folder, sizeof(content->default_folder) - 1); content->default_folder[sizeof(content->default_folder) - 1] = 0; } ticonv_varname_to_tifile_sn(content->model, content->default_folder, default_folder, sizeof(default_folder), -1); if (fwrite_8_chars(f, default_folder) < 0) goto tfwr; if (fwrite_n_bytes(f, 40, (uint8_t *)content->comment) < 0) goto tfwr; if (content->num_entries > 1) { if (fwrite_word(f, (uint16_t) (content->num_entries + num_folders)) < 0) goto tfwr; offset += 16 * (content->num_entries + num_folders - 1); } else { if (fwrite_word(f, 1) < 0) goto tfwr; } // write table of entries for (i = 0; table[i] != NULL; i++) { VarEntry *fentry; int j, idx = table[i][0]; fentry = content->entries[idx]; if (fentry == NULL) { tifiles_warning("%s: skipping null content entry %d", __FUNCTION__, i); continue; } if (content->num_entries > 1) // single var does not have folder entry { if (fwrite_long(f, offset) < 0) goto tfwr; ticonv_varname_to_tifile_sn(content->model, fentry->folder, fldname, sizeof(fldname), -1); if (fwrite_8_chars(f, fldname) < 0) goto tfwr; if (fwrite_byte(f, (uint8_t)tifiles_folder_type(content->model)) < 0) goto tfwr; if (fwrite_byte(f, 0x00) < 0) goto tfwr; for (j = 0; table[i][j] != -1; j++); if (fwrite_word(f, (uint16_t) j) < 0) goto tfwr; } for (j = 0; table[i][j] != -1; j++) { int idx2 = table[i][j]; VarEntry *entry = content->entries[idx2]; uint8_t attr = ATTRB_NONE; if (fwrite_long(f, offset) < 0) goto tfwr; ticonv_varname_to_tifile_sn(content->model, entry->name, varname, sizeof(varname), entry->type); if (fwrite_8_chars(f, varname) < 0) goto tfwr; if (fwrite_byte(f, entry->type) < 0) goto tfwr; attr = (entry->attr == ATTRB_ARCHIVED) ? 3 : entry->attr; if (fwrite_byte(f, attr) < 0) goto tfwr; if (fwrite_word(f, 0) < 0) goto tfwr; offset += entry->size + 4 + 2; } } if (fwrite_long(f, offset) < 0) goto tfwr; if (fwrite_word(f, 0x5aa5) < 0) goto tfwr; // write data for (i = 0; table[i] != NULL; i++) { int j; for (j = 0; table[i][j] != -1; j++) { int idx = table[i][j]; VarEntry *entry = content->entries[idx]; uint16_t sum; if (fwrite_long(f, 0) < 0) goto tfwr; if (fwrite(entry->data, 1, entry->size, f) < entry->size) goto tfwr; sum = tifiles_checksum(entry->data, entry->size); if (fwrite_word(f, sum) < 0) goto tfwr; } } tifiles_free_table_of_entries(table); g_free(filename); fclose(f); return 0; tfwr: // release on exit tifiles_critical("%s: error writing file %s", __FUNCTION__, filename); tifiles_free_table_of_entries(table); g_free(filename); fclose(f); return ERR_FILE_IO; }
GLADE_CB gboolean on_treeview1_button_press_event(GtkWidget * widget, GdkEventButton * event, gpointer user_data) { GtkTreeView *view = GTK_TREE_VIEW(ctree_wnd); GtkTreeModel *model = GTK_TREE_MODEL(tree); GtkTreePath *path; GtkTreeViewColumn *column; GtkTreeIter parent; VarEntry *ve; gint tx = (gint) event->x; gint ty = (gint) event->y; gint cx, cy; gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx, &cy); if (path == NULL) return FALSE; gtk_tree_model_get_iter(model, &parent, path); gtk_tree_model_get(model, &parent, COLUMN_DATA, &ve, -1); path_to_drag = path; gtk_tree_model_get(model, &parent, COLUMN_NAME, &name_to_drag, -1); if(event->type == GDK_BUTTON_PRESS) { if(event->button == 1) { /* printf("clicked !\n"); ctree_select_vars(!0); printf("selected ?!\n"); */ } else if (event->button == 3) { GdkEventButton *bevent = (GdkEventButton *) (event); gtk_menu_popup(GTK_MENU(create_ctree_rbm()), NULL, NULL, NULL, NULL, bevent->button, bevent->time); return TRUE; } } if (event->type == GDK_2BUTTON_PRESS) { gchar *name; gtk_tree_model_get(model, &parent, COLUMN_NAME, &name, -1); if (!strcmp(name, NODE1)) display_screenshot_dbox(); else if (!strcmp(name, NODE2)) on_rom_dump1_activate(NULL, NULL); else if (!strcmp(name, NODE3)) on_tilp_button3_clicked(NULL, NULL); else if(!strcmp(name, NODE5)) tilp_calc_idlist(0); else if(!strcmp(name, NODE6)) display_clock_dbox(); else if(!strncmp(name, tifiles_model_to_string(options.calc_model), 4)) { CalcInfos infos; tilp_calc_get_infos(&infos); } return TRUE; } if (ve == NULL) return FALSE; if (ve->type != tifiles_folder_type(options.calc_model)) return FALSE; name_to_drag = NODEx; return FALSE; // pass the event on }