#!/bin/sh
# rcrsn51 2012-04-24
# version 1.9 fixed problem with photos being deleted
# version 2.0 converts PS to PDF so CUPS does not choke on large pics
# gettexted by esmourguit 2013/02/12

export TEXTDOMAIN=peasyprint
export OUTPUT_CHARSET=UTF-8

export TMP="/tmp"

STARTPRINT ()
{
[ ! -f "$FILENAME" ] && Xdialog --title " " --msgbox "$(gettext 'File not found!')" 0 0 && exit
[ -z "$MEASURE" ] && Xdialog --title " " --msgbox "$(gettext 'No measurement chosen!')" 0 0 && exit

Xdialog --title " " --no-buttons --infobox "$(gettext 'Working ...')" 0 0 10000 &
MSGPID=$!

TYPE=$(file "$FILENAME" | cut -d ":" -f 2 | awk '{print $1}')
case $TYPE in
	JPEG) jpegtopnm "$FILENAME" > $TMP/infile.pnm ;;
	PNG) pngtopnm "$FILENAME" > $TMP/infile.pnm ;;
	TIFF) tifftopnm "$FILENAME" > $TMP/infile.pnm ;;
	Netpbm) cp "$FILENAME" $TMP/infile.pnm ;;
	PDF) pdftoppm -singlefile "$FILENAME" $TMP/infile; mv $TMP/infile.ppm $TMP/infile.pnm ;;
	*) Xdialog --title " " --msgbox "$(gettext 'Not a valid graphics file!')" 0 0 &&  kill $MSGPID && exit ;;
esac

read A B C XDOTS D YDOTS E F <<< $(pamfile $TMP/infile.pnm)

if [ $FITCHECK = "true" ]; then
kill $MSGPID
CHOICE="width"
if [ "$LETTER" = "true" ]; then
	[ $((110*$XDOTS-85*$YDOTS)) -lt 0 ] && CHOICE="height"
	Xdialog --title " " --msgbox "For Letter paper, scale the $CHOICE to fit." 0 0
elif [ "$A4" = "true" ]; then
	[ $((117*$XDOTS-83*$YDOTS)) -lt 0 ] && CHOICE="height"
	Xdialog --title " " --msgbox "For A4 paper, scale the $CHOICE to fit." 0 0
elif [ "$PHOTO4x6" = "true" ]; then
	[ $((6*$XDOTS-4*$YDOTS)) -lt 0 ] && CHOICE="height"
	Xdialog --title " " --msgbox "For 4x6 Photo paper, scale the $CHOICE to fit." 0 0
elif [ "$PHOTO5x7" = "true" ]; then
	[ $((7*$XDOTS-5*$YDOTS)) -lt 0 ] && CHOICE="height"
	Xdialog --title " " --msgbox "For 5x7 Photo paper, scale the $CHOICE to fit." 0 0
fi
exit
fi

if [ $DATE = "true" ]; then
	SIZE=$((YDOTS/100))
	X=$((SIZE*2))
	Y=$((YDOTS-X))
	COLOR=$(Xdialog --stdout --title " " --no-tags --no-cancel --radiolist "Text colour" 12 30 2 "#000000" black true "#ffffff" white false)
  THISDATE=$(date +%F)
	mv $TMP/infile.pnm $TMP/infile1.pnm
	ppmlabel -background transparent -x $X -y $Y -size $SIZE -color $COLOR -text $THISDATE -x $((++X)) -y $((++Y)) -text $THISDATE -x $((++X)) -y $((++Y)) -text $THISDATE $TMP/infile1.pnm > $TMP/infile.pnm
	rm $TMP/infile1.pnm 
fi

if [ $ROTATE = "true" -a $XDOTS -gt $YDOTS ]; then
	pnmrotate -90 $TMP/infile.pnm | pnmtotiff > $TMP/outfile.tif
	HOLD=$XDOTS; XDOTS=$YDOTS; YDOTS=$HOLD
else
  pnmtotiff $TMP/infile.pnm > $TMP/outfile.tif
fi

if [ "$LETTER" = "true" ]; then
	PAGESIZE="-w 8.5 -l 11.0"
elif [ "$A4" = "true" ]; then
	PAGESIZE="-w 8.3 -l 11.7"
elif [ "$PHOTO4x6" = "true" ]; then
	PAGESIZE="-w 4.0 -l 6.0"
elif [ "$PHOTO5x7" = "true" ]; then
	PAGESIZE="-w 5.0 -l 7.0"
fi

UNITFIX=1
[ $CM = "true" ] && UNITFIX=2.54
if [ $WIDTH = "true" ]; then
	DPI=$(dc -e "2 k $XDOTS $UNITFIX * $MEASURE / p")
elif [ $HEIGHT = "true" ]; then
	DPI=$(dc -e "2 k $YDOTS $UNITFIX * $MEASURE / p")
fi

tiff2pdf $PAGESIZE -x $DPI -y $DPI -o $TMP/outfile.pdf $TMP/outfile.tif

if [ $TOPDF = "true" ]; then
	kill $MSGPID
	TOPDFNAME="$TMP/$(basename "$FILENAME")".pdf
	mv $TMP/outfile.pdf "$TOPDFNAME"
	Xdialog --title " " --msgbox "PDF saved to $TOPDFNAME" 0 0
	exit
fi

