Dialogue

More examples

Summary


Editing local values (using :plist)

(let* ((name "Noé")
(email "n@algo.be")
(salary 0.0)
(year 2000) ;; property list
(data (list 'name name 'email email 'salary salary 'year year))
(compound (loop for pname in data by #'cddr
collect
`(;; must be a property name in plist, see :accessor documentation however :name ,pname ;; just to allow Dialogue to define input validation functions
:value-type ,(case pname
(salary 'float)
(year 'fixnum)
(t 'string))
:prompt ,(string-capitalize pname)))))
(dialogue compound
:main t
:data data
:edit :plist ; !
:title "Plist")
(setf name (getf data 'name)
email (getf data 'email)
salary (getf data 'salary)
year (getf data 'year))
(values name email salary year))

Sashforms

(dialogue
`(:grid
(((:sashform
:name :sash1
:style :vertical
:layout-data (:height 200 :width 400
:horizontalalignment ,*swt.fill*
:grabexcesshorizontalspace t
:verticalalignment ,*swt.fill*
:grabexcessverticalspace t)
((:type :text :style (:multi :border)
:initial-value "1st text control in Sash#1")
(:type :text :style (:multi :border)
:initial-value "2nd text control in Sash#1")
(:sashform
:name :sash2
:style :horizontal
((:type :text :style (:multi :border :wrap)
:initial-value "1st text control in Sash#2")
(:type :text :style (:multi :border) :initial-value "2nd in Sash#2")
(:type :text :style (:multi :border) :initial-value "3rd in Sash#2")))
)))))
:creation-init-function
(lambda (shell) shell
;; Setting the weights of :sash1
(set-sash-weights (find-control :sash1 :test-di) (list 1 1 2)))
:exit-controls nil :name :test-di
:title "2 nested sashforms")

 

Cells editor

Viewing one array of numbers

;;; the array to edit
(setf *alpha-array
      (let* ((rows-number 5)
             (columns-number 4)
             (array (make-array (list rows-number columns-number))))
        (loop for i from 0 below rows-number do
              (loop for j from 0 below columns-number do
                    (setf (aref array i j)
                          (if (= i j)
                              :empty-cell
                            (+ (* i columns-number) j)))))
        array))


(cells-editor
 *alpha-array
 :row-headers '("A" "B" "CCC")
 ;; to format each cell value
 :set-cell-fn
 (lambda (table array ri ci table-item) ; RowIndice ColumnIndice
   (declare (ignore table))
   (CED-settext table-item ci (format nil "~a" (aref array ri ci))))
 :on-cell-mouse-down
 ;; cell-indices: (RowIndice ColumnIndice)
 (lambda (event table array cell-indices table-item)
   (declare (ignore event table))
   (let ((ri (first cell-indices))
         (ci (second cell-indices)))
     (ok-di
      (format nil
              "row indice: ~d~%column indice: ~d~%array value: ~a~%SWT table value: ~a"
              ri ci
              (aref array ri ci)
              (CED-gettext table-item ci))))))

  

Editing an array of numbers

(let ((cells-ed-name :cells-editor-test))
  (cells-editor
   *alpha-array
   :name cells-ed-name
   :on-cell-mouse-down
   (lambda (event table array cell-indices table-item)
     (let ((ci (second cell-indices))
           (new-content "Visited"))
       ;; CED-settext-and-pack: set text of cell CI in table-item if New-Content
       ;; is different from the current content
       (unless (CED-settext-and-pack new-content cells-ed-name ci table-item)
         (beep))))))

3 views, 1 array of CLOS instances (3 slots to view)

Viewing alpha values:

Viewing omega values:


(defclass test-data ()
  ((alpha-value :accessor alpha-value :initarg :alpha-value)
   (beta-value :accessor beta-value :initarg :beta-value)
   (omega-value :accessor omega-value :initarg :omega-value)
   (what-to-view :accessor what-to-view :initform "Alpha values"
                 :allocation :class)))

(let ((cells-editor-name :cells-editor-test))
  (cells-editor
   *array
   :name cells-editor-name
   ;; set alignement in the 3 first columns
   :alignement '(:right :left :center)
   :multi-view-combo-range `("Alpha values" "Beta values" "Omega values")
   :multi-view-combo-selection-fn
   (lambda (event control-data) event
     (setf (class-slot-value 'test-data 'what-to-view)
           (get-control-value control-data)))
   :set-cell-fn
   (lambda (table array ri ci table-item)
     (let* ((instance (aref array ri ci))
            (what-to-view (class-slot-value 'test-data 'what-to-view))
            (reader (cond ((string= what-to-view "Alpha values")
                           #'alpha-value)
                          ((string= what-to-view "Beta values")
                           #'beta-value)
                          (t #'omega-value))))
       (CED-settext table-item ci 
                    (format nil "~a" (funcall reader instance)))))))