import "StandardTypes.madl"; namespace "org.smags.ui"; meta architecture GenericUI{ type libraries: type library GenericUITypes{ complex Brush{ } complex SolidColorBrush extends Brush{ property color : Color; } complex Color{ property r : Integer; property g : Integer; property b : Integer; } complex Thickness{ property top : Integer; property right : Integer; property bottom : Integer; property left : Integer; } complex QualifiedInteger { property value : Integer; property domain : DimensionDomain; } enum DimensionDomain{ Pixel, Percent, Fill } enum FontWeight{ Normal, Bold } enum FontStyle{ Normal, Italic, Oblique } enum VerticalAlignment{ Top, Bottom, Center, Stretch } enum HorizontalAlignment{ Left, Center, Right, Stretch } enum Visibility{ Visible, Hidden, Collapsed } enum StackPanelOrientation{ Horizontal, Vertical } enum TextAlignment{ Center, Justify, Left, Right } complex UIEventArgs{ property source : IUIControl; } complex ClickEventArgs extends UIEventArgs {} complex FocusChangedEventArgs extends UIEventArgs{ property focusGained : Boolean; property focusLost : Boolean; } complex CheckedChangedEventArgs extends UIEventArgs{ property oldState : Boolean; property newState : Boolean; } complex TextChangedEventArgs extends UIEventArgs{ property oldText : String; property newText : String; } } port types: event port type IClickable fires ClickEventArgs{} event port type IFocusable fires FocusChangedEventArgs{ parameter focusEnabled : Boolean; void focus(); } event port type ICheckedChanged fires CheckedChangedEventArgs{} event port type ITextChanged fires TextChangedEventArgs{} port type IUIControl{ parameter controlName : String; parameter background : Brush; parameter foreground : Brush; parameter border : Brush; parameter borderThickness : Thickness; parameter fontFamily : String; parameter fontSize : Integer; parameter fontStyle : FontStyle; parameter fontWeight : FontWeight; parameter padding : Thickness; parameter margin : Thickness; parameter tabIndex : Integer; parameter horizontalContentAlignment : HorizontalAlignment; parameter verticalContentAlignment : VerticalAlignment; parameter enabled : Boolean; parameter visibility : Visibility; parameter width : QualifiedInteger; parameter height : QualifiedInteger; parameter opacity : Integer; void updateControl(); requires IContextMenu [0 to 1]; } port type ITextControl extends IUIControl{ parameter text : String; } port type IContextMenu extends IUIControl{ void open(); void close(); Boolean isOpen(); } port type IContentControl extends IUIControl{ requires IUIControl; } port type IButton extends IContentControl{ parameter isCancel : Boolean; parameter isDefault : Boolean; Boolean isPressed(); expects ITextControl; } port type IToogleButton extends IButton{ parameter isChecked : Boolean; } port type IPanel extends IUIControl{ requires IUIControl [0 to *]; } port type IStackPanel extends IPanel{ parameter orientation : StackPanelOrientation; } port type ITextBlock extends IUIControl{ parameter text : String; parameter textAlignment : TextAlignment; } port type ITextBox extends IUIControl{ parameter lineCount : Integer; parameter text : String; expects ITextChanged; } component types: ui component type Button { provides IButton; provides IClickable; provides IFocusable; provides ITextControl; } ui component type Checkbox { provides IToogleButton; provides IClickable; provides IFocusable; provides ITextControl; provides ICheckedChanged; } ui component type StackPanel { provides IStackPanel; } ui component type TextBlock { provides ITextBlock; } ui component type TextBox { provides ITextBox; provides ITextChanged; } ui component type PasswordBox { } ui component type RootView { provides IContentControl; } }