;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; CLOG - The Common Lisp Omnificent GUI ;;;;
;;;; (c) 2020-2021 David Botton ;;;;
;;;; License BSD 3 Clause ;;;;
;;;; ;;;;
;;;; clog-element-commont.lisp ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(cl:in-package :clog)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-a
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-a (clog-element)()
(:documentation "CLOG A, anchor, Objects."))
;;;;;;;;;;;;;;
;; create-a ;;
;;;;;;;;;;;;;;
(defgeneric create-a (clog-obj &key link content target auto-place)
(:documentation "Create a new CLOG-A as child of CLOG-OBJ with :LINK and
:CONTENT (default \"\") and :TARGET (\"_self\") and if :AUTO-PLACE (default t)
place-inside-bottom-of CLOG-OBJ.
Target of link, name of a frame or:
_blank = new window
_top = top most frame (full browser window)
_parent = parent frame or window
_self = current frame or window"))
(defmethod create-a ((obj clog-obj)
&key (link "")
(content "")
(target "_self")
(auto-place t))
(create-child obj (format nil "~A"
(escape-string target)
(escape-string link)
(escape-string content))
:clog-type 'clog-a
:auto-place auto-place))
;;;;;;;;;;
;; link ;;
;;;;;;;;;;
(defgeneric link (clog-a)
(:documentation "Get/Setf the HREF link of the anchor."))
(defmethod link ((obj clog-a))
(property obj "href"))
(defgeneric set-link (clog-a value)
(:documentation "Set link VALUE for CLOG-A"))
(defmethod set-link ((obj clog-a) value)
(setf (property obj "href") value))
(defsetf link set-link)
;;;;;;;;;;;;
;; target ;;
;;;;;;;;;;;;
(defgeneric target (clog-a)
(:documentation "Get/Setf the link target of the anchor."))
(defmethod target ((obj clog-a))
(property obj "target"))
(defgeneric set-target (clog-a value)
(:documentation "Set target VALUE for CLOG-A"))
(defmethod set-target ((obj clog-a) value)
(setf (property obj "target") value))
(defsetf target set-target)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-br
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-br (clog-element)()
(:documentation "CLOG BR Objects for line breaks."))
;;;;;;;;;;;;;;;
;; create-br ;;
;;;;;;;;;;;;;;;
(defgeneric create-br (clog-obj &key auto-place)
(:documentation "Create a new CLOG-BR as child of CLOG-OBJ that creates a
line break and if :AUTO-PLACE (default t) place-inside-bottom-of CLOG-OBJ"))
(defmethod create-br ((obj clog-obj) &key (auto-place t))
(create-child obj "
" :clog-type 'clog-br :auto-place auto-place))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-button
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-button (clog-element)()
(:documentation "CLOG Button Objects."))
;;;;;;;;;;;;;;;;;;;
;; create-button ;;
;;;;;;;;;;;;;;;;;;;
(defgeneric create-button (clog-obj &key content auto-place)
(:documentation "Create a new CLOG-Button as child of CLOG-OBJ with :CONTENT
(default \"\") and if :AUTO-PLACE (default t) place-inside-bottom-of
CLOG-OBJ"))
(defmethod create-button ((obj clog-obj) &key (content "") (auto-place t))
(create-child obj (format nil "" (escape-string content))
:clog-type 'clog-button :auto-place auto-place))
;;;;;;;;;;;;;;;
;; disabledp ;;
;;;;;;;;;;;;;;;
(defgeneric disabledp (clog-button)
(:documentation "Get/Setf disabled status of button."))
(defmethod disabledp ((obj clog-button))
(js-true-p (property obj "disabled")))
(defgeneric set-disabledp (clog-button value)
(:documentation "Set editable VALUE for CLOG-BUTTON"))
(defmethod set-disabledp ((obj clog-button) value)
(setf (property obj "disabled") (p-true-js value)))
(defsetf disabledp set-editable)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-div
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-div (clog-element)()
(:documentation "CLOG Div Objects."))
;;;;;;;;;;;;;;;;
;; create-div ;;
;;;;;;;;;;;;;;;;
(defgeneric create-div (clog-obj &key content auto-place)
(:documentation "Create a new CLOG-Div as child of CLOG-OBJ with :CONTENT
(default \"\") and if :AUTO-PLACE (default t) place-inside-bottom-of
CLOG-OBJ"))
(defmethod create-div ((obj clog-obj) &key (content "") (auto-place t))
(create-child obj (format nil "
~A
" (escape-string content))
:clog-type 'clog-div :auto-place auto-place))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-hr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-hr (clog-element)()
(:documentation "CLOG HR Objects for horizontal rules."))
;;;;;;;;;;;;;;;
;; create-hr ;;
;;;;;;;;;;;;;;;
(defgeneric create-hr (clog-obj &key auto-place)
(:documentation "Create a new CLOG-HR as child of CLOG-OBJ that creates a
horizontal rule (line) and if :AUTO-PLACE (default t) place-inside-bottom-of
CLOG-OBJ"))
(defmethod create-hr ((obj clog-obj) &key (auto-place t))
(create-child obj "
" :clog-type 'clog-hr :auto-place auto-place))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-img
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-img (clog-element)()
(:documentation "CLOG Img Objects."))
;;;;;;;;;;;;;;;;
;; create-img ;;
;;;;;;;;;;;;;;;;
(defgeneric create-img (clog-obj &key url-src alt-text auto-place)
(:documentation "Create a new CLOG-Img as child of CLOG-OBJ with :URL-SRC
(default \"\") and :ALT-TEXT (default \"\") if :AUTO-PLACE (default t)
place-inside-bottom-of CLOG-OBJ. Use width and height properties before
placing image to constrain image size."))
(defmethod create-img ((obj clog-obj) &key (url-src "") (alt-text "") (auto-place t))
(create-child obj (format nil "
)"
(escape-string url-src)
(escape-string alt-text))
:clog-type 'clog-img :auto-place auto-place))
;;;;;;;;;;;;;
;; url-src ;;
;;;;;;;;;;;;;
(defgeneric url-src (clog-img)
(:documentation "Get/Setf the url-src of the img."))
(defmethod url-src ((obj clog-img))
(property obj "src"))
(defgeneric set-url-src (clog-img value)
(:documentation "Set url-src VALUE for CLOG-IMG"))
(defmethod set-url-src ((obj clog-img) value)
(setf (property obj "src") value))
(defsetf url-src set-url-src)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-meter
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-meter (clog-element)()
(:documentation "CLOG Meter Objects."))
;;;;;;;;;;;;;;;;;;
;; create-meter ;;
;;;;;;;;;;;;;;;;;;
(defgeneric create-meter (clog-obj &key value high low maximum minimum optimum
auto-place)
(:documentation "Create a new CLOG-Meter as child of CLOG-OBJ with VALUE
(default 0) HIGH (default 100) LOW (default 0) MAXIMUM (default 100) MINIMUM
(default 0) OPTIMUM (default 50) and if :AUTO-PLACE (default t)
place-inside-bottom-of CLOG-OBJ."))
(defmethod create-meter ((obj clog-obj) &key
(value 0)
(high 100)
(low 0)
(maximum 100)
(minimum 0)
(optimum 50)
(auto-place t))
(create-child obj (format nil ""
value high low maximum minimum optimum)
:clog-type 'clog-meter :auto-place auto-place))
;;;;;;;;;;;
;; value ;;
;;;;;;;;;;;
(defgeneric value (clog-meter)
(:documentation "Get/Setf the value of the meter."))
(defmethod value ((obj clog-meter))
(property obj "value"))
(defgeneric set-value (clog-meter value)
(:documentation "Set value VALUE for CLOG-METER"))
(defmethod set-value ((obj clog-meter) value)
(setf (property obj "value") value))
(defsetf value set-value)
;;;;;;;;;;
;; high ;;
;;;;;;;;;;
(defgeneric high (clog-meter)
(:documentation "Get/Setf the high of the meter."))
(defmethod high ((obj clog-meter))
(property obj "high"))
(defgeneric set-high (clog-meter high)
(:documentation "Set high HIGH for CLOG-METER"))
(defmethod set-high ((obj clog-meter) high)
(setf (property obj "high") high))
(defsetf high set-high)
;;;;;;;;;
;; low ;;
;;;;;;;;;
(defgeneric low (clog-meter)
(:documentation "Get/Setf the low of the meter."))
(defmethod low ((obj clog-meter))
(property obj "low"))
(defgeneric set-low (clog-meter low)
(:documentation "Set low LOW for CLOG-METER"))
(defmethod set-low ((obj clog-meter) low)
(setf (property obj "low") low))
(defsetf low set-low)
;;;;;;;;;;;;;
;; maximum ;;
;;;;;;;;;;;;;
(defgeneric maximum (clog-meter)
(:documentation "Get/Setf the maximum of the meter."))
(defmethod maximum ((obj clog-meter))
(property obj "max"))
(defgeneric set-maximum (clog-meter maximum)
(:documentation "Set maximum MAXIMUM for CLOG-METER"))
(defmethod set-maximum ((obj clog-meter) maximum)
(setf (property obj "max") maximum))
(defsetf maximum set-maximum)
;;;;;;;;;;;;;
;; minimum ;;
;;;;;;;;;;;;;
(defgeneric minimum (clog-meter)
(:documentation "Get/Setf the minimum of the meter."))
(defmethod minimum ((obj clog-meter))
(property obj "min"))
(defgeneric set-minimum (clog-meter minimum)
(:documentation "Set minimum MINIMUM for CLOG-METER"))
(defmethod set-minimum ((obj clog-meter) minimum)
(setf (property obj "min") minimum))
(defsetf minimum set-minimum)
;;;;;;;;;;;;;
;; optimum ;;
;;;;;;;;;;;;;
(defgeneric optimum (clog-meter)
(:documentation "Get/Setf the optimum of the meter."))
(defmethod optimum ((obj clog-meter))
(property obj "optimum"))
(defgeneric set-optimum (clog-meter optimum)
(:documentation "Set optimum OPTIMUM for CLOG-METER"))
(defmethod set-optimum ((obj clog-meter) optimum)
(setf (property obj "optimum") optimum))
(defsetf optimum set-optimum)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-progress-bar
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-progress-bar (clog-element)()
(:documentation "CLOG Progress-Bar Objects."))
;;;;;;;;;;;;;;;;;;;;;;;;;
;; create-progress-bar ;;
;;;;;;;;;;;;;;;;;;;;;;;;;
(defgeneric create-progress-bar (clog-obj &key value maximum auto-place)
(:documentation "Create a new CLOG-Progress-Bar as child of CLOG-OBJ with VALUE
(default 0) MAXIMUM (default 100) and if :AUTO-PLACE (default t)
place-inside-bottom-of CLOG-OBJ."))
(defmethod create-progress-bar ((obj clog-obj) &key
(value 0)
(maximum 100)
(auto-place t))
(create-child obj (format nil "" value maximum)
:clog-type 'clog-progress-bar :auto-place auto-place))
;;;;;;;;;;;
;; value ;;
;;;;;;;;;;;
(defgeneric value (clog-progress-bar)
(:documentation "Get/Setf the value of the progress-bar."))
(defmethod value ((obj clog-progress-bar))
(property obj "value"))
(defgeneric set-value (clog-progress-bar value)
(:documentation "Set value VALUE for CLOG-PROGRESS-BAR"))
(defmethod set-value ((obj clog-progress-bar) value)
(setf (property obj "value") value))
(defsetf value set-value)
;;;;;;;;;;;;;
;; maximum ;;
;;;;;;;;;;;;;
(defgeneric maximum (clog-progress-bar)
(:documentation "Get/Setf the maximum of the progress-bar."))
(defmethod maximum ((obj clog-progress-bar))
(property obj "max"))
(defgeneric set-maximum (clog-progress-bar maximum)
(:documentation "Set maximum MAXIMUM for CLOG-PROGRESS-BAR"))
(defmethod set-maximum ((obj clog-progress-bar) maximum)
(setf (property obj "max") maximum))
(defsetf maximum set-maximum)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-p
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-p (clog-element)()
(:documentation "CLOG P Objects."))
;;;;;;;;;;;;;;
;; create-p ;;
;;;;;;;;;;;;;;
(defgeneric create-p (clog-obj &key content auto-place)
(:documentation "Create a new CLOG-P as child of CLOG-OBJ with :CONTENT
(default \"\") and if :AUTO-PLACE (default t) place-inside-bottom-of
CLOG-OBJ"))
(defmethod create-p ((obj clog-obj) &key (content "") (auto-place t))
(create-child obj (format nil "~A
" (escape-string content))
:clog-type 'clog-p :auto-place auto-place))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-span
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defclass clog-span (clog-element)()
(:documentation "CLOG Span Objects."))
;;;;;;;;;;;;;;;;;
;; create-span ;;
;;;;;;;;;;;;;;;;;
(defgeneric create-span (clog-obj &key content auto-place)
(:documentation "Create a new CLOG-Span as child of CLOG-OBJ with :CONTENT
(default \"\") and if :AUTO-PLACE (default t) place-inside-bottom-of
CLOG-OBJ"))
(defmethod create-span ((obj clog-obj) &key (content "") (auto-place t))
(create-child obj (format nil "~A" (escape-string content))
:clog-type 'clog-span :auto-place auto-place))