void ProcessGlobalFileTypes(const wchar_t *Name, bool AlwaysWaitFinish, bool RunAs) { string strName(Name); QuoteSpace(strName); CtrlObject->CmdLine->ExecString(strName, AlwaysWaitFinish, true, true, false, false, RunAs); if (!(Opt.ExcludeCmdHistory&EXCLUDECMDHISTORY_NOTWINASS) && !AlwaysWaitFinish) { CtrlObject->CmdHistory->AddToHistory(strName); } }
void Panel::DragMessage(int X,int Y,int Move) { const auto SelCount = SrcDragPanel->GetSelCount(); if (!SelCount) return; string strSelName; if (SelCount == 1) { os::fs::find_data Data; if (!SrcDragPanel->get_first_selected(Data)) return; assign(strSelName, PointToName(Data.FileName)); QuoteSpace(strSelName); } else { strSelName = format(msg(lng::MDragFiles), SelCount); } auto strDragMsg = format(msg(Move? lng::MDragMove : lng::MDragCopy), strSelName); auto Length = static_cast<int>(strDragMsg.size()); int MsgX = X; if (Length + X > ScrX) { MsgX=ScrX-Length; if (MsgX<0) { MsgX=0; TruncStrFromEnd(strDragMsg,ScrX); Length=(int)strDragMsg.size(); } } SCOPED_ACTION(ChangePriority)(THREAD_PRIORITY_NORMAL); // Important - the old one must be deleted before creating a new one, not after DragSaveScr.reset(); DragSaveScr = std::make_unique<SaveScreen>(MsgX, Y, MsgX + Length - 1, Y); GotoXY(MsgX,Y); SetColor(COL_PANELDRAGTEXT); Text(strDragMsg); }
int _MakePath1(DWORD Key, string &strPathName, const wchar_t *Param2,int ShortNameAsIs) { int RetCode=FALSE; int NeedRealName=FALSE; strPathName.clear(); switch (Key) { case KEY_CTRLALTBRACKET: // Вставить сетевое (UNC) путь из левой панели case KEY_RCTRLRALTBRACKET: case KEY_CTRLRALTBRACKET: case KEY_RCTRLALTBRACKET: case KEY_CTRLALTBACKBRACKET: // Вставить сетевое (UNC) путь из правой панели case KEY_RCTRLRALTBACKBRACKET: case KEY_CTRLRALTBACKBRACKET: case KEY_RCTRLALTBACKBRACKET: case KEY_ALTSHIFTBRACKET: // Вставить сетевое (UNC) путь из активной панели case KEY_RALTSHIFTBRACKET: case KEY_ALTSHIFTBACKBRACKET: // Вставить сетевое (UNC) путь из пассивной панели case KEY_RALTSHIFTBACKBRACKET: NeedRealName=TRUE; case KEY_CTRLBRACKET: // Вставить путь из левой панели case KEY_RCTRLBRACKET: case KEY_CTRLBACKBRACKET: // Вставить путь из правой панели case KEY_RCTRLBACKBRACKET: case KEY_CTRLSHIFTBRACKET: // Вставить путь из активной панели case KEY_RCTRLSHIFTBRACKET: case KEY_CTRLSHIFTBACKBRACKET: // Вставить путь из пассивной панели case KEY_RCTRLSHIFTBACKBRACKET: case KEY_CTRLSHIFTNUMENTER: // Текущий файл с пасс.панели case KEY_RCTRLSHIFTNUMENTER: case KEY_SHIFTNUMENTER: // Текущий файл с актив.панели case KEY_CTRLSHIFTENTER: // Текущий файл с пасс.панели case KEY_RCTRLSHIFTENTER: case KEY_SHIFTENTER: // Текущий файл с актив.панели { Panel *SrcPanel=nullptr; FilePanels *Cp=Global->CtrlObject->Cp(); switch (Key) { case KEY_CTRLALTBRACKET: case KEY_RCTRLRALTBRACKET: case KEY_CTRLRALTBRACKET: case KEY_RCTRLALTBRACKET: case KEY_CTRLBRACKET: case KEY_RCTRLBRACKET: SrcPanel=Cp->LeftPanel; break; case KEY_CTRLALTBACKBRACKET: case KEY_RCTRLRALTBACKBRACKET: case KEY_CTRLRALTBACKBRACKET: case KEY_RCTRLALTBACKBRACKET: case KEY_CTRLBACKBRACKET: case KEY_RCTRLBACKBRACKET: SrcPanel=Cp->RightPanel; break; case KEY_SHIFTNUMENTER: case KEY_SHIFTENTER: case KEY_ALTSHIFTBRACKET: case KEY_RALTSHIFTBRACKET: case KEY_CTRLSHIFTBRACKET: case KEY_RCTRLSHIFTBRACKET: SrcPanel=Cp->ActivePanel(); break; case KEY_CTRLSHIFTNUMENTER: case KEY_RCTRLSHIFTNUMENTER: case KEY_CTRLSHIFTENTER: case KEY_RCTRLSHIFTENTER: case KEY_ALTSHIFTBACKBRACKET: case KEY_RALTSHIFTBACKBRACKET: case KEY_CTRLSHIFTBACKBRACKET: case KEY_RCTRLSHIFTBACKBRACKET: SrcPanel=Cp->PassivePanel(); break; } if (SrcPanel) { if (Key == KEY_SHIFTENTER || Key == KEY_CTRLSHIFTENTER || Key == KEY_RCTRLSHIFTENTER || Key == KEY_SHIFTNUMENTER || Key == KEY_CTRLSHIFTNUMENTER || Key == KEY_RCTRLSHIFTNUMENTER) { string strShortFileName; SrcPanel->GetCurName(strPathName,strShortFileName); if (SrcPanel->GetShowShortNamesMode()) // учтем короткость имен :-) strPathName = strShortFileName; } else { if (!(SrcPanel->GetType()==FILE_PANEL || SrcPanel->GetType()==TREE_PANEL)) return FALSE; strPathName = SrcPanel->GetCurDir(); if (SrcPanel->GetMode()!=PLUGIN_PANEL) { if (NeedRealName) SrcPanel->CreateFullPathName(strPathName, strPathName, FILE_ATTRIBUTE_DIRECTORY, strPathName, TRUE, ShortNameAsIs); if (SrcPanel->GetShowShortNamesMode() && ShortNameAsIs) ConvertNameToShort(strPathName,strPathName); } else { FileList *SrcFilePanel=(FileList *)SrcPanel; OpenPanelInfo Info; Global->CtrlObject->Plugins->GetOpenPanelInfo(SrcFilePanel->GetPluginHandle(),&Info); FileList::AddPluginPrefix(SrcFilePanel,strPathName); if (Info.HostFile && *Info.HostFile) { strPathName += Info.HostFile; strPathName += L"/"; } strPathName += NullToEmpty(Info.CurDir); } AddEndSlash(strPathName); } if (Global->Opt->QuotedName"EDNAME_INSERT) QuoteSpace(strPathName); if (Param2) strPathName += Param2; RetCode=TRUE; } } break; } return RetCode; }
void EnumFiles(VMenu2& Menu, const string& Str) { if(!Str.empty()) { string strStr(Str); size_t Pos = 0; if(std::count(ALL_CONST_RANGE(strStr), L'"') & 1) // odd quotes count { Pos = strStr.rfind(L'"'); } else { for(Pos=strStr.size()-1; Pos!=static_cast<size_t>(-1); Pos--) { if(strStr[Pos]==L'"') { Pos--; while(strStr[Pos]!=L'"' && Pos!=static_cast<size_t>(-1)) { Pos--; } } else if(strStr[Pos]==L' ') { Pos++; break; } } } if(Pos==static_cast<size_t>(-1)) { Pos=0; } bool StartQuote=false; if(Pos < strStr.size() && strStr[Pos]==L'"') { Pos++; StartQuote=true; } string strStart(strStr.data(),Pos); Unquote(strStr.erase(0, Pos)); if(!strStr.empty()) { string strExp = os::env::expand_strings(strStr); os::fs::enum_file Find(strExp+L"*"); bool Separator=false; std::for_each(CONST_RANGE(Find, i) { const wchar_t* FileName=PointToName(strStr); bool NameMatch=!StrCmpNI(FileName, i.strFileName.data(), StrLength(FileName)), AltNameMatch = NameMatch? false : !StrCmpNI(FileName, i.strAlternateFileName.data(), StrLength(FileName)); if(NameMatch || AltNameMatch) { strStr.resize(FileName-strStr.data()); string strAdd (strStr + (NameMatch ? i.strFileName : i.strAlternateFileName)); if (!StartQuote) QuoteSpace(strAdd); string strTmp(strStart+strAdd); if(StartQuote) strTmp += L'"'; if(!Separator) { if(Menu.GetItemCount()) { MenuItemEx Item; Item.strName = MSG(MCompletionFilesTitle); Item.Flags=LIF_SEPARATOR; Menu.AddItem(Item); } else { Menu.SetTitle(MSG(MCompletionFilesTitle)); } Separator=true; } Menu.AddItem(strTmp); } });