;;;; -*- Mode: LISP; Syntax: Common-Lisp; Base: 10 -*- ;;;; --------------------------------------------------------------------- ;;;; File name: defsys.lsp ;;;; System: Case Manager ;;;; Author: Shawn Nicholson ;;;; Created: June 25, 2002 10:02:52 ;;;; Purpose: ;;;; --------------------------------------------------------------------- ;;;; Modified: Wednesday, March 17, 2004 at 21:36:15 by usher ;;;; --------------------------------------------------------------------- (in-package :common-lisp-user) #-qrg (error "You must first load qrg-setup.lisp.") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Load defsys for other modules required by this system if any ;; I load this here because I want fire:*fire-path* defined while loading this ;; defsys (unless (member :fire *features*) (error "You must load fire to load this system.")) (qrg:require-system (qrg:make-qrg-path "code-library" "lisp" "runtime-utils") :load-runtime-utils :runtime-utils :action :compile-if-newer :verbose t :force-load nil) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Set up package (eval-when (:load-toplevel :compile-toplevel :execute) (defpackage :fire-case-viewer (:use :common-lisp :qrg))) ;;Provide the ability to move data to a separate package in the future. (eval-when (:compile-toplevel :load-toplevel :execute) (unless (find-package :data) (rename-package (find-package :cl-user) :common-lisp-user ;keep name the same '(:cl-user :user ;replace standard nicknames :data)))) ;add a new nickname (in-package :fire-case-viewer) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Global variables (defconstant *case-viewer-version* "1.0") ;; current version number (defparameter *case-viewer-path* (append-qrg-path fire::*fire-path* "case-manager" "case-viewer")) (defparameter *case-viewer-object-path* (qrg:append-qrg-path *case-viewer-path* "window-objects")) (defparameter *case-viewer-text-display-path* (qrg:append-qrg-path *case-viewer-path* "text-display-and-edit")) (defparameter *case-viewer-zgraph-display-path* (qrg:append-qrg-path *case-viewer-path* "zgraph-display")) ;; Function to get case viewer path (works for running under executable or ;; devel environment) (defun get-case-viewer-path (&key (subdirs nil) (filename nil) (filetype nil)) (let ((path (qrg:get-path :root-path *case-viewer-path* :subdirs subdirs :filename filename :filetype filetype))) (unless (or (null filename) (probe-file path)) (format t "~%Could not find ~A." path)) path)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; PackDoc stuff (eval-when (:load-toplevel :compile-toplevel :execute) (defmacro export-symbols (subpackage-name doc-string symbols) "Assigns a name and documentation to the group of symbols and exports them from the current package. If PackDoc has been loaded, subpackage documentation will also be generated." `(progn (export ,symbols) (when (member :packdoc *features*) (funcall (intern :subpackage-documentation :packdoc) ,subpackage-name ,symbols ,doc-string))))) #+packdoc (defun generate-case-viewer-documentation (&key (output-path (qrg:append-qrg-path *case-viewer-pathname* "docs")) (overwrite-files? t)) "Generates API documentation for the Case Mapper in HTML format. Files are written to qrg/fire/v1/case-manager/case-viewer/docs/ by default." (flet ((doc-path (filename) (qrg:make-full-file-spec output-path filename ".html"))) (packdoc:document-package-to-file :fire-case-viewer (doc-path "Case-Viewer-API") :html nil t :block) #+common-graphics (cg:beep) :done)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Load the export file (qrg:load-file *case-viewer-path* "export" :action :load-source) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; List the system files (defparameter *case-viewer-object-files* '("case-load-popup" "case-create-popup" "wm-case-deletion-popup" "case-display-dialog" "case-library-management" "case-viewer-window" )) (defparameter *case-viewer-files* '("case-viewer" "general-utilities" "case-constructors" )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Application files that must be shipped with the executable (ru:def-appfiles-dir (qrg:append-qrg-path *case-viewer-path* "graphics" "icons") "icons\\" :file-filters '("*.gif" "*.jpeg" "*.jpg" "*.avi" "*.bmp")) (ru:def-appfiles-dir (qrg:append-qrg-path *case-viewer-path* "graphics" "icons") "graphics\\icons\\" :file-filters '("*.gif" "*.jpeg" "*.jpg" "*.avi" "*.bmp")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Loading Function (defun load-case-viewer (&key (action :source-if-newer) (verbose t) (force-load nil) (load-subsystems? t)) (cond ((and (not force-load) (member :fire-case-viewer qrg:*modules-loaded*)) (when verbose (format t "~%;;; Case Manager already loaded."))) (t ;; Load the Case Viewer now (when verbose (format t "~%;;; Loading Case Viewer")) (qrg:load-file (qrg:append-qrg-path fire:*fire-path* "case-manager") "case-management" :action action :verbose verbose) (qrg:load-files (make-qrg-path "Utils") (list "general-utilities") :action action :verbose verbose) (qrg:load-file *case-viewer-path* "display-registration" :action action :verbose verbose) (qrg:load-files *case-viewer-object-path* *case-viewer-object-files* :action action :verbose verbose) (qrg:load-files *case-viewer-path* *case-viewer-files* :action action :verbose verbose) (pushnew :fire-case-viewer *features*) (pushnew :fire-case-viewer qrg:*modules-loaded*) ;; Load the default viewing pane (when load-subsystems? ;;; (qrg:require-system *case-viewer-zgraph-display-path* :load-zgraph-case-display :zgraph-case-display ;;; :action action :verbose verbose :force-load force-load) (qrg:require-system *case-viewer-text-display-path* :load-text-case-display :textual-case-display :action action :verbose verbose :force-load force-load) ) ) (when verbose (viewer-explain-usage)) :done)) (defun viewer-explain-usage () (format t "~%;;; Use (fire-case-viewer:case-viewer) to start viewer") ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Tell user how to load system (format t "~%~A~%" (make-string 80 :initial-element #\-)) (format t " To load the Case Viewer, call (fire-case-viewer:load-case-viewer &key action verbose force-load).~%") (format t "~A~%" (make-string 80 :initial-element #\-)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; End Of Code