HANDLE WINAPI OpenW(const OpenInfo* openInfo) { static const FarMenu::Item infoMenuItems[] = { FarMenu::Item(FarMenu::Command(&displayGenericInformation), MMenuInformationGeneral), FarMenu::Item(FarMenu::Command(&displayWorkspaceInformation), MMenuInformationWorkspace), FarMenu::Item(FarMenu::Command(&displayAboutInformation), MMenuInformationAbout) }; static const FarMenu infoMenu = FarMenu(MenuInfoGuid, makeMenuItems(infoMenuItems)); static const FarMenu::Item fileMenuItems[] = { FarMenu::Item(FarMenu::Command(std::bind(&p4_fileCommand, &PerforceClient::editFiles, std::placeholders::_1)), MMenuFileEdit), FarMenu::Item(FarMenu::Command(std::bind(&p4_fileCommand, &PerforceClient::addFiles, std::placeholders::_1)), MMenuFileAdd), FarMenu::Item(FarMenu::Command(std::bind(&p4_fileCommand, &PerforceClient::deleteFiles, std::placeholders::_1)), MMenuFileDelete), FarMenu::Item(FarMenu::Command(std::bind(&p4_fileCommand, &PerforceClient::revertFiles, std::placeholders::_1)), MMenuFileRevert), FarMenu::Item(FarMenu::Command(std::bind(&p4_fileCommand, &PerforceClient::syncFiles, std::placeholders::_1)), MMenuFileSync) }; static const FarMenu fileMenu = FarMenu(MenuFileGuid, makeMenuItems(fileMenuItems)); static const FarMenu::Item loginItems[] = {FarMenu::Item(FarMenu::Command(&addLoginRow), MLoginDummyItem)}; static const FarMenu::Break loginBreaks[] = {makeBreakItem(VK_INSERT, 0, &addLoginRow), makeBreakItem(VK_DELETE, 0, &deleteLoginRow)}; static const FarMenu loginMenu = FarMenu(MenuLoginGuid, makeMenuItems(loginItems), nullptr, FMENU_AUTOHIGHLIGHT|FMENU_WRAPMODE, MLoginTitle, MLoginBottom, makeBreakKeys(loginBreaks)); static const FarMenu::Item mainMenuItems[] = { FarMenu::Item(loginMenu, MMenuLogin), FarMenu::Item(infoMenu, MMenuMessageInfo), FarMenu::Item(fileMenu, MMenuFileOperations), FarMenu::Item(FarMenu::Command(&callP4V), MMenuCallPerforceGui), FarMenu::Item(FarMenu::Command(&displaySettings), MMenuSettings) }; static const FarMenu menu = FarMenu(MenuGuid, makeMenuItems(mainMenuItems), nullptr, FMENU_AUTOHIGHLIGHT, MTitle); intptr_t result = menu.run(); return nullptr; }
void FarPlugin::OpenPlugin(const struct OpenInfo *OInfo) { int command = -1; if (OInfo->OpenFrom == OPEN_FROMMACRO) { OpenMacroInfo *macroInfo = (OpenMacroInfo*)OInfo->Data; if (macroInfo->Count >= 1) { FarMacroValue &v = macroInfo->Values[0]; if (v.Type == FMVT_DOUBLE) { command = v.Double; }; }; } if (command == -1) { FarMenu menu; menu.SetFlags(FMENU_WRAPMODE); menu.SetTitle(LOC("PluginName")); menu.SetHelpTopic("Menu"); menu.AddLine(LOC("Menu.CopyFiles")); menu.AddLine(LOC("Menu.MoveFiles")); menu.AddLine(LOC("Menu.CopyFilesUnderCursor")); menu.AddLine(LOC("Menu.MoveFilesUnderCursor")); menu.AddSep(); menu.AddLine(LOC("Menu.Config")); command = menu.Execute(); } int move=0, curOnly=0; switch (command) { case 0: move = 0; curOnly = 0; break; case 1: move = 1; curOnly = 0; break; case 2: move = 0; curOnly = 1; break; case 3: move = 1; curOnly = 1; break; case 5: Config(); return; default: return; } CallCopy(move, curOnly); }
void FarPlugin::OpenPlugin(const struct OpenInfo * OInfo) { intptr_t command = -1; if (OInfo->OpenFrom == OPEN_FROMMACRO) { OpenMacroInfo * macroInfo = reinterpret_cast<OpenMacroInfo *>(OInfo->Data); if (macroInfo->Count >= 1) { FarMacroValue & v = macroInfo->Values[0]; if (v.Type == FMVT_DOUBLE) { command = static_cast<intptr_t>(v.Double); } } } if (command == -1) { bool repeat = true; size_t selectedMenuItem = 0; while (repeat) { FarMenu menu; menu.SetFlags(FMENU_WRAPMODE); menu.SetTitle(LOC(L"PluginName")); menu.SetHelpTopic(L"Menu"); menu.AddLine(LOC(L"Menu.CopyFiles")); menu.AddLine(LOC(L"Menu.MoveFiles")); menu.AddLine(LOC(L"Menu.CopyFilesUnderCursor")); menu.AddLine(LOC(L"Menu.MoveFilesUnderCursor")); menu.AddSep(); menu.AddLine(LOC(L"Menu.Config")); menu.SetSelection(selectedMenuItem); command = menu.Execute(); bool move, curOnly; bool copy = true; switch (command) { case 0: move = false; curOnly = false; selectedMenuItem = 0; repeat = false; break; case 1: move = true; curOnly = false; selectedMenuItem = 1; repeat = false; break; case 2: move = false; curOnly = true; selectedMenuItem = 2; repeat = false; break; case 3: move = true; curOnly = true; selectedMenuItem = 3; repeat = false; break; case 5: Config(); copy = false; selectedMenuItem = 5; repeat = true; break; default: return; } if (copy) { if (!CallCopy(move, curOnly)) repeat = true; } } } else { switch (command) { case 0: CallCopy(false, false); break; case 1: CallCopy(true, false); break; case 2: CallCopy(false, true); break; case 3: CallCopy(true, true); break; default: break; } } }