szrMain->Add(mainCalendarCtrl, 1, wxEXPAND, 5);
szrMain->Layout();
+ Connect(ID_PROCESSCALENDAR, XCMAIN_PROCESSCALENDAR, wxCommandEventHandler(frmMain::ProcessCalendar));
+ Connect(ID_EDITCALENDAR, XCMAIN_EDITCALENDAR, wxCommandEventHandler(frmMain::EditCalendar));
+ Connect(ID_DELETECALENDAR, XCMAIN_DELETECALENDAR, wxCommandEventHandler(frmMain::DeleteCalendar));
+ Connect(ID_DELETEEVENT, XCMAIN_DELETEEVENT, wxCommandEventHandler(frmMain::DeleteEvent));
+ Connect(ID_ADDENTRY, XCMAIN_ADDEVENT, wxCommandEventHandler(frmMain::AddEvent));
+ Connect(ID_UPDATEENTRY, XCMAIN_UPDATEEVENT, wxCommandEventHandler(frmMain::UpdateEvent));
+ Connect(ID_EDITEVENT, XCMAIN_EDITEVENT, wxCommandEventHandler(frmMain::EditEvent));
+
}
void frmMain::QuitApp( wxCloseEvent& event )
for (int accountSeek = 0; accountSeek < accountCount; accountSeek++){
- CDSAccountResult addResult = calendarData.AddAccount(string(preferences->accounts.GetAccountName(accountSeek).mb_str()));
+ CDSAccountResult addResult = calendarData.AddAccount(string(preferences->accounts.GetAccountName(accountSeek).mb_str()), accountSeek);
}
CDSCalendarResult calendarAddResult = calendarData.AddCalendar(accountInfo.accountID,
calendarList.calendarName[calendarSeek],
calendarList.calendarShortName[calendarSeek],
- calendarList.calendarColour[calendarSeek]);
+ calendarList.calendarColour[calendarSeek],
+ calendarList.calendarDescription[calendarSeek]);
// Set the calendar ID.
}
+void frmMain::ShowPreferencesWindow( wxCommandEvent& event )
+{
+
+ // Open the preferences window.
+
+ reloadAccounts = FALSE;
+
+ frmPreferences *framePreferences = new frmPreferences ( this );
+ framePreferences->SetupPointers(&reloadAccounts);
+ framePreferences->ShowModal();
+ delete framePreferences;
+ framePreferences = NULL;
+
+ // Reload the preferences.
+
+ if (reloadAccounts == true){
+
+ // Reload the accounts as a change has been made within
+ // the application.
+
+ wxString prefDirectory = GetUserPrefDir();
+ XCALPreferences *oldPreferences = preferences;
+ preferences = new XCALPreferences(prefDirectory);
+
+ delete oldPreferences;
+ oldPreferences = nullptr;
+
+ // Clear all of the data from the calendar data storage.
+
+ calendarData.Clear();
+ LoadAccountData();
+
+ // Politely ask the calendar control to reload it's view.
+
+ wxCommandEvent updateGrid(XCCALENDARCTRL_CHANGEGRID);
+ updateGrid.SetId(ID_CHANGEGRID);
+ wxPostEvent(mainCalendarCtrl, updateGrid);
+
+ }
+
+}
+
void frmMain::ShowAboutWindow( wxCommandEvent& event )
{
delete frameUpdate;
frameUpdate = NULL;
+}
+
+void frmMain::OpenNewAccountDialog( wxCommandEvent& event )
+{
+
+ // Open the new account dialog.
+
+ reloadAccounts = false;
+
+ frmNewAccount *frameNewAccount = new frmNewAccount ( this );
+ frameNewAccount->SetupPointers(&reloadAccounts, &calendarData);
+ frameNewAccount->ShowModal();
+ delete frameNewAccount;
+ frameNewAccount = NULL;
+
+ // Reload the preferences.
+
+ if (reloadAccounts == true){
+
+ // Reload the accounts as a change has been made within
+ // the application.
+
+ wxString prefDirectory = GetUserPrefDir();
+ XCALPreferences *oldPreferences = preferences;
+ preferences = new XCALPreferences(prefDirectory);
+
+ delete oldPreferences;
+ oldPreferences = nullptr;
+
+ // Clear all of the data from the calendar data storage.
+
+ calendarData.Clear();
+ LoadAccountData();
+
+ // Politely ask the calendar control to reload it's view.
+
+ wxCommandEvent updateGrid(XCCALENDARCTRL_CHANGEGRID);
+ updateGrid.SetId(ID_CHANGEGRID);
+ wxPostEvent(mainCalendarCtrl, updateGrid);
+
+ }
+
+}
+
+void frmMain::CreateNewCalendar( wxCommandEvent& event )
+{
+
+ frmCalendarEditor *frameNewCalendar = new frmCalendarEditor ( this );
+ frameNewCalendar->SetMode(false);
+ frameNewCalendar->SetupAccounts(preferences);
+ frameNewCalendar->ShowModal();
+ delete frameNewCalendar;
+ frameNewCalendar = nullptr;
+
+}
+
+void frmMain::EditCalendar( wxCommandEvent& event )
+{
+
+ // Get the calendar data.
+
+ CDSGetCalendarInfo calendarInfo = calendarData.GetCalendar(event.GetInt());
+
+ frmCalendarEditor *frameNewCalendar = new frmCalendarEditor ( this );
+ frameNewCalendar->SetMode(true);
+ frameNewCalendar->SetupAccounts(preferences);
+ frameNewCalendar->SetData(event.GetInt(), calendarInfo.accountName, calendarInfo.calendarName, calendarInfo.calendarDescription, calendarInfo.calendarColour);
+ frameNewCalendar->ShowModal();
+ delete frameNewCalendar;
+ frameNewCalendar = nullptr;
+
+}
+
+void frmMain::DeleteCalendar( wxCommandEvent& event )
+{
+
+ CalendarProperties *calendarEventInfo = (CalendarProperties*)event.GetClientData();
+
+ // Get the calendar data.
+
+ CDSGetCalendarInfo calendarInfo = calendarData.GetCalendar(calendarEventInfo->calendarID);
+
+ if (wxMessageBox(wxString::Format("Are you sure you want to delete the calendar %s from the %s account?", calendarInfo.calendarName, calendarInfo.accountName), "Delete calendar", wxYES_NO|wxICON_QUESTION) == wxNO){
+ return;
+ }
+
+ // Go through the grid and delete each calendar entry widget that
+ // is associated with the calendar.
+
+ wxCommandEvent deleteCalendar(XCCALENDARCTRL_DELETECALENDARENTRIES);
+ deleteCalendar.SetId(ID_DELETECALENDARENTRIES);
+ deleteCalendar.SetInt(calendarInfo.calendarID);
+ wxPostEvent(mainCalendarCtrl, deleteCalendar);
+
+ // Get the account configuration file and delete the calendar information.
+
+ CDSGetAccountInfo accountInfo = calendarData.GetAccount(calendarInfo.accountName);
+
+ string accountDirectoryPath = string(GetUserDir().mb_str());
+ accountDirectoryPath += "accounts/";
+ accountDirectoryPath += string(preferences->accounts.GetAccountDirectory(calendarEventInfo->accountPreferencesID).mb_str());
+ accountDirectoryPath += ".";
+ accountDirectoryPath += string(preferences->accounts.GetAccountType(calendarEventInfo->accountPreferencesID).mb_str());
+ accountDirectoryPath += "/";
+
+ string calendarListFilenameFull = accountDirectoryPath;
+ calendarListFilenameFull += "calendarlist.db";
+
+ string calendarDirectoryPath = accountDirectoryPath;
+ calendarDirectoryPath += calendarInfo.calendarTextID;
+
+ wxFileConfig *calendarListFile = new wxFileConfig("", "", wxString(calendarListFilenameFull));
+
+ //calendarListFile->SetPath(wxString(calendarInfo.calendarTextID));
+ calendarListFile->DeleteGroup(wxString(calendarInfo.calendarTextID));
+
+ // Delete the calendar directory.
+
+ wxDir entryListDirectory((wxString)calendarDirectoryPath.c_str());
+ wxString entryListFilename;
+
+ bool continueProcessing = entryListDirectory.GetFirst(&entryListFilename, "*", wxDIR_NO_FOLLOW|wxDIR_FILES);
+
+ while (continueProcessing){
+
+ string entryListFullFilename;
+ entryListFullFilename += calendarDirectoryPath;
+ entryListFullFilename += "/";
+ entryListFullFilename += string(entryListFilename.mb_str());
+
+ wxRemoveFile(wxString(entryListFullFilename.c_str()));
+
+ continueProcessing = entryListDirectory.GetNext(&entryListFilename);
+
+ }
+
+ wxRmdir(calendarDirectoryPath);
+
+ // Delete the calendar from the calendar data storage.
+
+ calendarData.DeleteCalendar(calendarEventInfo->calendarID);
+
+ delete calendarListFile;
+ calendarListFile = nullptr;
+
+ delete calendarEventInfo;
+ calendarEventInfo = nullptr;
+
+}
+
+void frmMain::CreateNewEvent( wxCommandEvent& event ){
+
+ frmEventEditor *frameNewEvent = new frmEventEditor ( this );
+ frameNewEvent->SetupForm(&calendarData, preferences);
+ frameNewEvent->Show();
+
+}
+
+void frmMain::EditEvent( wxCommandEvent& event ){
+
+ frmEventEditor *frameEditEvent = new frmEventEditor ( this );
+ frameEditEvent->SetEventID(event.GetInt());
+ frameEditEvent->SetEditMode(true);
+ frameEditEvent->SetupForm(&calendarData, preferences);
+ frameEditEvent->Show();
+
+}
+
+void frmMain::DeleteEvent( wxCommandEvent& event ){
+
+ EventProperties *eventInfo = (EventProperties*)event.GetClientData();
+
+ // Get the event information.
+
+ CDSGetCalendarEntryInfo eventDeleteData = calendarData.GetEvent(eventInfo->eventID);
+ CDSGetCalendarInfo calendarDeleteData = calendarData.GetCalendar(eventInfo->calendarID);
+
+ if (wxMessageBox(wxString::Format("Are you sure you want to delete the event %s from the %s calendar?", eventDeleteData.entryName, calendarDeleteData.calendarName), "Delete event", wxYES_NO|wxICON_QUESTION) == wxNO){
+ return;
+ }
+
+ // Go through the grid and delete the entry from the GUI.
+
+ wxCommandEvent deleteEvent(XCCALENDARCTRL_DELETEENTRY);
+ deleteEvent.SetId(ID_DELETEENTRY);
+ deleteEvent.SetInt(eventInfo->eventID);
+ wxPostEvent(mainCalendarCtrl, deleteEvent);
+
+ // Get the filename and delete the entry.
+
+ wxRemoveFile(wxString(eventDeleteData.entryFilename.c_str()));
+
+ // Delete the entry from the calendar data storage.
+
+ calendarData.DeleteEvent(eventInfo->eventID);
+
+ delete eventInfo;
+ eventInfo = nullptr;
+
+}
+
+void frmMain::AddEvent( wxCommandEvent& event )
+{
+
+ EventProperties *eventInfo = (EventProperties*)event.GetClientData();
+
+ wxCommandEvent addEvent(XCCALENDARCTRL_ADDENTRY);
+ addEvent.SetId(ID_ADDENTRY);
+ addEvent.SetClientData(eventInfo);
+ wxPostEvent(mainCalendarCtrl, addEvent);
+
+}
+
+void frmMain::UpdateEvent( wxCommandEvent& event )
+{
+
+ EventProperties *eventInfo = (EventProperties*)event.GetClientData();
+
+ wxCommandEvent updateEvent(XCCALENDARCTRL_UPDATEENTRY);
+ updateEvent.SetId(ID_UPDATEENTRY);
+ updateEvent.SetClientData(eventInfo);
+ wxPostEvent(mainCalendarCtrl, updateEvent);
+
+}
+
+void frmMain::ProcessCalendar( wxCommandEvent& event )
+{
+
+ CalendarProperties *calendarInfo = (CalendarProperties*)event.GetClientData();
+
+ // Get the account name.
+
+ CDSGetAccountInfo accountInfo = calendarData.GetAccount(calendarInfo->accountName);
+
+ // Build the account directory path.
+
+ string accountDirectoryPath = string(GetUserDir().mb_str());
+ accountDirectoryPath += "accounts/";
+ accountDirectoryPath += string(preferences->accounts.GetAccountDirectory(calendarInfo->accountPreferencesID).mb_str());
+ accountDirectoryPath += ".";
+ accountDirectoryPath += string(preferences->accounts.GetAccountType(calendarInfo->accountPreferencesID).mb_str());
+ accountDirectoryPath += "/";
+
+ // Generate a UUID for the new calendar.
+
+ string calendarPath = accountDirectoryPath;
+
+ string calendarUUID = "";
+
+ if (calendarInfo->editMode == false){
+
+ calendarUUID = GenerateUUID();
+ calendarPath += calendarUUID;
+
+ } else {
+
+ calendarUUID = calendarData.GetCalendar(calendarInfo->calendarID).calendarTextID;
+ calendarPath += calendarPath;
+
+ }
+
+ calendarPath += "/";
+
+ // Open the account's calendar file and add to the list of calendars.
+
+ string calendarListFilenameFull = accountDirectoryPath;
+ calendarListFilenameFull += "calendarlist.db";
+
+ wxFileConfig *calendarListFile = new wxFileConfig("", "", wxString(calendarListFilenameFull));
+
+ wxString calendarDescription = wxString(calendarInfo->calendarDescription);
+
+ calendarDescription.Replace("\n", "\\n", true);
+
+ // Create the directory for the calendar entries if
+ // not editing a calendar.
+
+ calendarListFile->SetPath(wxString(calendarUUID));
+ calendarListFile->Write(wxT("name"), wxString(calendarInfo->calendarName));
+ calendarListFile->Write(wxT("description"), calendarDescription);
+ calendarListFile->Write(wxT("colour"), wxString(calendarInfo->calendarColour));
+
+ if (calendarInfo->editMode == false){
+
+ wxMkDir(wxString(calendarPath), wxS_DIR_DEFAULT);
+ calendarData.AddCalendar(accountInfo.accountID, calendarInfo->calendarName, calendarUUID, calendarInfo->calendarColour, calendarInfo->calendarDescription);
+
+ } else {
+
+ calendarData.UpdateCalendar(calendarInfo->calendarID, calendarInfo->calendarName, calendarInfo->calendarColour, calendarInfo->calendarDescription);
+
+ // Post event to update the colour in the calendar entries.
+
+ updateColourData.calendarID = calendarInfo->calendarID;
+ updateColourData.newColour.red = calendarInfo->calendarColour.red;
+ updateColourData.newColour.green = calendarInfo->calendarColour.green;
+ updateColourData.newColour.blue = calendarInfo->calendarColour.blue;
+ updateColourData.newColour.alpha = calendarInfo->calendarColour.alpha;
+
+ wxCommandEvent updateColour(XCCALENDARCTRL_UPDATECALENDARCOLOUR);
+ updateColour.SetClientData(&updateColourData);
+ updateColour.SetId(ID_UPDATECOLOUR);
+ wxPostEvent(mainCalendarCtrl, updateColour);
+
+ }
+
+ // Add the calendar to the calendar data storage.
+
+ delete calendarListFile;
+ calendarListFile = nullptr;
+
+ delete calendarInfo;
+ calendarInfo = nullptr;
+
+}
+
+void frmMain::ShowHelp( wxCommandEvent& event )
+{
+
+ wxMessageBox(_("The help documentation will be implemented in a future version of Xestia Calendar."), _("Unimplemented"));
+
}
\ No newline at end of file
#include "../about/frmAbout.h"
#include "../update/frmUpdate.h"
+#include "../preferences/frmPreferences.h"
+#include "../newaccount/frmNewAccount.h"
+#include "../calendareditor/frmCalendarEditor.h"
+#include "../eventeditor/frmEventEditor.h"
#include "../../widgets/XCCalendarCtrl.h"
#include "../../libraries/CalendarDataStorage/CalendarDataStorage.h"
#include "events.h"
#include "preferences.h"
#include "dirs.h"
+#include "structs.h"
+#include "uuid.h"
//// end generated include
XCCalendarMonthView *monthViewCtrl = nullptr;
XCALPreferences *preferences = nullptr;
CalendarDataStorage calendarData;
+ ColourUpdateProperties updateColourData;
+ bool reloadAccounts = false;
protected:
void QuitApp( wxCloseEvent& event );
void QuitApp( wxCommandEvent& event );
void QuitApp();
+ void ShowPreferencesWindow( wxCommandEvent& event );
+ void CreateNewCalendar( wxCommandEvent& event );
+ void EditCalendar( wxCommandEvent& event );
+ void DeleteCalendar( wxCommandEvent& event );
+ void CreateNewEvent( wxCommandEvent& event );
+ void EditEvent( wxCommandEvent& event );
+ void DeleteEvent( wxCommandEvent& event );
+ void AddEvent( wxCommandEvent& event );
+ void UpdateEvent( wxCommandEvent& event );
void ShowUpdateWindow( wxCommandEvent& event );
void ShowAboutWindow( wxCommandEvent& event );
+ void OpenNewAccountDialog( wxCommandEvent& event );
+ void ProcessCalendar( wxCommandEvent& event );
void LoadAccountData();
-
+ void CloseWindow( wxCommandEvent& event );
+ void ShowHelp( wxCommandEvent& event );
public:
/** Constructor */
frmNewAccountADT( parent )
{
+ // Disable the previous button upon form creation.
+
+ btnPrevious->Disable();
+ txtServerAddress->Disable();
+ txtServerPort->Disable();
+ txtUsername->Disable();
+ txtPassword->Disable();
+ chkUseSSL->Disable();
+
}
void frmNewAccount::UpdateRequirements( wxCommandEvent& event )
// TODO: Implement UpdateRequirements
}
-void frmNewAccount::CheckAccountName( wxCommandEvent& event )
-{
-// TODO: Implement CheckAccountName
-}
-
void frmNewAccount::ProcessPrevious( wxCommandEvent& event )
{
// TODO: Implement ProcessPrevious
void frmNewAccount::ProcessNext( wxCommandEvent& event )
{
-// TODO: Implement ProcessNext
+
+ PageSeek++;
+
+ if (PageSeek == 1){
+ PageSeek++;
+ }
+
+ if (PageSeek == 1){
+
+ // Skip this page.
+
+ } else if (PageSeek == 2){
+
+ // Finish screen.
+
+ tabType->Hide();
+ tabConn->Hide();
+ tabFinish->Show();
+ szrNewAccount->RecalcSizes();
+
+ btnNext->Disable();
+ btnNext->SetLabel(_("Finish"));
+
+ if (txtAccountName->IsEmpty() && PageSeek == 2){
+
+ btnNext->Disable();
+
+ } else {
+
+ btnNext->Enable();
+
+ }
+
+ } else if (PageSeek == 3){
+
+ // Finished.
+
+ wxString XestiaCALPrefDirectory;
+ wxString XestiaCALDirectory;
+ wxString AccountSettingsFile;
+ //wxFile ASFile;
+
+ srand(time(0));
+ int RandomNumber = rand() % 32767;
+ wxString RandomNumberSuffix = wxString::Format(wxT("%i"), RandomNumber);
+ bool DirectoryCreated = FALSE;
+
+#if defined(__HAIKU__)
+
+ //preffilename = wxT("noo");
+
+#elif defined(__WIN32__)
+
+ XestiaCALPrefDirectory = GetUserPrefDir();
+ XestiaCALDirectory = GetUserDir();
+
+ AccountSettingsFile = XestiaCALPrefDirectory + wxT("accounts");
+
+ // Open the file for writing.
+
+ wxFileConfig *cfgfile = new wxFileConfig("", "", AccountSettingsFile);
+
+ // Check if account name already exists and return an error message
+ // if this is the case.
+
+ wxString AccountName;
+ long itemindex = 0;
+ bool ContinueAcc;
+ ContinueAcc = cfgfile->GetFirstGroup(AccountName, itemindex);
+
+ while (ContinueAcc){
+
+ if (txtAccountName->GetValue() == AccountName){
+
+ wxMessageBox(_("The selected account name is already used, please use another account name."), _("Account name already used"), wxICON_ERROR);
+ return;
+
+ }
+
+ cfgfile->SetPath(wxT("/"));
+ ContinueAcc = cfgfile->GetNextGroup(AccountName, itemindex);
+
+ }
+
+ if (cmbServerType->GetCurrentSelection() == 0){
+
+ // Create the account directory.
+
+ wxString DirectoryName = txtAccountName->GetValue().Mid(0, 30) + RandomNumberSuffix;
+
+ if (wxMkdir(XestiaCALDirectory + wxT("\\accounts\\") + DirectoryName + wxT(".local"), 0740) == TRUE){
+
+ DirectoryCreated = TRUE;
+
+ }
+
+ if (DirectoryCreated == TRUE){
+
+ WriteAccountDetails(cfgfile, wxT("Local"), DirectoryName);
+
+ } else {
+
+ wxMessageBox(_("An error occured whilst creating the account directory."), _("Cannot create account directory"));
+ return;
+
+ }
+
+ }
+
+ delete cfgfile;
+ cfgfile = NULL;
+
+ *ReloadAccountConfig = TRUE;
+
+#else
+
+ XestiaCALPrefDirectory = GetUserPrefDir();
+ XestiaCALDirectory = GetUserDir();
+
+ AccountSettingsFile = XestiaCALPrefDirectory + wxT("accounts");
+
+ // Open the file for writing.
+
+ wxFileConfig *cfgfile = new wxFileConfig("", "", AccountSettingsFile);
+
+ // Check if account name already exists and return an error message
+ // if this is the case.
+
+ wxString AccountName;
+ long itemindex = 0;
+ bool ContinueAcc;
+ ContinueAcc = cfgfile->GetFirstGroup(AccountName, itemindex);
+
+ while (ContinueAcc){
+
+ if (txtAccountName->GetValue() == AccountName){
+
+ wxMessageBox(_("The selected account name is already used, please use another account name."), _("Account name already used"), wxICON_ERROR);
+ return;
+
+ }
+
+ cfgfile->SetPath(wxT("/"));
+ ContinueAcc = cfgfile->GetNextGroup(AccountName, itemindex);
+
+ }
+
+ if (cmbServerType->GetCurrentSelection() == 0){
+
+ // Create the account directory.
+
+ wxString DirectoryName = txtAccountName->GetValue().Mid(0, 30) + RandomNumberSuffix;
+
+ if (wxMkdir(XestiaCALDirectory + wxT("/accounts/") + DirectoryName + wxT(".Local"), 0740) == TRUE){
+
+ DirectoryCreated = TRUE;
+
+ }
+
+ if (DirectoryCreated == TRUE){
+
+ WriteAccountDetails(cfgfile, wxT("Local"), DirectoryName);
+
+ } else {
+
+ wxMessageBox(_("An error occured whilst creating the account directory."), _("Cannot create account directory"));
+ return;
+
+ }
+
+ }
+
+ delete cfgfile;
+ cfgfile = NULL;
+
+ *ReloadAccountConfig = true;
+
+#endif
+
+ this->Close();
+
+ }
+
}
void frmNewAccount::CloseWindow( wxCommandEvent& event )
{
-// TODO: Implement CloseWindow
+
+ // Close the window.
+
+ *ReloadAccountConfig = FALSE;
+ this->Close();
+
}
+
+void frmNewAccount::SetupPointers(bool *ReloadAccountInc, CalendarDataStorage *dataStorage){
+
+ // Setup the pointers for the new account window.
+
+ ReloadAccountConfig = ReloadAccountInc;
+
+}
+
+void frmNewAccount::CheckAccountName( wxCommandEvent& event )
+{
+
+ // Check that the account name is valid.
+
+ wxString CheckAccName = txtAccountName->GetValue();
+
+ if ((txtAccountName->IsEmpty() && PageSeek == 2) || CheckAccName.Len() < 4){
+
+ btnNext->Disable();
+
+ } else {
+
+ btnNext->Enable();
+
+ }
+
+}
+
+void frmNewAccount::WriteAccountDetails(wxFileConfig *cfgfilein, wxString AccountType, wxString DirectoryName){
+
+ // Write the new account details.
+
+ cfgfilein->SetPath(txtAccountName->GetValue());
+ cfgfilein->Write(wxT("address"), txtServerAddress->GetValue());
+ cfgfilein->Write(wxT("port"), txtServerPort->GetValue());
+ cfgfilein->Write(wxT("username"), txtUsername->GetValue());
+ cfgfilein->Write(wxT("password"), txtPassword->GetValue());
+ cfgfilein->Write(wxT("prefix"), ServerPrefix);
+ cfgfilein->Write(wxT("accountdir"), DirectoryName);
+
+ if (chkUseSSL->GetValue() == TRUE){
+
+ cfgfilein->Write(wxT("ssl"), wxT("true"));
+
+ } else {
+
+ cfgfilein->Write(wxT("ssl"), wxT("false"));
+
+ }
+
+ cfgfilein->Write(wxT("refresh"), wxT("1800"));
+ cfgfilein->Write(wxT("type"), AccountType);
+
+}
\ No newline at end of file
Subclass of frmNewAccountADT, which is generated by wxFormBuilder.
*/
+#include <wx/fileconf.h>
+#include <wx/msgdlg.h>
+#include <string>
+
#include "../../AppXestiaCalendar.h"
+#include "../../libraries/CalendarDataStorage/CalendarDataStorage.h"
+
+#include "dirs.h"
+
//// end generated include
/** Implementing frmNewAccountADT */
class frmNewAccount : public frmNewAccountADT
{
+ private:
+ int PageSeek = 0;
+ wxString ServerPrefix;
+ bool *ReloadAccountConfig = NULL;
protected:
// Handlers for frmNewAccountADT events.
void UpdateRequirements( wxCommandEvent& event );
void ProcessPrevious( wxCommandEvent& event );
void ProcessNext( wxCommandEvent& event );
void CloseWindow( wxCommandEvent& event );
+ void WriteAccountDetails( wxFileConfig *cfgfilein, wxString AccountType, wxString DirectoryName );
public:
/** Constructor */
frmNewAccount( wxWindow* parent );
+ void SetupPointers(bool *ReloadAccountInc, CalendarDataStorage *dataStorage);
//// end generated class members
};
frmPreferencesADT( parent )
{
+ wxMemoryInputStream bstream(icons_acclocal_png, sizeof(icons_acclocal_png));
+ wxMemoryInputStream cstream(icons_accunsupported_png, sizeof(icons_accunsupported_png));
+
+ wxImage icons_acclocal_png(bstream, wxBITMAP_TYPE_PNG);
+ wxBitmap AccNIcon(icons_acclocal_png, -1);
+ wxIcon wxIAccNIcon;
+ wxIAccNIcon.CopyFromBitmap(AccNIcon);
+
+ wxImage icons_accunsupported_png(cstream, wxBITMAP_TYPE_PNG);
+ wxBitmap AccUIcon(icons_accunsupported_png, -1);
+ wxIcon wxIAccUIcon;
+ wxIAccUIcon.CopyFromBitmap(AccUIcon);
+
+ AccountID = AccImgList->Add(wxIAccNIcon);
+ AccountUnsupportedID = AccImgList->Add(wxIAccUIcon);
+
+ NbtPreferences->RemovePage(1);
+ btnAccountAdd->Show(false);
+
}
void frmPreferences::LoadPreferences( wxInitDialogEvent& event )
{
-// TODO: Implement LoadPreferences
+
+ // Setup the preferences filename string. Default is the
+ // *nix systems one (/home/$USER/.xestiacal/preferences)
+
+ preffilename = GetUserPrefDir();
+
+ preferences = new XCALPreferences(preffilename);
+
+ // Setup the General Tab.
+
+ bool SaveWindowPos = preferences->GetBoolData(wxT("SaveWindowPosition"));
+ bool HideLocalABs = preferences->GetBoolData(wxT("HideLocalCalendars"));
+
+ if (SaveWindowPos == TRUE){
+
+ chkSaveWindowPosition->SetValue(TRUE);
+
+ }
+
+ if (HideLocalABs == TRUE){
+
+ chkHideLocal->SetValue(TRUE);
+
+ }
+
+ // Setup the Themes tab.
+
+ wxListItem themecol0;
+
+ themecol0.SetId(0);
+ themecol0.SetWidth(250);
+ themecol0.SetText(_("Theme"));
+ lstThemes->InsertColumn(0,themecol0);
+
+ // Setup the Accounts tab.
+
+ ReloadAccounts();
+
+}
+
+frmPreferences::~frmPreferences(){
+
+ // Destory the preferences window.
+
+ delete AccImgList;
+ AccImgList = NULL;
+
}
-void frmPreferences::DisableABButtons( wxListEvent& event )
+void frmPreferences::ReloadAccounts(){
+
+ // Reload the accounts in the accounts list.
+
+ if (FirstLoad == FALSE){
+ delete preferences;
+ preferences = NULL;
+ preferences = new XCALPreferences(preffilename);
+ } else {
+ FirstLoad = FALSE;
+ }
+
+ wxListItem accountscol0, accountscol1, accountscol2, accountscol3;
+
+ lstAccounts->ClearAll();
+
+ accountscol0.SetId(0);
+ accountscol0.SetWidth(24);
+ lstAccounts->InsertColumn(0,accountscol0);
+ lstAccounts->SetImageList(AccImgList, wxIMAGE_LIST_SMALL);
+
+ accountscol1.SetId(1);
+ accountscol1.SetText(_("Name"));
+ accountscol1.SetWidth(224);
+ lstAccounts->InsertColumn(1,accountscol1);
+
+ accountscol2.SetId(2);
+ accountscol2.SetText(_("Type"));
+ accountscol2.SetWidth(96);
+ lstAccounts->InsertColumn(2,accountscol2);
+
+ wxString AccType;
+
+ for (int i = 0; i < preferences->accounts.GetCount() ; i++){
+
+ wxListItem col0;
+ col0.SetId(i);
+
+ /* if (preferences->accounts.GetAccountType(i) == wxT("CalDAV")){
+
+ col0.SetImage(AccountNetID);
+
+ } else */
+
+ if (preferences->accounts.GetAccountType(i) == wxT("Local")){
+
+ col0.SetImage(AccountID);
+
+ } else {
+
+ col0.SetImage(AccountUnsupportedID);
+
+ }
+
+ long itemindex = lstAccounts->InsertItem( col0 );
+
+ lstAccounts->SetItem(itemindex, 1, preferences->accounts.GetAccountName(i));
+ lstAccounts->SetItem(itemindex, 2, preferences->accounts.GetAccountType(i));
+ lstAccounts->SetItemData(itemindex, i);
+
+ }
+
+}
+
+void frmPreferences::DisableButtons( wxListEvent& event )
{
-// TODO: Implement DisableABButtons
+
+ // Disable the account buttons.
+
+ btnAccountModify->Enable(FALSE);
+ btnAccountDelete->Enable(FALSE);
+
}
-void frmPreferences::EnableABButtons( wxListEvent& event )
+void frmPreferences::EnableButtons( wxListEvent& event )
{
-// TODO: Implement EnableABButtons
+
+ // Enable the account buttons.
+
+ btnAccountModify->Enable(TRUE);
+ btnAccountDelete->Enable(TRUE);
+
}
-void frmPreferences::AddABAccount( wxCommandEvent& event )
+void frmPreferences::AddAccount( wxCommandEvent& event )
{
// TODO: Implement AddABAccount
}
-void frmPreferences::ModifyABAccount( wxCommandEvent& event )
+void frmPreferences::ModifyAccount( wxCommandEvent& event )
{
-// TODO: Implement ModifyABAccount
+
+ // Get the settings for the account, setup the form for
+ // editing the account and then display the window
+ // with the settings.
+
+ long lstAccountsIndex = -1;
+ wxString AccFilename = GetAccountsFile();
+ wxString AccName;
+ wxString AccType;
+
+ wxFileConfig *cfgfile = new wxFileConfig("", "", AccFilename);
+
+ // Get the account name.
+
+ lstAccountsIndex = lstAccounts->GetNextItem(lstAccountsIndex,
+ wxLIST_NEXT_ALL,
+ wxLIST_STATE_SELECTED);
+
+ // Check that the account type is a supported account type.
+
+ AccType = preferences->accounts.GetAccountType((int)lstAccountsIndex);
+
+ if (AccType != "CardDAV" && AccType != "carddav" &&
+ AccType != "Local" && AccType != "local"){
+
+ wxMessageBox(_("Cannot modify the selected account settings as the account type is unsupported."), _("Unsupported account type"), wxICON_ERROR);
+ return;
+
+ }
+
+ AccName = preferences->accounts.GetAccountName((int)lstAccountsIndex);
+
+ frmEditAccount *frameEditAccount = new frmEditAccount ( this );
+ frameEditAccount->LoadPointers(cfgfile);
+ frameEditAccount->LoadSettings(AccName);
+ frameEditAccount->ShowModal();
+
+ bool DialogResult = frameEditAccount->GetDialogResult();
+
+ delete frameEditAccount;
+ frameEditAccount = NULL;
+ delete cfgfile;
+ cfgfile = NULL;
+
+ if (DialogResult == false){
+ return;
+ }
+
+ // Reload the account list in the preferences window.
+
+ ReloadAccounts();
+ *ReloadAccountConfig = TRUE;
+ btnAccountModify->Enable(FALSE);
+ btnAccountDelete->Enable(FALSE);
+
}
-void frmPreferences::DeleteABAccount( wxCommandEvent& event )
+void frmPreferences::DeleteAccount( wxCommandEvent& event )
{
-// TODO: Implement DeleteABAccount
+
+ // Display a confirmation dialog to confirm deletion.
+
+ long lstAccountsIndex = -1;
+ wxMessageDialog dlgdel(this, wxT("Are you sure you want to delete this account?\r\n\r\nAll data that is stored locally will be removed."), wxT("Delete account"), wxYES_NO | wxICON_EXCLAMATION);
+
+ if (dlgdel.ShowModal() == wxID_YES){
+
+ // Remove the selected item from the accounts list
+ // and mark in the accounts list as deleted (Don't write to
+ // accounts file).
+
+ lstAccountsIndex = lstAccounts->GetNextItem(lstAccountsIndex,
+ wxLIST_NEXT_ALL,
+ wxLIST_STATE_SELECTED);
+
+ bool ContinueAcc = TRUE;
+ wxString AccountDir;
+ wxString AccountType;
+ wxString AccountDirFull;
+ wxString AccountDirDelFull;
+ wxString AccountName;
+ wxString AccName;
+ long itemindex = 0;
+
+ wxString AccFilename = GetAccountsFile();
+
+ wxFileConfig *cfgfile = new wxFileConfig("", "", AccFilename);
+
+ AccName = preferences->accounts.GetAccountName((int)lstAccounts->GetItemData(lstAccountsIndex));
+
+ // Get the account directory name and account type..
+
+ ContinueAcc = cfgfile->GetFirstGroup(AccountName, itemindex);
+
+ while (ContinueAcc){
+
+ if (AccountName == AccName){
+
+ cfgfile->SetPath(AccountName);
+
+ cfgfile->Read("accountdir", &AccountDir);
+ cfgfile->Read("type", &AccountType);
+
+ break;
+
+ }
+
+ cfgfile->SetPath(wxT("/"));
+ ContinueAcc = cfgfile->GetNextGroup(AccountName, itemindex);
+
+ }
+
+ AccountDirFull.Append(AccountDir);
+ AccountDirFull.Append(wxT("."));
+
+ /*if (AccountType == wxT("CalDAV")){
+
+ AccountDirFull.Append(wxT("local"));
+
+ } else */
+
+ if (AccountType == wxT("Local")){
+
+ AccountDirFull.Append(wxT("Local"));
+
+ }/*else {
+
+ AccountDirFull.Append(AccountType.Lower());
+
+ }*/
+
+ lstAccounts->DeleteItem(lstAccountsIndex);
+
+ // Delete the directory that contains the account information.
+
+ if (!AccountDirFull.IsEmpty()){
+
+ AccountDirDelFull.Append(wxString::FromUTF8(getenv("HOME")));
+ AccountDirDelFull.Append(wxT("/.xestiacal/accounts/"));
+ AccountDirDelFull.Append(AccountDirFull);
+
+ wxRmDir(AccountDirDelFull);
+
+ }
+
+ // Delete the account from the configuration file.
+
+ cfgfile->SetPath(wxT("/"));
+ cfgfile->DeleteGroup(AccountName);
+ cfgfile->Flush();
+
+ // Set flag for reloading accounts on window closure.
+
+ *ReloadAccountConfig = TRUE;
+
+ }
+
+ btnAccountModify->Enable(FALSE);
+ btnAccountDelete->Enable(FALSE);
+
}
void frmPreferences::SavePreferences( wxCommandEvent& event )
{
-// TODO: Implement SavePreferences
+
+ // Load up the preferences file.
+
+ wxString SetFilename = GetSettingsFile();
+
+ wxFileConfig *cfgfile = new wxFileConfig("", "", SetFilename);
+
+ // Update the settings file.
+
+ cfgfile->DeleteEntry(wxT("SaveWindowPosition"));
+ cfgfile->DeleteEntry(wxT("WindowPositionX"));
+ cfgfile->DeleteEntry(wxT("WindowPositionY"));
+ cfgfile->DeleteEntry(wxT("WindowPositionHeight"));
+ cfgfile->DeleteEntry(wxT("WindowPositionWidth"));
+
+ if (chkSaveWindowPosition->GetValue() == TRUE){
+
+ cfgfile->Write(wxT("SaveWindowPosition"), wxT("true"));
+
+ // Get parent window details.
+
+ frmMain *frmMainPtr = (frmMain*)this->GetParent();
+
+ // Get main window position data and save it.
+
+ wxRect frmMainPos = frmMainPtr->GetRect();
+
+ cfgfile->Write(wxT("WindowPositionX"), frmMainPos.GetX());
+ cfgfile->Write(wxT("WindowPositionY"), frmMainPos.GetY());
+ cfgfile->Write(wxT("WindowPositionHeight"), frmMainPos.GetHeight());
+ cfgfile->Write(wxT("WindowPositionWidth"), frmMainPos.GetWidth());
+
+ } else {
+
+ cfgfile->Write(wxT("SaveWindowPosition"), wxT("false"));
+
+ }
+
+ cfgfile->DeleteEntry(wxT("HideLocalCalendars"));
+
+ if (chkHideLocal->GetValue() == TRUE){
+
+ cfgfile->Write(wxT("HideLocalCalendars"), wxT("true"));
+ *ReloadAccountConfig = TRUE;
+
+ } else {
+
+ cfgfile->Write(wxT("HideLocalCalendars"), wxT("false"));
+ *ReloadAccountConfig = TRUE;
+
+ }
+
+ delete cfgfile;
+ cfgfile = NULL;
+
+ this->Close();
+
}
void frmPreferences::CloseWindow( wxCommandEvent& event )
{
-// TODO: Implement CloseWindow
+
+ // Close the preferences window.
+
+ this->Close();
+
}
+
+void frmPreferences::SetupPointers(bool *ReloadAccountInc){
+
+ // Setup the pointers for the preferences form.
+
+ ReloadAccountConfig = ReloadAccountInc;
+
+}
\ No newline at end of file
Subclass of frmPreferencesADT, which is generated by wxFormBuilder.
*/
+#include <wx/wx.h>
+#include <wx/mstream.h>
+#include <wx/dialog.h>
+#include <wx/msgdlg.h>
+#include <wx/fileconf.h>
+
#include "../../AppXestiaCalendar.h"
+#include "../../bitmaps.h"
+#include "../main/frmMain.h"
+#include "../editaccount/frmEditAccount.h"
+
+#include "preferences.h"
+#include "dirs.h"
//// end generated include
/** Implementing frmPreferencesADT */
class frmPreferences : public frmPreferencesADT
{
+ private:
+ void ReloadAccounts();
+ wxImageList *AccImgList = new wxImageList(16,16,true,wxIMAGE_LIST_SMALL);
+ int AccountID = 0;
+ int AccountNetID = 0;
+ int AccountUnsupportedID = 0;
+ XCALPreferences *preferences;
+ wxString preffilename;
+ bool FirstLoad = TRUE;
+ bool *ReloadAccountConfig;
protected:
// Handlers for frmPreferencesADT events.
void LoadPreferences( wxInitDialogEvent& event );
- void DisableABButtons( wxListEvent& event );
- void EnableABButtons( wxListEvent& event );
- void AddABAccount( wxCommandEvent& event );
- void ModifyABAccount( wxCommandEvent& event );
- void DeleteABAccount( wxCommandEvent& event );
+ void DisableButtons( wxListEvent& event );
+ void EnableButtons( wxListEvent& event );
+ void AddAccount( wxCommandEvent& event );
+ void ModifyAccount( wxCommandEvent& event );
+ void DeleteAccount( wxCommandEvent& event );
void SavePreferences( wxCommandEvent& event );
void CloseWindow( wxCommandEvent& event );
public:
/** Constructor */
frmPreferences( wxWindow* parent );
+ ~frmPreferences();
+ void SetupPointers( bool *ReloadAccountInc );
//// end generated class members
};