gnucash master: Multiple changes pushed

Geert Janssens gjanssens at code.gnucash.org
Tue Dec 6 04:41:41 EST 2016


Updated	 via  https://github.com/Gnucash/gnucash/commit/5c6383e4 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ac5fb713 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ad07d2e3 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/7f4b6568 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/354694b7 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/03a11451 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/7d927cb8 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/1295e00b (commit)
	 via  https://github.com/Gnucash/gnucash/commit/66023fe0 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/70ed8164 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/e98b5632 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/bd3ed1e5 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/d0224526 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/b0605208 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/211b3ab1 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/7f0c912f (commit)
	 via  https://github.com/Gnucash/gnucash/commit/9e7f10d2 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/1f8c413d (commit)
	from  https://github.com/Gnucash/gnucash/commit/4e2b2049 (commit)



commit 5c6383e4269477a10811e64181c4465bd78ffc6c
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Thu Dec 1 15:12:47 2016 +0000

    Update the saved reports to 2.8 and old to 2.4

diff --git a/src/report/report-system/gnc-report.h b/src/report/report-system/gnc-report.h
index bb8120d..99fe2c9 100644
--- a/src/report/report-system/gnc-report.h
+++ b/src/report/report-system/gnc-report.h
@@ -28,8 +28,8 @@
 #include <glib.h>
 #include <libguile.h>
 
-#define SAVED_REPORTS_FILE "saved-reports-2.4"
-#define SAVED_REPORTS_FILE_OLD_REV "saved-reports-2.0"
+#define SAVED_REPORTS_FILE "saved-reports-2.8"
+#define SAVED_REPORTS_FILE_OLD_REV "saved-reports-2.4"
 
 gboolean gnc_run_report (gint report_id, char ** data);
 gboolean gnc_run_report_id_string (const char * id_string, char **data);

commit ac5fb71369590da009856da79b1de695eafd5225
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Thu Dec 1 15:11:51 2016 +0000

    Missing comma in tm answers structure

diff --git a/src/libqof/qof/test/test-gnc-date.c b/src/libqof/qof/test/test-gnc-date.c
index 2b606b2..c7d732f 100644
--- a/src/libqof/qof/test/test-gnc-date.c
+++ b/src/libqof/qof/test/test-gnc-date.c
@@ -198,7 +198,7 @@ test_gnc_gmtime (void)
         { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL },
         { 6, 47, 16, 7, 3, 107, 6, 96, 0, 0, NULL },
 #else
-        { 6, 1, 12, 2, 4 -430, 1, 121, 0 },
+        { 6, 1, 12, 2, 4, -430, 1, 121, 0 },
         { 48, 51, 23, 18, 11, 69, 4, 351, 0 },
         { 41, 12, 0, 6, 0, 70, 2, 5, 0 },
         { 32, 30, 2, 3, 11, 92, 4, 337, 0 },

commit ad07d2e33fe0ac66b8c7e5412781bc5889f0cdf7
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 20:54:18 2016 +0000

    Fix error when closing application
    
    There are errors when closing the application to do with gnc_uri when
    trying to create a filename from an empty book_id value to update the
    page title. Added a test for empty book_id as well as it being null.

diff --git a/src/gnome-utils/gnc-main-window.c b/src/gnome-utils/gnc-main-window.c
index 02ada7d..73f969a 100644
--- a/src/gnome-utils/gnc-main-window.c
+++ b/src/gnome-utils/gnc-main-window.c
@@ -1486,7 +1486,7 @@ gnc_main_window_generate_title (GncMainWindow *window)
                ? g_strdup_printf(" %s", readonly_text)
                : g_strdup("");
 
