/*
        requester.cpp

        V1.00 - 241196  Kimmo Teräväinen
        -----   ------  ----------------
        Look requester.h

*/

#include <inline++/exec.h>

#include "requester.h"
#include "pokergadgets.h"

extern TextFont *TEXTFONT;
extern UBYTE pens[];
const cButton cReqGadgets::ReqButtons[] = {
  cButton(GADGET_OK    , 80,50,50,16,"OK"),
  cButton(0,0,0,0,0,NULL)
};

int cReqGadgets::IDCMP(const IntuiMessage *msg)
{
  switch(msg->Class) {
    case IDCMP_REFRESHWINDOW: GT_BeginRefresh(wnd);
                              GT_EndRefresh(wnd, TRUE);
                              return IDCMP_DONE;

    case IDCMP_VANILLAKEY:
         switch(msg->Code) {
           case 10:
           case 13:
           case 27:
           case 'o':
           case 'O':
           case 'k':
           case 'K': return IDCMP_TERMINATED;
         }
         break;
    case IDCMP_GADGETUP:
         {
           Gadget *gad = (struct Gadget *)msg->IAddress;
           switch(gad->GadgetID) {
             case GADGET_OK: return IDCMP_TERMINATED;
           }
           return IDCMP_DONE;
         }
    case IDCMP_CLOSEWINDOW:
         return IDCMP_TERMINATED;
  }
  return IDCMP_NOT_DONE;
}

void cRequester::Execute()
{
  Window *Wnd=NULL;
  int BTop = parent->WScreen->WBorTop + (parent->WScreen->Font->ta_YSize + 1);

  {
    struct TagItem window_tags[] = {
      { WA_Title, (long unsigned)title.chars() },
      { WA_DragBar , TRUE},
      { WA_DepthGadget , TRUE},
      { WA_CloseGadget, TRUE },
      { WA_Left, parent->LeftEdge  + (parent->Width-210)/2 },
      { WA_Top,  parent->TopEdge   + (parent->Height-70)/2  },
      { WA_Width, 210 }, { WA_Height, 70+BTop },
      { WA_CustomScreen, (ULONG)parent->WScreen },
      { WA_Activate, TRUE},
      { WA_IDCMP, IDCMP_VANILLAKEY |
                  IDCMP_MOUSEBUTTONS |
                  IDCMP_GADGETUP |
                  IDCMP_REFRESHWINDOW |
                  IDCMP_CLOSEWINDOW },
      { TAG_DONE, NULL}
    };
    Wnd=OpenWindowTagList(NULL,window_tags);
  }

  if(Wnd)
  {
      SetFont(Wnd->RPort,TEXTFONT);

      int RT,terminated=FALSE;
      cReqGadgets reqgads(Wnd);


      Move(Wnd->RPort,
           (Wnd->Width-TextLength(Wnd->RPort,(UBYTE*)text.chars(),text.length()))/2,
           20+Wnd->BorderTop);
      SetAPen(Wnd->RPort,pens[1]); SetDrMd(Wnd->RPort,JAM1);
      Text(Wnd->RPort,text,text.length());


      while(!terminated) {
        Message *msg;

        WaitPort(Wnd->UserPort);
        while(msg=GetMsg(Wnd->UserPort)) {

          if((RT=reqgads.IDCMP((const IntuiMessage *)msg))==IDCMP_NOT_DONE)
            switch(((IntuiMessage *)msg)->Class) {
              case IDCMP_CLOSEWINDOW: terminated=TRUE; break;
            }
          if(RT==IDCMP_TERMINATED) terminated=TRUE;
          if(RT!=IDCMP_REPLYED) ReplyMsg(msg);
        }
      }

    CloseWindow(Wnd);
  }
}

