Screen scaffolding: controls

From OpenPetra Wiki
Jump to navigation Jump to search

Control Hierarchy

Root Control

Usually, the first Pagecontrl (tab), GroupBox (grp), User contrl (uco), or Panel (pnl). Sometimes, especially with inheritance of the forms, this does not work. So you can set the attribute RootControl=true for the control that you want to be the root.

(this behaviour is implemented in Ict.Tools.CodeGeneration.TCodeStorage.GetRootControl)

Layout of Controls

  • use Dock=Fill, or Dock=Top, or Dock=Bottom
  • use Panels (pnl) to group controls
  • by default, the controls are arranged vertically (each control below the previous control)
  • to have the controls in one row, use ControlsOrientation:horizontal

Control Types

  • pnl: Panel
  • uco: User defined control; needs attribute Type with the value containing the full namespace for the control, eg:
       ucoPersonnelTabSet:
           Type: Ict.Petra.Client.MPartner.Gui.TUC_PartnerEdit_PersonnelTabSet
  • tab: Page Control, consisting of tpg (tabbed pages)
  • grp: Groupbox
  • chk: Checkbox
  • grd: Grid control
  • btn: Button
  • nud: Numeric Up/Down
    • has a second label LabelUnit, which can be optionally set
  • txt: normal edit field
    • special behaviour for Type=PartnerKey and Type=Extract
  • rbt: simple radio button
  • rgr: radio button group
    • this can contain several other controls in Controls list, which will create radiobuttons with the controls for each item
    • or can just contain text in value OptionalValues, which will create radiobuttons for each text
  • chk: checkbox
    • can have a list of dependent other controls in Controls list
  • rng: enter 2 values that define a range
    • this is basically a special panel

Data Binding

We don't use .Net databinding, but the generator wires the data.

  • You can use the attribute MainEditTable that will try to match each control to the field in the table with the same name.
  • You can specifically bind data with DataField, either with the data table name or just the field name.
    • sample: DataField=AApSupplier.CurrencyCode

special lookups

  • PartnerShortNameLookup: this is for printing the partner short name on a screen; usually this is readonly; but you need to specify that with ReadOnly=true
    • sample: txtSupplierName: {Label=Current Supplier, ReadOnly=true, PartnerShortNameLookup=AApDocument.PartnerKey}