-    if (!book_id)
+    if (!book_id || g_strcmp0 (book_id, "") == 0)
         filename = g_strdup(_("Unsaved Book"));
     else
     {

commit 7f4b656815ef4403777e221a80f48fe72f0d5c3e
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:42:07 2016 +0000

    Use new options-fancy-date to retrieve date format
    
    Use the new function so we do not need to test for valid format

diff --git a/src/report/business-reports/customer-summary.scm b/src/report/business-reports/customer-summary.scm
index bb7c50f..9124344 100644
--- a/src/report/business-reports/customer-summary.scm
+++ b/src/report/business-reports/customer-summary.scm
@@ -704,7 +704,7 @@
          (income-accounts (opt-val pagename-incomeaccounts optname-incomeaccounts))
          (all-accounts (append income-accounts expense-accounts))
          (book (gnc-account-get-book (car all-accounts)))
-         (date-format (gnc:fancy-date-info book gnc:*fancy-date-format*))
+         (date-format (gnc:options-fancy-date book))
          (type (opt-val "__reg" "owner-type"))
          (reverse? (opt-val "__reg" "reverse?"))
          (ownerlist (gncBusinessGetOwnerList
diff --git a/src/report/business-reports/easy-invoice.scm b/src/report/business-reports/easy-invoice.scm
index fc9e60e..3e6bbbe 100644
--- a/src/report/business-reports/easy-invoice.scm
+++ b/src/report/business-reports/easy-invoice.scm
@@ -728,7 +728,8 @@
 
     (if (not (null? invoice))
       (let* ((book (gncInvoiceGetBook invoice))
-             (date-format (gnc:fancy-date-info book gnc:*fancy-date-format*)))
+             (date-format (gnc:options-fancy-date book)))
+
         ; invoice number and ID String table
         (add-html! document "<table width='100%'><tr>")
         (add-html! document "<td align='left'>")
diff --git a/src/report/business-reports/fancy-invoice.scm b/src/report/business-reports/fancy-invoice.scm
index 8cba63c..2980c06 100644
--- a/src/report/business-reports/fancy-invoice.scm
+++ b/src/report/business-reports/fancy-invoice.scm
@@ -798,10 +798,11 @@
     (if (not (null? invoice))
         (let* ((book (gncInvoiceGetBook invoice))
                (date-object #f)
-               (date-format (gnc:fancy-date-info book gnc:*fancy-date-format*))
+               (date-format (gnc:options-fancy-date book))
                (helper-table (gnc:make-html-table))
                (title (title-string default-title custom-title)))
-	  (set! table (make-entry-table invoice
+
+   (set! table (make-entry-table invoice
 					(gnc:report-options report-obj)
 					add-order cust-doc? credit-note?))
 
diff --git a/src/report/business-reports/invoice.scm b/src/report/business-reports/invoice.scm
index 5a6d9b8..0fafb15 100644
--- a/src/report/business-reports/invoice.scm
+++ b/src/report/business-reports/invoice.scm
@@ -692,7 +692,8 @@
 
     (if (not (null? invoice))
 	(let* ((book (gncInvoiceGetBook invoice))
-               (date-format (gnc:fancy-date-info book gnc:*fancy-date-format*)))
+               (date-format (gnc:options-fancy-date book)))
+
 	  (set! table (make-entry-table invoice
 					(gnc:report-options report-obj)
 					add-order cust-doc? credit-note?))
diff --git a/src/report/business-reports/job-report.scm b/src/report/business-reports/job-report.scm
index 3edb7dd..fce2b86 100644
--- a/src/report/business-reports/job-report.scm
+++ b/src/report/business-reports/job-report.scm
@@ -553,11 +553,10 @@
 		       (gnc:date-option-absolute-time
 			(opt-val gnc:pagename-general (N_ "To")))))
 	 (book (gnc-account-get-book account))
-         (date-format (gnc:fancy-date-info book gnc:*fancy-date-format*))
+         (date-format (gnc:options-fancy-date book))
 	 (type (opt-val "__reg" "owner-type"))
 	 (type-str "")
          (report-title-str ""))
-
     (cond
       ((eqv? type GNC-OWNER-CUSTOMER)
        (set! type-str (N_ "Customer"))
diff --git a/src/report/business-reports/owner-report.scm b/src/report/business-reports/owner-report.scm
index a97310e..f81641d 100644
--- a/src/report/business-reports/owner-report.scm
+++ b/src/report/business-reports/owner-report.scm
@@ -757,10 +757,10 @@
                (gnc:date-option-absolute-time
                (opt-val gnc:pagename-general optname-to-date))))
      (book (gnc-account-get-book account))
-     (date-format (gnc:fancy-date-info book gnc:*fancy-date-format*))
+     (date-format (gnc:options-fancy-date book))
      (type (opt-val "__reg" "owner-type"))
      (owner-descr (owner-string type))
-     (date-type (opt-val gnc:pagename-general optname-date-driver)) 
+     (date-type (opt-val gnc:pagename-general optname-date-driver))
      (owner (opt-val owner-page owner-descr))
      (report-title (string-append (doctype-str type) " " (_ "Report"))))
 
diff --git a/src/report/business-reports/taxinvoice.eguile.scm b/src/report/business-reports/taxinvoice.eguile.scm
index ad04190..c2557d0 100644
--- a/src/report/business-reports/taxinvoice.eguile.scm
+++ b/src/report/business-reports/taxinvoice.eguile.scm
@@ -47,7 +47,7 @@
            (currency     (gncInvoiceGetCurrency   opt-invoice))
            (entries      (gncInvoiceGetEntries    opt-invoice))
            (splits      '());'
-           (dateformat   (gnc:fancy-date-info book gnc:*fancy-date-format*))
+           (dateformat   (gnc:options-fancy-date book))
            (coyname      (gnc:company-info book gnc:*company-name*))
            (coycontact   (gnc:company-info book gnc:*company-contact*))
            (coyaddr      (gnc:company-info book gnc:*company-addy*))

commit 354694b744db9c8de33ccfc6e753269ce31d5e5e
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:40:08 2016 +0000

    Update the Fancy Date Format
    
    When the format is set to unset, the kvp data will now be removed and
    added a function to retrieve the 'Fancy Date Format' and test for it
    being valid, if not retrieve the preference date format.

diff --git a/src/app-utils/app-utils.scm b/src/app-utils/app-utils.scm
index 06ef82e..295c0fb 100644
--- a/src/app-utils/app-utils.scm
+++ b/src/app-utils/app-utils.scm
@@ -140,6 +140,7 @@
 (export gnc:options-for-each-general)
 (export gnc:lookup-option)
 (export gnc:generate-restore-forms)
+(export gnc:options-fancy-date)
 (export gnc:options-scm->kvp)
 (export gnc:options-kvp->scm)
 (export gnc:options-clear-changes)
diff --git a/src/app-utils/options.scm b/src/app-utils/options.scm
index a49f2e1..6e4ce70 100644
--- a/src/app-utils/options.scm
+++ b/src/app-utils/options.scm
@@ -1351,14 +1351,17 @@
      (lambda () (def-value))
      (gnc:restore-form-generator value->string)
      (lambda (b p)
-       (qof-book-set-option
-        b (symbol->string (car value)) (append p '("fmt")))
-       (qof-book-set-option
-        b (symbol->string (cadr value)) (append p '("month")))
-       (qof-book-set-option
-        b (if (caddr value) 1 0) (append p '("years")))
-       (qof-book-set-option
-        b (cadddr value) (append p '("custom"))))
+       (if (eq? (car value) 'unset)
+           (qof-book-options-delete b p );; delete the kvp when unset
+       (begin
+         (qof-book-set-option
+          b (symbol->string (car value)) (append p '("fmt")))
+         (qof-book-set-option
+          b (symbol->string (cadr value)) (append p '("month")))
+         (qof-book-set-option
+          b (if (caddr value) 1 0) (append p '("years")))
+         (qof-book-set-option
+          b (cadddr value) (append p '("custom"))))))
      (lambda (f p)
        (let ((fmt (qof-book-get-option f (append p '("fmt"))))
              (month (qof-book-get-option f (append p '("month"))))
@@ -1843,9 +1846,15 @@
 (define (gnc:generate-restore-forms options options-string)
   ((options 'generate-restore-forms) options-string))
 
+(define (gnc:options-fancy-date book)
+  (let ((date-format (gnc:fancy-date-info book gnc:*fancy-date-format*)))
+    (if (boolean? date-format) ;; date-format does not exist
+        (qof-date-format-get-string (qof-date-format-get))
+       date-format)))
+
 (define (gnc:options-scm->kvp options book clear-option?)
   (if clear-option?
-      (qof-book-options-delete book))
+      (qof-book-options-delete book '()))
   ((options 'scm->kvp) book))
 
 (define (gnc:options-kvp->scm options book)
diff --git a/src/gnome-utils/gnc-date-format.c b/src/gnome-utils/gnc-date-format.c
index a9713af..db2a098 100644
--- a/src/gnome-utils/gnc-date-format.c
+++ b/src/gnome-utils/gnc-date-format.c
@@ -477,6 +477,7 @@ gnc_date_format_refresh (GNCDateFormat *gdf)
         enable_custom = TRUE;
         break;
 
+    case QOF_DATE_FORMAT_UNSET:
     case QOF_DATE_FORMAT_LOCALE:
     case QOF_DATE_FORMAT_UTC:
         format = g_strdup(qof_date_format_get_string(sel_option));

commit 03a11451bd88debe666e2e79ed47cbd8de324787
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:39:10 2016 +0000

    Add the ability to delete a path from options
    
    There is a requirement to delete the "Fancy Date Format" book KVP data
    when set to unset. This was not possible as is as it would delete all
    the 'Business' options. This is still possible by passing a null list.

diff --git a/src/engine/engine.i b/src/engine/engine.i
index 48ab368..551ddfe 100644
--- a/src/engine/engine.i
+++ b/src/engine/engine.i
@@ -247,7 +247,7 @@ Account * gnc_book_get_template_root(QofBook *book);
 %typemap(out) KvpValue * " $result = gnc_kvp_value_ptr_to_scm($1); "
 %typemap(in) GSList *key_path " $1 = gnc_scm_to_gslist_string($input);"
 
-void qof_book_options_delete (QofBook *book);
+void qof_book_options_delete (QofBook *book, GSList *key_path);
 void qof_book_set_option (QofBook *book, KvpValue *new_value, GSList *key_path);
 KvpValue* qof_book_get_option (QofBook *book, GSList *key_path);
 
diff --git a/src/libqof/qof/qofbook.cpp b/src/libqof/qof/qofbook.cpp
index 270fc8b..09707d8 100644
--- a/src/libqof/qof/qofbook.cpp
+++ b/src/libqof/qof/qofbook.cpp
@@ -1202,10 +1202,18 @@ qof_book_get_option (QofBook *book, GSList *path)
 }
 
 void
-qof_book_options_delete (QofBook *book)
+qof_book_options_delete (QofBook *book, GSList *path)
 {
     KvpFrame *root = qof_instance_get_slots(QOF_INSTANCE (book));
-    delete root->set_path(KVP_OPTION_PATH, nullptr);
+    if (path != nullptr)
+    {
+        Path path_v {KVP_OPTION_PATH};
+        for (auto item = path; item != nullptr; item = g_slist_next(item))
+            path_v.push_back(static_cast<const char*>(item->data));
+        delete root->set_path(path_v, nullptr);
+    }
+    else
+        delete root->set_path(KVP_OPTION_PATH, nullptr);
 }
 
 /* QofObject function implementation and registration */
diff --git a/src/libqof/qof/qofbook.h b/src/libqof/qof/qofbook.h
index 547f6b3..aecd9e7 100644
--- a/src/libqof/qof/qofbook.h
+++ b/src/libqof/qof/qofbook.h
@@ -409,8 +409,9 @@ KvpValue* qof_book_get_option (QofBook *book, GSList *path);
  * Primarily used from Scheme to clear out the options before saving a new set.
  * @param book: The book.
  * @param list: A GList of keys which from a path under KVP_OPTION_PATH.
+ *              If GList is Null, the whole option is deleted.
  */
-void qof_book_options_delete (QofBook *book);
+void qof_book_options_delete (QofBook *book, GSList *path);
 /** @} End of Doxygen Include */
 /** deprecated */
 #define qof_book_get_guid(X) qof_entity_get_guid (QOF_INSTANCE(X))

commit 7d927cb8303a620f358e8ebb0c95746903a06b4f
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:37:03 2016 +0000

    Add missing liststore to preference list

diff --git a/src/business/business-gnome/gncmod-business-gnome.c b/src/business/business-gnome/gncmod-business-gnome.c
index 2ca3b98..ccc269e 100644
--- a/src/business/business-gnome/gncmod-business-gnome.c
+++ b/src/business/business-gnome/gncmod-business-gnome.c
@@ -115,7 +115,7 @@ libgncmod_business_gnome_gnc_module_init(int refcount)
 
         /* Add to preferences under Business */
         /* The parameters are; glade file, items to add from glade file - last being the dialog, preference tab name */
-        gnc_preferences_add_page("business-prefs.glade", "liststore_printinvoice,days_in_adj,business_prefs",
+        gnc_preferences_add_page("business-prefs.glade", "liststore_printinvoice,days_in_adj,cust_days_in_adj,business_prefs",
                                  _("Business"));
     }
 

commit 1295e00b941a30a118244dbe60a7af0d2cc8600c
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:36:06 2016 +0000

    Change daily-reports.scm to use new plot size

diff --git a/src/report/standard-reports/daily-reports.scm b/src/report/standard-reports/daily-reports.scm
index 0c00638..219cf89 100644
--- a/src/report/standard-reports/daily-reports.scm
+++ b/src/report/standard-reports/daily-reports.scm
@@ -120,9 +120,9 @@
       gnc:pagename-display optname-show-total
       "b" (N_ "Show the total balance in legend?") #t))
 
-    (gnc:options-add-plot-size!
+    (gnc:options-add-plot-size! 
      options gnc:pagename-display 
-     optname-plot-width optname-plot-height "d" 500 500)
+     optname-plot-width optname-plot-height "d" (cons 'percent 100.0) (cons 'percent 100.0))
 
     (gnc:options-set-default-section options gnc:pagename-general)      
 

commit 66023fe08ef5093e0364139578c00fa74ad09c85
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:35:06 2016 +0000

    Change price-scatter.scm to use new plot size
    
    Change price-scatter.scm to use new html-scatter.scm for new plot size

diff --git a/src/report/report-system/html-scatter.scm b/src/report/report-system/html-scatter.scm
index d1b5f22..6fbe71c 100644
--- a/src/report/report-system/html-scatter.scm
+++ b/src/report/report-system/html-scatter.scm
@@ -58,7 +58,7 @@
   (record-constructor <html-scatter>))
 
 (define (gnc:make-html-scatter)
-  (gnc:make-html-scatter-internal -1 -1 #f #f #f #f '() #f #f))
+  (gnc:make-html-scatter-internal '(pixels . -1) '(pixels . -1) #f #f #f #f '() #f #f))
 
 (define gnc:html-scatter-width
   (record-accessor <html-scatter> 'width))
@@ -156,10 +156,15 @@
             (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
 
             (push "<div id=\"")(push chart-id)(push "\" style=\"width:")
-            (push (gnc:html-scatter-width scatter))
-            (push "px;height:")
-            (push (gnc:html-scatter-height scatter))
-            (push "px;\"></div>\n")
+            (push (cdr (gnc:html-scatter-width scatter)))
+            (if (eq? 'pixels (car (gnc:html-scatter-width scatter)))
+                 (push "px;height:")
+                 (push "%;height:"))
+
+            (push (cdr (gnc:html-scatter-height scatter)))
+            (if (eq? 'pixels (car (gnc:html-scatter-height scatter)))
+                 (push "px;\"></div>\n")
+                 (push "%;\"></div>\n"))
             (push "<script id=\"source\">\n$(function () {")
 
             (push "var data = [];")
diff --git a/src/report/standard-reports/price-scatter.scm b/src/report/standard-reports/price-scatter.scm
index 24740ee..551a6fb 100644
--- a/src/report/standard-reports/price-scatter.scm
+++ b/src/report/standard-reports/price-scatter.scm
@@ -107,7 +107,7 @@
     
     (gnc:options-add-plot-size! 
      options gnc:pagename-display 
-     optname-plot-width optname-plot-height "c" 500 400)
+     optname-plot-width optname-plot-height "c" (cons 'percent 100.0) (cons 'percent 100.0))
     
     (gnc:options-add-marker-choice!
      options gnc:pagename-display 

commit 70ed81644938526070dc08e163e22ddcfd098a23
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:33:51 2016 +0000

    Change net-linechart.scm to use the new plot size

diff --git a/src/report/standard-reports/net-linechart.scm b/src/report/standard-reports/net-linechart.scm
index 1a24c43..299bd07 100644
--- a/src/report/standard-reports/net-linechart.scm
+++ b/src/report/standard-reports/net-linechart.scm
@@ -140,9 +140,9 @@
       "c" (N_ "Display a table of the selected data.")
       #f))
 
-    (gnc:options-add-plot-size!
-     options gnc:pagename-display
-     optname-plot-width optname-plot-height "d" 400 400)
+    (gnc:options-add-plot-size! 
+     options gnc:pagename-display 
+     optname-plot-width optname-plot-height "d" (cons 'percent 100.0) (cons 'percent 100.0))
 
 
      (add-option

commit e98b5632a005a4eee7c4124d2c384b28958726ec
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:32:44 2016 +0000

    Change net-barchart.scm to use new plot size

diff --git a/src/report/standard-reports/net-barchart.scm b/src/report/standard-reports/net-barchart.scm
index 0b64798..5ccd285 100644
--- a/src/report/standard-reports/net-barchart.scm
+++ b/src/report/standard-reports/net-barchart.scm
@@ -134,9 +134,9 @@
       "c" (N_ "Display a table of the selected data.")
       #f))
 
-    (gnc:options-add-plot-size!
-     options gnc:pagename-display
-     optname-plot-width optname-plot-height "d" 500 400)
+    (gnc:options-add-plot-size! 
+     options gnc:pagename-display 
+     optname-plot-width optname-plot-height "d" (cons 'percent 100.0) (cons 'percent 100.0))
 
     (gnc:options-set-default-section options gnc:pagename-general)
 
@@ -328,9 +328,9 @@
        ;; Determine whether we have enough space for horizontal labels
        ;; -- kind of a hack. Assumptions: y-axis labels and legend
        ;; require 200 pixels, and each x-axes label needs 60 pixels.
-       (gnc:html-barchart-set-row-labels-rotated?!
-        chart (< (/ (- width 200)
-                    (length date-string-list)) 60))
+       ;;(gnc:html-barchart-set-row-labels-rotated?!
+       ;; chart (< (/ (- width 200)
+       ;;             (length date-string-list)) 60))
 
        ;; Add the data
        (if show-sep?

commit bd3ed1e59a73c7690dcb8bfb273647131522bf2b
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:31:16 2016 +0000

    Fix general-ledger.scm
    
    An option had changed in the transaction report that this one uses.

diff --git a/src/report/standard-reports/general-ledger.scm b/src/report/standard-reports/general-ledger.scm
index 02294a4..7b9a712 100644
--- a/src/report/standard-reports/general-ledger.scm
+++ b/src/report/standard-reports/general-ledger.scm
@@ -118,7 +118,9 @@
     
     ;; set options in the general tab...
     (set-option!
-     gnc:pagename-general (N_ "Style") 'single)
+     gnc:pagename-display (N_ "Detail Level") 'single)
+
+
     ;; we can't (currently) set the Report name here
     ;; because it is automatically set to the template
     ;; name... :(

commit d02245267f222c00f2c9b42e233a48711be36ac8
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:30:09 2016 +0000

    Change average-balance.scm to use new plot sizes

diff --git a/src/report/standard-reports/average-balance.scm b/src/report/standard-reports/average-balance.scm
index 7a25502..2fafaf2 100644
--- a/src/report/standard-reports/average-balance.scm
+++ b/src/report/standard-reports/average-balance.scm
@@ -42,6 +42,8 @@
 (define optname-price-source (N_ "Price Source"))
 (define optname-subacct (N_ "Include Sub-Accounts"))
 (define optname-internal (N_ "Exclude transactions between selected accounts"))
+(define optname-plot-width (N_ "Plot Width"))
+(define optname-plot-height (N_ "Plot Height"))
 
   ;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Options
@@ -127,8 +129,8 @@
        (vector 'GLPlot (N_ "Gain/Loss") (N_ "Gain And Loss.")))))
 
     (gnc:options-add-plot-size! 
-     options gnc:pagename-display (N_ "Plot Width") (N_ "Plot Height")
-     "d" 400 400)
+     options gnc:pagename-display 
+     optname-plot-width optname-plot-height "d" (cons 'percent 100.0) (cons 'percent 100.0))
 
     ;; Set the general page as default option tab
     (gnc:options-set-default-section options gnc:pagename-general)      
@@ -462,10 +464,8 @@
           ;; plot comes first. 
           (if show-plot?
               (let ((barchart (gnc:make-html-barchart))
-                    (width (get-option gnc:pagename-display 
-                                       (N_ "Plot Width")))
-                    (height (get-option gnc:pagename-display 
-                                        (N_ "Plot Height")))
+                    (height (get-option gnc:pagename-display optname-plot-height))
+                    (width (get-option gnc:pagename-display optname-plot-width))
                     (col-labels '())
                     (col-colors '()))
                 (if (memq 'AvgBalPlot plot-type)

commit b0605208590ccd033cde9b497d79b365764eb22d
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:28:41 2016 +0000

    Change account-piecharts and html-piechart
    
    Change account-piecharts.scm to use the modified htm-piechart.scm that
    now can use plot size percentages.

diff --git a/src/report/report-system/html-piechart.scm b/src/report/report-system/html-piechart.scm
index 7bff905..adcf29e 100644
--- a/src/report/report-system/html-piechart.scm
+++ b/src/report/report-system/html-piechart.scm
@@ -53,7 +53,7 @@
   (record-constructor <html-piechart>))
 
 (define (gnc:make-html-piechart)
-  (gnc:make-html-piechart-internal -1 -1 #f #f #f #f #f #f #f #f #f #f #f))
+  (gnc:make-html-piechart-internal '(pixels . -1) '(pixels . -1) #f #f #f #f #f #f #f #f #f #f #f))
 
 (define gnc:html-piechart-data
   (record-accessor <html-piechart> 'data))
@@ -212,10 +212,15 @@
             (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
 
             (push "<div id=\"")(push chart-id)(push "\" style=\"width:")
-            (push (gnc:html-piechart-width piechart))
-            (push "px;height:")
-            (push (gnc:html-piechart-height piechart))
-            (push "px;\"></div>\n")
+            (push (cdr (gnc:html-piechart-width piechart)))
+            (if (eq? 'pixels (car (gnc:html-piechart-width piechart)))
+                 (push "px;height:")
+                 (push "%;height:"))
+
+            (push (cdr (gnc:html-piechart-height piechart)))
+            (if (eq? 'pixels (car (gnc:html-piechart-height piechart)))
+                 (push "px;\"></div>\n")
+                 (push "%;\"></div>\n"))
             (push "<script id=\"source\">\n$(function () {")
 
             (push "var data = [];\n")
diff --git a/src/report/standard-reports/account-piecharts.scm b/src/report/standard-reports/account-piecharts.scm
index b112f76..253a1ca 100644
--- a/src/report/standard-reports/account-piecharts.scm
+++ b/src/report/standard-reports/account-piecharts.scm
@@ -183,7 +183,7 @@ balance at a given time"))
 
     (gnc:options-add-plot-size! 
      options gnc:pagename-display 
-     optname-plot-width optname-plot-height "d" 500 350)
+     optname-plot-width optname-plot-height "d" (cons 'percent 100.0) (cons 'percent 100.0))
 
     (gnc:options-add-sort-method! 
      options gnc:pagename-display

commit 211b3ab10ee75f50aa0522d169375fd20e6095da
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:26:54 2016 +0000

    Fix account-piechart.scm for guile 1.8.x

diff --git a/src/report/standard-reports/account-piecharts.scm b/src/report/standard-reports/account-piecharts.scm
index bc6b13a..b112f76 100644
--- a/src/report/standard-reports/account-piecharts.scm
+++ b/src/report/standard-reports/account-piecharts.scm
@@ -181,7 +181,7 @@ balance at a given time"))
       "c" (N_ "Maximum number of slices in pie.") 7
       2 24 0 1))
 
-    (gnc:options-add-plot-size!
+    (gnc:options-add-plot-size! 
      options gnc:pagename-display 
      optname-plot-width optname-plot-height "d" 500 350)
 
@@ -291,7 +291,7 @@ balance at a given time"))
         (if (null? remaining)
             (cons cur-work-done res)
             (begin
-              (gnc:report-percent-done (* 100 (/ cur-work-done work-to-do)))
+              (gnc:report-percent-done (* 100 (/ cur-work-done (work-to-do))))
               (let* ((cur (car remaining))
                      (tail (cdr remaining))
                      (subaccts-data (traverse-accounts
@@ -313,7 +313,7 @@ balance at a given time"))
       (let* ((proc-account (lambda (a)
                               (set! work-done (1+ work-done))
                               (gnc:report-percent-done
-                                (* 100 (/ work-done work-to-do)))
+                                (* 100 (/ work-done (work-to-do))))
                               (list (account-balance a #t) a)))
              (new-accts (map proc-account (filter show-acct? accts))))
         (cons work-done new-accts))))
@@ -339,7 +339,7 @@ balance at a given time"))
              (tail (cdr remaining))
              (cur-work-done (1+ initial-work))
              (subaccts (gnc-account-get-children cur)))
-        (gnc:report-percent-done (* 100 (/ cur-work-done work-to-do)))
+        (gnc:report-percent-done (* 100 (/ cur-work-done (work-to-do))))
         (if (show-acct? cur)
           (add! (xaccAccountGetCommodity cur) (account-balance cur #f)))
         (traverse! tail (traverse! subaccts cur-work-done)))))
@@ -357,7 +357,7 @@ balance at a given time"))
 (define (piechart-renderer report-obj reportname report-guid
                            account-types do-intervals? depth-based?
                            display-name sort-comparator get-data)
-  
+
   ;; This is a helper function for looking up option values.
   (define (get-option section name)
     (gnc:option-value 
@@ -499,10 +499,11 @@ balance at a given time"))
 	    (length (filter show-acct? accts))))
 
       ;; Get base data to be plotted.
-      (define work-to-do (count-accounts 1 topl-accounts))
-      (define base-data
+      (define work-to-do (lambda () (count-accounts 1 topl-accounts)))
+ 
+      (define base-data (lambda ()
         (get-data account-balance show-acct? work-to-do tree-depth
-                  0 1 topl-accounts))
+                  0 1 topl-accounts)))
 
       (define (fix-signs combined)
         (map (lambda (pair)
@@ -517,7 +518,7 @@ balance at a given time"))
           (begin
             (set! combined
 		  (sort (filter (lambda (pair) (not (>= 0.0 (car pair))))
-				(fix-signs (cdr base-data)))
+				(fix-signs (cdr (base-data))))
                         (sort-comparator sort-method show-fullname?)))
 
             ;; if too many slices, condense them to an 'other' slice
@@ -598,7 +599,7 @@ balance at a given time"))
 				  (car pair)
 				  (gnc-commodity-get-fraction report-currency)
 				  GNC-RND-ROUND)
- 				 print-info)
+				 print-info)
  				 )
  			       "")
  			   (if show-percent?

commit 7f0c912f936f9757b12acd05ac9c37a41443de2d
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 19:21:17 2016 +0000

    Budget Chart changes
    
    There was no display option but the file indicated that there might be
    so created one and added the plot size to it.

diff --git a/src/report/standard-reports/budget-barchart.scm b/src/report/standard-reports/budget-barchart.scm
index b76ca23..5267e96 100644
--- a/src/report/standard-reports/budget-barchart.scm
+++ b/src/report/standard-reports/budget-barchart.scm
@@ -46,6 +46,8 @@
 
 (define optname-running-sum (N_ "Running Sum"))
 (define optname-chart-type (N_ "Chart Type"))
+(define optname-plot-width (N_ "Plot Width"))
+(define optname-plot-height (N_ "Plot Height"))
 (define optname-from-date (N_ "Start Date"))
 (define optname-to-date (N_ "End Date"))
 
@@ -68,21 +70,40 @@
         gnc:pagename-general optname-budget
         "a" (N_ "Budget to use.")))
 
+    ;; date interval
+    (gnc:options-add-date-interval!
+     options gnc:pagename-general
+     optname-from-date optname-to-date "b")
+
+    ;; Option to select the accounts to that will be displayed
+    (add-option (gnc:make-account-list-option
+        gnc:pagename-accounts optname-accounts
+        "c" (N_ "Report on these accounts.")
+        (lambda ()
+	  (gnc:filter-accountlist-type
+	    (list ACCT-TYPE-BANK ACCT-TYPE-ASSET ACCT-TYPE-LIABILITY)
+	    (gnc-account-get-descendants-sorted (gnc-get-current-root-account))))
+        #f #t))
+
+    (gnc:options-add-account-levels!
+     options gnc:pagename-accounts optname-depth-limit
+     "d" opthelp-depth-limit 6)
+
     ;; Display tab
     (add-option
      (gnc:make-simple-boolean-option
-      gnc:pagename-general 
+      gnc:pagename-display 
       optname-running-sum
-      "b"
+      "a"
       (N_ "Calculate as running sum?")
       #t))
 
     ;; Display tab
     (add-option
       (gnc:make-multichoice-option
-        gnc:pagename-general                  ;; tab name
+        gnc:pagename-display                  ;; tab name
         optname-chart-type                    ;; displayed option name
-        "c"                                   ;; localization in the tab
+        "b"                                   ;; localization in the tab
         (N_ "This is a multi choice option.") ;; option help text
         'bars                                 ;; default selectioin
         (list
@@ -102,25 +123,9 @@
       )
     )
 
-    ;; date interval
-    (gnc:options-add-date-interval!
-     options gnc:pagename-general
-     optname-from-date optname-to-date "d")
-
-
-    ;; Option to select the accounts to that will be displayed
-    (add-option (gnc:make-account-list-option
-        gnc:pagename-accounts optname-accounts
-        "a" (N_ "Report on these accounts.")
-        (lambda ()
-	  (gnc:filter-accountlist-type
-	    (list ACCT-TYPE-BANK ACCT-TYPE-ASSET ACCT-TYPE-LIABILITY)
-	    (gnc-account-get-descendants-sorted (gnc-get-current-root-account))))
-        #f #t))
-
-    (gnc:options-add-account-levels!
-     options gnc:pagename-accounts optname-depth-limit
-     "b" opthelp-depth-limit 6)
+    (gnc:options-add-plot-size! 
+     options gnc:pagename-display 
+     optname-plot-width optname-plot-height "c" (cons 'percent 100.0) (cons 'percent 100.0))
 
     ;; Set default page
     (gnc:options-set-default-section options gnc:pagename-general)
@@ -136,7 +141,7 @@
 ;;
 ;; Create bar and and vaules
 ;;
-(define (gnc:chart-create-budget-actual budget acct running-sum chart-type from-tp to-tp)
+(define (gnc:chart-create-budget-actual budget acct running-sum chart-type width height from-tp to-tp)
   (let* (
           (chart #f)
           (report-start-time (car from-tp))
@@ -148,8 +153,8 @@
         ;; Setup barchart
         (set! chart (gnc:make-html-barchart))
         (gnc:html-barchart-set-title! chart (xaccAccountGetName acct))
-        (gnc:html-barchart-set-width! chart 700)
-        (gnc:html-barchart-set-height! chart 400)
+        (gnc:html-barchart-set-width! chart width)
+        (gnc:html-barchart-set-height! chart height)
         (gnc:html-barchart-set-row-labels-rotated?! chart #t)
         (gnc:html-barchart-set-col-labels!
           chart (list (_ "Budget") (_ "Actual")))
@@ -161,8 +166,8 @@
         ;; Setup linechart
         (set! chart (gnc:make-html-linechart))
         (gnc:html-linechart-set-title! chart (xaccAccountGetName acct))
-        (gnc:html-linechart-set-width! chart 700)
-        (gnc:html-linechart-set-height! chart 400)
+        (gnc:html-linechart-set-width! chart width)
+        (gnc:html-linechart-set-height! chart height)
         (gnc:html-linechart-set-row-labels-rotated?! chart #t)
         (gnc:html-linechart-set-col-labels!
           chart (list (_ "Budget") (_ "Actual")))
@@ -305,8 +310,10 @@
   (let* (
       (budget (get-option gnc:pagename-general optname-budget))
       (budget-valid? (and budget (not (null? budget))))
-      (running-sum (get-option gnc:pagename-general optname-running-sum))
-      (chart-type (get-option gnc:pagename-general optname-chart-type))
+      (running-sum (get-option gnc:pagename-display optname-running-sum))
+      (chart-type (get-option gnc:pagename-display optname-chart-type))
+      (height (get-option gnc:pagename-display optname-plot-height))
+      (width (get-option gnc:pagename-display optname-plot-width))
       (accounts (get-option gnc:pagename-accounts optname-accounts))
       (depth-limit (get-option gnc:pagename-accounts optname-depth-limit))
       (report-title (get-option gnc:pagename-general
@@ -350,7 +357,7 @@
                 )
               (gnc:html-document-add-object!
                 document
-                (gnc:chart-create-budget-actual budget acct running-sum chart-type from-date-tp to-date-tp)
+                (gnc:chart-create-budget-actual budget acct running-sum chart-type width height from-date-tp to-date-tp)
               )
             )
           )

commit 9e7f10d2c0050e69510d9c719199425f861f9160
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 16:06:29 2016 +0000

    Update category-barchart to reflect changes
    
    Update category-barchart.scm to use new pair for plot width and height
    setting default to be both 100% of view. Also updated html-barchart.scm
    and html-linechart.scm to use these new values.

diff --git a/src/report/report-system/html-barchart.scm b/src/report/report-system/html-barchart.scm
index 2b24376..39e543c 100644
--- a/src/report/report-system/html-barchart.scm
+++ b/src/report/report-system/html-barchart.scm
@@ -57,7 +57,7 @@
   (record-constructor <html-barchart>))
 
 (define (gnc:make-html-barchart)
-  (gnc:make-html-barchart-internal -1 -1 #f #f #f #f '() '() '() 
+  (gnc:make-html-barchart-internal '(pixels . -1) '(pixels . -1) #f #f #f #f '() '() '() 
 				   #f #f #f '() #f #f #f #f #f #f))
 
 (define gnc:html-barchart-data
@@ -392,12 +392,16 @@
             (push (gnc:html-js-include "jqplot/jqplot.canvasAxisTickRenderer.js"))
 
             (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
-
             (push "<div id=\"")(push chart-id)(push "\" style=\"width:")
-            (push (gnc:html-barchart-width barchart))
-            (push "px;height:")
-            (push (gnc:html-barchart-height barchart))
-            (push "px;\"></div>\n")
+            (push (cdr (gnc:html-barchart-width barchart)))
+            (if (eq? 'pixels (car (gnc:html-barchart-width barchart)))
+                 (push "px;height:")
+                 (push "%;height:"))
+
+            (push (cdr (gnc:html-barchart-height barchart)))
+            (if (eq? 'pixels (car (gnc:html-barchart-height barchart)))
+                 (push "px;\"></div>\n")
+                 (push "%;\"></div>\n"))
             (push "<script id=\"source\">\n$(function () {")
 
             (push "var data = [];")
diff --git a/src/report/report-system/html-linechart.scm b/src/report/report-system/html-linechart.scm
index ca9684f..110e399 100644
--- a/src/report/report-system/html-linechart.scm
+++ b/src/report/report-system/html-linechart.scm
@@ -63,8 +63,8 @@
 
 (define (gnc:make-html-linechart)
   (gnc:make-html-linechart-internal
-    -1   ;;width
-    -1   ;;height
+    '(pixels . -1)  ;;width
+    '(pixels . -1)  ;;height
     #f   ;;title
     #f   ;;subtitle
     #f   ;;x-axis-label
@@ -167,7 +167,6 @@
 (define gnc:html-linechart-set-col-colors!
   (record-modifier <html-linechart> 'col-colors))
 
-
 (define gnc:html-linechart-legend-reversed?
   (record-accessor <html-linechart> 'legend-reversed?))
 
@@ -429,10 +428,15 @@
             (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
 
             (push "<div id=\"")(push chart-id)(push "\" style=\"width:")
-            (push (gnc:html-linechart-width linechart))
-            (push "px;height:")
-            (push (gnc:html-linechart-height linechart))
-            (push "px;\"></div>\n")
+            (push (cdr (gnc:html-linechart-width linechart)))
+            (if (eq? 'pixels (car (gnc:html-linechart-width linechart)))
+                 (push "px;height:")
+                 (push "%;height:"))
+
+            (push (cdr (gnc:html-linechart-height linechart)))
+            (if (eq? 'pixels (car (gnc:html-linechart-height linechart)))
+                 (push "px;\"></div>\n")
+                 (push "%;\"></div>\n"))
             (push "<script id=\"source\">\n$(function () {")
 
             (push "var data = [];")
diff --git a/src/report/standard-reports/category-barchart.scm b/src/report/standard-reports/category-barchart.scm
index 4ba52ef..22b0482 100644
--- a/src/report/standard-reports/category-barchart.scm
+++ b/src/report/standard-reports/category-barchart.scm
@@ -89,6 +89,7 @@ developing over time"))
 (define optname-slices (N_ "Maximum Bars"))
 (define optname-plot-width (N_ "Plot Width"))
 (define optname-plot-height (N_ "Plot Height"))
+
 (define optname-sort-method (N_ "Sort Method"))
 
 (define optname-averaging (N_ "Show Average"))
@@ -205,11 +206,11 @@ developing over time"))
 
     (gnc:options-add-plot-size! 
      options gnc:pagename-display 
-     optname-plot-width optname-plot-height "e" 400 400)
+     optname-plot-width optname-plot-height "f" (cons 'percent 100.0) (cons 'percent 100.0))
 
     (gnc:options-add-sort-method! 
      options gnc:pagename-display
-     optname-sort-method "f" 'amount)
+     optname-sort-method "g" 'amount)
 
     (gnc:options-set-default-section options gnc:pagename-general)
 
@@ -494,6 +495,7 @@ developing over time"))
                                  (_ "Balances %s to %s"))
                              (jqplot-escape-string (gnc-print-date from-date-tp))
                              (jqplot-escape-string (gnc-print-date to-date-tp))))
+
                  (gnc:html-barchart-set-width! chart width)
                  (gnc:html-barchart-set-height! chart height)
 
@@ -519,9 +521,10 @@ developing over time"))
                                  (_ "Balances %s to %s"))
                              (jqplot-escape-string (gnc-print-date from-date-tp))
                              (jqplot-escape-string (gnc-print-date to-date-tp))))
+
                  (gnc:html-linechart-set-width! chart width)
                  (gnc:html-linechart-set-height! chart height)
-             
+
                  ;; row labels etc.
                  (gnc:html-linechart-set-row-labels! chart date-iso-string-list)
                  ;; FIXME: axis labels are not yet supported by

commit 1f8c413d3fb99d0374ae1e7a7a61cae5c9ef2892
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Nov 28 15:56:05 2016 +0000

    Change plot-size-option to use a pair
    
    This change allows the use of pair to specify plot sizes. They can be a
    fixed pixel amount or a percentage.

diff --git a/src/app-utils/app-utils.scm b/src/app-utils/app-utils.scm
index 4bbcbf1..06ef82e 100644
--- a/src/app-utils/app-utils.scm
+++ b/src/app-utils/app-utils.scm
@@ -111,6 +111,9 @@
 
 (export gnc:make-number-range-option)
 (export gnc:make-number-plot-size-option)
+(export gnc:plot-size-option-value-type)
+(export gnc:plot-size-option-value)
+
 (export gnc:make-internal-option)
 (export gnc:make-query-option)
 (export gnc:make-color-option)
diff --git a/src/app-utils/option-util.c b/src/app-utils/option-util.c
index d3ee994..85eab06 100644
--- a/src/app-utils/option-util.c
+++ b/src/app-utils/option-util.c
@@ -108,6 +108,8 @@ struct _Getters
     SCM date_option_value_type;
     SCM date_option_value_absolute;
     SCM date_option_value_relative;
+    SCM plot_size_option_value_type;
+    SCM plot_size_option_value;
     SCM currency_accounting_option_currency_doc_string;
     SCM currency_accounting_option_default_currency;
     SCM currency_accounting_option_policy_doc_string;
@@ -596,6 +598,8 @@ initialize_getters(void)
         scm_c_eval_string("gnc:date-option-absolute-time");
     getters.date_option_value_relative =
         scm_c_eval_string("gnc:date-option-relative-time");
+    getters.plot_size_option_value_type = scm_c_eval_string ("gnc:plot-size-option-value-type");
+    getters.plot_size_option_value = scm_c_eval_string("gnc:plot-size-option-value");
     getters.currency_accounting_option_currency_doc_string =
         scm_c_eval_string("gnc:currency-accounting-option-get-curr-doc-string");
     getters.currency_accounting_option_default_currency =
@@ -2667,6 +2671,45 @@ gnc_date_option_value_get_relative (SCM option_value)
     return scm_call_1 (getters.date_option_value_relative, option_value);
 }
 
+/*******************************************************************\
+ * gnc_plot_size_option_value_get_type                             *
+ *   get the type of a plot size option value                      *
+ *                                                                 *
+ * Args: option_value - option value to get type of                *
+ * Return: newly allocated type string or NULL                     *
+\*******************************************************************/
+char *
+gnc_plot_size_option_value_get_type (SCM option_value)
+{
+    SCM value;
+
+    initialize_getters();
+
+    return gnc_scm_call_1_symbol_to_string (getters.plot_size_option_value_type, option_value);
+}
+
+/*******************************************************************\
+ * gnc_plot_size_option_value_get_value                            *
+ *   get the plot size option value                                *
+ *                                                                 *
+ * Args: option_value - option value to get the plot size of       *
+ * Return: double value                                            *
+\*******************************************************************/
+gdouble
+gnc_plot_size_option_value_get_value (SCM option_value)
+{
+    SCM value;
+
+    initialize_getters();
+
+    value = scm_call_1 (getters.plot_size_option_value, option_value);
+
+    if (scm_is_number(value))
+        return scm_to_double (value);
+    else
+        return 1.0;
+}
+
 /********************************************************************\
  * gnc_currency_accounting_option_currency_documentation            *
  *   returns the malloc'ed documentation string for currency        *
diff --git a/src/app-utils/option-util.h b/src/app-utils/option-util.h
index 996223d..4366ccb 100644
--- a/src/app-utils/option-util.h
+++ b/src/app-utils/option-util.h
@@ -251,6 +251,9 @@ char * gnc_date_option_value_get_type (SCM option_value);
 Timespec gnc_date_option_value_get_absolute (SCM option_value);
 SCM gnc_date_option_value_get_relative (SCM option_value);
 
+char * gnc_plot_size_option_value_get_type (SCM option_value);
+gdouble gnc_plot_size_option_value_get_value (SCM option_value);
+
 char * gnc_currency_accounting_option_currency_documentation(GNCOption *option);
 SCM gnc_currency_accounting_option_get_default_currency(GNCOption *option);
 char * gnc_currency_accounting_option_policy_documentation(GNCOption *option);
diff --git a/src/app-utils/options.scm b/src/app-utils/options.scm
index 32f3f9f..a49f2e1 100644
--- a/src/app-utils/options.scm
+++ b/src/app-utils/options.scm
@@ -1143,9 +1143,9 @@
      (list lower-bound upper-bound num-decimals step-size)
      #f #f #f)))
 
-
-;; plot size options use the option-data as a list whose
+;; number plot size options use the option-data as a list whose
 ;; elements are: (lower-bound upper-bound num-decimals step-size)
+;; which is used for the valid pixel range
 (define (gnc:make-number-plot-size-option
          section
          name
@@ -1157,33 +1157,53 @@
          num-decimals
          step-size)
   (let* ((value default-value)
-         (value->string (lambda () (number->string value))))
+         (value->string (lambda ()
+                          (string-append "'" (gnc:value->string value)))))
     (gnc:make-option
-     section name sort-tag 'number-range documentation-string
-     (lambda () value)
+     section name sort-tag 'plot-size documentation-string
+     (lambda () value)  ;;getter
      (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) ;; this is for old style plot size
+             (set! value (cons 'pixels x))
+             (set! value x)))  ;;setter
 
-       (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 () default-value)  ;;default-getter
+     (gnc:restore-form-generator value->string)  ;;restore-form
+     (lambda (b p)
+       (qof-book-set-option b (symbol->string (car value))
+                              (append p '("type")))
+       (qof-book-set-option b (if (symbol? (cdr value))
+                                  (symbol->string (cdr value))
+                                  (cdr value))
+                                  (append p '("value"))))  ;;scm->kvp
+     (lambda (b p)
+       (let ((t (qof-book-get-option b (append p '("type"))))
+             (v (qof-book-get-option b (append p '("value")))))
+         (if (and t v (string? t))
+             (set! value (cons (string->symbol t)
+                               (if (string? v) (string->number v) v))))))  ;;kvp->scm
      (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)))
+       (if (eq? 'pixels (car x))
+         (cond ((not (number? (cdr x))) (list #f "number-plot-size-option-pixels: not a number"))
+               ((and (>= (cdr x) lower-bound)
+                     (<= (cdr x) upper-bound))
+                (list #t x))
+               (else (list #f "number-plot-size-option-pixels: out of range")))
+         (cond ((not (number? (cdr x))) (list #f "number-plot-size-option-percentage: not a number"))
+               ((and (>= (cdr x) 10)
+                     (<= (cdr x) 100))
+                (list #t x))
+               (else (list #f "number-plot-size-option-percentage: out of range")))
+       )
+     )  ;;value-validator
+     (list lower-bound upper-bound num-decimals step-size)  ;;option-data
+     #f #f #f)))  ;;option-data-fns, strings-getter, option-widget-changed-proc
+
+(define (gnc:plot-size-option-value-type option-value)
+  (car option-value))
+
+(define (gnc:plot-size-option-value option-value)
+  (cdr option-value))
 
 (define (gnc:make-internal-option
          section
diff --git a/src/gnome-utils/dialog-options.c b/src/gnome-utils/dialog-options.c
index 5671b3a..f9c645f 100644
--- a/src/gnome-utils/dialog-options.c
+++ b/src/gnome-utils/dialog-options.c
@@ -2262,71 +2262,6 @@ gnc_option_set_ui_widget_number_range (GNCOption *option, GtkBox *page_box,
 }
 
 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,
                                 /* Return values */
@@ -2485,6 +2420,149 @@ gnc_option_set_ui_widget_dateformat (GNCOption *option, GtkBox *page_box,
     return *enclosing;
 }
 
+
+static void
+gnc_plot_size_option_set_select_method(GNCOption *option, gboolean set_buttons)
+{
+    GList* widget_list;
+    GtkWidget *px_button, *p_button, *px_widget, *p_widget;
+    GtkWidget *widget;
+
+    widget = gnc_option_get_gtk_widget (option);
+
+    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
+    px_button = g_list_nth_data(widget_list, 0);
+    px_widget = g_list_nth_data(widget_list, 1);
+    p_button = g_list_nth_data(widget_list, 2);
+    p_widget = g_list_nth_data(widget_list, 3);
+    g_list_free(widget_list);
+
+    if (set_buttons)
+    {
+        gtk_widget_set_sensitive(px_widget, TRUE);
+        gtk_widget_set_sensitive(p_widget, FALSE);
+    }
+    else
+    {
+        gtk_widget_set_sensitive(p_widget, TRUE);
+        gtk_widget_set_sensitive(px_widget, FALSE);
+    }
+}
+
+static void
+gnc_rd_option_px_set_cb(GtkWidget *widget, gpointer *raw_option)
+{
+    GNCOption *option = (GNCOption *) raw_option;
+    gnc_plot_size_option_set_select_method(option, TRUE);
+    gnc_option_changed_option_cb(widget, option);
+}
+
+static void
+gnc_rd_option_p_set_cb(GtkWidget *widget, gpointer *raw_option)
+{
+    GNCOption *option = (GNCOption *) raw_option;
+    gnc_plot_size_option_set_select_method(option, FALSE);
+    gnc_option_changed_option_cb(widget, option);
+    return;
+}
+
+
+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_px, *value_percent;
+    GtkWidget *label;
+    GtkWidget *px_butt, *p_butt;
+    GtkWidget *hbox;
+    gchar *colon_name;
+    GtkAdjustment *adj_px, *adj_percent;
+    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);
+
+    hbox = gtk_hbox_new(FALSE, 5);
+
+    *enclosing = gtk_hbox_new(FALSE, 5);
+
+    gtk_box_pack_start(GTK_BOX(*enclosing), label, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(*enclosing), hbox, FALSE, FALSE, 0);
+
+    gnc_option_get_range_info(option, &lower_bound, &upper_bound,
+                              &num_decimals, &step_size);
+    adj_px = GTK_ADJUSTMENT(gtk_adjustment_new(lower_bound, lower_bound,
+                                            upper_bound, step_size,
+                                            step_size * 5.0,
+                                            0));
+
+    value_px = gtk_spin_button_new(adj_px, step_size, num_decimals);
+    gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(value_px), 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_px), num_digits);
+    }
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(value_px), (upper_bound / 2)); //default
+    g_signal_connect(G_OBJECT(value_px), "changed",
+                     G_CALLBACK(gnc_option_changed_widget_cb), option);
+
+    adj_percent = GTK_ADJUSTMENT(gtk_adjustment_new(1, 10, 100, 1, 5.0, 0));
+    value_percent = gtk_spin_button_new(adj_percent, 1, 0);
+    gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(value_percent), TRUE);
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(value_percent), 100); //default
+    gtk_entry_set_width_chars(GTK_ENTRY(value_percent), 3);
+    gtk_widget_set_sensitive(value_percent, FALSE);
+
+    g_signal_connect(G_OBJECT(value_percent), "changed",
+                     G_CALLBACK(gnc_option_changed_widget_cb), option);
+
+    px_butt = gtk_radio_button_new_with_label(NULL, _("Pixels"));
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(px_butt), TRUE);
+
+    g_signal_connect(G_OBJECT(px_butt), "toggled",
+                         G_CALLBACK(gnc_rd_option_px_set_cb), option);
+
+    p_butt = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(px_butt), _("Percent"));
+    g_signal_connect(G_OBJECT(p_butt), "toggled",
+                         G_CALLBACK(gnc_rd_option_p_set_cb), option);
+
+    gtk_box_pack_start(GTK_BOX(hbox), px_butt, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), value_px, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), p_butt, FALSE, FALSE, 0);
+    gtk_box_pack_start(GTK_BOX(hbox), value_percent, FALSE, FALSE, 0);
+
+    gnc_option_set_widget (option, hbox);
+    gnc_option_set_ui_value (option, FALSE);
+
+    gtk_widget_show_all(*enclosing);
+    return hbox;
+}
+
 static GtkWidget *
 gnc_option_set_ui_widget_budget (GNCOption *option, GtkBox *page_box,
                                  char *name, char *documentation,
@@ -2836,25 +2914,6 @@ gnc_option_set_ui_value_number_range (GNCOption *option, gboolean use_default,
 }
 
 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)
 {
@@ -3023,6 +3082,45 @@ gnc_option_set_ui_value_dateformat (GNCOption *option, gboolean use_default,
 }
 
 static gboolean
+gnc_option_set_ui_value_plot_size (GNCOption *option, gboolean use_default,
+                                    GtkWidget *widget, SCM value)
+{
+    GList* widget_list;
+    GtkWidget *px_button, *p_button, *px_widget, *p_widget;
+    char *symbol_str;
+    gdouble d_value;
+
+    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
+    px_button = g_list_nth_data(widget_list, 0);
+    px_widget = g_list_nth_data(widget_list, 1);
+    p_button = g_list_nth_data(widget_list, 2);
+    p_widget = g_list_nth_data(widget_list, 3);
+    g_list_free(widget_list);
+
+    if (scm_is_pair(value))
+    {
+        symbol_str = gnc_plot_size_option_value_get_type(value);
+        d_value = gnc_plot_size_option_value_get_value(value);
+
+        if (symbol_str)
+        {
+            if (g_strcmp0(symbol_str, "pixels") == 0) // pixel values
+            {
+                gtk_spin_button_set_value(GTK_SPIN_BUTTON(px_widget), d_value);
+                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(px_button), TRUE);
+            }
+            else // percent values
+            {
+                gtk_spin_button_set_value(GTK_SPIN_BUTTON(p_widget), (d_value));
+                gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(p_button), TRUE);
+            }
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+
+static gboolean
 gnc_option_set_ui_value_currency_accounting (GNCOption *option,
                                              gboolean use_default,
                                              GtkWidget *widget, SCM value)
@@ -3387,19 +3485,6 @@ gnc_option_get_ui_value_number_range (GNCOption *option, GtkWidget *widget)
 }
 
 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)
 {
     SCM result;
@@ -3481,6 +3566,35 @@ gnc_option_get_ui_value_dateformat (GNCOption *option, GtkWidget *widget)
 }
 
 static SCM
+gnc_option_get_ui_value_plot_size (GNCOption *option, GtkWidget *widget)
+{
+    GList* widget_list;
+    GtkWidget *px_button, *p_button, *px_widget, *p_widget;
+    gdouble d_value;
+    SCM type, val;
+
+    widget_list = gtk_container_get_children(GTK_CONTAINER(widget));
+    px_button = g_list_nth_data(widget_list, 0);
+    px_widget = g_list_nth_data(widget_list, 1);
+    p_button = g_list_nth_data(widget_list, 2);
+    p_widget = g_list_nth_data(widget_list, 3);
+    g_list_free(widget_list);
+
+    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(px_button)))
+    {
+        type = scm_from_locale_symbol("pixels");
+        d_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(px_widget));
+    }
+    else
+    {
+        type = scm_from_locale_symbol("percent");
+        d_value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(p_widget));
+    }
+    val = scm_from_double(d_value);
+    return scm_cons(type, val);
+}
+
+static SCM
 gnc_option_get_ui_value_currency_accounting (GNCOption *option, GtkWidget *widget)
 {
     gpointer _index;
@@ -3603,10 +3717,6 @@ static void gnc_options_initialize_options (void)
             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
         },
@@ -3627,6 +3737,10 @@ static void gnc_options_initialize_options (void)
             gnc_option_set_ui_value_dateformat, gnc_option_get_ui_value_dateformat
         },
         {
+            "plot-size", gnc_option_set_ui_widget_plot_size,
+            gnc_option_set_ui_value_plot_size, gnc_option_get_ui_value_plot_size
+        },
+        {
             "budget", gnc_option_set_ui_widget_budget,
             gnc_option_set_ui_value_budget, gnc_option_get_ui_value_budget
         },



Summary of changes:
 src/app-utils/app-utils.scm                        |   4 +
 src/app-utils/option-util.c                        |  43 +++
 src/app-utils/option-util.h                        |   3 +
 src/app-utils/options.scm                          |  97 ++++---
 .../business-gnome/gncmod-business-gnome.c         |   2 +-
 src/engine/engine.i                                |   2 +-
 src/gnome-utils/dialog-options.c                   | 316 ++++++++++++++-------
 src/gnome-utils/gnc-date-format.c                  |   1 +
 src/gnome-utils/gnc-main-window.c                  |   2 +-
 src/libqof/qof/qofbook.cpp                         |  12 +-
 src/libqof/qof/qofbook.h                           |   3 +-
 src/libqof/qof/test/test-gnc-date.c                |   2 +-
 src/report/business-reports/customer-summary.scm   |   2 +-
 src/report/business-reports/easy-invoice.scm       |   3 +-
 src/report/business-reports/fancy-invoice.scm      |   5 +-
 src/report/business-reports/invoice.scm            |   3 +-
 src/report/business-reports/job-report.scm         |   3 +-
 src/report/business-reports/owner-report.scm       |   4 +-
 src/report/business-reports/taxinvoice.eguile.scm  |   2 +-
 src/report/report-system/gnc-report.h              |   4 +-
 src/report/report-system/html-barchart.scm         |  16 +-
 src/report/report-system/html-linechart.scm        |  18 +-
 src/report/report-system/html-piechart.scm         |  15 +-
 src/report/report-system/html-scatter.scm          |  15 +-
 src/report/standard-reports/account-piecharts.scm  |  23 +-
 src/report/standard-reports/average-balance.scm    |  12 +-
 src/report/standard-reports/budget-barchart.scm    |  69 +++--
 src/report/standard-reports/category-barchart.scm  |   9 +-
 src/report/standard-reports/daily-reports.scm      |   4 +-
 src/report/standard-reports/general-ledger.scm     |   4 +-
 src/report/standard-reports/net-barchart.scm       |  12 +-
 src/report/standard-reports/net-linechart.scm      |   6 +-
 src/report/standard-reports/price-scatter.scm      |   2 +-
 33 files changed, 477 insertions(+), 241 deletions(-)



More information about the gnucash-changes mailing list