diff options
Diffstat (limited to 'undone/main.scm')
-rw-r--r-- | undone/main.scm | 37 |
1 files changed, 9 insertions, 28 deletions
diff --git a/undone/main.scm b/undone/main.scm index b9ae986..117e2c6 100644 --- a/undone/main.scm +++ b/undone/main.scm @@ -2,6 +2,7 @@ #:use-module (ice-9 format) #:use-module (ice-9 rdelim) #:use-module (oop goops) + #:use-module (undone view) #:export (main)) (define-syntax get-field @@ -161,31 +162,6 @@ (string->number (car args))))) todo-list))) -(define-class <view> ()) - -(define-generic print-view) -(define-generic sort-view) -(define-generic filter-view) - -(define-method (sort-view (v <view>) l) - l) - -(define-method (filter-view (v <view>)) - (lambda (elm) - (and (assq 'id elm) (assq 'content elm)))) - -(define-method (print-view (v <view>)) - (for-each - (lambda (item) - (let ((id (let ((field (assq 'id item))) - (and field (cdr field)))) - (content - (let ((field (assq 'content item))) - (and field (cdr field))))) - (if #t (format #t "~2d ~a~%" id content)))) - (filter (filter-view v) - (sort-view v todo-list)))) - (define-class <todo-view> (<view>)) (define-method (sort-view (v <todo-view>) l) @@ -193,8 +169,13 @@ (define-method (filter-view (v <todo-view>)) (lambda (elm) - (let ((id (assq 'id elm))) - (and id (> (cdr id) 4))))) + (let ((state (assq 'state elm))) + (and state (not (string= (cdr state) "done")))))) + +(define-method (print-item (v <todo-view>) item) + (format #t "~a ~a~%" + (cdr (assq 'state item)) + (cdr (assq 'content item)))) (define-view default "Default todo-list view, show only the title." @@ -241,4 +222,4 @@ (car view) (procedure-documentation (cdr view)))) view-list)))) - (print-view (make <todo-view>))) + (print-view (make <todo-view> #:todo-list todo-list))) |