[mcclim-cvs] CVS mcclim/Examples
crhodes
crhodes at common-lisp.net
Wed Mar 29 09:36:30 UTC 2006
Update of /project/mcclim/cvsroot/mcclim/Examples
In directory clnet:/tmp/cvs-serv4918
Modified Files:
method-browser.lisp
Log Message:
Use a bit more of clim-mop in the method browser. May now work on
scieneer.
--- /project/mcclim/cvsroot/mcclim/Examples/method-browser.lisp 2005/03/06 20:35:40 1.2
+++ /project/mcclim/cvsroot/mcclim/Examples/method-browser.lisp 2006/03/29 09:36:30 1.3
@@ -46,11 +46,11 @@
;;; * Portable MOP provided by CLIM-MOP package
;;; TODO:
-;;; * EQL specializers on implementations other than SBCL/CMUCL
-;;; * Nicer, more clever display of methods than simply listing them in a row.
-;;; To do this right really involes some nonportable fun and a codewalker.
-;;; You could probably write something that just understood the standard
-;;; method combination and qualifiers with substantially less work.
+;;; * Nicer, more clever display of methods than simply listing them
+;;; in a row. To do this right really involes some nonportable
+;;; fun and a codewalker. You could probably write something that
+;;; just understood the standard method combination and qualifiers
+;;; with substantially less work.
;;; * Change focus behavior of McCLIM text entry gadget
;;; * Implement focus-aware cursor shapes in McCLIM and/or Goatee
;;; (actually I did this ages ago, but let it rot away on my disk..)
@@ -67,23 +67,19 @@
collect (remove-duplicates (mapcar (lambda (specs) (nth index specs))
specializers)))))
+;;; FIXME: why is this necessary? I'm pretty sure the #+CMU clause
+;;; here has been superseded by events for quite a while now. (Should
+;;; clim-mop:class not cater for these implementation differences?)
(defun classp (x)
(or (typep x 'cl:class)
- #+CMU (typep x 'pcl::class)))
-
-(defun eql-specializer-p (x)
- #+SBCL (typep x 'sb-mop:eql-specializer)
- #+CMU (typep x 'pcl:eql-specializer))
-
-(defun eql-specializer-object (x)
- #+SBCL (sb-mop:eql-specializer-object x)
- #+CMU (pcl::eql-specializer-object x))
+ #+CMU (typep x 'pcl::class)
+ #+scl (typep x 'clos::std-class)))
(defun compute-applicable-methods-from-specializers (gf specializers)
(clim-mop:compute-applicable-methods gf
(mapcar (lambda (spec)
- (cond ((eql-specializer-p spec)
- (eql-specializer-object spec))
+ (cond ((typep spec 'clim-mop:eql-specializer)
+ (clim-mop:eql-specializer-object spec))
((classp spec)
(clim-mop:class-prototype spec))
(t (error "Can't compute effective methods, specializer ~A is not understood." spec))))
@@ -104,17 +100,17 @@
(classp b))
(string< (class-name a)
(class-name b)))
- ((and (eql-specializer-p a)
- (not (eql-specializer-p b)))
+ ((and (typep a 'clim-mop:eql-specializer)
+ (not (typep b 'clim-mop:eql-specializer)))
nil)
- ((and (not (eql-specializer-p a))
- (eql-specializer-p b))
+ ((and (not (typep a 'clim-mop:eql-specializer))
+ (typep b 'clim-mop:eql-specializer))
t)
- ((and (eql-specializer-p a)
- (eql-specializer-p b))
+ ((and (typep a 'clim-mop:eql-specializer)
+ (typep b 'clim-mop:eql-specializer))
(string<
- (princ-to-string (eql-specializer-object a))
- (princ-to-string (eql-specializer-object b))))
+ (princ-to-string (clim-mop:eql-specializer-object a))
+ (princ-to-string (clim-mop:eql-specializer-object b))))
(t (warn "Received specializer of unknown type")
nil) ))))
(compute-gf-specializers gf)))
@@ -135,8 +131,8 @@
"Pretty print the name of a method specializer"
(cond ((classp spec)
(princ-to-string (class-name spec)))
- ((eql-specializer-p spec)
- (format nil "(EQL '~A)" (eql-specializer-object spec)))
+ ((typep spec 'clim-mop:eql-specializer)
+ (format nil "(EQL '~A)" (clim-mop:eql-specializer-object spec)))
(t (princ-to-string spec))))
(defun maybe-find-gf (name)
@@ -174,7 +170,7 @@
;; commands within your application, a menu bar, etc.
;; The :panes option is typically used to define and name the important
-;; elements of your interface. CLIM provides some syntactic sugare, for
+;; elements of your interface. CLIM provides some syntactic sugar, for
;; example (arg-pane :vrack-pane) below is equivalent to
;; (arg-pane (make-pane 'vrack-pane)).
More information about the Mcclim-cvs
mailing list