diff --git a/gnucash/report/html-barchart.scm b/gnucash/report/html-barchart.scm
index 4032e462da..2f5fe87646 100644
--- a/gnucash/report/html-barchart.scm
+++ b/gnucash/report/html-barchart.scm
@@ -43,6 +43,17 @@
button-2-legend-urls
button-3-legend-urls)))
+(define-syntax-rule (gnc:guard-html-chart api)
+ ;; this macro applied to old html-bar/line/scatter/pie apis will
+ ;; guard a report writer from passing html-chart objects. this
+ ;; should be removed in 5.x series.
+ (let ((old-api api))
+ (set! api
+ (lambda args
+ (if (and (pair? args) (gnc:html-chart? (car args)))
+ (gnc:warn "using old-api " (procedure-name api) " on html-chart object. set options via gnc:html-chart-set! or its shortcuts gnc:html-chart-set-title! etc, and set data via gnc:html-chart-add-data-series! see sample-graphs.scm for examples.")
+ (apply old-api args))))))
+
(define gnc:html-barchart?
(record-predicate ))
@@ -55,6 +66,8 @@
(record-constructor ))
(define (gnc:make-html-barchart)
+ (issue-deprecation-warning
+ "(gnc:make-html-barchart) is deprecated. use gnc:make-html-chart instead.")
(gnc:make-html-barchart-internal '(pixels . -1) '(pixels . -1) #f #f #f #f '() '() '()
#f #f #f '() #f #f #f #f #f #f))
@@ -272,308 +285,70 @@
newcol)))
(define (gnc:html-barchart-render barchart doc)
- (define (ensure-numeric elt)
- (cond ((number? elt)
- (exact->inexact elt))
- ((string? elt)
- (with-input-from-string elt
- (lambda ()
- (let ((n (read)))
- (if (number? n) n 0.0)))))
- (#t
- 0.0)))
-
- (define (catenate-escaped-strings nlist)
- (if (not (list? nlist))
- ""
- (with-output-to-string
- (lambda ()
- (for-each
- (lambda (s)
- (let ((escaped
- (regexp-substitute/global
- #f " "
- (regexp-substitute/global
- #f "\\\\" s
- 'pre "\\\\" 'post)
- 'pre "\\ " 'post)))
- (display escaped)
- (display " ")))
- nlist)))))
+ (let* ((chart (gnc:make-html-chart))
+ (data (gnc:html-barchart-data barchart)))
+ (cond
+ ((and (pair? data) (gnc:not-all-zeros data))
+ (gnc:html-chart-set-type! chart 'bar)
+ (gnc:html-chart-set-width! chart (gnc:html-barchart-width barchart))
+ (gnc:html-chart-set-height! chart (gnc:html-barchart-height barchart))
+ (gnc:html-chart-set-data-labels! chart (gnc:html-barchart-row-labels barchart))
+ (for-each
+ (lambda (label series color)
+ (gnc:html-chart-add-data-series! chart label series color))
+ (gnc:html-barchart-col-labels barchart)
+ data
+ (gnc:html-barchart-col-colors barchart))
+ (gnc:html-chart-set-title! chart (list
+ (gnc:html-barchart-title barchart)
+ (gnc:html-barchart-subtitle barchart)))
+ (gnc:html-chart-set-stacking?! chart (gnc:html-barchart-stacked? barchart))
+ (gnc:html-chart-render chart doc))
- (let* ((retval '())
- (push (lambda (l) (set! retval (cons l retval))))
- (title (gnc:html-barchart-title barchart))
- (subtitle (gnc:html-barchart-subtitle barchart))
- (url-1
- (catenate-escaped-strings
- (gnc:html-barchart-button-1-bar-urls barchart)))
- (url-2
- (catenate-escaped-strings
- (gnc:html-barchart-button-2-bar-urls barchart)))
- (url-3
- (catenate-escaped-strings
- (gnc:html-barchart-button-3-bar-urls barchart)))
- (legend-1
- (catenate-escaped-strings
- (gnc:html-barchart-button-1-legend-urls barchart)))
- (legend-2
- (catenate-escaped-strings
- (gnc:html-barchart-button-2-legend-urls barchart)))
- (legend-3
- (catenate-escaped-strings
- (gnc:html-barchart-button-3-legend-urls barchart)))
- (x-label (gnc:html-barchart-x-axis-label barchart))
- (y-label (gnc:html-barchart-y-axis-label barchart))
- (data (gnc:html-barchart-data barchart))
- (dummy1 (gnc:debug "data " data))
- (row-labels (catenate-escaped-strings
- (gnc:html-barchart-row-labels barchart)))
- (col-labels (catenate-escaped-strings
- (gnc:html-barchart-col-labels barchart)))
- ;; convert color list to string with valid js array of strings, example: "\"blue\", \"red\""
- (colors-str (string-join (map (lambda (color)
- (string-append "\"" color "\""))
- (gnc:html-barchart-col-colors barchart)) ", "))
- (series-data-start (lambda (series-index)
- (push "var d")
- (push series-index)
- (push " = [];\n")))
- (series-data-add (lambda (series-index x y)
- (push (string-append
- " d"
- (number->string series-index)
- ".push(["
- (number->string x)
- ", "
- (number->string y)
- "]);\n"))))
- (series-data-end (lambda (series-index label)
- (push "data.push(d")
- (push series-index)
- (push ");\n")
- (push (format #f "series.push({ label: ~s });\n\n"
- (gnc:html-string-sanitize label)))
- ))
- ; Use a unique chart-id for each chart. This prevents chart
- ; clashed on multi-column reports
- (chart-id (string-append "chart-" (number->string (random 999999)))))
- (if (and (list? data)
- (not (null? data))
- (gnc:not-all-zeros data))
- (begin
- (push (gnc:html-js-include "jqplot/jquery.min.js"))
- (push (gnc:html-js-include "jqplot/jquery.jqplot.js"))
- (push (gnc:html-js-include "jqplot/jqplot.barRenderer.js"))
- (push (gnc:html-js-include "jqplot/jqplot.cursor.js"))
- (push (gnc:html-js-include "jqplot/jqplot.categoryAxisRenderer.js"))
- (push (gnc:html-js-include "jqplot/jqplot.highlighter.js"))
- (push (gnc:html-js-include "jqplot/jqplot.canvasTextRenderer.js"))
- (push (gnc:html-js-include "jqplot/jqplot.canvasAxisTickRenderer.js"))
+ (else
+ (gnc:warn "null-data, not rendering barchart")
+ ""))))
- (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
- (push "\n")
- (push "%;\">\n"))
- (push "")
-
- (gnc:msg (string-join (reverse (map (lambda (e) (if (number? e) (number->string e) e)) retval)) ""))
-
- )
- (begin
- (gnc:warn "barchart has no non-zero data.")
- " "))
- retval))
+(gnc:guard-html-chart gnc:html-barchart-data)
+(gnc:guard-html-chart gnc:html-barchart-set-data!)
+(gnc:guard-html-chart gnc:html-barchart-width)
+(gnc:guard-html-chart gnc:html-barchart-set-width!)
+(gnc:guard-html-chart gnc:html-barchart-height)
+(gnc:guard-html-chart gnc:html-barchart-set-height!)
+(gnc:guard-html-chart gnc:html-barchart-x-axis-label)
+(gnc:guard-html-chart gnc:html-barchart-set-x-axis-label!)
+(gnc:guard-html-chart gnc:html-barchart-y-axis-label)
+(gnc:guard-html-chart gnc:html-barchart-set-y-axis-label!)
+(gnc:guard-html-chart gnc:html-barchart-row-labels)
+(gnc:guard-html-chart gnc:html-barchart-set-row-labels!)
+(gnc:guard-html-chart gnc:html-barchart-row-labels-rotated?)
+(gnc:guard-html-chart gnc:html-barchart-set-row-labels-rotated?!)
+(gnc:guard-html-chart gnc:html-barchart-stacked?)
+(gnc:guard-html-chart gnc:html-barchart-set-stacked?!)
+(gnc:guard-html-chart gnc:html-barchart-col-labels)
+(gnc:guard-html-chart gnc:html-barchart-set-col-labels!)
+(gnc:guard-html-chart gnc:html-barchart-col-colors)
+(gnc:guard-html-chart gnc:html-barchart-set-col-colors!)
+(gnc:guard-html-chart gnc:html-barchart-legend-reversed?)
+(gnc:guard-html-chart gnc:html-barchart-set-legend-reversed?!)
+(gnc:guard-html-chart gnc:html-barchart-title)
+(gnc:guard-html-chart gnc:html-barchart-set-title!)
+(gnc:guard-html-chart gnc:html-barchart-subtitle)
+(gnc:guard-html-chart gnc:html-barchart-set-subtitle!)
+(gnc:guard-html-chart gnc:html-barchart-button-1-bar-urls)
+(gnc:guard-html-chart gnc:html-barchart-set-button-1-bar-urls!)
+(gnc:guard-html-chart gnc:html-barchart-button-2-bar-urls)
+(gnc:guard-html-chart gnc:html-barchart-set-button-2-bar-urls!)
+(gnc:guard-html-chart gnc:html-barchart-button-3-bar-urls)
+(gnc:guard-html-chart gnc:html-barchart-set-button-3-bar-urls!)
+(gnc:guard-html-chart gnc:html-barchart-button-1-legend-urls)
+(gnc:guard-html-chart gnc:html-barchart-set-button-1-legend-urls!)
+(gnc:guard-html-chart gnc:html-barchart-button-2-legend-urls)
+(gnc:guard-html-chart gnc:html-barchart-set-button-2-legend-urls!)
+(gnc:guard-html-chart gnc:html-barchart-button-3-legend-urls)
+(gnc:guard-html-chart gnc:html-barchart-set-button-3-legend-urls!)
+(gnc:guard-html-chart gnc:html-barchart-append-row!)
+(gnc:guard-html-chart gnc:html-barchart-prepend-row!)
+(gnc:guard-html-chart gnc:html-barchart-append-column!)
+(gnc:guard-html-chart gnc:html-barchart-prepend-column!)
+(gnc:guard-html-chart gnc:html-barchart-render)
diff --git a/gnucash/report/html-linechart.scm b/gnucash/report/html-linechart.scm
index 44ebd40b1b..4fca2f9cae 100644
--- a/gnucash/report/html-linechart.scm
+++ b/gnucash/report/html-linechart.scm
@@ -50,6 +50,17 @@
button-3-legend-urls
line-width)))
+(define-syntax-rule (gnc:guard-html-chart api)
+ ;; this macro applied to old html-bar/line/scatter/pie apis will
+ ;; guard a report writer from passing html-chart objects. this
+ ;; should be removed in 5.x series.
+ (let ((old-api api))
+ (set! api
+ (lambda args
+ (if (and (pair? args) (gnc:html-chart? (car args)))
+ (gnc:warn "using old-api " (procedure-name api) " on html-chart object. set options via gnc:html-chart-set! or its shortcuts gnc:html-chart-set-title! etc, and set data via gnc:html-chart-add-data-series! see sample-graphs.scm for examples.")
+ (apply old-api args))))))
+
(define gnc:html-linechart?
(record-predicate ))
@@ -62,6 +73,8 @@
(record-constructor ))
(define (gnc:make-html-linechart)
+ (issue-deprecation-warning
+ "(gnc:make-html-linechart) is deprecated. use gnc:make-html-chart instead.")
(gnc:make-html-linechart-internal
'(pixels . -1) ;;width
'(pixels . -1) ;;height
@@ -327,284 +340,84 @@
newcol)))
(define (gnc:html-linechart-render linechart doc)
- (define (ensure-numeric elt)
- (cond ((number? elt)
- (exact->inexact elt))
- ((string? elt)
- (with-input-from-string elt
- (lambda ()
- (let ((n (read)))
- (if (number? n) n 0.0)))))
- (#t
- 0.0)))
-
- (define (catenate-escaped-strings nlist)
- (if (not (list? nlist))
- ""
- (with-output-to-string
- (lambda ()
- (for-each
- (lambda (s)
- (let ((escaped
- (regexp-substitute/global
- #f " "
- (regexp-substitute/global
- #f "\\\\" s
- 'pre "\\\\" 'post)
- 'pre "\\ " 'post)))
- (display escaped)
- (display " ")))
- nlist)))))
-
- (let* ((retval '())
- (push (lambda (l) (set! retval (cons l retval))))
- (title (gnc:html-linechart-title linechart))
- (subtitle (gnc:html-linechart-subtitle linechart))
- (url-1
- (catenate-escaped-strings
- (gnc:html-linechart-button-1-line-urls linechart)))
- (url-2
- (catenate-escaped-strings
- (gnc:html-linechart-button-2-line-urls linechart)))
- (url-3
- (catenate-escaped-strings
- (gnc:html-linechart-button-3-line-urls linechart)))
- (legend-1
- (catenate-escaped-strings
- (gnc:html-linechart-button-1-legend-urls linechart)))
- (legend-2
- (catenate-escaped-strings
- (gnc:html-linechart-button-2-legend-urls linechart)))
- (legend-3
- (catenate-escaped-strings
- (gnc:html-linechart-button-3-legend-urls linechart)))
- (x-label (gnc:html-linechart-x-axis-label linechart))
- (y-label (gnc:html-linechart-y-axis-label linechart))
+ (let* ((chart (gnc:make-html-chart))
(data (gnc:html-linechart-data linechart))
- (dummy1 (gnc:debug "data " data))
- (row-labels (catenate-escaped-strings
- (gnc:html-linechart-row-labels linechart)))
- (col-labels (catenate-escaped-strings
- (gnc:html-linechart-col-labels linechart)))
- ;; convert color list to string with valid js array of strings, example: "\"blue\", \"red\""
- (colors-str (string-join (map (lambda (color)
- (string-append "\"" color "\""))
- (gnc:html-linechart-col-colors linechart)) ", "))
(line-width (gnc:html-linechart-line-width linechart))
- (series-data-start (lambda (series-index)
- (push "var d")
- (push series-index)
- (push " = [];\n")))
- (series-data-add (lambda (series-index date y)
- (push (string-append
- " d"
- (number->string series-index)
- ".push(["
- "\"" date "\""
- ", "
- (number->string y)
- "]);\n"))))
- (series-data-end (lambda (series-index label)
- (push "data.push(d")
- (push series-index)
- (push ");\n")
- (push (format #f "series.push({ label: ~s });\n\n"
- (gnc:html-string-sanitize label)))))
- ; Use a unique chart-id for each chart. This prevents chart
- ; clashed on multi-column reports
- (chart-id (string-append "chart-" (number->string (random 999999)))))
- (if (and (list? data)
- (not (null? data))
- (gnc:not-all-zeros data))
- (begin
- (push (gnc:html-js-include "jqplot/jquery.min.js"))
- (push (gnc:html-js-include "jqplot/jquery.jqplot.js"))
- (push (gnc:html-js-include "jqplot/jqplot.cursor.js"))
- (push (gnc:html-js-include "jqplot/jqplot.dateAxisRenderer.js"))
- (push (gnc:html-js-include "jqplot/jqplot.highlighter.js"))
- (push (gnc:html-js-include "jqplot/jqplot.canvasTextRenderer.js"))
- (push (gnc:html-js-include "jqplot/jqplot.canvasAxisTickRenderer.js"))
- (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
+ (radius (if (gnc:html-linechart-markers? linechart) 3 0)))
+ (cond
+ ((and (pair? data) (gnc:not-all-zeros data))
+ (gnc:html-chart-set-type! chart 'line)
+ (gnc:html-chart-set-width! chart (gnc:html-linechart-width linechart))
+ (gnc:html-chart-set-height! chart (gnc:html-linechart-height linechart))
+ (gnc:html-chart-set-data-labels! chart (gnc:html-linechart-row-labels linechart))
+ (for-each
+ (lambda (label series color)
+ (gnc:html-chart-add-data-series! chart label series color
+ 'borderWidth line-width
+ 'pointRadius radius
+ 'fill #f))
+ (gnc:html-linechart-col-labels linechart)
+ (apply zip data)
+ (gnc:html-linechart-col-colors linechart))
+ (gnc:html-chart-set-title! chart (list
+ (gnc:html-linechart-title linechart)
+ (gnc:html-linechart-subtitle linechart)))
+ (gnc:html-chart-set-stacking?! chart (gnc:html-linechart-stacked? linechart))
+ (gnc:html-chart-render chart doc))
- (push "\n")
- (push "%;\">\n"))
- (push "")
-
- (gnc:msg (string-join (reverse (map (lambda (e) (if (number? e) (number->string e) e)) retval)) ""))
-
- )
- (begin
- (gnc:warn "linechart has no non-zero data.")
- " "))
- retval))
+(gnc:guard-html-chart gnc:html-linechart-data)
+(gnc:guard-html-chart gnc:html-linechart-set-data!)
+(gnc:guard-html-chart gnc:html-linechart-width)
+(gnc:guard-html-chart gnc:html-linechart-set-width!)
+(gnc:guard-html-chart gnc:html-linechart-height)
+(gnc:guard-html-chart gnc:html-linechart-set-height!)
+(gnc:guard-html-chart gnc:html-linechart-x-axis-label)
+(gnc:guard-html-chart gnc:html-linechart-set-x-axis-label!)
+(gnc:guard-html-chart gnc:html-linechart-y-axis-label)
+(gnc:guard-html-chart gnc:html-linechart-set-y-axis-label!)
+(gnc:guard-html-chart gnc:html-linechart-row-labels)
+(gnc:guard-html-chart gnc:html-linechart-set-row-labels!)
+(gnc:guard-html-chart gnc:html-linechart-row-labels-rotated?)
+(gnc:guard-html-chart gnc:html-linechart-set-row-labels-rotated?!)
+(gnc:guard-html-chart gnc:html-linechart-stacked?)
+(gnc:guard-html-chart gnc:html-linechart-set-stacked?!)
+(gnc:guard-html-chart gnc:html-linechart-markers?)
+(gnc:guard-html-chart gnc:html-linechart-set-markers?!)
+(gnc:guard-html-chart gnc:html-linechart-major-grid?)
+(gnc:guard-html-chart gnc:html-linechart-set-major-grid?!)
+(gnc:guard-html-chart gnc:html-linechart-minor-grid?)
+(gnc:guard-html-chart gnc:html-linechart-set-minor-grid?!)
+(gnc:guard-html-chart gnc:html-linechart-col-labels)
+(gnc:guard-html-chart gnc:html-linechart-set-col-labels!)
+(gnc:guard-html-chart gnc:html-linechart-col-colors)
+(gnc:guard-html-chart gnc:html-linechart-set-col-colors!)
+(gnc:guard-html-chart gnc:html-linechart-legend-reversed?)
+(gnc:guard-html-chart gnc:html-linechart-set-legend-reversed?!)
+(gnc:guard-html-chart gnc:html-linechart-title)
+(gnc:guard-html-chart gnc:html-linechart-set-title!)
+(gnc:guard-html-chart gnc:html-linechart-subtitle)
+(gnc:guard-html-chart gnc:html-linechart-set-subtitle!)
+(gnc:guard-html-chart gnc:html-linechart-button-1-line-urls)
+(gnc:guard-html-chart gnc:html-linechart-set-button-1-line-urls!)
+(gnc:guard-html-chart gnc:html-linechart-button-2-line-urls)
+(gnc:guard-html-chart gnc:html-linechart-set-button-2-line-urls!)
+(gnc:guard-html-chart gnc:html-linechart-button-3-line-urls)
+(gnc:guard-html-chart gnc:html-linechart-set-button-3-line-urls!)
+(gnc:guard-html-chart gnc:html-linechart-button-1-legend-urls)
+(gnc:guard-html-chart gnc:html-linechart-set-button-1-legend-urls!)
+(gnc:guard-html-chart gnc:html-linechart-button-2-legend-urls)
+(gnc:guard-html-chart gnc:html-linechart-set-button-2-legend-urls!)
+(gnc:guard-html-chart gnc:html-linechart-button-3-legend-urls)
+(gnc:guard-html-chart gnc:html-linechart-set-button-3-legend-urls!)
+(gnc:guard-html-chart gnc:html-linechart-append-row!)
+(gnc:guard-html-chart gnc:html-linechart-prepend-row!)
+(gnc:guard-html-chart gnc:html-linechart-append-column!)
+(gnc:guard-html-chart gnc:html-linechart-prepend-column!)
+(gnc:guard-html-chart gnc:html-linechart-render)
+(gnc:guard-html-chart gnc:html-linechart-set-line-width!)
+(gnc:guard-html-chart gnc:html-linechart-line-width)
diff --git a/gnucash/report/html-piechart.scm b/gnucash/report/html-piechart.scm
index f30ac8e519..169312d9f0 100644
--- a/gnucash/report/html-piechart.scm
+++ b/gnucash/report/html-piechart.scm
@@ -41,6 +41,16 @@
(define gnc:html-piechart?
(record-predicate ))
+(define-syntax-rule (gnc:guard-html-chart api)
+ ;; this macro applied to old html-bar/line/scatter/pie apis will
+ ;; guard a report writer from passing html-chart objects. this
+ ;; should be removed in 5.x series.
+ (let ((old-api api))
+ (set! api
+ (lambda args
+ (if (and (pair? args) (gnc:html-chart? (car args)))
+ (gnc:warn "using old-api " (procedure-name api) " on html-chart object. set options via gnc:html-chart-set! or its shortcuts gnc:html-chart-set-title! etc, and set data via gnc:html-chart-add-data-series! see sample-graphs.scm for examples.")
+ (apply old-api args))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; class
@@ -51,6 +61,8 @@
(record-constructor ))
(define (gnc:make-html-piechart)
+ (issue-deprecation-warning
+ "(gnc:make-html-piechart) is deprecated. use gnc:make-html-chart instead.")
(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
@@ -140,153 +152,50 @@
(record-modifier 'button-3-legend-urls))
(define (gnc:html-piechart-render piechart doc)
- (define (ensure-positive-numbers nlist)
- (map
- (lambda (elt)
- (cond ((number? elt)
- (exact->inexact (abs elt)))
- ((string? elt)
- (with-input-from-string elt
- (lambda ()
- (let ((n (read)))
- (if (number? n) (abs n) 0.0)))))
- (#t
- 0.0)))
- nlist))
-
- (define (catenate-escaped-strings nlist)
- (if (not (list? nlist))
- ""
- (with-output-to-string
- (lambda ()
- (for-each
- (lambda (s)
- (let ((escaped
- (regexp-substitute/global
- #f " "
- (regexp-substitute/global
- #f "\\\\" s
- 'pre "\\\\" 'post)
- 'pre "\\ " 'post)))
- (display escaped)
- (display " ")))
- nlist)))))
-
- (let* ((retval '())
- (push (lambda (l) (set! retval (cons l retval))))
+ (let* ((chart (gnc:make-html-chart))
(title (gnc:html-piechart-title piechart))
(subtitle (gnc:html-piechart-subtitle piechart))
- (url-1
- (catenate-escaped-strings
- (gnc:html-piechart-button-1-slice-urls piechart)))
- (url-2
- (catenate-escaped-strings
- (gnc:html-piechart-button-2-slice-urls piechart)))
- (url-3
- (catenate-escaped-strings
- (gnc:html-piechart-button-3-slice-urls piechart)))
- (legend-1
- (catenate-escaped-strings
- (gnc:html-piechart-button-1-legend-urls piechart)))
- (legend-2
- (catenate-escaped-strings
- (gnc:html-piechart-button-2-legend-urls piechart)))
- (legend-3
- (catenate-escaped-strings
- (gnc:html-piechart-button-3-legend-urls piechart)))
- (data
- (ensure-positive-numbers (gnc:html-piechart-data piechart)))
- ;; convert color list to string with valid js array of strings, example: "\"blue\", \"red\""
- (colors-str (string-join (map (lambda (color)
- (string-append "\"" color "\""))
- (gnc:html-piechart-colors piechart)) ", "))
- ; Use a unique chart-id for each chart. This prevents chart
- ; clashed on multi-column reports
- (chart-id (string-append "chart-" (number->string (random 999999)))))
- (if (and (list? data)
- (not (null? data)))
- (begin
- (push (gnc:html-js-include "jqplot/jquery.min.js"))
- (push (gnc:html-js-include "jqplot/jquery.jqplot.js"))
- (push (gnc:html-js-include "jqplot/jqplot.pieRenderer.js"))
- (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
+ (data (gnc:html-piechart-data piechart))
+ (colors (gnc:html-piechart-colors piechart)))
+ (cond
+ ((and (pair? data) (gnc:not-all-zeros data))
+ (gnc:html-chart-set-type! chart 'pie)
+ (gnc:html-chart-set-axes-display! chart #f)
+ (gnc:html-chart-set-width! chart (gnc:html-piechart-width piechart))
+ (gnc:html-chart-set-height! chart (gnc:html-piechart-height piechart))
+ (gnc:html-chart-set-data-labels! chart (gnc:html-piechart-labels piechart))
+ (gnc:html-chart-add-data-series! chart "" data colors)
+ (gnc:html-chart-set-title! chart (list title subtitle))
+ (gnc:html-chart-render chart doc))
- (push "\n")
- (push "%;\">\n"))
- (push ""))
- (begin (gnc:warn "null-data, not rendering piechart")
- " "))
- retval))
+(gnc:guard-html-chart gnc:html-piechart-data)
+(gnc:guard-html-chart gnc:html-piechart-set-data!)
+(gnc:guard-html-chart gnc:html-piechart-width)
+(gnc:guard-html-chart gnc:html-piechart-set-width!)
+(gnc:guard-html-chart gnc:html-piechart-height)
+(gnc:guard-html-chart gnc:html-piechart-set-height!)
+(gnc:guard-html-chart gnc:html-piechart-labels)
+(gnc:guard-html-chart gnc:html-piechart-set-labels!)
+(gnc:guard-html-chart gnc:html-piechart-colors)
+(gnc:guard-html-chart gnc:html-piechart-set-colors!)
+(gnc:guard-html-chart gnc:html-piechart-title)
+(gnc:guard-html-chart gnc:html-piechart-set-title!)
+(gnc:guard-html-chart gnc:html-piechart-subtitle)
+(gnc:guard-html-chart gnc:html-piechart-set-subtitle!)
+(gnc:guard-html-chart gnc:html-piechart-button-1-slice-urls)
+(gnc:guard-html-chart gnc:html-piechart-set-button-1-slice-urls!)
+(gnc:guard-html-chart gnc:html-piechart-button-2-slice-urls)
+(gnc:guard-html-chart gnc:html-piechart-set-button-2-slice-urls!)
+(gnc:guard-html-chart gnc:html-piechart-button-3-slice-urls)
+(gnc:guard-html-chart gnc:html-piechart-set-button-3-slice-urls!)
+(gnc:guard-html-chart gnc:html-piechart-button-1-legend-urls)
+(gnc:guard-html-chart gnc:html-piechart-set-button-1-legend-urls!)
+(gnc:guard-html-chart gnc:html-piechart-button-2-legend-urls)
+(gnc:guard-html-chart gnc:html-piechart-set-button-2-legend-urls!)
+(gnc:guard-html-chart gnc:html-piechart-button-3-legend-urls)
+(gnc:guard-html-chart gnc:html-piechart-set-button-3-legend-urls!)
+(gnc:guard-html-chart gnc:html-piechart-render)
diff --git a/gnucash/report/html-scatter.scm b/gnucash/report/html-scatter.scm
index 8167d19511..620d612100 100644
--- a/gnucash/report/html-scatter.scm
+++ b/gnucash/report/html-scatter.scm
@@ -44,6 +44,17 @@
markercolor
)))
+(define-syntax-rule (gnc:guard-html-chart api)
+ ;; this macro applied to old html-bar/line/scatter/pie apis will
+ ;; guard a report writer from passing html-chart objects. this
+ ;; should be removed in 5.x series.
+ (let ((old-api api))
+ (set! api
+ (lambda args
+ (if (and (pair? args) (gnc:html-chart? (car args)))
+ (gnc:warn "using old-api " (procedure-name api) " on html-chart object. set options via gnc:html-chart-set! or its shortcuts gnc:html-chart-set-title! etc, and set data via gnc:html-chart-add-data-series! see sample-graphs.scm for examples.")
+ (apply old-api args))))))
+
(define gnc:html-scatter?
(record-predicate ))
@@ -56,6 +67,8 @@
(record-constructor ))
(define (gnc:make-html-scatter)
+ (issue-deprecation-warning
+ "(gnc:make-html-scatter) is deprecated. use gnc:make-html-chart instead.")
(gnc:make-html-scatter-internal '(pixels . -1) '(pixels . -1) #f #f #f #f '() #f #f))
(define gnc:html-scatter-width
@@ -121,132 +134,63 @@
;; The Renderer
(define (gnc:html-scatter-render scatter doc)
- (define (ensure-numeric elt)
- (cond ((number? elt)
- (exact->inexact elt))
- ((string? elt)
- (with-input-from-string elt
- (lambda ()
- (let ((n (read)))
- (if (number? n) n 0.0)))))
- (#t
- 0.0)))
-
- (let* ((retval '())
- (push (lambda (l) (set! retval (cons l retval))))
- (title (gnc:html-scatter-title scatter))
- (subtitle (gnc:html-scatter-subtitle scatter))
- (x-label (gnc:html-scatter-x-axis-label scatter))
- (y-label (gnc:html-scatter-y-axis-label scatter))
- (data (gnc:html-scatter-data scatter))
- (marker (gnc:html-scatter-marker scatter))
- (markercolor (string-append "#" (gnc:html-scatter-markercolor scatter)))
- ; Use a unique chart-id for each chart. This prevents chart
- ; clashed on multi-column reports
- (chart-id (string-append "chart-" (number->string (random 999999)))))
- (if (and (list? data)
- (not (null? data)))
- (begin
- (push (gnc:html-js-include "jqplot/jquery.min.js"))
- (push (gnc:html-js-include "jqplot/jquery.jqplot.js"))
- (push (gnc:html-css-include "jqplot/jquery.jqplot.css"))
+ (let* ((chart (gnc:make-html-chart))
+ (mcolor (gnc:html-scatter-markercolor scatter))
+ (data (gnc:html-scatter-data scatter)))
+ (cond
+ ((and (pair? data) (gnc:not-all-zeros data))
+ (gnc:html-chart-set-type! chart 'scatter)
+ (gnc:html-chart-set-width! chart (gnc:html-scatter-width scatter))
+ (gnc:html-chart-set-height! chart (gnc:html-scatter-height scatter))
+ (gnc:html-chart-set-data-labels! chart (make-list (length data) #f))
+ (gnc:html-chart-add-data-series! chart "scatter"
+ (map
+ (lambda (datum)
+ (list
+ (cons 'x (car datum))
+ (cons 'y (cadr datum))))
+ data)
+ (make-list (length data) mcolor)
+ 'showLine #t
+ 'fill #f
+ 'borderColor mcolor)
+ (gnc:html-chart-set-title! chart (list
+ (gnc:html-scatter-title scatter)
+ (gnc:html-scatter-subtitle scatter)))
+ (gnc:html-chart-set! chart
+ '(options elements point pointStyle)
+ (case (gnc:html-scatter-marker scatter)
+ ((filleddiamond diamond) "rectRot")
+ ((filledcircle circle) "circle")
+ ((filledsquare square) "rect")
+ ((cross) "crossRot")
+ ((plus) "cross")
+ ((dash) "line")
+ (else #f)))
+ (gnc:html-chart-set! chart '(options scales xAxes (0) type) "linear")
+ (gnc:html-chart-render chart doc))
- (push "\n")
- (push "%;\">\n"))
- (push ""))
- (begin
- (gnc:warn "Scatter chart has no non-zero data")
- " "))
- retval))
+(gnc:guard-html-chart gnc:html-scatter-width)
+(gnc:guard-html-chart gnc:html-scatter-set-width!)
+(gnc:guard-html-chart gnc:html-scatter-height)
+(gnc:guard-html-chart gnc:html-scatter-set-height!)
+(gnc:guard-html-chart gnc:html-scatter-title)
+(gnc:guard-html-chart gnc:html-scatter-set-title!)
+(gnc:guard-html-chart gnc:html-scatter-subtitle)
+(gnc:guard-html-chart gnc:html-scatter-set-subtitle!)
+(gnc:guard-html-chart gnc:html-scatter-x-axis-label)
+(gnc:guard-html-chart gnc:html-scatter-set-x-axis-label!)
+(gnc:guard-html-chart gnc:html-scatter-y-axis-label)
+(gnc:guard-html-chart gnc:html-scatter-set-y-axis-label!)
+(gnc:guard-html-chart gnc:html-scatter-data)
+(gnc:guard-html-chart gnc:html-scatter-set-data!)
+(gnc:guard-html-chart gnc:html-scatter-marker)
+(gnc:guard-html-chart gnc:html-scatter-set-marker!)
+(gnc:guard-html-chart gnc:html-scatter-markercolor)
+(gnc:guard-html-chart gnc:html-scatter-set-markercolor!)
+(gnc:guard-html-chart gnc:html-scatter-add-datapoint!)
+(gnc:guard-html-chart gnc:html-scatter-render)