Fantom

 

//
// Copyright (c) 2008, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   9 Jul 08  Brian Frank  Creation
//

using gfx

**
** PaneTest
**
class PaneTest : Test
{

  Void testInsetPane()
  {
    x := InsetPane(1,2,3,4)
    {
      content = Fixed { ps = Size(10,10) }
    }
    verifyEq(x.insets, Insets(1,2,3,4))
    verifyEq(x.prefSize, Size(16,14))

    x.size = Size(20,20)
    x.onLayout
    verifyEq(x.content.bounds, Rect(4,1,14,16))

    verifyEq(InsetPane(5).insets, Insets(5,5,5,5))
    verifyEq(InsetPane(5,6).insets, Insets(5,6,5,6))
    verifyEq(InsetPane(5,6,7).insets, Insets(5,6,7,6))
  }

  Void testEdgePane()
  {
    // top+bottom
    x := EdgePane
    {
      top = Fixed { ps = Size(10,20) }
      bottom = Fixed { ps = Size(30,40) }
    }
    verifyEq(x.children, Widget[x.top, x.bottom])

    // preferred size
    verifyEq(x.prefSize, Size(30,60))

    // layout
    x.size = Size(100,100)
    x.onLayout
    verifyEq(x.top.bounds, Rect(0,0,100,20))
    verifyEq(x.bottom.bounds, Rect(0,60,100,40))

    // clear top, replace bottom
    x.top = null
    x.bottom = Fixed { ps = Size(100, 10) }
    verifyEq(x.children, Widget[x.bottom])
    verifyEq(x.prefSize, Size(100,10))

    // all five
    x.top    = Fixed { ps = Size(70, 10) }
    x.bottom = Fixed { ps = Size(70, 20) }
    x.left   = Fixed { ps = Size(30, 20) }
    x.right  = Fixed { ps = Size(40, 40) }
    x.center = Fixed { ps = Size(50, 30) }
    verifyEq(x.children, Widget[x.top, x.bottom, x.left, x.right, x.center])
    verifyEq(x.prefSize, Size(120,70))

    // layout
    x.size = Size(140,100)
    x.onLayout
    verifyEq(x.top.bounds,    Rect(0,0,140,10))
    verifyEq(x.bottom.bounds, Rect(0,80,140,20))
    verifyEq(x.left.bounds,   Rect(0,10,30,70))
    verifyEq(x.right.bounds,  Rect(100,10,40,70))
    verifyEq(x.center.bounds, Rect(30,10,70,70))
  }

  Void testGridPane()
  {
    x := GridPane { hgap = 10; vgap = 10; valignCells=Valign.top; numCols = 3 }
    a := Fixed { ps = Size(30,10) }; x.add(a)
    b := Fixed { ps = Size(20,10) }; x.add(b)
    c := Fixed { ps = Size(30,10) }; x.add(c)
    d := Fixed { ps = Size(20,20) }; x.add(d)
    e := Fixed { ps = Size(40,10) }; x.add(e)
    f := Fixed { ps = Size(10,20) }; x.add(f)
    g := Fixed { ps = Size(40,10) }; x.add(g)
    h := Fixed { ps = Size(30,20) }; x.add(h)

    // preferred size
    verifyEq(x.prefSize, Size(130,70))

    // layout
    x.size = Size(200,200)
    x.onLayout
    verifyEq(a.bounds, Rect(0,0,30,10))
    verifyEq(b.bounds, Rect(50,0,20,10))
    verifyEq(c.bounds, Rect(100,0,30,10))
    verifyEq(d.bounds, Rect(0,20,20,20))
    verifyEq(e.bounds, Rect(50,20,40,10))
    verifyEq(f.bounds, Rect(100,20,10,20))
    verifyEq(g.bounds, Rect(0,50,40,10))
    verifyEq(h.bounds, Rect(50,50,30,20))
  }

}

internal class Fixed : Widget
{
  Size ps := Size(10, 20)
  override Size prefSize(Hints hint := Hints.defVal) { return ps }
}