Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Displays Layouts (Reference) the Operator UI's structural framework, organizing displays into regions that persist during navigation while the Content area changes with each page.

DisplayLayout provide:

  • Consistent navigation structure
  • Platform-adaptive regions
  • Header/Menu precedence control
  • Automatic display fallback
  • Multi-platform optimization

On this page:

Table of Contents
maxLevel2
minLevel2
indent10px
excludeSteps
stylenone


Layout

Editor Workspace

Workspace

The Layout configuration interface has four main areas:


HTML
<table class="relative-table" style="width: 95%; border: 1px solid #ccc; border-collapse: collapse;">
  <colgroup>
    <col style="width: 18%;" />
    <col style="width: 41%;" />
    <col style="width: 41%;" />
  </colgroup>
  <tbody>
    <tr>
      <!-- (1) Layout List -->
      <td rowspan="6" style="border:1px solid #ccc; vertical-align: top; padding:6px;">
        <p><strong>(1) Layout List</strong></p>
        <p>Search, +, ×, sort</p>
        <p>Startup<br/>Dashboard<br/>Layout1<br/>Layout2<br/>...</p>
      </td>

      <!-- (2) Panel Configuration -->
      <td colspan="2" style="border:1px solid #ccc; padding:6px;">
        <p><strong>(2) Panel Configuration</strong><br/><em>Panel Regions</em></p>
        <table style="width:100%; border:1px solid #ccc; border-collapse: collapse; text-align:center;">
          <tr>
            <td colspan="3" style="border:1px solid #ccc; background:#f4f5f7;">Header</td>
            <td style="border:1px solid #ccc;">Header Edit: <strong>Stretch</strong> / Left / Center / Right</td>
          </tr>
          <tr>
            <td rowspan="2" style="border:1px solid #ccc; background:#f4f5f7;">Menu</td>
            <td style="border:1px solid #ccc; background:#f4f5f7;">Content</td>
            <td style="border:1px solid #ccc; background:#f4f5f7;">Submenu</td>
            <td></td>
          </tr>
          <tr>
            <td colspan="2" style="border:1px solid #ccc; background:#f4f5f7;">Footer</td>
            <td>Footer Edit: Stretch / Left / Center / <strong>Right</strong></td>
          </tr>
        </table>
      </td>
    </tr>

    <!-- Spacer Row -->
    <tr>
      <td colspan="2" style="border:none; height:15px;"></td>
    </tr>

    <!-- (3) Page Assignment Table -->
    <tr>
      <td colspan="2" style="border:1px solid #ccc; padding:6px;">
        <p><strong>(3) Page Assignment Table</strong></p>
        <table style="width:100%; border:1px solid #ccc; border-collapse: collapse;">
          <tr style="background:#f4f5f7;">
            <th style="border:1px solid #ccc;">Region</th>
            <th style="border:1px solid #ccc;">Page</th>
            <th style="border:1px solid #ccc;">Mobile</th>
            <th style="border:1px solid #ccc;">Tablet</th>
            <th style="border:1px solid #ccc;">Description</th>
          </tr>
          <tr>
            <td style="border:1px solid #ccc;">Header</td>
            <td style="border:1px solid #ccc;">Header</td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;">Display for the Header panel</td>
          </tr>
          <tr>
            <td style="border:1px solid #ccc;">Footer</td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;">Display for the Footer panel</td>
          </tr>
          <tr>
            <td style="border:1px solid #ccc;">Menu</td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;">Display for the Menu panel</td>
          </tr>
          <tr>
            <td style="border:1px solid #ccc;">Submenu</td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;">Display for the Submenu panel</td>
          </tr>
          <tr>
            <td style="border:1px solid #ccc;">Content</td>
            <td style="border:1px solid #ccc;">MainPage</td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;"></td>
            <td style="border:1px solid #ccc;">Display for the Content panel</td>
          </tr>
        </table>
      </td>
    </tr>

    <!-- (4) Platform Previews (merged header) -->
    <tr>
      <td colspan="2" style="border:1px solid #ccc; padding:6px; text-align:center; background:#f4f5f7;">
        <strong>(4) Platform Previews</strong>
      </td>
    </tr>

    <!-- Preview Rows with labeled preview areas -->
    <tr>
      <td style="border:1px solid #ccc; padding:10px; text-align:center; background:#fafafa;">
        <strong>Desktop Web Preview</strong>
        <div style="margin-top:6px; border:1px dashed #bbb; padding:10px;">Preview area</div>
      </td>
      <td style="border:1px solid #ccc; padding:10px; text-align:center; background:#fafafa;">
        <strong>Desktop Windows WPF</strong>
        <div style="margin-top:6px; border:1px dashed #bbb; padding:10px;">Preview area</div>
      </td>
    </tr>
    <tr>
      <td style="border:1px solid #ccc; padding:10px; text-align:center; background:#fafafa;">
        <strong>Mobile Preview</strong>
        <div style="margin-top:6px; border:1px dashed #bbb; padding:10px;">Preview area</div>
      </td>
      <td style="border:1px solid #ccc; padding:10px; text-align:center; background:#fafafa;">
        <strong>Tablet Preview</strong>
        <div style="margin-top:6px; border:1px dashed #bbb; padding:10px;">Preview area</div>
      </td>
    </tr>
  </tbody>
