XEROX FREE MENU CREATOR 2 4 1 FREE MENU CREATOR 1 4 By : Andr Blavier (Rank Xerox France) This document last edited on September 29, 1988 The Free Menu Creator application is designed to create interactively Free Menu description lists. It is a full graphical tool with which you can move, shape, box, group the Free Menu Items and attach properties to them. At any time you can make the application compute the description list and then test the Free Menu that you have just created. OPENING A FREE MENU CREATOR (FMC) WINDOW Once you have loaded the application the 'FMCreator' option is added to the background menu. By selecting it you will create a FMC window of the form : @ϟ08 ϟ{}o}_{}oo}_{}o`w}`?}}o}}}}7}DDD>>0aD>aP~cDpa3<`gl77p p0AϘ ("l )( "l )$ G0 I$fl0 I"l0"  6l>p! 7ϟ͌͆͆͆͆͌LJ /9Aς 'A!9A $ AJAy B1  $ǠJAďyx €1# $ QB ٰ0#D@a3B$" Bٰ0 G6Bl0DH 6BH" l0CH ÂHg ?χ`3`3 aff6 `a ff3 fl3f a c l63ن Ϙc1Ï# F 63ن ~`pcl1c3 ff f63y }﷾fl3`lc g fl63y }o~aff0lfl3 fff39 }o~χ`7f1cc9 o~~~ }o~ }? }wo`@`9H `9H c "`yٌHc "`yٌHaAI "`كyH`aI 00(`كyH`1) 1>0(`̙9H`11) ;009h`̙8Oc1>6"80h` 6"?`@c??0 "`>>0 "a1`000"aq`00?"|a`00>"a`"`"`0xÄ!!` `@@````` >`3 001`1s`g?sGR D"D@Bq3@B@tqRČ"D@>GR D"D@Btq3%$& <$$ $$  $f åt%Č$& $$ $$ $f tåxB :\R FbBBRBB FBB :BB<BXR"h>@R @ "@B@A A 8s D |  @  D 8p  #, pH#5 !!! &H!! $H#!  ç !Y2fH""DCP"DLP2"DH "DGP    ,3&$&"$$$ "$$$ "&$$ "%  f.!y 1!"  !!# !!" 1#" .  |9D|@Dz8`t`00"8tQ DR&$ |$ @$ D$$`"8t# You can fix this menu on the right edge of the main window by selecting the 'Fixed Menu' option. A SAMPLE SESSION Suppose you want to create the following Free Menu (this example is taken from the FREE MENU Lyric Release Notes) : 1 ymB$H B$H B$<B%ː B$H B$H AÇ>>! ! <A ! ! >|!"PB"PBPCB"B"BC$B$E%E E Hbb"BBBBBB$N<&"&"R%O<R%H(2%H$2%H"O"|qADBADB`AGB%CB$BpB$B8@DD@DB0B!DD!8! - choose the type of item you want to create, e.g. DISPLAY - select LABEL in the IP menu and type 'Example' - choose the font by clicking in the FAMILY, SIZE and FACE items, which will cause the following menus to pop up : ;}{}8;׮׮{ᅬw߿w}}{88>8D  DD@D DD@ @<@GA@  \%ȑD  DHD  D$@G8>8q$@"8@86D&@ D6D&@@D*D@@@*D@@*DDD*D$D"8$@8>x!< DC" " DC" "D$O<㏄"@p 2 B@! 2 B@! * B@!*B"@!& B>@!& B"@!""|p" ""&*H"*'ȑ>2$H""G"O8 HDP HDP(@P@DD8>"|qB6@& "6@&"*xa%E*@B%H*@"%O*@%H "|qH> $$> """"" $$>"&**2"" <""" - now, the properties you wanted for that new item are set. So click in the NEW field and then move the mouse to the place where you want to put the item. When you release the mouse button the item is fixed in the window.It is surrounded by a gray rectangle which means that it is selected : .   mlfm9mofmm If you move the mouse inside the selection rectangle the cursor will change to : @!@~@!@ By pressing the left button while the cursor is inside a selection, you can move that selection. Repeat the same operation for the 'NORTH, 'SOUTH', 'EAST', 'WEST', 'ONE', 'TWO' and 'THREE' items. To place the items exactly where you want you can use (and combine) the following facilities : - use the GRID (from the right menu) : ((SKETCH NIL VERSION 3 PRIRANGE (12 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.1 4.0 (PRI 6)) (SKIMAGEOBJ {(READIMAGEOBJ NIL (QUOTE BMOBJ.GETFN3))p AaQhI!I!y E! C! Awx?XwX}xv?@GqH@8@@HȪ@@HDH8 G@GtDID HHP#H@HdP HH@D H|: HG@ \VT~>\A!AYh q|A"fHH &$~>DHEy  $8A DHE  $$ȠA"DHB !&$@ADG>t@@D@@qW"D@>GR D"D@Bq3@B@tqRČ"D@>GR D"D@Btq31%$& <$$ $$  $f å} (-256 94 240.0 112.0) 1.0 (0 . 0)))) (-256.0 94.0 240.0 112.0) 1.0 8 - align and center a multiple selection : ((SKETCH NIL VERSION 3 PRIRANGE (12 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.1 4.0 (PRI 9)) (SKIMAGEOBJ {(READIMAGEOBJ NIL (QUOTE BMOBJ.GETFN3))c@GqH8HȪHDGtDBhRy R  B@B@qR"D@>GR D"D@Bq3@B@tqTČ"D@>GT@ D@"D@Dq8tq3$@#"D@q!>8@ ! $@#"D0q8%$&  <$$ ~ $$ A $f A#ÄåA$f$2$D~$$$㄀A$$$DA$d$2$DA##Ä t%Č$& $$ $$ $f tåx|\ţT~"\A"mA,ÀmŽ|~!"!3$@A!"!"#A!"!" @A!"!"$@~"#DXW"h>@R @ "@B@} (-328 136 158.0 99.0) 1.0 (0 . 0))) ((0.1 4.0 (PRI 10)) (SKIMAGEOBJ {(READIMAGEOBJ NIL (QUOTE BMOBJ.GETFN3))o@GqH8HȪHDGtDBhRy R  B@B@qR"D@>GR D"D@Bq3@B@tqRČ"D@>GR D"D@Btq3%$& <$$ $$  $f åt%Č$& $$ $$ $f tåxB :\T Fb BBTA@ BBA@ FBDA-><\" :B!5BbDI" BA!!BBA <A!!BBFI A!! BBDI |A!>!$" BD" @E!$" <8" x"" @AAz DDDDD    UUUUUUUUUUU_*""""# >G>g HIxπHI(A%HN(AAHID!x I|!@BLjD@B Dy """"# Each item of a multiple selection is surrounded by a dotted rectangle. You can move a multiple selection in the same way you move a unique selection. The Align and Center functions all refer to the first selected item. For example, if you choose 'Align Tops' then all the items except for the first one will be moved so that their top is at the same Y coordinate as that of the first item : ((SKETCH NIL VERSION 3 PRIRANGE (20 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL ELEMENTS 1 NIL)) ((0.1 4.0 (PRI 15)) (SKIMAGEOBJ {(READIMAGEOBJ NIL (QUOTE BMOBJ.GETFN3))x3UUUU>UUUU#D$$D$D'|$Dd$DcDD      X } (6 144 120.0 51.0) 1.0 (0 . 0))) ((0.1 4.0 (PRI 16)) (SKIMAGEOBJ {(READIMAGEOBJ NIL (QUOTE BMOBJ.GETFN3))5! !    02"}HI!" @HI!" @%HN"!"'DHI!"@I!"@Lj@   """"#""""""""$} (334 170 137.0 25.0) 1.0 (0 . 0))) ((0.0 11.0 (PRI 19)) (WIRE ((129.0 . 169.0) (151.0 . 169.0)) (ROUND 1 BLACK) (NIL (SOLID 18.0 12)) NIL 1 NIL (NIL ((151.0 . 169.0) (139.58733 . 165.2918) (139.58733 . 172.7082))))) ((0.0 11.0 (PRI 20)) (WIRE ((300.0 . 170.0) (322.0 . 170.0)) (ROUND 1 BLACK) (NIL (SOLID 18.0 12)) NIL 1 NIL (NIL ((322.0 . 170.0) (310.5873 . 166.2918) (310.5873 . 173.7082)))))) (6.0 140.0 465.0 55.0) 1.0 8 Now, let's box the 'Example' item : - select the item - select SHOW in the IP menu : this updates the menu according to the item - set the BOX and BOXSHADE properties : ~|=w|}\޽ww\|=w@@@@@@UUUUUU\ꪪꪪUUUUUU\UUUUUU\ꪪꪪUUUUUU\UUUUUU\ꪪ333333<333333<@̀@̀@333333<333333<̀̀333333<333333<ffffffl @ @fffffflffffffl@ @ @fffffflffffffl ȈȈȈȈȈȈȈȈ"""""",DDDDDDLȈ@"""""",@@DDDDDDL@Ȉ"""""",  @ DDDDDDL @ @ @DDDDDDL    @        '@$@ A$ A@ A$@ A$@$'@@@@@pxp - select APPLY : the item is redisplayed surrounded by a box - press the middle button inside the item : you can now shape the box (the shaping is controlled so that the space between the item and its box is the same horizontally and vertically) : 70@ @ UUUUUJ   @   ` &@ `  y9` 'm@o?g  y} c6m&ٶa@ 6o y={6l  @o6g    @    ?@      y8  l y| ٶ` y<           UUUUUUUUS  Whenever you need to change some items's property (ies) , select the item and then select SHOW in the IP menu : this updates the menu according to the item. Then, you can change any property, and update the item according to the IP menu by selecting APPLY. You can also change properties of multiple items : make a multiple selection, set the property (ies) you want to change, then select APPLY : the following menu pops up : ((SKETCH NIL VERSION 3 PRIRANGE (12 . 0) SKETCHCONTEXT ((ROUND 1 BLACK) (GACHA 10 (MEDIUM REGULAR REGULAR)) (CENTER BASELINE) (CURVE 18.0 8) NIL NIL (CENTER CENTER) (NIL NIL NIL) T NIL NIL 1 NIL)) ((0.1 4.0 (PRI 12)) (SKIMAGEOBJ {(READIMAGEOBJ NIL (QUOTE BMOBJ.GETFN3))0{tvﻨ:?{L:D!!H @ H@" H> D!A!A>|~$A A&BAA H%A H$DDA~ H$G!A H$RH"A$2!zAF@%@$@$@$P@D0@@ |H @ !B@ BI~""I@#)@H$@ A$zA~AH!@a!@Q!|I!@IH!@EH!@C!@A1 @"10@H1(@HJ$@HJ$@HJ"@ ! @OH"HHHHH(H"O0>@1@!@RD@ @RD~ @(@ @(@ @@!>@} (-180 20 140.0 146.0) 1.0 (0 . 0)))) (-180.0 20.0 140.0 146.0) 1.0 8 Only the selected property will be applied to the items. When setting a box property on multiple items, a box is created around each item, not around the whole selection. To wrap a set of items by a box you must first GROUP the items. That's what we want to do for the 'ONE', 'TWO', 'THREE' items : - select the items - choose GROUP from the right menu Groups are automatically boxed at creation. You can modify groups in the same way as you modify simple items, using the GP menu. Groups can be moved and shaped like simple items. Now, create the 'A', 'B', 'C' items, setting their TYPE to NWAY. Group the items, select SHOW in the GP menu, set COLLECTION to 'COL1', set DESELECT to T - then select APPLY : you have created the collection. Create the 'DELTA' item and then the 'Choose Me' STATE item. For this last item specify a MENU property, selecting MENU in the IP menu. This opens the following SEdit window : U8?;q<wnno{o`o?msooۯ۷nnϽ;رq;@8 >|A |q @A @ @@@ @ @xxP @@ @P @@@0 @@@0 @|@q ς @8  The first element of the list should be an item list, as suitable for standard menus. The second and third elements are optional : FONT should be a list of the form (FAMILY SIZE FACE), TITLE should be a litatom or a string. Edit the list ((BRAVO DELTA) (MODERN 12 ITALIC)) and close the SEdit window. Now, select INITSTATE : this will pop up the following menu : 4>DDDDDDĀDxH H!A!AO H#H$@$@xH@O@H H@    @ As you can see the items you just edited are part of this menu. Select DELTA. One more property is required : the LINKS property. Select LINKS : the following menu appears : T@A @A GA."1$HA!(HA!4H!"GGA!! @ Ga#."H$A1$G!(HD!4HA!"G!! Choose 'Add Link' and click on the DELTA item : the link is created. At any time you can create the actual Free Menu out of your FMC window by selecting the COMPUTE option from the right menu. This creates the description list, which is stored in the FM-DESCRIPTION global variable. A call to the FREEMENU function is done automatically with FM-DESCRIPTION as an argument, and the Free Menu window is opened. REFERENCE GUIDE General window behavior The main window, the prompt window and the properties windows behave as a whole. Moving, shaping, shrinking and closing can be directed from anyone of them. Shaping affects only the main window. Closing is protected by a confirmation request when unsaved modifications have occured. The main window is not scrollable. The right menu, when fixed, can be closed solely. Hardcopying the main window does not use the standard hardcopy functions. Instead, the contents is 'pretty-hardcopied', but the current version can't print large windows on multiple pages. The right menu Redraw : use Redraw to redisplay the contents of the window. This can be useful when items overlap. Grid : selecting the Grid option displays the grid state in the prompt window. No Grid : removes the grid. Size suboptions : specifies a grid size (in pixels). Grid alignment refers to the lower left corner of items. Display Grid : displays the grid in the window. Remove Grid Display : removes the grid display, but the grid remains active. Delete : deletes the selected item(s). Items deleted are saved in a list so they can be undeleted. The number of deleted items is displayed in the prompt window. Forget save list : deleted items are destroyed and can't be undeleted. Undelete : undeletes last deleted item. Last : same effect All : undeletes all deleted items List : pops up a menu of all the deleted items. The selected item gets undeleted. Group : groups a multiple selection. A group can include groups. The components of a group are not individually accesible. Ungroup : unpacks a group. The ungrouping operation works only at the first level, i.e. included groups are not unpacked. Align : the Align suboptions all work on a multiple selection (items and/or groups). The alignment operation refers to the first selected item. Left sides : align left sides of selected items Right sides : align right sides of selected items Tops : align tops of selected items Bottoms : align bottoms of selected items Center : the Center suboptions all work on a multiple selection (items and/or groups). The centering operation refers to the first selected item. Horizontally : center items so their center is on the same X coordinate as that of the first selected item Vertically : center items so their center is on the same Y coordinate as that of the first selected item Select All : selects all the window contents Background : pops up a shade menu for setting the window background shade Summary : creates a TEdit window listing a summary of the window contents. Only interesting properties are described, depending on the item type. Groups contents are indented hierarchically. Import : allows items importation from a Free Menu. This function works but is currently bugged : importing items with a MENU property is not supported ; when importing groups only their contents are imported. Compute : generates a description list of the items suitable for the FREEMENU function. The list is stored in the FMC-DESCRIPTION global variable. Opens a Free Menu built out from FMC. Get : loads the contents of a FMC window, previously stored on disk by a Put operation. The loaded items (groups) are added to the current contents of the window. Put : saves the contents of a FMC window on disk. Fixed Menu : when the right menu is poped up by the right mouse button, attaches the menu to the main window. Once the menu is fixed, has no effect. The Item Properties menu APPLY : if the selection is unique sets the selected item properties to the properties described in the menu. If the selection is multiple, pops up a menu of properties and sets the selected property of all the selected items according to the menu. SHOW : updates the menu according to the selected item, thus allowing editing its properties. NEW : creates a new item which properties are described in the menu. TYPE : lets the user specify the TYPE property from a pop-up menu. LABEL : lets the user edit the LABEL property. If no label is edited the item will be displayed in FMC with the pseudo-label '*NOLABEL*'. Right-buttoning in this field will start label edition, clearing the field first. Middle-buttoning puts the cursor in the GETREGION state, and sets the label to the bitmap specified by the user. ID : lets the user edit the ID property. The edited string is always MKATOMed in the description list. FONT : FAMILY, SIZE and FACE allow font descriptions from pop-up menus. BOX : BOX=0 means no box. BOXSHADE, BACKGROUND : pop up a shade menu, including an 'OTHER' option for shade editing. MENU : opens a SEdit window where the user specifies the MENUITEMS, MENUFONT and MENUTITLE properties. The list must be of the form (MENUITEMS [MENUFONT] [MENUTITLE]). INITSTATE : pops up a menu of possible INITSTATE values, depending on the item TYPE and possible MENUITEMS. CHANGESTATE, SELECTEDFN, DOWNFN, HELDFN, MOVEDFN : open a SEdit window for the corresponding property. The edited list can be of the form (FUNCTION function-name) or a LAMBDA-expression. LINKS : pops up a menu with 2 items : 'Add Link' and 'Remove Link'. 'Add Link' prompts the user to click on the item that is to get linked (this item must have an ID). 'Remove Link' removes the link. INFINITEWIDTH : this toggle item is suitable for EDIT or NUMBER items only. MESSAGE : starts editing the MESSAGE property (right buttoning clears the field first). The Group Properties menu APPLY, SHOW, ID, BOX, BOXSHADE, BACKGROUND behave in the same way as in the IP window. COLLECTION : starts editing a COLLECTION name. Specifying a COLLECTION property is suitable only for groups which items are NWAY. DESELECT : a toggle item whose value is relevant only for COLLECTIONs. About item shaping The effects of middle buttoning inside an item is different wether the item is boxed or not. If the item is boxed, shaping will be constrained as described in the sample session, i.e. BOXSPACE must be the same horizontally and vertically. If the item is not boxed, shaping is constrained so that only the item's width can be changed, in fact modifying the MAXWIDTH property. Copy functions The effects of pressing the COPY key and left buttoning when a FMC window has the TTY depend on what is to be copied : - when clicking in a SKETCH window, the selected objects are made a graphic LABEL - when clicking in a FMC window, the selected items are copied in the target window (the source and the target can be the same).(LIST ((PAGE NIL (PAPERSIZE LETTER FOLIOINFO (ARABIC "" "") STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC "" "")) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE NIL . LETTER) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE NIL . LETTER) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO NIL) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))))) ( ( ((((((8(8D PAGEHEADING RUNNINGHEADMODERN ?1(DEFAULTFONT 1 (GACHA 10) (GACHA 8) (TERMINAL 8)) MODERN MODERN MODERN MODERNLOGO   HRULE.GETFNMODERN   HRULE.GETFNMODERN   HRULE.GETFNMODERN  HRULE.GETFNMODERN   HRULE.GETFNMODERN O0c)n> BMOBJ.GETFN3MODERN  'SQ- TR $ BMOBJ.GETFN3MODERN atT BMOBJ.GETFN3MODERN "6 BMOBJ.GETFN3; #%: BMOBJ.GETFN3MODERN LL~l BMOBJ.GETFN3MODERN Q* BMOBJ.GETFN3MODERN ad_  SKIO.GETFN.2MODERN > SKIO.GETFN.2MODERN : L BMOBJ.GETFN3MODERN  H SKIO.GETFN.2MODERN $ >( , BMOBJ.GETFN3MODERN  / BMOBJ.GETFN3MODERN Z   SKIO.GETFN.2MODERN 9L YK$s9  BMOBJ.GETFN3MODERN Z ) BMOBJ.GETFN3MODERN N$7D BMOBJ.GETFN3MODERN EXW>2^Kj $:7 Nvs & ' # _ _ # @/ ZB?RqeD G c   ?Q - x?]xR>mz