7 Defining Interface Classes
The functions to perform the page scrolling operations are given below:
(defun scroll-up (data interface) (call-editor (viewer-pane interface) "Scroll Window Up"))The functions use the CAPI function(defun scroll-down (data interface) (call-editor (viewer-pane interface) "Scroll Window Down"))
call-editor
which calls an editor command (given as a string) on an instance of an editor-pane
. The editor commands Scroll Window Up and Scroll Window Down perform the necessary operations for Page Up and Page Down respectively.The function to perform the file-opening operation is given below:
(defun file-choice (data interface) (let ((file (prompt-for-file "Select A File:"))) (when file (setf (titled-pane-title (viewer-pane interface)) (format nil "File: ~S" file)) (setf (editor-pane-text (viewer-pane interface)) (with-open-file (stream file) (let* ((length (file-length stream)) (string (make-string length))) (dotimes (i length) (setf (schar string i) (read-char stream))) string))))))This function prompts for a filename and then displays the file in the editor pane.
The function first produces a file prompter through which a file may be selected. Then, the selected file name is shown in the title of the editor pane (using titled-pane-title
). Finally, the file name is used to get the contents of the file and display them in the editor pane (usingeditor-pane-text
).
The correct callback information for the buttons is specified as shown below:
(:panes (page-up push-button :text "Page Up" :selection-callback 'scroll-up) (page-down push-button :text "Page Down" :selection-callback 'scroll-down) (open-file push-button :text "Open File" :selection-callback 'file-choice) (viewer editor-pane :title "File:" :visible-min-height '(:character 8) :reader viewer-pane))All the buttons and menu items operate on the editor pane
viewer
. A reader is set up to allow access to it.The correct callback information for the menus is specified as shown below:
(:menus (file-menu "File" (("Open")) :selection-callback 'file-choice) (page-menu "Page" (("Page Up" :selection-callback 'scroll-up) ("Page Down" :selection-callback 'scroll-down)))In this case, each item in the menu has a different callback. The complete code for the interface is listed below -- try it out.
(define-interface demo () () (:panes (page-up push-button :text "Page Up" :selection-callback 'scroll-up) (page-down push-button :text "Page Down" :selection-callback 'scroll-down) (open-file push-button :text "Open File" :selection-callback 'file-choice) (viewer editor-pane :title "File:" :visible-min-height '(:character 8) :reader viewer-pane)) (:layouts (main-layout column-layout '(row-of-buttons row-with-editor-pane)) (row-of-buttons row-layout '(page-up page-down open-file)) (row-with-editor-pane row-layout '(viewer))) (:menus (file-menu "File" (("Open")) :selection-callback 'file-choice) (page-menu "Page" (("Page Up" :selection-callback 'scroll-up) ("Page Down" :selection-callback 'scroll-down)))) (:menu-bar file-menu page-menu) (:default-initargs :title "Demo"))
Generated with Harlequin WebMaker