aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/prefs_dlg.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-10-14 23:45:09 +0000
committerGuy Harris <guy@alum.mit.edu>2004-10-14 23:45:09 +0000
commitabd16b297f4750ea7f74137e87582c64153440f4 (patch)
tree446f0817e3a3c2648f647528b8cc7ac6216be892 /gtk/prefs_dlg.c
parentaf061ccd603340e9e401acd423f623018eed373b (diff)
From Jeff Morriss: PREF_RANGE preference type, for ranges of integers.
svn path=/trunk/; revision=12300
Diffstat (limited to 'gtk/prefs_dlg.c')
-rw-r--r--gtk/prefs_dlg.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/gtk/prefs_dlg.c b/gtk/prefs_dlg.c
index cf329a0524..a5fcde6b3e 100644
--- a/gtk/prefs_dlg.c
+++ b/gtk/prefs_dlg.c
@@ -202,6 +202,18 @@ pref_show(pref_t *pref, gpointer user_data)
pref->saved_val.string);
break;
+ case PREF_RANGE:
+ {
+ char range_string[MAXRANGESTRING];
+
+ pref->saved_val.rangeval = *pref->varp.rangep;
+ range_convert_range(pref->varp.rangep, range_string);
+ pref->control = create_preference_entry(main_tb, pref->ordinal,
+ label_string, pref->description,
+ range_string);
+ break;
+ }
+
case PREF_OBSOLETE:
g_assert_not_reached();
break;
@@ -886,6 +898,24 @@ pref_check(pref_t *pref, gpointer user_data)
/* Value can't be bad. */
break;
+ case PREF_RANGE:
+ str_val = gtk_entry_get_text(GTK_ENTRY(pref->control));
+
+ if (strlen(str_val)) {
+ range_t newrange;
+
+ range_convert_str(&newrange, str_val, pref->info.max_value);
+ if (newrange.nranges == 0) {
+ /* If the user specified a string of non-zero length but
+ * range_convert_str() couldn't find a single range in it,
+ * it must be bad.
+ */
+ *badpref = pref;
+ return PREFS_SET_SYNTAX_ERR; /* range was bad */
+ }
+ }
+ break;
+
case PREF_OBSOLETE:
g_assert_not_reached();
break;
@@ -960,6 +990,22 @@ pref_fetch(pref_t *pref, gpointer user_data)
}
break;
+ case PREF_RANGE:
+ {
+ range_t newrange;
+
+ str_val = gtk_entry_get_text(GTK_ENTRY(pref->control));
+ range_convert_str(&newrange, str_val, pref->info.max_value);
+
+ if (!ranges_are_equal(pref->varp.rangep, &newrange))
+ {
+ *pref_changed_p = TRUE;
+ *pref->varp.rangep = newrange;
+ }
+
+ break;
+ }
+
case PREF_OBSOLETE:
g_assert_not_reached();
break;
@@ -1007,6 +1053,9 @@ pref_clean(pref_t *pref, gpointer user_data _U_)
}
break;
+ case PREF_RANGE:
+ break;
+
case PREF_OBSOLETE:
g_assert_not_reached();
break;
@@ -1042,6 +1091,12 @@ prefs_main_fetch_all(GtkWidget *dlg, gboolean *must_redissect)
badpref->title);
return FALSE;
+ case PREF_RANGE:
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
+ "The value for \"%s\" is not a valid range.",
+ badpref->title);
+ return FALSE;
+
default:
g_assert_not_reached();
break;
@@ -1257,6 +1312,14 @@ pref_revert(pref_t *pref, gpointer user_data)
}
break;
+ case PREF_RANGE:
+ if (!ranges_are_equal(pref->varp.rangep, &pref->saved_val.rangeval))
+ {
+ *pref_changed_p = TRUE;
+ *pref->varp.rangep = pref->saved_val.rangeval;
+ }
+ break;
+
case PREF_OBSOLETE:
g_assert_not_reached();
break;