(let ((root (progress-display-root bar)))
(within-main-loop-and-wait (container-remove (progress-window-box root) (progress-display-bar bar)))))
+(defun format-duration (stream seconds colon-modifier-p at-sign-modifier-p)
+ (declare (ignore colon-modifier-p at-sign-modifier-p))
+ (let ((seconds (mod (truncate seconds) 60))
+ (minutes (mod (truncate seconds 60) 60))
+ (hours (truncate seconds 3600)))
+ (format stream "~2,'0D:~2,'0D:~2,'0D" hours minutes seconds)))
+
(defun update-progress-bar-text (bar &optional (lower-frac 0.0))
(let* ((elapsed (coerce (/ (- (get-internal-real-time)
(progress-display-time-started bar))
(process-rate (coerce (/ elapsed (+ lower-frac (progress-display-current bar))) 'double-float))
(total-time (coerce (* (progress-display-count bar) process-rate) 'double-float)))
(setf (progress-bar-text (progress-display-bar bar))
- (format nil "~A (~$ of ETA ~$)" (progress-display-name bar) elapsed total-time))))
+ (format nil "~A (~/gtk::format-duration/; ETA ~/gtk::format-duration/)" (progress-display-name bar) elapsed total-time))))
(defun update-progress-bar-texts (bar &optional (lower-frac 0.0))
(when bar
(export 'with-progress-bar-action)
(defun test-progress ()
- (with-progress-bar ("Snowball" 4)
+ (with-progress-bar ("Snowball" 10)
(loop
- repeat 4
+ repeat 10
do (with-progress-bar-action
(with-progress-bar ("Texts" 10)
(loop
repeat 10
- do (with-progress-bar-action (sleep 1))))))))
\ No newline at end of file
+ do (with-progress-bar-action (sleep 1))))))))
+
+(defun show-message (message &key (buttons :ok) (message-type :info) (use-markup nil))
+ (let ((dialog (make-instance 'message-dialog
+ :text message
+ :buttons buttons
+ :message-type message-type
+ :use-markup use-markup)))
+ (prog1
+ (dialog-run dialog)
+ (object-destroy dialog))))
+
+(export 'show-message)