示例#1
0
void save_file_as_cb( GtkWidget *widget, AnypaperWindow *window )
{
	GtkWidget *dialog, *dialog_error;
	GtkFileFilter *filterImages, *filterAll;


	dialog = gtk_file_chooser_dialog_new ("Save as...",
					      GTK_WINDOW(window->priv->window),
					      GTK_FILE_CHOOSER_ACTION_SAVE,
					      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
					      NULL);

	filterImages = gtk_file_filter_new ();
	gtk_file_filter_set_name (GTK_FILE_FILTER(filterImages),"JPEG images");
	gtk_file_filter_add_mime_type(GTK_FILE_FILTER(filterImages), "image/jpeg/*");
	gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filterImages);

	filterAll = gtk_file_filter_new ();
	gtk_file_filter_set_name (GTK_FILE_FILTER(filterAll),"All files");
	gtk_file_filter_add_pattern(GTK_FILE_FILTER(filterAll), "*");
	gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filterAll);
	gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), FALSE);
	gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);

	gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), g_path_get_dirname (gtk_entry_get_text (GTK_ENTRY (window->priv->file_entry))));
	gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "Untitled image.png");

	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
	{
		char *filename, *down_filename;

		filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
		down_filename = g_ascii_strdown (filename, -1);

		if ((g_str_has_suffix (down_filename, ".jpg")) || (g_str_has_suffix (down_filename, ".jpeg"))) gdk_pixbuf_save (window->image->image, filename, "jpeg", NULL, "quality", "100", NULL);
		else if(g_str_has_suffix (down_filename, ".png")) gdk_pixbuf_save (window->image->image, filename, "png", NULL, NULL);
		else
		{
			dialog_error = gtk_message_dialog_new (GTK_WINDOW (window->priv->window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Invalid format");
			gtk_window_set_title (GTK_WINDOW (dialog_error), "Error");
		 	g_signal_connect_swapped (dialog_error, "response", G_CALLBACK (gtk_widget_destroy), dialog_error);
			gtk_widget_show(dialog_error);
		}
		g_free (filename);
		g_free (down_filename);
	}

	gtk_widget_destroy (dialog);
}
示例#2
0
void termit_on_save_session()
{
/*  // debug   
    termit_save_session("tmpSess");
    return;
*/
    gchar* fullPath = termit_get_xdg_data_path();
    
    GtkWidget* dlg = gtk_file_chooser_dialog_new(
        _("Save session"), 
        GTK_WINDOW(termit.main_window), 
        GTK_FILE_CHOOSER_ACTION_SAVE, 
        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
        GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
        NULL);
    gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dlg), TRUE);

    gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dlg), fullPath);
    gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dlg), "New session");

    if (gtk_dialog_run(GTK_DIALOG(dlg)) != GTK_RESPONSE_ACCEPT) {
        gtk_widget_destroy(dlg);
        g_free(fullPath);
        return;
    }

    gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlg));
    termit_save_session(filename);

    g_free(filename);
    gtk_widget_destroy(dlg);
    g_free(fullPath);
}
示例#3
0
void OnEnregSous(GtkWidget* widget, gpointer data) {
  (void) widget;
  (void) data;

  if (cur_image == NULL) {
    fprintf(stderr, "OnEnregSous: Given image is NULL.\n");
    return;
  }
  GtkFileFilter *pgm_filter = gtk_file_filter_new();
  gtk_file_filter_set_name(pgm_filter, "*.pgm");
  gtk_file_filter_add_pattern(pgm_filter, "*.pgm");
  GtkWidget *dialog = gtk_file_chooser_dialog_new("Enregistrer Sous",
      NULL,
      GTK_FILE_CHOOSER_ACTION_SAVE,
      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
      GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
      NULL);
  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
  //gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), default_folder_for_saving);
  gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "SansNom");
  gtk_file_chooser_add_filter(GTK_FILE_CHOOSER (dialog), pgm_filter);

  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
    char *nom_fichier = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));

    sauver_image_pgm(nom_fichier, cur_image);
    cur_image->path= my_strdup(nom_fichier);
    g_free (nom_fichier);
  }
  gtk_widget_destroy (dialog);
}
示例#4
0
/*
Sauvegarde d'un grille
@params	p_widget	Elément ayant déclencher la fonction
@params	user_data	Données transmis au callback
*/
void cb_save_file(GtkWidget *p_widget, gpointer user_data){
    GtkWidget *p_dialog_save;
    p_dialog_save = gtk_file_chooser_dialog_new ("Enregistrer un fichier",
                                            GTK_WINDOW(widgetCallback.entry1),
                                            GTK_FILE_CHOOSER_ACTION_SAVE,
                                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                            GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                                            NULL);

    gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(p_dialog_save), TRUE);

   if (gtk_dialog_run(GTK_DIALOG(p_dialog_save)) == GTK_RESPONSE_ACCEPT){ //Nom du fichier a été choisi
        char *filename;
        filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(p_dialog_save));

        int grid[9][9] = {{0}};
        int grid_fixes[9][9] = {{0}};

        //On récupère la grille
        get_grid(grid);
        get_fixed_grid(grid_fixes);

        save_grid_in_file(grid, grid_fixes, filename); //On sauvegarde
    }

    gtk_widget_destroy(p_dialog_save);

    //Parametres inutilises
    (void)p_widget;
}
示例#5
0
文件: mafile.c 项目: terraslav/matrix
void save_as_dialog(){
	char *pth = NULL, *nam = NULL;
	dialog = gtk_file_chooser_dialog_new ("Сохранить пазл как",
						(GtkWindow *)window,
						GTK_FILE_CHOOSER_ACTION_SAVE,
						GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
						GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
						NULL);
	gtk_file_chooser_set_do_overwrite_confirmation (
										GTK_FILE_CHOOSER (dialog), TRUE);
	if(last_opened_file){
		pth = get_file_path_name(last_opened_file, TRUE);
		nam = get_file_path_name(last_opened_file, FALSE);
		gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), pth);
		gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), nam);
	}
	else
		gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog),
														NEW_FILE_NAME);
	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT){
		if(last_opened_file) free(last_opened_file);
		last_opened_file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
	}
	gtk_widget_destroy (dialog);
	if(pth) free(pth); if(nam) free(nam);
}
示例#6
0
static gchar *file_dlg(lua_State* L, gboolean save, const gchar *path,	const gchar *mask, const gchar *name)
{
	gchar *rv=NULL;
	gchar *fullname = NULL;
	GtkWidget*dlg=NULL;
#if NEED_OVERWRITE_PROMPT
	gboolean accepted=FALSE;
#endif
	gint resp=GTK_RESPONSE_CANCEL;
	if (save) {
		dlg=gtk_file_chooser_dialog_new(_("Save file"),
					GTK_WINDOW(main_widgets->window), GTK_FILE_CHOOSER_ACTION_SAVE,
					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,	NULL);
#if NEED_OVERWRITE_PROMPT
		gtk_signal_connect(GTK_OBJECT(dlg),"response",G_CALLBACK(on_file_dlg_response),&accepted);
#else
		gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dlg), TRUE);
