(in-package :custom) (use-package :oli) (defun ribbon-tab-icon-test-init (iconDir) "Collects all .png and .bmp files in the specified directory and generates a ribbon-tab with the different button types (large, small, single or grouped)." (let ( iconFile uniqueCmdName (cntent '()) (colIcnLst (make-icon-file-lst iconDir))) (if (> (length colIcnLst) 0) (progn (when (sd-fluentui-ribbon-tab-exist-p "icon-test.ribbontab") (sd-fluentui-destroy-ribbon-tab "icon-test.ribbontab") (sd-fluentui-recalc-ribbon-layout)) (create-ribbon-tab) (create-ribbon-groups) (dolist (iconFile colIcnLst) (setq uniqueCmdName (sd-gen-unique-filename "")) (define-avail-cmds iconFile uniqueCmdName) (create-ribbon-button-sng-lrg iconFile uniqueCmdName) (create-ribbon-button-sng-sml iconFile uniqueCmdName) (push `(:availCmd ("SOLIDDESIGNER" "Icon test" ,uniqueCmdName)) cntent)) (create-ribbon-button-grp-lrg cntent) (create-ribbon-button-grp-sml cntent) (sd-fluentui-recalc-ribbon-layout) (sd-fluentui-set-active-ribbon-tab "icon-test.ribbontab")) (if (sd-directory-p iconDir) (sd-display-error (format nil "Could not find any .png or .bmp files in~%~a." iconDir)) (sd-display-error (format nil "Could not find the directory~%~a." iconDir)))))) (defun make-icon-file-lst (iconDir) (let (sngDirItem (colIcnLst '()) (dirList (directory (format nil "~A/*" iconDir)))) (dolist (sngDirItem dirList) (when (and (not (sd-directory-p (namestring sngDirItem))) (or (sd-string-match-pattern-p "*.bmp" (namestring sngDirItem)) (sd-string-match-pattern-p "*.png" (namestring sngDirItem)))) (push sngDirItem colIcnLst))) colIcnLst)) (defun define-avail-cmds (iconFile uniqueCmdName) (sd-define-available-command "SOLIDDESIGNER" "Icon test" uniqueCmdName :groupTitle "Icon test" :commandTitle "Icon test" :action "cancel" :description "Watch me i'm your shiny brand new icon." :image (format nil "~a" iconFile) :ui-behavior :default)) (defun create-ribbon-tab () (sd-fluentui-add-ribbon-tab "icon-test.ribbontab" :application "SolidDesigner" :title "Icon test tab" :position 7 :appendUtilitiesGroup nil)) (defun create-ribbon-groups () (sd-fluentui-add-ribbon-group "icon-test.ribbontab.group.sng.lrg" :parent "icon-test.ribbontab" :title "Icons large single") (sd-fluentui-add-ribbon-group "icon-test.ribbontab.group.sng.sml" :parent "icon-test.ribbontab" :title "Icons small single") (sd-fluentui-add-ribbon-group "icon-test.ribbontab.group.grp.lrg" :parent "icon-test.ribbontab" :title "Icons large group") (sd-fluentui-add-ribbon-group "icon-test.ribbontab.group.grp.sml" :parent "icon-test.ribbontab" :title "Icons small group")) (defun create-ribbon-button-sng-lrg (iconFile uniqueCmdName) (sd-fluentui-add-ribbon-button :parent '("icon-test.ribbontab" "icon-test.ribbontab.group.sng.lrg") :largeImage t :name "Icon-test" :label "Icon-test" :availCmd `("SOLIDDESIGNER" "Icon test" ,uniqueCmdName))) (defun create-ribbon-button-sng-sml (iconFile uniqueCmdName) (sd-fluentui-add-ribbon-button :parent '("icon-test.ribbontab" "icon-test.ribbontab.group.sng.sml") :largeImage nil :name "Icon-test" :label "Icon-test" :availCmd `("SOLIDDESIGNER" "Icon test" ,uniqueCmdName))) (defun create-ribbon-button-grp-lrg (cntent) (sd-fluentui-add-ribbon-button :parent '("icon-test.ribbontab" "icon-test.ribbontab.group.grp.lrg") :label "Icon-test-grp-lrg" :splitButton t :largeImage t :contents cntent)) (defun create-ribbon-button-grp-sml (cntent) (sd-fluentui-add-ribbon-button :parent '("icon-test.ribbontab" "icon-test.ribbontab.group.grp.sml") :label "Icon-test-grp-sml" :splitButton t :largeImage nil :contents cntent)) ;(ribbon-tab-icon-test-init "C:/temp/test")