#!/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"; }

View the Developer Guide Index

View the Reference Manual Index


Generated on Tue Jul 4 17:00:50 PDT 2017 by mcsh d14 v0.21.0.