ReactOS 0.4.16-dev-1067-ge98bba2
settings.cpp File Reference
#include "rapps.h"
#include "settings.h"
Include dependency graph for settings.cpp:

Go to the source code of this file.

Classes

class  SettingsField
 
class  SettingsFieldBool
 
class  SettingsFieldInt
 
class  SettingsFieldString
 

Macros

#define SETTINGSSUBKEY   L"Software\\ReactOS\\" RAPPS_NAME
 

Functions

static void AddInfoFields (ATL::CAtlList< SettingsField * > &infoFields, SETTINGS_INFO &settings)
 
static BOOL SaveAllSettings (CRegKey &key, SETTINGS_INFO &settings)
 
static BOOL LoadAllSettings (CRegKey &key, SETTINGS_INFO &settings)
 
static void GetDefaultDownloadDirectory (CStringW &szDownloadDir)
 
static VOID ValidateStringSettings (PSETTINGS_INFO pSettingsInfo)
 
VOID FillDefaultSettings (PSETTINGS_INFO pSettingsInfo)
 
BOOL LoadSettings (PSETTINGS_INFO pSettingsInfo)
 
BOOL SaveSettings (HWND hwnd, PSETTINGS_INFO pSettingsInfo)
 

Macro Definition Documentation

◆ SETTINGSSUBKEY

#define SETTINGSSUBKEY   L"Software\\ReactOS\\" RAPPS_NAME

Definition at line 11 of file settings.cpp.

Function Documentation

◆ AddInfoFields()

static void AddInfoFields ( ATL::CAtlList< SettingsField * > &  infoFields,
SETTINGS_INFO settings 
)
static

Definition at line 114 of file settings.cpp.

115{
116 infoFields.AddTail(new SettingsFieldBool(&(settings.bSaveWndPos), L"bSaveWndPos"));
117 infoFields.AddTail(new SettingsFieldBool(&(settings.bUpdateAtStart), L"bUpdateAtStart"));
118 infoFields.AddTail(new SettingsFieldBool(&(settings.bLogEnabled), L"bLogEnabled"));
119 infoFields.AddTail(new SettingsFieldString(settings.szDownloadDir, MAX_PATH, L"szDownloadDir"));
120 infoFields.AddTail(new SettingsFieldBool(&(settings.bDelInstaller), L"bDelInstaller"));
121 infoFields.AddTail(new SettingsFieldBool(&(settings.bSmallIcons), L"SmallIcons"));
122 infoFields.AddTail(new SettingsFieldBool(&(settings.Maximized), L"WindowPosMaximized"));
123 infoFields.AddTail(new SettingsFieldInt(&(settings.Left), L"WindowPosLeft"));
124 infoFields.AddTail(new SettingsFieldInt(&(settings.Top), L"WindowPosTop"));
125 infoFields.AddTail(new SettingsFieldInt(&(settings.Width), L"WindowPosWidth"));
126 infoFields.AddTail(new SettingsFieldInt(&(settings.Height), L"WindowPosHeight"));
127 infoFields.AddTail(new SettingsFieldInt(&(settings.Proxy), L"ProxyMode"));
128 infoFields.AddTail(new SettingsFieldString((settings.szProxyServer), MAX_PATH, L"ProxyServer"));
129 infoFields.AddTail(new SettingsFieldString((settings.szNoProxyFor), MAX_PATH, L"NoProxyFor"));
130 infoFields.AddTail(new SettingsFieldBool(&(settings.bUseSource), L"bUseSource"));
131 infoFields.AddTail(new SettingsFieldString((settings.szSourceURL), INTERNET_MAX_URL_LENGTH, L"SourceURL"));
132}
struct mke2fs_defaults settings[]
POSITION AddTail(INARGTYPE element)
Definition: atlcoll.h:629
#define MAX_PATH
Definition: compat.h:34
#define INTERNET_MAX_URL_LENGTH
Definition: session.c:1418
#define L(x)
Definition: ntvdm.h:50

Referenced by LoadAllSettings(), and SaveAllSettings().

◆ FillDefaultSettings()

VOID FillDefaultSettings ( PSETTINGS_INFO  pSettingsInfo)

Definition at line 211 of file settings.cpp.