</table>

<p><strong>Legend:</strong><br/>
(1) Layout List<br/>
(2) Panel Configuration — <em>Panel Regions</em><br/>
(3) Page Assignment Table<br/>
(4) Platform Previews</p>

Layout Regions

RegionPurposePositionDynamic
HeaderLogo, title, main navigationTopNo
MenuPrimary navigation linksLeftOptional splitter
ContentMain display areaCenterYes
SubmenuSecondary navigationRightOptional
FooterCopyright, links, infoBottomNo

Creating Layouts

  1. Navigate to Displays → Layouts
  2. Click Add New button
  3. Configure:
    • Name - Layout identifier
    • Description - Purpose documentation
  4. Click OK
  5. Map displays to regions

Region Configuration

Mapping Displays

  1. Select layout in grid
  2. For each region row:
    • Click "..." in Page column
    • Select display from dialog
    • Repeat for Mobile/Landscape

Platform-Specific Settings

ColumnTargetFallback
PageDesktop (WPF/HTML5)Required
MobileMobile portraitUses Page
MobileLandscapeMobile landscapeUses Mobile

<ac:structured-macro ac:name="tip"> ac:rich-text-body To remove a region on mobile, enter underscore (_) instead of leaving blank. Empty fields inherit from Page configuration. </ac:rich-text-body> </ac:structured-macro>

Layout Customization

Header/Footer Alignment

OptionBehaviorUse Case
StretchFull widthStandard header
LeftAlign leftLogo placement
CenterCenter contentTitle focus
RightAlign rightUser controls

Menu Configuration


Configuration Workflow

Step 1: Manage Layouts

ActionMethodResult
Add LayoutClick + buttonCreate new layout
Delete LayoutSelect and click ×Remove selected
Select LayoutClick layout nameLoad for editing
SearchUse search boxFilter list
SortClick sort buttonReorder list

Step 2: Configure Selected Layout

2.1 Organize Regions

Configure which panels are active and their behavior:

RegionEnable/DisableAlignment Options
HeaderAlways enabledStretch/Left/Center/Right
MenuOptionalFixed left position
ContentAlways enabledAuto-size center
SubmenuOptionalFixed right position
FooterOptionalStretch/Left/Center/Right

2.2 Define Pages

Assign pages to each active region:

Assignment RulesBehavior
Page column filledDisplay assigned page
Mobile/Tablet emptyInherit from Page column
Mobile/Tablet with namePlatform-specific override
Any invalid nameHide region on that platform

2.3 Preview Results