#endif
	} else {
		dlg=gtk_file_chooser_dialog_new(_("Open file"),
					GTK_WINDOW(main_widgets->window),	GTK_FILE_CHOOSER_ACTION_OPEN,
					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,	NULL);
	}
	if (name && *name) {
		if (g_path_is_absolute(name)) {
			fullname=g_strdup(name);
		} else if (path) {fullname=g_build_filename(path,name,NULL);}
			gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dlg), fullname);
			if (save) gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dlg), name);
	}
	if (path && *path) {
		gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dlg), path);
	}
	if (!create_file_filter(L, GTK_FILE_CHOOSER(dlg), mask)) {
		lua_pushfstring(L, _("Error in module \"%s\" at function pickfile():\n"
			"failed to parse filter string at argument #3.\n"),
			LUA_MODULE_NAME);
		lua_error(L);
		return NULL;
	}

#if NEED_OVERWRITE_PROMPT
	glspi_pause_timer(TRUE,L);
	while (!accepted) {
		resp=gtk_dialog_run(GTK_DIALOG(dlg));
		if (!save) { accepted=TRUE; }
	}
	glspi_pause_timer(FALSE,L);
#else
		resp=glspi_dialog_run(GTK_DIALOG(dlg));
#endif
	if (resp == GTK_RESPONSE_ACCEPT) {
		rv=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlg));
	}
	gtk_widget_destroy(dlg);
	if (fullname) {g_free(fullname);}
	return rv;
}
示例#7
0
文件: gui.c 项目: hrl/AVL
char* _gui_file_choose(int type) {
    /*
     * create a file choose dialog according to param `type`
     *
     * */
    GtkWidget *dialog = NULL;
    GtkFileChooser *chooser = NULL;

    if(type == FILE_CHOOSE_OPEN) {
        dialog = gtk_file_chooser_dialog_new(
                     "打开", NULL, GTK_FILE_CHOOSER_ACTION_OPEN,
                     "取消", GTK_RESPONSE_CANCEL,
                     "确定", GTK_RESPONSE_ACCEPT, NULL);
    } else if(type == FILE_CHOOSE_SAVE) {
        dialog = gtk_file_chooser_dialog_new(
                     "保存", NULL, GTK_FILE_CHOOSER_ACTION_SAVE,
                     "取消", GTK_RESPONSE_CANCEL,
                     "确定", GTK_RESPONSE_ACCEPT, NULL);
        gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
    }

    if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
        char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
        gtk_widget_destroy(dialog);
        return filename;
    } else {
        gtk_widget_destroy(dialog);
        return NULL;
    }
}
示例#8
0
文件: gtk.c 项目: Chuongv/uTox
static void gtk_savethread(void *args) {
    MSG_FILE *file = args;

    //WHY?!
    uint16_t fid = file->progress;
    file->progress = 0;
    //WHY?!

    while(1){ //TODO, save current dir, and filename and preload them to gtk dialog if save fails.
        /* Create a GTK save window */
        void *dialog = gtk_file_chooser_dialog_new((const char *)S(WHERE_TO_SAVE_FILE), NULL,
                GTK_FILE_CHOOSER_ACTION_SAVE,
                "_Cancel", GTK_RESPONSE_CANCEL,
                "_Open", GTK_RESPONSE_ACCEPT,
                NULL);
        /* Get incoming file name*/
        char buf[sizeof(file->name) + 1];
        memcpy(buf, file->name, file->name_length);
        buf[file->name_length] = 0;
        /* give gtk the file name our friend is sending. */
        gtk_file_chooser_set_current_name(dialog, buf);
        /* Prompt to overwrite */
        gtk_file_chooser_set_do_overwrite_confirmation(dialog, true);
        /* Users can create folders when saving. */ //TODO ENABLE BELOW!
        //gtk_file_chooser_set_create_folders(dialog, TRUE);
        int result = gtk_dialog_run(dialog);
        /* If user is ready to save check then pass to utox. */
        if(result == GTK_RESPONSE_ACCEPT) {
            char *name = gtk_file_chooser_get_filename(dialog);
            char *path = strdup(name);
            //g_free_utox(name)

            debug("name: %s\npath: %s\n", name, path);

            /* can we really write this file? */
            FILE *fp = fopen(path, "w");
            if(fp == NULL){
                /* No, we can't display error, jump to top. */
                if(errno == EACCES){
                    debug("File write permission denied.\n");
                    void *errordialog = gtk_message_dialog_new(dialog, 1, 3, 2,
                            //parent, destroy_with_parent, gtk_error_message, gtk_buttons_close
                                            "Error writing to file '%s'", name);
                    gtk_dialog_run(errordialog);
                    gtk_widget_destroy(errordialog);
                    gtk_widget_destroy(dialog);
                    continue;
                } else {
                    debug("Unknown file write error...\n");
                }
            } else {
                fclose(fp);
                /* write test passed, we're done! */
                gtk_widget_destroy(dialog);
                gtk_main_iteration();
                gtk_widget_destroy(dialog);
                postmessage(FILE_INCOMING_ACCEPT, fid, (file->filenumber >> 16), path);
                break;
            }
        } else if (result == GTK_RESPONSE_CANCEL) {
/* Game -> Save as activated */
void save_file_dialog(GtkMenuItem *item, gpointer user_data)
{
        GtkWidget *dialog;

        halt_ai_thread();
        dialog = gtk_file_chooser_dialog_new("Save File",
        				     GTK_WINDOW(window),
        				     GTK_FILE_CHOOSER_ACTION_SAVE,
        				     GTK_STOCK_CANCEL,
        				     GTK_RESPONSE_CANCEL,
        				     GTK_STOCK_SAVE,
        				     GTK_RESPONSE_ACCEPT,
        				     NULL);
        gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog),
                                                       TRUE);
        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
            char *filename;

            filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
            save_moves_list(filename);
            g_free(filename);
        }
        gtk_widget_destroy(dialog);
        start_ai_thread();
}
示例#10
0
void
ui_signal_export (GtkMenuItem * item, gpointer data)
{
  GtkWidget *dialog;
  GtkWidget *window = GET_OBJECT("window");
  GtkFileFilter * filter_auto;
  GtkFileFilter * filter_pdf;
  GtkFileFilter * filter_svg;
  GtkFileFilter * filter_png;

  dialog = gtk_file_chooser_dialog_new (_("Export"),
                                        GTK_WINDOW(window),
                                        GTK_FILE_CHOOSER_ACTION_SAVE,
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                        GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                                        NULL);
  /* Set filters */
  filter_auto = gtk_file_filter_new();
  filter_pdf = gtk_file_filter_new();
  filter_svg = gtk_file_filter_new();
  filter_png = gtk_file_filter_new();
  gtk_file_filter_add_pattern (filter_auto, "*");
  gtk_file_filter_add_mime_type (filter_pdf, "application/pdf");
  gtk_file_filter_add_mime_type (filter_svg, "image/svg+xml");
  gtk_file_filter_add_mime_type (filter_png, "image/png");
  gtk_file_filter_set_name (filter_pdf, "Portable Document Format (PDF)");
  gtk_file_filter_set_name (filter_svg, "Scalable Vector Graphcis (SVG)");
  gtk_file_filter_set_name (filter_png, "Portable Networks Graphcis (PNG)");
  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter_png);
  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter_pdf);
  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter_svg);

  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
    {
      char *filename;
      char * ext;
      gint width, height;
      GtkFileFilter * filter;
      gboolean successp;
      filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
      filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (dialog));
      gdk_window_get_size (hexboard->window, &width, &height);

      if (filter == filter_pdf)
        ext = "pdf";
      else if (filter == filter_png)
        ext = "png";
      else if (filter == filter_svg)
        ext = "svg";

      successp = hexboard_save_as_image (HEXBOARD(hexboard), filename, ext, width, height);
      if (!successp)
        g_message (_("An error ocurred while export the board."));

      g_log (G_LOG_DOMAIN, G_LOG_LEVEL_INFO, _("Board was exported to %s."), filename);
      g_free (filename);
    }
  gtk_widget_destroy (dialog);
}
void GtkFileChooserDialog_::set_do_overwrite_confirmation(Php::Parameters &parameters)
{
	gboolean select_multiple = (gboolean)parameters[0];

	gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER(instance), select_multiple);

}
示例#12
0
JNIEXPORT void JNICALL
Java_org_gnome_gtk_GtkFileChooser_gtk_1file_1chooser_1set_1do_1overwrite_1confirmation
(
	JNIEnv* env,
	jclass cls,
	jlong _self,
	jboolean _doOverwriteConfirmation
)
{
	GtkFileChooser* self;
	gboolean doOverwriteConfirmation;

	// convert parameter self
	self = (GtkFileChooser*) _self;

	// convert parameter doOverwriteConfirmation
	doOverwriteConfirmation = (gboolean) _doOverwriteConfirmation;

	// call function
	gtk_file_chooser_set_do_overwrite_confirmation(self, doOverwriteConfirmation);

	// cleanup parameter self

	// cleanup parameter doOverwriteConfirmation
}
示例#13
0
void GtkToolkitFileChooser::SetDialogType(DialogType type)
{
	m_action = GTK_FILE_CHOOSER_ACTION_OPEN;
	const gchar* accept_text = 0;

	switch (type)
	{
		case FILE_OPEN_MULTI:
			gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(m_dialog), TRUE);
			/* Fallthrough */
		case FILE_OPEN:
			m_action = GTK_FILE_CHOOSER_ACTION_OPEN;
			accept_text = GTK_STOCK_OPEN;
			break;
		case FILE_SAVE_PROMPT_OVERWRITE:
			gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(m_dialog), TRUE);
			/* Fallthrough */
		case FILE_SAVE:
			m_action = GTK_FILE_CHOOSER_ACTION_SAVE;
			accept_text = GTK_STOCK_SAVE;
			break;
		case DIRECTORY:
			m_action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
			accept_text = GTK_STOCK_OPEN;
			break;
	}

	gtk_file_chooser_set_action(GTK_FILE_CHOOSER(m_dialog), m_action);
	gtk_dialog_add_button(GTK_DIALOG(m_dialog), accept_text, GTK_RESPONSE_ACCEPT);
}
示例#14
0
static void
script_fu_console_save_dialog (ConsoleInterface *console)
{
  if (! console->save_dialog)
    {
      console->save_dialog =
        gtk_file_chooser_dialog_new (_("Save Script-Fu Console Output"),
                                     GTK_WINDOW (console->dialog),
                                     GTK_FILE_CHOOSER_ACTION_SAVE,

                                     _("_Cancel"), GTK_RESPONSE_CANCEL,
                                     _("_Save"),   GTK_RESPONSE_OK,

                                     NULL);

      gtk_dialog_set_default_response (GTK_DIALOG (console->save_dialog),
                                       GTK_RESPONSE_OK);
      gimp_dialog_set_alternative_button_order (GTK_DIALOG (console->save_dialog),
                                               GTK_RESPONSE_OK,
                                               GTK_RESPONSE_CANCEL,
                                               -1);

      gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (console->save_dialog),
                                                      TRUE);

      g_object_add_weak_pointer (G_OBJECT (console->save_dialog),
                                 (gpointer) &console->save_dialog);

      g_signal_connect (console->save_dialog, "response",
                        G_CALLBACK (script_fu_console_save_response),
                        console);
    }

  gtk_window_present (GTK_WINDOW (console->save_dialog));
}
示例#15
0
void ArticleView::on_attachment_button_clicked(GtkWidget *object, gpointer user_data)
{
	ResData *pResData = (ResData*)user_data;
	const std::string& key = pResData->get_key();
	std::string::size_type pos = key.rfind(DB_DIR_SEPARATOR);
	// in utf-8, yet a file name
	const char* default_file_name = key.c_str() + (pos == std::string::npos ? 0 : pos+1);
	GtkWidget *dialog;
	dialog = gtk_file_chooser_dialog_new(_("Save File"),
		GTK_WINDOW(gpAppFrame->window),
		GTK_FILE_CHOOSER_ACTION_SAVE,
		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
		GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
		NULL);
	gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
	gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
		gpAppFrame->last_selected_directory.c_str());
	gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), default_file_name);
	if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
		glib::CharStr filename(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
		glib::CharStr selected_dir(g_path_get_dirname(get_impl(filename)));
		gpAppFrame->last_selected_directory = get_impl(selected_dir);
		if(const char* content = pResData->get_content()) {
			const guint32 size = get_uint32(content);
			const gchar *data = (const gchar *)(content+sizeof(guint32));
			if(!g_file_set_contents(get_impl(filename), data, size, NULL))
				g_warning("Fail to save file %s", get_impl(filename));
		} else {
			g_warning("Unable to load resource: %s", pResData->get_key().c_str());
		}
	}
	gtk_widget_destroy(dialog);
}
示例#16
0
文件: editor.c 项目: eukos16/NGUNIX
/* EDITOR: EXPORT LUMP
 * ===================
 * Saves the pic currently displayed as a PCX file...
 */
