#!/bin/bash
# mcui/kdialog - 'kdialog' command backend

set -e


######
# Native dependencies

mcui_kdialog_client_packages=( kdialog )


######
# Config

mcui_kdialog_config_init() {
	lib_setting_vars --null kdialog_result

	lib_setting_vars --null kdialog_progress_window
	lib_setting_vars --null kdialog_progress_label
	lib_setting_vars --null kdialog_progress_value
}


######
# Internal functions

kdialog_run() {
	# TODO: add support for common options
	local -a opts

	! $mcui_separate_output || opts+=( --separate-output )

	if [ "$mcui_remember" ]; then
		local file="${package_name}-${script_name}"
		opts+=( --dontagain "$file:$mcui_remember" )
	fi

	[ -z "$mcui_title" ] || opts+=( --title "$script_name - $mcui_title" )
	[ -z "$mcui_default" ] || opts+=( --default "$mcui_default" )

	[ -z "$mcui_label_yes" ] || opts+=( --yes-label "$mcui_label_yes" )
	[ -z "$mcui_label_no" ] || opts+=( --no-label "$mcui_label_no" )
	[ -z "$mcui_label_continue" ] \
		|| opts+=( --continue-label "$mcui_label_continue" )
	[ -z "$mcui_label_cancel" ] \
		|| opts+=( --cancel-label "$mcui_label_cancel" )

	! $mcui_multiple || opts+=( --multiple )

	kdialog_result=0
	run kdialog "${opts[@]}" "$@" || kdialog_result=$?
}

kdialog_run_input() {
	min_args 2 "$@"
	local -n var=$1
	shift
	local tmp
	tmp=$(cmd_tempfile)
	kdialog_run "$@" >"$tmp"
	var=$(<"$tmp")
}

kdialog_run_prompt() {
	local var=$1
	kdialog_run_input "$@"
	mcui_prompt_result "$var" "$kdialog_result"
}


######
# Output UI functions

kdialog_error_box() { kdialog_run --error "$@"; }
kdialog_error_details() { kdialog_run --detailederror "$@"; }

kdialog_warn_box() { kdialog_run --sorry "$@"; }
kdialog_warn_details() { kdialog_run --detailedsorry "$@"; }

kdialog_info_box() { kdialog_run --msgbox "$@"; }
kdialog_text_box() { kdialog_run --textbox "$@"; }

kdialog_passive() { kdialog_run --passivepopup "$@"; }

run_qdbus() { run qdbus "$@" >/dev/null; }

kdialog_progress() {
	if [ -z "$kdialog_progress_window" ]; then
		kdialog_run_input kdialog_progress_window --progressbar "$1" 100
		kdialog_progress_label=$1
		kdialog_progress_value=0
	fi
	if [ "$2" = done ]; then
		run_qdbus $kdialog_progress_window close
		kdialog_progress_window=
		kdialog_progress_label=
		kdialog_progress_value=
		return
	fi
	if [ "$1" != "$kdialog_progress_label" ]; then
		run_qdbus $kdialog_progress_window setLabelText "$1"
		kdialog_progress_label=$1
	fi
	if [ "$2" != "$kdialog_progress_value" ]; then
		run_qdbus $kdialog_progress_window Set "" value "$2"
		kdialog_progress_value=$2
	fi
}


######
# Prompt UI functions

kdialog_yesno() { kdialog_run_prompt $1 --yesno "$2"; }
kdialog_yesno_warn() { kdialog_run_prompt $1 --warningyesno "$2"; }

kdialog_yesnocancel() { kdialog_run_prompt $1 --yesnocancel "$2"; }
kdialog_yesnocancel_warn() { kdialog_run_prompt $1 --warningyesnocancel "$2"; }

kdialog_continue_cancel() {
	kdialog_run_prompt $1 --warningcontinuecancel "$2"
}


######
# Input UI functions

kdialog_input() { kdialog_run_input $1 --inputbox "$2" "$3"; }
kdialog_input_text() { kdialog_run_input $1 --textinputbox "$2" "$(<"$3")"; }
kdialog_askpass() { kdialog_run_input $1 --password "$2" "$3"; }

kdialog_menu() { kdialog_run --menu "$@"; }
kdialog_checklist() { kdialog_run --checklist "$@"; }
kdialog_radiolist() { kdialog_run --radiolist "$@"; }
kdialog_combobox() { kdialog_run --combobox "$@"; }

kdialog_dir_choose() { kdialog_run --getexistingdirectory "$@"; }
kdialog_file_open() { kdialog_run --getopenfilename "$@"; }
kdialog_file_save() { kdialog_run --getsavefilename "$@"; }

kdialog_calendar() { kdialog_run --calendar "$@"; }
kdialog_slider() { kdialog_run --slider "$@"; }
kdialog_color() { kdialog_run --getcolor; }

View the Script Reference Index


Generated on Tue Apr 25 21:21:03 PDT 2017 by mcsh i7 v0.18.0.