#!/usr/bin/bash
#
# Helper Library for scripts

export PATH=/usr/lib/magicos/scripts:/usr/lib/qt4/bin:$PATH

PREFIX=none
[ -f /usr/bin/zenity ] && PREFIX=NONKDE
if [ -n "$KDE_SESSION_UID" -o -n "$(ps -A |grep startkde)" ] ; then
[ -f /usr/bin/kdialog ] && PREFIX=KDE
else

# if session is not KDE, but zenity is not exist - use kdialog
[ $PREFIX == none ] &&  [ -f /usr/bin/kdialog ] && PREFIX=KDE
fi

[ $PREFIX == none ] && echo "No zenity and kdialog in system" && exit -1

# start mdialog with xuserrun if 
if [ "$(id -un)" = "root" ] ;then
xuserrun  $0 "$@" ; exit
fi

KDE--msgbox () {
kdialog --msgbox "$2"
} 
NONKDE--msgbox () {
zenity --info --text="$2"
} 

KDE--sorry () {
kdialog --sorry "$2"
} 
NONKDE--sorry () {
zenity --warning --text="$2"
} 

KDE--error () {
kdialog --error "$2"
} 
NONKDE--error () {
zenity --error --text="$2"
} 

KDE--yesno () {
kdialog --yesno "$2"
} 
NONKDE--yesno () {
zenity --question --text="$2"
} 

KDE--inputbox () {
kdialog --inputbox "$2" "$3"
} 
NONKDE--inputbox () {
zenity --entry --text="$2" --entry-text="$3"
} 

KDE--textbox () {
kdialog --textbox "$2"
} 
NONKDE--textbox () {
zenity --text-info --filename="$2"
} 

# параметр работает как в zenity читает из файла
KDE--textinputbox () {
kdialog --textinputbox  "Просмотр текста" "$(cat $2)"
} 
NONKDE--textinputbox () {
zenity --text-info --editable --filename="$2"
} 

KDE--passivepopup () {
kdialog --passivepopup "$2" 5
} 
NONKDE--passivepopup () {
notify-send "$2" || zenity --notification --text="$2"
} 

KDE--getopenfilename () {
kdialog --getopenfilename `pwd`  
} 
NONKDE--getopenfilename () {
zenity --file-selection 
} 

KDE--getsavefilename () {
shift
filter=$1
shift
kdialog --getsavefilename `pwd` $filter $@
} 
NONKDE--getsavefilename () {
shift
filter=$1
shift
zenity --file-selection --save --file-filter=$filter $@
} 

KDE--getexistingdirectory  () {
shift
dir_name=`pwd`
if [ ! "$1" = "" ]; then 
    dir_name=$1 
fi
kdialog --getexistingdirectory $dir_name
}
NONKDE--getexistingdirectory  () {
shift
dir_name=$(pwd)
if [ ! "$1" = "" ]; then 
    dir_name=$1 
fi
cd $dir_name
zenity --file-selection --directory
} 

KDE--calendar () {
kdialog --calendar "$2"  
} 
NONKDE--calendar () {
zenity --calendar  --date-format=%a" "%B" "%d" "%Y --text="$2" 
} 


KDE--menu () {
shift
kdialog --menu $@  
} 
NONKDE--menu () {
text=$2
shift 2
zenity --list --text=$text --column=1  --column=2 --hide-header --print-column=1 --hide-column=1 $@
exit 
} 


KDE--progressbar () {  
stdifs=$IFS
dbusRef=`kdialog --progressbar "Подождите, пожалуйста...." $#`
inc=1
shift
for arg in "$@"; do  
qdbus $dbusRef Set "" value $inc
IFS=: 
$arg
IFS=$stdifs
inc=`expr $inc + 1`
done
qdbus $dbusRef Set "" value $inc
sleep 1
qdbus $dbusRef close 
exit 0
} 

NONKDE--progressbar () {
IFS=:
shift
per=$(expr 100 / $#)
[ $per -eq 0 ] && per=1
inc=$per
> /tmp/progress.tmp
for arg in "$@" ; do
echo "$inc"
sleep 0.1
$arg  >> /tmp/progress.tmp
inc=$(expr $per + $inc) > /dev/null
done | zenity --progress  --auto-close  --percentage=0 --text="Подождите, пожалуйста..." 
cat /tmp/progress.tmp
rm -f /tmp/progress.tmp
}
 

HELP () {
echo  "Скрипт $0, автоматически использует для создания графического интерфеса"
echo  "zenity либо kdialog, в зависимости от их наличия и среды KDE, MATE, и т.д."
echo  "Синтаксис максимально повторяет kdialog, но есть и расхождения."

echo  "--yesno <text>            Вопросительный диалог с кнопками да/нет"
echo  "--sorry <text>            Диалог с сообщением об ошибке"
echo  "--error <text>            Диалог "Ошибка""
echo  "--msgbox <text>           Информационный диалог"
echo  "--inputbox <text> <init>  Диалог ввода"
echo  "--textbox <file>  Диалог с текстом"
echo  "--textinputbox <text> <file> Диалог ввода текста (отличается от kdialog)"
echo  "--menu <text> [tag item] [tag item] ... Диалог с меню"
echo  "--passivepopup <text>  Пассивное всплывающее окно"
echo  "--getopenfilename   Диалог открытия существующего файла (начальный каталог - текущий)"
echo  "--getsavefilename [filter]  Диалог сохранения файла (начальный каталог - текущий)"
echo  "--getexistingdirectory [dir] Диалог выбора существующего каталога (начальный каталог - текущий или [dir])"
echo  "--progressbar Отличается от zenity/kdialog. mdialog --progressbar команда1:параметр1:параметр2 команда2:параметр1 и т.д."
echo  "              Избегайте пробелов в именах файлов. Варинт не идеален, предложите лучше изменим :-)"
echo  "--calendar    Диалог с календарём, возвращает выбранную дату."
exit
}

TEST () {
echo "команда mdialog --msgbox \"error и sorry использовать аналогично\""
mdialog --msgbox "error и sorry использовать аналогично"
echo "команда mdialog --yesno \"возвращает 0 либо 1 зависимо от нажатой кнопки\""
mdialog --yesno "возвращает 0 либо 1 зависимо от нажатой кнопки"
echo $?
echo "команда mdialog --inputbox \"заголовок\" \"строка\""
mdialog --inputbox "заголовок" "строка"
echo "команда mdialog --textbox mdialog" 
mdialog --textbox /mnt/livemedia/MagicOS/VERSION
echo "команда mdialog --textinputbox mdialog"
mdialog --textinputbox /mnt/livemedia/MagicOS/MagicOS.sgn
echo "команда mdialog --progressbar sleep:1 sleep:1 ls:-R ls:/etc" 
mdialog --progressbar sleep:1 sleep:1 ls:-R ls:/etc
echo "команда mdialog --passivepopup \"тест окончен\"" 
mdialog --passivepopup "тест завершен"
exit
}

cmd=$1
if [ "$cmd" = "" ]; then
    cmd="-h" 
fi

case $cmd in
-h | --help )
HELP ;;

--test )
TEST ;;

* )
$PREFIX$cmd "$@";;
esac
