def box config={}, &block
      require 'canis/core/widgets/box'
      # take current stacks row and col
      # advance row by one and col by one
      # at end note row and advance by one
      # draw a box around using these coordinates. width should be
      # provided unless we have item width or something.
      last = @_ws_active.last
      if last
        r = last[:row]
        c = last[:col]
        config[:row] = r
        config[:col] = c
        last[:row] += config[:margin_top] || 1
        last[:col] += config[:margin_left] || 1
        _box = Box.new @form, config # needs to be created first or will overwrite area after others painted
        yield_or_eval &block if block_given?
        h = config[:height] || last[:height] || (last[:row] - r)
        h = 2 if h < 2
        w = config[:width] || last[:width] || 15 # tmp
        case last
        when WsFlow
          w = last[:col]
        when WsStack
          #h += 1
        end
        config[:row] = r
        config[:col] = c
        config[:height] = h
        config[:width] = w
        _box.row r
        _box.col c
        _box.height h
        _box.width w
        last[:row] += 1
        last[:col] += 1 # ??? XXX if flow we need to increment properly or not ?
      end
    end
def box config={}, &block
      require 'canis/core/widgets/box'
      # take current stacks row and col
      # advance row by one and col by one
      # at end note row and advance by one
      # draw a box around using these coordinates. width should be
      # provided unless we have item width or something.
      last = @_ws_active.last
      if last
        r = last[:row]
        c = last[:col]
        config[:row] = r
        config[:col] = c
        last[:row] += config[:margin_top] || 1
        last[:col] += config[:margin_left] || 1
        _box = Box.new @form, config # needs to be created first or will overwrite area after others painted
        yield_or_eval &block if block_given?
        h = config[:height] || last[:height] || (last[:row] - r)
        h = 2 if h < 2
        w = config[:width] || last[:width] || 15 # tmp
        case last
        when WsFlow
          w = last[:col]
        when WsStack
          #h += 1
        end
        config[:row] = r
        config[:col] = c
        config[:height] = h
        config[:width] = w
        _box.row r
        _box.col c
        _box.height h
        _box.width w
        last[:row] += 1
        last[:col] += 1 # ??? XXX if flow we need to increment properly or not ?
      end
    end
flow and stack could have a border option