//////////////////////////////////////////////////////////////////////////////
// window.hpp
//
// Jeffry A Worth
// November 10, 1995
//////////////////////////////////////////////////////////////////////////////

#ifndef __WINDOW_HPP__
#define __WINDOW_HPP__

//////////////////////////////////////////////////////////////////////////////
// Includes
#include "aframe:include/aframe.hpp"
#include "aframe:include/amigaapp.hpp"
#include "aframe:include/rect.hpp"
#include "aframe:include/screen.hpp"

//////////////////////////////////////////////////////////////////////////////
// Structures

struct WindowRange {
  ULONG minWidth;
  ULONG minHeight;
  ULONG maxWidth;
  ULONG maxHeight;
};
typedef struct WindowRange * LPWindowRange;

//////////////////////////////////////////////////////////////////////////////
// Window Class

class AFWindow
{
public:
  AFWindow();
  ~AFWindow();

// Methods
  virtual BOOL Create(AFAmigaApp* app, AFRect* rect);
  virtual BOOL Create(AFAmigaApp* app, AFRect* rect, char* szTitle);
  virtual BOOL Create(AFScreen* screen, AFRect* rect);
  virtual BOOL Create(AFScreen* screen, AFRect* rect, char* szTitle);  
  virtual BOOL Create(AFWindow* window, AFRect* rect);
  virtual BOOL Create(AFWindow* window, AFRect* rect, char* szTitle);
  virtual void DestroyWindow();
  virtual void PostNCDestroy() { return; };
  virtual void SetWindowRange(LPWindowRange wrange);
  virtual BOOL ValidPoint(AFPoint* point);
  virtual void AdjustPoint(AFPoint* point);
  virtual ULONG WindowIDCMP() { return STD_WINDOW_IDCMP; };
  virtual ULONG WindowFlags() { return STD_WINDOW_FLAGS; };
  virtual void GetDisplayRect(AFRect* rect);

  virtual void OnCreate() { return; };

// --- IDCMP Classes
  virtual void OnSizeVerify(LPIntuiMessage imess) { return; };
  virtual void OnNewSize(LPIntuiMessage imess);
  virtual void OnRefreshWindow(LPIntuiMessage imess) { return; };
  virtual void OnMouseButtons(LPIntuiMessage imess) { return; };
  virtual void OnMouseMove(LPIntuiMessage imess) { return; };
  virtual void OnGadgetDown(LPIntuiMessage imess);
  virtual void OnGadgetUp(LPIntuiMessage imess);
  virtual void OnReqSet(LPIntuiMessage imess) { return; };
  virtual void OnMenuPick(LPIntuiMessage imess) { return; };
  virtual void OnCloseWindow(LPIntuiMessage imess);
  virtual void OnRawKey(LPIntuiMessage imess) { return; };
  virtual void OnReqVerify(LPIntuiMessage imess) { return; };
  virtual void OnReqClear(LPIntuiMessage imess) { return; };
  virtual void OnMenuVerify(LPIntuiMessage imess) { return; };
  virtual void OnNewPrefs(LPIntuiMessage imess) { return; };
  virtual void OnDiskInserted(LPIntuiMessage imess) { return; };
  virtual void OnDiskRemoved(LPIntuiMessage imess) { return; };
  virtual void OnWBenchMessage(LPIntuiMessage imess) { return; };
  virtual void OnActiveWindow(LPIntuiMessage imess) { return; };
  virtual void OnInActiveWindow(LPIntuiMessage imess) { return; };
  virtual void OnDeltaMove(LPIntuiMessage imess) { return; };
  virtual void OnVanillaKey(LPIntuiMessage imess) { return; };
  virtual void OnIntuiTicks(LPIntuiMessage imess) { return; };
  virtual void OnIDCMPUpdate(LPIntuiMessage imess) { return; };
  virtual void OnMenuHelp(LPIntuiMessage imess) { return; };
  virtual void OnChangeWindow(LPIntuiMessage imess) { return; };
  virtual void OnGadgetHelp(LPIntuiMessage imess) { return; };
  virtual void OnFutureIDCMP(LPIntuiMessage imess) { return; };

// Intuition functions
  virtual void SetWindowTitles(UBYTE* lpszWindowTitle, UBYTE* lpszScreenTitle);
  virtual void SizeWindow(WORD deltax, WORD deltay);
  virtual void WindowToBack();
  virtual void WindowToFront();
  virtual void ZipWindow();
  virtual void RefreshGadgets();
  virtual void Clear(UBYTE pen);

// Properties
  AFAmigaApp *m_papp;
  AFScreen *m_pscreen;
  struct Window * m_pWindow;
  AFNode *m_pgadgets;
  char *m_sztitle;
  TEXTATTR m_textattr;
};

//////////////////////////////////////////////////////////////////////////////
#endif //__WINDOW_HPP__
