DIRECTORY ChoiceButtons USING [UpdateChoiceButtons], Convert USING [RopeFromInt, RopeFromReal], Graph USING [CaretIndex, ColorIndex, Entity, EntityList, FontIndex, NumberOfColors, NumberOfFonts, ROPE, Text, Texts, XY], GraphConvert USING [RopeFromJustifX, RopeFromJustifY, RopeFromMark, RopeFromSDL, RopeOfSlope], GraphPrivate USING [EntityGroupList, GraphAtomProc, GraphHandle, PaintEntity, PaintText], GraphUtil USING [BlinkMsg, ControllerNotNil, Crosssections, EntityFromId, GetIntField, GetRealField, HandleNotNil, InitSegAll, PanelIndexedEntity, PanelIndexedText, RaiseError, SetIntField, SetRealField, SetToggleColor, TextFromId], Rope USING [Cat], ViewerTools USING [SetContents]; GraphResume: CEDAR PROGRAM IMPORTS ChoiceButtons, Convert, GraphConvert, GraphPrivate, GraphUtil, Rope, ViewerTools EXPORTS GraphPrivate = { OPEN Graph, GraphPrivate, GraphUtil; Resume: PUBLIC GraphAtomProc = { IF HandleNotNil[handle] THEN IF ControllerNotNil[handle.controller] THEN { OPEN handle; msg: ROPE; i: INT; r: REAL; SELECT atom FROM $Divisions => ResumeDivisionsFields[handle]; $Bounds => ResumeBoundsFields[handle]; $Carets => ResumeCaretsFields[handle]; $Primary => ResumeCaretFields[handle, primary]; $Secondary => ResumeCaretFields[handle, secondary]; $Slope => ResumeSlopeFields[handle]; $TextCaret => ResumeCaretFields[handle, text]; $Targets => ResumeTargetsFields[handle]; $Grids => ResumeGridsFields[handle]; $Color => { [msg, i] _ GetIntField[controller.colorIndex]; IF msg = NIL THEN IF i IN ColorIndex THEN ResumeColorFields[handle, i] ELSE BlinkMsg[Rope.Cat[ "Index must be in [0..", Convert.RopeFromInt[NumberOfColors], ")"]]; }; $Font => { [msg, i]_ GetIntField[controller.fontIndex]; IF msg = NIL THEN IF i IN FontIndex THEN ResumeFontFields[handle, i] ELSE BlinkMsg[Rope.Cat[ "Index must be in [0..", Convert.RopeFromInt[NumberOfFonts], ")"]]; }; $Text => { text: Text _ PanelIndexedText[controller, allTexts]; IF text = NIL THEN BlinkMsg["No text with this id."] ELSE ShowText[handle, text]; }; $XEntry => ResumeXButtonField[handle]; $Entity => { entity: Entity _ PanelIndexedEntity[controller, entityHash]; IF entity = NIL THEN BlinkMsg["No entity with this id."] ELSE IF entity # entity.group.x THEN ShowEntity[handle, entity]; }; $Crosssection => { [msg, r] _ GetRealField[controller.xsectionX]; IF msg = NIL THEN ResumeCrossSectionFields[handle, r]; }; ENDCASE => RaiseError[$UnknownAtom, "in Resume"]; }; }; -- Resume ShowText: PUBLIC PROC[handle: GraphHandle _ NIL, text: Text _ NIL] = { IF HandleNotNil[handle] AND text # NIL THEN { OPEN handle; IF TextFromId[graph.texts, text.id] = NIL THEN { graph.texts _ CONS[text, graph.texts]; IF chart.viewer # NIL THEN PaintText[handle, paint, text]; }; IF controller # NIL THEN ResumeTextFields[handle, text]; }; }; -- ShowText ShowEntity: PUBLIC PROC[handle: GraphHandle _ NIL, entity: Entity _ NIL] = { IF HandleNotNil[handle] AND entity # NIL THEN { OPEN handle; IF EntityFromId[graph.entityList, entity.id] = NIL THEN { graph.entityList _ CONS[entity, graph.entityList]; InitSegAll[entity]; IF chart.viewer # NIL THEN PaintEntity[handle, paint, entity]; }; IF controller # NIL THEN ResumeEntityFields[handle, entity]; }; }; -- ShowEntity ResumeDivisionsFields: PROC[handle: GraphHandle] = { OPEN handle; controller.auto[divisions] _ SetToggleColor[controller.swDivisions, graph.auto[divisions]]; SetIntField[controller.divX, graph.division[x]]; SetIntField[controller.divY, graph.division[y]]; }; -- SetDivisionFields ResumeBoundsFields: PROC[handle: GraphHandle] = { OPEN handle; controller.auto[bounds] _ SetToggleColor[controller.swBounds, graph.auto[bounds]]; SetRealField[controller.xmin, graph.bounds.xmin]; SetRealField[controller.ymin, graph.bounds.ymin]; SetRealField[controller.xmax, graph.bounds.xmax]; SetRealField[controller.ymax, graph.bounds.ymax]; }; -- SetBoundsFields ResumeCaretsFields: PROC[handle: GraphHandle] = { OPEN handle; FOR i: CaretIndex IN CaretIndex DO ResumeCaretFields[handle, i] ENDLOOP; ResumeSlopeFields[handle]; }; -- ResumeCaretsFields ResumeCaretFields: PROC [handle: GraphHandle, index: CaretIndex] = { OPEN handle; controller.caretOn[index] _ SetToggleColor[controller.swCaret[index], graph.caret[index].on]; SetRealField[controller.caretPlace[index][x], graph.caret[index].place.x]; SetRealField[controller.caretPlace[index][y], graph.caret[index].place.y]; }; -- ResumeCaretFields ResumeSlopeFields: PROC[handle: GraphHandle] = { OPEN handle; controller.slopeOn _ SetToggleColor[controller.swSlope, graph.showSlope]; IF graph.showSlope THEN ViewerTools.SetContents[controller.slope, GraphConvert.RopeOfSlope[graph.caret[primary].place, graph.caret[secondary].place]]; }; -- ResumeSlopeFields ResumeTargetsFields: PROC[handle: GraphHandle] = { ResumeTargetFields[handle, x]; ResumeTargetFields[handle, y]; }; -- ResumeTargetsFields ResumeTargetFields: PROC [handle: GraphHandle, xy: XY] = { OPEN handle; controller.targetOn[xy] _ SetToggleColor[controller.swTarget[xy], graph.target[xy].on]; SetRealField[controller.targetValue[xy], graph.target[xy].value]; SetRealField[controller.targetWidth[xy], graph.target[xy].width]; }; -- ResumeTargetFields ResumeGridsFields: PROC[handle: GraphHandle] = { OPEN handle; controller.gridOn[x] _ SetToggleColor[controller.swGrid[x], graph.grids[x]]; controller.gridOn[y] _ SetToggleColor[controller.swGrid[y], graph.grids[y]]; }; -- ResumeGridsFields ResumeColorFields: PROC[handle: GraphHandle, index: ColorIndex] = { OPEN handle; SetRealField[controller.red, graph.color[index].R]; SetRealField[controller.green, graph.color[index].G]; SetRealField[controller.blue, graph.color[index].B]; }; -- ResumeColorFields ResumeFontFields: PROC[handle: GraphHandle, index: FontIndex] = { OPEN handle; ViewerTools.SetContents[controller.fontFamily, graph.font[index].family]; controller.boldOn _ SetToggleColor[controller.swBold, graph.font[index].bold]; controller.italicOn _ SetToggleColor[controller.swItalic, graph.font[index].italic]; SetIntField[controller.vFontSize, graph.font[index].vFontSize]; SetRealField[controller.pFontScale, graph.font[index].pFontScale]; }; -- ResumeFontFields ResumeTextFields: PUBLIC PROC [handle: GraphHandle _ NIL, text: Text _ NIL] = { IF HandleNotNil[handle] AND text # NIL THEN { OPEN handle; ViewerTools.SetContents[controller.textContent, text.text]; SetRealField[controller.textPlaceX, text.place.x]; ChoiceButtons.UpdateChoiceButtons[controller.viewer, controller.justifXRef, GraphConvert.RopeFromJustifX[text.justifX]]; controller.justifX _ text.justifX; SetRealField[controller.textPlaceY, text.place.y]; ChoiceButtons.UpdateChoiceButtons[controller.viewer, controller.justifYRef, GraphConvert.RopeFromJustifY[text.justifY]]; controller.justifY _ text.justifY; SetIntField[controller.textColor, text.colorIndex]; SetIntField[controller.textFont, text.fontIndex]; }; }; -- ResumeTextFields ResumeXButtonField: PROC[handle: GraphHandle] = { OPEN handle; ViewerTools.SetContents[controller.xValues, GraphConvert.RopeFromSDL[entityGroupList.first.x.segments]]; -- for now. }; -- ResumeXButtonField ResumeEntityFields: PUBLIC PROC [handle: GraphHandle _ NIL, entity: Entity _ NIL] = { IF HandleNotNil[handle] AND entity # NIL THEN { OPEN handle; ViewerTools.SetContents[controller.entityName, entity.name]; SetIntField[controller.entityColor, entity.colorIndex]; SetRealField[controller.entityWidth, entity.width]; ChoiceButtons.UpdateChoiceButtons[controller.viewer, controller.markRef, GraphConvert.RopeFromMark[entity.mark]]; ViewerTools.SetContents[controller.entityValues, GraphConvert.RopeFromSDL[entity.segments]]; }; }; -- ResumeEntityFields ResumeCrossSectionFields: PROC[handle: GraphHandle, x: REAL] = { OPEN handle; rope, tRope: ROPE _ NIL; ok: BOOL; y: REAL; FOR el: EntityList _ graph.entityList, el.rest UNTIL el = NIL DO [ok, y] _ Crosssections[el.first.group.x.segments, el.first.segments, x]; tRope _ IF ok THEN Convert.RopeFromReal[y] ELSE "(*)"; rope _ IF rope = NIL THEN tRope ELSE rope.Cat[" ", tRope]; ENDLOOP; ViewerTools.SetContents[controller.xsectionYs, rope]; }; -- ResumeCrossSectionFields }. LOG. SChen, created at October 9, 1985 6:53:56 pm PDT. ΌGraphResume.mesa, Copyright c 1985 by Xerox Corporation. All rights reserved. Last Edited by: Sweetsun Chen, October 21, 1985 11:35:05 pm PDT If handle = nil or controller = nil then error; otherwise: resumes fields values on panel in the entry denoted by atom, if they are not set yet. if atom denotes text or entity and if chart.viewer # nil, then display it on graph viewer. if atom doesn't denote text or entity, then has no effect on graph viewer display. $TargetX => ResumeTargetFields[handle, x]; $TargetY => ResumeTargetFields[handle, y]; $CurveGroup => { [msg, i] _ GetIntField[controller.groupId, "id"]; IF msg = NIL THEN { eg: EntityGroup _ EntityGroupFromId[handle.entityGroupList, i]; IF eg = NIL THEN BlinkMsg[Rope.Concat["There is no curve group with id = ", Convert.RopeFromInt[i]]] ResumeCurveGroupFields[handle, eg]; }; }; SetIntField[controller.entityGroupId, entity.groupId]; ResumeCurveGroupFields: PROC[handle: GraphHandle, eg: EntityGroup] = { OPEN handle; ViewerTools.SetContent[controller.groupName, eg.name]; SetIntField[controller.xId, eg.x.id]; ViewerTools.SetContent[controller.yIds, RopeOfEntityListIds[eg.entityList, eg.x]]; }; -- ResumeCurveGroupFields rope.Concat["]"]; Κ˜JšœΟmœ1™Nšœ™Icode™/—šΟk ˜ Jšœžœ˜*Jšœžœ˜*JšœžœXžœžœ˜zJšœ žœL˜^Jšœ žœG˜YJšœ žœΩ˜θJšœžœ˜Jšœ žœ˜ —J˜šœ žœž˜JšžœQ˜XJšžœžœ ˜=J˜—šœžœ˜ ™:JšœU™UJ™ZJ™R—š žœžœžœ%žœžœ˜WJšœžœžœžœ˜šžœž˜Jšœ,˜,Jšœ&˜&Jšœ&˜&Jšœ/˜/Jšœ3˜3Jšœ$˜$Jšœ.˜.Jšœ(˜(Jšœ*™*Jšœ*™*Jšœ$˜$šœ ˜ Jšœ.˜.šžœžœž˜Jšžœžœ žœ˜4šžœ˜JšœD˜D——J˜—˜ Jšœ,˜,šžœžœž˜Jšžœžœ žœ˜2šžœ˜JšœC˜C——J˜—šœ ˜ Jšœ4˜4Jšžœžœžœ"˜4Jšžœ˜J˜—Jšœ&˜&šœ ˜ Jšœ<˜J˜—Jšžœžœžœ$˜JšœR˜RJšœ1˜1Jšœ1˜1Jšœ1˜1Jšœ1˜1JšœŸ˜—J˜š œžœžœ˜>Jšžœžœ žœžœ˜HJšœ˜JšœŸ˜—J˜š œžœ.žœ˜QJšœ]˜]JšœJ˜JJšœJ˜JJšœŸ˜—J˜š œžœžœ˜=JšœI˜Išžœžœ*˜AJšœT˜T—JšœŸ˜J˜—š œžœ˜2Jšœ˜Jšœ˜JšœŸ˜—J˜š œžœžœžœ˜GJšœW˜WJšœA˜AJšœA˜AJšœŸ˜—J˜š œžœžœ˜=JšœL˜LJšœL˜LJšœŸ˜—J˜š œžœ-žœ˜PJšœ3˜3Jšœ5˜5Jšœ4˜4JšœŸ˜—J˜š œžœ,žœ˜NJšœI˜IJšœN˜NJšœT˜TJšœ?˜?JšœB˜BJšœŸ˜—J˜—š  œžœžœžœžœ˜Oš žœžœžœžœžœ˜:Jšœ;˜;Jšœ3˜3šœK˜KJšœ,˜,—Jšœ"˜"Jšœ3˜3šœK˜KJšœ,˜,—Jšœ"˜"Jšœ4˜4Jšœ1˜1J˜—JšœŸ˜—˜š œžœžœ˜>šœ+˜+Jšœ=Ÿ ˜H—JšœŸ˜—J˜—š  œžœžœžœžœ˜Uš žœžœ žœžœžœ˜