#!/bin/sh
v=251206 #sfslinux@gmail.com
yad --version |grep -E '^0' && gtk=gtk || gtk=yad
#notifysend="sudo -u `sfsusr` /usr/bin/notify-send"
notifysend="sudo -u $(sfsusr) DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u `sfsusr`)/bus notify-send"
#err=/usr/share/pixmaps/error48.png
err=/usr/share/pixmaps/dialog-error.svg
err2=gtk-dialog-error
#info2=/usr/share/pixmaps/info48.png
#info2=/usr/share/pixmaps/dialog-info.svg
info2=gtk-dialog-info
info=/usr/share/xcowsay/cow_small.png
#info2="$info"
#info2=/usr/share/xcowsay/pra48.png
#info2=/usr/share/xcowsay/LFlogo-square-100x100.png
#warn=/usr/share/pixmaps/warning48.png
#warn=/usr/share/pixmaps/dialog-warning.svg
warn=gtk-dialog-warning
#info2=$warn
#que=/usr/share/pixmaps/question48.png
#que=/usr/share/pixmaps/dialog-question.svg
que=gtk-dialog-question
#indent=/usr/share/pixmaps/touch.svg
indent=gtk-ok
yw=700 #weight yad

##default
splash=yad
dialog=yad
time=3
yad_deco=--undecorated
placement="geometry=-0"

[ "`echo "$1" |egrep '^-hlp='`" ] && hlp="`echo "$1"| sed 's/^-hlp=//'`" && shift
## read conf
[ -f /etc/ntf.conf ] && cfg="/etc/ntf.conf" || cfg="$HOME/.config/ntf.conf"
[ -f $cfg ] && eval "`egrep -v '^#|^$' $cfg`"
t="`echo "$1" |sed 's/-[a-z]\+//' |sed 's/[a-z]\+//'`"
[ "$t" ] && time="$t"

### stdin text ########
 if [ "$1" = "-t" ] ;then
shift

t="$(cat /dev/stdin)"
let x=`echo "$t" | wc -L`*10
#let y=`echo "$t" | wc -l`*50
m="$1"
if [ "$2" ] ;then
    x="$2"
else
    xx=500
    [ $x -lt $xx ] && x=$xx
    xm="`xrandr |awk -Fx '/+$/ {print $1/2}'`" 
    [ "$xm" ] || xm=$xx
    [ $x -gt $xm ] && x=$xm
fi
[ "$3" ] && y="$3" || y=150
echo "$t" |yad --fontname="minospace 10" --name lf --text-info --title="$m " --window-icon=$info  --mouse --editableX --geometry="$x"x"$y" --button=OK
exit 0
 fi

#### file ############
if [ "$1" = "-f" ] ;then
shift
[ "$1" ] && f="$1" || f="*"
t="Выберите файл $f"
[ "$2" ] && m1='<text use-markup="true"><label>"<b>'$2'</b>"</label></text>'
[ "$3" ] && m1='<text wrap="true" use-markup="true"><label>"<b>'$2'</b>
<i>'$3'</i>"</label></text>'

MAIN_DIALOG='	
<window title="'$t'"  window-position="1" icon-name="gtk-file">
 <vbox>
    '$m1'
   <frame '$t'                                                           ->
   <hbox>
    <entry activates_default="true" accept="file" icon="gtk-open" fs-filters="'$f'">
     <variable>d</variable>
    </entry>

    <button tooltip-text="'$m'">
     <input file icon="gtk-directory"></input>
     <action type="fileselect">d</action>
     <action function="exit">echo $d</action>
    </button>
   </hbox>

   </frame>

    <hbox>
       <button cancel></button>
       <button ok></button>
    </hbox>
 </vbox>
</window>'

export GUI="`echo "$MAIN_DIALOG" | sed -e 's/^#.*//'`"
ret="`gtkdialog --program=GUI --center --name=lf`"
eval "$ret"
echo "$d" ;exit
fi
#### chooser ############
if [ "$1" = "-c" ] ;then
[ "$3" ] && HOME2="$3" || HOME2="$HOME"
export CHOOSER_DIALOG="<window title=\"$2\" resizable=\"true\" icon-name=\"gtk-file\">
<vbox>
 <chooser>
  <variable>CHOOSER</variable>
  <default>$HOME2</default>
  <width>600</width>
  <height>400</height>
  <action when=\"file-activated\">exit:OK</action>
 </chooser>
 <hbox>
  <button ok></button>
  <button cancel></button>
 </hbox>
