#! /usr/dt/bin/dtksh
#  $XConsortium: crMovesText1.src /main/3 1996/04/23 20:19:33 drk $

# #########################################################################
#   (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
