|
|
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.