- (lambda (value)
- (format nil "~,3F" value)))))
- (add-text-and-label *panel* label text)))
-
-(defun twiddle-dep-radio (button dep name)
- (send button :add-action-listener
- (implementation :java.awt.event.*action-listener
- (action-performed (ev)
- (declare (ignore ev))
- (setf (dep-value dep) name)))))
-
-(defun make-radio-dep (dep &rest settings)
- (let ((button-group (make :javax.swing.*button-group))
- (panel (make :javax.swing.*j-panel)))
- (send *panel* :add panel
- (make-grid-bag-constraints :fill :horizontal
- :anchor :north
- :insets 0
- :weight-x 1.0
- :grid-width :remainder))
- (loop for (name label) on settings by #'cddr
- for selectp = (progn
- (unless (dep-goodp dep)
- (setf (dep-value dep) name))
- (if (eq (dep-value dep) name)
- java-true
- java-false))
- for button = (make :javax.swing.*j-radio-button label selectp)
- do (twiddle-dep-radio button dep name)
- do (send button-group :add button)
- do (send panel :add button
- (make-grid-bag-constraints :fill :horizontal
- :insets 2
- :weight-x 1.0)))))
-
-(defun make-group (label)
- (let ((group (make-group-box label)))
- (send group :set-layout (make :java.awt.*grid-bag-layout))
- (send *panel* :add group
- (make-grid-bag-constraints :fill :horizontal
- :anchor :page-start
- :insets 2
- :weight-x 1.0
- :grid-width :remainder))
- group))
+ (etypecase convert
+ (string
+ (lambda (value)
+ (format nil convert value)))
+ ((or symbol function)
+ convert)))))
+ (pack-labelled-widget *panel* label text)))
+
+(defun make-radio-dep (dep plist)
+ (let ((group (make-radio-group
+ (lambda (value) (setf (dep-value dep) value))
+ plist
+ :default (if (dep-goodp dep)
+ (dep-value dep)
+ (setf (dep-value dep) (cadr plist))))))
+ (pack-single-widget *panel* group)))
+