void clTreeCtrlPanel::OnCloseFolder(wxCommandEvent& event) { wxTreeItemId item = GetTreeCtrl()->GetFocusedItem(); CHECK_ITEM_RET(item); if(!IsTopLevelFolder(item)) return; GetTreeCtrl()->Delete(item); }
wxTreeItemId clTreeCtrlPanel::DoAddFolder(const wxTreeItemId& parent, const wxString& path) { // If we already have this folder opened, dont re-add it wxArrayString topFolders; wxArrayTreeItemIds topFoldersItems; GetTopLevelFolders(topFolders, topFoldersItems); int where = topFolders.Index(path); if(where != wxNOT_FOUND) { return topFoldersItems.Item(where); } // Add the folder clTreeCtrlData* cd = new clTreeCtrlData(clTreeCtrlData::kFolder); cd->SetPath(path); wxFileName filename(path, ""); wxString displayName; if(filename.GetDirCount() && GetTreeCtrl()->GetRootItem() != parent) { displayName << filename.GetDirs().Last(); } else { displayName << path; } int imgIdx = m_bmpLoader.GetMimeImageId(FileExtManager::TypeFolder); wxTreeItemId itemFolder = GetTreeCtrl()->AppendItem(parent, displayName, imgIdx, imgIdx, cd); // Add this entry to the index clTreeCtrlData* parentData = GetItemData(parent); if(parentData->GetIndex()) { parentData->GetIndex()->Add(displayName, itemFolder); } // Append the dummy item GetTreeCtrl()->AppendItem(itemFolder, "Dummy", -1, -1, new clTreeCtrlData(clTreeCtrlData::kDummy)); // Pin this folder if(GetConfig() && IsTopLevelFolder(itemFolder)) { wxArrayString pinnedFolders; pinnedFolders = GetConfig()->Read("ExplorerFolders", pinnedFolders); int where = pinnedFolders.Index(cd->GetPath()); if(where == wxNOT_FOUND) { pinnedFolders.Add(cd->GetPath()); } GetConfig()->Write("ExplorerFolders", pinnedFolders); } return itemFolder; }
void clTreeCtrlPanel::DoCloseFolder(const wxTreeItemId& item) { CHECK_ITEM_RET(item); if(!IsTopLevelFolder(item)) return; if(GetConfig()) { // If this folder is a pinned one, remove it wxArrayString pinnedFolders; pinnedFolders = GetConfig()->Read("ExplorerFolders", pinnedFolders); clTreeCtrlData* d = GetItemData(item); int where = pinnedFolders.Index(d->GetPath()); if(where != wxNOT_FOUND) { pinnedFolders.RemoveAt(where); } GetConfig()->Write("ExplorerFolders", pinnedFolders); } // Now, delete the item GetTreeCtrl()->Delete(item); ToggleView(); }
void clTreeCtrlPanel::OnContextMenu(wxTreeEvent& event) { wxTreeItemId item = GetTreeCtrl()->GetFocusedItem(); clTreeCtrlData* cd = GetItemData(item); if(cd && cd->IsFolder()) { // Prepare a folder context menu wxMenu menu; if(IsTopLevelFolder(item)) { menu.Append(XRCID("tree_ctrl_close_folder"), _("Close")); menu.AppendSeparator(); menu.Append(wxID_REFRESH, _("Refresh")); menu.AppendSeparator(); } menu.Append(XRCID("tree_ctrl_new_folder"), _("New Folder")); menu.Append(XRCID("tree_ctrl_new_file"), _("New File")); if(!IsTopLevelFolder(item)) { menu.AppendSeparator(); menu.Append(XRCID("tree_ctrl_delete_folder"), _("Delete")); } menu.AppendSeparator(); menu.Append(XRCID("tree_ctrl_find_in_files_folder"), _("Find in Files")); menu.AppendSeparator(); menu.Append(XRCID("tree_ctrl_open_containig_folder"), _("Open Containing Folder")); menu.Append(XRCID("tree_ctrl_open_shell_folder"), _("Open Shell")); // Now that we added the basic menu, let the plugin // adjust it wxArrayString files, folders; GetSelections(folders, files); clContextMenuEvent dirMenuEvent(wxEVT_CONTEXT_MENU_FOLDER); dirMenuEvent.SetEventObject(this); dirMenuEvent.SetMenu(&menu); dirMenuEvent.SetPath(cd->GetPath()); EventNotifier::Get()->ProcessEvent(dirMenuEvent); // Connect events menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnCloseFolder, this, XRCID("tree_ctrl_close_folder")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnNewFolder, this, XRCID("tree_ctrl_new_folder")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnNewFile, this, XRCID("tree_ctrl_new_file")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnDeleteSelections, this, XRCID("tree_ctrl_delete_folder")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnFindInFilesFolder, this, XRCID("tree_ctrl_find_in_files_folder")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnOpenContainingFolder, this, XRCID("tree_ctrl_open_containig_folder")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnOpenShellFolder, this, XRCID("tree_ctrl_open_shell_folder")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnRefresh, this, wxID_REFRESH); PopupMenu(&menu); } else if(cd && cd->IsFile()) { // File context menu // Prepare a folder context menu wxMenu menu; menu.Append(XRCID("tree_ctrl_open_file"), _("Open")); menu.Append(XRCID("tree_ctrl_rename_file"), _("Rename")); menu.AppendSeparator(); menu.Append(XRCID("tree_ctrl_delete_file"), _("Delete")); // Now that we added the basic menu, let the plugin // adjust it wxArrayString files, folders; GetSelections(folders, files); clContextMenuEvent fileMenuEvent(wxEVT_CONTEXT_MENU_FILE); fileMenuEvent.SetEventObject(this); fileMenuEvent.SetMenu(&menu); fileMenuEvent.SetStrings(files); EventNotifier::Get()->ProcessEvent(fileMenuEvent); // Connect events menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnOpenFile, this, XRCID("tree_ctrl_open_file")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnRenameFile, this, XRCID("tree_ctrl_rename_file")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnDeleteSelections, this, XRCID("tree_ctrl_delete_file")); PopupMenu(&menu); } else { // context menu elsewhere wxMenu menu; menu.Append(XRCID("open_folder_default_page"), _("Open Folder...")); menu.Bind(wxEVT_MENU, &clTreeCtrlPanel::OnOpenFolder, this, XRCID("open_folder_default_page")); PopupMenu(&menu); } }