/* checkbox gadget subclass */

#include <proto/bgui.h>
#include <proto/intuition.h>
#include <libraries/bgui_macros.h>
#include "checkbox.h"

Class *CheckClass;

ULONG CheckGadg_DIMENSIONS(Class *cl,Object *o,struct grmDimensions *dim)
{
  ULONG retval,flags;

  if (dim->grmd_RPort->TxHeight <= 8)
  {
    flags = dim->grmd_Flags;
    dim->grmd_Flags |= GDIMF_NO_FRAME;
    retval = CoerceMethodA(BGUI_GetClassPtr(BGUI_BASE_GADGET),o,dim);
    *(dim->grmd_MinSize.Width) += CHECKMARK_WIDTH;
    *(dim->grmd_MinSize.Height) += CHECKMARK_HEIGHT;
    dim->grmd_Flags = flags;
  }
  else
  {
    retval = DoSuperMethodA(cl,o,(Msg)dim);
  }
  return retval;
}

__geta4 ULONG DispatchCheckGadg(__a0 Class *cl,__a2 Object *o,__a1 Msg msg)
{
  ULONG retval;

  switch (msg->MethodID)
  {
    case GRM_DIMENSIONS:
      retval = CheckGadg_DIMENSIONS(cl,o,(struct grmDimensions *)msg);
      break;
    default:
      retval = DoSuperMethodA(cl,o,(Msg)msg);
      break;
  }
  return retval;
}

Class *InitCheckClass(void)
{
  Class *super;

  if (CheckClass == NULL)
  {
    if (super = BGUI_GetClassPtr(BGUI_CHECKBOX_GADGET))
    {
      CheckClass = MakeClass(NULL,NULL,super,0,0);
      if (CheckClass)
	CheckClass->cl_Dispatcher.h_Entry = (HOOKFUNC)DispatchCheckGadg;
    }
  }
  return CheckClass;
}

void FreeCheckClass(void)
{
  if (CheckClass) FreeClass(CheckClass);
  CheckClass = NULL;
}
