1 /*
2  * Copyright 2004 Martin Fuchs
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18 
19 
20  //
21  // Explorer clone
22  //
23  // dialogs/settings.cpp
24  //
25  // Explorer dialogs
26  //
27  // Martin Fuchs, 18.01.2004
28  //
29 
30 
31 #include <precomp.h>
32 
33 #include "../taskbar/traynotify.h"
34 #include "settings.h"
35 
36 
37 void ExplorerPropertySheet(HWND hparent)
38 {
39 	PropertySheetDialog ps(hparent);
40 
41 	ps.dwFlags |= PSH_USEICONID | PSH_PROPTITLE;
42 	ps.pszIcon = MAKEINTRESOURCE(IDI_REACTOS);
43 	ps.pszCaption = TEXT("Explorer");
44 
45 	PropSheetPage psp1(IDD_DESKBAR_DESKTOP, WINDOW_CREATOR(DesktopSettingsDlg));
46 	psp1.dwFlags |= PSP_USETITLE;
47 	psp1.pszTitle = MAKEINTRESOURCE(IDS_DESKTOP);
48 	ps.add(psp1);
49 
50 	PropSheetPage psp2(IDD_DESKBAR_TASKBAR, WINDOW_CREATOR(TaskbarSettingsDlg));
51 	psp2.dwFlags |= PSP_USETITLE;
52 	psp2.pszTitle = MAKEINTRESOURCE(IDS_TASKBAR);
53 	ps.add(psp2);
54 
55 	PropSheetPage psp3(IDD_DESKBAR_STARTMENU, WINDOW_CREATOR(StartmenuSettingsDlg));
56 	psp3.dwFlags |= PSP_USETITLE;
57 	psp3.pszTitle = MAKEINTRESOURCE(IDS_STARTMENU);
58 	ps.add(psp3);
59 
60 	ps.DoModal();
61 }
62 
63 
64 DesktopSettingsDlg::DesktopSettingsDlg(HWND hwnd)
65  :	super(hwnd),
66 	_bmp0(IDB_ICON_ALIGN_0),
67 	_bmp1(IDB_ICON_ALIGN_1),
68 	_bmp2(IDB_ICON_ALIGN_2),
69 	_bmp3(IDB_ICON_ALIGN_3),
70 	_bmp4(IDB_ICON_ALIGN_4),
71 	_bmp5(IDB_ICON_ALIGN_5),
72 	_bmp6(IDB_ICON_ALIGN_6),
73 	_bmp7(IDB_ICON_ALIGN_7),
74 	_bmp8(IDB_ICON_ALIGN_8),
75 	_bmp9(IDB_ICON_ALIGN_9),
76 	_bmp10(IDB_ICON_ALIGN_10)
77 {
78 	new PictureButton(_hwnd, IDC_ICON_ALIGN_0, _bmp0);
79 	new PictureButton(_hwnd, IDC_ICON_ALIGN_1, _bmp1);
80 	new PictureButton(_hwnd, IDC_ICON_ALIGN_2, _bmp2);
81 	new PictureButton(_hwnd, IDC_ICON_ALIGN_3, _bmp3);
82 	new PictureButton(_hwnd, IDC_ICON_ALIGN_4, _bmp4);
83 	new PictureButton(_hwnd, IDC_ICON_ALIGN_5, _bmp5);
84 	new PictureButton(_hwnd, IDC_ICON_ALIGN_6, _bmp6);
85 	new PictureButton(_hwnd, IDC_ICON_ALIGN_7, _bmp7);
86 	new PictureButton(_hwnd, IDC_ICON_ALIGN_8, _bmp8);
87 	new PictureButton(_hwnd, IDC_ICON_ALIGN_9, _bmp9);
88 	new PictureButton(_hwnd, IDC_ICON_ALIGN_10, _bmp10);
89 
90 	_alignment_cur = SendMessage(g_Globals._hwndShellView, PM_GET_ICON_ALGORITHM, 0, 0);
91 	_alignment_tmp = _alignment_cur;
92 
93 	_display_version_org = SendMessage(g_Globals._hwndShellView, PM_DISPLAY_VERSION, 0, MAKELONG(0,0));
94 	CheckDlgButton(hwnd, ID_DESKTOP_VERSION, _display_version_org? BST_CHECKED: BST_UNCHECKED);
95 }
96 
97 #ifndef PSN_QUERYINITIALFOCUS	// currently (as of 18.01.2004) missing in MinGW headers
98 #define PSN_QUERYINITIALFOCUS (-213)
99 #endif
100 
101 int DesktopSettingsDlg::Notify(int id, NMHDR* pnmh)
102 {
103 	switch(pnmh->code) {
104 	  case PSN_QUERYINITIALFOCUS:
105 		SetWindowLongPtr(_hwnd, DWLP_MSGRESULT, (LPARAM)GetDlgItem(_hwnd, IDC_ICON_ALIGN_0+_alignment_cur));
106 		break;
107 
108 	  case PSN_APPLY:
109 		_alignment_cur = _alignment_tmp;
110 		_display_version_org = SendMessage(g_Globals._hwndShellView, PM_DISPLAY_VERSION, 0, MAKELONG(0,0));
111 		break;
112 
113 	  case PSN_RESET:
114 		if (_alignment_tmp != _alignment_cur)
115 			SendMessage(g_Globals._hwndShellView, PM_SET_ICON_ALGORITHM, _alignment_cur, 0);
116 		SendMessage(g_Globals._hwndShellView, PM_DISPLAY_VERSION, _display_version_org, MAKELONG(1,0));
117 		break;
118 
119 	  default:
120 		return super::Notify(id, pnmh);
121 	}
122 
123 	return 0;
124 }
125 
126 int	DesktopSettingsDlg::Command(int id, int code)
127 {
128 	if (id>=IDC_ICON_ALIGN_0 && id<=IDC_ICON_ALIGN_10) {
129 		int alignment = id - IDC_ICON_ALIGN_0;
130 
131 		if (alignment != _alignment_tmp) {
132 			_alignment_tmp = alignment;
133 
134 			PropSheet_Changed(GetParent(_hwnd), _hwnd);
135 
136 			SendMessage(g_Globals._hwndShellView, PM_SET_ICON_ALGORITHM, alignment, 0);
137 		}
138 
139 		return 0;
140 	}
141 
142 	switch(id) {
143 	  case ID_DESKTOP_VERSION:
144 		SendMessage(g_Globals._hwndShellView, PM_DISPLAY_VERSION, 0, MAKELONG(0,1));	// toggle version display flag
145 		PropSheet_Changed(GetParent(_hwnd), _hwnd);
146 		break;
147 
148 	  default:
149 		return 1;
150 	}
151 
152 	return 0;
153 }
154 
155 
156 TaskbarSettingsDlg::TaskbarSettingsDlg(HWND hwnd)
157  :	super(hwnd),
158 	_cfg_org(g_Globals._cfg)
159 {
160 	XMLPos options = g_Globals.get_cfg("desktopbar/options");
161 
162  	CheckDlgButton(hwnd, ID_SHOW_CLOCK, XMLBool(options, "show-clock", true)? BST_CHECKED: BST_UNCHECKED);
163 	CheckDlgButton(hwnd, ID_HIDE_INACTIVE_ICONS, XMLBool(options, "hide-inactive", true)? BST_CHECKED: BST_UNCHECKED);
164 }
165 
166 int TaskbarSettingsDlg::Notify(int id, NMHDR* pnmh)
167 {
168 	switch(pnmh->code) {
169 	  case PSN_APPLY:
170 		_cfg_org = g_Globals._cfg;
171 		break;
172 
173 	  case PSN_RESET:
174 		g_Globals._cfg = _cfg_org;
175 		SendMessage(g_Globals._hwndDesktopBar, PM_REFRESH_CONFIG, 0, 0);
176 		break;
177 
178 	  default:
179 		return super::Notify(id, pnmh);
180 	}
181 
182 	return 0;
183 }
184 
185 int	TaskbarSettingsDlg::Command(int id, int code)
186 {
187 	switch(id) {
188 	  case ID_CONFIG_NOTIFYAREA:
189 		Dialog::DoModal(IDD_NOTIFYAREA, WINDOW_CREATOR(TrayNotifyDlg), _hwnd);
190 		break;
191 
192 	  case ID_SHOW_CLOCK: {
193 		XMLBoolRef boolRef1(XMLPos(g_Globals.get_cfg("desktopbar/options")), "show-clock", true);
194 		boolRef1.toggle();
195 		SendMessage(g_Globals._hwndDesktopBar, PM_REFRESH_CONFIG, 0, 0);
196 		PropSheet_Changed(GetParent(_hwnd), _hwnd);
197 		break;}
198 
199 	  case ID_HIDE_INACTIVE_ICONS: {
200 		XMLBoolRef boolRef2(XMLPos(g_Globals.get_cfg("notify-icons/options")), "hide-inactive", true);
201         boolRef2.toggle();
202 		SendMessage(g_Globals._hwndDesktopBar, PM_REFRESH_CONFIG, 0, 0);
203 		PropSheet_Changed(GetParent(_hwnd), _hwnd);
204 		break;}
205 
206 	  default:
207 		return 1;
208 	}
209 
210 	return 0;
211 }
212 
213 
214 StartmenuSettingsDlg::StartmenuSettingsDlg(HWND hwnd)
215  :	super(hwnd)
216 {
217 }
218 
219 int	StartmenuSettingsDlg::Command(int id, int code)
220 {
221 /*
222 	switch(id) {
223 	  case ID_CONFIG_NOTIFYAREA:
224 		Dialog::DoModal(IDD_NOTIFYAREA, WINDOW_CREATOR(TrayNotifyDlg), _hwnd);
225 		return 0;
226 	}
227 */
228 	return 1;
229 }
230 
231 
232 MdiSdiDlg::MdiSdiDlg(HWND hwnd)
233  :	super(hwnd)
234 {
235 	CenterWindow(hwnd);
236 
237 	XMLPos explorer_options = g_Globals.get_cfg("general/explorer");
238 	bool mdi = XMLBool(explorer_options, "mdi", true);
239 	bool separateFolders = XMLBool(explorer_options, "separate-folders", true);
240 
241 	int id = mdi? IDC_MDI: IDC_SDI;
242 	CheckDlgButton(hwnd, id, BST_CHECKED);
243 	SetFocus(GetDlgItem(hwnd, id));
244 
245 	CheckDlgButton(hwnd, IDC_SEPARATE_SUBFOLDERS, separateFolders?BST_CHECKED:BST_UNCHECKED);
246 }
247 
248 int	MdiSdiDlg::Command(int id, int code)
249 {
250 	if (code == BN_CLICKED) {
251 		switch(id) {
252 		  case IDOK: {
253 			bool mdi = IsDlgButtonChecked(_hwnd, IDC_MDI)==BST_CHECKED;
254 			bool separateFolders = IsDlgButtonChecked(_hwnd, IDC_SEPARATE_SUBFOLDERS)==BST_CHECKED;
255 
256 			XMLPos explorer_options = g_Globals.get_cfg("general/explorer");
257 
258 			XMLBoolRef(explorer_options, "mdi") = mdi;
259 			XMLBoolRef(explorer_options, "separate-folders") = separateFolders;
260 		  } // fall through
261 
262 		  case IDCANCEL:
263 			EndDialog(_hwnd, id);
264 			break;
265 		}
266 
267 		return 0;
268 	}
269 
270 	return 1;
271 }
272