コード例 #1
0
/* Pops up the Ks_One_Sample dialog box */
void
ks_one_sample_dialog (PsppireDataWindow *dw)
{
  struct ks_one_sample fd;
  gint response;

  PsppireVarStore *vs;

  GtkWidget *dialog ;
  GtkWidget *source ;

  fd.xml = builder_new ("ks-one-sample.ui");

  dialog = get_widget_assert   (fd.xml, "ks-one-sample-dialog");
  source = get_widget_assert   (fd.xml, "dict-view");

  fd.cb[CB_NORMAL] = get_widget_assert (fd.xml, "checkbutton-normal");
  fd.cb[CB_POISSON] = get_widget_assert (fd.xml, "checkbutton-poisson");
  fd.cb[CB_UNIFORM] = get_widget_assert (fd.xml, "checkbutton-uniform");
  fd.cb[CB_EXPONENTIAL] = get_widget_assert (fd.xml, "checkbutton-exp");

  fd.de = dw;

  g_signal_connect_swapped (dialog, "refresh", G_CALLBACK (refresh),  &fd);


  fd.variables = get_widget_assert   (fd.xml, "psppire-var-view1");

  g_object_get (fd.de->data_editor, "var-store", &vs, NULL);

  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (fd.de));

  g_object_get (vs, "dictionary", &fd.dict, NULL);
  g_object_set (source, "model", fd.dict,
		"predicate", var_is_numeric,
		NULL);

  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
				      dialog_state_valid, &fd);

  response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));

  switch (response)
    {
    case GTK_RESPONSE_OK:
      g_free (execute_syntax_string (dw, generate_syntax (&fd)));
      break;
    case PSPPIRE_RESPONSE_PASTE:
      g_free (paste_syntax_to_window (generate_syntax (&fd)));
      break;
    default:
      break;
    }

  g_object_unref (fd.xml);
}
コード例 #2
0
ファイル: transpose-dialog.c プロジェクト: RobertDash/pspp
void
transpose_dialog (PsppireDataWindow *de)
{
  gint response ;
  PsppireDict *dict = NULL;

  GtkBuilder *xml = builder_new ("psppire.ui");

  PsppireVarStore *vs = NULL;

  GtkWidget *dialog = get_widget_assert (xml, "transpose-dialog");
  GtkWidget *source = get_widget_assert (xml, "source-treeview");
  GtkWidget *selector2 = get_widget_assert (xml, "psppire-selector3");

  g_object_get (de->data_editor, "var-store", &vs, NULL);

  g_object_get (vs, "dictionary", &dict, NULL);
  g_object_set (source, "model", dict, NULL);

  psppire_selector_set_filter_func (PSPPIRE_SELECTOR (selector2),
				 is_currently_in_entry);


  g_signal_connect (dialog, "refresh", G_CALLBACK (refresh),  xml);

  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de));

  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
				      dialog_state_valid, xml);

  response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));

  switch (response)
    {
    case GTK_RESPONSE_OK:
      g_free (execute_syntax_string (de, generate_syntax (dict, xml)));
      break;
    case PSPPIRE_RESPONSE_PASTE:
      {
	gchar *syntax = generate_syntax (dict, xml);
        paste_syntax_to_window (syntax);

	g_free (syntax);
      }
      break;
    default:
      break;
    }

  g_object_unref (xml);
}
コード例 #3
0
ファイル: paired-dialog.c プロジェクト: RobertDash/pspp
struct paired_samples_dialog *
two_sample_dialog_create (PsppireDataWindow *de)
{
  GtkWidget *dict_view ;
  GtkWidget *selector ;
  struct paired_samples_dialog *tt_d = g_malloc (sizeof *tt_d);

  PsppireVarStore *vs = NULL;

  tt_d->xml = builder_new ("paired-samples.ui");

  dict_view = get_widget_assert (tt_d->xml, "paired-samples-t-test-treeview1");

  selector = get_widget_assert (tt_d->xml, "psppire-selector3");

  tt_d->dialog = get_widget_assert (tt_d->xml, "t-test-paired-samples-dialog");

  g_object_get (de->data_editor, "var-store", &vs, NULL);

  g_object_get (vs, "dictionary", &tt_d->dict, NULL);
  tt_d->pairs_treeview =
   get_widget_assert (tt_d->xml, "paired-samples-t-test-treeview2");

  gtk_window_set_transient_for (GTK_WINDOW (tt_d->dialog), GTK_WINDOW (de));


  g_object_set (dict_view, "model", tt_d->dict,
		"predicate",
		var_is_numeric, NULL);

  
  tt_d->list_store = gtk_tree_view_get_model (GTK_TREE_VIEW (tt_d->pairs_treeview));

  psppire_selector_set_select_func (PSPPIRE_SELECTOR (selector),
				    select_as_pair_member,
				    tt_d);

  g_signal_connect_swapped (tt_d->dialog, "refresh",
			    G_CALLBACK (refresh),  tt_d);

  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (tt_d->dialog),
				      dialog_state_valid, tt_d);

  return tt_d;
}
コード例 #4
0
static void
run_define_groups (PsppireDialogActionIndepSamps *act)
{
  gint response;
  PsppireDialogAction *da = PSPPIRE_DIALOG_ACTION (act);

  if ( act->dg_table2->parent)
    gtk_container_remove (GTK_CONTAINER (act->dg_table2->parent), act->dg_table2);

  if ( act->dg_table1->parent)
    gtk_container_remove (GTK_CONTAINER (act->dg_table1->parent), act->dg_table1);


  if ( var_is_numeric (act->grp_var))
    {
      gtk_table_attach_defaults (GTK_TABLE (act->dg_table1), act->dg_table2,
  				 1, 2, 1, 2);

      gtk_container_add (GTK_CONTAINER (act->dg_box), act->dg_table1);
    }
  else
    {
      gtk_container_add (GTK_CONTAINER (act->dg_box), act->dg_table2);
      act->group_defn = GROUPS_VALUES;
    }


  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (act->dg_dialog),
  				      define_groups_state_valid, act);

  psppire_value_entry_set_variable (PSPPIRE_VALUE_ENTRY (act->dg_grp_entry[0]), act->grp_var);
  psppire_value_entry_set_variable (PSPPIRE_VALUE_ENTRY (act->dg_grp_entry[1]), act->grp_var);
  psppire_value_entry_set_variable (PSPPIRE_VALUE_ENTRY (act->dg_cut_point_entry), act->grp_var);

  if ( act->group_defn != GROUPS_CUT_POINT )
    {
      gtk_toggle_button_set_active
  	(GTK_TOGGLE_BUTTON (act->dg_cut_point_toggle_button), TRUE);

      gtk_toggle_button_set_active
  	(GTK_TOGGLE_BUTTON (act->dg_values_toggle_button), TRUE);
    }
  else
    {
      gtk_toggle_button_set_active
  	(GTK_TOGGLE_BUTTON (act->dg_values_toggle_button), TRUE);

      gtk_toggle_button_set_active
  	(GTK_TOGGLE_BUTTON (act->dg_cut_point_toggle_button), TRUE);
    }

  g_signal_emit_by_name (act->dg_grp_entry[0], "changed");
  g_signal_emit_by_name (act->dg_grp_entry[1], "changed");
  g_signal_emit_by_name (act->dg_cut_point_entry, "changed");

  response = psppire_dialog_run (PSPPIRE_DIALOG (act->def_grps_dialog));

  if (response == PSPPIRE_RESPONSE_CONTINUE)
    {
      const int width = var_get_width (act->grp_var);

      if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (act->dg_values_toggle_button)))
	{
	  act->group_defn = GROUPS_VALUES;

          psppire_value_entry_get_value (PSPPIRE_VALUE_ENTRY (act->dg_grp_entry[0]),
					 &act->grp_val[0], width);

          psppire_value_entry_get_value (PSPPIRE_VALUE_ENTRY (act->dg_grp_entry[1]),
					 &act->grp_val[1], width);
	}
      else
	{
	  act->group_defn = GROUPS_CUT_POINT;

          psppire_value_entry_get_value (PSPPIRE_VALUE_ENTRY (act->dg_cut_point_entry),
					 &act->cut_point, width);
	}

      psppire_dialog_notify_change (PSPPIRE_DIALOG (da->dialog));
    }
}
コード例 #5
0
ファイル: compute-dialog.c プロジェクト: RobertDash/pspp
/* Pops up the Compute dialog box */
void
compute_dialog (PsppireDataWindow *de)
{
  gint response;

  PsppireVarStore *vs = NULL;
  struct compute_dialog scd;

  GtkBuilder *xml = builder_new ("compute.ui");

  GtkWidget *dialog = get_widget_assert   (xml, "compute-variable-dialog");

  GtkWidget *dict_view = get_widget_assert (xml, "compute-treeview1");
  GtkWidget *functions = get_widget_assert (xml, "compute-treeview2");
  GtkWidget *keypad    = get_widget_assert (xml, "psppire-keypad1");
  GtkWidget *target    = get_widget_assert (xml, "compute-entry1");
  GtkWidget *var_selector = get_widget_assert (xml, "compute-selector1");
  GtkWidget *func_selector = get_widget_assert (xml, "compute-selector2");
  GtkWidget *type_and_label = get_widget_assert (xml, "compute-button1");

  GtkWidget *expression =
	get_widget_assert (xml, "radio-button-expression-label");


  g_object_get (de->data_editor, "var-store", &vs, NULL);
  g_object_get (vs, "dictionary", &scd.dict, NULL);
  scd.use_type = FALSE;

  g_signal_connect (expression, "toggled",
		    G_CALLBACK(on_expression_toggle), &scd);

  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de));

  
  g_object_set (dict_view, "model", scd.dict,
		"selection-mode", GTK_SELECTION_SINGLE,
		NULL);

  psppire_selector_set_select_func (PSPPIRE_SELECTOR (var_selector),
				    insert_source_row_into_text_view, NULL);

  function_list_populate (GTK_TREE_VIEW (functions));

  psppire_selector_set_select_func (PSPPIRE_SELECTOR (func_selector),
				    insert_function_into_syntax_area, NULL);

  scd.xml = xml;

  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
				      contents_plausible, &scd);

  g_signal_connect (target, "changed", G_CALLBACK (on_target_change), &scd);

  g_signal_connect (dialog, "refresh", G_CALLBACK (refresh),  &scd);

  g_signal_connect (keypad, "insert-syntax",
		    G_CALLBACK (on_keypad_button),  xml);

  g_signal_connect (keypad, "erase",
		    G_CALLBACK (erase),  xml);


  g_signal_connect (type_and_label, "clicked",
		    G_CALLBACK (run_type_label_dialog),  &scd);



  response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));


  switch (response)
    {
    case GTK_RESPONSE_OK:
      g_free (execute_syntax_string (de, generate_syntax (&scd)));
      break;
    case PSPPIRE_RESPONSE_PASTE:
      g_free (paste_syntax_to_window (generate_syntax (&scd)));
      break;
    default:
      break;
    }

  g_object_unref (xml);
}
コード例 #6
0
/* Pops up the dialog box */
void
t_test_independent_samples_dialog (PsppireDataWindow *de)
{
  struct tt_indep_samples_dialog tt_d;
  gint response;

  PsppireVarStore *vs = NULL;

  GtkBuilder *xml = builder_new ("t-test.ui");

  GtkWidget *dict_view =
    get_widget_assert (xml, "indep-samples-t-test-treeview1");

  GtkWidget *selector2 =
    get_widget_assert (xml, "indep-samples-t-test-selector2");

  GtkWidget *selector1 =
    get_widget_assert (xml, "indep-samples-t-test-selector1");

  GtkWidget *options_button =
    get_widget_assert (xml, "indep-samples-t-test-options-button");

  g_object_get (de->data_editor, "var-store", &vs, NULL);

  tt_d.dialog = get_widget_assert (xml, "t-test-independent-samples-dialog");
  tt_d.xml = xml;
  g_object_get (vs, "dictionary", &tt_d.dict, NULL);

  tt_d.define_groups_button = get_widget_assert (xml, "define-groups-button");
  tt_d.groups_entry = get_widget_assert (xml, "indep-samples-t-test-entry");
  tt_d.opts = tt_options_dialog_create (GTK_WINDOW (de));
  tt_d.grps = tt_groups_dialog_create (xml, GTK_WINDOW (de));


  gtk_window_set_transient_for (GTK_WINDOW (tt_d.dialog), GTK_WINDOW (de));

  g_object_set (dict_view, "model", tt_d.dict, NULL);

  psppire_selector_set_allow (PSPPIRE_SELECTOR (selector1),
			      numeric_only);


  psppire_selector_set_filter_func (PSPPIRE_SELECTOR (selector2),
				 is_currently_in_entry);

  g_signal_connect_swapped (tt_d.define_groups_button, "clicked",
			    G_CALLBACK (run_define_groups), &tt_d);


  g_signal_connect_swapped (options_button, "clicked",
			    G_CALLBACK (tt_options_dialog_run), tt_d.opts);


  g_signal_connect_swapped (tt_d.dialog, "refresh", G_CALLBACK (refresh),
			    &tt_d);

  g_signal_connect (tt_d.groups_entry, "changed",
		    G_CALLBACK (set_define_groups_sensitivity), &tt_d);


  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (tt_d.dialog),
				      dialog_state_valid, &tt_d);

  response = psppire_dialog_run (PSPPIRE_DIALOG (tt_d.dialog));

  switch (response)
    {
    case GTK_RESPONSE_OK:
      g_free (execute_syntax_string (de, generate_syntax (&tt_d)));
      break;
    case PSPPIRE_RESPONSE_PASTE:
      g_free (paste_syntax_to_window (generate_syntax (&tt_d)));
      break;
    default:
      break;
    }

  tt_options_dialog_destroy (tt_d.opts);
  tt_groups_dialog_destroy (tt_d.grps);

  g_object_unref (xml);
}
コード例 #7
0
static void
run_define_groups (struct tt_indep_samples_dialog *ttd)
{
  struct tt_groups_dialog *grps = ttd->grps;

  gint response;

  GtkWidget *box = get_widget_assert (ttd->xml, "dialog-hbox2");

  const gchar *text = gtk_entry_get_text (GTK_ENTRY (ttd->groups_entry));

  const struct variable *v = psppire_dict_lookup_var (ttd->dict, text);

  if ( grps->table2->parent)
    gtk_container_remove (GTK_CONTAINER (grps->table2->parent), grps->table2);

  if ( grps->table1->parent)
    gtk_container_remove (GTK_CONTAINER (grps->table1->parent), grps->table1);


  if ( var_is_numeric (v))
    {
      gtk_table_attach_defaults (GTK_TABLE (grps->table1), grps->table2,
				 1, 2, 1, 2);

      gtk_container_add (GTK_CONTAINER (box), grps->table1);
    }
  else
    {
      gtk_container_add (GTK_CONTAINER (box), grps->table2);
      grps->group_defn = GROUPS_VALUES;
    }


  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (grps->dialog),
				      define_groups_state_valid, grps);

  if ( grps->group_defn != GROUPS_CUT_POINT )
    {
      gtk_toggle_button_set_active
	(GTK_TOGGLE_BUTTON (grps->cut_point_toggle_button), TRUE);

      gtk_toggle_button_set_active
	(GTK_TOGGLE_BUTTON (grps->values_toggle_button), TRUE);

      gtk_entry_set_text (GTK_ENTRY (grps->grp_entry[0]), grps->val[0]);
      gtk_entry_set_text (GTK_ENTRY (grps->grp_entry[1]), grps->val[1]);

      gtk_entry_set_text (GTK_ENTRY (grps->cut_point_entry), "");
    }
  else
    {
      gtk_toggle_button_set_active
	(GTK_TOGGLE_BUTTON (grps->values_toggle_button), TRUE);

      gtk_toggle_button_set_active
	(GTK_TOGGLE_BUTTON (grps->cut_point_toggle_button), TRUE);

      gtk_entry_set_text (GTK_ENTRY (grps->grp_entry[0]), "");
      gtk_entry_set_text (GTK_ENTRY (grps->grp_entry[1]), "");

      gtk_entry_set_text (GTK_ENTRY (grps->cut_point_entry), grps->val[0]);
    }

  g_signal_emit_by_name (grps->grp_entry[0], "changed");
  g_signal_emit_by_name (grps->grp_entry[1], "changed");
  g_signal_emit_by_name (grps->cut_point_entry, "changed");

  response = psppire_dialog_run (PSPPIRE_DIALOG (grps->dialog));

  if (response == PSPPIRE_RESPONSE_CONTINUE)
    {
      g_free (grps->val[0]);
      g_free (grps->val[1]);

      if (gtk_toggle_button_get_active
	  (GTK_TOGGLE_BUTTON (grps->values_toggle_button)))
	{
	  grps->group_defn = GROUPS_VALUES;

	  grps->val[0] =
	    xstrdup (gtk_entry_get_text (GTK_ENTRY (grps->grp_entry[0])));

	  grps->val[1] =
	    xstrdup (gtk_entry_get_text (GTK_ENTRY (grps->grp_entry[1])));
	}
      else
	{
	  grps->group_defn = GROUPS_CUT_POINT;

	  grps->val[1] = NULL;

	  grps->val[0] =
	    xstrdup (gtk_entry_get_text (GTK_ENTRY (grps->cut_point_entry)));
	}

      psppire_dialog_notify_change (PSPPIRE_DIALOG (ttd->dialog));
    }
}
コード例 #8
0
ファイル: recode-dialog.c プロジェクト: RobertDash/pspp
static void
recode_dialog (PsppireDataWindow *de, gboolean diff)
{
  gint response;

  struct recode_dialog rd;

  GtkBuilder *builder = builder_new ("recode.ui");

  GtkWidget *selector = get_widget_assert (builder, "psppire-selector1");

  GtkWidget *oldandnew = get_widget_assert (builder, "button1");


  GtkWidget *output_variable_box = get_widget_assert (builder,"frame4");

  PsppireVarStore *vs = NULL;
  g_object_get (de->data_editor, "var-store", &vs, NULL);

  rd.change_button = get_widget_assert (builder, "change-button");
  rd.varmap = NULL;
  rd.dialog = get_widget_assert   (builder, "recode-dialog");
  rd.dict_treeview = get_widget_assert (builder, "treeview1");
  rd.variable_treeview =   get_widget_assert (builder, "treeview2");
  rd.new_name_entry = get_widget_assert (builder, "dest-name-entry");
  rd.new_label_entry = get_widget_assert (builder, "dest-label-entry");

  g_object_get (vs, "dictionary", &rd.dict, NULL);

  rd.value_map = gtk_list_store_new (2,
				     old_value_get_type (),
				     new_value_get_type ()
				     );

  g_object_set (output_variable_box, "visible", diff, NULL);

  if ( diff )
    gtk_window_set_title (GTK_WINDOW (rd.dialog),
			  _("Recode into Different Variables"));
  else
    gtk_window_set_title (GTK_WINDOW (rd.dialog),
			  _("Recode into Same Variables"));

  rd.different = diff;

  gtk_window_set_transient_for (GTK_WINDOW (rd.dialog), GTK_WINDOW (de));

  g_object_set (rd.dict_treeview, "model", rd.dict, NULL);

  if (rd.different)
    {
      GtkTreeSelection *sel;

      GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();

      GtkTreeViewColumn *col = gtk_tree_view_column_new_with_attributes (_("New"),
									 renderer,
									 "text", NULL,
									 NULL);

      gtk_tree_view_column_set_cell_data_func (col, renderer,
					       render_new_var_name,
					       &rd, NULL);


      gtk_tree_view_append_column (GTK_TREE_VIEW (rd.variable_treeview), col);


      col = gtk_tree_view_get_column (GTK_TREE_VIEW (rd.variable_treeview), 0);

      g_object_set (col, "title", _("Old"), NULL);

      g_object_set (rd.variable_treeview, "headers-visible", TRUE, NULL);

      rd.varmap = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, nlp_destroy);

      sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (rd.variable_treeview));

      g_signal_connect (sel, "changed",
			G_CALLBACK (on_selection_change), &rd);

      g_signal_connect (rd.change_button, "clicked",
			G_CALLBACK (on_change_clicked),  &rd);

    }

  psppire_selector_set_allow (PSPPIRE_SELECTOR (selector), homogeneous_types);

  /* Set up the Old & New Values subdialog */
  {
    rd.string_button = get_widget_assert (builder, "checkbutton1");
    rd.width_entry   = get_widget_assert (builder, "spinbutton1");

    rd.convert_button           = get_widget_assert (builder, "checkbutton2");

    rd.old_value_chooser = get_widget_assert (builder, "val-chooser");

    rd.new_value_entry = get_widget_assert (builder, "entry1");


    rd.toggle[BUTTON_NEW_VALUE]  = get_widget_assert (builder, "radiobutton1");
    rd.toggle[BUTTON_NEW_SYSMIS] = get_widget_assert (builder, "radiobutton2");
    rd.toggle[BUTTON_NEW_COPY]   = get_widget_assert (builder, "radiobutton3");

    rd.new_copy_label = get_widget_assert (builder, "label3");
    rd.strings_box    = get_widget_assert (builder, "table3");

    rd.old_and_new_dialog =
      PSPPIRE_DIALOG (get_widget_assert (builder, "old-new-values-dialog"));

    gtk_window_set_transient_for (GTK_WINDOW (rd.old_and_new_dialog),
				  GTK_WINDOW (de));

    rd.acr = PSPPIRE_ACR (get_widget_assert (builder, "psppire-acr1"));

    g_signal_connect_swapped (rd.toggle[BUTTON_NEW_VALUE], "toggled",
		      G_CALLBACK (set_acr), &rd);

    g_signal_connect_swapped (rd.new_value_entry, "changed",
		      G_CALLBACK (set_acr), &rd);

    {
      GtkTreeSelection *sel;
      /* Remove the ACR's default column.  We don't like it */
      GtkTreeViewColumn *column = gtk_tree_view_get_column (rd.acr->tv, 0);
      gtk_tree_view_remove_column (rd.acr->tv, column);


      column =
	gtk_tree_view_column_new_with_attributes (_("Old"),
						  gtk_cell_renderer_text_new (),
						  "text", 0,
						  NULL);

      gtk_tree_view_append_column (rd.acr->tv, column);

      column =
	gtk_tree_view_column_new_with_attributes (_("New"),
						  gtk_cell_renderer_text_new (),
						  "text", 1,
						  NULL);

      gtk_tree_view_append_column (rd.acr->tv, column);
      g_object_set (rd.acr->tv, "headers-visible", TRUE, NULL);


      sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (rd.acr->tv));
      g_signal_connect (sel, "changed",
			G_CALLBACK (on_acr_selection_change), &rd);
    }


    g_signal_connect_swapped (oldandnew, "clicked",
			      G_CALLBACK (run_old_and_new_dialog), &rd);


    g_signal_connect (rd.toggle[BUTTON_NEW_VALUE], "toggled",
		      G_CALLBACK (toggle_sensitivity), rd.new_value_entry);

    g_signal_connect (rd.string_button, "toggled",
		      G_CALLBACK (toggle_sensitivity), rd.width_entry);

    g_signal_connect (rd.string_button, "toggled",
		      G_CALLBACK (on_string_toggled), &rd);

    g_signal_connect (rd.convert_button, "toggled",
		      G_CALLBACK (on_convert_toggled), &rd);

    g_signal_connect_swapped (rd.old_and_new_dialog, "show",
			      G_CALLBACK (on_old_new_show), &rd);
  }

  g_signal_connect (rd.dialog, "refresh", G_CALLBACK (refresh),  &rd);


  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (rd.dialog),
				      dialog_state_valid, &rd);

  response = psppire_dialog_run (PSPPIRE_DIALOG (rd.dialog));

  switch (response)
    {
    case GTK_RESPONSE_OK:
      g_free (execute_syntax_string (de, generate_syntax (&rd)));
      break;
    case PSPPIRE_RESPONSE_PASTE:
      g_free (paste_syntax_to_window (generate_syntax (&rd)));
      break;
    default:
      break;
    }

  if (rd.varmap)
    g_hash_table_destroy (rd.varmap);

  gtk_list_store_clear (GTK_LIST_STORE (rd.value_map));
  g_object_unref (rd.value_map);

  g_object_unref (builder);
}
コード例 #9
0
ファイル: crosstabs-dialog.c プロジェクト: RobertDash/pspp
/* Pops up the Crosstabs dialog box */
void
crosstabs_dialog (PsppireDataWindow *de)
{
  gint response;
  struct crosstabs_dialog cd;

  GtkBuilder *xml = builder_new ("crosstabs.ui");
  PsppireVarStore *vs = NULL;
  PsppireDict *dict = NULL;


  GtkWidget *dialog = get_widget_assert   (xml, "crosstabs-dialog");
  GtkWidget *source = get_widget_assert   (xml, "dict-treeview");
  GtkWidget *dest_rows =   get_widget_assert   (xml, "rows");
  GtkWidget *dest_cols =   get_widget_assert   (xml, "cols");
  GtkWidget *format_button = get_widget_assert (xml, "format-button");
  GtkWidget *stat_button = get_widget_assert (xml, "stats-button");
  GtkWidget *cell_button = get_widget_assert (xml, "cell-button");


  cd.stat_view = get_widget_assert (xml, "stats-view");
  cd.cell_view = get_widget_assert (xml, "cell-view");

  g_object_get (de->data_editor, "var-store", &vs, NULL);

  put_checkbox_items_in_treeview (GTK_TREE_VIEW(cd.stat_view),
				  B_CS_STATS_DEFAULT,
				  N_CROSSTABS_STATS,
				  stats
				  );
  put_checkbox_items_in_treeview (GTK_TREE_VIEW(cd.cell_view),
				  B_CS_CELL_DEFAULT,
				  N_CROSSTABS_CELLS,
				  cells
				  );

  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (de));

  g_object_get (vs, "dictionary", &dict, NULL);
  g_object_set (source, "model", dict, NULL);

  cd.row_vars = GTK_TREE_VIEW (dest_rows);
  cd.col_vars = GTK_TREE_VIEW (dest_cols);
  g_object_get (vs, "dictionary", &cd.dict, NULL);
  cd.format_dialog = get_widget_assert (xml, "format-dialog");
  cd.table_button = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "print-tables"));
  cd.pivot_button = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "pivot"));
  cd.stat_dialog = get_widget_assert (xml, "stat-dialog");
  cd.cell_dialog = get_widget_assert (xml, "cell-dialog");

  cd.stat = gtk_tree_view_get_model (GTK_TREE_VIEW (cd.stat_view));
  cd.cell = gtk_tree_view_get_model (GTK_TREE_VIEW (cd.cell_view));
  cd.avalue = GTK_TOGGLE_BUTTON (get_widget_assert (xml, "ascending"));
  cd.current_opts.avalue = TRUE;
  cd.current_opts.table = TRUE;
  cd.current_opts.pivot = TRUE;

  gtk_window_set_transient_for (GTK_WINDOW (cd.format_dialog), GTK_WINDOW (de));
  gtk_window_set_transient_for (GTK_WINDOW (cd.cell_dialog), GTK_WINDOW (de));
  gtk_window_set_transient_for (GTK_WINDOW (cd.stat_dialog), GTK_WINDOW (de));

  g_signal_connect (dialog, "refresh", G_CALLBACK (refresh),  &cd);

  psppire_dialog_set_valid_predicate (PSPPIRE_DIALOG (dialog),
				      dialog_state_valid, &cd);

  g_signal_connect_swapped (format_button, "clicked",
			    G_CALLBACK (on_format_clicked),  &cd);
  g_signal_connect_swapped (stat_button, "clicked",
			    G_CALLBACK (on_statistics_clicked),  &cd);
  g_signal_connect_swapped (cell_button, "clicked",
			    G_CALLBACK (on_cell_clicked),  &cd);

  response = psppire_dialog_run (PSPPIRE_DIALOG (dialog));


  switch (response)
    {
    case GTK_RESPONSE_OK:
      g_free (execute_syntax_string (de, generate_syntax (&cd)));
      break;
    case PSPPIRE_RESPONSE_PASTE:
      g_free (paste_syntax_to_window (generate_syntax (&cd)));
      break;
    default:
      break;
    }

  g_object_unref (xml);
}