comparison lisp/wid-edit.el @ 21428:28157e58238a

(default, widget-default-default-get): Define it. (group, widget-group-default-get): Define it. (menu-choice, widget-choice-default-get): Define it. (widget-default-get): New function. (widget-choice-action): Call it. (widget-editable-list-entry-create): Call it.
author Richard M. Stallman <rms@gnu.org>
date Wed, 08 Apr 1998 07:26:54 +0000
parents f94e2fdb6617
children 79a3c4eba19f
comparison
equal deleted inserted replaced
21427:b5a5ac474741 21428:28157e58238a
468 "Set the current value of WIDGET to VALUE." 468 "Set the current value of WIDGET to VALUE."
469 (widget-apply widget 469 (widget-apply widget
470 :value-set (widget-apply widget 470 :value-set (widget-apply widget
471 :value-to-internal value))) 471 :value-to-internal value)))
472 472
473 (defun widget-default-get (widget)
474 "Extract the defaylt value of WIDGET."
475 (or (widget-get widget :value)
476 (widget-apply widget :default-get)))
477
473 (defun widget-match-inline (widget vals) 478 (defun widget-match-inline (widget vals)
474 ;; In WIDGET, match the start of VALS. 479 ;; In WIDGET, match the start of VALS.
475 (cond ((widget-get widget :inline) 480 (cond ((widget-get widget :inline)
476 (widget-apply widget :match-inline vals)) 481 (widget-apply widget :match-inline vals))
477 ((and vals 482 ((and vals
1332 :button-face-get 'widget-default-button-face-get 1337 :button-face-get 'widget-default-button-face-get
1333 :sample-face-get 'widget-default-sample-face-get 1338 :sample-face-get 'widget-default-sample-face-get
1334 :delete 'widget-default-delete 1339 :delete 'widget-default-delete
1335 :value-set 'widget-default-value-set 1340 :value-set 'widget-default-value-set
1336 :value-inline 'widget-default-value-inline 1341 :value-inline 'widget-default-value-inline
1342 :default-get 'widget-default-default-get
1337 :menu-tag-get 'widget-default-menu-tag-get 1343 :menu-tag-get 'widget-default-menu-tag-get
1338 :validate (lambda (widget) nil) 1344 :validate (lambda (widget) nil)
1339 :active 'widget-default-active 1345 :active 'widget-default-active
1340 :activate 'widget-specify-active 1346 :activate 'widget-specify-active
1341 :deactivate 'widget-default-deactivate 1347 :deactivate 'widget-default-deactivate
1528 ;; Wrap value in a list unless it is inline. 1534 ;; Wrap value in a list unless it is inline.
1529 (if (widget-get widget :inline) 1535 (if (widget-get widget :inline)
1530 (widget-value widget) 1536 (widget-value widget)
1531 (list (widget-value widget)))) 1537 (list (widget-value widget))))
1532 1538
1539 (defun widget-default-default-get (widget)
1540 ;; Get `:value'.
1541 (widget-get widget :value))
1542
1533 (defun widget-default-menu-tag-get (widget) 1543 (defun widget-default-menu-tag-get (widget)
1534 ;; Use tag or value for menus. 1544 ;; Use tag or value for menus.
1535 (or (widget-get widget :menu-tag) 1545 (or (widget-get widget :menu-tag)
1536 (widget-get widget :tag) 1546 (widget-get widget :tag)
1537 (widget-princ-to-string (widget-get widget :value)))) 1547 (widget-princ-to-string (widget-get widget :value))))
1901 :void '(item :format "invalid (%t)\n") 1911 :void '(item :format "invalid (%t)\n")
1902 :value-create 'widget-choice-value-create 1912 :value-create 'widget-choice-value-create
1903 :value-delete 'widget-children-value-delete 1913 :value-delete 'widget-children-value-delete
1904 :value-get 'widget-choice-value-get 1914 :value-get 'widget-choice-value-get
1905 :value-inline 'widget-choice-value-inline 1915 :value-inline 'widget-choice-value-inline
1916 :default-get 'widget-choice-default-get
1906 :mouse-down-action 'widget-choice-mouse-down-action 1917 :mouse-down-action 'widget-choice-mouse-down-action
1907 :action 'widget-choice-action 1918 :action 'widget-choice-action
1908 :error "Make a choice" 1919 :error "Make a choice"
1909 :validate 'widget-choice-validate 1920 :validate 'widget-choice-validate
1910 :match 'widget-choice-match 1921 :match 'widget-choice-match
1944 (widget-value (car (widget-get widget :children)))) 1955 (widget-value (car (widget-get widget :children))))
1945 1956
1946 (defun widget-choice-value-inline (widget) 1957 (defun widget-choice-value-inline (widget)
1947 ;; Get value of the child widget. 1958 ;; Get value of the child widget.
1948 (widget-apply (car (widget-get widget :children)) :value-inline)) 1959 (widget-apply (car (widget-get widget :children)) :value-inline))
1960
1961 (defun widget-choice-default-get (widget)
1962 ;; Get default for the first choice.
1963 (widget-default-get (car (widget-get widget :args))))
1949 1964
1950 (defcustom widget-choice-toggle nil 1965 (defcustom widget-choice-toggle nil
1951 "If non-nil, a binary choice will just toggle between the values. 1966 "If non-nil, a binary choice will just toggle between the values.
1952 Otherwise, the user will explicitly have to choose between the values 1967 Otherwise, the user will explicitly have to choose between the values
1953 when he invoked the menu." 1968 when he invoked the menu."
2021 ;; widget-choice-value-create will respect this choice, 2036 ;; widget-choice-value-create will respect this choice,
2022 ;; as long as the value is the same. 2037 ;; as long as the value is the same.
2023 (when this-explicit 2038 (when this-explicit
2024 (widget-put widget :explicit-choice current) 2039 (widget-put widget :explicit-choice current)
2025 (widget-put widget :explicit-choice-value (widget-get widget :value))) 2040 (widget-put widget :explicit-choice-value (widget-get widget :value)))
2026 (widget-value-set widget 2041 (let ((value (widget-default-get current)))
2027 (widget-apply current :value-to-external 2042 (widget-value-set widget
2028 (widget-get current :value))) 2043 (widget-apply current :value-to-external value)))
2029 (widget-setup) 2044 (widget-setup)
2030 (widget-apply widget :notify widget event))) 2045 (widget-apply widget :notify widget event)))
2031 (run-hook-with-args 'widget-edit-functions widget)) 2046 (run-hook-with-args 'widget-edit-functions widget))
2032 2047
2033 (defun widget-choice-validate (widget) 2048 (defun widget-choice-validate (widget)
2633 (widget-get widget :delete-button-args)))) 2648 (widget-get widget :delete-button-args))))
2634 ((eq escape ?v) 2649 ((eq escape ?v)
2635 (if conv 2650 (if conv
2636 (setq child (widget-create-child-value 2651 (setq child (widget-create-child-value
2637 widget type value)) 2652 widget type value))
2638 (setq child (widget-create-child widget type)))) 2653 (setq child (widget-create-child-value
2654 widget type (widget-default-get type)))))
2639 (t 2655 (t
2640 (error "Unknown escape `%c'" escape))))) 2656 (error "Unknown escape `%c'" escape)))))
2641 (widget-put widget 2657 (widget-put widget
2642 :buttons (cons delete 2658 :buttons (cons delete
2643 (cons insert 2659 (cons insert
2659 :convert-widget 'widget-types-convert-widget 2675 :convert-widget 'widget-types-convert-widget
2660 :format "%v" 2676 :format "%v"
2661 :value-create 'widget-group-value-create 2677 :value-create 'widget-group-value-create
2662 :value-delete 'widget-children-value-delete 2678 :value-delete 'widget-children-value-delete
2663 :value-get 'widget-editable-list-value-get 2679 :value-get 'widget-editable-list-value-get
2680 :default-get 'widget-group-default-get
2664 :validate 'widget-children-validate 2681 :validate 'widget-children-validate
2665 :match 'widget-group-match 2682 :match 'widget-group-match
2666 :match-inline 'widget-group-match-inline) 2683 :match-inline 'widget-group-match-inline)
2667 2684
2668 (defun widget-group-value-create (widget) 2685 (defun widget-group-value-create (widget)
2684 (widget-create-child-value widget arg (car answer))) 2701 (widget-create-child-value widget arg (car answer)))
2685 (t 2702 (t
2686 (widget-create-child-value widget arg (car (car answer))))) 2703 (widget-create-child-value widget arg (car (car answer)))))
2687 children)) 2704 children))
2688 (widget-put widget :children (nreverse children)))) 2705 (widget-put widget :children (nreverse children))))
2706
2707 (defun widget-group-default-get (widget)
2708 ;; Get the default of the components.
2709 (mapcar 'widget-default-get (widget-get widget :args)))
2689 2710
2690 (defun widget-group-match (widget values) 2711 (defun widget-group-match (widget values)
2691 ;; Match if the components match. 2712 ;; Match if the components match.
2692 (and (listp values) 2713 (and (listp values)
2693 (let ((match (widget-group-match-inline widget values))) 2714 (let ((match (widget-group-match-inline widget values)))