212{
213 ZeroMemory(pSettingsInfo, sizeof(*pSettingsInfo));
214
215 pSettingsInfo->bSaveWndPos = TRUE;
216 pSettingsInfo->bUpdateAtStart = FALSE;
217 pSettingsInfo->bLogEnabled = TRUE;
218 pSettingsInfo->bUseSource = FALSE;
219 pSettingsInfo->bDelInstaller = FALSE;
220 pSettingsInfo->Maximized = FALSE;
221 pSettingsInfo->Left = CW_USEDEFAULT;
222 pSettingsInfo->Top = CW_USEDEFAULT;
223 pSettingsInfo->Width = 680;
224 pSettingsInfo->Height = 450;
225
226 ValidateStringSettings(pSettingsInfo);
227}
static VOID ValidateStringSettings(PSETTINGS_INFO pSettingsInfo)
Definition: settings.cpp:198
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
BOOL bUseSource
Definition: settings.h:24
BOOL bLogEnabled
Definition: settings.h:9
BOOL bDelInstaller
Definition: settings.h:11
BOOL Maximized
Definition: settings.h:14
BOOL bUpdateAtStart
Definition: settings.h:8
BOOL bSaveWndPos
Definition: settings.h:7
#define ZeroMemory
Definition: winbase.h:1743
#define CW_USEDEFAULT
Definition: winuser.h:225

Referenced by LoadSettings(), and anonymous_namespace{settingsdlg.cpp}::SettingsDlgProc().

◆ GetDefaultDownloadDirectory()

static void GetDefaultDownloadDirectory ( CStringW szDownloadDir)
static

Definition at line 178 of file settings.cpp.

179{
181 {
182 szDownloadDir.ReleaseBuffer();
183 if (!szDownloadDir.GetEnvironmentVariableW(L"SystemDrive"))
184 {
185 szDownloadDir = L"C:";
186 }
187 }
188 else
189 {
190 szDownloadDir.ReleaseBuffer();
191 }
192
193 PathAppendW(szDownloadDir.GetBuffer(MAX_PATH), L"\\RAPPS Downloads");
194 szDownloadDir.ReleaseBuffer();
195}
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:387
#define NULL
Definition: types.h:112
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
Definition: shellpath.c:2716
#define FAILED(hr)
Definition: intsafe.h:51
#define PathAppendW
Definition: pathcch.h:309
@ SHGFP_TYPE_CURRENT
Definition: shlobj.h:2157
#define CSIDL_PERSONAL
Definition: shlobj.h:2186

Referenced by ValidateStringSettings().

◆ LoadAllSettings()

static BOOL LoadAllSettings ( CRegKey key,
SETTINGS_INFO settings 
)
static

Definition at line 157 of file settings.cpp.

158{
159 BOOL bLoadedAny = FALSE;
161
162 AddInfoFields(infoFields, settings);
163
164 POSITION InfoListPosition = infoFields.GetHeadPosition();
165 while (InfoListPosition)
166 {
167 SettingsField *Info = infoFields.GetNext(InfoListPosition);
168 if (Info->Load(key))
169 bLoadedAny = TRUE;
170 //else
171 // TODO: error log
172 delete Info;
173 }
174 return bLoadedAny;
175}
static void AddInfoFields(ATL::CAtlList< SettingsField * > &infoFields, SETTINGS_INFO &settings)
Definition: settings.cpp:114
POSITION GetHeadPosition() const
Definition: atlcoll.h:554
E & GetNext(_Inout_ POSITION &pos)
Definition: atlcoll.h:566
unsigned int BOOL
Definition: ntddk_ex.h:94
Definition: copy.c:22
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690

Referenced by LoadSettings().

◆ LoadSettings()

BOOL LoadSettings ( PSETTINGS_INFO  pSettingsInfo)

Definition at line 230 of file settings.cpp.

231{
232 BOOL bLoadedAny = FALSE;
233
234 FillDefaultSettings(pSettingsInfo);
235
236 ATL::CRegKey RegKey;
238 {
239 bLoadedAny = LoadAllSettings(RegKey, *pSettingsInfo);
240 }
241
242 ValidateStringSettings(pSettingsInfo); // Handles the case where a REG_SZ is present but empty
243
244 if (!bLoadedAny)
245 {
246 // This the first launch, write at least one item so ParseCmdAndExecute() does not
247 // trigger another DB update in another process instance between now and SaveSettings().
248 ATL::CRegKey RegKey;
251 {
252 SettingsFieldBool field(&(pSettingsInfo->bUpdateAtStart), L"bUpdateAtStart");
253 field.Save(RegKey);
254 }
255 }
256 return bLoadedAny;
257}
static BOOL LoadAllSettings(CRegKey &key, SETTINGS_INFO &settings)
Definition: settings.cpp:157
#define SETTINGSSUBKEY
Definition: settings.cpp:11
VOID FillDefaultSettings(PSETTINGS_INFO pSettingsInfo)
Definition: settings.cpp:211
LONG Open(HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired=KEY_READ|KEY_WRITE) noexcept
Definition: atlbase.h:1173
LONG Create(HKEY hKeyParent, LPCTSTR lpszKeyName, LPTSTR lpszClass=REG_NONE, DWORD dwOptions=REG_OPTION_NON_VOLATILE, REGSAM samDesired=KEY_READ|KEY_WRITE, LPSECURITY_ATTRIBUTES lpSecAttr=NULL, LPDWORD lpdwDisposition=NULL) noexcept
Definition: atlbase.h:1189
#define ERROR_SUCCESS
Definition: deptool.c:10
#define KEY_READ
Definition: nt_native.h:1023
#define REG_OPTION_NON_VOLATILE
Definition: nt_native.h:1057
#define KEY_WRITE
Definition: nt_native.h:1031
Definition: parser.c:44
#define HKEY_CURRENT_USER
Definition: winreg.h:11

