annotate lisp/oobr/br-tree.el @ 167:85ec50267440 r20-3b10

Import from CVS: tag r20-3b10
author cvs
date Mon, 13 Aug 2007 09:45:46 +0200
parents 4be1180a9e89
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 ;;!emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 ;; FILE: br-tree.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 ;; SUMMARY: Interface between textual and graphical OO-Browsers.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 ;; USAGE: GNU Emacs Lisp Library
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 ;; KEYWORDS: mouse, oop, tools
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 ;; AUTHOR: Bob Weiner
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
9 ;; ORG: InfoDock Associates
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 ;; ORIG-DATE: 12-Oct-90
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
12 ;; LAST-MOD: 20-Feb-97 at 07:01:02 by Bob Weiner
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 ;;
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
14 ;; Copyright (C) 1990-1995, 1997 Free Software Foundation, Inc.
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ;; See the file BR-COPY for license information.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 ;; This file is part of the OO-Browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 ;; DESCRIPTION:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21 ;; Requires the X Window system Version 11 or NEXTSTEP.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 ;; DESCRIP-END.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 ;;; Other required Elisp libraries
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 (require 'br-lib)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 ;;; Public variables
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35 (defvar *br-tree-prog-name*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 (if (or (eq window-system 'x) (null window-system))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 "xoobr"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 "./TreeView.app/TreeView")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 "Program to run for hierarchical display of classes.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 ;;; Public functions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45 (defun br-tree (&optional arg)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 "Start the appropriate tree application with descendency tree of current class.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 With optional prefix ARG, a descendency tree for each class in current buffer."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48 (interactive "P")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (let* ((classes (if arg
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 (br-this-level-classes)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51 (list (br-find-class-name))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 (ch (delq nil (mapcar (function (lambda (c) (br-get-children c)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 classes))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 (if (or ch br-show-features)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55 (br-tree-load classes)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 (beep)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 (message "No descendants to display."))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 (defun br-tree-graph ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 "Start the appropriate tree application with the tree from current listing buffer."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 (let* ((tree) (indent) (entry) (min-indent 8000) (min-count 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 (feature-match (format "^%s " br-feature-type-regexp)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 (goto-char (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 (while (and (= (forward-line -1) 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 (looking-at "\\([ \t]*\\)\\(.+\\)"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 (setq indent (buffer-substring (match-beginning 1) (match-end 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 entry (length indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 min-indent (cond ((= entry min-indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 (setq min-count (1+ min-count))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 entry)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 ((< entry min-indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 (setq min-count 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 entry)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 (min-indent))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 entry (buffer-substring (match-beginning 2) (match-end 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 entry (if (string-match feature-match entry)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 (concat (char-to-string (aref entry 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 (substring entry 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 "^^" (br-feature-get-signature))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 entry)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 tree (cons (concat indent entry "\n") tree))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 (or (= min-count 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 (setq tree (cons (concat *br-tree-root-name* "\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 (mapcar (function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 (lambda (node) (concat " " node))) tree))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 (br-tree-load tree t)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 (defun br-tree-do-cmd (lang env cmd node)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 ;; Load necessary Environment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 (if (not (equal env br-env-file))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 (let ((br (intern-soft
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 (concat lang "browse"))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 (if (br-in-browser) (funcall br env) (funcall br env t))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 ;; Do command
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 (cond ((and (not (eq (symbol-function 'br-feature-tree-command-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 'br-undefined-function))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 (br-feature-tree-command-p node)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 ((string-equal cmd "br-view")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 (br-view nil nil node))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 ((string-equal cmd "br-edit")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 (br-view nil t node))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 (t (beep)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 (message
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 (format "(OO-Browser): Illegal command: %s" cmd)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 (defun br-tree-features-toggle ()
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
109 "Toggle between showing and hiding features when `br-tree' is invoked to display descendants graphically."
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 (setq br-show-features (not br-show-features))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 (message "New graphical OO-Browsers will %sshow features."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 (if br-show-features "" "not ")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 (defun br-tree-kill ()
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
116 "Kill all current `Tree' sub-processes."
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 (if (br-kill-process-group br-tree-name br-tree-num
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 "Tree displays")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 (setq br-tree-num 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 (defun br-tree-load (classes-or-tree &optional tree-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 "Start the appropriate tree application using trees from CLASSES-OR-TREE.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 Optional TREE-P non-nil means CLASSES-OR-TREE is a tree ready for display."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 (interactive (list "sClass to show descendency graph of: "))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 (if (and br-env-file (not br-env-spec))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 (let ((obuf (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 (tree-file (concat "/tmp/br-" (user-real-login-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 (int-to-string
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 (setq br-tree-num (1+ br-tree-num)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 ".tree")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 (if classes-or-tree
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 (progn (find-file tree-file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 (widen)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135 (setq buffer-read-only nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 (erase-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 ;; Start file with Envir file name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 (insert "^^" br-lang-prefix "^^" br-env-file "\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 (if tree-p
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 (mapcar 'insert classes-or-tree)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 (br-tree-build classes-or-tree))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 (untabify 1 (point-max))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 (save-buffer)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144 (kill-buffer (current-buffer))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 (switch-to-buffer obuf)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 (if (eq window-system 'x)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 (br-tree-x-load-tree-file tree-file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 (br-tree-nx-load-tree-file tree-file)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 (defun br-tree-nx-load-tree-file (tree-file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 "Load a pre-written TREE-FILE and display it in an X OO-Browser."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 (setq delete-exited-processes t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 (let ((proc (get-process br-tree-name)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 (if (and proc (eq (process-status proc) 'run)) ;; existing tree browser
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 ;; Send it an open file command.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 (call-process "open" nil 0 nil "-a"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 (file-name-nondirectory *br-tree-prog-name*)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158 tree-file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 (let ((default-directory (file-name-as-directory
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160 (expand-file-name "tree-nx" br-directory))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
161 (setq proc (start-process
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 br-tree-name nil *br-tree-prog-name*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 tree-file))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 (if proc
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 (progn (set-process-filter proc 'br-tree-filter)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 (process-kill-without-query proc)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 ))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 (defun br-tree-x-load-tree-file (tree-file)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 "Load a pre-written TREE-FILE and display it in an X OO-Browser."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 (setq delete-exited-processes t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172 (let ((proc))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 (setq proc (start-process
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 (concat br-tree-name (int-to-string br-tree-num))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 *br-tree-prog-name*
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 tree-file))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 (if proc
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 (progn (set-process-filter proc 'br-tree-filter)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 (process-kill-without-query proc)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183 ;;; Private functions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 (defconst *br-tree-root-name* "NO-ROOT"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 "Name to give root tree node when graph with no root is used as input.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189 (defun br-tree-build (class-list &optional indent offset)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 "Insert descendant trees starting with classes from CLASS-LIST.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 Indent each class in CLASS-LIST by optional INDENT spaces (default is 0 in
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 order to ensure proper initialization). Offset each child level by optional
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 OFFSET spaces from its parent (which must be greater than zero, default 2)."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 (or indent (setq indent 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 (or offset (setq offset 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 (let ((prev-expansion-str " ...")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 ch expand-subtree)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 (if (= indent 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 (progn (setq br-tmp-class-set nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 (if (= (length class-list) 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202 (insert *br-tree-root-name* "\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 (setq indent offset))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 (if class-list
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 (indent-to indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 (mapcar (function (lambda (c)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 (setq expand-subtree (br-set-cons br-tmp-class-set c)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 ch (if expand-subtree (br-get-children c)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 (indent-to indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 (insert c)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 (and (not expand-subtree)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 (br-has-children-p c)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 (insert prev-expansion-str))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215 (insert "\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 (if (and br-show-features
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 (br-tree-build-features
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 c expand-subtree (+ indent offset) offset))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 (if ch
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 (br-tree-build ch (+ indent offset) offset)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 class-list))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 (if (= indent 0) (setq br-tmp-class-set nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225 (defun br-tree-build-features (c expand-subtree indent offset)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 "Each language under which this function is called must define its own
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
227 version of `br-list-features' and `br-feature-signature-to-name'."
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 (let ((features) (ch))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229 (and expand-subtree
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 (setq features
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 (mapcar
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 (function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233 (lambda (feature-tag)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 (concat (br-feature-signature-to-name feature-tag nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 "^^" feature-tag)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 (br-list-features c)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 (mapcar
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 (function
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 (lambda (feature)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 (indent-to indent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242 (insert feature "\n")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 features)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 (if (setq ch (if expand-subtree (br-get-children c)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 (br-tree-build ch indent offset))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 t))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 (defun br-tree-filter (process output-str)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 (let ((br-lang-px)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250 (br-env-nm)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 (br-cmd-nm)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 (br-node-nm))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 (if (not (string-match "\n" output-str))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254 (setq br-cmd-str (concat br-cmd-str output-str))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 (setq br-cmd-str (concat br-cmd-str
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 (substring output-str 0 (match-beginning 0))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 (if (and (> (length br-cmd-str) 9)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 (equal (substring br-cmd-str -4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 " ..."))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 (setq br-cmd-str (substring br-cmd-str 0 -4)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 ;; Is a command only if starts with ^^
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 (if (and (> (length br-cmd-str) 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263 (equal (substring br-cmd-str 0 2) "^^")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 (string-match
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 "^^^\\(.+\\)^^\\(.+\\)^^\\(.+\\)^^\\(.+\\)"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 br-cmd-str))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 (setq br-lang-px (substring br-cmd-str
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 (+ (match-beginning 1) 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 (match-end 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 br-env-nm (substring br-cmd-str
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 (match-beginning 2)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 (match-end 2))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274 br-cmd-nm (substring br-cmd-str
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 (match-beginning 3)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 (match-end 3))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277 br-node-nm (substring br-cmd-str
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 (match-beginning 4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 (match-end 4))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 br-cmd-str nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281 (br-tree-do-cmd br-lang-px br-env-nm
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 br-cmd-nm br-node-nm))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 (beep)
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
284 (message "`%s': invalid command from graphical browser"
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285 br-cmd-str)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 (setq br-cmd-str nil)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
287
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 ;;; Private functions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 (defvar br-cmd-str nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 "Command string sent from graphical OO-Browser to the textual OO-Browser.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 (defvar br-show-features nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298 "Non-nil means add features as child nodes in each graphical descendancy view.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 (defvar br-tree-num 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301 (defvar br-tree-name "Tree")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 (provide 'br-tree)