void FileExplorerTab::OnContextMenu(wxTreeEvent& event) { wxTreeItemId item = event.GetItem(); wxMenu* menu = GetBaseContextMenu(); if(item.IsOk() && menu) { wxArrayString folders, files; GetSelections(folders, files); if(!files.IsEmpty() && folders.IsEmpty()) { // Let the plugins alter it clContextMenuEvent fileMenuEvent(wxEVT_CONTEXT_MENU_FILE); fileMenuEvent.SetMenu(menu); fileMenuEvent.SetStrings(files); EventNotifier::Get()->ProcessEvent(fileMenuEvent); } else if(folders.GetCount() == 1) { clContextMenuEvent folderMenuEvent(wxEVT_CONTEXT_MENU_FOLDER); folderMenuEvent.SetMenu(menu); folderMenuEvent.SetPath(folders.Item(0)); EventNotifier::Get()->ProcessEvent(folderMenuEvent); } PluginManager::Get()->HookPopupMenu(menu, MenuTypeFileExplorer); PopupMenu(menu); } wxDELETE(menu); }
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); } }