</vbox>
</window>"
  INF="`gtkdialog --program=CHOOSER_DIALOG --center --name=lf`" 
  eval "${INF}"
  [ "$EXIT" = "OK" ] && echo "${CHOOSER}"
exit
fi
##########

[ "$3" = "" ] && c=" " || c="$3"
#[ "`pidof X Xorg.bin Xorg`" = "" ] && echo "$2 $c" && exit

if [ "$1" = "--test" ] ;then
ntf -i "splash" "инфо"
#ntf -i5 "splash" "инфо 5сек."
ntf -e "splash" "ошибка"
ntf -hlp=ya.ru -q "тест" "???"
ntf -w "тест" "!!!"
ntf -a "тест" "alert"
ntf -l "т|е|к|ст" "заголовок" "текст"
ntf --help | ntf -t "from stdin"
ntf -3 "gtk-yes|yes да|1=gtk-no|no|2" "Заголовок" "текст"
ntf -k "gtk-yes|yes да|1=gtk-no|no|2" "Заголовок" "текст"
ntf -r "gtk-yes|yes да|1=gtk-no|no|2" "Заголовок" "текст"
ntf -c "Выбор файла (каталога)"
ntf -f "*" "заголовок" "текст"
exit
fi

HLP() {
echo "Вывод сообщения
Use: $0 [-hlp=URL] [-[ieaqw][n]] \"заголовок\" [\"текст\"]
    $0 -l \"т|е|к|ст\" [\"заголовок\"] [\"текст\"]
    echo "text" |  $0 -t [\"заголовок\"] [\"ширина\"] [\"высота\"]
    $0 -c [\"заголовок\"] [\"путь\"] 
    $0 -f [\"*.txt|*.html\"] [\"заголовок\"] [\"текст\"]
    $0 -3 \"gtk-yes|yes да|1=gtk-no|no|2\" [\"Заголовок\"] [\"текст\"]
    $0 -3 \"\\
gtk-yes
yes да
1
\\
gtk-no
no
2\" [\"Заголовок\"] [\"текст\"]
    Вместо '-3' можно использовать '-k' (--checklist) или '-r' (--radiolist)
    В этом случае в 1м поле можно задать дефолт 'true' или 'false'
    
    $0 --test - демонстрация возможностей
    
    -hlp= - работает только первым параметром и только с невсплывающими сообщениями на yad
    i - информация  (всплывающее)
    e - ошибка (всплывающее)
    a - авария
    q - вопрос (да=0)
    w - сообщение с кнопкой ОК
    t - stdin сообщение  с кнопкой ОК
    l - выбор из списка
    3 - выбор из списка с иконкой и скрытым полем
    n - число секунд показа сообщения
    c - выбор файла (каталога)
    f - выбор файла (опционально с фильтром вида: \"*.txt|*.html\")

i,e выдают всплывающее сообщение. Скрипт проверяет наличие в системе : mate-notification-daemon notify-osd notifyd yad xpupsay conky conky-(без поддержки ico) yaf-splash gxmessage. Выводит сообщение первым найденным способом .

a,w выводят интерактивное сообщение (требуется нажать кнопку). Скрипт проверяет наличие в системе : yad Xdialog. Выводит сообщение первым найденным способом.

q - вопрос. Обработка : [ \"\`ntf -q \"Выключить\" \"ПК?\"\`\" ] && shutdown -h now. 
Или через [ \"\$?\" = \"0\" ] && exit (1-нет 0-да)

Cпособ вывода и прочие параметры можно указать в ~/.config/ntf.conf.
ntf v. $v
" && exit
}
[ "$1" ] || HLP
[ "$1" = "--help" ] && HLP
[ "$2" = "" ] && ntf -i "$1" && exit

YS() {
[ "$splash" = "yad" ] || return
[ "$3" = "$info" ] && col=green || col=red
yad  --image="$3" "$yad_deco"  --no-buttons --"$placement" --timeout="$time" \
    --name=lf --window-icon="$3" --title="`basename $3 48.png`" \
    --timeout-indicator=bottom --wrap --text "<span color=\"$col\"><b>$1</b></span>
$2" ; exit 0
}

YAD() {
[ "$dialog" = "yad" ] || return
    [ "`echo $3|grep -Ee '-q'`" ] && i="--image=$que   --fixed --button=$gtk-yes:0 --button=$gtk-no" && col=black
    [ "`echo $3|grep -Ee '-a'`" ] && i="--image=$err2  --fixed --button=$gtk-ok:0" && col=red
    [ "`echo $3|grep -Ee '-w'`" ] && i="--image=$info2 --fixed --button=$gtk-ok:0 --back=red" && col=green
tit="`echo $1 | sed 's/<[^>]*>//g'`"
if [ ! "$hlp" ];then
    yad --width=$yw --image-on-top $i  "$yad_deco" --mouse \
    --window-icon="$info" --name=lf --title="$tit" \
    --text "<span color=\"$col\"><b>$1</b></span>
<i>$2</i>" >/dev/null && echo $? ; exit
else
#    yad --form --field=gtk-help:BTN 'defaultbrowser '$hlp''  \
    yad --width=$yw --form --field=_Справка!gtk-help!"$hlp":FBTN 'defaultbrowser '$hlp''  \
    --image-on-top $i  "$yad_deco" --mouse \
    --window-icon="$info" --name=lf --title="$tit" \
    --text "<span color=\"$col\"><b>$1</b></span>
<i>$2</i>"  >/dev/null && echo $? ; exit
fi
}

XD() {
[ "$dialog" = "xdialog" ] || return
[ "`echo $3|grep -Ee '-a'`" ] && Xdialog --icon $err --title ":-(" \
    --msgbox "$1\n$2" 6 0 && exit

[ "`echo $3|grep -Ee '-w'`" ] && Xdialog --wrap --icon $warn --title "!" \
    --msgbox "$1\n$2" 6 0 && exit

[ "`echo $3|grep -Ee '-q'`" ] && Xdialog --icon $que --title "?" \
    --ok-label "Да" --cancel-label "Нет"  --yesno "$1\n$2" 6 0 && echo $? ; exit
}
######### alert & ? ##########
if [ "`echo $1|grep -Ee '-q|-w|-a'`" ];then
        [ "`which yad`" ] && YAD "$2" "$c" "$1"
	[ "`which Xdialog`" ] && XD "$2" "$c" "$1" 
fi

NS() {
#if [ ! -f /usr/bin/lxqt-notificationd ] ;then
#    [  -f /etc/rc.d/PUPSTATE ] || notifysend="sudo -u `sfsusr` $notifysend" 
#fi
#[ "`id -u`" = "0" ] && notifysend="dbus-launch $notifysend" 
#[ -e  /usr/bin/xfce4-session ] && notifysend="dbus-launch $notifysend" 
m1="`echo "$1" | sed 's/<[^>]*>//g'`"
#m2="`echo "$2" | sed 's/<[^>]*>//g'`"
#$notifysend "$m1" "$m2" "$3" "$4"  && exit

[ -f /usr/bin/lxqt-notificationd ] \
    && $notifysend "$m1" "<span font=\"Mono 10\"><i>$2</i></span>" "$3" "$4" -a "" \
    || $notifysend "$m1" "<span font=\"Mono 10\"><i>$2</i></span>" "$3" "$4" -a "" 
exit
}

NSe() {
[  -f /etc/rc.d/PUPSTATE ] && return
if [ "`id -u`" = "0" ] ;then
	return
fi
m1="`echo "$1" | sed 's/<[^>]*>//g'`"
m2="`echo "$2" | sed 's/<[^>]*>//g'`"
$notifysend "$m1" "$m2" "$3" "$4"  && exit
}

CK() {
yy=50
y="`xwininfo -root |awk -F":" '/Height:/ {print ($2-'$yy')}'`"
echo "\
use_xft yes
xftalpha 1
total_run_times 0
double_buffer yes
draw_shades no
draw_outline no
draw_graph_borders yes
default_color black
#default_color d8d8d8
#default_shade_color 000000
#default_outline_color d9d7d6
no_buffers yes
uppercase no
override_utf8_locale yes

own_window yes
own_window_colour $col
own_window_hints undecorated,sticky,skip_taskbar

gap_x 60
gap_y 668

xftfont monospace:size=10
alignment bottom_right
TEXT
" > ~/.con-not
}

CK1() {
CK && conky -y $y -i 7 -c ~/.con-not --text="\
\${image $3 -p 0,0 -s 48x48}\
\${font monospace:size=10:bold}\
     $1 
\${font monospace:size=10}\
        $2" && exit
}

CK2() {
[ "`which conky-`" ] && conky- -y $y -i 7 -c ~/.con-not --text="\
\${font monospace:size=10:bold}\
$1 
\${font monospace:size=10}\
$2" && exit
}

XPS() {
[ "$splash" = "xpupsay" ] || return
[ "$placement" = "geometry=-0" ] && placement="--at=10000000,$(( 15*`pidof xpupsay|wc -m` ))" || placement=
[ "$3" = "$info" ] && col=green || col=red
xpupsay -f "Mono 12" --time=$time --image=$3 "$placement" "<span color='$col'>$1</span>
<span font=\"Mono 10\"><i>$2</i></span>" && exit
}

GS() {
[ "$splash" = "gtkdialog" ] || return
[ "$placement" = "geometry=-0" ] && placement=top
gtkdialog-splash -timeout "$time" -placement "$placement" -text "$1
<i>$2</i>" -icon "$3" -bg $4  && exit
}

#### list ############
if [ "$1" = "-l" ] ;then
shift
sel="$(echo "$1"|sed 's/|/\n/g' |yad   --title "$2" --list --text \
    "<span size='large'><b>$2</b></span>
<i>$3</i>"  \
	--regex-search $yad_deco \
	--search-column=1 \
	--center \
	--separator= \
	--height=340 --width=$yw \
	--no-headers \
	--image-on-top --image="$indent" \
	--window-icon=$indent \
	--name=lf \
	--column="*" \
	)"
[ "$?" = "0" ] || exit 1
echo "$sel"
exit
fi

#### 3list ############
#if [ "$1" = "-3" ] ;then
if [ "`echo "$1" |grep -Ee '-3$|-r$|-k$'`" ] ;then
    [ "$1" = "-k" ] && chk="--checklist"
    [ "$1" = "-r" ] && chk="--radiolist"
shift
#tt="`echo "$2" |sed 's/\\\n//g' |tr -d '\n'`"
tt="`echo "$2" |sed 's/\\\n//g' |head -1`"
sel="$(echo "$1"|sed 's/|/\n/g' |sed 's/=/\n/g' |yad   --title "$tt" --list $chk --text \
    "<span size='large'><b>$2</b></span>
<i>$3</i>"  \
	--regex-search $yad_deco \
	--search-column=2 \
	--separator= --fixed \
	--height=340 --width=$yw \
	--no-headers \
	--image-on-top --image="info" \
	--window-icon=$indent \
	--name=lf \
	--hide-column=3 \
	--print-column=3 \
	--column=:IMG \
	--column="*" \
	--column="+" \
	--mouse \
	)"
#ntf ==$?
[ "$?" = "1" ] && exit 1
echo "$sel"
exit
fi


########### info ############
NTST(){
#    [ "`pidof notify-osd dunst xfce4-notifyd mate-notification-daemon notification-daemon lxqt-notificationd`" ]
    [ "`which notify-osd dunst xfce4-notifyd mate-notification-daemon notification-daemon lxqt-notificationd`" ]
}

if [ "`echo $1|grep -Ee '-i'`" ] || [ "$4" = "info" ] ;then
    [ "$4" = "info" ] || shift
    [ "$4" = "info" ] && c="$2"
    NTST && NS "$1" "$c" -i "$info" 
    [ "`which enlightenment`" ] && NSe "$1" "$c" -i "$info" 
    [ "`which yad`" ] && YS "$1" "$c" "$info" 
    [ "`which xpupsay`" != "" ] && XPS "$1" "$c" "$info" 
    [ "`which gtkdialog-splash`" ] && GS "$1" "$c" "`basename $info .png`" green
    col="green"
    [ "`which conky`" ] && CK1 "$1" "$c" "$info"
    [ "`which conky`" ] && CK2 "$1" "$c" 
    
fi

########### err ############
if [ "`echo ".$1"|grep -Ee '-e'`" ] || [ "$4" = "error" ] ;then
    [ "$4" = "error" ] || shift
    [ "$4" = "error" ] && c="$2"
    NTST && NS "$1" "$c" -i "$err" 
    [ "`which enlightenment`" ] && NSe "$1" "$c" -e "$err" 
    [ "`which yad`" ] && YS "$1" "$c" "$err" 
    [ "`which xpupsay`" != "" ] && XPS "$1" "$c" "$err" 
    [ "`which gtkdialog-splash`" ] && GS "$1" "$c" "`basename $err .png`" pink
    col="pink"
    [ "`which conky`" ] && CK1 "$1" "$c" "$err"
    [ "`which conky`" ] && CK2 "$1" "$c" 
fi

gxmessage -center -timeout 3  -borderless -wrap  "$1 $c" &
