Add XOSC Viewer, use this as destination for xform
This commit is contained in:
3
OSN.asd
3
OSN.asd
@ -44,6 +44,7 @@
|
|||||||
(:file "ui-utils" :depends-on ("pkgdef" "globals" "conditions"))
|
(:file "ui-utils" :depends-on ("pkgdef" "globals" "conditions"))
|
||||||
(:file "debugger-ui" :depends-on ("pkgdef" "globals" "conditions" "ui-utils"))
|
(:file "debugger-ui" :depends-on ("pkgdef" "globals" "conditions" "ui-utils"))
|
||||||
(:file "osn-viewer" :depends-on ("pkgdef" "globals" "conditions" "osn" "osn-parser" "osn-writer" "osn-to-os10" "ui-utils"))
|
(:file "osn-viewer" :depends-on ("pkgdef" "globals" "conditions" "osn" "osn-parser" "osn-writer" "osn-to-os10" "ui-utils"))
|
||||||
(:file "win-ui" :depends-on ("pkgdef" "globals" "conditions" "ui-utils" "debugger-ui" "osn-viewer")))
|
(:file "xosc-viewer" :depends-on ("pkgdef" "globals" "conditions" "ui-utils"))
|
||||||
|
(:file "win-ui" :depends-on ("pkgdef" "globals" "conditions" "ui-utils" "debugger-ui" "osn-viewer" "xosc-viewer")))
|
||||||
:depends-on ("lib")))
|
:depends-on ("lib")))
|
||||||
:depends-on ("cl-ppcre" "yacc" "cxml"))
|
:depends-on ("cl-ppcre" "yacc" "cxml"))
|
||||||
|
|||||||
@ -103,6 +103,9 @@
|
|||||||
((:menu
|
((:menu
|
||||||
(("OSN File"
|
(("OSN File"
|
||||||
:callback 'application-interface-new-osn
|
:callback 'application-interface-new-osn
|
||||||
|
:callback-type :interface)
|
||||||
|
("XOSC File"
|
||||||
|
:callback 'application-interface-new-xosc
|
||||||
:callback-type :interface))
|
:callback-type :interface))
|
||||||
:title "New")
|
:title "New")
|
||||||
("Open ..."
|
("Open ..."
|
||||||
@ -184,15 +187,8 @@
|
|||||||
(defmethod export-osn-to-xosc ((viewer osn-viewer))
|
(defmethod export-osn-to-xosc ((viewer osn-viewer))
|
||||||
(let ((osn (first (capi:graph-pane-roots (slot-value viewer 'osn-graph-pane)))))
|
(let ((osn (first (capi:graph-pane-roots (slot-value viewer 'osn-graph-pane)))))
|
||||||
(when osn
|
(when osn
|
||||||
(multiple-value-bind (pathname ok)
|
(application-interface-new-xosc
|
||||||
(capi:prompt-for-file "Export OSN To XOSC"
|
viewer
|
||||||
:operation :save
|
:content
|
||||||
:filters '("XOSC Files" "*.XOSC")
|
(with-output-to-string (stream)
|
||||||
:filter "*.XOSC")
|
(osn-os10:write-os10-stream osn stream))))))
|
||||||
(when ok
|
|
||||||
(capi:with-busy-interface (viewer)
|
|
||||||
(with-open-file (stream pathname #+(or) (ensure-pathname-type pathname "xosc")
|
|
||||||
:external-format :utf-8
|
|
||||||
:element-type :default
|
|
||||||
:direction :output :if-exists :supersede)
|
|
||||||
(osn-os10:write-os10-stream osn stream))))))))
|
|
||||||
|
|||||||
@ -19,6 +19,9 @@
|
|||||||
((:menu
|
((:menu
|
||||||
(("OSN File"
|
(("OSN File"
|
||||||
:callback 'application-interface-new-osn
|
:callback 'application-interface-new-osn
|
||||||
|
:callback-type :interface)
|
||||||
|
("XOSC File"
|
||||||
|
:callback 'application-interface-new-xosc
|
||||||
:callback-type :interface))
|
:callback-type :interface))
|
||||||
:title "New")
|
:title "New")
|
||||||
("Open ..."
|
("Open ..."
|
||||||
@ -155,6 +158,13 @@
|
|||||||
(make-instance 'osn-viewer :source (pathname pathname)
|
(make-instance 'osn-viewer :source (pathname pathname)
|
||||||
:osn-buffer osn))
|
:osn-buffer osn))
|
||||||
#'editor:find-file-buffer))
|
#'editor:find-file-buffer))
|
||||||
|
((string-equal (pathname-type pathname) "xosc")
|
||||||
|
(values "OpenScenario 1.0"
|
||||||
|
(lambda (xosc warnings pathname)
|
||||||
|
(declare (ignore warnings))
|
||||||
|
(make-instance 'xosc-viewer :source (pathname pathname)
|
||||||
|
:xosc-buffer xosc))
|
||||||
|
#'editor:find-file-buffer))
|
||||||
(t
|
(t
|
||||||
nil)))
|
nil)))
|
||||||
|
|
||||||
@ -167,7 +177,8 @@
|
|||||||
:operation :open
|
:operation :open
|
||||||
:if-does-not-exist :error
|
:if-does-not-exist :error
|
||||||
:filters '("OSN Files" "*.osn"
|
:filters '("OSN Files" "*.osn"
|
||||||
"Known Files" "*.osn"
|
"XOSC Files" "*.xosc"
|
||||||
|
"Known Files" "*.osn;*.xosc"
|
||||||
"All Files" "*.*")
|
"All Files" "*.*")
|
||||||
:filter "*.osn"
|
:filter "*.osn"
|
||||||
:ok-check 'probe-file
|
:ok-check 'probe-file
|
||||||
|
|||||||
169
src/xosc-viewer.lisp
Normal file
169
src/xosc-viewer.lisp
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
;;;; OpenScenarioNext --- OpenScenario Language Design
|
||||||
|
;;;; This is copyrighted software. See documentation for terms.
|
||||||
|
;;;;
|
||||||
|
;;;; xosc-viewer.lisp --- Generic XOSC Viewer User Interface
|
||||||
|
|
||||||
|
(cl:in-package #:openscenarionext-bench)
|
||||||
|
|
||||||
|
;;;; %File Description:
|
||||||
|
;;;;
|
||||||
|
;;;; XOSC Viewer/Editor
|
||||||
|
;;;;
|
||||||
|
|
||||||
|
(defun application-interface-new-xosc (interface &key content)
|
||||||
|
(capi:display
|
||||||
|
(make-instance 'xosc-viewer
|
||||||
|
:source nil
|
||||||
|
:xosc-buffer
|
||||||
|
(editor:make-buffer "Unknown" :temporary t
|
||||||
|
:contents content))
|
||||||
|
:screen
|
||||||
|
(derive-main-interface-screen interface)))
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; XOSC Viewer
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(defun xosc-maybe-parse-buffer (buffer)
|
||||||
|
nil)
|
||||||
|
|
||||||
|
(capi:define-interface xosc-viewer (document-interface)
|
||||||
|
((document-kind :initform "XOSC Viewer")
|
||||||
|
(document-icon :initform "FMIBenchFMD.ico")
|
||||||
|
(xosc-buffer :initarg :xosc-buffer :initform nil
|
||||||
|
:accessor xosc-viewer-xosc-buffer))
|
||||||
|
(:panes
|
||||||
|
(xosc-editor-pane
|
||||||
|
capi:editor-pane
|
||||||
|
:echo-area t
|
||||||
|
:change-callback
|
||||||
|
(lambda (pane point old-len new-len)
|
||||||
|
(declare (ignore point old-len new-len))
|
||||||
|
(setf (capi:graph-pane-roots xosc-graph-pane)
|
||||||
|
(xosc-maybe-parse-buffer
|
||||||
|
(capi:editor-pane-buffer pane))))
|
||||||
|
:buffer xosc-buffer)
|
||||||
|
(xosc-graph-pane
|
||||||
|
capi:graph-pane
|
||||||
|
:roots (xosc-maybe-parse-buffer xosc-buffer)
|
||||||
|
:print-function
|
||||||
|
(lambda (object)
|
||||||
|
(typecase object
|
||||||
|
(t (princ-to-string object))))
|
||||||
|
:children-function
|
||||||
|
(lambda (root)
|
||||||
|
(typecase root
|
||||||
|
(t nil)))))
|
||||||
|
(:layouts
|
||||||
|
(xosc-editor-layout
|
||||||
|
capi:column-layout
|
||||||
|
'(xosc-editor-pane))
|
||||||
|
(xosc-graph-layout
|
||||||
|
capi:column-layout
|
||||||
|
'(xosc-graph-pane))
|
||||||
|
(switchable-layout
|
||||||
|
capi:switchable-layout
|
||||||
|
'(xosc-editor-layout xosc-graph-layout))
|
||||||
|
(tab-layout
|
||||||
|
capi:tab-layout
|
||||||
|
'(switchable-layout)
|
||||||
|
:items (list
|
||||||
|
'("Editor" . xosc-editor-layout)
|
||||||
|
'("Graph" . xosc-graph-layout))
|
||||||
|
:print-function #'car
|
||||||
|
:callback-type :interface-data
|
||||||
|
:selection-callback
|
||||||
|
(lambda (interface item)
|
||||||
|
(let ((view (slot-value interface (cdr item))))
|
||||||
|
(setf (capi:switchable-layout-visible-child switchable-layout) view))))
|
||||||
|
(main-layout
|
||||||
|
capi:column-layout
|
||||||
|
'(tab-layout)))
|
||||||
|
(:menus
|
||||||
|
(file-menu
|
||||||
|
"File"
|
||||||
|
((:component
|
||||||
|
((:menu
|
||||||
|
(("OSN File"
|
||||||
|
:callback 'application-interface-new-osn
|
||||||
|
:callback-type :interface)
|
||||||
|
("XOSC File"
|
||||||
|
:callback 'application-interface-new-xosc
|
||||||
|
:callback-type :interface))
|
||||||
|
:title "New")
|
||||||
|
("Open ..."
|
||||||
|
:accelerator "accelerator-o"
|
||||||
|
:callback 'application-interface-open
|
||||||
|
:callback-type :interface)
|
||||||
|
("Close"
|
||||||
|
:accelerator "accelerator-w"
|
||||||
|
:callback 'capi:quit-interface
|
||||||
|
:callback-type :interface)))
|
||||||
|
(:component
|
||||||
|
(("Save"
|
||||||
|
:callback 'document-interface-save
|
||||||
|
:callback-type :interface
|
||||||
|
:enabled-function 'document-interface-save-p)
|
||||||
|
("Save As ..."
|
||||||
|
:callback 'document-interface-save-as
|
||||||
|
:callback-type :interface)))
|
||||||
|
(:component
|
||||||
|
(("Refresh From File"
|
||||||
|
:callback 'document-interface-refresh
|
||||||
|
:callback-type :interface
|
||||||
|
:enabled-function #'document-interface-source)))
|
||||||
|
(:component
|
||||||
|
(("Quit OSN Bench"
|
||||||
|
:accelerator "accelerator-q"
|
||||||
|
:callback 'quit-osn-bench
|
||||||
|
:callback-type :interface)))))
|
||||||
|
#+(or)
|
||||||
|
(xosc-menu
|
||||||
|
"XOSC"
|
||||||
|
(
|
||||||
|
#+(or)
|
||||||
|
(:component
|
||||||
|
(("Export Import Warnings to CSV ..."
|
||||||
|
:callback 'export-viewer-warnings-to-csv
|
||||||
|
:callback-type :interface
|
||||||
|
:enabled-function 'viewer-warnings)))
|
||||||
|
(:component
|
||||||
|
(("Export to XOSC ..."
|
||||||
|
:callback 'export-osn-to-xosc
|
||||||
|
:callback-type :interface
|
||||||
|
:enabled-function
|
||||||
|
(lambda (x)
|
||||||
|
(declare (ignore x))
|
||||||
|
(capi:graph-pane-roots osn-graph-pane))))))))
|
||||||
|
(:menu-bar file-menu #+(or) xosc-menu)
|
||||||
|
(:default-initargs
|
||||||
|
:layout 'main-layout
|
||||||
|
:best-width 900
|
||||||
|
:best-height 600))
|
||||||
|
|
||||||
|
(defmethod document-interface-title-details ((interface xosc-viewer))
|
||||||
|
"")
|
||||||
|
|
||||||
|
(defmethod document-interface-save-as-dialog ((interface xosc-viewer))
|
||||||
|
(capi:prompt-for-file "XOSC File"
|
||||||
|
:pathname (document-interface-source interface)
|
||||||
|
:operation :save
|
||||||
|
:if-exists :prompt
|
||||||
|
:if-does-not-exist :ok
|
||||||
|
:filters '("XOSC Files" "*.xosc"
|
||||||
|
"All Files" "*.*")
|
||||||
|
:filter "*.xosc"
|
||||||
|
:owner interface)
|
||||||
|
"osn")
|
||||||
|
|
||||||
|
(defmethod document-interface-save-internal ((interface xosc-viewer) pathname)
|
||||||
|
#+(or)
|
||||||
|
(csv-io:write-csv-file (csv-viewer-csv interface) pathname))
|
||||||
|
|
||||||
|
(defmethod document-interface-refresh-reader ((interface xosc-viewer) pathname)
|
||||||
|
#+(or)
|
||||||
|
(csv-io:read-csv-file pathname))
|
||||||
|
|
||||||
|
(defmethod document-interface-refresh-internal ((interface xosc-viewer) entity warnings)
|
||||||
|
(declare (ignore warnings))
|
||||||
|
(untouch-document-interface interface))
|
||||||
Reference in New Issue
Block a user