[MSPAINT]
[reactos.git] / reactos / base / applications / mspaint / registry.cpp
1 /*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL
4 * FILE: base/applications/mspaint/registry.cpp
5 * PURPOSE: Offering functions dealing with registry values
6 * PROGRAMMERS: Benedikt Freisen
7 */
8
9 /* INCLUDES *********************************************************/
10
11 #include "precomp.h"
12
13 #include <winreg.h>
14
15 /* FUNCTIONS ********************************************************/
16 static DWORD ReadDWORD(CRegKey &key, LPCTSTR lpName, DWORD &dwValue, BOOL bCheckForDef)
17 {
18 DWORD dwPrev = dwValue;
19
20 if (key.QueryDWORDValue(lpName, dwValue) != ERROR_SUCCESS)
21 dwValue = dwPrev;
22
23 if (bCheckForDef && dwValue == 0)
24 dwValue = dwPrev;
25
26 return dwPrev;
27 }
28
29 static void ReadFileHistory(CRegKey &key, LPCTSTR lpName, CString &strFile)
30 {
31 ULONG nChars = MAX_PATH;
32 LPTSTR szFile = strFile.GetBuffer(nChars);
33 if (key.QueryStringValue(lpName, szFile, &nChars) != ERROR_SUCCESS)
34 szFile[0] = '\0';
35 strFile.ReleaseBuffer();
36 }
37
38 void RegistrySettings::SetWallpaper(LPCTSTR szFileName, RegistrySettings::WallpaperStyle style)
39 {
40 CRegKey desktop;
41 if (desktop.Open(HKEY_CURRENT_USER, _T("Control Panel\\Desktop")) == ERROR_SUCCESS)
42 {
43 desktop.SetStringValue(_T("Wallpaper"), szFileName);
44
45 desktop.SetStringValue(_T("WallpaperStyle"), (style == RegistrySettings::STRETCHED) ? _T("2") : _T("0"));
46 desktop.SetStringValue(_T("TileWallpaper"), (style == RegistrySettings::TILED) ? _T("1") : _T("0"));
47 }
48
49 SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) szFileName, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE);
50 }
51
52 void RegistrySettings::LoadPresets()
53 {
54 BMPHeight = 300;
55 BMPWidth = 400;
56 GridExtent = 1;
57 NoStretching = 0;
58 ShowThumbnail = 0;
59 SnapToGrid = 0;
60 ThumbHeight = 100;
61 ThumbWidth = 120;
62 ThumbXPos = 180;
63 ThumbYPos = 200;
64 UnitSetting = 0;
65 const WINDOWPLACEMENT DefaultWindowPlacement = {
66 sizeof(WINDOWPLACEMENT),
67 0,
68 SW_SHOWNORMAL,
69 {0, 0},
70 {-1, -1},
71 {100, 100, 700, 550}
72 };
73 WindowPlacement = DefaultWindowPlacement;
74 }
75
76 void RegistrySettings::Load()
77 {
78 LoadPresets();
79
80 CRegKey view;
81 if (view.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\View"), KEY_READ) == ERROR_SUCCESS)
82 {
83 ReadDWORD(view, _T("BMPHeight"), BMPHeight, TRUE);
84 ReadDWORD(view, _T("BMPWidth"), BMPWidth, TRUE);
85 ReadDWORD(view, _T("GridExtent"), GridExtent, FALSE);
86 ReadDWORD(view, _T("NoStretching"), NoStretching, FALSE);
87 ReadDWORD(view, _T("ShowThumbnail"), ShowThumbnail, FALSE);
88 ReadDWORD(view, _T("SnapToGrid"), SnapToGrid, FALSE);
89 ReadDWORD(view, _T("ThumbHeight"), ThumbHeight, TRUE);
90 ReadDWORD(view, _T("ThumbWidth"), ThumbWidth, TRUE);
91 ReadDWORD(view, _T("ThumbXPos"), ThumbXPos, TRUE);
92 ReadDWORD(view, _T("ThumbYPos"), ThumbYPos, TRUE);
93 ReadDWORD(view, _T("UnitSetting"), UnitSetting, FALSE);
94
95 ULONG pnBytes = sizeof(WINDOWPLACEMENT);
96 view.QueryBinaryValue(_T("WindowPlacement"), &WindowPlacement, &pnBytes);
97 }
98
99 CRegKey files;
100 if (files.Open(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Recent File List"), KEY_READ) == ERROR_SUCCESS)
101 {
102 ReadFileHistory(files, _T("File1"), strFile1);
103 ReadFileHistory(files, _T("File2"), strFile2);
104 ReadFileHistory(files, _T("File3"), strFile3);
105 ReadFileHistory(files, _T("File4"), strFile4);
106 }
107 }
108
109 void RegistrySettings::Store()
110 {
111 CRegKey view;
112 if (view.Create(HKEY_CURRENT_USER,
113 _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\View")) == ERROR_SUCCESS)
114 {
115 view.SetDWORDValue(_T("BMPHeight"), BMPHeight);
116 view.SetDWORDValue(_T("BMPWidth"), BMPWidth);
117 view.SetDWORDValue(_T("GridExtent"), GridExtent);
118 view.SetDWORDValue(_T("NoStretching"), NoStretching);
119 view.SetDWORDValue(_T("ShowThumbnail"), ShowThumbnail);
120 view.SetDWORDValue(_T("SnapToGrid"), SnapToGrid);
121 view.SetDWORDValue(_T("ThumbHeight"), ThumbHeight);
122 view.SetDWORDValue(_T("ThumbWidth"), ThumbWidth);
123 view.SetDWORDValue(_T("ThumbXPos"), ThumbXPos);
124 view.SetDWORDValue(_T("ThumbYPos"), ThumbYPos);
125 view.SetDWORDValue(_T("UnitSetting"), UnitSetting);
126
127 view.SetBinaryValue(_T("WindowPlacement"), &WindowPlacement, sizeof(WINDOWPLACEMENT));
128 }
129
130 CRegKey files;
131 if (files.Create(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Paint\\Recent File List")) == ERROR_SUCCESS)
132 {
133 if (!strFile1.IsEmpty())
134 files.SetStringValue(_T("File1"), strFile1);
135 if (!strFile2.IsEmpty())
136 files.SetStringValue(_T("File2"), strFile2);
137 if (!strFile3.IsEmpty())
138 files.SetStringValue(_T("File3"), strFile3);
139 if (!strFile4.IsEmpty())
140 files.SetStringValue(_T("File4"), strFile4);
141 }
142 }
143
144 void RegistrySettings::SetMostRecentFile(LPCTSTR szPathName)
145 {
146 if (strFile1 == szPathName)
147 {
148 // do nothing
149 }
150 else if (strFile2 == szPathName)
151 {
152 CString strTemp = strFile2;
153 strFile2 = strFile1;
154 strFile1 = strTemp;
155 }
156 else if (strFile3 == szPathName)
157 {
158 CString strTemp = strFile3;
159 strFile3 = strFile2;
160 strFile2 = strFile1;
161 strFile1 = strTemp;
162 }
163 else if (strFile4 == szPathName)
164 {
165 CString strTemp = strFile4;
166 strFile4 = strFile3;
167 strFile3 = strFile2;
168 strFile2 = strFile1;
169 strFile1 = strTemp;
170 }
171 else
172 {
173 strFile4 = strFile3;
174 strFile3 = strFile2;
175 strFile2 = strFile1;
176 strFile1 = szPathName;
177 }
178 }