|
|
|
(in-package #:cl-bible.chapter)
|
|
|
|
|
|
|
|
(defclass chapter ()
|
|
|
|
((%verses :initarg :verses
|
|
|
|
:reader verses)))
|
|
|
|
|
|
|
|
(defgeneric chapter-to-clog (chapter parent &key translation))
|
|
|
|
(defgeneric book/chapter-window (canvas title))
|
|
|
|
(defgeneric translations-drop-down (div display chapter drop-down))
|
|
|
|
(defgeneric display-chapter-or-book (canvas title chapter))
|
|
|
|
(defgeneric load-chapter (canvas book chapter))
|
|
|
|
(defgeneric load-book (canvas book))
|
|
|
|
|
|
|
|
(defmethod chapter-to-clog ((chapter chapter) (parent clog:clog-obj) &key (translation :mng))
|
|
|
|
(labels ((verse-to-clog (verse)
|
|
|
|
;;; (clog:set-on-click
|
|
|
|
(v:verse-to-clog verse parent :translation translation)
|
|
|
|
;;; (lambda (obj)
|
|
|
|
;;; (declare (ignore obj))
|
|
|
|
;;; (v::show-notes verse parent)))
|
|
|
|
))
|
|
|
|
(mapcar #'verse-to-clog (verses chapter))))
|
|
|
|
|
|
|
|
(defmethod book/chapter-window (canvas (title string))
|
|
|
|
(let* ((win (window-content
|
|
|
|
(create-gui-window canvas
|
|
|
|
:title title
|
|
|
|
:height 400
|
|
|
|
:width 500)))
|
|
|
|
(mbar (create-gui-menu-bar win))
|
|
|
|
(drop-down (create-gui-menu-drop-down mbar :content "Translations")))
|
|
|
|
(values (create-div win)
|
|
|
|
drop-down)))
|
|
|
|
|
|
|
|
(defmethod translations-drop-down ((div clog:clog-div) display (chapter chapter) drop-down)
|
|
|
|
(mapcar
|
|
|
|
(lambda (translation)
|
|
|
|
(labels ((callback (obj)
|
|
|
|
(declare (ignore obj))
|
|
|
|
(d:update-bible (third translation))))
|
|
|
|
(create-gui-menu-item drop-down
|
|
|
|
:content (first translation)
|
|
|
|
:on-click #'callback)))
|
|
|
|
d:*translations*))
|
|
|
|
|
|
|
|
(defmethod display-chapter-or-book (canvas (title string) (chapter chapter))
|
|
|
|
(multiple-value-bind (div drop-down)
|
|
|
|
(book/chapter-window canvas title)
|
|
|
|
(let ((display (chapter-to-clog chapter div :translation d:*translation*)))
|
|
|
|
(translations-drop-down div display chapter drop-down))))
|
|
|
|
|
|
|
|
(defmethod load-chapter (canvas (book string) (chapter string))
|
|
|
|
(let* ((bk (s:find-book d:*bible* book))
|
|
|
|
(verses (if (find #\- chapter)
|
|
|
|
(loop :for chap :in (uiop:split-string chapter :separator '(#\-))
|
|
|
|
:append (s:find-chapter bk chap))
|
|
|
|
(s:find-chapter bk chapter))))
|
|
|
|
(display-chapter-or-book canvas
|
|
|
|
(format nil "~A: ~A ~A"
|
|
|
|
d:*translation*
|
|
|
|
book
|
|
|
|
chapter)
|
|
|
|
(make-instance 'chapter :verses verses))))
|
|
|
|
|
|
|
|
(defmethod load-book ((canvas clog:clog-body) (book string))
|
|
|
|
(display-chapter-or-book canvas
|
|
|
|
(format nil "~A: ~A"
|
|
|
|
d:*translation*
|
|
|
|
book)
|
|
|
|
(make-instance 'chapter
|
|
|
|
:verses (s:find-book d:*bible* book))))
|
|
|
|
|
|
|
|
(defmethod load-position ((canvas clog:clog-body) (pos string))
|
|
|
|
(display-chapter-or-book canvas
|
|
|
|
(format nil "~A: ~A"
|
|
|
|
d:*translation*
|
|
|
|
pos)
|
|
|
|
(make-instance 'chapter
|
|
|
|
:verses (s:find-verse d:*bible* (s:parse-position pos)))))
|