<> <> <> <> <<>> DIRECTORY Atom, Commander, IO, Process, PropList, Rope, SimpleFeedback, XTk, XTkWidgets; PropListTest: CEDAR PROGRAM IMPORTS Atom, Commander, Process, IO, PropList, SimpleFeedback, XTkWidgets ~ BEGIN propList: PropList.List ¬ PropList.NewPropList[]; MyRec: TYPE = RECORD [ keyWidget: XTkWidgets.Widget, valWidget: XTkWidgets.Widget, expectWidget: XTkWidgets.Widget ]; TestPutProp: XTk.WidgetNotifyProc = { mr: REF MyRec ~ NARROW[registerData]; keyRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.keyWidget]; valRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.valWidget]; key: ATOM ~ Atom.MakeAtom[keyRope]; val: ATOM ~ Atom.MakeAtom[valRope]; PropList.PutProp[propList, key, val]; SimpleFeedback.PutF[$SystemScript, oneLiner, $Default, "put( key: %g, val: %g)\n", IO.atom[NARROW[key, ATOM]], IO.atom[NARROW[val, ATOM]]]; }; TestGetProp: XTk.WidgetNotifyProc = { mr: REF MyRec ~ NARROW[registerData]; keyRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.keyWidget]; key: ATOM ~ Atom.MakeAtom[keyRope]; val: REF ¬ PropList.GetProp[propList, key]; SimpleFeedback.PutF[$SystemScript, oneLiner, $Default, "get( key: %g) = %g\n", IO.atom[NARROW[key, ATOM]], IO.atom[NARROW[val, ATOM]]]; }; TestEnum: XTk.WidgetNotifyProc = { Map: PropList.EachPropProc = { SimpleFeedback.PutF[$SystemScript, oneLiner, $Default, " key: %g val: %g\n", IO.atom[NARROW[key, ATOM]], IO.atom[NARROW[val, ATOM]]]; }; mr: REF MyRec ~ NARROW[registerData]; SimpleFeedback.Append[$SystemScript, oneLiner, $Default, "Enumerate: \n"]; [] ¬ PropList.Enumerate[propList, Map]; SimpleFeedback.Append[$SystemScript, oneLiner, $Default, "end enumeration\n"]; }; TestCond: XTk.WidgetNotifyProc = { mr: REF MyRec ~ NARROW[registerData]; keyRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.keyWidget]; key: ATOM ~ Atom.MakeAtom[keyRope]; valRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.valWidget]; val: ATOM ~ Atom.MakeAtom[valRope]; expRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.expectWidget]; exp: ATOM ~ Atom.MakeAtom[expRope]; old: REF ¬ PropList.ConditionalPutProp[propList, key, exp, val]; SimpleFeedback.PutF[$SystemScript, oneLiner, $Default, "cond-put( key: %g, expected: %g val: %g, old: %g)\n", IO.atom[key], IO.atom[exp], IO.atom[val], IO.atom[NARROW[old, ATOM]]]; }; Init: PropList.InitializeProcType = { }; TestGetPropOrInit: XTk.WidgetNotifyProc = { Init: PropList.InitializeProcType = { SimpleFeedback.Append[$SystemScript, oneLiner, $Default, "Start pause\n"]; Process.PauseMsec[8000]; SimpleFeedback.Append[$SystemScript, oneLiner, $Default, "Stop pause\n"]; val ¬ data }; mr: REF MyRec ~ NARROW[registerData]; keyRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.keyWidget]; key: ATOM ~ Atom.MakeAtom[keyRope]; newValRope: Rope.ROPE ¬ XTkWidgets.GetText[mr.valWidget]; newVal: ATOM ~ Atom.MakeAtom[newValRope]; val: REF; SimpleFeedback.PutF[$SystemScript, oneLiner, $Default, "init start( key: %g)\n", IO.atom[key]]; val ¬ PropList.GetPropOrInit[propList, key, Init, newVal]; SimpleFeedback.PutF[$SystemScript, oneLiner, $Default, "init end( key: %g) = val: %g\n", IO.atom[key], IO.atom[NARROW[val]]]; }; TestCommand: Commander.CommandProc ~ { mr: REF MyRec ~ NEW[MyRec]; put: XTkWidgets.Widget ¬ XTkWidgets.CreateButton[text: "", hitProc: TestPutProp, registerData: mr]; get: XTkWidgets.Widget ¬ XTkWidgets.CreateButton[text: "", hitProc: TestGetProp, registerData: mr]; enumerate: XTkWidgets.Widget ¬ XTkWidgets.CreateButton[text: "", hitProc: TestEnum, registerData: mr]; cond: XTkWidgets.Widget ¬ XTkWidgets.CreateButton[text: "", hitProc: TestCond, registerData: mr]; init: XTkWidgets.Widget ¬ XTkWidgets.CreateButton[text: "", hitProc: TestGetPropOrInit, registerData: mr]; key: XTkWidgets.Widget ¬ mr.keyWidget ¬ XTkWidgets.CreateLabeledField[label: "Key:", init: "Unknown"]; val: XTkWidgets.Widget ¬ mr.valWidget ¬ XTkWidgets.CreateLabeledField[label: "Val:", init: "Unknown"]; expect: XTkWidgets.Widget ¬ mr.expectWidget ¬ XTkWidgets.CreateLabeledField[label: "Old:", init: "Unknown"]; container: XTkWidgets.Widget ¬ XTkWidgets.CreateYStack[[], LIST[put, get, enumerate, cond, init, key, val, expect]]; shell: XTkWidgets.Widget ¬ XTkWidgets.CreateShell[child: container, windowHeader: "test"]; XTkWidgets.RealizeShell[shell]; }; <<>> Commander.Register["PropListTest", TestCommand, "Create test widget for PropList"]; END.