Object creation


Any RxMUI element you create is an object.

An object is an instance of a class.

Every class defines the attributes and the methods of its objects.

Classes are:

 

An object is referred by a name.

The name of an object is a valid ARexx symbol <64 chars.

The name is NOT unique: the last object created is the owner of its name.

 

Objects are created with the function NewObj().

A call to NewObj() can create a SINGLE object or MANY objects.

The arguments for NewObj() are:
<class/V>,<name/O>,[stem/V],[freeChild/N]

Some useful functions are provided to create objects faster.

 

This lines creates a text object named status (a status line):

status.Frame="Text"
status.BackGroud="TextBack"
status.PreParse="1B63"x
status.Contents="I am ready"
res=NewObj("Text","status")     

 

This lines creates a group object named g containing a text object named status:

g.0="status"
 status.Class="Text"
 status.Frame="Text"
 status.BackGroud="TextBack"
 status.PreParse="1B63"x
 status.Contents="I am ready"
res=NewObj("group","g")

 

Because of a text object that acts like a status line can be created using the function text(), you can do the same thing with the lines:

g.0=text("status","I am ready")
res=NewObj("group","g")       

 

A very cute function, that does not create any object, but it is just used for style reason is child(), so it's the same to do:

child("G",text("status","I am ready"))
res=NewObj("group","g")       

 

If you want to center horizontally status , then you can do something like:

g.Horiz=1
 g.0=HSpace()
 g.1="status"
  status.Class="Text"
  status.Frame="Text"
  status.BackGroud="TextBack"
  status.PreParse="1B63"x
  status.Contents="I am ready"
 g.2=HSpace()
res=NewObj("group","g")

You created a horizontal group named G with 3 children:

  1. an unnamed horizontal space
  2. a text object named STATUS
  3. an unnamed horizontal space

The same thing may be done with:

oname=MakeObj("g","HCenter",text("status","I am ready"))

 

You may use child() XOR dotted enumeration: you CANNOT use both in the same definition.

It means it is not legal to do something like

child("G",text("status","I am ready"))
g.1=label("Hello World!")       

 

There are classes that may have children and classes that cannot have children:

  1. Application may have 0 or any number of children; they are the Application windows; windows may be specified in the SubWindow attribute at Init time as SubWindow.0, ..., SubWindow.n; the first window (.SubWindow.0) may be specified as .SubWindow . Other windows may be added to the Application via the Add() function.
  2. Group and Group-subclasses must have 1 or more children; a group is not drawn (which means that the window it belongs to is not opened) if it has not 1 child at least; the children of a group named g are specified at Init time in g.0,...,g.n as in:
    g.Columns=2
     g.0=label("_C")
     g.1=CheckMark("C",0,"c")
     g.2=label("C")
     g.3=CheckMark("C++",0)
     g.0=label("_ARexx")
     g.1=CheckMark("ARexx",0,"a")
     g.0=label("_E")
     g.1=CheckMark("E",0,"e")
    res=NewObj("group","g")

    Children may be add to a group via the Add() function.

 

When you create an object, you must:

  1. Define any attributes of the object it needs at Init time, including its children, if any; a children is always specified with a name; if a child doesn't already exist (it was not already created somewhere) it is created at its parent creation time
  2. Call the function NewObj()

As you can see, objects definition can be nested.

 

Read carefully the following examples lines. They create all the same objects:

- a vertical framed group named g that contains
  - an unnamed Busy bar
  - a horizontal group named radiog that contains
    - an unnamed label
    - a radio named gender
  - a text object named advert

 

1. Four NewObj() calls

gender.Horiz=1
gender.ControlChar="g"
gender.Entries="Male|Female"
res=NewObj("Radio","gender")

radiog.Horiz=1
 radiog.0=label("_Gender")
 radiog.1="gender"
res=NewObj("group","radiog")

advert.Contents=ParseText("%bNote:%n Read carefully the conditions")
res=NewObj("text","advert")

g.Frame="group"
 g.0=MakeObj(,"Busy")
 g.1="radiog"
 g.2="advert"
