diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2014-05-31 18:44:53 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2014-11-08 23:18:59 +0100 |
commit | 7ffce028d04a6b13ef762e2b89c34b688e8ca59d (patch) | |
tree | eefedb6e94de5b26fa963675969490c641c29077 /src/Main/VolumeHistory.cpp | |
parent | 97011f179cfd3dcd12446ef4ccb6964c8e52c3db (diff) | |
download | VeraCrypt-7ffce028d04a6b13ef762e2b89c34b688e8ca59d.tar.gz VeraCrypt-7ffce028d04a6b13ef762e2b89c34b688e8ca59d.zip |
Add TrueCrypt 7.1a MacOSX/Linux specific source files.
Diffstat (limited to 'src/Main/VolumeHistory.cpp')
-rw-r--r-- | src/Main/VolumeHistory.cpp | 152 |
1 files changed, 152 insertions, 0 deletions
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<wxComboBox *>::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 <wxComboBox *> VolumeHistory::ConnectedComboBoxes; + VolumePathList VolumeHistory::VolumePaths; + Mutex VolumeHistory::AccessMutex; + +} |