#!/bin/ash

# Xgamma-GUI
# Copyright (C) JakeSFR 2018, 2026
#
# License: GNU GPL Version 3 or later

# std localisation stanza
export TEXTDOMAIN=fatdog
. gettext.sh

APPTITLE="$(gettext 'Xgamma GUI')"

# Depending on locale, decimal separator for Gtkdialog's hscale has to be either . or ,
# Use dc to get the correct one
#DECSEP=$(busybox dc 1 10 / p | tr -cd ',.')
DECSEP=$(seq .1 .1 .1 | tr -cd ',.')

RANGE_STEP=0.001
RANGE_MIN=0.1
RANGE_MAX=10

# Get current values
set -- $(xgamma 2>&1 | grep -Eo '[0-9]+.[0-9]+' | tr '\n' ' ')
OLD_RED=$1
OLD_GREEN=$2
OLD_BLUE=$3

export GUI='
<window title="'${APPTITLE}'" resizable="true" image-name="/usr/share/pixmaps/themes/puppy16/idea16.xpm">
	<vbox>
		<text use-markup="true">
			<label>"<span font='"'serif'"' weight='"'bold'"' size='"'x-large'"'><b>'${APPTITLE}'</b></span>"</label>
		</text>
		<text use-markup="true">
			<label>"<span><i>'$(gettext "Alter gamma correction")'</i></span>"</label>
		</text>

		<frame '$(gettext "Red")'>
			<hscale update-policy="2" range-min="'${RANGE_MIN//[,.]/${DECSEP}}'" range-max="'${RANGE_MAX//[,.]/${DECSEP}}'" range-step="'${RANGE_STEP//[,.]/${DECSEP}}'" width-request="300">
				<variable>NEW_RED</variable>
				<default>'${OLD_RED//[,.]/${DECSEP}}'</default>
				<item>1|3</item>
				<input>echo $NEW_BLUE</input>
				<action>xgamma -rgamma ${NEW_RED//,/.}</action>
				<action condition="active_is_true(SYNC)">refresh:NEW_GREEN</action>
				<action condition="active_is_true(SYNC)">refresh:NEW_BLUE</action>
			</hscale>
		</frame>

		<frame '$(gettext "Green")'>
			<hscale update-policy="2" range-min="'${RANGE_MIN//[,.]/${DECSEP}}'" range-max="'${RANGE_MAX//[,.]/${DECSEP}}'" range-step="'${RANGE_STEP//[,.]/${DECSEP}}'" width-request="300">
				<variable>NEW_GREEN</variable>
				<default>'${OLD_GREEN//[,.]/${DECSEP}}'</default>
				<item>1|3</item>
				<input>echo $NEW_RED</input>
				<action>xgamma -ggamma ${NEW_GREEN//,/.}</action>
				<action condition="active_is_true(SYNC)">refresh:NEW_BLUE</action>
				<action condition="active_is_true(SYNC)">refresh:NEW_RED</action>
			</hscale>
		</frame>
		
		<frame '$(gettext "Blue")'>
			<hscale update-policy="2" range-min="'${RANGE_MIN//[,.]/${DECSEP}}'" range-max="'${RANGE_MAX//[,.]/${DECSEP}}'" range-step="'${RANGE_STEP//[,.]/${DECSEP}}'" width-request="300">
				<variable>NEW_BLUE</variable>
				<default>'${OLD_BLUE//[,.]/${DECSEP}}'</default>
				<item>1|3</item>
				<input>echo $NEW_GREEN</input>
				<action>xgamma -bgamma ${NEW_BLUE//,/.}</action>
				<action condition="active_is_true(SYNC)">refresh:NEW_RED</action>
				<action condition="active_is_true(SYNC)">refresh:NEW_GREEN</action>
			</hscale>
		</frame>
		
		<hbox>			
			<hbox>
				<checkbox>
					<variable>SYNC</variable>
					<label>'$(gettext "Sync sliders")'</label>
					<default>false</default>
				</checkbox>
			</hbox>
			<text space-fill="true" space-expand="true"><label>""</label></text>
		</hbox>
		
		<hseparator></hseparator>
		
		<hbox>
			<hbox>
				<checkbox>
					<variable>SAVE</variable>
					<label>'$(gettext "Save current settings to $HOME/Startup")'</label>
					<default>false</default>
				</checkbox>
			</hbox>
			<text space-fill="true" space-expand="true"><label>""</label></text>
		</hbox>
		
		<hbox space-fill="false" space-expand="false">
			<hbox space-fill="true" space-expand="true">
				<button>
					<label>'$(gettext "Apply")'</label>
					<input file stock="gtk-apply"></input>
					<action>exit:apply</action>
				</button>
				<button>
					<label>'$(gettext "Cancel")'</label>
					<input file stock="gtk-cancel"></input>
					<action>exit:cancel</action>
				</button>		
			</hbox>
		</hbox>
	</vbox>

	<action signal="delete-event">exit:abort</action>
</window>'

eval $(gtkdialog -p GUI)

case "$EXIT" in
	abort|cancel)
		xgamma -rgamma ${OLD_RED} -ggamma ${OLD_GREEN} -bgamma ${OLD_BLUE}
		exit
	;;
esac

if [ "$SAVE" = 'true' ]; then
	> "$HOME/Startup/restore-gamma.sh" cat <<EOF
#!/bin/sh
xgamma -rgamma ${NEW_RED}
xgamma -ggamma ${NEW_GREEN}
xgamma -bgamma ${NEW_BLUE}
EOF
	chmod +x "$HOME/Startup/restore-gamma.sh"
fi

exit
