static const gchar label2[] = N_("Exactly %3d cases from the first %3d cases.");
+/* Ensure that the range "first" and "last" spinbuttons are self consistent */
+static void
+sample_consistent (GtkSpinButton *spin, PsppireDialogActionSelect *act)
+{
+ gdouble size = gtk_spin_button_get_value (GTK_SPIN_BUTTON (act->spin_sample_size));
+ gdouble limit = gtk_spin_button_get_value (GTK_SPIN_BUTTON (act->spin_sample_limit));
+
+ if (limit < size)
+ {
+ if (spin == GTK_SPIN_BUTTON (act->spin_sample_size))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (act->spin_sample_limit), size);
+ if (spin == GTK_SPIN_BUTTON (act->spin_sample_limit))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (act->spin_sample_size), limit);
+ }
+}
+
+
static void
sample_subdialog (GtkButton *b, gpointer data)
{
if (!scd->hbox2)
{
scd->hbox2 =
- psppire_scanf_new (gettext (label2), &scd->spinbutton1, &scd->spinbutton2);
+ psppire_scanf_new (gettext (label2), &scd->spin_sample_size, &scd->spin_sample_limit);
- gtk_spin_button_set_range (GTK_SPIN_BUTTON (scd->spinbutton1),
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (scd->spin_sample_size),
1, case_count);
- gtk_spin_button_set_range (GTK_SPIN_BUTTON (scd->spinbutton2),
+ gtk_spin_button_set_range (GTK_SPIN_BUTTON (scd->spin_sample_limit),
1, case_count);
+ g_signal_connect (scd->spin_sample_size, "value-changed", G_CALLBACK (sample_consistent), scd);
+ g_signal_connect (scd->spin_sample_limit, "value-changed", G_CALLBACK (sample_consistent), scd);
+
+
gtk_widget_show (scd->hbox2);
gtk_widget_set_sensitive (scd->hbox2, FALSE);
else
{
text =
- widget_printf (gettext(label2), scd->spinbutton1, scd->spinbutton2);
+ widget_printf (gettext(label2), scd->spin_sample_size, scd->spin_sample_limit);
gtk_label_set_text (GTK_LABEL (scd->l0), text);
}
}
}
+/* Ensure that the range "first" and "last" spinbuttons are self consistent */
+static void
+consistency (GtkSpinButton *spin, PsppireDialogActionSelect *act)
+{
+ gdouble first = gtk_spin_button_get_value (GTK_SPIN_BUTTON (act->first));
+ gdouble last = gtk_spin_button_get_value (GTK_SPIN_BUTTON (act->last));
+
+ if (last < first)
+ {
+ if (spin == GTK_SPIN_BUTTON (act->first))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (act->last), first);
+ if (spin == GTK_SPIN_BUTTON (act->last))
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (act->first), last);
+ }
+}
static void
psppire_dialog_action_select_activate (PsppireDialogAction *a)
pda->dialog = get_widget_assert (xml, "select-cases-dialog");
pda->source = get_widget_assert (xml, "select-cases-treeview");
- g_object_set (pda->source,
+ g_object_set (pda->source,
"selection-mode", GTK_SELECTION_SINGLE,
NULL);
-
+
act->entry = get_widget_assert (xml, "filter-variable-entry");
GtkWidget *selector = get_widget_assert (xml, "psppire-selector-filter");
act->first = get_widget_assert (xml, "range-dialog-first");
act->last = get_widget_assert (xml, "range-dialog-last");
+ g_signal_connect (act->first, "value-changed", G_CALLBACK (consistency), act);
+ g_signal_connect (act->last, "value-changed", G_CALLBACK (consistency), act);
+
act->l1 = get_widget_assert (xml, "range-sample-label");
act->radiobutton_sample = get_widget_assert (xml, "radiobutton-sample");
psppire_dialog_action_set_valid_predicate (pda,
dialog_state_valid);
- if (PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_select_parent_class)->activate)
- PSPPIRE_DIALOG_ACTION_CLASS (psppire_dialog_action_select_parent_class)->activate (pda);
}
static char *
-generate_syntax_filter (PsppireDialogAction *a)
+generate_syntax_filter (const PsppireDialogAction *a)
{
PsppireDialogActionSelect *scd = PSPPIRE_DIALOG_ACTION_SELECT (a);
else
{
const gint n_cases =
- gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton1));
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spin_sample_size));
const gint from_n_cases =
- gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton2));
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spin_sample_limit));
const gchar ranvar[]="rv_$";
filter, ranvar);
ds_put_cstr (&dss, "EXECUTE.\n");
-
+
ds_put_c_format (&dss,
"COMPUTE %s = $CASENUM.\n",
static gchar *
-generate_syntax_delete (PsppireDialogAction *a)
+generate_syntax_delete (const PsppireDialogAction *a)
{
PsppireDialogActionSelect *scd = PSPPIRE_DIALOG_ACTION_SELECT (a);
gchar *text = NULL;
(GTK_TOGGLE_BUTTON (scd->radiobutton_sample)))
{
ds_put_cstr (&dss, "SAMPLE ");
-
+
if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (scd->percent)))
{
const double percentage =
else
{
const gint n_cases =
- gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton1));
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spin_sample_size));
const gint from_n_cases =
- gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton2));
-
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spin_sample_limit));
+
ds_put_c_format (&dss, "%d FROM %d .", n_cases, from_n_cases);
}
-
+
}
else if ( gtk_toggle_button_get_active
(GTK_TOGGLE_BUTTON (scd->radiobutton_range)))
static gchar *
-generate_syntax (PsppireDialogAction *a)
+generate_syntax (const PsppireDialogAction *a)
{
PsppireDialogActionSelect *scd = PSPPIRE_DIALOG_ACTION_SELECT (a);
{
return g_strdup ("FILTER OFF.\n");
}
-
+
/* Are we filtering or deleting ? */
if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (scd->radiobutton_delete)))
{