gint VID_EditorExportFile(gpointer data)
{
	GtkWidget *dialog;
	GtkFileChooser *chooser;
	GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE;
	gint res;
	byte *pic;

	if(!ed_file)
		return;

	dialog = gtk_file_chooser_dialog_new ("NGUNIXEd - Save Picture Exchange (.pcx) File",
                                      NULL,
                                      action,
                                      ("_Cancel"),
                                      GTK_RESPONSE_CANCEL,
                                      ("_Save"),
                                      GTK_RESPONSE_ACCEPT,
                                      NULL);
	chooser = GTK_FILE_CHOOSER (dialog);
	gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);

	// Set the default path (current directory)
	char path[MAX_OSPATH];
	sprintf(path, "file://%s", get_current_dir_name());
	gtk_file_chooser_set_current_folder_uri(chooser, path);

	// Add the filter for .lmp files
	GtkFileFilter *filter = gtk_file_filter_new ();
	gtk_file_filter_add_pattern (filter, "*.pcx");
	gtk_file_chooser_set_filter (chooser, filter);

	//if (user_edited_a_new_document)
  		gtk_file_chooser_set_current_name (chooser,
                                     ("untitled.pcx"));
	//else
  	//	gtk_file_chooser_set_filename (chooser,
        //                         existing_filename);


	res = gtk_dialog_run (GTK_DIALOG (dialog));
	if (res == GTK_RESPONSE_ACCEPT)
  	{
		char *filename;
    		filename = gtk_file_chooser_get_filename (chooser);

		Con_Printf("[EDITOR] Exporting PCX to %s...\n", filename);

		int w, h;
		w = ed_file->width;
		h = ed_file->height;
		pic = Hunk_Alloc(ed_file->width * ed_file->height);
		memcpy(pic, &ed_file->data, (ed_file->width * ed_file->height));
		Image_WritePCXfile (filename, pic, w, h, ed_file->width, host_basepal);
    		g_free (filename);
  	}

	gtk_widget_destroy (dialog);
	return 0;
}
void screenshot_dialog(void)
/* Game -> Screenshot activated */
{
        GtkWidget *dialog;

        halt_ai_thread();
        dialog = gtk_file_chooser_dialog_new("Save Screenshot",
        				     GTK_WINDOW(window),
        				     GTK_FILE_CHOOSER_ACTION_SAVE,
        				     GTK_STOCK_CANCEL,
        				     GTK_RESPONSE_CANCEL,
        				     GTK_STOCK_SAVE,
        				     GTK_RESPONSE_ACCEPT,
        				     NULL);
        gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog),
                                                       TRUE);
        if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
                char *filename;

                filename =
                        gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
                draw_screenshot(filename);
                g_free(filename);
        }
        gtk_widget_destroy(dialog);
        start_ai_thread();
}
示例#18
0
void
ui_signal_save_as (GtkMenuItem * item, gpointer data)
{
  GtkWidget *dialog;
  GtkWidget *window = GET_OBJECT("window");
  dialog = gtk_file_chooser_dialog_new (_("Save"),
                                        GTK_WINDOW(window),
                                        GTK_FILE_CHOOSER_ACTION_SAVE,
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                        GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                                        NULL);
  /* Set filters */
  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter_sgf);
  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter_lg_sgf);

  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
    {
      g_free (game_file);
      game_file = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
      game_format = dialog_selected_format (dialog);
      gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
      if (game_format != HEX_AUTO)
        hex_save_sgf (game, game_format, game_file);
      update_window_title();
    }
  gtk_widget_destroy (dialog);
}
示例#19
0
static void on_save_button(GtkWidget *button, RendererLaser *self)
{
  GtkWidget *dialog;
  dialog = gtk_file_chooser_dialog_new("Save Data File", NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL,
      GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
  g_assert(dialog);
  gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
  if (self->last_save_filename)
    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), self->last_save_filename);

  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
    char *filename;
    filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
    if (NULL != filename) {
      FILE *file = fopen(filename, "w");
      if (NULL != file) {
        /* store selected file into self->last_save_filename */
        if (self->last_save_filename)
          g_free(self->last_save_filename);
        self->last_save_filename = g_strdup(filename);

        int count = save_points_to_file(self, file);

        DBG("Wrote %d points to file '%s'.\n", count, filename);
        fclose(file);
      }
      else {
        ERR("Error: Failed to open file: '%s', error is: '%s'\n",
            filename, g_strerror(errno));
      }
      g_free(filename);
    }
  }
  gtk_widget_destroy(dialog);
}
示例#20
0
static char *filedialog(GtkWindow *parent, GtkFileChooserAction mode, const gchar *confirm)
{
	GtkWidget *fcd;
	GtkFileChooser *fc;
	gint response;
	char *filename;

	fcd = gtk_file_chooser_dialog_new(NULL, parent, mode,
		"_Cancel", GTK_RESPONSE_CANCEL,
		confirm, GTK_RESPONSE_ACCEPT,
		NULL);
	fc = GTK_FILE_CHOOSER(fcd);
	gtk_file_chooser_set_local_only(fc, FALSE);
	gtk_file_chooser_set_select_multiple(fc, FALSE);
	gtk_file_chooser_set_show_hidden(fc, TRUE);
	gtk_file_chooser_set_do_overwrite_confirmation(fc, TRUE);
	gtk_file_chooser_set_create_folders(fc, TRUE);
	response = gtk_dialog_run(GTK_DIALOG(fcd));
	if (response != GTK_RESPONSE_ACCEPT) {
		gtk_widget_destroy(fcd);
		return NULL;
	}
	filename = uiUnixStrdupText(gtk_file_chooser_get_filename(fc));
	gtk_widget_destroy(fcd);
	return filename;
}
示例#21
0
std::string SaveFileDialog()
{
    GtkWidget *dialog;

    dialog = gtk_file_chooser_dialog_new("Save File",
                                         0,
                                         GTK_FILE_CHOOSER_ACTION_SAVE,
                                         GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                         GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                                         NULL);

    gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);

    gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), "New DataBase");

    std::string path;
    if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) {
        path = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) );
    }

    gtk_widget_destroy(dialog);

    path += ".qdb";

    return path;
}
示例#22
0
/**
 * \fn void dialog_draw_save()
 * \brief Function to show a dialog to save the graphical view in a PNG file.
 */
