diff --git a/clog.asd b/clog.asd index 1a9a54b..6eac9dd 100644 --- a/clog.asd +++ b/clog.asd @@ -63,6 +63,7 @@ (:file "systems") (:file "sys-browser") (:file "projects") + (:file "project-directory") (:file "clog-builder-repl") (:file "dir-view") ;; clog-builder code diff --git a/tools/clog-builder-templates.lisp b/tools/clog-builder-templates.lisp index d2eddf6..9e1de89 100644 --- a/tools/clog-builder-templates.lisp +++ b/tools/clog-builder-templates.lisp @@ -13,31 +13,34 @@ (www-dir (format nil "~A~A" (asdf:system-source-directory :clog) (getf tmpl-rec :www)))) - (setf (hiddenp panel) t) + (setf (hiddenp (win panel)) t) (input-dialog (win panel) "Enter new system name:" (lambda (sys-name) (cond (sys-name - (let ((fname (if (uiop:directory-exists-p #P"~/common-lisp/") - #P"~/common-lisp/" - (car ql:*local-project-directories*)))) - (server-file-dialog - (win panel) "Output Directory" fname - (lambda (filename) - (cond (filename - (cond ((uiop:directory-exists-p (format nil "~A~A" filename sys-name)) - (clog-gui:alert-toast (win panel) "Cancel" "Canceled - Project directory exists") - (window-close (win panel))) + (let* ((pwin (create-gui-window panel :title "Local Project Directory" + :width 500 :height 250)) + (prjs (create-project-dir (window-content pwin)))) + (window-center pwin) + (setf (on-done prjs) + (lambda (obj) + (declare (ignore obj)) + (let ((filename (value (project-list prjs)))) + (window-close pwin) + (cond (filename + (cond ((uiop:directory-exists-p (format nil "~A~A" filename sys-name)) + (clog-gui:alert-toast (win panel) "Cancel" "Canceled - Project directory exists") + (window-close (win panel))) + (t + (template-copy sys-name start-dir filename :panel (window-content (win panel))) + (when (getf tmpl-rec :www) + (template-copy sys-name www-dir filename :panel (window-content (win panel)))) + (asdf:clear-source-registry) + (when (project-win app) + (clog-gui:window-close (project-win app))) + (on-show-project panel :project sys-name) + (create-div (window-content (win panel)) :content "
done.")))) (t - (template-copy sys-name start-dir filename :panel (window-content (win panel))) - (when (getf tmpl-rec :www) - (template-copy sys-name www-dir filename :panel (window-content (win panel)))) - (asdf:clear-source-registry) - (when (project-win app) - (clog-gui:window-close (project-win app))) - (on-show-project panel :project sys-name) - (create-div (window-content (win panel)) :content "
done.")))) - (t - (window-close (win panel)))))))) + (window-close (win panel))))))))) (t (window-close (win panel)))))))) diff --git a/tools/clog-builder.lisp b/tools/clog-builder.lisp index 5fce4fe..58b3f66 100644 --- a/tools/clog-builder.lisp +++ b/tools/clog-builder.lisp @@ -1993,7 +1993,8 @@ It parse the string TEXT without using READ functions." (save obj nil)) (t (setf is-dirty nil) - (window-close win))))) + (window-close win)))) + :ok-text "Yes" :cancel-text "No") nil) (t t)))) @@ -2689,7 +2690,8 @@ It parse the string TEXT without using READ functions." (setf is-dirty nil) (when result (save obj nil)) - (window-close win))) + (window-close win)) + :ok-text "Yes" :cancel-text "No") nil) (t t)))) diff --git a/tools/project-directory.clog b/tools/project-directory.clog new file mode 100644 index 0000000..d8d9c85 --- /dev/null +++ b/tools/project-directory.clog @@ -0,0 +1,2 @@ +
\ No newline at end of file diff --git a/tools/project-directory.lisp b/tools/project-directory.lisp new file mode 100644 index 0000000..b32b395 --- /dev/null +++ b/tools/project-directory.lisp @@ -0,0 +1,39 @@ +;;;; CLOG Builder generated code - modify original clog file +(in-package :clog-tools) +(defclass project-dir (clog:clog-panel) + ((select-button :reader select-button) + (project-list :reader project-list) (frame :reader frame) + (on-done :accessor on-done :initform nil))) +(defun create-project-dir + (clog-obj &key (hidden nil) (class nil) (html-id nil) (auto-place t)) + (let ((panel + (change-class + (clog:create-div clog-obj :content + "
" + :hidden hidden :class class :html-id html-id + :auto-place auto-place) + 'project-dir))) + (setf (slot-value panel 'select-button) + (attach-as-child clog-obj "CLOGB3871639551" :clog-type + 'clog:clog-button :new-id t)) + (setf (slot-value panel 'project-list) + (attach-as-child clog-obj "CLOGB3871639550" :clog-type + 'clog:clog-select :new-id t)) + (setf (slot-value panel 'frame) + (attach-as-child clog-obj "CLOGB3871639549" :clog-type + 'clog:clog-div :new-id t)) + (let ((target (project-list panel))) + (declare (ignorable target)) + (add-select-options (project-list panel) + quicklisp-client:*local-project-directories*) + (setf (value (project-list panel)) + (car quicklisp-client:*local-project-directories*))) + (clog:set-on-double-click (project-list panel) + (lambda (target) + (declare (ignorable target)) + (funcall (on-done panel) panel))) + (clog:set-on-click (select-button panel) + (lambda (target) + (declare (ignorable target)) + (funcall (on-done panel) panel))) + panel)) \ No newline at end of file