static void SetFileEntry( GtkWidget *widget, WidgetData *wdata, _FileEntry *data) { static GHashTable *connectlist = NULL; GtkPandaFileEntry *fentry; GtkWidget *subWidget; WidgetData *subdata; char *longname; char *folder; ENTER_FUNC; SetCommon(widget,wdata); fentry = GTK_PANDA_FILE_ENTRY(widget); g_return_if_fail(data->binary != NULL); longname = (char *)glade_get_widget_long_name(widget); if (connectlist == NULL) { connectlist = NewNameHash(); } if (g_hash_table_lookup(connectlist, longname) == NULL) { g_hash_table_insert(connectlist, longname, longname); g_signal_connect_after(G_OBJECT(widget), "done_action", G_CALLBACK(SavePreviousFolder), NULL); } folder = GetWidgetCache(longname); if (folder == NULL) { folder = ""; } gtk_panda_file_entry_set_folder(fentry, folder); if (LBS_Size(data->binary) > 0) { //download gtk_panda_file_entry_set_mode(fentry, GTK_FILE_CHOOSER_ACTION_SAVE); gtk_panda_file_entry_set_data(fentry, LBS_Size(data->binary), LBS_Body(data->binary)); //set subwidget subdata = GetWidgetData(data->subname); subWidget = GetWidgetByLongName(data->subname); if (subdata != NULL || subWidget != NULL) { SetEntry(subWidget, subdata,(_Entry *)subdata->attrs); } g_signal_emit_by_name(G_OBJECT(widget), "browse_clicked", NULL); } else { //upload gtk_panda_file_entry_set_mode(GTK_PANDA_FILE_ENTRY(widget), GTK_FILE_CHOOSER_ACTION_OPEN); } LEAVE_FUNC; }
static void GetFileEntry( GtkWidget *widget, _FileEntry *data) { GtkFileChooserAction mode; GtkPandaFileEntry *fe; GError *error = NULL; gchar *contents; gsize size; ENTER_FUNC; fe = GTK_PANDA_FILE_ENTRY(widget); mode = gtk_panda_file_entry_get_mode(fe); if (mode == GTK_FILE_CHOOSER_ACTION_SAVE) { data->path = NULL; } else { data->path = gtk_editable_get_chars( GTK_EDITABLE(fe->entry),0,-1); if(!g_file_get_contents(data->path, &contents, &size, &error)) { g_error_free(error); return; } data->binary->body = contents; data->binary->size = data->binary->asize = data->binary->ptr = size; } LEAVE_FUNC; }
static void SavePreviousFolder( GtkWidget *widget, WidgetData *wdata, gpointer data) { GtkPandaFileEntry *fentry; char *longname; fentry = GTK_PANDA_FILE_ENTRY(widget); longname = (char *)glade_get_widget_long_name(widget); SetWidgetCache(longname, fentry->folder); }
static void file_entry_build_children (GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info, const char *longname) { GList *tmp; GladeWidgetInfo *cinfo = NULL; GtkEntry *entry; for (tmp = info->children; tmp; tmp = tmp->next) { GList *tmp2; gchar *child_name = NULL; cinfo = tmp->data; for (tmp2 = cinfo->attributes; tmp2; tmp2 = tmp2->next) { GladeAttribute *attr = tmp2->data; if (!strcmp(attr->name, "child_name")) { child_name = attr->value; break; } } if (child_name && !strcmp(child_name, "GnomeEntry:entry")) break; } if (!tmp) return; entry = GTK_ENTRY(GTK_PANDA_FILE_ENTRY(w)->entry); for (tmp = cinfo->attributes; tmp; tmp = tmp->next) { GladeAttribute *attr = tmp->data; if (!strcmp(attr->name, "editable")) gtk_entry_set_editable(entry, attr->value[0] == 'T'); else if (!strcmp(attr->name, "text_visible")) gtk_entry_set_visibility(entry, attr->value[0] == 'T'); else if (!strcmp(attr->name, "text_max_length")) gtk_entry_set_max_length(entry, strtol(attr->value,NULL, 0)); else if (!strcmp(attr->name, "max_length")) gtk_entry_set_max_length(entry, strtol(attr->value,NULL, 0)); else if (!strcmp(attr->name, "text")) gtk_entry_set_text(entry, attr->value); } glade_xml_set_common_params(xml, GTK_WIDGET(entry), cinfo, longname); }