Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/elfmz/far2l.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelfmz <fenix1905@tut.by>2022-11-06 15:42:07 +0300
committerelfmz <fenix1905@tut.by>2022-11-06 15:42:10 +0300
commit2132a5070d45ec4b547b81182338adf68a9daeb7 (patch)
treeddff746b84170607c90b17b9114fed7cc4c1fa6d
parentdd90814dd17bdc802bf1711cab22bac385498eed (diff)
Location menu: use center-truncate for 2nd and 4rd columns (touch #1379)
-rw-r--r--far2l/src/base/FARString.cpp12
-rw-r--r--far2l/src/base/FARString.hpp5
-rw-r--r--far2l/src/mix/format.cpp16
-rw-r--r--far2l/src/mix/strmix.cpp16
-rw-r--r--far2l/src/mix/strmix.hpp2
-rw-r--r--far2l/src/panel.cpp6
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);