/*
        filerequ.h

        V1.00 - 300197  Kimmo Teräväinen
        -----   ------  ----------------
        V0.01   300197  Started
        V0.10   300197  Windows version ready and tested.
        V0.20   300197  Amiga version ready and tested.

        Object is requester for Poker. Put it somewhere (f.e. to Window).
        Call Load() always you want to ask name of file to load.
        Save() for file to save.
          Windows version will you TOpenSaveDialogs and Amiga version
        will use Asl FileRequester.
*/

#ifdef _Windows

class cFileReq {
  TOpenSaveDialog::TData req;
  TWindow *parent;
public:
  cFileReq(TWindow *par) :
    parent(par),
    req(OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST
        /*| OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_EXPLORER*/,
        "Poker Save Files (*.sav)|*.sav|All Files (*.*)|*.*|",
        0,"","*")
  {
  }

  void Clear() {}

  const char *Load() {
    if(TFileOpenDialog(parent,req).Execute() != IDOK) return NULL;
    return req.FileName;
  }
  const char *Save() {
    if(TFileSaveDialog(parent,req).Execute() != IDOK) return NULL;
    return req.FileName;
  }

  const char *FileName() const { return req.FileName; }

};

#else

#include <inline++/asl.h>
#include <inline++/intuition.h>
#include <libraries/asl.h>

#include "cstring.h"

class cFileReq {
  cstring name,path,
         buffer;
  Window *wnd;
protected:

  const char *DoAslRequest(const TagItem *frtags)
  {
    FileRequester *fr;
    if (fr = (FileRequester *)AllocAslRequest(ASL_FileRequest, frtags)) {
      if (AslRequest(fr, NULL)) {
        path=(const char*)fr->rf_Dir;
        name=(const char*)fr->rf_File;

        if(path=="") buffer=name;
        else {
          buffer=path;
          switch(path.lastchar()) {
            case '/':
            case ':': break;
            default:  buffer+='/';
          }
          buffer+=name;
        }
      }
      FreeAslRequest(fr);
      if(fr) return buffer;
    }
    return NULL;
  }

public:
  cFileReq(Window *Wnd) : wnd(Wnd), path("save/") {}

  void Clear() { name=""; }

  const char *Load() {
    const TagItem frtags[] = {
      { ASL_Hail, (ULONG)"Select Map File to Save As" },
      { ASL_Window, (ULONG)wnd },
      { ASL_OKText, (ULONG)"Open" },
      { ASL_CancelText, (ULONG)"Cancel" },
      { ASL_Pattern, (ULONG)"~(#?.info)" },
      { ASL_File, (ULONG)name.chars() },
      { ASL_Dir, (ULONG)path.chars() },
      { TAG_DONE, NULL }
    };
    return DoAslRequest(frtags);
  }

  const char *Save() {
    const TagItem frtags[] = {
      { ASL_Hail, (ULONG)"Select Map File to Save As" },
      { ASL_Window, (ULONG)wnd },
      { ASL_OKText, (ULONG)"Save" },
      { ASL_CancelText, (ULONG)"Cancel" },
      { ASL_Pattern, (ULONG)"~(#?.info)" },
      { ASL_File, (ULONG)name.chars() },
      { ASL_Dir, (ULONG)path.chars() },
      { TAG_DONE, NULL }
    };
    return DoAslRequest(frtags);
  }

  const char *FileName() const { return buffer; }
};



#endif