#!/bin/bash

function select_cddev {
    case $CHOICE in
	A) CDDEV=$CDROM ; MDIR=$E;;
	B) CDDEV=$CDRW ; MDIR=$F;;
    esac
}

function set_cddev {
    RAD="Select CD-ROM device"
    INPUT=select_cddev
    STRING=("A" "$E" on \
	    "B" "$F" off)
    radiolist "${STRING[@]}"
}

function eject_device {
    eject $CDDEV
    msgbox "Place a Photo-CD in the drive"
    eject -t $CDDEV
}

function create_tmpfile {
    TMPFILE=/tmp/pcdview.tmp-$$
    for FILE in $WDIR/*.pcd ; do
	FILE=`basename $FILE`
	echo "$FILE $DESC off" >> $TMPFILE
    done
}

function set_pcdfiles {
    PCDFILES="$CHOICES"
}

function view_photo_cd {
    set_cddev
    [ "$RETVAL" != "0" ] && return

    eject_device
    [ "$RETVAL" != "0" ] && return

    grep -q $CDDEV /etc/mtab || mount $MDIR

    EXT=
    choose_wdir
    
    DESC=PCD-file
    create_tmpfile
    CHK="Select PCD-file(s) to view"
    INPUT=set_pcdfiles
    DEF=(`cat $TMPFILE`)
    checkbox "${DEF[@]}"
    rm -f $TMPFILE
    [ "$RETVAL" != "0" ] && return

    if [ -z "$DISPLAY" ]; then
	pcdview $PCDFILES
    else
	xpcd $PCDFILES
    fi

    cd ~
    grep -q $CDDEV /etc/mtab && umount $MDIR
    hit_enter --no-info
}

function border_mode {
    case $CHOICE in
	A) RSF="-raise";;
	B) RSF="+raise";;
	C) RSF="none";;
    esac
}

function menuchoices2 {
    case $choice in
	A)  choose_wdir
	    ;;
	B)  select_outputdir
	    ;;
	C)  inputbox "Specify filename suffix (jpg/tiff/xwd, etc.) or hit enter for [${EXT}]" 2> /dev/null
	    EXT=${INPUT:=$EXT}
	    ;;
	D)  inputbox "Specify geometry in pixels (<width>x<height>) or hit enter for [${GEOM}]
Enter \"0\" to disable the geometry parameter" 2> /dev/null
	    GEOM=${INPUT:=$GEOM}
	    ;;
	E)  inputbox "Specify jpeg-image quality (1-100) or hit enter for [${QUAL}]" 2> /dev/null
	    QUAL=${INPUT:=$QUAL}
	    ;;
	F)  [ "${NORM}" = "yes" ] && NORM=no || NORM=yes
	    ;;
	G)  [ "${VERB}" = "yes" ] && VERB=no || VERB=yes
	    ;;
	H)  [ "${BORD}" = "yes" ] && BORD=no || BORD=yes
	    ;;
	I)  BORD=yes
	    inputbox "Specify bordersize in pixels (<width>x<height>) or hit enter for [${BSIZE}]" 2> /dev/null
	    BSIZE=${INPUT:=$BSIZE}
	    ;;
	J)  BORD=yes
	    inputbox "Specify bordercolor (e.g. black, grey, etc.) or hit enter for [${BCOL}]" 2> /dev/null
	    BCOL=${INPUT:=$BCOL}
	    ;;
	K)  RAD="Select border mode"
	    INPUT=border_mode
	    STRING=(A "Raised" on \
		    B "Sunken" off \
		    C "Flat" off)
	    radiolist "${STRING[@]}"
	    [ "${RSF}" = "-raise" ] && TMPRSF="Raised"
	    [ "${RSF}" = "+raise" ] && TMPRSF="Sunken"
	    [ "${RSF}" = "none" ] && TMPRSF="Flat"
	    ;;
	L)  inputbox "Specify size in pixels (<width>x<height>)or hit enter for [${SRSF}]" 2> /dev/null
	    SRSF=${INPUT:=$SRSF}
	    ;;
	M)  exec_command "resize_graphics"
	    ;;
    esac
    resize_options
}

function resize_options {
    unset CV0
    MENU="CHANGE SETTINGS"
    MENUCHOICES=menuchoices2
    CV0=("A" "Specify input directory" \
	 "-" "[${WDIR}]" \
	 "B" "Specify output directory    [${OUTDIR}]" \
	 "C" "Specify filename extension  [${EXT}]" \
	 "D" "Specify geometry            [${GEOM}]" \
	 "E" "Specify compression level   [${QUAL}]" \
	 "F" "Normalize ?                 [${NORM}]" \
	 "G" "Verbose operation ?         [${VERB}]" \
	 "H" "Border ?                    [${BORD}]" \
	 "I" "Bordersize                  [${BSIZE}]" \
	 "J" "Bordercolor                 [${BCOL}]" \
	 "K" "Raised/Sunken               [${TMPRSF}]" \
	 "L" "Raised/Sunken size          [${SRSF}]" \
	 "M" "Start resizing")
    menubox "${CV0[@]}"
}

function resize_graphics {
    clear

    if [ ! -z "$GEOM" -a "$GEOM" != "0" ]; then
	GEOMETRY="-geometry ${GEOM}"
    else
	GEOMETRY=
    fi

    if [ "${EXT}" = "jpg" -o "${EXT}" = "JPG" -o "${EXT}" = "jpeg" -o "${EXT}" = "JPEG" ]; then
	QUALITY="-quality ${QUAL}"
    else
	QUALITY=
    fi

    if [ "${NORM}" = "yes" ]; then
	NORMALIZE="-normalize"
    else
	NORMALIZE=
    fi

    if [ "${VERB}" = "yes" ]; then
	VERBOSE="-verbose"
    else
	VERBOSE=
    fi

    if [ "${BORD}" = "yes" ]; then
	BORDER="-border ${BSIZE} -bordercolor ${BCOL}"
    else
	BORDER=
    fi

    if [ "${TMPRSF}" = "Raised" -o "${TMPRSF}" = "Sunken" ]; then
	RASUFL="${RSF} ${SRSF}"
    else
	RASUFL=
    fi

    for FILE in ${WDIR}/*.${EXT} ; do
	BASENAME=`basename ${FILE}`
	convert -comment "%w%h" \
		${GEOMETRY} \
        	${QUALITY} \
		${NORMALIZE} \
		${VERBOSE} \
		${BORDER} \
		${RASUFL} \
		${FILE} ${OUTDIR}/${BASENAME}
    done
}

function menuchoices1 {
    case $choice in
        A) view_photo_cd;;
	B) resize_options && saverc_user;;
    esac
    graphics
}
