diff options
author | elfmz <fenix1905@tut.by> | 2022-11-06 15:42:07 +0300 |
---|---|---|
committer | elfmz <fenix1905@tut.by> | 2022-11-06 15:42:10 +0300 |
commit | 2132a5070d45ec4b547b81182338adf68a9daeb7 (patch) | |
tree | ddff746b84170607c90b17b9114fed7cc4c1fa6d | |
parent | dd90814dd17bdc802bf1711cab22bac385498eed (diff) |
Location menu: use center-truncate for 2nd and 4rd columns (touch #1379)
-rw-r--r-- | far2l/src/base/FARString.cpp | 12 | ||||
-rw-r--r-- | far2l/src/base/FARString.hpp | 5 | ||||
-rw-r--r-- | far2l/src/mix/format.cpp | 16 | ||||
-rw-r--r-- | far2l/src/mix/strmix.cpp | 16 | ||||
-rw-r--r-- | far2l/src/mix/strmix.hpp | 2 | ||||
-rw-r--r-- | far2l/src/panel.cpp | 6 |
6 files changed, 34 insertions, 23 deletions
diff --git a/far2l/src/base/FARString.cpp b/far2l/src/base/FARString.cpp index 4a40327d..cacaaabb 100644 --- a/far2l/src/base/FARString.cpp +++ b/far2l/src/base/FARString.cpp @@ -300,6 +300,18 @@ FARString& FARString::Append(wchar_t Ch, size_t Count) return *this; } +FARString& FARString::Insert(size_t Pos, wchar_t Ch, size_t Count) +{ + size_t nNewLength = m_pContent->GetLength() + Count; + PrepareForModify(nNewLength); + wmemmove(m_pContent->GetData() + Count, m_pContent->GetData(), m_pContent->GetLength()); + wmemset(m_pContent->GetData(), Ch, Count); + m_pContent->SetLength(nNewLength); + + return *this; +} + + FARString& FARString::Copy(const FARString &Str) { auto prev_pContent = m_pContent; diff --git a/far2l/src/base/FARString.hpp b/far2l/src/base/FARString.hpp index b19aabfd..dd48fdfd 100644 --- a/far2l/src/base/FARString.hpp +++ b/far2l/src/base/FARString.hpp @@ -163,14 +163,13 @@ public: FARString& Append(const wchar_t* Str, size_t StrLen) { return Replace(GetLength(), 0, Str, StrLen); } FARString& Append(const FARString& Str) { return Append(Str.CPtr(), Str.GetLength()); } FARString& Append(const wchar_t* Str) { return Append(Str, StrLength(NullToEmpty(Str))); } - FARString& Append(wchar_t Ch, size_t Count); - FARString& Append(wchar_t Ch) { return Append(Ch, 1); } + FARString& Append(wchar_t Ch, size_t Count = 1); FARString& Append(const char *lpszAdd, UINT CodePage=CP_UTF8); FARString& Insert(size_t Pos, const wchar_t* Str, size_t StrLen) { return Replace(Pos, 0, Str, StrLen); } FARString& Insert(size_t Pos, const FARString& Str) { return Insert(Pos, Str.CPtr(), Str.GetLength()); } FARString& Insert(size_t Pos, const wchar_t* Str) { return Insert(Pos, Str, StrLength(NullToEmpty(Str))); } - FARString& Insert(size_t Pos, wchar_t Ch) { return Insert(Pos, &Ch, 1); } + FARString& Insert(size_t Pos, wchar_t Ch, size_t Count = 1); FARString& Copy(const wchar_t *Str, size_t StrLen) { return Replace(0, GetLength(), Str, StrLen); } FARString& Copy(const wchar_t *Str) { return Copy(Str, StrLength(NullToEmpty(Str))); } diff --git a/far2l/src/mix/format.cpp b/far2l/src/mix/format.cpp index 2a36f985..653ac059 100644 --- a/far2l/src/mix/format.cpp +++ b/far2l/src/mix/format.cpp @@ -80,18 +80,14 @@ void BaseFormat::Put(LPCWSTR Data, size_t Length) FARString OutStr(Data, Length); - size_t Count = _Cells ? OutStr.CellsCount() : OutStr.GetLength(); + const size_t Count = _Cells ? OutStr.CellsCount() : OutStr.GetLength(); - if (_Align == fmt::A_RIGHT) + if (_Expand > Count) { - for(;Count < _Expand; ++Count) - { - OutStr.Insert(0, _FillChar); - } - } - else if (_Expand > Count) - { - OutStr.Append(_FillChar, _Expand - Count); + if (_Align == fmt::A_RIGHT) + OutStr.Insert(0, _FillChar, _Expand - Count); + else + OutStr.Append(_FillChar, _Expand - Count); } Commit(OutStr); diff --git a/far2l/src/mix/strmix.cpp b/far2l/src/mix/strmix.cpp index 4e1434ac..a5a8fbed 100644 --- a/far2l/src/mix/strmix.cpp +++ b/far2l/src/mix/strmix.cpp @@ -447,18 +447,22 @@ FARString& CenterStr(const wchar_t *Src, FARString &strDest, int Length) return strDest; } -FARString FixedSizeStr(FARString str, size_t Length, bool RAlign) +FARString FixedSizeStr(FARString str, size_t Cells, bool RAlign, bool TruncateCenter) { - if (str.CellsCount() > Length) + const size_t InitialStrCells = str.CellsCount(); + if (InitialStrCells > Cells) { - TruncStr(str, Length); + if (TruncateCenter) + TruncStrFromCenter(str, Cells); + else + TruncStr(str, Cells); } - else while (str.CellsCount() < Length) + else if (InitialStrCells < Cells) { if (RAlign) - str.Insert(0, L" ", 1); + str.Insert(0, L' ', Cells - InitialStrCells); else - str.Append(L" ", 1); + str.Append(L' ', Cells - InitialStrCells); } return str; } diff --git a/far2l/src/mix/strmix.hpp b/far2l/src/mix/strmix.hpp index 3905f3ef..fa7f26cc 100644 --- a/far2l/src/mix/strmix.hpp +++ b/far2l/src/mix/strmix.hpp @@ -115,7 +115,7 @@ BOOL IsCaseMixed(const FARString &strStr); BOOL IsCaseLower(const FARString &strStr); FARString& CenterStr(const wchar_t *Src, FARString &strDest,int Length); -FARString FixedSizeStr(FARString str, size_t Length, bool RAlign); +FARString FixedSizeStr(FARString str, size_t Cells, bool RAlign, bool TruncateCenter); void Transform(FARString &strBuffer,const wchar_t *ConvStr,wchar_t TransformType); diff --git a/far2l/src/panel.cpp b/far2l/src/panel.cpp index 747865ce..7b3b7ec7 100644 --- a/far2l/src/panel.cpp +++ b/far2l/src/panel.cpp @@ -468,18 +468,18 @@ int Panel::ChangeDiskMenu(int Pos,int FirstCall) ChDiskItem.SetSelect(ChDisk.GetItemCount() == Pos); const wchar_t HotKeyStr[] = {m.hotkey ? L'&' : L' ', m.hotkey ? m.hotkey : L' ', m.hotkey ? L' ' : 0, 0}; ChDiskItem.strName = HotKeyStr; - ChDiskItem.strName+= FixedSizeStr(m.path, std::min(mounts.max_path, (size_t)48), true); + ChDiskItem.strName+= FixedSizeStr(m.path, std::min(mounts.max_path, (size_t)48), true, false); if (mounts.max_col2) { ChDiskItem.strName+= L' '; ChDiskItem.strName+= BoxSymbols[BS_V1]; ChDiskItem.strName+= L' '; - ChDiskItem.strName+= FixedSizeStr(m.col2, std::min(mounts.max_col2, (size_t)24), false); + ChDiskItem.strName+= FixedSizeStr(m.col2, std::min(mounts.max_col2, (size_t)24), false, true); } ChDiskItem.strName+= L' '; ChDiskItem.strName+= BoxSymbols[BS_V1]; ChDiskItem.strName+= L' '; - ChDiskItem.strName+= FixedSizeStr(m.col3, std::min(mounts.max_col3, (size_t)24), false); + ChDiskItem.strName+= FixedSizeStr(m.col3, std::min(mounts.max_col3, (size_t)24), false, true); PanelMenuItem item; wcsncpy(item.location.path, m.path.CPtr(), ARRAYSIZE(item.location.path) - 1); |