-(defun toolbar-insert (toolbar position element
- &key tooltip-text tooltip-private-text
- type icon group callback object)
- (let* ((numpos (case position
- (:first -1)
- (:last 0)
- (t position)))
- (widget
- (cond
- ((or
- (eq type :space)
- (and (not type) (eq element :space)))
- (%toolbar-insert-element
- toolbar :space nil nil
- tooltip-text tooltip-private-text nil numpos))
- ((or
- (eq type :widget)
- (and (not type) (typep element 'widget)))
- (%toolbar-insert-element
- toolbar :widget element nil
- tooltip-text tooltip-private-text nil numpos))
- ((or
- (eq type :stock)
- (and
- (not type)
- (typep element 'string)
- (stock-lookup element)))
- (%toolbar-insert-stock
- toolbar element tooltip-text tooltip-private-text numpos))
- ((typep element 'string)
- (%toolbar-insert-element
- toolbar (or type :button) (when (eq type :radio-button) group)
- element tooltip-text tooltip-private-text
- (etypecase icon
- (null nil)
- (widget icon)
- ((or pathname string vector)
- (make-instance 'image
- :source icon ; :icon-size (toolbar-icon-size toolbar)
- )))
- numpos))
- ((error "Invalid element type: ~A" element)))))
- (when callback
- (signal-connect widget 'clicked callback :object object))
- widget))