#!/bin/bash
# Display Control-screen backlight control
# GUI for brighness-set and brightness-ctl
# Credit: brightness-set by James Budiono
# License: (C) radky 2022 : GPL >= Ver. 3

export TEXTDOMAIN=displaycontrol
export OUTPUT_CHARSET=UTF-8

if [ "`which busybox`" ]; then
	DCPID=$(busybox ps | grep -a -- gtkdialog | grep -a -- DCONTROL | awk '{print $1}')
else
	DCPID=$(ps ax | grep -a -- gtkdialog | grep -a -- DCONTROL | awk '{print $1}')
fi
if [ "$DCPID" ]; then
	sleep 1
	[ "$DCPID" ] && gtkdialog-splash -close never -timeout 5 -margin 10 -placement center -fontsize large -bg goldenrod -text " $(gettext 'Display Control is already active !') " && exit 0
fi

VERSION=1.4
APPDIR=/usr/local/dcontrol
ICONDIR=$APPDIR/icons
PREFDIR=$APPDIR/preferences
TMPDIR=/tmp/dcontrol
mkdir -p $ICONDIR $PREFDIR $TMPDIR
export VERSION APPDIR ICONDIR PREFDIR TMPDIR

[ "`which gtkdialog4 2>/dev/null`" ] && GTKDIALOG=gtkdialog4 || GTKDIALOG=gtkdialog
export GTKDIALOG

# set icon-name
[ ! -f /usr/share/icons/hicolor/48x48/apps/dcontrol.svg ] && \
ln -sf $ICONDIR/monitor.svg /usr/share/icons/hicolor/48x48/apps/dcontrol.svg && gtk-update-icon-cache -f -i /usr/share/icons/hicolor 2>/dev/null

#define GTK2 theme settings
if ! ldd $(which gtkdialog) | grep -iq 'gtk\-3'; then
 echo 'style "user-font" {
 font_name="Sans 10" }
 widget_class "*" style "user-font"' > $APPDIR/gtkrc_user-font
 export GTK2_RC_FILES=$HOME/.gtkrc-2.0:$APPDIR/gtkrc_user-font
fi

########################################################################
#                                                                      #
# GUI PARAMETERS                                                       #
#                                                                      #
########################################################################

# define width of gui widgets
CURRDPI=$(grep -a "^Xft\\.dpi:" $HOME/.Xresources 2>/dev/null | tr '\t' ' ' | tr -s ' ' | cut -f 2 -d ' ')
[ ! "$CURRDPI" ] && CURRDPI="110"
if [[ $CURRDPI -ge 130 ]]; then
	widget_width="328"
elif [[ $CURRDPI -ge 120 ]]; then
	widget_width="308"
elif [[ $CURRDPI -ge 110 ]]; then
	widget_width="288"
else
	widget_width="268"
fi
export widget_width

# set header
XML_INFO_COLOR='#EDEBD7' # background color
XML_INFO_OPACITY=0.5 # background opacity
. $APPDIR/xml_info_dcontrol gtk > /dev/null # build bg_pixmap for gtk-theme

BOX_HEIGHT=90 # HEADER
ICON=$ICONDIR/monitor.svg
ICON_HEIGHT=60
MSG_1="<b><span size='"'x-large'"'>$(gettext "Display Control")</span></b>"
MSG_2="<b>$(gettext "Set screen backlight intensity")</b>"
ALIGN=left # center or left
HEADER="
	<hbox height-request="'"${BOX_HEIGHT}"'">
	$(. $APPDIR/xml_info_dcontrol "$ICON" "$ICON_HEIGHT" "$MSG_1" "$MSG_2" "$ALIGN")
	</hbox>"

# set screen lock parameters
if [ -f /sbin/puplock -a -f /bin/swaylock ] && [ -n "$WAYLAND_DISPLAY" ]; then
	SCREENLOCK_CMD="<action>exec swaylock -F -f --indicator-idle-visible -i `cat ~/.config/wallpaper/bg_img` --scaling=stretch &</action>"
	SCREENLOCK_CONFIG="<action>puplock -configure &</action>"
else
	SCREENLOCK_CMD="<action>'$APPDIR'/xlock-wrapper &</action>"
	SCREENLOCK_CONFIG="<action>/usr/local/apps/Xlock/AppRun -configure &</action>"
fi

