Update of /project/gsharp/cvsroot/gsharp
In directory clnet:/tmp/cvs-serv10976
Modified Files:
gui.lisp
Log Message:
Define a method on esa-current-buffer, not frame-current-buffer, after
Troels' reworking.
Also rewrite BUFFERS method so that if the window doesn't yet have a
view nothing bad happens.
This allows writing gsharp:gsharp and gsharp:edit-file in terms of
executing commands on an (adopted) gsharp frame, reducing code
duplication and also fixing a bad bug in gsharp:edit-file, which would
destroy the layer/staff structure if the file's first layer spanned
multiple staves.
--- /project/gsharp/cvsroot/gsharp/gui.lisp 2007/10/27 02:10:55 1.88
+++ /project/gsharp/cvsroot/gsharp/gui.lisp 2007/11/21 19:22:03 1.89
@@ -73,6 +73,7 @@
standard-application-frame)
((views :initarg :views :initform '() :accessor views)
(input-state :initarg :input-state :accessor input-state))
+ (:default-initargs :input-state (make-input-state))
(:menu-bar menubar-command-table :height 25)
(:pointer-documentation t)
(:panes
@@ -118,11 +119,13 @@
(:top-level (esa-top-level)))
(defmethod buffers ((application-frame gsharp))
- (remove-duplicates (mapcar (lambda (window) (buffer (view window)))
- (windows application-frame))
- :test #'eq))
+ (let (result)
+ (dolist (window (windows application-frame) (nreverse result))
+ (let ((view (view window)))
+ (when view
+ (pushnew (buffer view) result))))))
-(defmethod frame-current-buffer ((application-frame gsharp))
+(defmethod esa-current-buffer ((application-frame gsharp))
(buffer (view (car (windows application-frame)))))
(defun current-cursor ()
@@ -548,39 +551,28 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
-;;; main entry point
+;;; main entry points
-(defun gsharp-common (buffer new-process process-name width height)
- (let* ((staff (car (staves buffer)))
- (input-state (make-input-state))
- (cursor (make-initial-cursor buffer))
- (view (make-instance 'orchestra-view
- :buffer buffer
- :cursor cursor)))
- (let ((frame (make-application-frame 'gsharp
- :buffer buffer
- :input-state input-state
- :cursor cursor
- :width width :height height)))
- (push view (views frame))
- (flet ((run ()
- (run-frame-top-level frame)))
- (setf (staves (car (layers (car (segments buffer))))) (list staff))
- (if new-process
- (clim-sys:make-process #'run :name process-name)
- (run))))))
-
-(defun gsharp (&key new-process (process-name "Gsharp")
- (width 900) (height 600))
+(defun gsharp (&rest args &key new-process process-name width height)
"Start a Gsharp session with a fresh empty buffer"
- (gsharp-common (make-instance 'buffer)
- new-process process-name width height))
+ (declare (ignore new-process process-name width height))
+ (apply #'gsharp-common '(com-new-buffer) args))
-(defun edit-file (filename &key new-process (process-name "Gsharp")
- (width 900) (height 600))
+(defun edit-file (filename &rest args
+ &key new-process process-name width height)
"Start a Gsharp session editing a given file"
- (gsharp-common (read-everything filename)
- new-process process-name width height))
+ (declare (ignore new-process process-name width height))
+ (apply #'gsharp-common `(esa-io::com-find-file ,filename) args))
+
+(defun gsharp-common (command &key new-process (process-name "Gsharp") width height)
+ (let ((*application-frame*
+ (make-application-frame 'gsharp :width width :height height)))
+ (adopt-frame (find-frame-manager) *application-frame*)
+ (execute-frame-command *application-frame* command)
+ (flet ((run () (run-frame-top-level *application-frame*)))
+ (if new-process
+ (clim-sys:make-process #'run :name process-name)
+ (run)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;