dtksh Sample Application (font chooser)
#!/usr/opt/dt/bin/dtksh
# This function builds the XLFD string and echos it to its standard output.
function getXLFD {
# declare local variables
typeset facename set
typeset CURFONT
# Get the selected items from FN list box, and put them into variable facename.
XtGetValues $FN selectedItems:facename
# concat the face name to the start of the XLFD
CURFONT="*-"$facename
XtGetValues $BOLD set:set
if [[ $set == true ]]
then CURFONT="${CURFONT}-bold"
else CURFONT="${CURFONT}-medium"
fi
XtGetValues $ITALIC set:set
if [[ $set == true ]] then
if [[ facename = "Helvetica" || facename = "Courier" ]]
then CURFONT="${CURFONT}-o-normal--"
else CURFONT="${CURFONT}-i-normal--"
fi
else CURFONT="${CURFONT}-r-normal--"
fi
XtGetValues $FS value:size
CURFONT="${CURFONT}${size}-*"
echo "$CURFONT"
}
# Set the text font used for the preview widget to the value build in
# the function getXLFD.
# This function must be added to to the appropriate callback list for
# each control, since there is no message passing hierarchy.
function RESET_CB {
XtSetValues $PREVIEW fontList:"$(getXLFD)"
}
alias OK_CB='getXLFD;exit'
alias CANCEL_CB=exit
alias HELP_CB='DtDisplayQuickHelpDialog "HELP" HELP_TYPE_STRING \
"This is a help string, I could have also specified a file."'
# Increment/decrement value in size text widget when the up arrow button is
# pressed. First argument is either 1 or -1.
function ARROW_CB {
typeset size
XtGetValues $FS value:size
if [[ $size = +([0-9]) ]]
then (( size = size + $1 ))
else size=1
fi
XtSetValues $FS value:$size
RESET_CB
}
# set the default font. Note that full XLFD names must be supplied:
DEFAULT_FONT="-adobe-helvetica-medium-r-normal--14-140-75-75-p-77-iso8859-1"
XtInitialize TOPLEVEL font_chooser "Font Chooser" "$@"
XmCreateForm FORM $TOPLEVEL main_form width:346 height:334
# have to set the fonts for each type of objects separately
XtSetValues $FORM textFontList:"$DEFAULT_FONT" \
buttonFontList:"$DEFAULT_FONT" labelFontList:"$DEFAULT_FONT"
XmCreateLabel L1 $FORM name_label labelString:"Name:" \
x:8 y:4 width:64 height:32 alignment:ALIGNMENT_BEGINNING
XmCreateScrolledList FN $FORM font_name visibleItemCount:7
XtSetValues $(XtParent - $FN) x:16 y:38
XtAddCallback $FN browseSelectionCallback RESET_CB
XmListAddItems $FN 0 "Charter" "Clean" "Courier" "Helvetica" "Lucida" \
"LucidaBright" "LucidaTypewriter" "New Century Schoolbook" \
"Symbol" "Times" "fixed" "terminal"
XmCreateLabel L2 $FORM size_label labelString:"Size:" \
x:224 y:40 width:48 height:32 alignment:ALIGNMENT_BEGINNING
XmCreateText FS $FORM font_size value:"14" \
x:272 y:40 width:40 height:32
XtAddCallback $FS losingFocusCallback RESET_CB
XmCreateArrowButton UA $FORM ab1 \
x:312 y:36 height:22
XtAddCallback $UA activateCallback 'ARROW_CB 1'
XmCreateArrowButton DA $FORM ab2 arrowDirection:ARROW_DOWN \
x:312 y:58 height:24
XtAddCallback $DA activateCallback 'ARROW_CB -1'
XmCreateLabel L3 $FORM style_label labelString:"Style:" \
x:224 y:104 width:52 height:32 alignment:ALIGNMENT_BEGINNING
XmCreateToggleButton BOLD $FORM bold labelString:"Bold" \
x:276 y:104 width:60 height:28
XtAddCallback $BOLD valueChangedCallback RESET_CB
XmCreateToggleButton ITALIC $FORM italic labelString:"Italic" \
x:276 y:132 width:60 height:28
XtAddCallback $ITALIC valueChangedCallback RESET_CB
XmCreateLabel L4 $FORM size_label labelString:"Size:" \
x:12 y:200 width:76 height:32 alignment:ALIGNMENT_BEGINNING
XmCreateText PREVIEW $FORM preview value:"Sample text" \
x:86 y:200 width:246 height:72
XmCreatePushButton OK $FORM ok_button labelString:"OK" showAsDefault:true \
x:13 y:284 width:104 height:44
XtAddCallback $OK activateCallback OK_CB
XmCreatePushButton CANCEL $FORM ok_button labelString:"Cancel" \
x:129 y:288 width:96 height:36
XtAddCallback $CANCEL activateCallback CANCEL_CB
XmCreatePushButton HELP $FORM ok_button labelString:"Help" \
x:238 y:288 width:96 height:36
XtAddCallback $HELP activateCallback HELP_CB
# Manage each of the children created, since they aren't managed when created.
XtManageChildren $L1 $L2 $L3 $L4 $FS $UA $DA $BOLD $ITALIC $PREVIEW
XtManageChildren $FN
XtManageChildren $OK $CANCEL $HELP
XtManageChildren $FORM
XtRealizeWidget $TOPLEVEL
XtMainLoop