◆ SaveAllSettings()

static BOOL SaveAllSettings ( CRegKey key,
SETTINGS_INFO settings 
)
static

Definition at line 135 of file settings.cpp.

136{
137 BOOL bAllSuccess = TRUE;
139
140 AddInfoFields(infoFields, settings);
141
142 POSITION InfoListPosition = infoFields.GetHeadPosition();
143 while (InfoListPosition)
144 {
145 SettingsField *Info = infoFields.GetNext(InfoListPosition);
146 if (!Info->Save(key))
147 {
148 bAllSuccess = FALSE;
149 // TODO: error log
150 }
151 delete Info;
152 }
153 return bAllSuccess;
154}

Referenced by SaveSettings().

◆ SaveSettings()

BOOL SaveSettings ( HWND  hwnd,
PSETTINGS_INFO  pSettingsInfo 
)

Definition at line 260 of file settings.cpp.

261{
263 ATL::CRegKey RegKey;
264
265 if (pSettingsInfo->bSaveWndPos)
266 {
267 wp.length = sizeof(wp);
269
270 pSettingsInfo->Left = wp.rcNormalPosition.left;
271 pSettingsInfo->Top = wp.rcNormalPosition.top;
272 pSettingsInfo->Width = wp.rcNormalPosition.right - wp.rcNormalPosition.left;
273 pSettingsInfo->Height = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top;
274 pSettingsInfo->Maximized =
276 }
277
280 {
281 return FALSE;
282 }
283
284 return SaveAllSettings(RegKey, *pSettingsInfo);
285}
static BOOL SaveAllSettings(CRegKey &key, SETTINGS_INFO &settings)
Definition: settings.cpp:135
RECT rcNormalPosition
Definition: winuser.h:3306
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
_In_ LONG _In_ HWND hwnd
Definition: winddi.h:4023
BOOL WINAPI GetWindowPlacement(_In_ HWND, _Inout_ WINDOWPLACEMENT *)
#define SW_SHOWMINIMIZED
Definition: winuser.h:782
#define WPF_RESTORETOMAXIMIZED
Definition: winuser.h:2543
#define SW_MAXIMIZE
Definition: winuser.h:783

◆ ValidateStringSettings()

static VOID ValidateStringSettings ( PSETTINGS_INFO  pSettingsInfo)
static

Definition at line 198 of file settings.cpp.

199{
200 if (!pSettingsInfo->szDownloadDir[0])
201 {
202 CStringW szDownloadDir;
203 GetDefaultDownloadDirectory(szDownloadDir);
204
205 CStringW::CopyChars(pSettingsInfo->szDownloadDir, _countof(pSettingsInfo->szDownloadDir),
206 szDownloadDir.GetString(), szDownloadDir.GetLength() + 1);
207 }
208}
static void GetDefaultDownloadDirectory(CStringW &szDownloadDir)
Definition: settings.cpp:178
static void __cdecl CopyChars(_Out_writes_to_(nDestLen, nChars) XCHAR *pchDest, _In_ size_t nDestLen, _In_reads_opt_(nChars) const XCHAR *pchSrc, _In_ int nChars) noexcept
Definition: atlsimpstr.h:438
PXSTR GetString() noexcept
Definition: atlsimpstr.h:367
int GetLength() const noexcept
Definition: atlsimpstr.h:362
#define _countof(array)
Definition: sndvol32.h:70
WCHAR szDownloadDir[MAX_PATH]
Definition: settings.h:10

Referenced by FillDefaultSettings(), and LoadSettings().