comparison lisp/wid-edit.el @ 280:7df0dd720c89 r21-0b38

Import from CVS: tag r21-0b38
author cvs
date Mon, 13 Aug 2007 10:32:22 +0200
parents 90d73dddcdc4
children c9fe270a4101
comparison
equal deleted inserted replaced
279:c20b2fb5bb0a 280:7df0dd720c89
570 "Set the current value of WIDGET to VALUE." 570 "Set the current value of WIDGET to VALUE."
571 (widget-apply widget 571 (widget-apply widget
572 :value-set (widget-apply widget 572 :value-set (widget-apply widget
573 :value-to-internal value))) 573 :value-to-internal value)))
574 574
575 (defun widget-default-get (widget)
576 "Extract the defaylt value of WIDGET."
577 (or (widget-get widget :value)
578 (widget-apply widget :default-get)))
579
575 (defun widget-match-inline (widget vals) 580 (defun widget-match-inline (widget vals)
576 ;; In WIDGET, match the start of VALS. 581 ;; In WIDGET, match the start of VALS.
577 (cond ((widget-get widget :inline) 582 (cond ((widget-get widget :inline)
578 (widget-apply widget :match-inline vals)) 583 (widget-apply widget :match-inline vals))
579 ((and vals 584 ((and vals
1579 :sample-face-get 'widget-default-sample-face-get 1584 :sample-face-get 'widget-default-sample-face-get
1580 :button-keymap widget-button-keymap 1585 :button-keymap widget-button-keymap
1581 :delete 'widget-default-delete 1586 :delete 'widget-default-delete
1582 :value-set 'widget-default-value-set 1587 :value-set 'widget-default-value-set
1583 :value-inline 'widget-default-value-inline 1588 :value-inline 'widget-default-value-inline
1589 :default-get 'widget-default-default-get
1584 :menu-tag-get 'widget-default-menu-tag-get 1590 :menu-tag-get 'widget-default-menu-tag-get
1585 :validate (lambda (widget) nil) 1591 :validate (lambda (widget) nil)
1586 :active 'widget-default-active 1592 :active 'widget-default-active
1587 :activate 'widget-specify-active 1593 :activate 'widget-specify-active
1588 :deactivate 'widget-default-deactivate 1594 :deactivate 'widget-default-deactivate
1787 ;; Wrap value in a list unless it is inline. 1793 ;; Wrap value in a list unless it is inline.
1788 (if (widget-get widget :inline) 1794 (if (widget-get widget :inline)
1789 (widget-value widget) 1795 (widget-value widget)
1790 (list (widget-value widget)))) 1796 (list (widget-value widget))))
1791 1797
1798 (defun widget-default-default-get (widget)
1799 ;; Get `:value'.
1800 (widget-get widget :value))
1801
1792 (defun widget-default-menu-tag-get (widget) 1802 (defun widget-default-menu-tag-get (widget)
1793 ;; Use tag or value for menus. 1803 ;; Use tag or value for menus.
1794 (or (widget-get widget :menu-tag) 1804 (or (widget-get widget :menu-tag)
1795 (widget-get widget :tag) 1805 (widget-get widget :tag)
1796 (widget-princ-to-string (widget-get widget :value)))) 1806 (widget-princ-to-string (widget-get widget :value))))
2198 :void '(item :format "invalid (%t)\n") 2208 :void '(item :format "invalid (%t)\n")
2199 :value-create 'widget-choice-value-create 2209 :value-create 'widget-choice-value-create
2200 :value-delete 'widget-children-value-delete 2210 :value-delete 'widget-children-value-delete
2201 :value-get 'widget-choice-value-get 2211 :value-get 'widget-choice-value-get
2202 :value-inline 'widget-choice-value-inline 2212 :value-inline 'widget-choice-value-inline
2213 :default-get 'widget-choice-default-get
2203 :mouse-down-action 'widget-choice-mouse-down-action 2214 :mouse-down-action 'widget-choice-mouse-down-action
2204 :action 'widget-choice-action 2215 :action 'widget-choice-action
2205 :error "Make a choice" 2216 :error "Make a choice"
2206 :validate 'widget-choice-validate 2217 :validate 'widget-choice-validate
2207 :match 'widget-choice-match 2218 :match 'widget-choice-match
2238 (widget-value (car (widget-get widget :children)))) 2249 (widget-value (car (widget-get widget :children))))
2239 2250
2240 (defun widget-choice-value-inline (widget) 2251 (defun widget-choice-value-inline (widget)
2241 ;; Get value of the child widget. 2252 ;; Get value of the child widget.
2242 (widget-apply (car (widget-get widget :children)) :value-inline)) 2253 (widget-apply (car (widget-get widget :children)) :value-inline))
2254
2255 (defun widget-choice-default-get (widget)
2256 ;; Get default for the first choice.
2257 (widget-default-get (car (widget-get widget :args))))
2243 2258
2244 (defcustom widget-choice-toggle nil 2259 (defcustom widget-choice-toggle nil
2245 "If non-nil, a binary choice will just toggle between the values. 2260 "If non-nil, a binary choice will just toggle between the values.
2246 Otherwise, the user will explicitly have to choose between the values 2261 Otherwise, the user will explicitly have to choose between the values
2247 when he invoked the menu." 2262 when he invoked the menu."
2306 (let ((choice 2321 (let ((choice
2307 (widget-choose tag (reverse choices) event))) 2322 (widget-choose tag (reverse choices) event)))
2308 (widget-put widget :explicit-choice choice) 2323 (widget-put widget :explicit-choice choice)
2309 choice)))) 2324 choice))))
2310 (when current 2325 (when current
2311 (widget-value-set widget 2326 (let ((value (widget-default-get current)))
2312 (widget-apply current :value-to-external 2327 (widget-value-set widget
2313 (widget-get current :value))) 2328 (widget-apply current :value-to-external value)))
2314 (widget-setup) 2329 (widget-setup)
2315 (widget-apply widget :notify widget event))) 2330 (widget-apply widget :notify widget event)))
2316 (run-hook-with-args 'widget-edit-functions widget)) 2331 (run-hook-with-args 'widget-edit-functions widget))
2317 2332
2318 (defun widget-choice-validate (widget) 2333 (defun widget-choice-validate (widget)
2918 (widget-get widget :delete-button-args)))) 2933 (widget-get widget :delete-button-args))))
2919 ((eq escape ?v) 2934 ((eq escape ?v)
2920 (if conv 2935 (if conv
2921 (setq child (widget-create-child-value 2936 (setq child (widget-create-child-value
2922 widget type value)) 2937 widget type value))
2923 (setq child (widget-create-child widget type)))) 2938 (setq child (widget-create-child-value
2939 widget type (widget-default-get type)))))
2924 (t 2940 (t
2925 (signal 'error (list "Unknown escape" escape)))))) 2941 (signal 'error (list "Unknown escape" escape))))))
2926 (widget-put widget 2942 (widget-put widget
2927 :buttons (cons delete 2943 :buttons (cons delete
2928 (cons insert 2944 (cons insert
2944 :convert-widget 'widget-types-convert-widget 2960 :convert-widget 'widget-types-convert-widget
2945 :format "%v" 2961 :format "%v"
2946 :value-create 'widget-group-value-create 2962 :value-create 'widget-group-value-create
2947 :value-delete 'widget-children-value-delete 2963 :value-delete 'widget-children-value-delete
2948 :value-get 'widget-editable-list-value-get 2964 :value-get 'widget-editable-list-value-get
2965 :default-get 'widget-group-default-get
2949 :validate 'widget-children-validate 2966 :validate 'widget-children-validate
2950 :match 'widget-group-match 2967 :match 'widget-group-match
2951 :match-inline 'widget-group-match-inline) 2968 :match-inline 'widget-group-match-inline)
2952 2969
2953 (defun widget-group-value-create (widget) 2970 (defun widget-group-value-create (widget)
2969 (widget-create-child-value widget arg (car answer))) 2986 (widget-create-child-value widget arg (car answer)))
2970 (t 2987 (t
2971 (widget-create-child-value widget arg (car (car answer))))) 2988 (widget-create-child-value widget arg (car (car answer)))))
2972 children)) 2989 children))
2973 (widget-put widget :children (nreverse children)))) 2990 (widget-put widget :children (nreverse children))))
2991
2992 (defun widget-group-default-get (widget)
2993 ;; Get the default of the components.
2994 (mapcar 'widget-default-get (widget-get widget :args)))
2974 2995
2975 (defun widget-group-match (widget values) 2996 (defun widget-group-match (widget values)
2976 ;; Match if the components match. 2997 ;; Match if the components match.
2977 (and (listp values) 2998 (and (listp values)
2978 (let ((match (widget-group-match-inline widget values))) 2999 (let ((match (widget-group-match-inline widget values)))