########################################################################
#                                                                      #
# BACKLIGHT FUNCTION                                                   #
#                                                                      #
########################################################################

# set screen backlight (brightness-set or brightnessctl)
func_backlight(){
	backlight_option=$(cat $PREFDIR/backlight-option 2>/dev/null)
	if [ "$backlight_option" = "brightnessctl" ]; then
		brightnessctl --class=backlight set ${backlight}%
		echo "#!/bin/sh" > $HOME/Startup/brightness-set
		echo "brightnessctl --class=backlight set ${backlight}%" >> $HOME/Startup/brightness-set
		chmod +x $HOME/Startup/brightness-set
	else
		$APPDIR/brightness-set ${backlight}
		echo "#!/bin/sh" > $HOME/Startup/brightness-set
		echo "$APPDIR/brightness-set ${backlight}" >> $HOME/Startup/brightness-set
		chmod +x $HOME/Startup/brightness-set
	fi
}
export -f func_backlight

########################################################################
#                                                                      #
# CURRENT DISPLAY SETTINGS                                             #
#                                                                      #
########################################################################

BACKLIGHT=''
BACKLIGHT_OPTION='true' # false to disable

if [ "$BACKLIGHT_OPTION" = "true" ]; then
  DEVPATH=${DEVPATH:-/sys/class/backlight}
  DEVICE=${DEVICE:-$(ls $DEVPATH | head -n 1)}
  if [ -n "$DEVICE" ]; then
	[ ! -f /usr/bin/brightness-set ] && ln -sf $APPDIR/brightness-set /usr/bin/brightness-set
	backlight=$(cat $PREFDIR/backlight 2>/dev/null)
	[ ! "$backlight" ] && backlight=100 && echo "$backlight" > $PREFDIR/backlight
	echo "$backlight" > $TMPDIR/backlight
	func_backlight

	BACKLIGHT='
	<hbox homogeneous="true">
	<vbox>
		<pixmap><input file>'$ICONDIR'/blank1.png</input></pixmap>
		<pixmap><input file>'$ICONDIR'/blank1.png</input></pixmap>
		<text tooltip-text=" '"$(gettext 'Hardware backlight intensity (1-100%)')"' "><label>"'"$(gettext 'Backlight')"'"</label></text>
		<hscale width-request="'"$widget_width"'" height-request="15" scale-min="1" scale-max="100" scale-step="1" value-pos="1" inverted="false">
			<input file>'$TMPDIR'/backlight</input>
			<variable>backlight</variable>
			<action>echo "$backlight" > '$TMPDIR'/backlight</action>
			<action>func_backlight</action>
		</hscale>
	</vbox>
	</hbox>'

	[ "`which brightnessctl 2>/dev/null`" ] && BRIGHTNESS_CTL='
		<button space-expand="false" space-fill="false" tooltip-text=" '"$(gettext 'Toggle backlight control')"' ">
			<input file>'$ICONDIR'/toggle2.svg</input><height>28</height><width>28</width>
			<action>'$APPDIR'/backlight-app &</action>
			<action>exit:quit_now</action>
		</button>'

	APP_TXT="<text use-markup=\"true\"><label>\"<b>$(gettext 'Set screen backlight intensity')</b>\"</label></text>"

  else
	MSG_1="<b><span size='"'x-large'"'>$(gettext "Screen Saver")</span></b>"
	MSG_2="<b>$(gettext "Set screen saver options")</b>"
	HEADER="
	<hbox height-request="'"${BOX_HEIGHT}"'">
	$(. $APPDIR/xml_info_dcontrol "$ICON" "$ICON_HEIGHT" "$MSG_1" "$MSG_2" "$ALIGN")
	</hbox>"

	APP_TXT="<text use-markup=\"true\"><label>\"<b>$(gettext 'Set screen saver options')</b>\"</label></text>"
  fi
else
  MSG_1="<b><span size='"'x-large'"'>$(gettext "Screen Saver")</span></b>"
  MSG_2="<b>$(gettext "Set screen saver options")</b>"
  HEADER="
	<hbox height-request="'"${BOX_HEIGHT}"'">
	$(. $APPDIR/xml_info_dcontrol "$ICON" "$ICON_HEIGHT" "$MSG_1" "$MSG_2" "$ALIGN")
	</hbox>"

  APP_TXT="<text use-markup=\"true\"><label>\"<b>$(gettext 'Set screen saver options')</b>\"</label></text>"
