(ns bugdock
(:import (org.eclipse.swt SWT)
(org.eclipse.swt.widgets Display Shell Menu MenuItem TrayItem Listener)
(org.eclipse.swt.graphics Image)))
(defmacro unless [cond & body]
`(when (not ~cond)
~@body))
(defmacro while [cond & body]
`(when ~cond
(loop []
~@body
(when ~cond
(recur)))))
(defmacro with-swt [[display-var shell-var] & body]
`(let [~display-var (new Display)
~shell-var (new Shell ~display-var)]
~@body
(.open ~shell-var)
(while (not (.isDisposed ~shell-var))
(if (not (.readAndDispatch ~display-var))
(.sleep ~display-var)))))
(defmacro proxy-listener [arg-list & body]
`(proxy [Listener] []
(handleEvent ~arg-list
~@body)))
(defn main []
(with-swt [display shell]
(let [image (new Image display 16 16)
tray (.getSystemTray display)
item (new TrayItem tray (.NONE SWT))
menu (new Menu shell (.POP_UP SWT))]
(doto item
(setToolTipText "SWT TrayItem")
(addListener (.Show SWT)
(proxy-listener [e]
(println "Show")))
(addListener (.Hide SWT)
(proxy-listener [e]
(println "Hide")))
(addListener (.Selection SWT)
(proxy-listener [e]
(println "Selection")))
(addListener (.DefaultSelection SWT)
(proxy-listener [e]
(println "Default selection"))))
(dotimes i 8
(let [mi (new MenuItem menu (.PUSH SWT))]
(doto mi
(setText (str "Item" i))
(addListener (.Selection SWT)
(proxy-listener [e]
(println (str "selection " (.widget e))))))
(when (= 0 i)
(.setDefaultItem menu mi))))
(doto item
(addListener (.MenuDetect SWT)
(proxy-listener [e]
(.setVisible menu true)))
(setImage image)))
(.setBounds shell 50 50 300 200)))
(main)
(defmacro proxy-listener [arg-list & body]
`(proxy [Listener] []
(~'handleEvent ~arg-list ~@body)))(ns bugdock
(:import (org.eclipse.swt SWT)
(org.eclipse.swt.widgets Display Shell Menu MenuItem TrayItem Listener)
(org.eclipse.swt.graphics Image)))
(defmacro unless [cond & body]
`(when (not ~cond)
~@body))
(defmacro while [cond & body]
`(when ~cond
(loop []
~@body
(when ~cond
(recur)))))
(defmacro with-swt [[display-var shell-var] & body]
`(let [~display-var (new Display)
~shell-var (new Shell ~display-var)]
~@body
(.open ~shell-var)
(while (not (.isDisposed ~shell-var))
(unless (.readAndDispatch ~display-var)
(.sleep ~display-var)))))
(defmacro proxy-listener [arg-list & body]
`(proxy [Listener] []
(handleEvent ~arg-list
~@body)))
(defn main []
(with-swt [display shell]
(let [image (new Image display 16 16)
tray (.getSystemTray display)
item (new TrayItem tray SWT/NONE)
menu (new Menu shell SWT/POP_UP)]
(doto item
(setToolTipText "SWT TrayItem")
(addListener SWT/Show
(proxy-listener [e]
(println "Show")))
(addListener SWT/Hide
(proxy-listener [e]
(println "Hide")))
(addListener SWT/Selection
(proxy-listener [e]
(println "Selection")))
(addListener SWT/DefaultSelection
(proxy-listener [e]
(println "Default selection"))))
(dotimes i 8
(let [mi (new MenuItem menu SWT/PUSH)]
(doto mi
(setText (str "Item" i))
(addListener (.Selection SWT)
(proxy-listener [e]
(println (str "selection " (.widget e))))))
(when (= 0 i)
(.setDefaultItem menu mi))))
(doto item
(addListener SWT/MenuDetect
(proxy-listener [e]
(.setVisible menu true)))
(setImage image)))
(.setBounds shell 50 50 300 200)))
(main)