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