void ShellDeleteMsg(const wchar_t *Name,int Wipe,int Percent) { string strProgress; size_t Width=52; if (Percent!=-1) { size_t Length=Width-5; // -5 под проценты wchar_t *Progress=strProgress.GetBuffer(Length); if (Progress) { size_t CurPos=Min(Percent,100)*Length/100; wmemset(Progress,BoxSymbols[BS_X_DB],CurPos); wmemset(Progress+(CurPos),BoxSymbols[BS_X_B0],Length-CurPos); strProgress.ReleaseBuffer(Length); FormatString strTmp; strTmp<<L" "<<fmt::Width(3)<<Percent<<L"%"; strProgress+=strTmp; DeleteTitle->Set(L"{%d%%} %s",Percent,MSG(Wipe?MDeleteWipeTitle:MDeleteTitle)); } TBC.SetProgressValue(Percent,100); } string strOutFileName(Name); TruncPathStr(strOutFileName,static_cast<int>(Width)); CenterStr(strOutFileName,strOutFileName,static_cast<int>(Width)); Message(0,0,MSG(Wipe?MDeleteWipeTitle:MDeleteTitle),(Percent>=0||!Opt.DelOpt.DelShowTotal)?MSG(Wipe?MDeletingWiping:MDeleting):MSG(MScanningFolder),strOutFileName,strProgress.IsEmpty()?nullptr:strProgress.CPtr()); PreRedrawItem preRedrawItem=PreRedraw.Peek(); preRedrawItem.Param.Param1=static_cast<void*>(const_cast<wchar_t*>(Name)); preRedrawItem.Param.Param4=(void *)(INT_PTR)Wipe; preRedrawItem.Param.Param5=(__int64)Percent; PreRedraw.SetParam(preRedrawItem.Param); }
static void ShellDeleteMsg(const string& Name, DEL_MODE Mode, int Percent, int WipePercent, ConsoleTitle* DeleteTitle) { FormatString strProgress, strWipeProgress; size_t Width=ScrX/2; size_t Length=Width-5; // -5 под проценты if(Mode==DEL_WIPEPROCESS || Mode==DEL_WIPE) { strWipeProgress.resize(Length); size_t CurPos=std::min(WipePercent,100)*Length/100; std::fill(strWipeProgress.begin(), strWipeProgress.begin() + CurPos, BoxSymbols[BS_X_DB]); std::fill(strWipeProgress.begin() + CurPos, strWipeProgress.end(), BoxSymbols[BS_X_B0]); strWipeProgress<<L" "<<fmt::MinWidth(3)<<WipePercent<<L"%"; if(Percent==-1) { Global->TBC->SetProgressValue(WipePercent, 100); } } if (Mode!=DEL_SCAN && Percent!=-1) { strProgress.resize(Length); size_t CurPos=std::min(Percent,100)*Length/100; std::fill(strProgress.begin(), strProgress.begin() + CurPos, BoxSymbols[BS_X_DB]); std::fill(strProgress.begin() + CurPos, strProgress.end(), BoxSymbols[BS_X_B0]); strProgress<<L" "<<fmt::MinWidth(3)<<Percent<<L"%"; *DeleteTitle << L"{" << Percent << L"%} " << MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeleteWipeTitle:MDeleteTitle) << fmt::Flush(); Global->TBC->SetProgressValue(Percent,100); } string strOutFileName(Name); TruncPathStr(strOutFileName,static_cast<int>(Width)); CenterStr(strOutFileName,strOutFileName,static_cast<int>(Width)); const wchar_t* Progress1 = nullptr; const wchar_t* Progress2 = nullptr; if(!strWipeProgress.empty()) { Progress1 = strWipeProgress.data(); Progress2 = strProgress.empty()? nullptr : strProgress.data(); } else { Progress1 = strProgress.empty()? nullptr : strProgress.data(); } Message(0,0, MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeleteWipeTitle:MDeleteTitle), Mode==DEL_SCAN? MSG(MScanningFolder) : MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeletingWiping:MDeleting), strOutFileName.data(), Progress1, Progress2); if (!Global->PreRedraw->empty()) { auto item = dynamic_cast<DelPreRedrawItem*>(Global->PreRedraw->top()); item->name = Name; item->Title = DeleteTitle; item->Mode = Mode; item->Percent = Percent; item->WipePercent = WipePercent; } }
static void ShellDeleteMsg(const string& Name, DEL_MODE Mode, int Percent, int WipePercent, ConsoleTitle* DeleteTitle) { string strProgress, strWipeProgress; size_t Width=ScrX/2; if(Mode==DEL_WIPEPROCESS || Mode==DEL_WIPE) { strWipeProgress = make_progressbar(Width, WipePercent, true, Percent == -1); } if (Mode!=DEL_SCAN && Percent!=-1) { strProgress = make_progressbar(Width, Percent, true, true); *DeleteTitle << L"{" << Percent << L"%} " << MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeleteWipeTitle:MDeleteTitle) << fmt::Flush(); } string strOutFileName(Name); TruncPathStr(strOutFileName,static_cast<int>(Width)); CenterStr(strOutFileName,strOutFileName,static_cast<int>(Width)); const wchar_t* Progress1 = nullptr; const wchar_t* Progress2 = nullptr; if(!strWipeProgress.empty()) { Progress1 = strWipeProgress.data(); Progress2 = strProgress.empty()? nullptr : strProgress.data(); } else { Progress1 = strProgress.empty()? nullptr : strProgress.data(); } Message(0,0, MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeleteWipeTitle:MDeleteTitle), Mode==DEL_SCAN? MSG(MScanningFolder) : MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeletingWiping:MDeleting), strOutFileName.data(), Progress1, Progress2); if (!PreRedrawStack().empty()) { auto item = dynamic_cast<DelPreRedrawItem*>(PreRedrawStack().top()); item->name = Name; item->Title = DeleteTitle; item->Mode = Mode; item->Percent = Percent; item->WipePercent = WipePercent; } }
void FileList::ShowFileList(int Fast) { if (Locked()) { CorrectPosition(); return; } string strTitle; string strInfoCurDir; int Length; OpenPanelInfo Info; if (PanelMode==PLUGIN_PANEL) { if (ProcessPluginEvent(FE_REDRAW,nullptr)) return; CtrlObject->Plugins->GetOpenPanelInfo(hPlugin,&Info); strInfoCurDir=Info.CurDir; } bool CurFullScreen=IsFullScreen(); PrepareViewSettings(ViewMode,&Info); CorrectPosition(); if (CurFullScreen!=IsFullScreen()) { CtrlObject->Cp()->SetScreenPosition(); CtrlObject->Cp()->GetAnotherPanel(this)->Update(UPDATE_KEEP_SELECTION|UPDATE_SECONDARY); } SetScreen(X1+1,Y1+1,X2-1,Y2-1,L' ',ColorIndexToColor(COL_PANELTEXT)); Box(X1,Y1,X2,Y2,ColorIndexToColor(COL_PANELBOX),DOUBLE_BOX); if (Opt.ShowColumnTitles) { // SetScreen(X1+1,Y1+1,X2-1,Y1+1,' ',COL_PANELTEXT); SetColor(COL_PANELTEXT); //??? //GotoXY(X1+1,Y1+1); //FS<<fmt::Width(X2-X1-1)<<L""; } for (int I=0,ColumnPos=X1+1; I<ViewSettings.ColumnCount; I++) { if (ViewSettings.ColumnWidth[I]<0) continue; if (Opt.ShowColumnTitles) { LNGID IDMessage=MColumnUnknown; switch (ViewSettings.ColumnType[I] & 0xff) { case NAME_COLUMN: IDMessage=MColumnName; break; case EXTENSION_COLUMN: IDMessage=MColumnExtension; break; case SIZE_COLUMN: IDMessage=MColumnSize; break; case PACKED_COLUMN: IDMessage=MColumnAlocatedSize; break; case DATE_COLUMN: IDMessage=MColumnDate; break; case TIME_COLUMN: IDMessage=MColumnTime; break; case WDATE_COLUMN: IDMessage=MColumnWrited; break; case CDATE_COLUMN: IDMessage=MColumnCreated; break; case ADATE_COLUMN: IDMessage=MColumnAccessed; break; case CHDATE_COLUMN: IDMessage=MColumnChanged; break; case ATTR_COLUMN: IDMessage=MColumnAttr; break; case DIZ_COLUMN: IDMessage=MColumnDescription; break; case OWNER_COLUMN: IDMessage=MColumnOwner; break; case NUMLINK_COLUMN: IDMessage=MColumnMumLinks; break; case NUMSTREAMS_COLUMN: IDMessage=MColumnNumStreams; break; case STREAMSSIZE_COLUMN: IDMessage=MColumnStreamsSize; break; } strTitle=MSG(IDMessage); if (PanelMode==PLUGIN_PANEL && Info.PanelModesArray && ViewMode<static_cast<int>(Info.PanelModesNumber) && Info.PanelModesArray[ViewMode].ColumnTitles) { const wchar_t *NewTitle=Info.PanelModesArray[ViewMode].ColumnTitles[I]; if (NewTitle) strTitle=NewTitle; } string strTitleMsg; CenterStr(strTitle,strTitleMsg,ViewSettings.ColumnWidth[I]); SetColor(COL_PANELCOLUMNTITLE); GotoXY(ColumnPos,Y1+1); FS<<fmt::Precision(ViewSettings.ColumnWidth[I])<<strTitleMsg; } if (I>=ViewSettings.ColumnCount-1) break; if (ViewSettings.ColumnWidth[I+1]<0) continue; SetColor(COL_PANELBOX); ColumnPos+=ViewSettings.ColumnWidth[I]; GotoXY(ColumnPos,Y1); bool DoubleLine = Opt.DoubleGlobalColumnSeparator && (!((I+1)%ColumnsInGlobal)); BoxText(BoxSymbols[DoubleLine?BS_T_H2V2:BS_T_H2V1]); if (Opt.ShowColumnTitles) { GotoXY(ColumnPos,Y1+1); BoxText(BoxSymbols[DoubleLine?BS_V2:BS_V1]); } if (!Opt.ShowPanelStatus) { GotoXY(ColumnPos,Y2); BoxText(BoxSymbols[DoubleLine?BS_B_H2V2:BS_B_H2V1]); } ColumnPos++; } int NextX1=X1+1; if (Opt.ShowSortMode) { static int SortModes[]={UNSORTED,BY_NAME,BY_EXT,BY_MTIME,BY_CTIME, BY_ATIME,BY_CHTIME,BY_SIZE,BY_DIZ,BY_OWNER, BY_COMPRESSEDSIZE,BY_NUMLINKS, BY_NUMSTREAMS,BY_STREAMSSIZE, BY_FULLNAME,BY_CUSTOMDATA }; static LNGID SortStrings[]={MMenuUnsorted,MMenuSortByName, MMenuSortByExt,MMenuSortByWrite,MMenuSortByCreation, MMenuSortByAccess,MMenuSortByChange,MMenuSortBySize,MMenuSortByDiz,MMenuSortByOwner, MMenuSortByAllocatedSize,MMenuSortByNumLinks,MMenuSortByNumStreams,MMenuSortByStreamsSize, MMenuSortByFullName,MMenuSortByCustomData }; for (size_t I=0; I<ARRAYSIZE(SortModes); I++) { if (SortModes[I]==SortMode) { const wchar_t *SortStr=MSG(SortStrings[I]); const wchar_t *Ch=wcschr(SortStr,L'&'); if (Ch) { if (Opt.ShowColumnTitles) GotoXY(NextX1,Y1+1); else GotoXY(NextX1,Y1); SetColor(COL_PANELCOLUMNTITLE); OutCharacter[0]=SortOrder==1 ? Lower(Ch[1]):Upper(Ch[1]); Text(OutCharacter); NextX1++; if (Filter && Filter->IsEnabledOnPanel()) { OutCharacter[0]=L'*'; Text(OutCharacter); NextX1++; } } break; } } } /* <режимы сортировки> */ if (/*GetNumericSort() || GetCaseSensitiveSort() || GetSortGroups() || */GetSelectedFirstMode()) { if (Opt.ShowColumnTitles) GotoXY(NextX1,Y1+1); else GotoXY(NextX1,Y1); SetColor(COL_PANELCOLUMNTITLE); wchar_t *PtrOutCharacter=OutCharacter; *PtrOutCharacter=0; //if (GetSelectedFirstMode()) *PtrOutCharacter++=L'^'; /* if(GetNumericSort()) *PtrOutCharacter++=L'#'; if(GetSortGroups()) *PtrOutCharacter++=L'@'; */ /* if(GetCaseSensitiveSort()) { } */ *PtrOutCharacter=0; Text(OutCharacter); PtrOutCharacter[1]=0; } /* </режимы сортировки> */ if (!Fast && GetFocus()) { if (PanelMode==PLUGIN_PANEL) CtrlObject->CmdLine->SetCurDir(Info.CurDir); else CtrlObject->CmdLine->SetCurDir(strCurDir); CtrlObject->CmdLine->Show(); } int TitleX2=Opt.Clock && !Opt.ShowMenuBar ? Min(ScrX-4,X2):X2; int TruncSize=TitleX2-X1-3; if (!Opt.ShowColumnTitles && Opt.ShowSortMode && Filter && Filter->IsEnabledOnPanel()) TruncSize-=2; GetTitle(strTitle,TruncSize,2);//,(PanelMode==PLUGIN_PANEL?0:2)); Length=(int)strTitle.GetLength(); int ClockCorrection=FALSE; if ((Opt.Clock && !Opt.ShowMenuBar) && TitleX2==ScrX-4) { ClockCorrection=TRUE; TitleX2+=4; } int TitleX=X1+(TitleX2-X1+1-Length)/2; if (ClockCorrection) { int Overlap=TitleX+Length-TitleX2+5; if (Overlap > 0) TitleX-=Overlap; } if (TitleX <= X1) TitleX = X1+1; SetColor(Focus ? COL_PANELSELECTEDTITLE:COL_PANELTITLE); GotoXY(TitleX,Y1); Text(strTitle); if (!FileCount) { SetScreen(X1+1,Y2-1,X2-1,Y2-1,L' ',ColorIndexToColor(COL_PANELTEXT)); SetColor(COL_PANELTEXT); //??? //GotoXY(X1+1,Y2-1); //FS<<fmt::Width(X2-X1-1)<<L""; } if (PanelMode==PLUGIN_PANEL && FileCount>0 && (Info.Flags & OPIF_REALNAMES)) { if (!strInfoCurDir.IsEmpty()) { strCurDir = strInfoCurDir; } else { if (!TestParentFolderName(ListData[CurFile]->strName)) { strCurDir=ListData[CurFile]->strName; size_t pos; if (FindLastSlash(pos,strCurDir)) { if (pos) { if (strCurDir.At(pos-1)!=L':') strCurDir.SetLength(pos); else strCurDir.SetLength(pos+1); } } } else { strCurDir = strOriginalCurDir; } } if (GetFocus()) { CtrlObject->CmdLine->SetCurDir(strCurDir); CtrlObject->CmdLine->Show(); } } if ((Opt.ShowPanelTotals || Opt.ShowPanelFree) && (Opt.ShowPanelStatus || !SelFileCount)) { ShowTotalSize(Info); } ShowList(FALSE,0); ShowSelectedSize(); if (Opt.ShowPanelScrollbar) { SetColor(COL_PANELSCROLLBAR); ScrollBarEx(X2,Y1+1+Opt.ShowColumnTitles,Height,Round(CurTopFile,Columns),Round(FileCount,Columns)); } ShowScreensCount(); if (!ProcessingPluginCommand && LastCurFile!=CurFile) { LastCurFile=CurFile; UpdateViewPanel(); } if (PanelMode==PLUGIN_PANEL) CtrlObject->Cp()->RedrawKeyBar(); }
void ShellDeleteMsg(const wchar_t *Name, DEL_MODE Mode, int Percent, int WipePercent) { FormatString strProgress, strWipeProgress; size_t Width=52; size_t Length=Width-5; // -5 под проценты if(Mode==DEL_WIPEPROCESS || Mode==DEL_WIPE) { wchar_t *WipeProgress=strWipeProgress.GetBuffer(Length); if (WipeProgress) { size_t CurPos=Min(WipePercent,100)*Length/100; wmemset(WipeProgress,BoxSymbols[BS_X_DB],CurPos); wmemset(WipeProgress+(CurPos),BoxSymbols[BS_X_B0],Length-CurPos); strWipeProgress.ReleaseBuffer(Length); strWipeProgress<<L" "<<fmt::MinWidth(3)<<WipePercent<<L"%"; } if(Percent==-1) { TBC.SetProgressValue(WipePercent, 100); } } if (Mode!=DEL_SCAN && Percent!=-1) { wchar_t *Progress=strProgress.GetBuffer(Length); if (Progress) { size_t CurPos=Min(Percent,100)*Length/100; wmemset(Progress,BoxSymbols[BS_X_DB],CurPos); wmemset(Progress+(CurPos),BoxSymbols[BS_X_B0],Length-CurPos); strProgress.ReleaseBuffer(Length); strProgress<<L" "<<fmt::MinWidth(3)<<Percent<<L"%"; *DeleteTitle << L"{" << Percent << L"%} " << MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeleteWipeTitle:MDeleteTitle) << fmt::Flush(); } TBC.SetProgressValue(Percent,100); } string strOutFileName(Name); TruncPathStr(strOutFileName,static_cast<int>(Width)); CenterStr(strOutFileName,strOutFileName,static_cast<int>(Width)); const wchar_t* Progress1 = nullptr; const wchar_t* Progress2 = nullptr; if(!strWipeProgress.IsEmpty()) { Progress1 = strWipeProgress.CPtr(); Progress2 = strProgress.IsEmpty()? nullptr : strProgress.CPtr(); } else { Progress1 = strProgress.IsEmpty()? nullptr : strProgress.CPtr(); } Message(0,0, MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeleteWipeTitle:MDeleteTitle), Mode==DEL_SCAN? MSG(MScanningFolder) : MSG((Mode==DEL_WIPE || Mode==DEL_WIPEPROCESS)?MDeletingWiping:MDeleting), strOutFileName, Progress1, Progress2); PreRedrawItem preRedrawItem=PreRedraw.Peek(); preRedrawItem.Param.Param1=static_cast<void*>(const_cast<wchar_t*>(Name)); preRedrawItem.Param.Param4=ToPtr(Mode); LARGE_INTEGER i = {(DWORD)Percent, (LONG)WipePercent}; preRedrawItem.Param.Param5=i.QuadPart; PreRedraw.SetParam(preRedrawItem.Param); }