Add plot size option for future compatibility

This is really just a copy of the number-range-option with some tests
for the saved value being a pair which is used in later versions. If the
pair is a pixel setting, then that value will be used, otherwise the
default value is used. Should any report get saved, the saved values
will be over written in the old format.
This commit is contained in:
Robert Fewell 2016-11-15 15:24:38 +00:00
parent da0b3b5131
commit 12562bcc0c
4 changed files with 146 additions and 2 deletions

View File

@ -110,6 +110,7 @@
(export gnc:options-make-date-interval!)
(export gnc:make-number-range-option)
(export gnc:make-number-plot-size-option)
(export gnc:make-internal-option)
(export gnc:make-query-option)
(export gnc:make-color-option)

View File

@ -1143,6 +1143,48 @@
(list lower-bound upper-bound num-decimals step-size)
#f #f #f)))
;; plot size options use the option-data as a list whose
;; elements are: (lower-bound upper-bound num-decimals step-size)
(define (gnc:make-number-plot-size-option
section
name
sort-tag
documentation-string
default-value
lower-bound
upper-bound
num-decimals
step-size)
(let* ((value default-value)
(value->string (lambda () (number->string value))))
(gnc:make-option
section name sort-tag 'number-range documentation-string
(lambda () value)
(lambda (x)
(cond ((and (pair? x) ;; new pair value
(eq? 'pixels (car x)))
(set! value (cdr x)))
(else (set! value default-value)))
(if (number? x) ;; old single value
(set! value x)))
(lambda () default-value)
(gnc:restore-form-generator value->string)
(lambda (f p) (kvp-frame-set-slot-path-gslist f value p))
(lambda (f p)
(let ((v (kvp-frame-get-slot-path-gslist f p)))
(if (and v (number? v))
(set! value v))))
(lambda (x)
(cond ((not (number? x)) (list #f "number-plot-size-option: not a number"))
((and (>= value lower-bound)
(<= value upper-bound))
(list #t x))
(else (list #f "number-plot-size-option: out of range"))))
(list lower-bound upper-bound num-decimals step-size)
#f #f #f)))
(define (gnc:make-internal-option
section
name

View File

@ -1980,6 +1980,71 @@ gnc_option_set_ui_widget_number_range (GNCOption *option, GtkBox *page_box,
return value;
}
static GtkWidget *
gnc_option_set_ui_widget_plot_size (GNCOption *option, GtkBox *page_box,
char *name, char *documentation,
/* Return values */
GtkWidget **enclosing, gboolean *packed)
{
GtkWidget *value;
GtkWidget *label;
gchar *colon_name;
GtkAdjustment *adj;
gdouble lower_bound = G_MINDOUBLE;
gdouble upper_bound = G_MAXDOUBLE;
gdouble step_size = 1.0;
int num_decimals = 0;
colon_name = g_strconcat(name, ":", NULL);
label = gtk_label_new(colon_name);
gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
g_free(colon_name);
*enclosing = gtk_hbox_new(FALSE, 5);
gnc_option_get_range_info(option, &lower_bound, &upper_bound,
&num_decimals, &step_size);
adj = GTK_ADJUSTMENT(gtk_adjustment_new(lower_bound, lower_bound,
upper_bound, step_size,
step_size * 5.0,
0));
value = gtk_spin_button_new(adj, step_size, num_decimals);
gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(value), TRUE);
{
gdouble biggest;
gint num_digits;
biggest = ABS(lower_bound);
biggest = MAX(biggest, ABS(upper_bound));
num_digits = 0;
while (biggest >= 1)
{
num_digits++;
biggest = biggest / 10;
}
if (num_digits == 0)
num_digits = 1;
num_digits += num_decimals;
gtk_entry_set_width_chars(GTK_ENTRY(value), num_digits);
}
gnc_option_set_widget (option, value);
gnc_option_set_ui_value(option, FALSE);
g_signal_connect(G_OBJECT(value), "changed",
G_CALLBACK(gnc_option_changed_widget_cb), option);
gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(*enclosing), value, FALSE, FALSE, 0);
gtk_widget_show_all(*enclosing);
return value;
}
static GtkWidget *
gnc_option_set_ui_widget_color (GNCOption *option, GtkBox *page_box,
char *name, char *documentation,
@ -2468,6 +2533,25 @@ gnc_option_set_ui_value_number_range (GNCOption *option, gboolean use_default,
return TRUE;
}
static gboolean
gnc_option_set_ui_value_plot_size (GNCOption *option, gboolean use_default,
GtkWidget *widget, SCM value)
{
GtkSpinButton *spinner;
gdouble d_value;;
spinner = GTK_SPIN_BUTTON(widget);
if (scm_is_number(value))
{
d_value = scm_to_double(value);
gtk_spin_button_set_value(spinner, d_value);
return FALSE;
}
else
return TRUE;
}
static gboolean
gnc_option_set_ui_value_color (GNCOption *option, gboolean use_default,
GtkWidget *widget, SCM value)
@ -2862,6 +2946,19 @@ gnc_option_get_ui_value_number_range (GNCOption *option, GtkWidget *widget)
return (scm_from_double (value));
}
static SCM
gnc_option_get_ui_value_plot_size (GNCOption *option, GtkWidget *widget)
{
GtkSpinButton *spinner;
gdouble value;
spinner = GTK_SPIN_BUTTON(widget);
value = gtk_spin_button_get_value(spinner);
return (scm_from_double (value));
}
static SCM
gnc_option_get_ui_value_color (GNCOption *option, GtkWidget *widget)
{
@ -2995,6 +3092,10 @@ static void gnc_options_initialize_options (void)
"number-range", gnc_option_set_ui_widget_number_range,
gnc_option_set_ui_value_number_range, gnc_option_get_ui_value_number_range
},
{
"plot-size", gnc_option_set_ui_widget_plot_size,
gnc_option_set_ui_value_plot_size, gnc_option_get_ui_value_plot_size
},
{
"color", gnc_option_set_ui_widget_color,
gnc_option_set_ui_value_color, gnc_option_get_ui_value_color

View File

@ -193,7 +193,7 @@
default-width default-height)
(gnc:register-option
options
(gnc:make-number-range-option
(gnc:make-number-plot-size-option
pagename name-width
(string-append sort-tag "a")
(N_ "Width of plot in pixels.") default-width
@ -201,7 +201,7 @@
(gnc:register-option
options
(gnc:make-number-range-option
(gnc:make-number-plot-size-option
pagename name-height
(string-append sort-tag "b")
(N_ "Height of plot in pixels.") default-height