|
@@ -20,17 +20,19 @@
|
|
|
collect (cons (aget "Name" rate)
|
|
collect (cons (aget "Name" rate)
|
|
|
(read-from-string (aget "Rate" rate))))))
|
|
(read-from-string (aget "Rate" rate))))))
|
|
|
|
|
|
|
|
|
|
+(defun get-serie (series name)
|
|
|
|
|
+ (loop for (time . rates) in series
|
|
|
|
|
+ when (aget name rates)
|
|
|
|
|
+ collect (list time (aget name rates))))
|
|
|
|
|
+
|
|
|
(defun make-chart (series &key (usd t) (eur t) (gbp t))
|
|
(defun make-chart (series &key (usd t) (eur t) (gbp t))
|
|
|
(let ((flat (remove-if #'null (if (alexandria:circular-list-p series)
|
|
(let ((flat (remove-if #'null (if (alexandria:circular-list-p series)
|
|
|
(flat-circular series)
|
|
(flat-circular series)
|
|
|
series))))
|
|
series))))
|
|
|
(adw-charting:with-line-chart (1200 900)
|
|
(adw-charting:with-line-chart (1200 900)
|
|
|
- (when usd
|
|
|
|
|
- (adw-charting:add-series "USD/RUB" (loop for p in flat collect (list (car p) (cdadr p)))))
|
|
|
|
|
- (when eur
|
|
|
|
|
- (adw-charting:add-series "EUR/RUB" (loop for p in flat collect (list (car p) (cdaddr p)))))
|
|
|
|
|
- (when gbp
|
|
|
|
|
- (adw-charting:add-series "GBP/RUB" (loop for p in flat collect (list (car p) (cdr (cadddr p))))))
|
|
|
|
|
|
|
+ (when usd (adw-charting:add-series "USD/RUB" (get-serie flat "USD/RUB")))
|
|
|
|
|
+ (when eur (adw-charting:add-series "EUR/RUB" (get-serie flat "EUR/RUB")))
|
|
|
|
|
+ (when gbp (adw-charting:add-series "GBP/RUB" (get-serie flat "GBP/RUB")))
|
|
|
(adw-charting:set-axis
|
|
(adw-charting:set-axis
|
|
|
:x "Time" :draw-gridlines-p t
|
|
:x "Time" :draw-gridlines-p t
|
|
|
:label-formatter #'(lambda (v) (local-time:format-timestring nil (local-time:unix-to-timestamp v)
|
|
:label-formatter #'(lambda (v) (local-time:format-timestring nil (local-time:unix-to-timestamp v)
|