예제 #1
0
void
prefs_set_defaults(void)
{
  int i;
  gpointer ptr;

  /* Since we can't call this in static initialization, we have to
   * do it here.
   */
  if (default_paper_name == NULL)
    default_paper_name = get_paper_name(get_default_paper());

  for (i=0;i<NUM_PREFS_DATA;i++) {
    ptr = (char *)&prefs + prefs_data[i].offset;

    switch (prefs_data[i].type) {
    case PREF_BOOLEAN:
      *(int *)ptr = *(int *)prefs_data[i].default_value;
      *(int *)ptr = persistence_register_boolean(prefs_data[i].name, *(int *)ptr);
      break;
    case PREF_INT:
    case PREF_UINT:
      *(int *)ptr = *(int *)prefs_data[i].default_value;
      *(int *)ptr = persistence_register_integer(prefs_data[i].name, *(int *)ptr);
      break;
    case PREF_REAL:
    case PREF_UREAL:
      *(real *)ptr = *(real *)prefs_data[i].default_value;
      *(real *)ptr = persistence_register_real(prefs_data[i].name, *(real *)ptr);
      break;
    case PREF_COLOUR:
      *(Color *)ptr = *(Color *)prefs_data[i].default_value;
      *(Color *)ptr = *persistence_register_color(prefs_data[i].name, (Color *)ptr);
      break;
    case PREF_CHOICE:
    case PREF_STRING: 
      *(gchar **)ptr = *(gchar **)prefs_data[i].default_value;
      *(gchar **)ptr = persistence_register_string(prefs_data[i].name, *(gchar **)ptr);
      break;
    case PREF_NONE:
    case PREF_END_GROUP:
      break;
    }
    /* set initial preferences, but dont talk about restarting */
    if (prefs_data[i].update_function)
      (prefs_data[i].update_function)(&prefs_data[i], ptr);
  }
  update_internal_prefs(&prefs_data[i], NULL);
}
예제 #2
0
파일: filedlg.c 프로젝트: AmiGanguli/dia
/**
 * React to <Display>/File/Export
 */
void
file_export_callback(GtkAction *action)
{
  DDisplay *ddisp;
  Diagram *dia;
  gchar *filename = NULL;

  ddisp = ddisplay_active();
  if (!ddisp) return;
  dia = ddisp->diagram;

  if (!confirm_export_size (dia, GTK_WINDOW(ddisp->shell), CONFIRM_MEMORY|CONFIRM_PAGES))
    return;

  if (!exportdlg) {
    persistence_register_integer ("export-filter", 0);
    exportdlg = gtk_file_chooser_dialog_new(_("Export Diagram"),
					    GTK_WINDOW(ddisp->shell),
					    GTK_FILE_CHOOSER_ACTION_SAVE,
					    GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					    GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
					    NULL);
    /* export via vfs gives: Permission denied - but only if you do not
     * have write permissions ;) */
    gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER(exportdlg), FALSE);

    gtk_dialog_set_default_response(GTK_DIALOG(exportdlg), GTK_RESPONSE_ACCEPT);
    gtk_window_set_role(GTK_WINDOW(exportdlg), "export_diagram");
    g_signal_connect(G_OBJECT(exportdlg), "destroy",
		     G_CALLBACK(gtk_widget_destroyed), &exportdlg);
  }
  if (!gtk_file_chooser_get_extra_widget(GTK_FILE_CHOOSER(exportdlg))) {
    GtkWidget *hbox, *label, *omenu, *options;
    GtkFileFilter* filter;

    options = gtk_frame_new(_("Export Options"));
    gtk_frame_set_shadow_type(GTK_FRAME(options), GTK_SHADOW_ETCHED_IN);

    hbox = gtk_hbox_new(FALSE, 1);
    gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
    gtk_container_add(GTK_CONTAINER(options), hbox);
    gtk_widget_show(hbox);

    label = gtk_label_new (_("Determine file type:"));
    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
    gtk_widget_show (label);

    omenu = create_export_menu();
    gtk_box_pack_start(GTK_BOX(hbox), omenu, TRUE, TRUE, 0);
    gtk_widget_show(omenu);
    g_object_set_data(G_OBJECT(exportdlg), "export-menu", omenu);

    gtk_widget_show(options);
    gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(exportdlg), options);
    /* set up file filters */
    filter = gtk_file_filter_new ();
    gtk_file_filter_set_name (filter, _("All Files"));
    gtk_file_filter_add_pattern (filter, "*");
    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (exportdlg), filter);
    /* match the other selections extension */
    filter = gtk_file_filter_new ();
    gtk_file_filter_set_name (filter, _("Supported Formats"));
    gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_FILENAME,
                                matching_extensions_filter, filter_guess_export_filter, NULL);
    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (exportdlg), filter);

    gtk_combo_box_set_active (GTK_COMBO_BOX (omenu), persistence_get_integer ("export-filter"));

    g_signal_connect(GTK_FILE_CHOOSER(exportdlg),
		     "response", G_CALLBACK(file_export_response_callback), omenu);
  }
  if (g_object_get_data (G_OBJECT(exportdlg), "user_data"))
    g_object_unref (g_object_get_data (G_OBJECT(exportdlg), "user_data"));
  g_object_ref(dia); 
  g_object_set_data (G_OBJECT (exportdlg), "user_data", dia);
  gtk_widget_set_sensitive(exportdlg, TRUE);

  if (dia && dia->filename)
    filename = g_filename_from_utf8(dia->filename, -1, NULL, NULL, NULL);
  if (filename != NULL) {
    char* fnabs = dia_get_absolute_filename (filename);
    if (fnabs) {
      char *folder = g_path_get_dirname (fnabs);
      char *basename = g_path_get_basename (fnabs);
      /* can't use gtk_file_chooser_set_filename for various reasons, see e.g. bug #305850 */
      gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(exportdlg), folder);
      export_adapt_extension (basename, persistence_get_integer ("export-filter") - 1);
      g_free (folder);
      g_free (basename);
    }
    g_free(fnabs);
    g_free(filename);
  }

  gtk_widget_show(exportdlg);
}
예제 #3
0
파일: filedlg.c 프로젝트: AmiGanguli/dia
/**
 * Handle menu click File/Open
 *
 * This is either with or without diagram
 */
