// Written by Christopher E. Miller
// This code is public domain.

// To compile:
//    dfl tiplist -gui
// or
//    dmd tiplist dfl.lib -L/exet:nt/su:windows:4.0


private import dfl.all;


class MainForm: Form
{
   ToolTip ttip;
   ListBox lbox;
   int lastLboxTipIndex = -1;
   
   
   this()
   {
      startPosition = FormStartPosition.CENTER_SCREEN;
      text = "tiplist";
      
      ttip = new ToolTip;
      
      with(lbox = new ListBox)
      {
         integralHeight = false;
         width = 120;
         dock = DockStyle.LEFT;
         
         sorted = true;
         items.add("zero");
         items.add("3");
         items.add("1");
         items.add("fast!");
         items.add("furious");
         items.add("2");
         items.add("+");
         items.add("-");
         items.add("last");
         
         parent = this;
         
         mouseMove ~= &lbox_mouseMove;
      }
   }
   
   
   private void lbox_mouseMove(Object sender, MouseEventArgs ea)
   {
      int li;
      li = lbox.indexFromPoint(ea.x, ea.y);
      if(li != lastLboxTipIndex)
      {
         if(li == -1)
         {
            lastLboxTipIndex = -1;
            ttip.setToolTip(lbox, null);
         }
         else
         {
            lastLboxTipIndex = li;
            ttip.setToolTip(lbox, lbox.items[li].toString());
         }
      }
   }
}


int main()
{
   int result = 0;
   
   try
   {
      Application.run(new MainForm);
   }
   catch(Object o)
   {
      msgBox(o.toString(), "Fatal Error", MsgBoxButtons.OK, MsgBoxIcon.ERROR);
      
      result = 1;
   }
   
   return result;
}