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; } } }