add correct comments for buttons
[reactos.git] / reactos / base / applications / imagesoft / floatwindow.c
1 #include <precomp.h>
2
3 static const TCHAR szFloatWndClass[] = TEXT("ImageSoftFloatWndClass");
4
5 #define ID_TIMER 1
6
7 TBBUTTON ToolsButtons[] = {
8 /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */
9 {TBICON_RECTSEL, ID_RECTSEL, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* rectangle select */
10 {TBICON_MOVESEL, ID_MOVESEL, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* move selected pixels */
11 {TBICON_LASOO, ID_LASOO, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* lasso select */
12 {TBICON_MOVE, ID_MOVE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* move selection */
13 {TBICON_ECLIPSESEL, ID_ECLIPSESEL, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* elipse select */
14 {TBICON_ZOOM, ID_ZOOM, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* zoom */
15 {TBICON_MAGICWAND, ID_MAGICWAND, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* magic wand */
16 {TBICON_TEXT, ID_TEXT, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* text */
17 {TBICON_PAINTBRUSH, ID_PAINTBRUSH, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* paintbrush */
18 {TBICON_ERASER, ID_ERASER, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* eraser */
19 {TBICON_PENCIL, ID_PENCIL, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* pencil */
20 {TBICON_COLORPICKER, ID_COLORPICKER, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* color picker */
21 {TBICON_CLONESTAMP, ID_CLONESTAMP, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* clone stamp */
22 {TBICON_RECOLORING, ID_RECOLORING, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* recolor */
23 {TBICON_PAINTBUCKET, ID_PAINTBUCKET, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* paint bucket */
24 {TBICON_LINE, ID_LINE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* line */
25 {TBICON_RECTANGLE, ID_RECTANGLE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* rectangle */
26 {TBICON_ROUNDRECT, ID_ROUNDRECT, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* round rectangle */
27 {TBICON_ECLIPSE, ID_ECLIPSE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* elipse */
28 {TBICON_FREEFORM, ID_FREEFORM, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* free form */
29
30 {10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
31 };
32
33
34 BOOL
35 ShowHideWindow(HWND hwnd)
36 {
37 static BOOL Hidden = FALSE;
38
39 ShowWindow(hwnd, Hidden ? SW_SHOW : SW_HIDE);
40 Hidden = ~Hidden;
41
42 return Hidden;
43 }
44
45
46 VOID
47 FloatToolbarCreateToolsGui(PFLT_WND FltTools)
48 {
49 HWND hTb;
50 HIMAGELIST hImageList;
51 INT NumButtons;
52
53 NumButtons = sizeof(ToolsButtons) / sizeof(ToolsButtons[0]);
54
55 hTb = CreateWindowEx(0,
56 TOOLBARCLASSNAME,
57 NULL,
58 WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_WRAPABLE | CCS_NODIVIDER,
59 0, 0, 32, 200,
60 FltTools->hSelf,
61 NULL,
62 hInstance,
63 NULL);
64
65 SendMessage(hTb,
66 TB_SETEXTENDEDSTYLE,
67 0,
68 TBSTYLE_EX_HIDECLIPPEDBUTTONS);
69
70 SendMessage(hTb,
71 TB_BUTTONSTRUCTSIZE,
72 sizeof(ToolsButtons[0]),
73 0);
74
75 SendMessage(hTb,
76 TB_SETBITMAPSIZE,
77 0,
78 (LPARAM)MAKELONG(16, 16));
79
80 hImageList = InitImageList(20,
81 IDB_TOOLSRECTSEL);
82
83 ImageList_Destroy((HIMAGELIST)SendMessage(hTb,
84 TB_SETIMAGELIST,
85 0,
86 (LPARAM)hImageList));
87
88 SendMessage(hTb,
89 TB_ADDBUTTONS,
90 NumButtons,
91 (LPARAM)ToolsButtons);
92
93 SendMessage(hTb,
94 TB_AUTOSIZE,
95 0,
96 0);
97 }
98
99
100 VOID
101 FloatToolbarCreateColorsGui(PFLT_WND FltColors)
102 {
103
104 return;
105 }
106
107
108 VOID
109 FloatToolbarCreateHistoryGui(PFLT_WND FltHistory)
110 {
111
112 return;
113 }
114
115 LRESULT CALLBACK
116 FloatToolbarWndProc(HWND hwnd,
117 UINT Message,
118 WPARAM wParam,
119 LPARAM lParam)
120 {
121 switch(Message)
122 {
123 static BOOL bOpaque = FALSE;
124
125 case WM_CREATE:
126
127 SetWindowLong(hwnd,
128 GWL_EXSTYLE,
129 GetWindowLong(hwnd,
130 GWL_EXSTYLE) | WS_EX_LAYERED);
131
132 /* set the tranclucency to 60% */
133 SetLayeredWindowAttributes(hwnd,
134 0,
135 (255 * 60) / 100,
136 LWA_ALPHA);
137
138 break;
139
140 case WM_TIMER:
141 {
142 POINT pt;
143
144 if (bOpaque != TRUE)
145 {
146 KillTimer(hwnd,
147 ID_TIMER);
148 break;
149 }
150
151 if (GetCursorPos(&pt))
152 {
153 RECT rect;
154
155 if (GetWindowRect(hwnd,
156 &rect))
157 {
158 if (! PtInRect(&rect,
159 pt))
160 {
161 KillTimer(hwnd,
162 ID_TIMER);
163
164 bOpaque = FALSE;
165
166 SetWindowLong(hwnd,
167 GWL_EXSTYLE,
168 GetWindowLong(hwnd,
169 GWL_EXSTYLE) | WS_EX_LAYERED);
170
171 /* set the tranclucency to 60% */
172 SetLayeredWindowAttributes(hwnd,
173 0,
174 (255 * 60) / 100,
175 LWA_ALPHA);
176
177 }
178 }
179 }
180 }
181 break;
182
183 case WM_NCMOUSEMOVE:
184 case WM_MOUSEMOVE:
185 if (bOpaque == FALSE)
186 {
187 SetWindowLong(hwnd,
188 GWL_EXSTYLE,
189 GetWindowLong(hwnd,
190 GWL_EXSTYLE) & ~WS_EX_LAYERED);
191
192 RedrawWindow(hwnd,
193 NULL,
194 NULL,
195 RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
196
197 bOpaque = TRUE;
198 SetTimer(hwnd,
199 ID_TIMER,
200 200,
201 NULL);
202 }
203 break;
204
205 case WM_COMMAND:
206 if (LOWORD(wParam) == IDCANCEL)
207 ShowHideWindow(hwnd);
208
209 switch(LOWORD(wParam))
210 {
211 case ID_NEW:
212 MessageBox(hwnd, _T("Kapow!"), _T("Hit test"), MB_OK | MB_ICONEXCLAMATION);
213 break;
214
215 case ID_CLONESTAMP:
216 case ID_COLORPICKER:
217 case ID_ECLIPSE:
218 case ID_ECLIPSESEL:
219 case ID_ERASER:
220 case ID_FREEFORM:
221 case ID_LASOO:
222 case ID_LINE:
223 case ID_MAGICWAND:
224 case ID_MOVE:
225 case ID_MOVESEL:
226 case ID_PAINTBRUSH:
227 case ID_PAINTBUCKET:
228 case ID_PENCIL:
229 case ID_RECOLORING:
230 case ID_RECTANGLE:
231 case ID_ROUNDRECT:
232 case ID_TEXT:
233 case ID_ZOOM:
234 /*SendMessage(Info->hSelf,
235 LOWORD(wParam),
236 wParam,
237 lParam);*/
238 break;
239 }
240 break;
241
242 case WM_NCACTIVATE:
243 /* FIXME: needs fully implementing */
244 return DefWindowProc(hwnd,
245 Message,
246 TRUE,
247 lParam);
248
249 case WM_CLOSE:
250 ShowHideWindow(hwnd);
251 break;
252
253 default:
254 return DefWindowProc(hwnd,
255 Message,
256 wParam,
257 lParam);
258 }
259
260 return 0;
261 }
262
263
264 BOOL
265 InitFloatWndClass(VOID)
266 {
267 WNDCLASSEX wc = {0};
268
269 wc.cbSize = sizeof(WNDCLASSEX);
270 wc.style = CS_HREDRAW | CS_VREDRAW;
271 wc.lpfnWndProc = FloatToolbarWndProc;
272 wc.hInstance = hInstance;
273 wc.hIcon = NULL;
274 wc.hCursor = LoadCursor(NULL,
275 IDC_ARROW);
276 wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
277 wc.lpszClassName = szFloatWndClass;
278 wc.hIconSm = NULL;
279
280 return RegisterClassEx(&wc) != (ATOM)0;
281 }
282
283 VOID
284 UninitFloatWndImpl(VOID)
285 {
286 UnregisterClass(szFloatWndClass,
287 hInstance);
288 }
289