videocapture.gui-util - Videocapture
Table of Contents
1 Namespace videocapture.gui-util
This namespace provides GUI helper functions to provide information to the user.
2 Messages
These functions show messages to the user to make him aware of background processes, progress and errors.
(s/def ::type #{:information :warning :error})
(def types {:information (Alert$AlertType/INFORMATION)
:warning (Alert$AlertType/WARNING)
:error (Alert$AlertType/ERROR)})
2.1 Notifications
Notifications are popups shown at the bottom center of the screen. They show shorter messages that do not need intervention by the user and disappear after a few seconds.
(defn notification
"Shows a self-closing notification popup at the bottom center of the screen."
[type title text]
{:pre [(s/valid? ::type type) (string? title) (string? text)]}
(debug title text)
(fx/run-later (let [note (.. Notifications
create
(title title)
(text text)
hideCloseButton
(position Pos/BOTTOM_CENTER))]
(case type
:information (.showInformation note)
:error (.showError note)))))
2.2 Alerts
Alerts are classic dialog boxes that block progress until the user intervenes.
(defn alert [type title text]
{:pre [(s/valid? ::type type) (string? title) (string? text)]}
(debug text)
(fx/run-now (let [alertbox (new Alert (type types))]
(.setTitle alertbox title)
(.setResizable alertbox true)
(.setContentText alertbox text)
(.setMinHeight (.getDialogPane alertbox) Region/USE_PREF_SIZE)
(.setMinWidth (.getDialogPane alertbox) Region/USE_PREF_SIZE)
(.. alertbox getDialogPane getScene getWindow sizeToScene)
(.showAndWait alertbox))))
3 Masking Pane
(defn unmask [instance] (fx/run-now (.setMouseTransparent (.-maskerPane instance) true) (.setOpacity (.-maskerPane instance) 0))) (defn mask [instance & [text]] (fx/run-now (.setMouseTransparent (.-maskerPane instance) false) (.setText (.-maskerPane instance) (or text "Bitte warten...")) (.setOpacity (.-maskerPane instance) 1)))
4 Complete namespace definition
(ns videocapture.gui-util (:require [clojurefx.clojurefx :as fx] [clojure.core.async :as async :refer [go chan >! <!]] [taoensso.timbre :as timbre :refer [log trace debug info warn error fatal report logf tracef debugf infof warnf errorf fatalf reportf spy get-env]] [clojure.spec.alpha :as s]) (:import (javafx.scene.control Alert$AlertType Alert) (javafx.geometry Pos) (org.controlsfx.control Notifications) (javafx.scene.layout Region))) <<types>> <<notifications>> <<alerts>> <<masking-pane>>