Check layout appearance across platforms:

  • Desktop Web (HTML5/WebAssembly)
  • Desktop Windows (WPF)
  • Mobile (Portrait phone)
  • Tablet (Landscape/larger screen)



Platform Adaptation Examples

Desktop ConfigurationMobile ResultTablet Result
All 5 regions activeHeader + Content onlyHeader + Menu + Content
Complex menuHamburger menuSimplified menu
Footer with statusHidden footerMinimal footer
Wide submenuHiddenNarrow tools panel



Panel Regions

RegionPurposePositionDynamic
HeaderLogo, title, main navigationTopNo
MenuPrimary navigation linksLeftOptional splitter
ContentMain display areaCenterYes
SubmenuSecondary navigationRightOptional
FooterCopyright, links, infoBottomNo


Regions Details

Header

  • Position: Top of application
  • Purpose: Branding, main navigation, user info
  • Alignment: Controls interaction with Menu/Submenu
    • Stretch: Full width above side panels
    • Center: Centered with side panels extending up
    • Left/Right: Aligned with Menu/Submenu priority

Menu

  • Position: Left side
  • Purpose: Primary navigation
  • Options: Can include resizer for width adjustment
  • Mobile: Often becomes hamburger menu

Content

  • Position: Center area
  • Purpose: Main workspace that changes on navigation
  • Behavior: Only region that switches pages during runtime

Submenu

  • Position: Right side
  • Purpose: Secondary navigation, tools, properties
  • Mobile: Often hidden or moved to bottom
  • Position: Bottom of application
  • Purpose: Status bar, copyright, auxiliary info
  • Mobile: Frequently hidden to save space




Layout Design Considerations 

  • Optional splitter for resizing
  • Adjusts to header/footer
  • Can be hidden on mobile

Preview Options

Test layouts before deployment:

  • Desktop Web - HTML5 preview
  • Desktop Windows - WPF preview
  • Mobile Portrait - Phone view
  • Mobile Landscape - Tablet view

Runtime Configuration

Startup Layout

Set default at Displays → Client Settings:

Initial Execution Conditions
  ??? Layout: [Select Layout]

Runtime Changes

Change entire layout:

csharp

@Client.OpenLayout("AlternateLayout");

Change content only:

csharp

@Client.OpenDisplay("NewDisplay");
// Or
@Display.NewDisplay.Open();

Configuration Properties

PropertyDescriptionType
RegionLayout area identifierEnum
DockingAttachment positionString
PageDesktop displayDisplay
MobileMobile displayDisplay
MobileLandscapeLandscape displayDisplay
HorizontalAlignAlignment optionEnum
SplitterResizable dividerBoolean
Row/ColumnGrid positionInteger
RowSpan/ColumnSpanGrid spanningInteger

Best Practices

  1. Plan Structure - Define regions before displays
  2. Test All Platforms - Verify on each target
  3. Consider Mobile - Simplify for small screens
  4. Use Splitters Wisely - Only where needed
  5. Keep Headers Simple - Essential navigation only
  6. Document Layouts - Explain purpose
  7. Version Control - Track layout changes

Common Layout Patterns


Standard Application

  • Header:
  • Navigation
  • Bar
  • Menu:
  • Equipment
  • List
  • (with
  • splitter)
  • Content:
  • Main
  • Display
  • (changes)
  • Footer:
  • Status
  • Bar



Kiosk Mode

  • Header:
  • Company
  • Logo
  • (center)
  • Content:
  • Full
  • Screen
  • Display
  • Footer:
  • Hidden
  • (_)



Dashboard

  • Header:
  • Title
  • Only
  • Menu:
  •   Hidden
  • (_)
  • Content:
  • Dashboard
  • Display
  • Submenu:
  • Quick
  • Actions
  • Footer:
  • Timestamp


Customization Example

Header/Footer Alignment

OptionBehaviorUse Case
StretchFull widthStandard header
LeftAlign leftLogo placement
CenterCenter contentTitle focus
RightAlign rightUser controls

