/*
        radiogroup.cpp

        V2.00 - 281196  Kimmo Teräväinen
        -----   ------  ----------------
        Look radiogroup.h

*/
#include "radiogroup.h"

extern TextFont *TEXTFONT;

void cPanel::Update(RastPort *rp)
{
  ULONG minx=Left(),
        maxx=Right(),
        miny=Top(),
        maxy=Bottom();

  SetDrMd(rp,JAM1);
  SetAPen(rp,BACKGROUND_PEN);
  RectFill(rp,minx,miny,maxx,maxy);
  switch(border) {
    case PNL_FRAMERAISED:
    case PNL_RAISED:  SetAPen(rp,SHINE_PEN); break;
    case PNL_FRAMELOWERED:
    case PNL_LOWERED: SetAPen(rp,SHADOW_PEN); break;
  }
  ::Move(rp,minx,maxy-1); Draw(rp,minx,miny); Draw(rp,maxx-1,miny);
  switch(border) {
    case PNL_FRAMERAISED: SetAPen(rp,SHADOW_PEN); break;
    case PNL_FRAMELOWERED: SetAPen(rp,SHINE_PEN); break;
  }
  ::Move(rp,maxx-2,miny+1); Draw(rp,minx+1,miny+1); Draw(rp,minx+1,maxy-2);
  switch(border) {
    case PNL_FRAMERAISED:
    case PNL_RAISED:  SetAPen(rp,SHADOW_PEN); break;
    case PNL_FRAMELOWERED:
    case PNL_LOWERED: SetAPen(rp,SHINE_PEN); break;
  }
  ::Move(rp,maxx,miny+1); Draw(rp,maxx,maxy); Draw(rp,minx+1,maxy);
  switch(border) {
    case PNL_FRAMERAISED:  SetAPen(rp,SHINE_PEN); break;
    case PNL_FRAMELOWERED: SetAPen(rp,SHADOW_PEN); break;
  }
  ::Move(rp,minx+2,maxy-1); Draw(rp,maxx-1,maxy-1); Draw(rp,maxx-1,miny+2);
}

void cRadioGroup::DeleteAll()
{
  while(gadgets) Delete();
}

void cRadioGroup::Update()
{
  cRadioGadget *gad=gadgets;
  cPanel::Update(wnd->RPort);
  SetFont(wnd->RPort,TEXTFONT);
  while(gad) {
    gad->Update(wnd->RPort);
    gad=gad->next;
  }
}

void cRadioGroup::Select(int n)
{
  cRadioGadget *gad=gadgets;
  for(int i=0; i<n ; i++) gad=gad->next;
  if(gad) {
    active->UnSelect(wnd->RPort);
    (active=gad)->Select(wnd->RPort);
  }
}

int cRadioGroup::IDCMP(const IntuiMessage *msg)
{
  if(msg->Class!=IDCMP_MOUSEBUTTONS) return IDCMP_NOT_DONE;
  switch(msg->Code) {
    case SELECTDOWN:
         if(!Inside(msg->MouseX,msg->MouseY)) return IDCMP_NOT_DONE;
         for(cRadioGadget *gad=gadgets; gad ;gad=gad->next) {
           if(gad->Inside(msg->MouseX,msg->MouseY)) {
             if(active) active->UnSelect(wnd->RPort);
             (active=gad)->Select(wnd->RPort);
             break;
           }
         }
         return IDCMP_DONE;
  }
  return IDCMP_NOT_DONE;
}
