How about this:
    
    
    type
      Widget* = ref object of RootObj
      
      Layout* = ref object of Widget
        widgets*: seq[Widget]
      
      Button* = ref object of Widget
    
    
    proc newLayout(): Layout =
      result = new Layout
      result.widgets = @[]
    
    proc newButton(): Button =
      result = new Button
    
    proc addWidget(layout: Layout, widget: Widget) =
      layout.widgets.add widget
    
    let
      layout0 = newLayout()
      button0 = newButton()
    
    layout0.addWidget button0
    

Reply via email to