#! /bin/bash
# rcrsn51 2012-04-14
# based on MU's scale2jpg
# updated 2016-05-20 to use image-changer

export TEXTDOMAIN=peasyscale
export OUTPUT_CHARSET=UTF-8

eval_gettext () {
	local myMESSAGE=$(gettext "$1")
	eval echo -n \"$myMESSAGE\"
}
export -f eval_gettext

PROCESS ()
{
# $1 is source file / $2 is destination directory / $3 is scaling argument / $4 is transform argument / $5 controls display

OUTFILE=$(basename "$1")
if [ $SAVEJPEG = "true" ]; then
	OUTFILE=${OUTFILE%.*}".jpg"
elif [ $SAVEPNG = "true" ]; then
	OUTFILE=${OUTFILE%.*}".png"
elif [ $SAVETIFF = "true" ]; then
	OUTFILE=${OUTFILE%.*}".tif"
elif [ $SAVEWEBP = "true" ]; then
	OUTFILE=${OUTFILE%.*}".webp"
fi

if [ $YESNUMBER = "true" ]; then 
	[ -f "$2"/.COUNT ] || echo 0 > "$2"/.COUNT
	COUNT=$(cat "$2"/.COUNT)
	COUNT=$((++COUNT))
	echo $COUNT > "$2"/.COUNT
	OUTFILE=$(printf "%03d" $COUNT)"-"$OUTFILE
fi

Xdialog --title " " --no-buttons --infobox "$(eval_gettext 'Scaling $OUTFILE ...')" 0 0 60000 &
MSGPID=$!

if [ -n "$3" -a -n "$4" ]; then
	image-changer "$1" /tmp/peasytemp.png $3
	image-changer /tmp/peasytemp.png "${2}/${OUTFILE}" $4
elif [ -n "$3" ]; then
	image-changer "$1" "${2}/${OUTFILE}" $3	
elif [ -n "$4" ]; then
	image-changer "$1" "${2}/${OUTFILE}" $4
else
	image-changer "$1" "${2}/${OUTFILE}"		#if scaling arg is null, just change format
fi

kill $MSGPID
[ "$5" = "file" ] && $IMAGEVIEWER "${2}/${OUTFILE}"
}
export -f PROCESS

STARTSCALE ()
{
SOURCE=$FILEORFOLDER
if [ -z "$SOURCE" ]; then
 Xdialog --title " " --msgbox "$(gettext 'Missing source file/folder!')" 0 0  
 exit 1
fi

SCALEARG=$(echo -n $SCALINGVALUE | tr -d "% " | tr "X" "x")
[ "$SCALEARG" = "100" ] && SCALEARG="" 	#if scaling arg is null, just change format

case "$TRANSFORM" in
	$(gettext 'Rotate 90') ) TRANSARG="t1";;
	$(gettext 'Rotate -90') ) TRANSARG="t2";;
	$(gettext 'Rotate 180') ) TRANSARG="t3";;
	$(gettext 'Flip horizontal') ) TRANSARG="t4";;
	$(gettext 'Flip vertical') ) TRANSARG="t5";;
	$(gettext 'Colour+') ) TRANSARG="t7";;
	$(gettext 'Grayscale') ) TRANSARG="t6";;
	*) TRANSARG="";;
esac

