Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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);
}
Пример #4
0
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);
}