fi

export APP_TXT

########################################################################
#                                                                      #
# HELP DIALOG                                                          #
#                                                                      #
########################################################################

display_control_help()
{
export DCH="
<window default-width=\"425\" title=\"$(gettext 'Display Control')\" icon-name=\"dcontrol\" window-position=\"3\" resizable=\"false\">
	<vbox margin=\"10\" width-request=\"425\">
		<pixmap><input file>$ICONDIR/monitor.svg</input><height>72</height><width>72</width></pixmap>
		<text use-markup=\"true\"><label>\"<b><span size='"'x-large'"'>Display Control</span> $VERSION</b>\"</label></text>
		$APP_TXT
		<text><label>\"Roger D. Grider (C) 2022 GPL3\"</label></text>
		<pixmap><input file>/usr/local/dcontrol/icons/blank1.png</input></pixmap>
		<pixmap><input file>/usr/local/dcontrol/icons/blank1.png</input></pixmap>
		<hbox space-expand=\"false\" space-fill=\"false\" homogeneous=\"true\">
			<button width-request=\"250\" tooltip-text=\" http://www.gnu.org/licenses \">
				<label>\"$(gettext 'License')\"</label>
				<action>defaulthtmlviewer http:\/\/www.gnu.org\/licenses\/ &</action>
			</button>
		</hbox>
	</vbox>
</window>"
$GTKDIALOG -p DCH
unset DCH
}
export -f display_control_help

########################################################################
#                                                                      #
# MAIN DIALOG                                                          #
#                                                                      #
########################################################################

export DCONTROL='
<window title="'"$(gettext 'Display Control')"'" icon-name="dcontrol" window-position="3" resizable="false">
<vbox>

	'$HEADER'

	<hbox homogeneous="true">
		<pixmap><input file>'$ICONDIR'/blank1.png</input></pixmap>
	</hbox>

	'$BACKLIGHT'

	<pixmap><input file>'$ICONDIR'/blank1.png</input></pixmap>
	<pixmap><input file>'$ICONDIR'/blank1.png</input></pixmap>
	<pixmap><input file>'$ICONDIR'/blank1.png</input></pixmap>
	<pixmap><input file>'$ICONDIR'/blank1.png</input></pixmap>

	<hbox space-expand="false" space-fill="true" homogeneous="true">
		<text space-expand="true" space-fill="true"><label>" "</label></text>
		<text space-expand="true" space-fill="true"><label>" "</label></text>
		'$BRIGHTNESS_CTL'
		<button space-expand="false" space-fill="false" tooltip-text=" '"$(gettext 'Screen saver settings')"' ">
			<input file>'$ICONDIR'/screensaver.svg</input><height>28</height><width>28</width>
			<action>pupx &</action>
		</button>
		<button space-expand="false" space-fill="false" tooltip-text=" '"$(gettext 'Screen lock')"' ">
			<input file>'$ICONDIR'/screen_lock.svg</input><height>28</height><width>28</width>
			'$SCREENLOCK_CMD'
		</button>
		<button space-expand="false" space-fill="false" tooltip-text=" '"$(gettext 'Screen lock settings')"' ">
			<input file>'$ICONDIR'/screen_lock_ctl.svg</input><height>28</height><width>28</width>
			'$SCREENLOCK_CONFIG'
		</button>
		<text space-expand="true" space-fill="true"><label>" "</label></text>
		<text space-expand="true" space-fill="true"><label>" "</label></text>
	</hbox>

	<hseparator space-expand="false" space-fill="false"></hseparator>

	<hbox space-expand="false" space-fill="true" homogeneous="true">
		<button use-underline="true">
			<label>'$(gettext '_Help')'</label>
			<action>display_control_help &</action>
		</button>
		<button use-underline="true">
			<label>'$(gettext '_Quit')'</label>
			<action>exit:quit_now</action>
		</button>
	</hbox>
</vbox>

<action signal="key-press-event" condition="command_is_true([ $KEY_SYM = Escape ] && echo true )">exit:EXIT</action>
</window>'

$GTKDIALOG -p DCONTROL --styles=/tmp/dcontrol/gtkrc_xml_info.css

unset DCONTROL

[ -f $TMPDIR/backlight ] && cp -f $TMPDIR/backlight $PREFDIR/backlight

exit 0