if [ -d "$SOURCE" ]; then
	DESTDIR="$SOURCE"/PEASYSCALE
	mkdir -p "$DESTDIR"
	for F in "$SOURCE"/*; do
		[ -d "$F" ] && continue
		PROCESS "$F" "$DESTDIR" "$SCALEARG" "$TRANSARG" "folder"
	done
	$IMAGEVIEWER "$DESTDIR"
elif [ -f "$SOURCE" ]; then
	DESTDIR=$(dirname "$SOURCE")/PEASYSCALE
	mkdir -p "$DESTDIR"
	PROCESS "$SOURCE" "$DESTDIR" "$SCALEARG" "$TRANSARG" "file"
else
	Xdialog --title " " --msgbox "$(gettext 'File not found!')" 0 0
fi
}
export -f STARTSCALE

##########################

mkdir -p /etc/pwf #just in case
APPFILE=/etc/pwf/appfile
if [ ! -f $APPFILE ]; then
	echo "export TEXTEDITOR=defaulttexteditor" > $APPFILE
	echo "export FILEMANAGER=defaultfilemanager" >> $APPFILE
	echo "export WEBBROWSER=defaultbrowser" >> $APPFILE
	echo "export IMAGEVIEWER=defaultimageviewer" >> $APPFILE
#	Xdialog --title " " --msgbox "$(gettext 'Open the file /etc/pwf/appfile.\nSet your helper applications.')" 0 0
	exit
fi
. $APPFILE

DEFAULTFILENAME=\"\"
[ $# -eq 1 ] && DEFAULTFILENAME=$1

export PROG="
<window title=\"PeasyScale v3.3\" image-name=\"/usr/share/pixmaps/peasyscale.png\" resizable=\"false\">
<vbox>
	<frame>
		<text xalign=\"0\"><label>$(gettext 'PeasyScale can resize single graphic files (JPEG, PNG, etc.)')</label></text>
		<text xalign=\"0\"><label>$(gettext 'or entire folders. The scaled files are stored in a subfolder')</label></text>
		<text xalign=\"0\"><label>$(gettext 'of the originals named PEASYSCALE. Scaling can be done by')</label></text>
		<text xalign=\"0\"><label>$(gettext 'Percent or by Width x Height.')</label></text>
	</frame>
	<frame $(gettext 'Select a graphic file or folder (use Copy path)')>
		<hbox>
			<entry>
				<variable>FILEORFOLDER</variable>
				<default>$DEFAULTFILENAME</default>
			</entry>
			<button>
				<input file stock=\"gtk-clear\"></input>
				<action>Clear:FILEORFOLDER</action>
			</button>
		</hbox>
		<hbox>
		  <vbox>
			<text><label>Choose a scaling value</label></text>
			<hbox>
			<entry>
				<default>50%</default>
				<variable>SCALINGVALUE</variable>
			</entry>
			 <button>
				<input file stock=\"gtk-clear\"></input>
				<action>Clear:SCALINGVALUE</action>
			</button>
			</hbox>
		  </vbox>
		<text><label>\"     \"</label></text>
		 <vbox>	
			<text><label>Add a transformation</label></text>
			<comboboxtext>        
				<variable>TRANSFORM</variable>
				<item>$(gettext 'None')</item>
				<item>$(gettext 'Rotate 90')</item><item>$(gettext 'Rotate -90')</item><item>$(gettext 'Rotate 180')</item>
				<item>$(gettext 'Flip horizontal')</item><item>$(gettext 'Flip vertical')</item>
				<item>$(gettext 'Colour+')</item><item>$(gettext 'Grayscale')</item>
			</comboboxtext>
		 </vbox>
		<text><label>\"     \"</label></text>
		</hbox>
	</frame>
	<frame $(gettext 'Save the graphic as this type')>
		<hbox>
			<radiobutton>
				<label>$(gettext 'Same')</label>
				<variable>SAVESAME</variable>
			</radiobutton>
			<radiobutton>
				<label>JPEG</label>
				<variable>SAVEJPEG</variable>
			</radiobutton>
			<radiobutton>
				<label>PNG</label>
				<variable>SAVEPNG</variable>
			</radiobutton>
			<radiobutton>
				<label>TIFF</label>
				<variable>SAVETIFF</variable>
			</radiobutton>
			<radiobutton>
				<label>WEBP</label>
				<variable>SAVEWEBP</variable>
			</radiobutton>
		</hbox>
	</frame>	
	<frame $(gettext 'Number the files in sequence 001- 002- 003-')>
		<hbox>
			<radiobutton>
				<label>$(gettext 'No')</label>
				<variable>NONUMBER</variable>
			</radiobutton>
			<radiobutton>
				<label>$(gettext 'Yes')</label>
				<variable>YESNUMBER</variable>
			</radiobutton>
		</hbox>
	</frame>
	<hbox>
		<button>
			<label>$(gettext 'Help')</label>
			<action>$WEBBROWSER https://oldforum.puppylinux.com/viewtopic.php?p=617584#617584 &</action>
		</button>
		<text><label>\"  \"</label></text>
		<button>
			<label>$(gettext 'Scale')</label>
			<action>STARTSCALE &</action>
		</button>
		<button><label>$(gettext 'Quit')</label></button>
	</hbox>
</vbox>
</window>
"
gtkdialog -c -G 400x100 -p PROG
