|
|
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 "FavoriteVolumesDialog.h" ! 12: ! 13: namespace TrueCrypt ! 14: { ! 15: FavoriteVolumesDialog::FavoriteVolumesDialog (wxWindow* parent, const FavoriteVolumeList &favorites, size_t newItemCount) ! 16: : FavoriteVolumesDialogBase (parent), Favorites (favorites) ! 17: { ! 18: list <int> colPermilles; ! 19: FavoritesListCtrl->InsertColumn (ColumnVolumePath, LangString["VOLUME"], wxLIST_FORMAT_LEFT, 1); ! 20: colPermilles.push_back (500); ! 21: FavoritesListCtrl->InsertColumn (ColumnMountPoint, LangString["MOUNT_POINT"], wxLIST_FORMAT_LEFT, 1); ! 22: colPermilles.push_back (500); ! 23: ! 24: FavoritesListCtrl->SetMinSize (wxSize (400, -1)); ! 25: Gui->SetListCtrlHeight (FavoritesListCtrl, 15); ! 26: Gui->SetListCtrlColumnWidths (FavoritesListCtrl, colPermilles); ! 27: ! 28: Layout(); ! 29: Fit(); ! 30: Center(); ! 31: ! 32: #ifdef TC_MACOSX ! 33: // wxMac cannot insert items to wxListCtrl due to a bug ! 34: MoveUpButton->Show (false); ! 35: MoveDownButton->Show (false); ! 36: #endif ! 37: ! 38: vector <wstring> fields (FavoritesListCtrl->GetColumnCount()); ! 39: size_t itemCount = 0; ! 40: foreach (shared_ptr <FavoriteVolume> favorite, Favorites) ! 41: { ! 42: fields[ColumnVolumePath] = favorite->Path; ! 43: fields[ColumnMountPoint] = favorite->MountPoint; ! 44: Gui->AppendToListCtrl (FavoritesListCtrl, fields, -1, favorite.get()); ! 45: ! 46: if (++itemCount > Favorites.size() - newItemCount) ! 47: { ! 48: FavoritesListCtrl->SetItemState (itemCount - 1, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); ! 49: FavoritesListCtrl->EnsureVisible (itemCount - 1); ! 50: } ! 51: } ! 52: ! 53: UpdateButtons(); ! 54: FavoritesListCtrl->SetFocus(); ! 55: } ! 56: ! 57: void FavoriteVolumesDialog::OnMoveDownButtonClick (wxCommandEvent& event) ! 58: { ! 59: FreezeScope freeze (this); ! 60: foreach_reverse (long itemIndex, Gui->GetListCtrlSelectedItems (FavoritesListCtrl)) ! 61: { ! 62: if (itemIndex >= FavoritesListCtrl->GetItemCount() - 1) ! 63: break; ! 64: Gui->MoveListCtrlItem (FavoritesListCtrl, itemIndex, itemIndex + 1); ! 65: } ! 66: UpdateButtons(); ! 67: } ! 68: ! 69: void FavoriteVolumesDialog::OnMoveUpButtonClick (wxCommandEvent& event) ! 70: { ! 71: FreezeScope freeze (this); ! 72: foreach (long itemIndex, Gui->GetListCtrlSelectedItems (FavoritesListCtrl)) ! 73: { ! 74: if (itemIndex == 0) ! 75: break; ! 76: ! 77: Gui->MoveListCtrlItem (FavoritesListCtrl, itemIndex, itemIndex - 1); ! 78: } ! 79: UpdateButtons(); ! 80: } ! 81: ! 82: void FavoriteVolumesDialog::OnOKButtonClick (wxCommandEvent& event) ! 83: { ! 84: FavoriteVolumeList newFavorites; ! 85: ! 86: for (long i = 0; i < FavoritesListCtrl->GetItemCount(); i++) ! 87: { ! 88: newFavorites.push_back (make_shared <FavoriteVolume> ( ! 89: *reinterpret_cast <FavoriteVolume *> (FavoritesListCtrl->GetItemData (i)))); ! 90: } ! 91: ! 92: Favorites = newFavorites; ! 93: EndModal (wxID_OK); ! 94: } ! 95: ! 96: void FavoriteVolumesDialog::OnRemoveAllButtonClick (wxCommandEvent& event) ! 97: { ! 98: FavoritesListCtrl->DeleteAllItems(); ! 99: UpdateButtons(); ! 100: } ! 101: ! 102: void FavoriteVolumesDialog::OnRemoveButtonClick (wxCommandEvent& event) ! 103: { ! 104: long offset = 0; ! 105: foreach (long item, Gui->GetListCtrlSelectedItems (FavoritesListCtrl)) ! 106: FavoritesListCtrl->DeleteItem (item - offset++); ! 107: } ! 108: ! 109: void FavoriteVolumesDialog::UpdateButtons () ! 110: { ! 111: bool selected = FavoritesListCtrl->GetSelectedItemCount() > 0; ! 112: ! 113: MoveDownButton->Enable (selected); ! 114: MoveUpButton->Enable (selected); ! 115: RemoveAllButton->Enable (FavoritesListCtrl->GetItemCount() > 0); ! 116: RemoveButton->Enable (selected); ! 117: } ! 118: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.