<<--File: IPTopOpRecs.mesa>> <> <<>> DIRECTORY <<-- Intro: This interface defines all the records used by the undo and redo facility>> <<-- NB: Any records whose names begin with FR means that the record is a Forward (ie.>> <<-- redo) record, begins with IR (ie. undo) record, and begins with R (ie. used by both>> <<-- undo and redo.)>> <<>> Rope, IPCoTab USING [Component, CornerTypes, CornerSpace], IPCTG USING[Channel, ChType, Side], IP USING [Orientation, OrientationTypes, IntVector, ShapeRep]; IPTopOpRecs: CEDAR DEFINITIONS = BEGIN <<>> <<-- IR = InverseRecord-->> IRFormCross: TYPE = REF IRFormCrossRec; IRFormCrossRec: TYPE = RECORD[refCh, negCh, posCh: IPCTG.Channel]; IRBreakCross: TYPE = REF IRBreakCrossRec; IRBreakCrossRec: TYPE = RECORD[refCh, chToBreak, newCh1: IPCTG.Channel]; IRRemoveCo1: TYPE = REF IRRemoveCo1Rec; IRRemoveCo1Rec: TYPE = RECORD[co: IPCoTab.Component, shrinkDirectn: IPCTG.ChType, sideToClHint: IPCTG.Side]; IRInsertCo1: TYPE = REF IRInsertCo1Rec; IRInsertCo1Rec: TYPE = RECORD[co: IPCoTab.Component, chToSplit, negBnd, posBnd: IPCTG.Channel, sideToOpHint: IPCTG.Side, newCh1: IPCTG.Channel]; IRRemoveCo2: TYPE = REF IRRemoveCo2Rec; IRRemoveCo2Rec: TYPE = RECORD[co: IPCoTab.Component, shrinkDirectn: IPCTG.ChType, sideToClHint: IPCTG.Side]; IRInsertCo2: TYPE = REF IRInsertCo2Rec; IRInsertCo2Rec: TYPE = RECORD[co: IPCoTab.Component, chToSplit, negBnd, posBnd: IPCTG.Channel, sideToOpHint: IPCTG.Side, newCh1: IPCTG.Channel]; IRRemoveZ: TYPE = REF IRRemoveZRec; IRRemoveZRec: TYPE = RECORD[zSpine: IPCTG.Channel]; IRFormZ: TYPE = REF IRFormZRec; IRFormZRec: TYPE = RECORD[refCh: IPCTG.Channel, negComp, posComp: IPCoTab.Component, zType: IPCTG.Side, newCh1, newCh2: IPCTG.Channel]; IRTtoL: TYPE = REF IRTtoLRec; IRTtoLRec: TYPE = RECORD[refCh: IPCTG.Channel, whichEnd, lType: IPCTG.Side, endCo: IPCoTab.Component, newCh1: IPCTG.Channel]; IRLtoT: TYPE = REF IRLtoTRec; IRLtoTRec: TYPE = RECORD[refCh: IPCTG.Channel, whichEnd: IPCTG.Side]; IRExtendKnee: TYPE = REF IRExtendKneeRec; IRExtendKneeRec: TYPE = RECORD[shin: IPCTG.Channel]; IRFlexKnee: TYPE = REF IRFlexKneeRec; IRFlexKneeRec: TYPE = RECORD[leg, floor: IPCTG.Channel, whichEnd, whichDirection: IPCTG.Side, newCh1: IPCTG.Channel]; IRRemoveCoAtCorner: TYPE = REF IRRemoveCoAtCornerRec; IRRemoveCoAtCornerRec: TYPE = RECORD[host: IPCoTab.Component, corner: IPCoTab.CornerTypes]; IRInsertCoAtCorner: TYPE = REF IRInsertCoAtCornerRec; IRInsertCoAtCornerRec: TYPE = RECORD[host, co: IPCoTab.Component, corner: IPCoTab.CornerTypes, newHCh1, newVCh1: IPCTG.Channel]; IRDestroyComp2: TYPE = REF IRDestroyComp2Rep; IRDestroyComp2Rep: TYPE = RECORD[comp: IPCoTab.Component]; IRCreateComp2: TYPE = REF IRCreateComp2Rep; IRCreateComp2Rep: TYPE = RECORD[comp: IPCoTab.Component]; IRSetCoCornerSpRec: TYPE = RECORD[co: IPCoTab.Component, corner: IPCoTab.CornerTypes, cornerSpace: IPCoTab.CornerSpace]; <<--This is used for doing the trick in IPTopEditOpsExtraImpl.FlipT>> <<-- FR = ForwardRecord -->> FRBreakCross: TYPE = REF FRBreakCrossRec; FRBreakCrossRec: TYPE = RECORD[refCh, chToBreak: IPCTG.Channel]; FRFormCross: TYPE = REF FRFormCrossRec; FRFormCrossRec: TYPE = RECORD[ch1, ch2: IPCTG.Channel]; FRFormZ: TYPE = REF FRFormZRec; FRFormZRec: TYPE = RECORD[comp1, comp2: IPCoTab.Component, zType: IPCTG.Side]; FRRemoveZ: TYPE = REF FRRemoveZRec; FRRemoveZRec: TYPE = RECORD[zSpine: IPCTG.Channel]; FRLtoT: TYPE = REF FRLtoTRec; FRLtoTRec: TYPE = RECORD[ch: IPCTG.Channel, whichEnd: IPCTG.Side]; FRTtoL: TYPE = REF FRTtoLRec; FRTtoLRec: TYPE = RECORD[co: IPCoTab.Component, ch: IPCTG.Channel, lType: IPCTG.Side]; FRFlexKnee: TYPE = REF FRFlexKneeRec; FRFlexKneeRec: TYPE = RECORD[leg, floor: IPCTG.Channel, whichEnd: IPCTG.Side]; FRExtendKnee: TYPE = REF FRExtendKneeRec; FRExtendKneeRec: TYPE = RECORD[shin: IPCTG.Channel]; FRGrow1: TYPE = REF FRGrow1Rec; FRGrow1Rec: TYPE = RECORD[co, host: IPCoTab.Component, hostCorner: IPCoTab.CornerTypes]; FRShrink1: TYPE = REF FRShrink1Rec; FRShrink1Rec: TYPE = RECORD[co: IPCoTab.Component]; FRInsertCo: TYPE = REF FRInsertCoRec; FRInsertCoRec: TYPE = RECORD[co: IPCoTab.Component, chToSplit, negBnd, posBnd: IPCTG.Channel, sideHint: IPCTG.Side, whichFirstHint: [1..2]]; FRRemoveCo: TYPE = REF FRRemoveCoRec; FRRemoveCoRec: TYPE = RECORD[co: IPCoTab.Component, shrinkDirectn: IP.OrientationTypes]; FRFlipT: TYPE = REF FRFlipTRec; FRFlipTRec: TYPE = RECORD[chToBend, attachTo: IPCTG.Channel, whichEnd: IPCTG.Side]; FRSpawnComps: TYPE = REF FRSpawnCompsRep; FRSpawnCompsRep: TYPE = RECORD[comp: IPCoTab.Component, splitDirection: IP.OrientationTypes, chkArgs: BOOL, negChild, posChild: IPCoTab.Component]; <<--Shared by both-->> RSetCompShape: TYPE = REF RSetCompShapeRep; RSetCompShapeRep: TYPE = RECORD[comp: IPCoTab.Component, shape: IP.ShapeRep, chkArgs: BOOL]; RSwapComponents: TYPE = REF RSwapComponentsRep; RSwapComponentsRep: TYPE = RECORD[comp1, comp2: IPCoTab.Component]; ROrient: TYPE = REF ROrientRec; ROrientRec: TYPE = RECORD[co: IPCoTab.Component, operation: IP.Orientation]; <<--NB: (i) This is shared by by both because it is a functional operation.>> <<--(ii) orient is the operation to perform not the final state >> RSetComponent: TYPE = REF RSetComponentRec; RSetComponentRec: TYPE = RECORD[co: IPCoTab.Component, active: BOOL, atPosition: IP.IntVector]; RMoveComponent: TYPE = REF RMoveComponentRec; RMoveComponentRec: TYPE = RECORD[co: IPCoTab.Component, by: IP.IntVector]; RAny: TYPE = REF; RComposite: TYPE = LIST OF REF; END.