Window close and window menu improvements

This commit is contained in:
David Botton 2021-02-14 21:37:06 -05:00
parent 84559b57c5
commit 43c4f7adf8
3 changed files with 31 additions and 12 deletions

View file

@ -516,11 +516,7 @@ on-window-resize-done at end of resize."))
(set-on-click (closer win) (lambda (obj) (set-on-click (closer win) (lambda (obj)
(declare (ignore obj)) (declare (ignore obj))
(when (fire-on-window-can-close win) (when (fire-on-window-can-close win)
(remhash (format nil "~A" html-id) (window-close win))))
(windows app))
(remove-from-dom win)
(fire-on-window-change nil app)
(fire-on-window-close win))))
(cond (client-movement (cond (client-movement
(jquery-execute win (jquery-execute win
(format nil "draggable({handle:'#~A-title-bar'})" html-id)) (format nil "draggable({handle:'#~A-title-bar'})" html-id))
@ -594,6 +590,21 @@ on-window-resize-done at end of resize."))
(setf (z-index obj) (incf (last-z app))) (setf (z-index obj) (incf (last-z app)))
(fire-on-window-change obj app))) (fire-on-window-change obj app)))
;;;;;;;;;;;;;;;;;;
;; window-close ;;
;;;;;;;;;;;;;;;;;;
(defgeneric window-close (clog-gui-window)
(:documentation "Close CLOG-GUI-WINDOW. on-window-can-close is not called."))
(defmethod window-close ((obj clog-gui-window))
(let ((app (connection-data-item obj "clog-gui")))
(remhash (format nil "~A" (html-id obj)) (windows app))
(remove-from-dom (window-select-item obj))
(remove-from-dom obj)
(fire-on-window-change nil app)
(fire-on-window-close obj)))
;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;
;; window-maximize ;; ;; window-maximize ;;
;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;
@ -613,14 +624,15 @@ on-window-resize-done at end of resize."))
(setf (left obj) (unit :px 0)) (setf (left obj) (unit :px 0))
(setf (width obj) (unit :vw 100)) (setf (width obj) (unit :vw 100))
(setf (height obj) (setf (height obj)
(- (inner-height (window (body app))) menu-bar-height))))) (- (inner-height (window (body app))) menu-bar-height))
(fire-on-window-size-done obj))))
;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;
;; window-normalize ;; ;; window-normalize ;;
;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;
(defgeneric window-normalize (clog-gui-window) (defgeneric window-normalize (clog-gui-window)
(:documentation "Set CLOG-GUI-WINDOW as maximize window.")) (:documentation "Set CLOG-GUI-WINDOW as normalized window."))
(defmethod window-normalize ((obj clog-gui-window)) (defmethod window-normalize ((obj clog-gui-window))
(window-focus obj) (window-focus obj)
@ -629,14 +641,15 @@ on-window-resize-done at end of resize."))
(setf (height obj) (last-height obj)) (setf (height obj) (last-height obj))
(setf (top obj) (last-y obj)) (setf (top obj) (last-y obj))
(setf (left obj) (last-x obj)) (setf (left obj) (last-x obj))
(setf (last-width obj) nil))) (setf (last-width obj) nil)
(fire-on-window-size-done obj)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; window-toggle-maximize ;; ;; window-toggle-maximize ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defgeneric window-toggle-maximize (clog-gui-window) (defgeneric window-toggle-maximize (clog-gui-window)
(:documentation "Set CLOG-GUI-WINDOW as maximize window.")) (:documentation "Toggle CLOG-GUI-WINDOW as maximize window."))
(defmethod window-toggle-maximize ((obj clog-gui-window)) (defmethod window-toggle-maximize ((obj clog-gui-window))
(let ((app (connection-data-item obj "clog-gui"))) (let ((app (connection-data-item obj "clog-gui")))
@ -656,8 +669,8 @@ on-window-resize-done at end of resize."))
(setf (left obj) (unit :px 0)) (setf (left obj) (unit :px 0))
(setf (width obj) (unit :vw 100)) (setf (width obj) (unit :vw 100))
(setf (height obj) (setf (height obj)
(- (inner-height (window (body app))) menu-bar-height)))))) (- (inner-height (window (body app))) menu-bar-height))))
(fire-on-window-size-done obj)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; set-on-window-can-close ;; ;; set-on-window-can-close ;;

View file

@ -676,6 +676,7 @@ embedded in a native template application.)"
(window-title generic-function) (window-title generic-function)
(window-content generic-function) (window-content generic-function)
(window-focus generic-function) (window-focus generic-function)
(window-close generic-function)
(window-maximize generic-function) (window-maximize generic-function)
(window-normalize generic-function) (window-normalize generic-function)
(window-toggle-maximize generic-function) (window-toggle-maximize generic-function)

View file

@ -42,7 +42,7 @@
(ok (create-button form :content "OK"))) (ok (create-button form :content "OK")))
(set-on-click ok (lambda (obj) (set-on-click ok (lambda (obj)
(declare (ignore obj)) (declare (ignore obj))
(remove-from-dom win) (window-close win)
(funcall on-file-name (value input)))))) (funcall on-file-name (value input))))))
(defun capture-eval (form) (defun capture-eval (form)
@ -63,6 +63,9 @@
(set-on-window-size win (lambda (obj) (set-on-window-size win (lambda (obj)
(js-execute obj (js-execute obj
(format nil "editor_~A.resize()" (html-id win))))) (format nil "editor_~A.resize()" (html-id win)))))
(set-on-window-size-done win (lambda (obj)
(js-execute obj
(format nil "editor_~A.resize()" (html-id win)))))
(create-child win (create-child win
(format nil (format nil
"<script> "<script>
@ -174,6 +177,7 @@
(file (create-gui-menu-drop-down menu :content "File")) (file (create-gui-menu-drop-down menu :content "File"))
(edit (create-gui-menu-drop-down menu :content "Edit")) (edit (create-gui-menu-drop-down menu :content "Edit"))
(lisp (create-gui-menu-drop-down menu :content "Lisp")) (lisp (create-gui-menu-drop-down menu :content "Lisp"))
(wind (create-gui-menu-drop-down menu :content "Window"))
(help (create-gui-menu-drop-down menu :content "Help"))) (help (create-gui-menu-drop-down menu :content "Help")))
(declare (ignore icon)) (declare (ignore icon))
(create-gui-menu-item file :content "New" :on-click #'do-ide-file-new) (create-gui-menu-item file :content "New" :on-click #'do-ide-file-new)
@ -184,6 +188,7 @@
(create-gui-menu-item edit :content "Cut" :on-click #'do-ide-edit-cut) (create-gui-menu-item edit :content "Cut" :on-click #'do-ide-edit-cut)
(create-gui-menu-item edit :content "Paste" :on-click #'do-ide-edit-paste) (create-gui-menu-item edit :content "Paste" :on-click #'do-ide-edit-paste)
(create-gui-menu-item lisp :content "Eval File" :on-click #'do-ide-lisp-eval-file) (create-gui-menu-item lisp :content "Eval File" :on-click #'do-ide-lisp-eval-file)
(create-gui-menu-window-select wind)
(create-gui-menu-item help :content "About" :on-click #'do-ide-help-about) (create-gui-menu-item help :content "About" :on-click #'do-ide-help-about)
(create-gui-menu-full-screen menu)) (create-gui-menu-full-screen menu))
(run body)) (run body))