#! /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