void
file_open_callback(GtkAction *action)
{
  if (!opendlg) {
    DDisplay *ddisp;
    Diagram *dia = NULL;
    GtkWindow *parent_window;
    gchar *filename = NULL;
    
    /* FIXME: we should not use ddisp_active but instead get the current diagram
     * from caller. Thus we could offer the option to "load into" if invoked by
     * <Display/File/Open. It wouldn't make any sense if invoked by 
     * <Toolbox>/File/Open ...
     */
    ddisp = ddisplay_active();
    if (ddisp) {
      dia = ddisp->diagram;
      parent_window = GTK_WINDOW(ddisp->shell);
    } else {
      parent_window = GTK_WINDOW(interface_get_toolbox_shell());
    }
    persistence_register_integer ("import-filter", 0);
    opendlg = gtk_file_chooser_dialog_new(_("Open Diagram"), parent_window,
					  GTK_FILE_CHOOSER_ACTION_OPEN,
					  GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					  GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
					  NULL);
    /* is activating gvfs really that easy - at least it works for samba shares*/
    gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER(opendlg), FALSE);
    gtk_dialog_set_default_response(GTK_DIALOG(opendlg), GTK_RESPONSE_ACCEPT);
    gtk_window_set_role(GTK_WINDOW(opendlg), "open_diagram");
    if (dia && dia->filename)
      filename = g_filename_from_utf8(dia->filename, -1, NULL, NULL, NULL);
    if (filename != NULL) {
      char* fnabs = dia_get_absolute_filename (filename);
      if (fnabs)
        gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(opendlg), fnabs);
      g_free(fnabs);
      g_free(filename);
    }
    g_signal_connect(G_OBJECT(opendlg), "destroy",
		     G_CALLBACK(gtk_widget_destroyed), &opendlg);
  } else {
    gtk_widget_set_sensitive(opendlg, TRUE);
#if GTK_CHECK_VERSION(2,20,0)
    if (gtk_widget_get_visible(opendlg))
#else
    if (GTK_WIDGET_VISIBLE(opendlg))
#endif
      return;
  }
  if (!gtk_file_chooser_get_extra_widget(GTK_FILE_CHOOSER(opendlg))) {
    GtkWidget *hbox, *label, *omenu, *options;
    GtkFileFilter* filter;

    options = gtk_frame_new(_("Open Options"));
    gtk_frame_set_shadow_type(GTK_FRAME(options), GTK_SHADOW_ETCHED_IN);

    hbox = gtk_hbox_new(FALSE, 1);
    gtk_container_set_border_width(GTK_CONTAINER(hbox), 5);
    gtk_container_add(GTK_CONTAINER(options), hbox);
    gtk_widget_show(hbox);

    label = gtk_label_new (_("Determine file type:"));
    gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
    gtk_widget_show (label);

    omenu = create_open_menu();
    gtk_box_pack_start(GTK_BOX(hbox), omenu, TRUE, TRUE, 0);
    gtk_widget_show(omenu);

    gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(opendlg),
				      options);

    gtk_widget_show(options);
    g_signal_connect(G_OBJECT(opendlg), "response",
		     G_CALLBACK(file_open_response_callback), omenu);

    /* set up the gtk file (name) filters */
    /* 0 = by extension */
    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (opendlg), 
	                         build_gtk_file_filter_from_index (0));
    filter = gtk_file_filter_new ();
    gtk_file_filter_set_name (filter, _("All Files"));
    gtk_file_filter_add_pattern (filter, "*");
    gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (opendlg), filter);

    gtk_combo_box_set_active (GTK_COMBO_BOX (omenu), persistence_get_integer ("import-filter"));
  }

  gtk_widget_show(opendlg);
}