void
dialog_draw_save ()
{
  char *buffer = NULL;
  GtkFileFilter *filter;
  GtkFileChooserDialog *dlg;
  filter = gtk_file_filter_new ();
  gtk_file_filter_set_name (filter, "PNG file");
  gtk_file_filter_add_pattern (filter, "*.png");
  gtk_file_filter_add_pattern (filter, "*.PNG");
  dlg = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new
    (gettext ("Save graphical"), dialog_simulator->window,
     GTK_FILE_CHOOSER_ACTION_SAVE,
     gettext ("_OK"), GTK_RESPONSE_CANCEL,
     gettext ("_Cancel"), GTK_RESPONSE_OK, NULL);
  gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), filter);
  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dlg), 1);
  if (gtk_dialog_run ((GtkDialog *) dlg) == GTK_RESPONSE_OK)
    buffer = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg));
  gtk_widget_destroy (GTK_WIDGET (dlg));
  if (buffer)
    {
      draw ();
      while (gtk_events_pending ())
        gtk_main_iteration ();
      draw_save (buffer);
      g_free (buffer);
    }
}
示例#23
0
文件: main.c 项目: jcape/gnoMint
G_MODULE_EXPORT void on_save_as1_activate  (GtkMenuItem *menuitem, gpointer     user_data)
{
	gchar *filename;

	GtkWidget *dialog, *widget;
	
	widget = GTK_WIDGET(gtk_builder_get_object (main_window_gtkb, "main_window"));
	
	dialog = gtk_file_chooser_dialog_new (_("Save CA database as..."),
					      GTK_WINDOW(widget),
					      GTK_FILE_CHOOSER_ACTION_SAVE,
					      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
					      NULL);
	gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
	
	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
		filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
		gtk_widget_destroy (dialog);
	} else {
		gtk_widget_destroy (dialog);
		return;
	}		
	
	if (ca_file_save_as (filename))
                __recent_add_utf8_filename (filename);

}
int32 ShowSaveDialog(ExtensionString title,
                     ExtensionString initialDirectory,
                     ExtensionString proposedNewFilename,
                     ExtensionString& newFilePath)
{
    GtkWidget *openSaveDialog;
    
    openSaveDialog = gtk_file_chooser_dialog_new(title.c_str(),
        NULL,
        GTK_FILE_CHOOSER_ACTION_SAVE,
        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
        GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
        NULL);
    
    gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (openSaveDialog), TRUE);	
    if (!initialDirectory.empty())
    {
        gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (openSaveDialog), proposedNewFilename.c_str());
        
        ExtensionString folderURI = std::string("file:///") + initialDirectory;
        gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (openSaveDialog), folderURI.c_str());
    }
    
    if (gtk_dialog_run (GTK_DIALOG (openSaveDialog)) == GTK_RESPONSE_ACCEPT)
    {
        char* filePath;
        filePath = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (openSaveDialog));
        newFilePath = filePath;
        g_free (filePath);
    }
    
    gtk_widget_destroy (openSaveDialog);
    return NO_ERROR;
}
示例#25
0
/* Finish up the user's Release command by choosing a location to store the
project. This is a callback and the GDK lock is held when entering this
 function. */
