[SNDVOL32] Add the small line dialog
[reactos.git] / base / applications / mspaint / toolbox.cpp
1 /*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL
4 * FILE: base/applications/mspaint/toolbox.cpp
5 * PURPOSE: Window procedure of the main window and all children apart from
6 * hPalWin, hToolSettings and hSelection
7 * PROGRAMMERS: Benedikt Freisen
8 */
9
10 /* INCLUDES *********************************************************/
11
12 #include "precomp.h"
13
14 /* FUNCTIONS ********************************************************/
15
16 LRESULT CToolBox::OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
17 {
18 HIMAGELIST hImageList;
19 HBITMAP tempBm;
20 int i;
21 TCHAR tooltips[16][30];
22
23 /*
24 * FIXME: Unintentionally there is a line above the tool bar (hidden by y-offset).
25 * To prevent cropping of the buttons height has been increased from 200 to 205
26 */
27 RECT toolbarPos = {1, -2, 1 + 50, -2 + 205};
28 toolbar.Create(TOOLBARCLASSNAME, m_hWnd, toolbarPos, NULL,
29 WS_CHILD | WS_VISIBLE | CCS_NOPARENTALIGN | CCS_VERT | CCS_NORESIZE | TBSTYLE_TOOLTIPS);
30 hImageList = ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK, 16, 0);
31 toolbar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM) hImageList);
32 tempBm = (HBITMAP) LoadImage((HINSTANCE)GetWindowLongPtr(GWLP_HINSTANCE), MAKEINTRESOURCE(IDB_TOOLBARICONS), IMAGE_BITMAP, 256, 16, 0);
33 ImageList_AddMasked(hImageList, tempBm, 0xff00ff);
34 DeleteObject(tempBm);
35 toolbar.SendMessage(TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0);
36
37 for(i = 0; i < 16; i++)
38 {
39 TBBUTTON tbbutton;
40 int wrapnow = 0;
41
42 if (i % 2 == 1)
43 wrapnow = TBSTATE_WRAP;
44
45 LoadString((HINSTANCE)GetWindowLongPtr(GWLP_HINSTANCE), IDS_TOOLTIP1 + i, tooltips[i], 30);
46 ZeroMemory(&tbbutton, sizeof(TBBUTTON));
47 tbbutton.iString = (INT_PTR) tooltips[i];
48 tbbutton.fsStyle = TBSTYLE_CHECKGROUP;
49 tbbutton.fsState = TBSTATE_ENABLED | wrapnow;
50 tbbutton.idCommand = ID_FREESEL + i;
51 tbbutton.iBitmap = i;
52 toolbar.SendMessage(TB_ADDBUTTONS, 1, (LPARAM) &tbbutton);
53 }
54
55 toolbar.SendMessage(TB_CHECKBUTTON, ID_PEN, MAKELPARAM(TRUE, 0));
56 toolbar.SendMessage(TB_SETMAXTEXTROWS, 0, 0);
57 toolbar.SendMessage(TB_SETBUTTONSIZE, 0, MAKELPARAM(25, 25));
58
59 return 0;
60 }
61
62 LRESULT CToolBox::OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
63 {
64 SetCursor(LoadCursor(NULL, IDC_ARROW));
65 return 0;
66 }
67
68 LRESULT CToolBox::OnSysColorChange(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
69 {
70 toolbar.SendMessage(WM_SYSCOLORCHANGE, 0, 0);
71 return 0;
72 }
73
74 LRESULT CToolBox::OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
75 {
76 switch (LOWORD(wParam))
77 {
78 case ID_FREESEL:
79 toolsModel.SetActiveTool(1);
80 break;
81 case ID_RECTSEL:
82 toolsModel.SetActiveTool(2);
83 break;
84 case ID_RUBBER:
85 toolsModel.SetActiveTool(3);
86 break;
87 case ID_FILL:
88 toolsModel.SetActiveTool(4);
89 break;
90 case ID_COLOR:
91 toolsModel.SetActiveTool(5);
92 break;
93 case ID_ZOOM:
94 toolsModel.SetActiveTool(6);
95 break;
96 case ID_PEN:
97 toolsModel.SetActiveTool(7);
98 break;
99 case ID_BRUSH:
100 toolsModel.SetActiveTool(8);
101 break;
102 case ID_AIRBRUSH:
103 toolsModel.SetActiveTool(9);
104 break;
105 case ID_TEXT:
106 toolsModel.SetActiveTool(10);
107 break;
108 case ID_LINE:
109 toolsModel.SetActiveTool(11);
110 break;
111 case ID_BEZIER:
112 toolsModel.SetActiveTool(12);
113 break;
114 case ID_RECT:
115 toolsModel.SetActiveTool(13);
116 break;
117 case ID_SHAPE:
118 toolsModel.SetActiveTool(14);
119 break;
120 case ID_ELLIPSE:
121 toolsModel.SetActiveTool(15);
122 break;
123 case ID_RRECT:
124 toolsModel.SetActiveTool(16);
125 break;
126 }
127 return 0;
128 }
129
130 LRESULT CToolBox::OnToolsModelToolChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
131 {
132 selectionWindow.ShowWindow(SW_HIDE);
133 pointSP = 0; // resets the point-buffer of the polygon and bezier functions
134 return 0;
135 }