Interactive Definition of a Pseudo Class - Expand Database Layout During Runtime

Example 1: InstantView® code for the interactive definition of new databases, new segments and root EP collections

    Var(omgr)
    Var(segment, repCollection)

    GetManager(OBJECT) -> omgr  // we need the object manager   

    Group(groupDB, SELECT_MULTIPLE, 11, 5, 470, 45, "Database")
    {
      Prompt(11, 11, "Path")
      String(CXS_DATABASE::path, 120, 11, 300)  // to enter path of database file

      Button(FONT(0), 18, 28, 70, 7, "create")
      [ SELECT: omgr Call(NewDatabase) // create new CXS_DATABASE object
                DrainWindow(, groupDB)  // write input data from GUI into object
                SendMsg(UPDATE_DATABASES) // update list of database below (in next group)
      ]
    }

    Group(groupSeg, SELECT_MULTIPLE, 11, 50, 470, 70, "Segment")
    {
      Prompt(11, 11, "Name")
      String(CXS_SEGMENT::name, 120, 11, 300)  // to enter the name of the segment

      Prompt(11, 24, "in Database")
      ObjectCombobox(CXS_SEGMENT::database, 120, 24, 300, 32)   // to specify the database
      [ INITIALIZE:
        UPDATE_DATABASES: ClearObox
                          omgr Call(GetDatabases) FillObox  // display all databases to allow for interactive selection
      ]

      Prompt(11, 37, "Split threshold")
      Integer(CXS_SEGMENT::threshold, 120, 37, 80)  // to enter threshold value for segment splitting


      Button(b0, DEFAULT, 18, 52, 70, 7, "create")
      [ SELECT: omgr Call(NewSegment) -> segment  // create new CXS_SEGMENT object
                segment DrainWindow(, groupSeg)  // write input data from GUI into object
                SendMsg(UPDATE_SEGMENTS)        // update list of segments below (in next group)
      ]
    }

    Group(groupColl, SELECT_MULTIPLE, 11, 125, 470, 70, "Collection")
    {
      Prompt(11, 11, "Name")
      String(CXS_REP_COLLECTION::name, 120, 11, 300)  // to enter the root entry point name

      Prompt(11, 24, "in Segment")
      ObjectCombobox(CXS_REP_COLLECTION::segment, 120, 24, 300, 32) // to select a segment to store the collection
      [ INITIALIZE:
        UPDATE_SEGMENTS: ClearObox
                         omgr Call(GetSegments) FillObox  // disply all segments to allow for interactive selection
      ]

      Prompt(11, 37, "Type")
      Enum(CXS_REP_COLLECTION::type, 100, 37, 80, 35)  // to select a type: SET, LIST, BAG, or ARRAY

      Button(FONT(0), 18, 52, 70, 7, "create")
      [ SELECT: omgr Call(NewREPCollection) -> repCollection   // create new CXS_REP_COLLECTION object
                repCollection DrainWindow(, groupColl) // and write input data from GUI into object
      ]
    }

 

Example 2: InstantView® code to interactively generate a pseudo class; database, segment and root EP collections are assumed to be already known

    Var (segment, coll0, coll1, collg)  // already containing CXS_SEGMENT and CXS_REP_COLLECTIONs

    .  .  .

    Window(winClass, 33, 11, 619, 36, "Pseudo-Class")
    [
      Var(omgr, metaClass)
      INITIALIZE: GetManager(OBJECT) -> omgr  // we need the object manager
    ]
    {
      Prompt(FONT(0), BLUE, 11, 11, "Name")
      String(CX_META_CLASS::internalName, 120, 11, 210) // to enter name of pseudo-class

      Prompt(FONT(0), BLUE, 345, 11, "classID")
      Integer(CX_META_CLASS::realWorldClassID, 420, 11, 130)  // to enter numerical classID

      Prompt(FONT(0), BLUE, 11, 22, "derive from")
      ObjectCombobox(CX_META_CLASS::superClass, 120, 22, 430, 50) // derive from another class (pseudo or real one)
      [ INITIALIZE: 0 SetSort
        omgr Call(GetMetaClasses) FillObox  // show all classes known to the object manager
      ]

      Button(RED, 17, 45, 100, 7, "create")
      [ SELECT: omgr Call(NewMetaClass) -> metaClass,  // create new CX_META_CLASS
                metaClass FillWindow(, winClass)  // write input into object
                0 segment,  // layer and segment
                [ coll0, coll1 ] collg  // collections for domain 0 / 1 and for deleted objects (garbage)
                metaClass Call(SetPersistenceInfo)
                metaClass Call(Integrate)
        // now objects of the new pseudo class could be created
      ]
    }