--- /dev/null
+#ifndef CARDREGION_INCLUDED\r
+#define CARDREGION_INCLUDED\r
+\r
+#include "globals.h"\r
+#include "cardstack.h"\r
+#include "cardlib.h"\r
+\r
+class CardWindow;\r
+\r
+//\r
+// This class defines a physical card-stack,\r
+// which draws the cards, supports\r
+//\r
+\r
+class CardRegion\r
+{\r
+ friend class CardWindow;\r
+ friend class CardStack;\r
+\r
+ //\r
+ // Constructor is PRIVATE - only\r
+ // a CardWindow can create cardstacks!\r
+ //\r
+ CardRegion(CardWindow &parent, int id, bool fVisible, \r
+ int x, int y, int xOffset, int yOffset);\r
+\r
+ ~CardRegion();\r
+\r
+public:\r
+\r
+ void SetBackColor(COLORREF cr);\r
+ \r
+ void SetCardStack(const CardStack &cs);\r
+ const CardStack & GetCardStack();\r
+\r
+ //\r
+ // Event-callback support\r
+ //\r
+ bool SetDragRule(UINT uDragType, pCanDragProc proc = 0);\r
+ bool SetDropRule(UINT uDropType, pCanDropProc proc = 0);\r
+ \r
+ void SetClickProc (pClickProc proc);\r
+ void SetDblClickProc (pClickProc proc);\r
+\r
+ void SetAddCardProc (pAddProc proc);\r
+ void SetRemoveCardProc (pRemoveProc proc);\r
+\r
+ //\r
+ // Physical attribute support\r
+ //\r
+ bool SetThreedCount (int count);\r
+ void SetOffsets (int x, int y);\r
+ void SetPos (int x, int y);\r
+ void Show (bool fShow);\r
+ bool IsVisible ();\r
+\r
+ void SetEmptyImage (UINT uImage);\r
+ void SetBackCardIdx (UINT uBackIdx);\r
+ void SetPlacement (UINT xJustify, UINT yJustify, int xAdjust, int yAdjust);\r
+\r
+ void Update();\r
+ void Redraw();\r
+\r
+ void SetFaceDirection(UINT uDirType, int nOption);\r
+ UINT GetFaceDirection(int *pnOption);\r
+\r
+ void Flash(int count, int timeout);\r
+ void StopFlash();\r
+\r
+ int Id();\r
+\r
+ CardWindow &GetCardWindow() { return parentWnd; }\r
+\r
+ bool PlayCard(CardRegion *pDestStack, int value, int num);\r
+ bool MoveCard(CardRegion *pDestStack, int nNumCards, bool fAnimate);\r
+ bool SimulateDrag(CardRegion *pDestStack, int nNumCards, bool fAnimate);\r
+\r
+ bool Lock();\r
+ bool UnLock();\r
+\r
+ //\r
+ // Common wrappers for the CardStack object\r
+ //\r
+ int NumCards() const;\r
+ void NewDeck() { cardstack.NewDeck(); }\r
+ void Shuffle() { cardstack.Shuffle(); }\r
+ void Clear() { cardstack.Clear(); }\r
+\r
+ void Reverse() { cardstack.Reverse(); }\r
+ \r
+ void Push(const Card card) { cardstack.Push(card); }\r
+ void Push(const CardStack &cs) { cardstack.Push(cs); }\r
+\r
+ Card Pop() { return cardstack.Pop(); }\r
+ CardStack Pop(int items) { return cardstack.Pop(items); }\r
+\r
+ Card Top() { return cardstack.Top(); }\r
+ CardStack Top(int items) { return cardstack.Top(items); }\r
+\r
+\r
+private:\r
+\r
+ void DoFlash();\r
+ void RedrawIfNotDim(CardRegion *compare, bool fFullRedraw);\r
+\r
+ void UpdateFaceDir(CardStack &cards);\r
+ void Clip(HDC hdc);\r
+ void Render(HDC hdc);\r
+ int GetOverlapRatio(int x, int y, int width, int height);\r
+\r
+ void MoveDragCardTo(HDC hdc, int x, int y);\r
+ void ZoomCard(HDC hdc, int xpos, int ypos, CardRegion *dest);\r
+\r
+ void RenderBottomMost(HDC hdc, int minustopmost = 0);\r
+ void PrepareDragBitmaps(int numtodrag);\r
+ void PrepareDragBitmapsThreed(int numtodrag);\r
+ void ReleaseDragBitmaps(void);\r
+\r
+ bool CanDragCards(int iNumCards);\r
+ bool CanDropCards(CardStack &cards);\r
+ \r
+ void CalcApparentCards();\r
+ int CalcApparentCards(int realnum);\r
+\r
+ void UpdateSize();\r
+ void AdjustPosition(int winwidth, int winheight);\r
+\r
+ bool IsPointInStack(int x, int y);\r
+\r
+ int GetNumDragCards(int x, int y);\r
+ bool OnLButtonDown(int x, int y);\r
+ bool OnLButtonDblClk(int x, int y);\r
+ bool OnMouseMove(int x, int y);\r
+ bool OnLButtonUp(int x, int y);\r
+\r
+ \r
+ //\r
+ // Private data members\r
+ //\r
+\r
+ int id;\r
+ \r
+ CardWindow &parentWnd;\r
+ \r
+ CardStack cardstack; //cards in this stack\r
+ CardStack dragstack; //cards which we might be dragging\r
+\r
+ bool fMouseDragging;\r
+\r
+ int xoffset; //direction that cards take\r
+ int yoffset;\r
+ \r
+ int xpos; //coordinates of stack\r
+ int ypos;\r
+\r
+ int width; //stack-size of all cards\r
+ int height;\r
+\r
+ //\r
+ // justify / placement vars\r
+ int xjustify;\r
+ int yjustify;\r
+ int xadjust;\r
+ int yadjust;\r
+\r
+ //\r
+ // Used for mouse-dragging / moving cards\r
+ //\r
+ int iNumDragCards;\r
+ int mousexoffset; \r
+ int mouseyoffset;\r
+ int oldx;\r
+ int oldy;\r
+ \r
+ int nDragCardWidth;\r
+ int nDragCardHeight;\r
+ \r
+ HDC hdcBackGnd;\r
+ HBITMAP hbmBackGnd;\r
+ HDC hdcDragCard;\r
+ HBITMAP hbmDragCard;\r
+\r
+ int nNumApparentCards;\r
+ int nThreedCount;\r
+ bool fVisible;\r
+ \r
+ int nFlashCount;\r
+ bool fFlashVisible;\r
+ UINT uFlashTimer;\r
+\r
+ COLORREF crBackgnd;\r
+\r
+ UINT uEmptyImage;\r
+ UINT uFaceDirType;\r
+ int nFaceDirOption;\r
+ int nBackCardIdx;\r
+\r
+ UINT uDragRule;\r
+ UINT uDropRule;\r
+ \r
+ //\r
+ // Stack callback support\r
+ // \r
+ pCanDragProc CanDragCallback;\r
+ pCanDropProc CanDropCallback;\r
+ pClickProc ClickCallback;\r
+ pClickProc DblClickCallback;\r
+ pAddProc AddCallback;\r
+ pRemoveProc RemoveCallback;\r
+\r
+ //locking mechanism to prevent user dragging etc\r
+ HANDLE mxlock; \r
+};\r
+\r
+#endif\r
+\r