void
i7_story_save_compiler_output(I7Story *story, const gchar *dialog_title)
{
    I7_STORY_USE_PRIVATE(story, priv);

    GFile *file = NULL;
    if(priv->copy_blorb_dest_file == NULL) {
        /* ask the user for a release file name if cBlorb didn't provide one */

        /* Create a file chooser */
        GtkFileFilter *filter = gtk_file_filter_new();
        if(i7_story_get_story_format(story) == I7_STORY_FORMAT_GLULX) {
            gtk_file_filter_set_name(filter, _("Glulx games (.ulx,.gblorb)"));
            gtk_file_filter_add_pattern(filter, "*.ulx");
            gtk_file_filter_add_pattern(filter, "*.gblorb");
        } else {
            gtk_file_filter_set_name(filter, _("Z-code games (.z?,.zblorb)"));
            gtk_file_filter_add_pattern(filter, "*.z?");
            gtk_file_filter_add_pattern(filter, "*.zblorb");
        }
        GtkWidget *dialog = gtk_file_chooser_dialog_new(dialog_title,
                            GTK_WINDOW(story), GTK_FILE_CHOOSER_ACTION_SAVE,
                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                            GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                            NULL);
        gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE);
        char *curfilename = g_file_get_basename(priv->compiler_output_file);
        gchar *title = i7_document_get_display_name(I7_DOCUMENT(story));
        char *extension = strrchr(curfilename, '.'); /* not allocated */
        char *suggestname;
        if(title != NULL) {
            *(strrchr(title, '.')) = '\0';
            suggestname = g_strconcat(title, extension, NULL);
            g_free(title);
        } else {
            suggestname = g_strconcat("Untitled", extension, NULL);
        }
        g_free(curfilename);
        gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), suggestname);
        g_free(suggestname);
        gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);

        if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
            file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(dialog));

        gtk_widget_destroy(dialog);
    } else {
        file = g_object_ref(priv->copy_blorb_dest_file);
    }

    if(file) {
        /* Move the finished file to the release location */
        GError *err = NULL;
        if(!g_file_move(priv->compiler_output_file, file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &err)) {
            IO_ERROR_DIALOG(GTK_WINDOW(story), file, err, _("copying compiler output"));
        }
        g_object_unref(file);
    }
}
CMasterBiasDlg::CMasterBiasDlg(GtkWindow *pParent):m_pParent(pParent), m_InFiles(0), 
	m_FileList(NULL), m_FilePath(NULL)
{
	GtkWidget *vbox, *xbox, *bbox;
	GSList *group;
	GtkFileFilter *filters[2];

	// Dialog with buttons
	m_pDlg = gtk_file_chooser_dialog_new("Master bias frame", pParent, 
		GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
		GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL);
	gtk_file_chooser_standard_tooltips(GTK_FILE_CHOOSER(m_pDlg));
	gtk_dialog_set_tooltip_by_response(GTK_DIALOG(m_pDlg), GTK_RESPONSE_ACCEPT, "Create a master bias frame and save it to the specified file");
	g_signal_connect(G_OBJECT(m_pDlg), "response", G_CALLBACK(response_dialog), this);
	gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(m_pDlg), true);

	// Filters
	filters[0] = gtk_file_filter_new();
	gtk_file_filter_add_pattern(filters[0], "*." FILE_EXTENSION_FITS);
	gtk_file_filter_set_name(filters[0], "FITS files");
	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(m_pDlg), filters[0]);
	filters[1] = gtk_file_filter_new();
	gtk_file_filter_add_pattern(filters[1], "*");
	gtk_file_filter_set_name(filters[1], "All files");
	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(m_pDlg), filters[1]);
	gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(m_pDlg), filters[0]);

	// Dialog icon
	gchar *icon = get_icon_file("masterbias");
	gtk_window_set_icon(GTK_WINDOW(m_pDlg), gdk_pixbuf_new_from_file(icon, NULL));
	g_free(icon);

	// Frame selection
	xbox = gtk_vbox_new(FALSE, 8);
	m_ProcFrame = gtk_frame_new("Process");
	gtk_box_pack_start(GTK_BOX(xbox), m_ProcFrame, FALSE, TRUE, 0);
	vbox = gtk_vbox_new(FALSE, 4);
	gtk_container_add(GTK_CONTAINER(m_ProcFrame), vbox);
	gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
	m_AllBtn = gtk_radio_button_new_with_label(NULL, "all files in current project");
	gtk_widget_set_tooltip_text(m_AllBtn, "Include all frames in the current project");
	gtk_box_pack_start(GTK_BOX(vbox), m_AllBtn, TRUE, TRUE, 0);
	group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(m_AllBtn));
	m_SelBtn = gtk_radio_button_new_with_label(group, "selected files only");
	gtk_widget_set_tooltip_text(m_SelBtn, "Include frames that are selected in the main window");
	gtk_box_pack_start(GTK_BOX(vbox), m_SelBtn, TRUE, TRUE, 0);

	// Options
	bbox = gtk_hbutton_box_new();
	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_START);
	gtk_box_pack_start(GTK_BOX(xbox), bbox, FALSE, TRUE, 0);
	m_OptionsBtn = gtk_button_new_with_label("Options");
	gtk_widget_set_tooltip_text(m_OptionsBtn, "Edit project settings");
	gtk_box_pack_start(GTK_BOX(bbox), m_OptionsBtn, FALSE, TRUE, 0);
	g_signal_connect(G_OBJECT(m_OptionsBtn), "clicked", G_CALLBACK(button_clicked), this);

	gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(m_pDlg), xbox);
	gtk_widget_show_all(xbox);
}
示例#27
0
/* Caller must g_free() the returned filename. */
gchar *
ghid_dialog_file_select_save (gchar * title, gchar ** path, gchar * file,
			      gchar * shortcuts)
{
  GtkWidget *dialog;
  gchar *result = NULL, *folder, *seed;
  GHidPort *out = &ghid_port;

  dialog = gtk_file_chooser_dialog_new (title,
					GTK_WINDOW (out->top_window),
					GTK_FILE_CHOOSER_ACTION_SAVE,
					GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					GTK_STOCK_OK, GTK_RESPONSE_OK,
					NULL);

  gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog),
                                                  TRUE);
  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);

  if (path && *path && **path)
    gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), *path);

  if (file && *file)
    {
      gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog),
                                         g_path_get_basename(file));
      gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog),
                                           g_path_get_dirname (file));
    }

  if (shortcuts && *shortcuts)
    {
      folder = g_strdup (shortcuts);
      seed = folder;
      while ((folder = strtok (seed, ":")) != NULL)
	{
	  gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog),
						folder, NULL);
	  seed = NULL;
	}
      g_free (folder);
    }
  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
    {
      result = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
      folder =
	gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (dialog));
      if (folder && path)
	{
	  dup_string (path, folder);
	  g_free (folder);
	}
    }
  gtk_widget_destroy (dialog);


  return result;
}
示例#28
0
static gchar *
audit_run_save_dialog (void)
{
        const gchar *key = GVA_SETTING_ERROR_FILE;
        GtkFileChooser *file_chooser;
        GtkWidget *dialog;
        GSettings *settings;
        gchar *filename;
        gchar *folder;
        gchar *name;

        settings = gva_get_settings ();

        dialog = gtk_file_chooser_dialog_new (
                _("Save As"),
                GTK_WINDOW (GVA_WIDGET_AUDIT_WINDOW),
                GTK_FILE_CHOOSER_ACTION_SAVE,
                GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
                NULL);

        file_chooser = GTK_FILE_CHOOSER (dialog);

        /* Suggest the previous filename, if available. */

        filename = g_settings_get_string (settings, key);

        if (filename != NULL && *filename != '\0')
        {
                name = g_path_get_basename (filename);
                folder = g_path_get_dirname (filename);
        }
        else
        {
                name = g_strdup ("rom-errors.txt");
                folder = g_strdup (g_get_home_dir ());
        }

        gtk_file_chooser_set_current_folder (file_chooser, folder);
        gtk_file_chooser_set_current_name (file_chooser, name);
        gtk_file_chooser_set_do_overwrite_confirmation (file_chooser, TRUE);

        g_free (name);
        g_free (folder);
        g_free (filename);

        filename = NULL;

        if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
        {
                filename = gtk_file_chooser_get_filename (file_chooser);
                g_settings_set_string (settings, key, filename);
        }

        gtk_widget_destroy (dialog);

        return filename;
}
示例#29
0
文件: gtk.c 项目: PKRoma/uTox
static void gtk_savethread(void *args){
    MSG_FILE *file = args;

    //WHY?!
    uint16_t fid = file->progress;
    file->progress = 0;
    //WHY?!

    // We're going to save this file somewhere, so we should start the transfer to save time.
    // TODO restart this idea
    // postmessage(FILE_START_TEMP, fid, (file->filenumber >> 16), file);
    // debug("GTK:\tSaving file to temp dir...(%u & %u)\n", fid, file->filenumber);

    while(1){ //TODO, save current dir, and filename and preload them to gtk dialog if save fails.
        /* Create a GTK save window */
        void *dialog = gtk_file_chooser_dialog_new(S(SAVE_FILE), NULL, 1, "gtk-cancel", -6, "gtk-save", -3, NULL);
        /* Get incoming file name*/
        char buf[sizeof(file->name) + 1];
        memcpy(buf, file->name, file->name_length);
        buf[file->name_length] = 0;
        /* give gtk the file name our friend is sending. */
        gtk_file_chooser_set_current_name(dialog, buf);
        /* Prompt to overwrite */
        gtk_file_chooser_set_do_overwrite_confirmation(dialog, (void*)1);
        /* Users can create folders when saving. */ //TODO ENABLE BELOW!
        //gtk_file_chooser_set_create_folders(dialog, TRUE);
        int result = gtk_dialog_run(dialog);
        /* If user is ready to save check then pass to utox. */
        if(result == -3) { // -3 == GTK_RESPONSE_ACCEPT
            char *name = gtk_file_chooser_get_filename(dialog);
            char *path = strdup(name);
            //g_free(name)

            debug("name: %s\npath: %s\n", name, path);

            /* can we really write this file? */
            FILE *fp = fopen(path, "w");
            if(fp == NULL){
                /* No, we can't display error, jump to top. */
                if(errno == EACCES){
                    debug("File write permission denied.\n");
                    void *errordialog = gtk_message_dialog_new(dialog, 1, 3, 2,
                            //parent, destroy_with_parent, gtk_error_message, gtk_buttons_close
                                            "Error writing to file '%s'", name);
                    gtk_dialog_run(errordialog);
                    gtk_widget_destroy(errordialog);
                    gtk_widget_destroy(dialog);
                    continue;
                } else {
                    debug("Unknown file write error...\n");
                }
            } else {
                /* write test passed, we're done! */
                gtk_widget_destroy(dialog);
                postmessage(SAVE_FILE, fid, (file->filenumber >> 16), path);
                break;
            }
        } else if (-6) { // -6 == GTK_RESPONSE_CANCEL
示例#30
0
int ui_messages_save_file_chooser(gboolean filtered)
{
    int result = RC_OK;
    GtkWidget *filechooser;

    /* Check if there is something to save */
    if (xml_raw_data_size > 0)
    {
        static const char *title[] =
        {
             "Save file (all messages)",
             "Save file (filtered messages)",
        };

        filechooser = gtk_file_chooser_dialog_new (title[filtered], GTK_WINDOW (ui_main_data.window),
                                                   GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL,
                                                   GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
        gtk_filter_add (filechooser, "Log files", "*.log");
        gtk_filter_add (filechooser, "All files", "*");

        gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (filechooser), TRUE);

        if (ui_main_data.messages_file_name != NULL)
        {
            gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (filechooser), ui_main_data.messages_file_name);
        }
        else
        {
            gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filechooser), "messages.log");
        }

        /* Process the response */
        if (gtk_dialog_run (GTK_DIALOG (filechooser)) == GTK_RESPONSE_ACCEPT)
        {
            char *filename;

            filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooser));
            result = ui_messages_file_write (filename, filtered);
            if (result == RC_OK)
            {
                /* Update filters file name for future use */
                if (ui_main_data.messages_file_name != NULL)
                {
                    g_free (ui_main_data.messages_file_name);
                }
                ui_main_data.messages_file_name = filename;
            }
            else
            {
                g_free (filename);
            }
        }
        gtk_widget_destroy (filechooser);
    }

    return result;
}