Example 3: Split view using an HBox
This app uses a minimum amount of code to show a split view implementation using an hbox container.
Styles definition file (mystyles.4st)
For this example, we start with the style file. The style file specifies the
splitViewRendering
attribute for the HBox
container when the style
is set to mysplitview
.
<?xml version="1.0" encoding="ANSI_X3.4-1968"?>
<StyleList>
<Style name="HBox.mysplitview">
<StyleAttribute name="splitViewRendering" value="yes" />
</Style>
</StyleList>
Form definition file (splitview.per)
The form definition file defines a HBOX
container using the
mysplitview
style. It contains a TABLE
followed by a
GRID
. The table will become the left pane of the split view app, and the grid will
become the right pane of the split view app.
LAYOUT
HBOX (STYLE="mysplitview")
TABLE
{
[c1 |c2 ]
[c1 |c2 ]
[c1 |c2 ]
[c1 |c2 ]
}
END
GRID
{
<GROUP g1 >
Name: [lb_name :lb_id ]
E-mail: [lb_email ]
Address: [lb_address ]
City: [lb_city ]
< >
<GROUP g2 >
Phone: [lb_phone ]
Mobile: [lb_mobile ]
< >
}
END
END
END
ATTRIBUTES
PHANTOM FORMONLY.id;
EDIT c1 = FORMONLY.name;
EDIT c2 = FORMONLY.address;
PHANTOM FORMONLY.city;
PHANTOM FORMONLY.phone;
PHANTOM FORMONLY.mobile;
PHANTOM FORMONLY.email;
GROUP g1: group1, TEXT="Contact";
EDIT lb_id = FORMONLY.cont_id;
EDIT lb_name = FORMONLY.cont_name;
EDIT lb_address = FORMONLY.cont_address;
EDIT lb_city = FORMONLY.cont_city;
GROUP g2: group2, TEXT="Numbers";
EDIT lb_phone = FORMONLY.cont_phone;
EDIT lb_mobile = FORMONLY.cont_mobile;
EDIT lb_email = FORMONLY.cont_email;
END
INSTRUCTIONS
SCREEN RECORD sr(id, name, address, city,
phone, mobile, email);
END
Application (main.4gl)
The application starts by loading the mystyles.4st style file.
After populating the array with our sample data, the splitview.per form is
loaded and displayed in the default SCREEN
window.
Then, a DISPLAY ARRAY
statement takes control, and fills the fields in the grid
in the BEFORE ROW
trigger, when a new row is selected by the user.
DEFINE carr DYNAMIC ARRAY OF RECORD
cont_id INTEGER,
cont_name VARCHAR(40),
cont_address VARCHAR(100),
cont_city VARCHAR(50),
cont_phone VARCHAR(20),
cont_mobile VARCHAR(20),
cont_email VARCHAR(30)
END RECORD
MAIN
CALL ui.Interface.loadStyles("mystyles")
CALL load_samples()
OPEN FORM f FROM "splitview"
DISPLAY FORM f
DISPLAY ARRAY carr TO sr.* ATTRIBUTES(UNBUFFERED)
BEFORE ROW
DISPLAY BY NAME carr[arr_curr()].*
END DISPLAY
END MAIN
FUNCTION load_samples()
DEFINE i INTEGER
LET i=0
LET carr[i:=i+1].cont_id = 982
LET carr[i].cont_name = "Mike Stanford"
LET carr[i].cont_address = "5 Marbel St."
LET carr[i].cont_city = "Balmberg"
LET carr[i].cont_phone = "8723847234"
LET carr[i].cont_mobile= "8732487833"
LET carr[i].cont_email = "mikest@xyz.com"
LET carr[i:=i+1].cont_id = 8234
LET carr[i].cont_name = "Phil Karlmon"
LET carr[i].cont_address = "341 Merlo Bld"
LET carr[i].cont_city = "Clerckmont"
LET carr[i].cont_phone = "9823498234"
LET carr[i].cont_mobile= "9999991213"
LET carr[i].cont_email = "pkarl@yoioyoio.com"
LET carr[i:=i+1].cont_id = 1045
LET carr[i].cont_name = "Clark Gambello"
LET carr[i].cont_address = "35 Straw St."
LET carr[i].cont_city = "Bringstone"
LET carr[i].cont_phone = "9823498234"
LET carr[i].cont_mobile= "8234981111"
LET carr[i].cont_email = "cgamb@youhoowha.com"
END FUNCTION