From 7ffce028d04a6b13ef762e2b89c34b688e8ca59d Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sat, 31 May 2014 18:44:53 +0200 Subject: Add TrueCrypt 7.1a MacOSX/Linux specific source files. --- src/Main/VolumeHistory.cpp | 152 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 src/Main/VolumeHistory.cpp (limited to 'src/Main/VolumeHistory.cpp') diff --git a/src/Main/VolumeHistory.cpp b/src/Main/VolumeHistory.cpp new file mode 100644 index 00000000..5bdac903 --- /dev/null +++ b/src/Main/VolumeHistory.cpp @@ -0,0 +1,152 @@ +/* + Copyright (c) 2008 TrueCrypt Developers Association. All rights reserved. + + Governed by the TrueCrypt License 3.0 the full text of which is contained in + the file License.txt included in TrueCrypt binary and source code distribution + packages. +*/ + +#include "System.h" +#include "Application.h" +#include "GraphicUserInterface.h" +#include "Xml.h" +#include "VolumeHistory.h" + +namespace TrueCrypt +{ + VolumeHistory::VolumeHistory () + { + } + + VolumeHistory::~VolumeHistory () + { + } + + void VolumeHistory::Add (const VolumePath &newPath) + { + if (Gui->GetPreferences().SaveHistory) + { + ScopeLock lock (AccessMutex); + + VolumePathList::iterator iter = VolumePaths.begin(); + foreach (const VolumePath &path, VolumePaths) + { + if (newPath == path) + { + VolumePaths.erase (iter); + break; + } + iter++; + } + + VolumePaths.push_front (newPath); + if (VolumePaths.size() > MaxSize) + VolumePaths.pop_back(); + + foreach (wxComboBox *comboBox, ConnectedComboBoxes) + { + UpdateComboBox (comboBox); + } + } + } + + void VolumeHistory::Clear () + { + VolumePaths.clear(); + foreach (wxComboBox *comboBox, ConnectedComboBoxes) + { + UpdateComboBox (comboBox); + } + + Save(); + } + + void VolumeHistory::ConnectComboBox (wxComboBox *comboBox) + { + ScopeLock lock (AccessMutex); + ConnectedComboBoxes.push_back (comboBox); + + UpdateComboBox (comboBox); + } + + void VolumeHistory::DisconnectComboBox (wxComboBox *comboBox) + { + ScopeLock lock (AccessMutex); + + for (list::iterator iter = ConnectedComboBoxes.begin(); iter != ConnectedComboBoxes.end(); ++iter) + { + if (comboBox == *iter) + { + ConnectedComboBoxes.erase (iter); + break; + } + } + } + + void VolumeHistory::Load () + { + ScopeLock lock (AccessMutex); + FilePath historyCfgPath = Application::GetConfigFilePath (GetFileName()); + + if (historyCfgPath.IsFile()) + { + if (!Gui->GetPreferences().SaveHistory) + { + historyCfgPath.Delete(); + } + else + { + foreach_reverse (const XmlNode &node, XmlParser (historyCfgPath).GetNodes (L"volume")) + { + Add (wstring (node.InnerText)); + } + } + } + } + + void VolumeHistory::Save () + { + ScopeLock lock (AccessMutex); + FilePath historyCfgPath = Application::GetConfigFilePath (GetFileName(), true); + + if (!Gui->GetPreferences().SaveHistory || VolumePaths.empty()) + { + if (historyCfgPath.IsFile()) + historyCfgPath.Delete(); + } + else + { + XmlNode historyXml (L"history"); + + foreach (const VolumePath &path, VolumePaths) + { + historyXml.InnerNodes.push_back (XmlNode (L"volume", wstring (path))); + } + + XmlWriter historyWriter (historyCfgPath); + historyWriter.WriteNode (historyXml); + historyWriter.Close(); + } + } + + void VolumeHistory::UpdateComboBox (wxComboBox *comboBox) + { + wxString curValue = comboBox->GetValue(); + + comboBox->Freeze(); + comboBox->Clear(); + + foreach (const VolumePath &path, VolumePaths) + { + comboBox->Append (wstring (path)); + } + + comboBox->SetValue (curValue); + comboBox->Thaw(); + } + + list VolumeHistory::ConnectedComboBoxes; + VolumePathList VolumeHistory::VolumePaths; + Mutex VolumeHistory::AccessMutex; + +} -- cgit v1.2.3