Menu Configuration

  • Optional splitter for resizing
  • Adjusts to header/footer
  • Can be hidden on mobile

Mobile Considerations

Responsive Design

  • Simplify navigation for touch
  • Hide non-essential regions
  • Optimize for portrait orientation
  • Test gesture navigation

Region Removal

Desktop Menu: NavigationPanel

Mobile Menu: _ (removed) or replaced



Layouts in Runtime

Startup Layout

Set default at Displays → Client Settings:

Initial Execution Conditions
  ??? Layout: [Select Layout]

Runtime Changes

Change entire layout:

csharp

@Client.OpenLayout("AlternateLayout");

Change content only:

csharp

@Client.OpenDisplay("NewDisplay");
// Or
@Display.NewDisplay.Open();


Layout Switching Scenarios

User Role Based
csharp
public void SetLayoutByRole()
{
    string role = @Security.CurrentUser.Role;
    string layout = role switch
    {
        "Operator" => "OperatorLayout",
        "Engineer" => "EngineeringLayout",
        "Manager" => "ManagerLayout",
        _ => "DefaultLayout"
    };
    @Client.OpenLayout(layout);
}

Time Based

csharp
public void SetDayNightLayout()
{
    bool isNight = DateTime.Now.Hour >= 18 || 
                   DateTime.Now.Hour < 6;
    @Client.OpenLayout(isNight ? "

Mobile Considerations

Responsive Design

  • Simplify navigation for touch
  • Hide non-essential regions
  • Optimize for portrait orientation
  • Test gesture navigation

Region Removal

Desktop Menu: NavigationPanel
Mobile Menu: _ (removed)

Troubleshooting

Layout not loading:

  • Verify layout exists
  • Check display assignments
  • Review platform compatibility
  • Test startup settings

Region not showing:

  • Confirm display mapped
  • Check visibility settings
  • Verify display engine
  • Test without underscore

Mobile layout issues:

  • Review mobile mappings
  • Check responsive settings
  • Test orientation changes
  • Verify touch targets

Layout Switching Scenarios

User Role Based

csharp

public void SetLayoutByRole()
{
    string role = @Security.CurrentUser.Role;
    string layout = role switch
    {
        "Operator" => "OperatorLayout",
        "Engineer" => "EngineeringLayout",
        "Manager" => "ManagerLayout",
        _ => "DefaultLayout"
    };
    @Client.OpenLayout(layout);
}

Time Based

csharp

public void SetDayNightLayout()
{
    bool isNight = DateTime.Now.Hour >= 18 || 
                   DateTime.Now.Hour < 6;
    @Client.OpenLayout(isNight ? "NightLayout" : "DayLayout");
}

Metadata Tracking

FieldPurposeAuto-Updated
IDUnique identifierYes
VersionIDChange trackingYes
DateCreatedCreation auditYes
DateModifiedLast changeYes
The metadata tracking pattern applies consistently across all configuration tables in the platform.

Best Practices Checklist

  •  Start Simple - Begin with Header + Content, add regions as needed
  •  Mobile First - Design for smallest screen, enhance for larger
  •  Name Clearly - Use descriptive names for layouts and pages
  •  
  •  Keep Headers Simple - Essential navigation only
  •  
  •  Use Splitters Wisely - Only where needed
  •  
  •  Document Purpose - Fill description fields for maintenance
  •  
  •  Test All Platforms - Use preview panels before deployment
  •  
  •  Version Control - Track layout changes



Troubleshooting

Layout not loading:

  • Verify layout exists
  • Check display assignments
  • Review platform compatibility
  • Test startup settings

Region not showing:

  • Confirm display mapped
  • Check visibility settings
  • Verify display engine
  • Test without underscore

Mobile layout issues:

  • Review mobile mappings
  • Check responsive settings
  • Test orientation changes
  • Verify touch targets

In this section...

Page Tree
root@parent
spaces93DRAF