1 // preferences.cpp - Preferences subroutines.
3 // (c) 2012-2015 Xestia Software Development.
5 // This file is part of Xestia Address Book.
7 // Xestia Address Book is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
11 // Xestia Address Book is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
23 #include <wx/fileconf.h>
25 #include "preferences.h"
29 void SavePreferences();
30 void LoadPreferences();
32 XABPreferences::XABPreferences(wxString PreferencesFilename){
34 // Load the settings into the XABPreferences object using the
35 // settings file received in PreferencesFilename.
37 wxString fullprefpath;
39 bool accountnamevalid, accountaddressvalid, accounttypevalid, accountportvalid,
40 accountsslvalid, accountusernamevalid, accountpasswordvalid,
41 accountdirprefixvalid, accountdirvalid, accountrefreshvalid = FALSE;
43 bool preaccountstage = FALSE;
44 bool isvalidaccount = FALSE;
45 bool isvalidsection = FALSE;
47 wxString accountaddress;
49 long accountport = 8080;
52 wxString accountusername;
53 wxString accountpassword;
54 wxString accountdirprefix;
61 wxString segmentvalue;
65 fullprefpath.Append(PreferencesFilename);
66 fullprefpath.Append(wxT("settings"));
68 wxFileConfig *settingfile = new wxFileConfig("", "", fullprefpath);
71 settingfile->Read(wxT("SaveWindowPosition"), &ValueInc);
73 if (ValueInc == wxT("true")){
76 wxRect WindowPosition;
78 long PosX, PosY, PosH, PosW = 0;
80 bool PosXValid, PosYValid, PosHValid, PosWValid = FALSE;
82 PosXValid = settingfile->Read(wxT("WindowPositionX"), &PosX);
83 PosYValid = settingfile->Read(wxT("WindowPositionY"), &PosY);
84 PosHValid = settingfile->Read(wxT("WindowPositionHeight"), &PosH);
85 PosWValid = settingfile->Read(wxT("WindowPositionWidth"), &PosW);
87 if (PosXValid == TRUE && PosYValid == TRUE && PosHValid == TRUE && PosWValid == TRUE){
89 WindowPosition.SetX((int)PosX);
90 WindowPosition.SetY((int)PosY);
91 WindowPosition.SetHeight((int)PosH);
92 WindowPosition.SetWidth((int)PosW);
96 WindowPosition.SetX(-1);
97 WindowPosition.SetY(-1);
98 WindowPosition.SetHeight(500);
99 WindowPosition.SetWidth(300);
103 SetMainWindowData(WindowPosition);
107 settingfile->Read(wxT("HideLocalAddressBooks"), &ValueInc);
109 if (ValueInc == wxT("true")){
113 settingfile->Read(wxT("UseBackgroundContactColour"), &ValueInc);
115 if (ValueInc == wxT("true")){
116 UseBackgroundContactColour = true;
117 wxString BackgroundContactColourRead;
118 settingfile->Read(wxT("BackgroundContactColour"), &BackgroundContactColourRead);
119 if (BackgroundContactColourRead.Mid(0, 1) == "#"){
120 BackgroundContactColour.Set(BackgroundContactColourRead);
127 // Load the accounts.
129 fullprefpath.Clear();
130 fullprefpath.Append(PreferencesFilename);
131 fullprefpath.Append(wxT("accounts"));
133 wxFileConfig *cfgfile = new wxFileConfig("AddressBook", "Xestia", fullprefpath);
135 wxString EntryName, EntryValue;
136 wxString AccAdr, AccUsr, AccPass, AccPrefix, AccDir;
139 int AccRef, AccPort = 0;
141 bool ContinueAcc = TRUE;
143 ContinueAcc = cfgfile->GetFirstGroup(accountname, itemindex);
147 cfgfile->SetPath(accountname);
148 cfgfile->Read(wxT("type"), &EntryValue);
150 if (EntryValue == wxT("Local")){
152 // Get the account directory.
154 cfgfile->Read(wxT("accountdir"), &AccDir);
156 if (AccDir.Len() > 4){
158 accountdirvalid = TRUE;
162 accountdirvalid = FALSE;
166 if (accountdirvalid == TRUE){
168 accounts.AddAccount(accountname, wxT("Local"), wxT(""), 0,
174 } else if (EntryValue == wxT("CardDAV")){
176 cfgfile->Read(wxT("accountdir"), &AccDir);
177 accountaddressvalid = cfgfile->Read(wxT("address"), &AccAdr);
178 accountportvalid = cfgfile->Read(wxT("port"), &AccPort);
179 accountsslvalid = cfgfile->Read(wxT("ssl"), &AccSSLInc);
180 if (AccSSLInc == wxT("true")){
186 accountusernamevalid = cfgfile->Read(wxT("username"), &AccUsr);
187 accountpasswordvalid = cfgfile->Read(wxT("password"), &AccPass);
188 accountdirprefixvalid = cfgfile->Read(wxT("prefix"), &AccPrefix);
189 accountrefreshvalid = cfgfile->Read(wxT("refresh"), &AccRef);
191 if (AccDir.Len() > 4){
193 accountdirvalid = TRUE;
197 // Make sure it is not bigger than 65535 or less than 1.
198 // If so, default to port 8008.
200 if (accountport < 1 || accountport > 65535){
202 accountportvalid = TRUE;
205 accounts.AddAccount(accountname, wxT("CardDAV"), AccAdr, AccPort,
206 AccSSL, AccUsr, AccPass,
207 AccPrefix, AccDir, AccRef);
211 cfgfile->Read(wxT("accountdir"), &AccDir);
212 accountaddressvalid = cfgfile->Read(wxT("address"), &AccAdr);
213 accountportvalid = cfgfile->Read(wxT("port"), &AccPort);
214 accountsslvalid = cfgfile->Read(wxT("ssl"), &AccSSLInc);
215 if (AccSSLInc == wxT("true")){
221 accountusernamevalid = cfgfile->Read(wxT("username"), &AccUsr);
222 accountpasswordvalid = cfgfile->Read(wxT("password"), &AccPass);
223 accountdirprefixvalid = cfgfile->Read(wxT("prefix"), &AccPrefix);
224 accountrefreshvalid = cfgfile->Read(wxT("refresh"), &AccRef);
226 if (AccDir.Len() > 4){
228 accountdirvalid = TRUE;
232 // Make sure it is not bigger than 65535 or less than 1.
233 // If so, default to port 8008.
235 if (accountport < 1 || accountport > 65535){
237 accountportvalid = TRUE;
240 accounts.AddAccount(accountname, EntryValue, AccAdr, AccPort,
241 AccSSL, AccUsr, AccPass,
242 AccPrefix, AccDir, AccRef);
246 // Clear up for the next account.
248 accountnamevalid, accountaddressvalid, accounttypevalid, accountportvalid,
249 accountsslvalid, accountusernamevalid, accountpasswordvalid,
250 accountdirprefixvalid, accountdirvalid, accountrefreshvalid, accountssl,
251 isvalidaccount, isvalidsection = FALSE;
259 accountaddress.Clear();
263 accountusername.Clear();
264 accountpassword.Clear();
265 accountdirprefix.Clear();
266 preaccountstage = TRUE;
268 cfgfile->SetPath(wxT("/"));
269 ContinueAcc = cfgfile->GetNextGroup(accountname, itemindex);
275 XABPreferences::~XABPreferences(){
279 bool XABPreferences::GetBoolData(wxString SettingName){
281 // GetBoolData from the XABPreferences object.
283 if (SettingName == wxT("SaveWindowPosition")) { return SaveWindowPos; }
284 else if (SettingName == wxT("HideLocalAddressBooks")) { return HideLocalABs; }
285 else if (SettingName == wxT("UseBackgroundContactColour")) { return UseBackgroundContactColour; }
291 wxRect XABPreferences::GetMainWindowData(){
293 // Return the main window data as a wxRect object.
295 return MainWindowData;
299 void XABPreferences::SetMainWindowData(wxRect WindowData){
301 // Set the main window data from a wxRect object.
303 MainWindowData = WindowData;
307 wxColour XABPreferences::GetBackgroundContactColourData(){
309 return BackgroundContactColour;
313 void XABPreferences::SetBackgroundContactColourData(wxColour ColourData){
315 BackgroundContactColour = ColourData;
321 XABPrefAccounts::XABPrefAccounts(){
323 // Setup the default values for XABPrefAccounts.
329 int XABPrefAccounts::AddAccount(wxString NewAccName,
331 wxString NewAccAddress,
336 wxString NewAccDirPrefix,
341 // Add an account to the list of accounts in the
342 // XABPrefAccounts object.
344 AccountName.Add(NewAccName, 1);
345 AccountType.Add(NewAccType, 1);
346 AccountAddress.Add(NewAccAddress, 1);
347 AccountPort.Add(NewAccPort, 1);
348 AccountSSL.Add(NewAccSSL, 1);
349 AccountUsername.Add(NewAccUser, 1);
350 AccountPassword.Add(NewAccPass, 1);
351 DirectoryPrefix.Add(NewAccDirPrefix, 1);
352 AccountDirectory.Add(NewAccDir, 1);
353 AccountRefresh.Add(NewAccRefresh, 1);
361 int XABPrefAccounts::GetCount(){
363 // Get the count of accounts in the XABPrefAccounts object.
365 return AccountsCount;
369 wxString XABPrefAccounts::GetAccountName(int AccountNum){
371 // Get the account name.
373 if (AccountNum > AccountsCount){
377 return AccountName[AccountNum];
381 wxString XABPrefAccounts::GetAccountType(int AccountNum){
383 // Get the account type.
385 if (AccountNum > AccountsCount){
389 return AccountType[AccountNum];
393 wxString XABPrefAccounts::GetAccountAddress(int AccountNum){
395 // Get the account server address.
397 if (AccountNum > AccountsCount){
401 return AccountAddress[AccountNum];
405 int XABPrefAccounts::GetAccountPort(int AccountNum){
407 // Get the account server port.
409 if (AccountNum > AccountsCount){
413 return AccountPort[AccountNum];
417 bool XABPrefAccounts::GetAccountSSL(int AccountNum){
419 // Get the account server SSL support.
421 if (AccountNum > AccountsCount){
425 return AccountSSL[AccountNum];
429 wxString XABPrefAccounts::GetAccountUsername(int AccountNum){
431 // Get the account username.
433 if (AccountNum > AccountsCount){
437 return AccountUsername[AccountNum];
441 wxString XABPrefAccounts::GetAccountPassword(int AccountNum){
443 // Get the account password.
445 if (AccountNum > AccountsCount){
449 return AccountPassword[AccountNum];
453 wxString XABPrefAccounts::GetAccountDirectory(int AccountNum){
455 // Get the account directory.
457 if (AccountNum > AccountsCount){
461 return AccountDirectory[AccountNum];
465 wxString XABPrefAccounts::GetAccountDirPrefix(int AccountNum){
467 // Get the account server directory prefix.
469 if (AccountNum > AccountsCount){
473 return DirectoryPrefix[AccountNum];
477 long XABPrefAccounts::GetAccountRefresh(int AccountNum){
479 // Get the account refresh time.
481 if (AccountNum > AccountsCount){
485 return AccountRefresh[AccountNum];