[gnumeric] Redesign autofilter Top10 dialog. [#646641]



commit 0ceb00962d9037cdeb1d7d1ac40c9a72e613792a
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Sun Apr 10 17:48:30 2011 -0600

    Redesign autofilter Top10 dialog. [#646641]
    
    2011-04-10  Andreas J. Guelzow <aguelzow pyrshep ca>
    
    	* autofilter-top10.ui: redesign
    	* dialog-autofilter.c (type_group): new
    	(autofilter_get_type): new
    	(cb_autofilter_ok): access radio buttons
    	(cb_top10_count_changed): new
    	(cb_autofilter_ok): access radio buttons
    	(cb_top10_type_changed): use autofilter_get_type
    	(dialog_auto_filter_get_col_name): new
    	(dialog_auto_filter): split into dialog_auto_filter and
    	(dialog_auto_filter_expression): extracted from dialog_auto_filter

 NEWS                            |    1 +
 src/dialogs/ChangeLog           |   13 ++
 src/dialogs/autofilter-top10.ui |  133 ++++++++---------
 src/dialogs/dialog-autofilter.c |  315 ++++++++++++++++++++++++++++++---------
 4 files changed, 321 insertions(+), 141 deletions(-)
---
diff --git a/NEWS b/NEWS
index 270c1ee..903c2da 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ Gnumeric 1.10.15
 Andreas:
 	* Fix shift-arrow movement for sheet objects. [#645805]
 	* Expand the description of SSMEDIAN. [#647247]
+	* Redesign autofilter Top10 dialog. [#646641]
 
 Morten:
 	* Fix problems with localized function docs.
diff --git a/src/dialogs/ChangeLog b/src/dialogs/ChangeLog
index b28ce5a..16afb03 100644
--- a/src/dialogs/ChangeLog
+++ b/src/dialogs/ChangeLog
@@ -1,3 +1,16 @@
+2011-04-10  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+	* autofilter-top10.ui: redesign
+	* dialog-autofilter.c (type_group): new
+	(autofilter_get_type): new
+	(cb_autofilter_ok): access radio buttons
+	(cb_top10_count_changed): new
+	(cb_autofilter_ok): access radio buttons
+	(cb_top10_type_changed): use autofilter_get_type
+	(dialog_auto_filter_get_col_name): new
+	(dialog_auto_filter): split into dialog_auto_filter and
+	(dialog_auto_filter_expression): extracted from dialog_auto_filter
+
 2011-04-04  Andreas J. Guelzow <aguelzow pyrshep ca>
 
 	* dialog-define-names.c (name_guru_init): use the correct key
diff --git a/src/dialogs/autofilter-top10.ui b/src/dialogs/autofilter-top10.ui
index 9963905..a28273b 100644
--- a/src/dialogs/autofilter-top10.ui
+++ b/src/dialogs/autofilter-top10.ui
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <!-- interface-requires gtk+ 2.12 -->
   <!-- interface-naming-policy toplevel-contextual -->
@@ -41,11 +41,9 @@
     <property name="title" translatable="yes">Gnumeric : AutoFilter</property>
     <property name="window_position">mouse</property>
     <property name="type_hint">normal</property>
-    <property name="has_separator">False</property>
     <child internal-child="vbox">
       <object class="GtkVBox" id="dialog-vbox1">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkLabel" id="col-label">
@@ -65,12 +63,7 @@
             <child>
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">Show:</property>
-                <accessibility>
-                  <relation type="label-for" target="top_vs_bottom_option_menu"/>
-                  <relation type="label-for" target="item_vs_percentage_option_menu"/>
-                  <relation type="label-for" target="item_count"/>
-                </accessibility>
+                <property name="label" translatable="yes">Count or percentage:</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -79,75 +72,14 @@
               </packing>
             </child>
             <child>
-              <object class="GtkAlignment" id="alignment1">
-                <property name="visible">True</property>
-                <property name="yscale">0</property>
-                <child>
-                  <object class="GtkComboBox" id="top_vs_bottom_option_menu">
-                    <property name="visible">True</property>
-                    <property name="model">model1</property>
-                    <accessibility>
-                      <relation type="labelled-by" target="label1"/>
-                      <relation type="label-for" target="item_vs_percentage_option_menu"/>
-                      <relation type="label-for" target="item_count"/>
-                    </accessibility>
-                    <child>
-                      <object class="GtkCellRendererText" id="renderer1"/>
-                      <attributes>
-                        <attribute name="text">0</attribute>
-                      </attributes>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
               <object class="GtkSpinButton" id="item_count">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="adjustment">adjustment1</property>
                 <property name="climb_rate">1</property>
-                <accessibility>
-                  <relation type="labelled-by" target="top_vs_bottom_option_menu"/>
-                  <relation type="labelled-by" target="label1"/>
-                  <relation type="label-for" target="item_vs_percentage_option_menu"/>
-                </accessibility>
-              </object>
-              <packing>
-                <property name="position">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkAlignment" id="alignment2">
-                <property name="visible">True</property>
-                <property name="yscale">0</property>
-                <child>
-                  <object class="GtkComboBox" id="item_vs_percentage_option_menu">
-                    <property name="visible">True</property>
-                    <property name="model">model2</property>
-                    <accessibility>
-                      <relation type="labelled-by" target="top_vs_bottom_option_menu"/>
-                      <relation type="labelled-by" target="label1"/>
-                      <relation type="labelled-by" target="item_count"/>
-                    </accessibility>
-                    <child>
-                      <object class="GtkCellRendererText" id="renderer2"/>
-                      <attributes>
-                        <attribute name="text">0</attribute>
-                      </attributes>
-                    </child>
-                  </object>
-                </child>
               </object>
               <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">3</property>
+                <property name="position">1</property>
               </packing>
             </child>
           </object>
@@ -157,6 +89,65 @@
             <property name="position">2</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkRadioButton" id="items-largest">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="items-smallest">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">items-largest</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">4</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="percentage-largest">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">items-largest</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">5</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkRadioButton" id="percentage-smallest">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="receives_default">False</property>
+            <property name="active">True</property>
+            <property name="draw_indicator">True</property>
+            <property name="group">items-largest</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">6</property>
+          </packing>
+        </child>
         <child internal-child="action_area">
           <object class="GtkHButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
diff --git a/src/dialogs/dialog-autofilter.c b/src/dialogs/dialog-autofilter.c
index b1a3dac..e431f5f 100644
--- a/src/dialogs/dialog-autofilter.c
+++ b/src/dialogs/dialog-autofilter.c
@@ -53,6 +53,22 @@ typedef struct {
 #define DIALOG_KEY_EXPRESSION "autofilter-expression"
 #define UNICODE_ELLIPSIS "\xe2\x80\xa6"
 
+static char const * const type_group[] = {
+	"items-largest",
+	"items-smallest",
+	"percentage-largest",
+	"percentage-smallest",
+	NULL
+};
+
+static GnmFilterOp
+autofilter_get_type (AutoFilterState *state)
+{
+	return (GNM_FILTER_OP_TYPE_BUCKETS | 
+		gnm_gui_group_value (state->gui, type_group));
+}
+
+
 static void
 cb_autofilter_destroy (AutoFilterState *state)
 {
@@ -133,27 +149,28 @@ cb_autofilter_ok (G_GNUC_UNUSED GtkWidget *button,
 			GnmFilterOp op1;
 			GnmValue *v1 = map_op (state, &op1, "op1", "value1");
 			if (op1 != GNM_FILTER_UNUSED) {
-				w = go_gtk_builder_get_widget (state->gui, "and_button");
-				cond = gnm_filter_condition_new_double (op0, v0,
-						gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)),
-						op1, v1);
+				w = go_gtk_builder_get_widget (state->gui, 
+							       "and_button");
+				cond = gnm_filter_condition_new_double 
+					(op0, v0,
+					 gtk_toggle_button_get_active 
+					 (GTK_TOGGLE_BUTTON (w)),
+					 op1, v1);
 			} else
-				cond = gnm_filter_condition_new_single (op0, v0);
+				cond = gnm_filter_condition_new_single 
+					(op0, v0);
 		}
 	} else {
-		int bottom, percentage, count;
-
-		w = go_gtk_builder_get_widget (state->gui, "top_vs_bottom_option_menu");
-		bottom = gtk_combo_box_get_active (GTK_COMBO_BOX (w));
-
-		w = go_gtk_builder_get_widget (state->gui, "item_vs_percentage_option_menu");
-		percentage = gtk_combo_box_get_active (GTK_COMBO_BOX (w));
+		int count;
+		GnmFilterOp op = autofilter_get_type (state);
 
 		w = go_gtk_builder_get_widget (state->gui, "item_count");
 		count = gtk_spin_button_get_value (GTK_SPIN_BUTTON (w));
-		if (bottom >= 0 && percentage >= 0)
-			cond = gnm_filter_condition_new_bucket (
-					!bottom, !percentage, count);
+
+		cond = gnm_filter_condition_new_bucket 
+			(!(op & GNM_FILTER_OP_BOTTOM_MASK), 
+			 !(op & GNM_FILTER_OP_PERCENT_MASK), 
+			 count);
 	}
 	if (cond != NULL)
 		cmd_autofilter_set_condition (WORKBOOK_CONTROL (state->wbcg),
@@ -171,13 +188,68 @@ cb_autofilter_cancel (G_GNUC_UNUSED GtkWidget *button,
 }
 
 static void
-cb_top10_type_changed (GtkComboBox *menu,
+cb_top10_count_changed (GtkSpinButton *button,
+			AutoFilterState *state)
+{
+	int val = 0.5 + gtk_spin_button_get_value (button);
+	GtkWidget *w;
+	gchar *label;
+
+	w = go_gtk_builder_get_widget (state->gui, type_group[0]);
+	/* xgettext : %d gives the number of items in the autofilter. */
+	/* This is input to ngettext. */
+	label = g_strdup_printf (ngettext ("Show the largest item", 
+					   "Show the %3d largest items", val), 
+				 val);
+	gtk_button_set_label (GTK_BUTTON (w),label);
+	g_free(label);
+
+	w = go_gtk_builder_get_widget (state->gui, type_group[1]);
+	/* xgettext : %d gives the number of items in the autofilter. */
+	/* This is input to ngettext. */
+	label = g_strdup_printf (ngettext ("Show the smallest item", 
+					   "Show the %3d smallest items", val), 
+				 val);
+	gtk_button_set_label (GTK_BUTTON (w),label);
+	g_free(label);
+
+	if (val > 100)
+		val = 100;
+
+	w = go_gtk_builder_get_widget (state->gui, type_group[2]);
+	/* xgettext : %d gives the percentage of items in the autofilter. */
+	/* This is input to ngettext. */
+	label = g_strdup_printf 
+		(ngettext ("Show the largest %3d%% of the items", 
+			   "Show the largest %3d%% of the items", val), 
+		 val);
+	gtk_button_set_label (GTK_BUTTON (w),label);
+	g_free(label);
+
+	w = go_gtk_builder_get_widget (state->gui, type_group[3]);
+	/* xgettext : %d gives the percentage of items in the autofilter. */
+	/* This is input to ngettext. */
+	label = g_strdup_printf 
+		(ngettext ("Show the smallest %3d%% of the items", 
+			   "Show the smallest %3d%% of the items", val), 
+		 val);
+	gtk_button_set_label (GTK_BUTTON (w),label);
+	g_free(label);
+
+
+}
+
+static void
+cb_top10_type_changed (G_GNUC_UNUSED GtkToggleButton *button,
 		       AutoFilterState *state)
 {
+	GnmFilterOp op = autofilter_get_type (state);
 	GtkWidget *spin = go_gtk_builder_get_widget (state->gui, "item_count");
 
 	gtk_spin_button_set_range (GTK_SPIN_BUTTON (spin), 1.,
-		(gtk_combo_box_get_active (menu) > 0) ? 100. : 500.);
+				   (op == GNM_FILTER_OP_TOP_N_PERCENT || 
+				    op == GNM_FILTER_OP_BOTTOM_N_PERCENT) ? 100. 
+				   : 500.);
 }
 
 static void
@@ -225,10 +297,25 @@ init_operator (AutoFilterState *state, GnmFilterOp op, GnmValue const *v,
 	g_free (content);
 }
 
-void
-dialog_auto_filter (WBCGtk *wbcg,
-		    GnmFilter *filter, int field,
-		    gboolean is_expr, GnmFilterCondition *cond)
+static gchar *
+dialog_auto_filter_get_col_name (GnmCell *cell, int col, int len)
+{
+	gchar *label;
+	char *content = gnm_cell_get_rendered_text (cell);
+	if (g_utf8_strlen (content, -1) > len) {
+		char *end = g_utf8_find_prev_char 
+			(content, content + len + 1 - strlen (UNICODE_ELLIPSIS));
+		strcpy (end, UNICODE_ELLIPSIS);
+	}
+	label = g_strdup_printf (_("Column %s (\"%s\")"),
+				 col_name (col), content);
+	g_free (content);
+	return label;
+}
+static void
+dialog_auto_filter_expression (WBCGtk *wbcg,
+			       GnmFilter *filter, int field,
+			       GnmFilterCondition *cond)
 {
 	AutoFilterState *state;
 	GtkWidget *w;
@@ -236,14 +323,14 @@ dialog_auto_filter (WBCGtk *wbcg,
 	int col;
 	gchar *label;
 	GnmCell *cell;
-	int len = is_expr ? 15 : 30;
+	int const len = 15;
 
 	g_return_if_fail (wbcg != NULL);
 
 	if (gnumeric_dialog_raise_if_exists
-	    (wbcg, is_expr ? DIALOG_KEY_EXPRESSION : DIALOG_KEY))
+	    (wbcg, DIALOG_KEY_EXPRESSION))
 		return;
-	gui = gnm_gtk_builder_new ((is_expr ? "autofilter-expression.ui" : "autofilter-top10.ui"),
+	gui = gnm_gtk_builder_new ("autofilter-expression.ui",
 				   NULL, GO_CMD_CONTEXT (wbcg));
 	if (gui == NULL)
 		return;
@@ -252,7 +339,7 @@ dialog_auto_filter (WBCGtk *wbcg,
 	state->wbcg	= wbcg;
 	state->filter	= filter;
 	state->field	= field;
-	state->is_expr	= is_expr;
+	state->is_expr	= TRUE;
 	state->gui	= gui;
 
 	g_return_if_fail (state->gui != NULL);
@@ -263,36 +350,19 @@ dialog_auto_filter (WBCGtk *wbcg,
 
 	if (cell == NULL || gnm_cell_is_blank (cell))
 		label = g_strdup_printf (_("Column %s"), col_name (col));
-	else {
-		char *content = gnm_cell_get_rendered_text (cell);
-		if (g_utf8_strlen (content, -1) > len) {
-			char *end = g_utf8_find_prev_char (content, content + len + 1 - strlen (UNICODE_ELLIPSIS));
-			strcpy (end, UNICODE_ELLIPSIS);
-		}
-		label = g_strdup_printf (_("Column %s (\"%s\")"),
-					 col_name (col), content);
-		g_free (content);
-	}
+	else 
+		label = dialog_auto_filter_get_col_name (cell, col, len);
 
-	if (is_expr) {
-		gtk_label_set_text
-			(GTK_LABEL (go_gtk_builder_get_widget (state->gui, "col-label1")), label);
-		gtk_label_set_text
-			(GTK_LABEL (go_gtk_builder_get_widget (state->gui, "col-label2")), label);
-	} else {
-		gtk_label_set_text
-			(GTK_LABEL (go_gtk_builder_get_widget (state->gui, "col-label")), label);
-		w = go_gtk_builder_get_widget (state->gui, "item_vs_percentage_option_menu");
-		g_signal_connect (G_OBJECT (w),
-			"changed",
-			G_CALLBACK (cb_top10_type_changed), state);
-	}
+	gtk_label_set_text
+		(GTK_LABEL (go_gtk_builder_get_widget (state->gui, "col-label1")), label);
+	gtk_label_set_text
+		(GTK_LABEL (go_gtk_builder_get_widget (state->gui, "col-label2")), label);
 	g_free (label);
 
 	state->dialog = go_gtk_builder_get_widget (state->gui, "dialog");
 	if (cond != NULL) {
 		GnmFilterOp const op = cond->op[0];
-		if (is_expr && 0 == (op & GNM_FILTER_OP_TYPE_MASK)) {
+		if (0 == (op & GNM_FILTER_OP_TYPE_MASK)) {
 			init_operator (state, cond->op[0],
 				       cond->value[0], "op0", "value0");
 			if (cond->op[1] != GNM_FILTER_UNUSED)
@@ -301,30 +371,136 @@ dialog_auto_filter (WBCGtk *wbcg,
 			w = go_gtk_builder_get_widget (state->gui,
 				cond->is_and ? "and_button" : "or_button");
 			gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE);
-		} else if (!is_expr &&
-			   GNM_FILTER_OP_TOP_N == (op & GNM_FILTER_OP_TYPE_MASK)) {
-			w = go_gtk_builder_get_widget (state->gui, "top_vs_bottom_option_menu");
-			gtk_combo_box_set_active (GTK_COMBO_BOX (w), (op & 1) ? 1 : 0);
-			w = go_gtk_builder_get_widget (state->gui, "item_vs_percentage_option_menu");
-			gtk_combo_box_set_active (GTK_COMBO_BOX (w), (op & 2) ? 1 : 0);
-			w = go_gtk_builder_get_widget (state->gui, "item_count");
-			gtk_spin_button_set_value (GTK_SPIN_BUTTON (w),
-						   cond->count);
 		}
 	} else {
 		/* initialize the combo boxes (not done by li.ui) */
-		if (is_expr) {
-			w = go_gtk_builder_get_widget (state->gui, "op0");
-			gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0);
-			w = go_gtk_builder_get_widget (state->gui, "op1");
-			gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0);
-		} else {
-			w = go_gtk_builder_get_widget (state->gui, "top_vs_bottom_option_menu");
-			gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0);
-			w = go_gtk_builder_get_widget (state->gui, "item_vs_percentage_option_menu");
-			gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0);
+		w = go_gtk_builder_get_widget (state->gui, "op0");
+		gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0);
+		w = go_gtk_builder_get_widget (state->gui, "op1");
+		gtk_combo_box_set_active (GTK_COMBO_BOX (w), 0);
+	}
+
+	w = go_gtk_builder_get_widget (state->gui, "ok_button");
+	g_signal_connect (G_OBJECT (w),
+		"clicked",
+		G_CALLBACK (cb_autofilter_ok), state);
+	w = go_gtk_builder_get_widget (state->gui, "cancel_button");
+	g_signal_connect (G_OBJECT (w),
+		"clicked",
+		G_CALLBACK (cb_autofilter_cancel), state);
+
+	/* a candidate for merging into attach guru */
+	gnumeric_init_help_button (
+		go_gtk_builder_get_widget (state->gui, "help_button"),
+		GNUMERIC_HELP_LINK_AUTOFILTER_CUSTOM);
+
+	gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog),
+					   state->wbcg,
+					   GNM_DIALOG_DESTROY_CURRENT_SHEET_REMOVED);
+
+	wbc_gtk_attach_guru (state->wbcg, state->dialog);
+	g_object_set_data_full (G_OBJECT (state->dialog),
+		"state", state, (GDestroyNotify)cb_autofilter_destroy);
+
+	gnumeric_keyed_dialog (wbcg, GTK_WINDOW (state->dialog),
+			       DIALOG_KEY_EXPRESSION);
+	gtk_widget_show (state->dialog);
+}
+
+void
+dialog_auto_filter (WBCGtk *wbcg,
+		    GnmFilter *filter, int field,
+		    gboolean is_expr, GnmFilterCondition *cond)
+{
+	AutoFilterState *state;
+	GtkWidget *w;
+	GtkBuilder *gui;
+	int col;
+	gchar *label;
+	GnmCell *cell;
+	int len = is_expr ? 15 : 30;
+	char const * const *rb;
+
+	if (is_expr) {
+		dialog_auto_filter_expression (wbcg, filter, field, cond);
+		return;
+	}
+
+	g_return_if_fail (wbcg != NULL);
+
+	if (gnumeric_dialog_raise_if_exists (wbcg, DIALOG_KEY))
+		return;
+	gui = gnm_gtk_builder_new ("autofilter-top10.ui",
+				   NULL, GO_CMD_CONTEXT (wbcg));
+	if (gui == NULL)
+		return;
+
+	state = g_new (AutoFilterState, 1);
+	state->wbcg	= wbcg;
+	state->filter	= filter;
+	state->field	= field;
+	state->is_expr	= FALSE;
+	state->gui	= gui;
+
+	g_return_if_fail (state->gui != NULL);
+
+	col = filter->r.start.col + field;
+
+	cell = sheet_cell_get (filter->sheet, col, filter->r.start.row);
+
+	if (cell == NULL || gnm_cell_is_blank (cell))
+		label = g_strdup_printf (_("Column %s"), col_name (col));
+	else 
+		label = dialog_auto_filter_get_col_name (cell, col, len);
+
+	gtk_label_set_text
+		(GTK_LABEL (go_gtk_builder_get_widget (state->gui, "col-label")), label);
+	g_free (label);
+
+	state->dialog = go_gtk_builder_get_widget (state->gui, "dialog");
+	if (cond != NULL && GNM_FILTER_OP_TOP_N == (cond->op[0] & GNM_FILTER_OP_TYPE_MASK)) {
+		gchar const *radio = NULL;
+		switch (cond->op[0]) {
+		case GNM_FILTER_OP_TOP_N:
+		default:
+			radio = type_group[0];
+			break;
+		case GNM_FILTER_OP_BOTTOM_N:
+			radio = type_group[1];
+			break;
+		case GNM_FILTER_OP_TOP_N_PERCENT:
+			radio = type_group[2];
+			break;
+		case GNM_FILTER_OP_BOTTOM_N_PERCENT:
+			radio = type_group[3];
+			break;
 		}
+		w = go_gtk_builder_get_widget (state->gui, radio);
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE);
+		w = go_gtk_builder_get_widget (state->gui, "item_count");
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), cond->count);
+	} else {
+		w = go_gtk_builder_get_widget (state->gui, "items-largest");
+		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (w), TRUE);		
+		w = go_gtk_builder_get_widget (state->gui, "item_count");
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (w), 1);
+	}
+
+	g_signal_connect (G_OBJECT (w),
+			  "value-changed",
+			  G_CALLBACK (cb_top10_count_changed), state);
+	cb_top10_count_changed (GTK_SPIN_BUTTON (w), state);
+
+	rb = type_group;
+	while (*rb != NULL) {
+		w = go_gtk_builder_get_widget (state->gui, *rb);
+		g_signal_connect (G_OBJECT (w),
+				  "toggled",
+				  G_CALLBACK (cb_top10_type_changed), state);
+		rb++;
 	}
+	
+	cb_top10_type_changed (NULL, state);
 
 	w = go_gtk_builder_get_widget (state->gui, "ok_button");
 	g_signal_connect (G_OBJECT (w),
@@ -338,7 +514,6 @@ dialog_auto_filter (WBCGtk *wbcg,
 	/* a candidate for merging into attach guru */
 	gnumeric_init_help_button (
 		go_gtk_builder_get_widget (state->gui, "help_button"),
-		is_expr ? GNUMERIC_HELP_LINK_AUTOFILTER_CUSTOM :
 		GNUMERIC_HELP_LINK_AUTOFILTER_TOP_TEN);
 
 	gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog),
@@ -350,6 +525,6 @@ dialog_auto_filter (WBCGtk *wbcg,
 		"state", state, (GDestroyNotify)cb_autofilter_destroy);
 
 	gnumeric_keyed_dialog (wbcg, GTK_WINDOW (state->dialog),
-			       is_expr ? DIALOG_KEY_EXPRESSION : DIALOG_KEY);
+			       DIALOG_KEY);
 	gtk_widget_show (state->dialog);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]