static void tree_selection_changed(GtkTreeSelection* selection, gpointer user_data) { GList *_list; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *sel; // destroy selection tilp_local_selection_destroy(); sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(ctree_wnd)); // create local selection for(_list = gtk_tree_selection_get_selected_rows(selection, &model); _list; _list = g_list_next(_list)) { GtkTreePath *path = _list->data; FileEntry *fe; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COLUMN_DATA, &fe, -1); tilp_local_selection_add(fe->name); } g_list_foreach(_list, (GFunc)gtk_tree_path_free, NULL); g_list_free(_list); // create file selection _list = gtk_tree_selection_get_selected_rows(selection, &model); if(_list) { tilp_file_selection_destroy(); for(; _list; _list = g_list_next(_list)) { GtkTreePath *path = _list->data; FileEntry *fe; gchar *full_path; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COLUMN_DATA, &fe, -1); full_path = g_strconcat(local.cwdir, G_DIR_SEPARATOR_S, fe->name, NULL); tilp_file_selection_add(full_path); } g_list_foreach(_list, (GFunc)gtk_tree_path_free, NULL); g_list_free(_list); } }
// Send TILP_EXPORT void on_tilp_button6_clicked(GtkButton* button, gpointer user_data) { gchar** filenames; gchar** ptr; char *ext; ext = g_strconcat("*.", "*", NULL); filenames = create_fsels(local.cwdir, NULL, ext); g_free(ext); if(filenames == NULL) return; for(ptr = filenames; *ptr != NULL; ptr++) tilp_local_selection_add(*ptr); g_strfreev(filenames); on_tilp_send(""); tilp_local_selection_destroy(); }
// retrieve data TILP_EXPORT void on_treeview1_drag_data_received(GtkWidget * widget, GdkDragContext * drag_context, gint x, gint y, GtkSelectionData * data, guint info, guint _time, gpointer user_data) { GtkTreeView *view = GTK_TREE_VIEW(widget); GtkTreeModel *model = gtk_tree_view_get_model(view); GtkTreePath *path; GtkTreeViewDropPosition pos; GtkTreeIter iter; VarEntry *ve; gchar *name; gchar *target = NULL; gboolean success = FALSE; if ((data->length >= 0) && (data->format == 8)) { if (drag_context->action == GDK_ACTION_ASK) { drag_context->action = GDK_ACTION_COPY; } if (info == TARGET_TEXT_URI_LIST) { int i; gchar **list; //list = g_uri_list_extract_uris((gchar *)gtk_selection_data_get_data(data)); list = gtk_selection_data_get_uris(data); tilp_local_selection_destroy(); for (i = 0;list[i] != NULL; i++) { name = g_filename_from_uri(list[i], NULL, NULL); tilp_local_selection_add(name); } g_strfreev(list); } gtk_tree_view_get_dest_row_at_pos(view, x, y, &path, &pos); if (path == NULL) goto end; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get(model, &iter, COLUMN_DATA, &ve, -1); gtk_tree_model_get(model, &iter, COLUMN_NAME, &name, -1); //g_print("Received \"%s\" as selection information.\n", name); if(strchr(name, '#')) // Calc { } else if(!strcmp(name, NODE4)) // Applications { // send to flash target=(char *)"<FLASH>"; } else if (ve && tifiles_has_folder(options.calc_model)) { // send to folder if(!strcmp(ve->folder, "")) target = ve->name; else target = ve->folder; } else if(!strcmp(name, NODE2)) // Operating System { target=(char *)""; } else { if(options.calc_model == CALC_NSPIRE) { gif->msg_box1(_("Error"), "You have to drag&drop to a target folder!"); return; } else { // send standard target=(char *)""; } } if (target!=NULL) on_tilp_send(target); tilp_local_selection_destroy(); success = TRUE; } end: gtk_drag_finish(drag_context, success, FALSE, _time); return; }
void clist_refresh(void) { GtkTreeView *view = GTK_TREE_VIEW(clist_wnd); GtkTreeSelection *selection; GtkTreeViewColumn *col; GtkTreeIter iter; GdkPixbuf *pix1, *pix2, *pix; GList *dirlist; gsize br, bw; gchar *utf8; int i; if(working_mode & MODE_CMD) return; // reparse folders tilp_local_selection_destroy(); tilp_dirlist_local(); selection = gtk_tree_view_get_selection(view); g_signal_handlers_block_by_func(G_OBJECT(selection), tree_selection_changed, NULL); gtk_list_store_clear(list); g_signal_handlers_unblock_by_func(G_OBJECT(selection), tree_selection_changed, NULL); // sort files for(i = 0; i < CLIST_NVCOLS; i++) { col = gtk_tree_view_get_column(view, i); gtk_tree_view_column_set_sort_indicator(col, FALSE); } switch (options.local_sort) { case SORT_BY_NAME: tilp_file_sort_by_name(); col = gtk_tree_view_get_column(view, COLUMN_NAME); gtk_tree_view_column_set_sort_indicator(col, TRUE); gtk_tree_view_column_set_sort_order(col, options.local_sort_order ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); break; case SORT_BY_TYPE: tilp_file_sort_by_type(); col = gtk_tree_view_get_column(view, COLUMN_TYPE); gtk_tree_view_column_set_sort_indicator(col, TRUE); gtk_tree_view_column_set_sort_order(col, options.local_sort_order ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); break; case SORT_BY_DATE: tilp_file_sort_by_date(); col = gtk_tree_view_get_column(view, COLUMN_DATE); gtk_tree_view_column_set_sort_indicator(col, TRUE); gtk_tree_view_column_set_sort_order(col, options.local_sort_order ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); break; case SORT_BY_SIZE: tilp_file_sort_by_size(); col = gtk_tree_view_get_column(view, COLUMN_SIZE); gtk_tree_view_column_set_sort_indicator(col, TRUE); gtk_tree_view_column_set_sort_order(col, options.local_sort_order ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); break; } pix2 = gtk_widget_render_icon(GTK_WIDGET(view), GTK_STOCK_DIRECTORY, GTK_ICON_SIZE_MENU, NULL); pix1 = gtk_widget_render_icon(GTK_WIDGET(view), GTK_STOCK_GO_UP, GTK_ICON_SIZE_MENU, NULL); for (dirlist = local.dirlist; dirlist != NULL; dirlist = dirlist->next) { FileEntry *fe = (FileEntry *) dirlist->data; gboolean b; CalcModel s = tifiles_file_get_model(fe->name); CalcModel t = options.calc_model; b = options.show_all || S_ISDIR(fe->attrib) || tifiles_file_is_tib(fe->name) || #if 0 tifiles_file_is_tigroup(fe->name) || #else tifiles_file_test(fe->name, TIFILE_TIGROUP, options.calc_model) || #endif tifiles_calc_are_compat(s, t); if(!b) continue; if (S_ISDIR(fe->attrib)) { pix = strcmp(fe->name, "..") ? pix2 : pix1; } else { char icon_name[2048]; strcpy(icon_name, tifiles_file_get_icon(fe->name)); if (!strcmp(icon_name, "")) strcpy(icon_name, "TIicon1"); strcat(icon_name, ".ico"); tilp_file_underscorize(icon_name); pix = create_pixbuf(icon_name); } // filenames are stored in the 'glib filename encoding' and GTK+ uses utf8 utf8 = g_filename_to_utf8(fe->name, -1, &br, &bw, NULL); gtk_list_store_append(list, &iter); gtk_list_store_set(list, &iter, COLUMN_NAME, utf8, COLUMN_TYPE, tilp_file_get_type(fe), COLUMN_SIZE, tilp_file_get_size(fe), COLUMN_DATE, tilp_file_get_date(fe), COLUMN_DATA, (gpointer) fe, COLUMN_ICON, pix, -1); g_free(utf8); } g_object_unref(pix1); g_object_unref(pix2); }