DEFAULTPAGESIZE=$(lpoptions -p $PRINTER -l | grep PageSize | tr " " "\n" | grep "^*" | tr -d "*")
[ -z "$DEFAULTPAGESIZE" ] && DEFAULTPAGESIZE="Letter"
SIZEOPTION="-o media=$DEFAULTPAGESIZE"

while [ 1 ]; do
	lp -d $PRINTER $SIZEOPTION $TMP/outfile.pdf
	[ $COPIES = "false" ] && break
	Xdialog --title " " --yesno "Print another copy?" 0 0
	[ $? -gt 0 ] && break
done
}
export -f STARTPRINT

STARTCANCEL ()
{
cancel -a
rm -f /var/spool/cups/tmp/*
Xdialog --title " " --msgbox "$(gettext 'All print jobs cancelled!')" 0 0
}
export -f STARTCANCEL

STARTHELP ()
{
defaultbrowser http://oldforum.puppylinux.com/viewtopic.php?t=70133 &
}
export -f STARTHELP 

STARTCUPS ()
{
defaultbrowser http://localhost:631/printers/$PRINTER &
}
export -f STARTCUPS

# -------- End of Functions -----------

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
	sleep 1
fi
. $APPFILE

PRINTERLIST=$(lpstat -v | cut -d " " -f 3 | cut -d ":" -f 1 | sed 's|^|<item>|;s|$|</item>|')

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

export DIALOG="
<window title=\"PeasyPrint v4.4\" image-name=\"/usr/share/pixmaps/peasyprint.png\">
<vbox>
	<frame $(gettext 'Select a file:  JPG, PNG, TIF, PNM, PDF')>
		<hbox>
			<entry accept=\"filename\">
			 <variable>FILENAME</variable>
				<default>$DEFAULTFILENAME</default>
			</entry>
			<button>
				<input file stock=\"gtk-open\"></input>
				<action type=\"fileselect\">FILENAME</action>
			</button>
			<button>
			 <input file stock=\"gtk-clear\"></input>
			 <action>Clear:FILENAME</action>
			</button>
		</hbox>
	</frame>
	<frame $(gettext 'Print this side')>
		<hbox>
			<radiobutton> 
			 <variable>WIDTH</variable>
			 <label>$(gettext 'Width')</label>
		 </radiobutton>
		 <radiobutton> 
			 <variable>HEIGHT</variable>
			 <label>$(gettext 'Height')</label>
		 </radiobutton>
		</hbox>
	</frame>
	<frame $(gettext 'With this measurement')>
	 <hbox>
		 <entry>
				<variable>MEASURE</variable>
				<default>4.0</default>
		 </entry>
		 <radiobutton> 
			 <variable>INCH</variable>
			 <label>$(gettext 'inch')</label>
		 </radiobutton>
		 <radiobutton> 
			 <variable>CM</variable>
			 <label>cm</label>
		 </radiobutton>
	 </hbox>
	</frame>
	<frame $(gettext 'Rotate Landscape to Portrait?')>
		<hbox>
			<checkbox>
				<label>$(gettext 'If checked, the short side becomes the width')</label>
				<variable>ROTATE</variable>
				<default>true</default>
			</checkbox>
		 </hbox>
	</frame>
	<frame $(gettext 'Select a printer')>
		<comboboxtext>
			<variable>PRINTER</variable>
		 $PRINTERLIST 
		</comboboxtext>
	</frame>
	<frame $(gettext 'Paper size')>
		<hbox>
			<radiobutton> 
			 <variable>PHOTO4x6</variable>
			 <label>4x6</label>
				<default>true</default>
			</radiobutton>
			<radiobutton> 
			 <variable>PHOTO5x7</variable>
			 <label>5x7</label>
			</radiobutton>
			<radiobutton> 
			 <variable>LETTER</variable>
			 <label>$(gettext 'Letter')</label>
			</radiobutton>
			<radiobutton> 
				<variable>A4</variable>
				<label>A4</label>
			</radiobutton>
		</hbox>
		<text><label>$(gettext '(Set the CUPS printer options to match this paper)')</label></text>
	</frame>
	<frame Options>
		<hbox>
			<checkbox>
				<label>Date</label>
				<variable>DATE</variable>
			</checkbox>
			<text><label>\" \"</label></text>
			<checkbox>
				<label>Test fit</label>
				<variable>FITCHECK</variable>
			</checkbox>
			<text><label>\" \"</label></text>
			<checkbox>
				<label>To PDF</label>
				<variable>TOPDF</variable>
			</checkbox>
			<text><label>\" \"</label></text>
			<checkbox>
				<label>Make copies</label>
				<variable>COPIES</variable>
			</checkbox>
		</hbox>
	</frame>
	<hbox>
		<button>
			<label>$(gettext 'Help')</label>
			<action>STARTHELP</action>
		</button>
		<button>
			<label>$(gettext 'View')</label>
			<action>defaultimageviewer \$FILENAME &</action>
		</button>
		<button>
			<label>$(gettext 'CUPS')</label>
			<action>STARTCUPS</action>
		</button>
		<button>
			<label>$(gettext 'Cancel')</label>
			<action>STARTCANCEL</action>
		</button>
		<button>
			<label>$(gettext 'Print')</label>
			<action>STARTPRINT</action>
		</button>
		<button><label>$(gettext 'Quit')</label></button>
	</hbox>
</vbox>
</window>"

gtk2dialog -G +700+50 -p DIALOG

rm -f $TMP/infile.pnm $TMP/outfile.tif $TMP/outfile.pdf

