[gsharp-cvs] CVS update: gsharp/buffer.lisp gsharp/gui.lisp gsharp/packages.lisp

Robert Strandh rstrandh at common-lisp.net
Mon Nov 7 20:00:54 UTC 2005


Update of /project/gsharp/cvsroot/gsharp
In directory common-lisp.net:/tmp/cvs-serv22660

Modified Files:
	buffer.lisp gui.lisp packages.lisp 
Log Message:
Improved on the constructors for buffer-related classes.

Date: Mon Nov  7 21:00:52 2005
Author: rstrandh

Index: gsharp/buffer.lisp
diff -u gsharp/buffer.lisp:1.23 gsharp/buffer.lisp:1.24
--- gsharp/buffer.lisp:1.23	Thu Nov  3 04:40:13 2005
+++ gsharp/buffer.lisp	Mon Nov  7 21:00:52 2005
@@ -477,6 +477,8 @@
 (defmethod print-object :after ((b bar) stream)
   (format stream ":elements ~W " (elements b)))
 
+(defgeneric make-bar-for-staff (staff &rest args &key elements))
+
 (defmethod nb-elements ((bar bar))
   (length (elements bar)))
 
@@ -518,6 +520,10 @@
 	   (ignore elements))
   (apply #'make-instance 'melody-bar args))
 
+(defmethod make-bar-for-staff ((staff fiveline-staff) &rest args &key elements)
+  (declare (ignore elements))
+  (apply #'make-instance 'melody-bar args))
+
 (defun read-melody-bar-v3 (stream char n)
   (declare (ignore char n))
   (apply #'make-instance 'melody-bar (read-delimited-list #\] stream t)))
@@ -534,6 +540,10 @@
 	   (ignore elements))
   (apply #'make-instance 'lyrics-bar args))
 
+(defmethod make-bar-for-staff ((staff lyrics-staff) &rest args &key elements)
+  (declare (ignore elements))
+  (apply #'make-instance 'lyrics-bar args))
+
 (defun read-lyrics-bar-v3 (stream char n)
   (declare (ignore char n))
   (apply #'make-instance 'lyrics-bar (read-delimited-list #\] stream t)))
@@ -672,8 +682,15 @@
    (tail :initarg :tail :accessor tail))
   (:default-initargs :name "default layer"))
 
-(defmethod initialize-instance :after ((l layer) &rest args)
+(defmethod initialize-instance :after ((l layer) &rest args &key head body tail)
   (declare (ignore args))
+  (let ((staff (car (staves l))))
+    (unless head
+      (setf (head l) (make-slice :bars (list (make-bar-for-staff staff)))))
+    (unless body 
+      (setf (body l) (make-slice :bars (list (make-bar-for-staff staff)))))
+    (unless tail
+      (setf (tail l) (make-slice :bars (list (make-bar-for-staff staff))))))
   (setf (layer (head l)) l
 	(layer (body l)) l
 	(layer (tail l)) l))
@@ -683,25 +700,19 @@
     (format stream ":staves ~W :head ~W :body ~W :tail ~W "
 	    staves head body tail)))
 
+(defgeneric make-layer-for-staff (staff &rest args &key staves head body tail))
+
+(defun make-layer (staves &rest args &key head body tail)
+  (declare (type list staves)
+	   (type (or slice null) head body tail)
+	   (ignore head body tail))
+  (apply #'make-layer-for-staff (car staves) :staves staves args))	   
+
 ;;; melody layer
 
 (defclass melody-layer (layer)
   ((print-character :allocation :class :initform #\_)))
 
-(defmethod make-layer (name (initial-staff fiveline-staff))
-  (flet ((make-initialized-slice ()
-	   (make-slice :bars (list (make-melody-bar)))))
-    (let* ((head (make-initialized-slice))
-	   (body (make-initialized-slice))
-	   (tail (make-initialized-slice))
-	   (result (make-instance 'melody-layer
-		      :name name :staves (list initial-staff)
-		      :head head :body body :tail tail)))
-      (setf (slot-value head 'layer) result
-	    (slot-value body 'layer) result
-	    (slot-value tail 'layer) result)
-      result)))
-  
 (defun read-melody-layer-v3 (stream char n)
   (declare (ignore char n))
   (apply #'make-instance 'melody-layer (read-delimited-list #\] stream t)))
@@ -710,25 +721,15 @@
   #'read-melody-layer-v3
   *gsharp-readtable-v3*)
 
+(defmethod make-layer-for-staff ((staff fiveline-staff) &rest args &key staves head body tail)
+  (declare (ignore staves head body tail))
+  (apply #'make-instance 'melody-layer args))
+
 ;;; lyrics layer
 
 (defclass lyrics-layer (layer)
   ((print-character :allocation :class :initform #\M)))
 
-(defmethod make-layer (name (initial-staff lyrics-staff))
-  (flet ((make-initialized-slice ()
-	   (make-slice :bars (list (make-lyrics-bar)))))
-    (let* ((head (make-initialized-slice))
-	   (body (make-initialized-slice))
-	   (tail (make-initialized-slice))
-	   (result (make-instance 'lyrics-layer
-		      :name name :staves (list initial-staff)
-		      :head head :body body :tail tail)))
-      (setf (slot-value head 'layer) result
-	    (slot-value body 'layer) result
-	    (slot-value tail 'layer) result)
-      result)))
-
 (defun read-lyrics-layer-v3 (stream char n)
   (declare (ignore char n))
   (apply #'make-instance 'lyrics-layer (read-delimited-list #\] stream t)))
@@ -737,6 +738,10 @@
   #'read-lyrics-layer-v3
   *gsharp-readtable-v3*)
 
+(defmethod make-layer-for-staff ((staff lyrics-staff) &rest args &key staves head body tail)
+  (declare (ignore staves head body tail))
+  (apply #'make-instance 'lyrics-layer args))
+
 (defmethod slices ((layer layer))
   (with-slots (head body tail) layer
     (list head body tail)))
@@ -817,7 +822,7 @@
   (with-slots (layers) s
     (when (null layers)
       (assert (not (null staff)))
-      (push (make-layer "Default layer" staff) layers))
+      (push (make-layer (list staff)) layers))
     (loop for layer in layers
 	  do (setf (segment layer) s))))
 
@@ -864,7 +869,7 @@
       (setf layers (delete layer layers :test #'eq))
       ;; make sure there is one layer left
       (unless layers
-	(add-layer (make-layer "Default layer" (car (staves (buffer segment))))
+	(add-layer (make-layer (staves (buffer segment)))
 		   segment)))
     (setf segment nil)))
 


Index: gsharp/gui.lisp
diff -u gsharp/gui.lisp:1.39 gsharp/gui.lisp:1.40
--- gsharp/gui.lisp:1.39	Mon Nov  7 06:23:57 2005
+++ gsharp/gui.lisp	Mon Nov  7 21:00:52 2005
@@ -441,7 +441,7 @@
 (define-gsharp-command (com-add-layer :name t) ()
   (let* ((name (acquire-unique-layer-name "Name of new layer"))
 	 (staff (accept 'score-pane:staff :prompt "Initial staff of new layer"))
-	 (new-layer (make-layer name staff)))
+	 (new-layer (make-layer staff :name name)))
     (add-layer new-layer (segment (cursor *application-frame*)))
     (select-layer (cursor *application-frame*) new-layer)))
     


Index: gsharp/packages.lisp
diff -u gsharp/packages.lisp:1.25 gsharp/packages.lisp:1.26
--- gsharp/packages.lisp:1.25	Mon Nov  7 06:23:57 2005
+++ gsharp/packages.lisp	Mon Nov  7 21:00:52 2005
@@ -55,8 +55,9 @@
 	   #:lyrics-bar #:make-lyrics-bar
 	   #:layer #:lyrics-layer #:melody-layer
 	   #:bars #:nb-bars #:barno #:add-bar #:remove-bar
-	   #:slice
+	   #:slice #:make-slice
 	   #:segment #:slices #:sliceno
+	   #:make-layer-for-staff #:make-bar-for-staff
 	   #:head #:body #:tail #:make-layer #:buffer
 	   #:layers #:nb-layers #:layerno
 	   #:add-layer #:remove-layer #:segment




More information about the Gsharp-cvs mailing list