#! /usr/dt/bin/dtksh

##########################################################################
#  (c) Copyright 1993, 1994 Hewlett-Packard Company	
#  (c) Copyright 1993, 1994 International Business Machines Corp.
#  (c) Copyright 1993, 1994 Sun Microsystems, Inc.
#  (c) Copyright 1993, 1994 Unix System Labs, Inc., a subsidiary of
#      Novell, Inc.
##########################################################################


#
# This advanced shell script demonstrates the code necessary for forcing
# the Return key to move the focus to the next text field in a dialog,
# instead of causing the default pushbutton to be activated.  When the
# focus has moved to the last text field, then the Return key will activate
# the default pushbutton.
#

# This function modifies the text field indicated by $1, so that when
# the text field receives the focus, it clears the default button; when
# it loses the focus, it will reenable the default button.  It also adds
# some translations for catching the Return key, so that it can force
# the focus to the next text widget, which is indicated by $2
SetCrControls()
{
   XtAddCallback $1 focusCallback "ClearDftButton"
   XtAddCallback $1 losingFocusCallback "SetDftButton $OK"

   XtOverrideTranslations $1 \
	"Ctrl<Key>Return:ksh_eval(\"XmProcessTraversal $2 TRAVERSE_CURRENT\") 
	<Key>Return:ksh_eval(\"XmProcessTraversal $2 TRAVERSE_CURRENT\")"
}

# FocusOut Callback: reenables the default button
SetDftButton()
{
   XtSetValues $FORM defaultButton:$OK
}

# FocusIn Callback: disables the default button
ClearDftButton()
{
   XtSetValues $FORM defaultButton:NULL
}

# If the 'Ok' button is activated, but the 'Name' field is empty, then
# this function will display an error dialog.
EmptyNameError()
{
   XmCreateErrorDialog ERROR_DIALOG $TOPLEVEL noName \
            okLabelString:Ok \
            messageString:"You must supply a name...."
   XmMessageBoxGetChild CANCEL_BTN $ERROR_DIALOG DIALOG_CANCEL_BUTTON
   XmMessageBoxGetChild HELP_BTN $ERROR_DIALOG DIALOG_HELP_BUTTON
   XtUnmanageChildren $CANCEL_BTN $HELP_BTN

   XtSetValues $(XtParent "-" $ERROR_DIALOG) title:foo

   XtManageChildren $ERROR_DIALOG
}

# Pushbutton Callback: attached to the 'Cancel' pushbutton
QuitCB()
{
   exit 0
}

# Pushbutton Callback: attached to the default pushbutton.  It extracts the
#                      fields within the dialog, and does some validation.
CheckActionValues()
{
   XtGetValues $LARGEICON value:LARGEICON_VALUE
   XtGetValues $SMALLICON value:SMALLICON_VALUE
   XtGetValues $DESCRIPTION value:DESCRIPTION_VALUE
   XtGetValues $COMMANDLINE value:COMMANDLINE_VALUE
   XtGetValues $PROMPT value:PROMPT_VALUE
   XtGetValues $COMMANDTYPE menuHistory:COMMANDTYPE_WIDGET

   XmTextGetString NAME_VALUE $NAME

   if [ "$NAME_VALUE" = "" ] 
   then
      EmptyNameError
   else
      echo "Name: "$NAME_VALUE
      echo "Large Icon: "$LARGEICON_VALUE
      echo "Small Icon: "$SMALLICON_VALUE
      echo "Description: "$DESCRIPTION_VALUE
      echo "Command Line: "$COMMANDLINE_VALUE
      echo "Prompt: "$PROMPT_VALUE
      echo "Command Type: "$COMMANDTYPE_WIDGET
   fi
}

######################### Create the Main UI #################################

XtInitialize TOPLEVEL createAction CreateAction "$0" "$@"
XtCreateManagedWidget FORM form XmForm $TOPLEVEL 

XtCreateManagedWidget NAMELABEL nameLabel XmLabel $FORM \
         topAttachment:ATTACH_FORM \
         topOffset:20 \
         leftAttachment:ATTACH_FORM \
         leftOffset:20 \
         labelString:"Name:"

XtCreateManagedWidget NAME name XmText $FORM \
         topAttachment:ATTACH_OPPOSITE_WIDGET \
         topWidget:$NAMELABEL \
         topOffset:-7 \
         leftAttachment:ATTACH_WIDGET \
         leftWidget:$NAMELABEL \
         leftOffset:10 \
         rightAttachment:ATTACH_FORM \
         rightOffset:10 \
	 navigationType:EXCLUSIVE_TAB_GROUP

XtCreateManagedWidget COMMANDLINELABEL commandLineLabel XmLabel $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$NAMELABEL \
         topOffset:20 \
         leftAttachment:ATTACH_FORM \
         leftOffset:20 \
         labelString:"Command Line:"

XtCreateManagedWidget COMMANDLINE commandLine XmText $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$COMMANDLINELABEL \
         topOffset:5 \
         leftAttachment:ATTACH_FORM \
         leftOffset:40 \
         rightAttachment:ATTACH_FORM \
         rightOffset:10 \
	 navigationType:EXCLUSIVE_TAB_GROUP

XmCreatePulldownMenu PANE $FORM pane 
XtCreateManagedWidget XWIN xwin XmPushButton $PANE \
         labelString:"X Windows"
XtCreateManagedWidget NOOUT noOut XmPushButton $PANE \
         labelString:"No Output"
XtCreateManagedWidget TERM term XmPushButton $PANE \
         labelString:"Terminal"
XtCreateManagedWidget TERMCLOSE termClose XmPushButton $PANE \
         labelString:"Terminal [auto-close]"

XmCreateOptionMenu COMMANDTYPE $FORM commandType \
         topAttachment:ATTACH_WIDGET \
         topWidget:$COMMANDLINE \
         topOffset:20 \
         leftAttachment:ATTACH_FORM \
         leftOffset:20 \
         rightAttachment:ATTACH_FORM \
         rightOffset:10 \
         labelString:"Window Type:" \
         menuHistory:$TERM \
         subMenuId:$PANE \
	 navigationType:EXCLUSIVE_TAB_GROUP
XtSetValues $COMMANDTYPE spacing:35
XtManageChildren $COMMANDTYPE

XtCreateManagedWidget OPTLABEL optLabel XmLabel $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$COMMANDTYPE \
         topOffset:30 \
         leftAttachment:ATTACH_FORM \
         leftOffset:100 \
         labelString:"Optional Fields"

XtCreateManagedWidget SEP1 sep1 XmSeparator $FORM \
         topAttachment:ATTACH_OPPOSITE_WIDGET \
         topWidget:$OPTLABEL \
         topOffset:10 \
         rightAttachment:ATTACH_WIDGET \
         rightWidget:$OPTLABEL \
         rightOffset:5 \
         leftAttachment:ATTACH_FORM \
         orientation:HORIZONTAL \
         separatorType:SHADOW_ETCHED_OUT

XtCreateManagedWidget SEP2 sep2 XmSeparator $FORM \
         topAttachment:ATTACH_OPPOSITE_WIDGET \
         topWidget:$OPTLABEL \
         topOffset:10 \
         leftAttachment:ATTACH_WIDGET \
         leftWidget:$OPTLABEL \
         leftOffset:5 \
         rightAttachment:ATTACH_FORM \
         orientation:HORIZONTAL \
         separatorType:SHADOW_ETCHED_OUT

XtCreateManagedWidget PROMPTLABEL promptLabel XmLabel $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$OPTLABEL \
         topOffset:20 \
         leftAttachment:ATTACH_FORM \
         leftOffset:20 \
         labelString:"Filename Prompt:"

XtCreateManagedWidget PROMPT prompt XmText $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$PROMPTLABEL \
         topOffset:5 \
         leftAttachment:ATTACH_FORM \
         leftOffset:40 \
         rightAttachment:ATTACH_FORM \
         rightOffset:10 \
	 navigationType:EXCLUSIVE_TAB_GROUP

XtCreateManagedWidget LARGEICONLABEL largeIconLabel XmLabel $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$PROMPT \
         topOffset:30 \
         leftAttachment:ATTACH_FORM \
         leftOffset:20 \
         labelString:"Large Icon:"

XtCreateManagedWidget LARGEICON largeIcon XmText $FORM \
         topAttachment:ATTACH_OPPOSITE_WIDGET \
         topWidget:$LARGEICONLABEL \
         topOffset:-7 \
         leftAttachment:ATTACH_WIDGET \
         leftWidget:$LARGEICONLABEL \
         leftOffset:20 \
         rightAttachment:ATTACH_FORM \
         rightOffset:10 \
	 navigationType:EXCLUSIVE_TAB_GROUP

XtCreateManagedWidget SMALLICONLABEL smallIconLabel XmLabel $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$LARGEICONLABEL \
         topOffset:20 \
         leftAttachment:ATTACH_FORM \
         leftOffset:20 \
         labelString:"Small Icon:"

XtCreateManagedWidget SMALLICON smallIcon XmText $FORM \
         topAttachment:ATTACH_OPPOSITE_WIDGET \
         topWidget:$SMALLICONLABEL \
         topOffset:-7 \
         leftAttachment:ATTACH_OPPOSITE_WIDGET \
         leftWidget:$LARGEICON \
         rightAttachment:ATTACH_FORM \
         rightOffset:10 \
	 navigationType:EXCLUSIVE_TAB_GROUP

XtCreateManagedWidget DESCRIPTIONLABEL descriptionLabel XmLabel $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$SMALLICONLABEL \
         topOffset:20 \
         leftAttachment:ATTACH_FORM \
         leftOffset:20 \
         labelString:"Description:"

XmCreateScrolledText DESCRIPTION $FORM description \
          topAttachment:ATTACH_WIDGET \
          topWidget:$DESCRIPTIONLABEL \
          topOffset:5 \
          leftAttachment:ATTACH_FORM \
          leftOffset:40 \
          rightAttachment:ATTACH_FORM \
          rightOffset:10 \
          editMode:MULTI_LINE_EDIT \
          rows:4 \
	  navigationType:EXCLUSIVE_TAB_GROUP
XtManageChildren $DESCRIPTION

XtCreateManagedWidget SEP sep XmSeparator $FORM \
         topAttachment:ATTACH_WIDGET \
         topWidget:$DESCRIPTION \
         topOffset:20 \
         rightAttachment:ATTACH_FORM \
         leftAttachment:ATTACH_FORM

XtCreateManagedWidget OK ok XmPushButton $FORM \
         labelString:Apply \
         leftAttachment:ATTACH_POSITION \
         leftPosition:10 \
         rightAttachment:ATTACH_POSITION \
         rightPosition:30 \
         topAttachment:ATTACH_WIDGET \
         topWidget:$SEP \
         topOffset:20 \
         bottomOffset:10 \
         bottomAttachment:ATTACH_FORM
XtAddCallback $OK activateCallback CheckActionValues

XtCreateManagedWidget CLOSE close XmPushButton $FORM \
         labelString:Close \
         leftAttachment:ATTACH_POSITION \
         leftPosition:40 \
         rightAttachment:ATTACH_POSITION \
         rightPosition:60 \
         topAttachment:ATTACH_WIDGET \
         topWidget:$SEP \
         topOffset:20 \
         bottomOffset:10 \
         bottomAttachment:ATTACH_FORM
XtAddCallback $CLOSE activateCallback QuitCB

XtCreateManagedWidget HELP help XmPushButton $FORM \
         labelString:Help \
         leftAttachment:ATTACH_POSITION \
         leftPosition:70 \
         rightAttachment:ATTACH_POSITION \
         rightPosition:90 \
         topAttachment:ATTACH_WIDGET \
         topWidget:$SEP \
         topOffset:20 \
         bottomOffset:10 \
         bottomAttachment:ATTACH_FORM

XtSetValues $FORM \
	defaultButton:$OK \
	cancelButton:$CLOSE \
	navigationType:EXCLUSIVE_TAB_GROUP \
	initialFocus:$NAME 

# Set up proper behavior for the Return key
SetCrControls $NAME         $COMMANDLINE 
SetCrControls $COMMANDLINE  $PROMPT 
SetCrControls $PROMPT       $LARGEICON 
SetCrControls $LARGEICON    $SMALLICON 

XtRealizeWidget $TOPLEVEL
XtMainLoop
