#!/bin/bash
# mcui/dialog - 'dialog' command backend
set -e
######
# Native dependencies
mcui_dialog_client_packages=( dialog )
######
# Configuration
mcui_dialog_config_init() {
lib_setting_vars dialog_height dialog_width
dialog_height=0
dialog_width=0
lib_setting_vars --null dialog_default_button
}
######
# Internal functions
dialog_run() {
local -a opts
! $mcui_separate_output || opts+=( --separate-output )
[ -z "$mcui_title" ] || opts+=( --title "$mcui_title" )
[ -z "$mcui_default" ] || opts+=( --default-item "$mcui_default" )
if [ "$mcui_label_yes" ]; then
opts+=( --yes-label "$mcui_label_yes" )
opts+=( --ok-label "$mcui_label_yes" )
opts+=( --exit-label "$mcui_label_yes" )
fi
[ -z "$mcui_label_no" ] || opts+=( --no-label "$mcui_label_no" )
[ -z "$mcui_label_continue" ] \
|| opts+=( --yes-label "$mcui_label_continue" )
[ -z "$dialog_default_button" ] \
|| opts+=( --default-button "$dialog_default_button" )
[ -z "$dialog_label_extra" ] \
|| opts+=( --extra-button --extra-label "$mcui_label_extra" )
run dialog "${opts[@]}" "$@"
}
dialog_run_out() { dialog_run "$1" "$2" $dialog_height $dialog_width; }
dialog_msgbox() { dialog_run_out --msgbox "$1"; }
dialog_capture() {
min_args 2 "$@"
local -n var=$1
shift
local tmp
tmp=$(cmd_tempfile)
"$@" 2>"$tmp"
if [ "$1" ]; then
local -n var=$1
var=$(<"$tmp")
fi
}
dialog_run_simple() {
has_args 3 "$@"
dialog_capture $1 dialog_run_out "$2" "$3"
}
dialog_run_simple_init() {
has_args 4 "$@"
dialog_capture $1 dialog_run "$2" "$3" $dialog_height $dialog_width "$4"
}
######
# Output UI functions
dialog_error_box() { dialog_msgbox "ERROR: $1"; }
dialog_error_details() { dialog_msgbox "ERROR: $1"$'\n'$'\n'"$2"; }
dialog_warn_box() { dialog_msgbox "WARN $1"; }
dialog_warn_details() { dialog_msgbox "WARN: $1"$'\n'$'\n'"$2"; }
dialog_info_box() { dialog_msgbox "$1"; }
dialog_text_box() { dialog_run_out --textbox "$1"; }
dialog_passive() { dialog_run_out --infobox "$1"; }
dialog_progress() {
[ "$2" != 'done' ] || return 0
dialog_run --guage "$1" $dialog_height $dialog_width "$2" </dev/null
}
######
# Prompt UI functions
dialog_prompt() {
local var=$1
shift
local result=0
dialog_run_out "$@" || result=$?
mcui_prompt_result "$var" "$result"
}
dialog_yesno() { dialog_prompt $1 --yesno "$2"; }
dialog_yesno_warn() {
local dialog_default_button=no
dialog_yesno $1 "CAUTION: $2"
}
dialog_yesnocancel() {
local dialog_extra_label="$mcui_label_cancel"
dialog_prompt $1 --yesno "$2"
}
dialog_yesnocancel_warn() {
local dialog_default_button=no
dialog_yesnocancel $1 "CAUTION: $2"
}
dialog_continue_cancel() {
local mcui_label_yes="$mcui_label_continue"
local mcui_label_no="$mcui_label_cancel"
dialog_prompt $1 --yesno "CAUTION: $2"
}
######
# Input UI functions
dialog_input() {
local var=$1
shift
dialog_run_simple_init $var --inputbox "$@"
}
dialog_input_text() {
local -n var=$1
dialog_msgbox "$2"
run_editor "$3"
var=$(<"$3")
}
dialog_askpass() {
local var=$1
shift
dialog_run_simple_init $var --passwordbox "$@"
}
dialog_menu() { dialog_run --menu "$@"; }
dialog_checklist() { dialog_run --checklist "$@"; }
dialog_radiolist() { dialog_run --radiolist "$@"; }
dialog_combobox() { dialog_run --buildlist "$@"; }
dialog_dir_choose() { dialog_run --dselect "$@"; }
dialog_file_open() { dialog_run --fselect "$@"; }
dialog_file_save() { dialog_run --fselect "$@"; }
dialog_calendar() { error "unimplemented"; }
dialog_slider() { error "unimplemented"; }
dialog_color() { error "unimplemented"; }
Generated on Tue Apr 25 21:21:02 PDT 2017 by mcsh i7 v0.18.0.