annotate lisp/emacs-lisp/eieio-custom.el @ 104431:a64f3429f0ac

emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el, emacs-lisp/eieio-custom.el, emacs-lisp/eieio-datadebug.el, emacs-lisp/eieio-doc.el, emacs-lisp/eieio-opt.el, emacs-lisp/eieio-speedbar.el, emacs-lisp/eieio.el: Move from eieio/directory.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 30 Aug 2009 02:02:15 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104431
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1 ;;; eieio-custom.el -- eieio object customization
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3 ;;; Copyright (C) 1999, 2000, 2001, 2005, 2007, 2008, 2009
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
4 ;;; Free Software Foundation, Inc.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Author: Eric M. Ludlam <zappo@gnu.org>
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7 ;; Version: 0.2
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8 ;; Keywords: OO, lisp
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
15 ;; (at your option) any later version.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25 ;;; Commentary:
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26 ;;
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27 ;; This contains support customization of eieio objects. Enabling
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28 ;; your object to be customizable requires use of the slot attirbute
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29 ;; `:custom'.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 (require 'eieio)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32 (require 'widget)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33 (require 'wid-edit)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34 (require 'custom)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
35
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
36 ;;; Compatibility
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37 ;;
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38 (eval-and-compile
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39 (if (featurep 'xemacs)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 (defalias 'eieio-overlay-lists (lambda () (list (extent-list))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 (defalias 'eieio-overlay-lists 'overlay-lists)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
42 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44 ;;; Code:
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45 (defclass eieio-widget-test-class nil
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 ((a-string :initarg :a-string
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47 :initform "The moose is loose"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48 :custom string
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49 :label "Amorphous String"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
50 :group (default foo)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
51 :documentation "A string for testing custom.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
52 This is the next line of documentation.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
53 (listostuff :initarg :listostuff
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
54 :initform ("1" "2" "3")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55 :type list
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
56 :custom (repeat (string :tag "Stuff"))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57 :label "List of Strings"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58 :group foo
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 :documentation "A list of stuff.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 (uninitialized :initarg :uninitialized
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 :type string
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
62 :custom string
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63 :documentation "This slot is not initialized.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 Used to make sure that custom doesn't barf when it encounters one
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65 of these.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 (a-number :initarg :a-number
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67 :initform 2
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
68 :custom integer
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69 :documentation "A number of thingies."))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 "A class for testing the widget on.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72 (defcustom eieio-widget-test (eieio-widget-test-class "Foo")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
73 "Test variable for editing an object."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74 :type 'object
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75 :group 'eieio)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 (defface eieio-custom-slot-tag-face '((((class color)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78 (background dark))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
79 (:foreground "light blue"))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80 (((class color)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 (background light))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
82 (:foreground "blue"))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83 (t (:italic t)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 "Face used for unpushable variable tags."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 :group 'custom-faces)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
86
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87 (defvar eieio-wo nil
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 "Buffer local variable in object customize buffers for the current widget.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
89 (defvar eieio-co nil
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90 "Buffer local variable in object customize buffers for the current obj.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91 (defvar eieio-cog nil
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
92 "Buffer local variable in object customize buffers for the current group.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
93
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
94 (defvar eieio-custom-ignore-eieio-co nil
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
95 "When true, all customizable slots of the current object are updated.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96 Updates occur regardless of the current customization group.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
98 (define-widget 'object-slot 'group
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99 "Abstractly modify a single slot in an object."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
100 :tag "Slot"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
101 :format "%t %v%h\n"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
102 :convert-widget 'widget-types-convert-widget
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103 :value-create 'eieio-slot-value-create
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104 :value-get 'eieio-slot-value-get
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105 :value-delete 'widget-children-value-delete
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 :validate 'widget-children-validate
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
107 :match 'eieio-object-match ;; same
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
108 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
109
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
110 (defun eieio-slot-value-create (widget)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 "Create the value of WIDGET."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 (let ((chil nil)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
114 ; (setq chil (cons (widget-create-child-and-convert
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115 ; widget 'visibility
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
116 ; :help-echo "Hide the value of this option."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
117 ; :action 'eieio-custom-toggle-parent
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
118 ; t)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 ; chil))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120 (setq chil (cons
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121 (widget-create-child-and-convert
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
122 widget (widget-get widget :childtype)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123 :tag ""
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 :value (widget-get widget :value))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125 chil))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 (widget-put widget :children chil)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128 (defun eieio-slot-value-get (widget)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129 "Get the value of WIDGET."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130 (widget-value (car (widget-get widget :children))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 (defun eieio-custom-toggle-hide (widget)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133 "Toggle visibility of WIDGET."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
134 (let ((vc (car (widget-get widget :children))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 (cond ((eq (widget-get vc :eieio-custom-state) 'hidden)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136 (widget-put vc :eieio-custom-state 'visible)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137 (widget-put vc :value-face (widget-get vc :orig-face)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 (t
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
139 (widget-put vc :eieio-custom-state 'hidden)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
140 (widget-put vc :orig-face (widget-get vc :value-face))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
141 (widget-put vc :value-face 'invisible)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142 ))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 (widget-value-set vc (widget-value vc))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145 (defun eieio-custom-toggle-parent (widget &rest ignore)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146 "Toggle visibility of parent of WIDGET.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147 Optional argument IGNORE is an extraneous parameter."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 (eieio-custom-toggle-hide (widget-get widget :parent)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
150 (define-widget 'object-edit 'group
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151 "Abstractly modify a CLOS object."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152 :tag "Object"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 :format "%v"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154 :convert-widget 'widget-types-convert-widget
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 :value-create 'eieio-object-value-create
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 :value-get 'eieio-object-value-get
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
157 :value-delete 'widget-children-value-delete
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158 :validate 'widget-children-validate
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 :match 'eieio-object-match
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 :clone-object-children nil
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
162
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163 (defun eieio-object-match (widget value)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164 "Match info for WIDGET against VALUE."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165 ;; Write me
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166 t)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 (defun eieio-filter-slot-type (widget slottype)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 "Filter WIDGETs SLOTTYPE."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
170 (if (widget-get widget :clone-object-children)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
171 slottype
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 (cond ((eq slottype 'object)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173 'object-edit)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 ((and (listp slottype)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 (eq (car slottype) 'object))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 (cons 'object-edit (cdr slottype)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177 ((equal slottype '(repeat object))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178 '(repeat object-edit))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179 ((and (listp slottype)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 (equal (car slottype) 'repeat)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 (listp (car (cdr slottype)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182 (equal (car (car (cdr slottype))) 'object))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
183 (list 'repeat
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
184 (cons 'object-edit
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 (cdr (car (cdr slottype))))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186 (t slottype))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 (defun eieio-object-value-create (widget)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189 "Create the value of WIDGET."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 (if (not (widget-get widget :value))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 (widget-put widget
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 :value (cond ((widget-get widget :objecttype)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193 (funcall (class-constructor
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 (widget-get widget :objecttype))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195 "Custom-new"))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196 ((widget-get widget :objectcreatefcn)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 (funcall (widget-get widget :objectcreatefcn)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 (t (error "No create method specified")))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 (let* ((chil nil)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 (obj (widget-get widget :value))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
201 (master-group (widget-get widget :eieio-group))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
202 (cv (class-v (object-class-fast obj)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 (slots (aref cv class-public-a))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204 (flabel (aref cv class-public-custom-label))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205 (fgroup (aref cv class-public-custom-group))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206 (fdoc (aref cv class-public-doc))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 (fcust (aref cv class-public-custom)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 ;; First line describes the object, but may not editable.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 (if (widget-get widget :eieio-show-name)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 (setq chil (cons (widget-create-child-and-convert
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211 widget 'string :tag "Object "
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212 :sample-face 'bold
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 (object-name-string obj))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 chil)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215 ;; Display information about the group being shown
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216 (when master-group
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217 (let ((groups (class-option (object-class-fast obj) :custom-groups)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 (widget-insert "Groups:")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 (while groups
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220 (widget-insert " ")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221 (if (eq (car groups) master-group)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222 (widget-insert "*" (capitalize (symbol-name master-group)) "*")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
223 (widget-create 'push-button
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224 :thing (cons obj (car groups))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225 :notify (lambda (widget &rest stuff)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
226 (eieio-customize-object
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
227 (car (widget-get widget :thing))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
228 (cdr (widget-get widget :thing))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
229 (capitalize (symbol-name (car groups)))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
230 (setq groups (cdr groups)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
231 (widget-insert "\n\n")))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
232 ;; Loop over all the slots, creating child widgets.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
233 (while slots
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
234 ;; Output this slot if it has a customize flag associated with it.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
235 (when (and (car fcust)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
236 (or (not master-group) (member master-group (car fgroup)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
237 (slot-boundp obj (car slots)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
238 ;; In this case, this slot has a custom type. Create it's
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
239 ;; children widgets.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
240 (let ((type (eieio-filter-slot-type widget (car fcust)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
241 (stuff nil))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
242 ;; This next bit is an evil hack to get some EDE functions
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
243 ;; working the way I like.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
244 (if (and (listp type)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
245 (setq stuff (member :slotofchoices type)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
246 (let ((choices (eieio-oref obj (car (cdr stuff))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
247 (newtype nil))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
248 (while (not (eq (car type) :slotofchoices))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
249 (setq newtype (cons (car type) newtype)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
250 type (cdr type)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
251 (while choices
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
252 (setq newtype (cons (list 'const (car choices))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
253 newtype)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
254 choices (cdr choices)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
255 (setq type (nreverse newtype))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
256 (setq chil (cons (widget-create-child-and-convert
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
257 widget 'object-slot
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
258 :childtype type
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
259 :sample-face 'eieio-custom-slot-tag-face
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
260 :tag
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
261 (concat
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
262 (make-string
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
263 (or (widget-get widget :indent) 0)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
264 ? )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
265 (if (car flabel)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
266 (car flabel)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
267 (let ((s (symbol-name
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
268 (or
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
269 (class-slot-initarg
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
270 (object-class-fast obj)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
271 (car slots))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
272 (car slots)))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
273 (capitalize
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
274 (if (string-match "^:" s)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
275 (substring s (match-end 0))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
276 s)))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
277 :value (slot-value obj (car slots))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
278 :doc (if (car fdoc) (car fdoc)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
279 "Slot not Documented.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
280 :eieio-custom-visibility 'visible
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
281 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
282 chil))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
283 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
284 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
285 (setq slots (cdr slots)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
286 fdoc (cdr fdoc)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
287 fcust (cdr fcust)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
288 flabel (cdr flabel)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
289 fgroup (cdr fgroup)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
290 (widget-put widget :children (nreverse chil))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
291 ))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
292
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
293 (defun eieio-object-value-get (widget)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
294 "Get the value of WIDGET."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
295 (let* ((obj (widget-get widget :value))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
296 (master-group eieio-cog)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
297 (cv (class-v (object-class-fast obj)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
298 (fgroup (aref cv class-public-custom-group))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
299 (wids (widget-get widget :children))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
300 (name (if (widget-get widget :eieio-show-name)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
301 (car (widget-apply (car wids) :value-inline))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
302 nil))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
303 (chil (if (widget-get widget :eieio-show-name)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
304 (nthcdr 1 wids) wids))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
305 (cv (class-v (object-class-fast obj)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
306 (slots (aref cv class-public-a))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
307 (fcust (aref cv class-public-custom)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
308 ;; If there are any prefix widgets, clear them.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
309 ;; -- None yet
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
310 ;; Create a batch of initargs for each slot.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
311 (while (and slots chil)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
312 (if (and (car fcust)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
313 (or eieio-custom-ignore-eieio-co
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
314 (not master-group) (member master-group (car fgroup)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
315 (slot-boundp obj (car slots)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
316 (progn
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
317 ;; Only customized slots have widgets
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
318 (let ((eieio-custom-ignore-eieio-co t))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
319 (eieio-oset obj (car slots)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
320 (car (widget-apply (car chil) :value-inline))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
321 (setq chil (cdr chil))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
322 (setq slots (cdr slots)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
323 fgroup (cdr fgroup)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
324 fcust (cdr fcust)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
325 ;; Set any name updates on it.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
326 (if name (aset obj object-name name))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
327 ;; This is the same object we had before.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
328 obj))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
329
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
330 (defmethod eieio-done-customizing ((obj eieio-default-superclass))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
331 "When a applying change to a widget, call this method.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
332 This method is called by the default widget-edit commands. User made
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
333 commands should also call this method when applying changes.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
334 Argument OBJ is the object that has been customized."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
335 nil)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
336
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
337 (defun customize-object (obj &optional group)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
338 "Customize OBJ in a custom buffer.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
339 Optional argument GROUP is the sub-group of slots to display."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
340 (eieio-customize-object obj group))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
341
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
342 (defmethod eieio-customize-object ((obj eieio-default-superclass)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
343 &optional group)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
344 "Customize OBJ in a specialized custom buffer.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
345 To override call the `eieio-custom-widget-insert' to just insert the
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
346 object widget.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
347 Optional argument GROUP specifies a subgroup of slots to edit as a symbol.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
348 These groups are specified with the `:group' slot flag."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
349 ;; Insert check for multiple edits here.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
350 (let* ((g (or group 'default)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
351 (switch-to-buffer (get-buffer-create
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
352 (concat "*CUSTOMIZE "
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
353 (object-name obj) " "
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
354 (symbol-name g) "*")))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
355 (toggle-read-only -1)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
356 (kill-all-local-variables)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
357 (erase-buffer)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
358 (let ((all (eieio-overlay-lists)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
359 ;; Delete all the overlays.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
360 (mapc 'delete-overlay (car all))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
361 (mapc 'delete-overlay (cdr all)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
362 ;; Add an apply reset option at the top of the buffer.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
363 (eieio-custom-object-apply-reset obj)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
364 (widget-insert "\n\n")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
365 (widget-insert "Edit object " (object-name obj) "\n\n")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
366 ;; Create the widget editing the object.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
367 (make-local-variable 'eieio-wo)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
368 (setq eieio-wo (eieio-custom-widget-insert obj :eieio-group g))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
369 ;;Now generate the apply buttons
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
370 (widget-insert "\n")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
371 (eieio-custom-object-apply-reset obj)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
372 ;; Now initialize the buffer
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
373 (use-local-map widget-keymap)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
374 (widget-setup)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
375 ;;(widget-minor-mode)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
376 (goto-char (point-min))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
377 (widget-forward 3)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
378 (make-local-variable 'eieio-co)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
379 (setq eieio-co obj)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
380 (make-local-variable 'eieio-cog)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
381 (setq eieio-cog group)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
382
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
383 (defmethod eieio-custom-object-apply-reset ((obj eieio-default-superclass))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
384 "Insert an Apply and Reset button into the object editor.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
385 Argument OBJ os the object being customized."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
386 (widget-create 'push-button
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
387 :notify (lambda (&rest ignore)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
388 (widget-apply eieio-wo :value-get)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
389 (eieio-done-customizing eieio-co)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
390 (bury-buffer))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
391 "Accept")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
392 (widget-insert " ")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
393 (widget-create 'push-button
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
394 :notify (lambda (&rest ignore)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
395 ;; I think the act of getting it sets
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
396 ;; it's value through the get function.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
397 (message "Applying Changes...")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
398 (widget-apply eieio-wo :value-get)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
399 (eieio-done-customizing eieio-co)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
400 (message "Applying Changes...Done."))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
401 "Apply")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
402 (widget-insert " ")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
403 (widget-create 'push-button
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
404 :notify (lambda (&rest ignore)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
405 (message "Resetting.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
406 (eieio-customize-object eieio-co eieio-cog))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
407 "Reset")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
408 (widget-insert " ")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
409 (widget-create 'push-button
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
410 :notify (lambda (&rest ignore)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
411 (bury-buffer))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
412 "Cancel"))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
413
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
414 (defmethod eieio-custom-widget-insert ((obj eieio-default-superclass)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
415 &rest flags)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
416 "Insert the widget used for editing object OBJ in the current buffer.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
417 Arguments FLAGS are widget compatible flags.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
418 Must return the created widget."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
419 (apply 'widget-create 'object-edit :value obj flags))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
420
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
421 (define-widget 'object 'object-edit
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
422 "Instance of a CLOS class."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
423 :format "%{%t%}:\n%v"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
424 :value-to-internal 'eieio-object-value-to-abstract
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
425 :value-to-external 'eieio-object-abstract-to-value
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
426 :clone-object-children t
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
427 )
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
428
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
429 (defun eieio-object-value-to-abstract (widget value)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
430 "For WIDGET, convert VALUE to an abstract /safe/ representation."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
431 (if (eieio-object-p value) value
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
432 (if (null value) value
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
433 nil)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
434
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
435 (defun eieio-object-abstract-to-value (widget value)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
436 "For WIDGET, convert VALUE from an abstract /safe/ representation."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
437 value)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
438
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
439
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
440 ;;; customization group functions
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
441 ;;
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
442 ;; These functions provide the ability to create dynamic menus to
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
443 ;; customize specific sections of an object. They do not hook directly
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
444 ;; into a filter, but can be used to create easymenu vectors.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
445 (defmethod eieio-customize-object-group ((obj eieio-default-superclass))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
446 "Create a list of vectors for customizing sections of OBJ."
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
447 (mapcar (lambda (group)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
448 (vector (concat "Group " (symbol-name group))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
449 (list 'customize-object obj (list 'quote group))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
450 t))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
451 (class-option (object-class-fast obj) :custom-groups)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
452
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
453 (defvar eieio-read-custom-group-history nil
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
454 "History for the custom group reader.")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
455
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
456 (defmethod eieio-read-customization-group ((obj eieio-default-superclass))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
457 "Do a completing read on the name of a customization group in OBJ.
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
458 Return the symbol for the group, or nil"
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
459 (let ((g (class-option (object-class-fast obj) :custom-groups)))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
460 (if (= (length g) 1)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
461 (car g)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
462 ;; Make the association list
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
463 (setq g (mapcar (lambda (g) (cons (symbol-name g) g)) g))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
464 (cdr (assoc
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
465 (completing-read (concat (oref obj name) " Custom Group: ")
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
466 g nil t nil 'eieio-read-custom-group-history)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
467 g)))))
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
468
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
469 (provide 'eieio-custom)
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
470
a64f3429f0ac emacs-lisp/eieio-base.el, emacs-lisp/eieio-comp.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
471 ;;; eieio-custom.el ends here