Fantom

 

//
// Copyright (c) 2011, Brian Frank and Andy Frank
// Licensed under the Academic Free License version 3.0
//
// History:
//   10 Dec 2011  Andy Frank  Creation
//

using fwt
using gfx
using web

**
** WebListTest
**
@Js
internal class WebListTest : ContentPane
{
  new make()
  {
    content = InsetPane(12)
    {
      GridPane
      {
        vgap = 3
        BorderPane {                      insets=Insets(12); treeListWhite, },
        BorderPane { bg=Color("#d4dbe3"); insets=Insets(12); treeListPale,  },
        BorderPane { bg=Color("#333");    insets=Insets(12); treeListHud,   },
      },
    }
  }

  Widget treeListWhite()
  {
    GridPane
    {
      hgap = 24
      numCols = 4

      TestList {
        items=[
          TestItem { text="Boulevard" },
          TestItem { text="Grove" },
          TestItem { text="Mulberry" },
          TestItem { text="Stuart" }
        ]
      },

      TestList {
        items=[
          TestItem { text="Boulevard"; icon=iconFolder; aux="10" },
          TestItem { text="Grove";     icon=iconFolder; aux="7"  },
          TestItem { text="Mulberry";  icon=iconFolder; aux="8"  },
          TestItem { text="Stuart" ;   icon=iconFolder; aux="22" }
        ]
      },

      TestList {
        //borderColor = Color("#d2d2d2")
        style = "pill"
        items=[
          TestItem { text="Boulevard"; icon=iconFolder; aux="2" },
          TestItem { text="Grove";     icon=iconFolder; depth=1; aux="3" },
          TestItem { text="Mulberry";  icon=iconFolder; depth=2 },
          TestItem { text="Stuart" ;   icon=iconFolder; depth=3; aux="1"; }
        ]
      },

      TestList {
        items=[
          TestItem { text="Zone A"; group=true },
          TestItem { text="Boulevard"; icon=iconFolder },
          TestItem { text="Grove";     icon=iconFolder },
          TestItem { text="Zone B"; group=true },
          TestItem { text="Mulberry";  icon=iconFolder },
          TestItem { text="Stuart" ;   icon=iconFolder }
        ]
      },
    }
  }

  Widget treeListPale()
  {
    GridPane
    {
      hgap = 24
      numCols = 4

      TestPaleList {
        items=[
          TestItem { text="Boulevard" },
          TestItem { text="Grove" },
          TestItem { text="Mulberry" },
          TestItem { text="Stuart" }
        ]
      },

      TestPaleList {
        items=[
          TestItem { text="Boulevard"; icon=iconFolder; aux="10" },
          TestItem { text="Grove";     icon=iconFolder; aux="7"  },
          TestItem { text="Mulberry";  icon=iconFolder; aux="8"  },
          TestItem { text="Stuart" ;   icon=iconFolder; aux="22" }
        ]
      },

      TestPaleList {
        style = "pill"
        items=[
          TestItem { text="Boulevard"; icon=iconFolder; aux="2" },
          TestItem { text="Grove";     icon=iconFolder; depth=1; aux="3" },
          TestItem { text="Mulberry";  icon=iconFolder; depth=2 },
          TestItem { text="Stuart" ;   icon=iconFolder; depth=3; aux="1"; }
        ]
      },

      TestPaleList {
        items=[
          TestItem { text="Zone A"; group=true },
          TestItem { text="Boulevard"; icon=iconFolder },
          TestItem { text="Grove";     icon=iconFolder },
          TestItem { text="Zone B"; group=true },
          TestItem { text="Mulberry";  icon=iconFolder },
          TestItem { text="Stuart" ;   icon=iconFolder }
        ]
      },
    }
  }

  Widget treeListHud()
  {
    GridPane
    {
      hgap = 24
      numCols = 4

      TestHudList {
        items=[
          TestItem { text="Boulevard" },
          TestItem { text="Grove" },
          TestItem { text="Mulberry" },
          TestItem { text="Stuart" }
        ]
      },

      TestHudList {
        items=[
          TestItem { text="Boulevard"; icon=iconFolder; aux="10" },
          TestItem { text="Grove";     icon=iconFolder; aux="7"  },
          TestItem { text="Mulberry";  icon=iconFolder; aux="8"  },
          TestItem { text="Stuart" ;   icon=iconFolder; aux="22" }
        ]
      },

      TestHudList {
        style = "pill"
        //borderColor = Color("#444")
        items=[
          TestItem { text="Boulevard"; icon=iconFolder; aux="2" },
          TestItem { text="Grove";     icon=iconFolder; depth=1; aux="3" },
          TestItem { text="Mulberry";  icon=iconFolder; depth=2 },
          TestItem { text="Stuart" ;   icon=iconFolder; depth=3; aux="1"; }
        ]
      },

      TestHudList {
        items=[
          TestItem { text="Zone A"; group=true },
          TestItem { text="Boulevard"; icon=iconFolder },
          TestItem { text="Grove";     icon=iconFolder },
          TestItem { text="Zone B"; group=true },
          TestItem { text="Mulberry";  icon=iconFolder },
          TestItem { text="Stuart" ;   icon=iconFolder }
        ]
      },
    }
  }

  static const Image iconFolder := Image(`fan://icons/x16/folder.png`)
}

@Js
internal class TestList : TreeList
{
  Str? style
  override Size prefSize(Hints hints := Hints.defVal) { Size(175,225) }
  override Bool isHeading(Obj item) { item->group }
  override Str text(Obj item) { item->text }
  override Image? icon(Obj item, Bool sel) { item->icon }
  override Int depth(Obj item) { item->depth }
  override Str? aux(Obj item) { item->aux }
  override Str auxStyle() { style ?: super.auxStyle }
}

@Js
internal class TestPaleList : PaleTreeList
{
  Str? style
  override Size prefSize(Hints hints := Hints.defVal) { Size(175,225) }
  override Bool isHeading(Obj item) { item->group }
  override Str text(Obj item) { item->text }
  override Image? icon(Obj item, Bool sel) { item->icon }
  override Int depth(Obj item) { item->depth }
  override Str? aux(Obj item) { item->aux }
  override Str auxStyle() { style ?: super.auxStyle }
}

@Js
internal class TestHudList : HudList
{
  Str? style
  override Size prefSize(Hints hints := Hints.defVal) { Size(175,225) }
  override Bool isHeading(Obj item) { item->group }
  override Str text(Obj item) { item->text }
  override Image? icon(Obj item, Bool sel) { item->icon }
  override Int depth(Obj item) { item->depth }
  override Str? aux(Obj item) { item->aux }
  override Str auxStyle() { style ?: super.auxStyle }
}

@Js
internal class TestItem
{
  Str? text
  Image? icon
  Int depth := 0
  Str? aux
  Bool group := false
}