(FILECREATED "14-MAR-83 00:22:16" {PHYLUM}<BLUEBONNET>HELPGRAPH.;9 19681
changes to: (FNS DisplayHelpNode)
previous date: "10-MAR-83 15:25:31" {PHYLUM}<BLUEBONNET>HELPGRAPH.;8)
(* Copyright (c) 1983 by Xerox Corporation)
(PRETTYCOMPRINT HELPGRAPHCOMS)
(RPAQQ HELPGRAPHCOMS ((VARS HelpGraph HelpGraphFont (HelpWindow NIL))
(RECORDS HELPNODE)
(FNS AlreadyDefined CreateHelpNode DisplayHelpGraph DisplayHelpNode DrawBox DrawBoxOnSheet
DrawLineOnSheet EHN EHelpGraph EditHelpGraph EditHelpNode GetDrawings GetFlashRegion
GetHelpNode GetSlotToEdit GetTextFromUser GetWindowRegion HandleHelpGraphMenu
MenuItemsFromHelpNode ParseDrawMenu ReadString SearchHelp ShowHelpGraph)))
(RPAQQ HelpGraph ({HELPNODE}#3,163740 {HELPNODE}#3,163710 {HELPNODE}#3,163660 {HELPNODE}#3,163630
{HELPNODE}#3,163600
{HELPNODE}#3,163550 {HELPNODE}#3,163520 {HELPNODE}#3,163470
{HELPNODE}#3,163440
{HELPNODE}#3,163410 {HELPNODE}#3,163360 {HELPNODE}#3,163330
{HELPNODE}#3,163300))
(RPAQQ HelpGraphFont {FONTDESCRIPTOR}#1,107036)
(RPAQQ HelpWindow NIL)
[DECLARE: EVAL@COMPILE
(DATATYPE HELPNODE (PARENTS CHILDREN BITMAP BITMAPREGION BEFOREDISPLAYPROC AFTERDISPLAYPROC TEXT
KEYWORDS TITLE NODENAME FLASHREGIONS OVERLAYLIST)
KEYWORDS ←(QUOTE (*DEFAULT*)))
]
(/DECLAREDATATYPE (QUOTE HELPNODE)
(QUOTE (POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER
POINTER POINTER POINTER)))
(DEFINEQ
(AlreadyDefined
[LAMBDA (node) (* dmr: "28-FEB-83 18:53")
(* return T if this graphNode is already defined in the
HelpGraph)
(for elt in HelpGraph when (EQUAL node:NODELABEL elt:NAME) do (RETURN T) finally NIL])
(CreateHelpNode
[LAMBDA (name childNodes parentNodes) (* edited: " 4-MAR-83 10:06")
(* Fill in the slots of a helpnode.)
(PROG (node r b)
(node←(create HELPNODE))
(PRIN1 "
Creating ")
(PRIN1 name)
(TERPRI)
(PRIN1 "What is this node's window title? ")
(node:TITLE←(ReadString))
(TERPRI)
(node:NODENAME←name)
(if [MENU (create MENU
ITEMS ←(QUOTE (("Have own bitmap" T)
("Get bitmap from screen" NIL]
then (PRIN1 " ... the name of that bitmap is: ")
node:BITMAP←(EVAL (READ))
else r←(GETREGION)
b←(BITMAPCREATE r:WIDTH r:HEIGHT)
(BITBLT (SCREENBITMAP)
r:LEFT r:BOTTOM b) (* Initialize the bm and the region that describes it.)
node:BITMAP←b
node:BITMAPREGION←(create REGION
LEFT ← 0
BOTTOM ← 0
WIDTH ← r:WIDTH
HEIGHT ← r:HEIGHT))
(node:PARENTS←parentNodes)
(node:CHILDREN←childNodes)
(HelpGraph← < ! HelpGraph node>)
(RETURN node])
(DisplayHelpGraph
[LAMBDA NIL (* edited: " 2-MAR-83 16:37")
(DisplayHelpNode HelpGraph:1])
(DisplayHelpNode
[LAMBDA (helpnode) (* edited: "14-MAR-83 00:20")
(* Look at the fields of a helpnode and display them on
the screen.)
(PROG (menu helpMenu)
[if HelpWindow=NIL
then HelpWindow←(CREATEW (create REGION
LEFT ← 500
WIDTH ← 500
HEIGHT ← 483
BOTTOM ← 324))
HelpGraphFont←(FONTCREATE (QUOTE TIMESROMAN)
12
(QUOTE BOLD))
(DSPFONT HelpGraphFont (WINDOWPROP HelpWindow (QUOTE DSP)))
(WINDOWPROP HelpWindow (QUOTE RIGHTBUTTONFN)
(FUNCTION (LAMBDA NIL NIL]
(CLEARW HelpWindow)
(if helpnode:BITMAP~=NIL
then [if helpnode:BITMAPREGION=NIL
then (helpnode:BITMAPREGION←(create REGION
LEFT ← 0
BOTTOM ← 0
HEIGHT ←(WINDOWPROP HelpWindow
(QUOTE HEIGHT))
WIDTH ←(WINDOWPROP HelpWindow
(QUOTE WIDTH]
(BITBLT helpnode:BITMAP NIL NIL HelpWindow helpnode:BITMAPREGION:LEFT
helpnode:BITMAPREGION:BOTTOM helpnode:BITMAPREGION:WIDTH
helpnode:BITMAPREGION:HEIGHT))
(WINDOWPROP HelpWindow (QUOTE TITLE)
helpnode:TITLE) (* put the value of the currently displayed helpnode
onto the prop list of the window)
(WINDOWPROP HelpWindow (QUOTE CurrentHelpNode)
helpnode) (* Display the text. The text is stored as
((<pos> text) ...))
(for t in helpnode:TEXT
do (DSPXPOSITION t:1:XCOORD HelpWindow)
(DSPYPOSITION t:1:YCOORD HelpWindow)
(PRIN1 t:2 HelpWindow))
(if helpnode:OVERLAYLIST~=NIL
then (for line in helpnode:OVERLAYLIST
do (DRAWLINE line:1 line:2 line:3 line:4 1 NIL HelpWindow)))
(* create the menu to move up or down the help graph)
(menu←(WINDOWPROP HelpWindow (QUOTE HelpMenu)))
(if menu
then (DELETEMENU (WINDOWPROP HelpWindow (QUOTE HelpMenu))
T))
(helpMenu←(create MENU
MENUFONT ← HelpGraphFont
ITEMS ←(MenuItemsFromHelpNode helpnode)
WHENSELECTEDFN ←(QUOTE HandleHelpGraphMenu)
TITLE ← "More Available Help"
CENTERFLG ← T))
(ADDMENU helpMenu NIL (create POSITION
XCOORD ←(fetch LEFT of (WINDOWPROP HelpWindow (QUOTE REGION)))
YCOORD ←((fetch BOTTOM of (WINDOWPROP HelpWindow
(QUOTE REGION)))
-helpMenu:IMAGEHEIGHT)))
(* turn off the RIGHTBUTTON inside of the menu)
(WINDOWPROP (WFROMMENU helpMenu)
(QUOTE RIGHTBUTTONFN)
(QUOTE [LAMBDA NIL NIL]))
(WINDOWPROP HelpWindow (QUOTE HelpMenu)
helpMenu) (* flash the regions in the flashregions list, if any)
[if helpnode:FLASHREGIONS
then (for i from 1 to 4 do (for region in helpnode:FLASHREGIONS
do (BITBLT HelpWindow region:LEFT region:BOTTOM
HelpWindow region:LEFT region:BOTTOM
region:WIDTH region:HEIGHT (QUOTE INVERT))
(DISMISS 100]
(* The after display hook.)
(if helpnode:AFTERDISPLAYPROC
then (EVAL helpnode:AFTERDISPLAYPROC])
(DrawBox
[LAMBDA (region width window operation) (* edited: "13-JAN-83 13:48")
(PROG NIL
(DRAWLINE region:LEFT region:BOTTOM region:LEFT+region:WIDTH region:BOTTOM width operation
window)
(DRAWTO region:LEFT+region:WIDTH region:BOTTOM+region:HEIGHT width operation window)
(DRAWTO region:LEFT region:BOTTOM+region:HEIGHT width operation window)
(DRAWTO region:LEFT region:BOTTOM width operation window])
(DrawBoxOnSheet
[LAMBDA (window) (* edited: " 3-MAR-83 08:46")
(PROG NIL (* User wants to draw a line.
Let him.)
(boxRegion←(GetWindowRegion window))
(DrawBox boxRegion 1 window)
(RETURN <<boxRegion:LEFT boxRegion:BOTTOM boxRegion:LEFT+boxRegion:WIDTH boxRegion:BOTTOM>
<boxRegion:LEFT boxRegion:BOTTOM boxRegion:LEFT
boxRegion:BOTTOM+boxRegion:HEIGHT> <boxRegion:LEFT
boxRegion:BOTTOM+boxRegion:HEIGHT
boxRegion:LEFT+boxRegion:WIDTH
boxRegion:BOTTOM+boxRegion:HEIGHT>
<boxRegion:LEFT+boxRegion:WIDTH boxRegion:BOTTOM+boxRegion:HEIGHT
boxRegion:LEFT+boxRegion:WIDTH boxRegion:BOTTOM>>])
(DrawLineOnSheet
[LAMBDA (window) (* edited: " 3-MAR-83 08:07")
(PROG ((lastPoint NIL)) (* User wants to draw a line.
Let him.)
(until ~(MOUSESTATE UP) do NIL) (* he has now dropped one end of the line.)
(pt1← <(LASTMOUSEX window) !(LASTMOUSEY window)
>)
(until (MOUSESTATE UP)
do (* Erase the last line if it is there...)
(if lastPoint~=NIL
then (DRAWLINE pt1:XCOORD pt1:YCOORD lastPoint:XCOORD lastPoint:YCOORD 1
(QUOTE INVERT)
window)) (* get the new point)
(pt2← <(LASTMOUSEX window) !(LASTMOUSEY window)
>)
(DRAWLINE pt1:XCOORD pt1:YCOORD pt2:XCOORD pt2:YCOORD 1 NIL window)
(lastPoint←pt2))
(RETURN <<pt1:XCOORD pt1:YCOORD pt2:XCOORD pt2:YCOORD>>])
(EHN
[LAMBDA NIL (* edited: " 3-MAR-83 12:37")
(EditHelpNode (WINDOWPROP HelpWindow (QUOTE CurrentHelpNode])
(EHelpGraph
[LAMBDA NIL (* edited: " 3-MAR-83 07:28")
(PROG NIL
(MENU (create MENU
ITEMS ←(for elt in HelpGraph collect <elt:TITLE elt:NODENAME>)
TITLE ← "Edit Help Graph Menu"
WHENSELECTEDFN ←(QUOTE (LAMBDA (X)
(EditHelpNode (GetHelpNode (CADR X])
(EditHelpGraph
[LAMBDA (font) (* edited: " 8-MAR-83 19:28")
(PROG (graph nodeList)
(SETQ nodeList (for node in HelpGraph collect (NODECREATE (fetch NODENAME of node)
(fetch NODENAME of node)
NIL
(for x
in (fetch PARENTS
of node)
collect x)
(for x
in (fetch CHILDREN
of node)
collect x)
font)))
[EDITGRAPH1 (SETQ W (SHOWGRAPH (LAYOUTFOREST nodeList (fetch NODENAME of (CAR HelpGraph))
NIL font]
(SETQ HelpGraph (for elt in list when (NOT (AlreadyDefined elt HelpGraph)) collect
(foo])
(EditHelpNode
[LAMBDA (node) (* edited: "10-MAR-83 11:08")
(* Fill in the slots of a helpnode.)
(PROG (r b)
(PRIN1 "Editing helpnode: ")
(PRIN1 node:NODENAME)
(TERPRI)
(while T
do ((SELECTQ (GetSlotToEdit)
(QUIT (RETURN node))
(PARENTS (TERPRI)
(PRIN1 "Current parent's list = ")
(PRIN1 node:PARENTS)
(TERPRI)
(PRIN1 "Parents list? ")
node:PARENTS←
(READ))
(CHILDREN (TERPRI)
(PRIN1 "Children list? ")
(PRIN1 "Current children list = ")
(PRIN1 node:CHILDREN)
(TERPRI)
node:CHILDREN←
(READ))
(BITMAP (PRIN1 node:BITMAP)
node:BITMAPREGION←NIL
(if [MENU (create MENU
ITEMS ←(QUOTE (("Have own bitmap" T)
("Get bitmap from screen" NIL]
then (PRIN1 " ... the name of that bitmap is: ")
node:BITMAP←(EVAL (READ))
else r←(GETREGION)
b←(BITMAPCREATE r:WIDTH r:HEIGHT)
(BITBLT (SCREENBITMAP)
r:LEFT r:BOTTOM b)
node:BITMAP←b
node:BITMAPREGION←(create REGION
LEFT ← 0
BOTTOM ← 0
WIDTH ← r:WIDTH
HEIGHT ← r:HEIGHT)))
(BITMAPREGION b←node:BITMAP node:BITMAPREGION←
(GETBOXREGION node:BITMAPREGION:WIDTH
node:BITMAPREGION:HEIGHT
(if node:BITMAPREGION=NIL
then 0
else node:BITMAPREGION:LEFT)
(if node:BITMAPREGION=NIL
then 0
else node:BITMAPREGION:WIDTH)
HelpWindow))
(RESETBITMAPREGION (PRIN1 "Bitmap moved back to lower left corner.")
(TERPRI)
node:BITMAPREGION:LEFT←0 node:BITMAPREGION:BOTTOM←0)
(BEFOREDISPLAYPROC (PRIN1 "What would you like for the BEFOREDISPLAYPROC? ")
node:BEFOREDISPLAYPROC←
(READ))
(AFTERDISPLAYPROC (PRIN1 "What would you like for the AFTERDISPLAYPROC? ")
node:AFTERDISPLAYPROC←
(READ))
(NEWTEXT (TERPRI)
(PRIN1 "New text? ")
node:TEXT←
(GetTextFromUser))
(ADDTEXT (PRIN1 "Adding text to existing text")
node:TEXT← < ! node:TEXT ! (GetTextFromUser)
>)
[KEYWORDS (TERPRI)
(PRIN1 "New keywords? ")
(if node:KEYWORDS
then (ev (fetch KEYWORDS of node))
else (node:KEYWORDS←(READ]
(TITLE (TERPRI)
(PRIN1 "New Node Window Title: ")
node:TITLE←
(ReadString))
(NODENAME node:NODENAME←name)
(ADDLINES node:OVERLAYLIST← < ! node:OVERLAYLIST ! (GetDrawings)
>)
(NEWLINES node:OVERLAYLIST← (GetDrawings))
(ADDFLASHREGION node:FLASHREGIONS← < ! node:OVERLAYLIST ! (GetFlashRegion)
>)
(NEWFLASHREGIONS node:FLASHREGIONS← (GetFlashRegion))
(PRIN1 "Default -- strange selection "))
(DisplayHelpNode node)))
(TERPRI)
(RETURN node])
(GetDrawings
[LAMBDA NIL (* edited: " 3-MAR-83 08:00")
(MENU (create MENU
WHENSELECTEDFN ←(QUOTE ParseDrawMenu)
ITEMS ←(QUOTE (("Line" DRAWLINE
"If you select this, you can draw a line on the window")
("Box" DRAWBOX "Draws a box on the helpnode window.")))
CENTERFLG ← T])
(GetFlashRegion
[LAMBDA NIL (* edited: " 3-MAR-83 09:02")
(PROG (tmp)
(TERPRI PROMPTWINDOW)
(PRIN1 "Select a region to have flashed during helpnode display" PROMPTWINDOW)
(tmp← <(GetWindowRegion HelpWindow)
>) (* check to see if the region is on the window, if not,
then return NIL)
(if [INTERSECTREGIONS tmp:1 (DSPCLIPPINGREGION NIL (WINDOWPROP HelpWindow (QUOTE DSP]
then (RETURN tmp)
else (RETURN NIL])
(GetHelpNode
[LAMBDA (name) (* DMR: " 1-MAR-83 12:45")
(for x in HelpGraph
when (EQUAL name x:NODENAME) or (EQUAL name x) do (RETURN x])
(GetSlotToEdit
[LAMBDA NIL (* edited: " 4-MAR-83 10:14")
(MENU (create MENU
ITEMS ←(QUOTE (("Parents" (QUOTE PARENTS))
("Children" (QUOTE CHILDREN))
("Bitmap" (QUOTE BITMAP))
("Bitmap Region" (QUOTE BITMAPREGION))
("Reset Bitmap Region" (QUOTE RESETBITMAPREGION))
("Before DisplayProc" (QUOTE BEFOREDISPLAYPROC))
("AfterDisplayProc" (QUOTE AFTERDISPLAYPROC))
("Add Text" (QUOTE ADDTEXT))
("Replace existing text" (QUOTE NEWTEXT))
("Keywords" (QUOTE KEYWORDS))
("Window Title" (QUOTE TITLE))
("Node name" (QUOTE NODENAME))
("Add Flash Region" (QUOTE ADDFLASHREGION))
("Replace Flash Regions" (QUOTE NEWFLASHREGIONS))
("Add drawings" (QUOTE ADDLINES))
("Replace drawings" (QUOTE NEWLINES))
("Quit" (QUOTE QUIT])
(GetTextFromUser
[LAMBDA NIL (* edited: " 2-MAR-83 16:44")
(* Return a list of (position text) pairs)
(while T bind txt
collect (TERPRI)
(PRIN1 "Enter a line of text: ")
(txt←(ReadString))
(TERPRI)
(if (UNPACK txt)=NIL
then (RETURN $$VAL))
(PRIN1 "Point to a display position")
(<(GETPOSITION HelpWindow)
txt>])
(GetWindowRegion
[LAMBDA (window) (* edited: "15-DEC-82 08:43")
(* Return a region in window coords)
(PROG NIL
(r←(GETREGION))
(wRegion←(WINDOWPROP window (QUOTE REGION)))
(clippingRegion←(DSPCLIPPINGREGION NIL window)) (* Get relative window coords.)
(r:LEFT←r:LEFT-wRegion:LEFT)
(r:BOTTOM←r:BOTTOM-wRegion:BOTTOM) (* Make absolute coords.)
(r:LEFT←r:LEFT+clippingRegion:LEFT)
(r:BOTTOM←r:BOTTOM+clippingRegion:BOTTOM)
(RETURN r])
(HandleHelpGraphMenu
[LAMBDA (item) (* DMR: " 1-MAR-83 12:55")
(* Given a menu item, do the correct thing...)
(PROG name
(name←item:2)
(DisplayHelpNode (GetHelpNode name])
(MenuItemsFromHelpNode
[LAMBDA (node) (* edited: " 3-MAR-83 09:43")
(* return a list of items suitable for a menu given a
helpnode)
(PROG NIL
(* Collect all of the parent nodes which have legal definitions. Do this filter because we may refer to a helpnode
which hasn't been defined yet.)
(parentNodes←(for x in node:PARENTS when (GetHelpNode x) collect <(GetHelpNode x):TITLE
(GetHelpNode x)
:NODENAME>))
(childNodes←(for x in node:CHILDREN when (GetHelpNode x) collect <(GetHelpNode x):TITLE
(GetHelpNode x)
:NODENAME>))
(RETURN < ! parentNodes ! childNodes>])
(ParseDrawMenu
[LAMBDA (args) (* edited: " 3-MAR-83 07:52")
(SELECTQ args:2
(DRAWLINE (DrawLineOnSheet HelpWindow))
(DRAWBOX (DrawBoxOnSheet HelpWindow))
(PRINT "This shouldn't happen to a nice guy like you."])
(ReadString
[LAMBDA NIL (* edited: " 2-MAR-83 16:58")
(PROG ((x (COPYREADTABLE)))
(SETBRK <(CHARCODE SPACE) > 0 x)
(CLEARBUF)
(RETURN (RSTRING NIL x])
(SearchHelp
[LAMBDA (keywords) (* edited: " 4-MAR-83 15:31")
(* Bring up the BlueBonnet help window with an appropriate node in the graph. Input is a list of keywords...
presumably atoms from the user's plan ... that describes what he needs to know.)
(if ~(for node in HelpGraph do (if (INTERSECTION keywords node:KEYWORDS)
then (DisplayHelpNode node)
(RETURN T)))
then (DisplayHelpNode HelpGraph:1])
(ShowHelpGraph
[LAMBDA (font) (* dmr: "28-FEB-83 18:23")
(PROG (graph nodeList)
(nodeList←(for node in HelpGraph collect (NODECREATE node:NODENAME node:NODENAME NIL
(for x in node:PARENTS collect x:1)
(for x in node:CHILDREN collect x:1)
font)))
(SHOWGRAPH (LAYOUTFOREST nodeList HelpGraph:1:NODENAME NIL font])
)
(PUTPROPS HELPGRAPH COPYRIGHT ("Xerox Corporation" 1983))
(DECLARE: DONTCOPY
(FILEMAP (NIL (1516 19601 (AlreadyDefined 1526 . 1897) (CreateHelpNode 1899 . 3087) (DisplayHelpGraph
3089 . 3244) (DisplayHelpNode 3246 . 6889) (DrawBox 6891 . 7374) (DrawBoxOnSheet 7376 . 8178) (
DrawLineOnSheet 8180 . 9141) (EHN 9143 . 9316) (EHelpGraph 9318 . 9683) (EditHelpGraph 9685 . 10529) (
EditHelpNode 10531 . 13613) (GetDrawings 13615 . 13977) (GetFlashRegion 13979 . 14574) (GetHelpNode
14576 . 14797) (GetSlotToEdit 14799 . 15673) (GetTextFromUser 15675 . 16199) (GetWindowRegion 16201 .
16860) (HandleHelpGraphMenu 16862 . 17184) (MenuItemsFromHelpNode 17186 . 18054) (ParseDrawMenu 18056
. 18350) (ReadString 18352 . 18593) (SearchHelp 18595 . 19130) (ShowHelpGraph 19132 . 19599)))))
STOP