res=NewObj("group","g")       

2. Three NewObj() calls

radiog.Horiz=1
 radiog.0=label("_Gender")
 radiog.1="gender"
  gender.Class="radio"
  gender.Horiz=1
  gender.ControlChar="g"
  gender.Entries="Male|Female"
res=NewObj("group","radiog")

advert.Contents=ParseText("%bNote:%n Read carefully the conditions")
res=NewObj("text","advert")

g.Frame="group"
 g.0=MakeObj(,"Busy")
 g.1="radiog"
 g.2="advert"
res=NewObj("group","g")

3. One NewObj() call

g.Frame="group"
 g.0=MakeObj(,"Busy")
 g.1="radiog"
  radiog.Class="group"
  radiog.Horiz=1
   radiog.0=label("_Gender")
   radiog.1="gender"
    gender.Class="radio"
    gender.Horiz=1
    gender.ControlChar="g"
    gender.Entries="Male|Female"
 g.2="advert"
  advert.Class="text"
  advert.Contents=ParseText("%bNote:%n Read carefully the conditions")
res=NewObj("group","g")

 

4. One NewObj() call with child()

g.Frame="group"
 call child("g",MakeObj(,"Busy"))
 call child("g","radiog","group")
  radiog.Horiz=1
   radiog.0=label("_Gender")
   radiog.1="gender"
    gender.Class="radio"
    gender.Horiz=1
    gender.ControlChar="g"
    gender.Entries="Male|Female"
 call child("g","advert","text")
  advert.Contents=ParseText("%bNote:%n Read carefully the conditions")
res=NewObj("group","g")

 

Your final goal is to create, at least, an Application object, that contains a SubWindow object, with its Contents defined.

The following lines create:

- an Application object named app that contains
  - a Window object named mwin that contains
    - a vertical group named mgroup than contains
      - a 2-columned group named g0 that contains
        - an unnamed label
        - a String object named name
        - an unnamed label
        - a String object named phone
     - a horizontal group named g1 that contains
       - a button named ok
       - a button named cancel
app.Title="Example"
app.Version="$VER: Example 1.1 (23.9.2001)"
app.Copyright="Copyright 2000, 2001 by Alfonso Ranieri"
app.Author="Alfonso Ranieri"
app.Description="A little RxMUI example"
app.Base="RXMUIEXAMPLE"
app.SubWindow="mwin"

 mwin.ID="MAIN"
 mwin.Title="A little RxMUI example"
 mwin.Contents="mgroup"

  mgroup.0="g0"
   g0.Class="group"
   g0.Frame="group"
   g0.Columns=2
    g0.0=label("_Name");  g0.1=string("name","n")
    g0.2=label("_Phone"); g0.2=string("phone","p")

  mgroup.1="g1"
   g1.Class="group"
    g1.0=button("ok","_OK")
    g1.1=button("cancel","_Cancel")
res=NewObj("Application","app")

It is the same to do:

app.Title="Example"
app.Version="$VER: Example 1.1 (23.9.2001)"
app.Copyright="Copyright 2000, 2001 by Alfonso Ranieri"
app.Author="Alfonso Ranieri"
app.Description="A little RxMUI example"
app.Base="RXMUIEXAMPLE"
app.SubWindow="mwin"

 mwin.ID="MAIN"
 mwin.Title="A little RxMUI example"
 mwin.Contents="mgroup"

  call child("mgroup","g0","Group")
   g0.Frame="group"
   g0.Columns=2
    g0.0=label("_Name");  g0.1=string("Name","n")
    g0.2=label("_Phone"); g0.2=string("Phone","p")

  call child("mgroup","g1","Group")
   g1.0=button("ok","_OK")
   g1.1=button("cancel","_Cancel")
res=NewObj("Application","app")

And so on...

 

NewObj() returns 0 on success, an integer>0 on failure.

If an object can't be created for any reason, all the sub-created objects are disposed.

 

If you are confused...Experiencing is always the best way to learn.