From 6b74f80bc36d5564183561e92914a80d7d85856b Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Fri, 14 Jun 2019 21:26:52 +0800 Subject: [PATCH 1/2] [html-pie/scatter/bar/linechart] defer to html-chart renderer --- gnucash/report/html-barchart.scm | 328 +++--------------------------- gnucash/report/html-linechart.scm | 304 +++------------------------ gnucash/report/html-piechart.scm | 165 ++------------- gnucash/report/html-scatter.scm | 168 ++++----------- 4 files changed, 109 insertions(+), 856 deletions(-) diff --git a/gnucash/report/html-barchart.scm b/gnucash/report/html-barchart.scm index 4032e462da..8f0b0d843d 100644 --- a/gnucash/report/html-barchart.scm +++ b/gnucash/report/html-barchart.scm @@ -55,6 +55,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 +274,26 @@ 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")) - - (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)) + (else + (gnc:warn "null-data, not rendering barchart") + "")))) diff --git a/gnucash/report/html-linechart.scm b/gnucash/report/html-linechart.scm index 44ebd40b1b..93a0d27472 100644 --- a/gnucash/report/html-linechart.scm +++ b/gnucash/report/html-linechart.scm @@ -62,6 +62,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 +329,32 @@ 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)) diff --git a/gnucash/report/html-piechart.scm b/gnucash/report/html-piechart.scm index f30ac8e519..b234e5ee01 100644 --- a/gnucash/report/html-piechart.scm +++ b/gnucash/report/html-piechart.scm @@ -51,6 +51,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 +142,22 @@ (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)) + (else + (gnc:warn "null-data, not rendering piechart") + "")))) diff --git a/gnucash/report/html-scatter.scm b/gnucash/report/html-scatter.scm index 8167d19511..4eec6a108b 100644 --- a/gnucash/report/html-scatter.scm +++ b/gnucash/report/html-scatter.scm @@ -56,6 +56,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 +123,42 @@ ;; 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)) + (else + (gnc:warn "null-data, not rendering scatter") + "")))) From 10a0e5c166ce3705b5b3f3d374a6cca1d1fe2202 Mon Sep 17 00:00:00 2001 From: Christopher Lam Date: Fri, 21 Jun 2019 21:22:40 +0800 Subject: [PATCH 2/2] [html-bar/line/pie/scatter] guard all old api calls This commit guards old jqplot API calls being used with html-chart objects. Mainly useful for developers who are transitioning from old API to new API, providing error message instead of report crash. --- gnucash/report/html-barchart.scm | 55 +++++++++++++++++++++++++++ gnucash/report/html-linechart.scm | 63 +++++++++++++++++++++++++++++++ gnucash/report/html-piechart.scm | 38 +++++++++++++++++++ gnucash/report/html-scatter.scm | 32 ++++++++++++++++ 4 files changed, 188 insertions(+) diff --git a/gnucash/report/html-barchart.scm b/gnucash/report/html-barchart.scm index 8f0b0d843d..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 )) @@ -297,3 +308,47 @@ (else (gnc:warn "null-data, not rendering barchart") "")))) + +(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 93a0d27472..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 )) @@ -358,3 +369,55 @@ (gnc:warn "null-data, not rendering linechart") "")))) + +(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 b234e5ee01..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 @@ -161,3 +171,31 @@ (else (gnc:warn "null-data, not rendering piechart") "")))) + +(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 4eec6a108b..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 )) @@ -162,3 +173,24 @@ (else (gnc:warn "null-data, not rendering scatter") "")))) + +(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)