[CRT] spawn: define a unicode environment when needed
[reactos.git] / sdk / lib / 3rdparty / cardlib / cardregion.h
1 #ifndef CARDREGION_INCLUDED
2 #define CARDREGION_INCLUDED
3
4 class CardWindow;
5
6 //
7 // This class defines a physical card-stack,
8 // which draws the cards, supports
9 //
10
11 class CardRegion
12 {
13 friend class CardWindow;
14 friend class CardStack;
15
16 //
17 // Constructor is PRIVATE - only
18 // a CardWindow can create cardstacks!
19 //
20 CardRegion(CardWindow &parent, int id, bool fVisible,
21 int x, int y, int xOffset, int yOffset);
22
23 ~CardRegion();
24
25 public:
26
27 void SetBackColor(COLORREF cr);
28
29 void SetCardStack(const CardStack &cs);
30 const CardStack & GetCardStack();
31
32 //
33 // Event-callback support
34 //
35 bool SetDragRule(UINT uDragType, pCanDragProc proc = 0);
36 bool SetDropRule(UINT uDropType, pCanDropProc proc = 0);
37
38 void SetClickProc (pClickProc proc);
39 void SetClickReleaseProc (pClickProc proc);
40 void SetDblClickProc (pClickProc proc);
41
42 void SetAddCardProc (pAddProc proc);
43 void SetRemoveCardProc (pRemoveProc proc);
44
45 //
46 // Physical attribute support
47 //
48 bool SetThreedCount (int count);
49 void SetOffsets (int x, int y);
50 void SetPos (int x, int y);
51 void Show (bool fShow);
52 bool IsVisible ();
53
54 void SetEmptyImage (UINT uImage);
55 void SetBackCardIdx (UINT uBackIdx);
56 void SetPlacement (UINT xJustify, UINT yJustify, int xAdjust, int yAdjust);
57
58 void Update();
59 void Redraw();
60
61 void SetFaceDirection(UINT uDirType, int nOption);
62 UINT GetFaceDirection(int *pnOption);
63
64 void Flash(int count, int timeout);
65 void StopFlash();
66
67 int Id();
68
69 CardWindow &GetCardWindow() { return parentWnd; }
70
71 bool PlayCard(CardRegion *pDestStack, int value, int num);
72 bool MoveCard(CardRegion *pDestStack, int nNumCards, bool fAnimate);
73 bool SimulateDrag(CardRegion *pDestStack, int nNumCards, bool fAnimate);
74
75 bool Lock();
76 bool UnLock();
77
78 //
79 // Common wrappers for the CardStack object
80 //
81 int NumCards() const;
82 void NewDeck() { cardstack.NewDeck(); }
83 void Shuffle() { cardstack.Shuffle(); }
84 void Clear() { cardstack.Clear(); }
85
86 void Reverse() { cardstack.Reverse(); }
87
88 void Push(const Card card) { cardstack.Push(card); }
89 void Push(const CardStack &cs) { cardstack.Push(cs); }
90
91 Card Pop() { return cardstack.Pop(); }
92 CardStack Pop(int items) { return cardstack.Pop(items); }
93
94 Card Top() { return cardstack.Top(); }
95 CardStack Top(int items) { return cardstack.Top(items); }
96
97
98 private:
99
100 void DoFlash();
101 void RedrawIfNotDim(CardRegion *compare, bool fFullRedraw);
102
103 void UpdateFaceDir(CardStack &cards);
104 void Clip(HDC hdc);
105 void Render(HDC hdc);
106 int GetOverlapRatio(int x, int y, int width, int height);
107
108 void MoveDragCardTo(HDC hdc, int x, int y);
109 void ZoomCard(HDC hdc, int xpos, int ypos, CardRegion *dest);
110
111 void RenderBottomMost(HDC hdc, int minustopmost = 0);
112 void PrepareDragBitmaps(int numtodrag);
113 void PrepareDragBitmapsThreed(int numtodrag);
114 void ReleaseDragBitmaps(void);
115
116 bool CanDragCards(int iNumCards);
117 bool CanDropCards(CardStack &cards);
118
119 void CalcApparentCards();
120 int CalcApparentCards(int realnum);
121
122 void UpdateSize();
123 void AdjustPosition(int winwidth, int winheight);
124
125 bool IsPointInStack(int x, int y);
126
127 int GetNumDragCards(int x, int y);
128 bool OnLButtonDown(int x, int y);
129 bool OnLButtonDblClk(int x, int y);
130 bool OnMouseMove(int x, int y);
131 bool OnLButtonUp(int x, int y);
132 void ClickRelease(int x, int y);
133
134
135 //
136 // Private data members
137 //
138
139 int id;
140
141 CardWindow &parentWnd;
142
143 CardStack cardstack; //cards in this stack
144 CardStack dragstack; //cards which we might be dragging
145
146 bool fMouseDragging;
147
148 int xpos; //coordinates of stack
149 int ypos;
150
151 int xoffset; //direction that cards take
152 int yoffset;
153
154 int width; //stack-size of all cards
155 int height;
156
157 //
158 // justify / placement vars
159 int xjustify;
160 int yjustify;
161 int xadjust;
162 int yadjust;
163
164 //
165 // Used for mouse-dragging / moving cards
166 //
167 int iNumDragCards;
168 int mousexoffset;
169 int mouseyoffset;
170 int oldx;
171 int oldy;
172
173 int nDragCardWidth;
174 int nDragCardHeight;
175
176 HDC hdcBackGnd;
177 HBITMAP hbmBackGnd;
178 HDC hdcDragCard;
179 HBITMAP hbmDragCard;
180
181 int nNumApparentCards;
182 int nThreedCount;
183 bool fVisible;
184
185 int nFlashCount;
186 bool fFlashVisible;
187 UINT uFlashTimer;
188
189 COLORREF crBackgnd;
190
191 UINT uEmptyImage;
192 UINT uFaceDirType;
193 int nFaceDirOption;
194 int nBackCardIdx;
195
196 UINT uDragRule;
197 UINT uDropRule;
198
199 //
200 // Stack callback support
201 //
202 pCanDragProc CanDragCallback;
203 pCanDropProc CanDropCallback;
204 pClickProc ClickCallback;
205 pClickProc ClickReleaseCallback;
206 pClickProc DblClickCallback;
207 pAddProc AddCallback;
208 pRemoveProc RemoveCallback;
209
210 //locking mechanism to prevent user dragging etc
211 HANDLE mxlock;
212 };
213
214 #endif /* CARDREGION_INCLUDED */