|
|
1.1 root 1: /*
2: Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
3:
4: Governed by the TrueCrypt License 2.4 the full text of which is contained
5: in the file License.txt included in TrueCrypt binary and source code
6: distribution packages.
7: */
8:
9: #include "System.h"
10: #include "Main/GraphicUserInterface.h"
11: #include "KeyfilesPanel.h"
12:
13: namespace TrueCrypt
14: {
15: KeyfilesPanel::KeyfilesPanel (wxWindow* parent, shared_ptr <KeyfileList> keyfiles)
16: : KeyfilesPanelBase (parent)
17: {
18: KeyfilesListCtrl->InsertColumn (0, LangString["KEYFILE"], wxLIST_FORMAT_LEFT, 1);
19: Gui->SetListCtrlHeight (KeyfilesListCtrl, 11);
20:
21: Layout();
22: Fit();
23:
24: if (keyfiles)
25: {
26: foreach_ref (const Keyfile &k, *keyfiles)
27: {
28: vector <wstring> fields;
29: fields.push_back (FilesystemPath (k));
30: Gui->AppendToListCtrl (KeyfilesListCtrl, fields);
31: }
32: }
33:
34: class FileDropTarget : public wxFileDropTarget
35: {
36: public:
37: FileDropTarget (KeyfilesPanel *panel) : Panel (panel) { }
38:
39: wxDragResult OnDragOver (wxCoord x, wxCoord y, wxDragResult def)
40: {
41: return wxDragLink;
42: }
43:
44: bool OnDropFiles (wxCoord x, wxCoord y, const wxArrayString &filenames)
45: {
46: foreach (const wxString &f, filenames)
47: Panel->AddKeyfile (make_shared <Keyfile> (wstring (f)));
48: return true;
49: }
50:
51: protected:
52: KeyfilesPanel *Panel;
53: };
54:
55: SetDropTarget (new FileDropTarget (this));
56: KeyfilesListCtrl->SetDropTarget (new FileDropTarget (this));
57: #ifdef TC_MACOSX
58: foreach (wxWindow *c, GetChildren())
59: c->SetDropTarget (new FileDropTarget (this));
60: #endif
61:
62: UpdateButtons();
63: }
64:
65: void KeyfilesPanel::AddKeyfile (shared_ptr <Keyfile> keyfile)
66: {
67: vector <wstring> fields;
68: fields.push_back (FilesystemPath (*keyfile));
69: Gui->AppendToListCtrl (KeyfilesListCtrl, fields);
70: UpdateButtons();
71: }
72:
73: shared_ptr <KeyfileList> KeyfilesPanel::GetKeyfiles () const
74: {
75: make_shared_auto (KeyfileList, keyfiles);
76:
77: for (long i = 0; i < KeyfilesListCtrl->GetItemCount(); i++)
78: keyfiles->push_back (make_shared <Keyfile> (wstring (KeyfilesListCtrl->GetItemText (i))));
79:
80: return keyfiles;
81: }
82:
83: void KeyfilesPanel::OnAddDirectoryButtonClick (wxCommandEvent& event)
84: {
85: DirectoryPath dir = Gui->SelectDirectory (this, LangString["SELECT_KEYFILE_PATH"]);
86: if (!dir.IsEmpty())
87: {
88: vector <wstring> fields;
89: fields.push_back (dir);
90: Gui->AppendToListCtrl (KeyfilesListCtrl, fields);
91: UpdateButtons();
92: }
93: }
94:
95: void KeyfilesPanel::OnAddFilesButtonClick (wxCommandEvent& event)
96: {
97: FilePathList files = Gui->SelectFiles (this, LangString["SELECT_KEYFILES"], false, true);
98:
99: foreach_ref (const FilePath &f, files)
100: {
101: vector <wstring> fields;
102: fields.push_back (f);
103: Gui->AppendToListCtrl (KeyfilesListCtrl, fields);
104: }
105: UpdateButtons();
106: }
107:
108: void KeyfilesPanel::OnCreateKeyfileButttonClick (wxCommandEvent& event)
109: {
110: }
111:
112: void KeyfilesPanel::OnListSizeChanged (wxSizeEvent& event)
113: {
114: list <int> colPermilles;
115: colPermilles.push_back (1000);
116: Gui->SetListCtrlColumnWidths (KeyfilesListCtrl, colPermilles);
117: event.Skip();
118: }
119:
120: void KeyfilesPanel::OnRemoveAllButtonClick (wxCommandEvent& event)
121: {
122: KeyfilesListCtrl->DeleteAllItems();
123: UpdateButtons();
124: }
125:
126: void KeyfilesPanel::OnRemoveButtonClick (wxCommandEvent& event)
127: {
128: long offset = 0;
129: foreach (long item, Gui->GetListCtrlSelectedItems (KeyfilesListCtrl))
130: KeyfilesListCtrl->DeleteItem (item - offset++);
131:
132: UpdateButtons();
133: }
134:
135: void KeyfilesPanel::UpdateButtons ()
136: {
137: RemoveAllButton->Enable (KeyfilesListCtrl->GetItemCount() > 0);
138: RemoveButton->Enable (KeyfilesListCtrl->GetSelectedItemCount() > 0);
139: }
140: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.