View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002816 | Wishes | Panel | public | 2014-10-02 10:47 | 2014-10-08 17:15 |
Reporter | Maximus | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | new | Resolution | open | ||
Product Version | 3.0 | ||||
Summary | 0002816: Многострочная статусная область | ||||
Description | Дать возможность юзеру настроить многострочную статусную область. Реализация - через фиктивную колонку "B". B[C,R] - (только для строки статуса) фиктивная колонка, соответствующая разрыву строки, таким образом можно настроить многострочную область статуса; ширина фиктивной колонки (хотя бы и 0) должна быть указана Можно указать один из модификаторов выравнивания, где: C - по центру, лидирующие и концевые пробелы обрезаются; R - по правому краю; Колонку можно указать на первом месте для выравнивания первой статусной строки | ||||
Tags | No tags attached. | ||||
Build | |||||
|
Multiline-panel-status-line.patch (21,008 bytes)
From def83a7e2451dc41a961629503091e6d69fcce58 Mon Sep 17 00:00:00 2001 From: Maximus5 <ConEmu.Maximus5@gmail.com> Date: Fri, 29 Aug 2014 00:49:17 +0400 Subject: [PATCH] Multiline panel status line --- unicode_far/FarEng.hlf.m4 | 9 ++ unicode_far/FarRus.hlf.m4 | 10 +++ unicode_far/filelist.cpp | 208 ++++++++++++++++++++++++++++++++++++++------- unicode_far/filelist.hpp | 1 + unicode_far/panel.hpp | 3 +- unicode_far/panelctype.hpp | 3 +- unicode_far/panelmix.cpp | 47 ++++++++-- 7 files changed, 241 insertions(+), 40 deletions(-) diff --git a/unicode_far/FarEng.hlf.m4 b/unicode_far/FarEng.hlf.m4 index c17f8f4..e39cb62 100644 --- a/unicode_far/FarEng.hlf.m4 +++ b/unicode_far/FarEng.hlf.m4 @@ -3978,6 +3978,15 @@ characters, delimited with commas. Allowed column types are: F - number of streams + B[C,R] - ^<wrap>(only for status line) fictive column, +means column break, so, you can set up multiline status area; +you must specify column width (even if 0) must be specified. + You may supply one of align modificators, + where: C - ^<wrap>center align, leading and trailing spaces will be omitted; + R - right align; + ^<wrap>You may supply B column as first column +for aligning first status line. + If the column types description contains more than one file name column, the file panel will be displayed in multicolumn form. diff --git a/unicode_far/FarRus.hlf.m4 b/unicode_far/FarRus.hlf.m4 index b630016..93794c1 100644 --- a/unicode_far/FarRus.hlf.m4 +++ b/unicode_far/FarRus.hlf.m4 @@ -4062,6 +4062,16 @@ $ #Настройка режимов просмотра панели файло F - количество потоков + B[C,R] - ^<wrap>(только для строки статуса) фиктивная колонка, +соответствующая разрыву строки, таким образом можно настроить +многострочную область статуса; ширина фиктивной колонки (хотя бы и 0) +должна быть указана + Можно указать один из модификаторов выравнивания, + где: C - ^<wrap>по центру, лидирующие и концевые пробелы обрезаются; + R - по правому краю; + ^<wrap>Колонку можно указать на первом месте для выравнивания первой +статусной строки + Если описание типов колонок содержит более одной колонки имени файла, панель файлов будет отображаться в многоколоночной форме. diff --git a/unicode_far/filelist.cpp b/unicode_far/filelist.cpp index d5ab232..6753e0a 100644 --- a/unicode_far/filelist.cpp +++ b/unicode_far/filelist.cpp @@ -2922,6 +2922,7 @@ int FileList::ProcessMouse(const MOUSE_EVENT_RECORD *MouseEvent) Global->Elevation->ResetApprove(); int RetCode; + int StatusHeight = GetPanelStatusHeight(); if (IsVisible() && Global->Opt->ShowColumnTitles && !MouseEvent->dwEventFlags && MouseEvent->dwMousePosition.Y==m_Y1+1 && @@ -2997,7 +2998,7 @@ int FileList::ProcessMouse(const MOUSE_EVENT_RECORD *MouseEvent) return RetCode; if (MouseEvent->dwMousePosition.Y>m_Y1+Global->Opt->ShowColumnTitles && - MouseEvent->dwMousePosition.Y<m_Y2-2*Global->Opt->ShowPanelStatus) + MouseEvent->dwMousePosition.Y<m_Y2-StatusHeight) { SetFocus(); @@ -3091,14 +3092,14 @@ int FileList::ProcessMouse(const MOUSE_EVENT_RECORD *MouseEvent) return TRUE; } - if (MouseEvent->dwMousePosition.Y>=m_Y2-2) + if (MouseEvent->dwMousePosition.Y>=m_Y2-StatusHeight) { SetFocus(); if (m_ListData.empty()) return TRUE; - while (IsMouseButtonPressed() && IntKeyState.MouseY>=m_Y2-2) + while (IsMouseButtonPressed() && IntKeyState.MouseY>=m_Y2-StatusHeight) { MoveCursor(1); @@ -7383,9 +7384,10 @@ static LNGID __FormatEndSelectedPhrase(size_t Count) void FileList::DisplayObject() { - m_Height=m_Y2-m_Y1-4+!Global->Opt->ShowColumnTitles+(Global->Opt->ShowPanelStatus ? 0:2); _OT(SysLog(L"[%p] FileList::DisplayObject()",this)); + m_Height=m_Y2-m_Y1+!Global->Opt->ShowColumnTitles-(Global->Opt->ShowPanelStatus ? (GetPanelStatusHeight()+2) : 2); + if (UpdateRequired) { UpdateRequired=FALSE; @@ -7796,14 +7798,15 @@ void FileList::ShowSelectedSize() if (Global->Opt->ShowPanelStatus) { SetColor(COL_PANELBOX); - DrawSeparator(m_Y2-2); + int StatusHeight = GetPanelStatusHeight(); + DrawSeparator(m_Y2-StatusHeight); for (size_t I=0,ColumnPos=m_X1+1; I<m_ViewSettings.PanelColumns.size() - 1; I++) { if (m_ViewSettings.PanelColumns[I].width < 0 || (I == m_ViewSettings.PanelColumns.size() - 2 && m_ViewSettings.PanelColumns[I+1].width < 0)) continue; ColumnPos += m_ViewSettings.PanelColumns[I].width; - GotoXY(static_cast<int>(ColumnPos),m_Y2-2); + GotoXY(static_cast<int>(ColumnPos),m_Y2-StatusHeight); bool DoubleLine = Global->Opt->DoubleGlobalColumnSeparator && (!((I+1)%ColumnsInGlobal)); BoxText(BoxSymbols[DoubleLine?BS_B_H1V2:BS_B_H1V1]); @@ -7820,7 +7823,7 @@ void FileList::ShowSelectedSize() TruncStr(strSelStr,m_X2-m_X1-1); int Length=(int)strSelStr.size(); SetColor(COL_PANELSELECTEDINFO); - GotoXY(m_X1+(m_X2-m_X1+1-Length)/2,m_Y2-2*Global->Opt->ShowPanelStatus); + GotoXY(m_X1+(m_X2-m_X1+1-Length)/2,m_Y2-GetPanelStatusHeight()); Text(strSelStr); } } @@ -8034,19 +8037,65 @@ void FileList::PrepareViewSettings(int ViewMode, const OpenPanelInfo *PlugInfo) } m_Columns=PreparePanelView(&m_ViewSettings); - m_Height=m_Y2-m_Y1-4; + int StatusHeight = GetPanelStatusHeight(); + m_Height=m_Y2-m_Y1-(Global->Opt->ShowPanelStatus ? (StatusHeight+2) : 2); //Maximus5: BUGBUG: ??? if (!Global->Opt->ShowColumnTitles) m_Height++; if (!Global->Opt->ShowPanelStatus) - m_Height+=2; + m_Height+=StatusHeight; } int FileList::PreparePanelView(PanelViewSettings *PanelView) { - PrepareColumnWidths(PanelView->StatusColumns, (PanelView->Flags&PVS_FULLSCREEN) != 0, true); + std::vector<column> StatusColumns; + auto i = PanelView->StatusColumns.begin(); + auto j = i; + bool EndOfList = false; + while (!EndOfList) + { + EndOfList = (i == PanelView->StatusColumns.end()); + bool BreakColumn = ((i->type &0xFF)==LINEBREAK_COLUMN); + while (!EndOfList) + { + if (BreakColumn) + { + if (!StatusColumns.empty()) + break; + } + else + { + if (StatusColumns.empty()) + j = i; + StatusColumns.push_back(*i); + } + + if (++i == PanelView->StatusColumns.end()) + { + EndOfList = true; + break; + } + + BreakColumn = ((i->type &0xFF)==LINEBREAK_COLUMN); + } + + if (!StatusColumns.empty()) + { + PrepareColumnWidths(StatusColumns, (PanelView->Flags&PVS_FULLSCREEN) != 0, true); + for (auto k = StatusColumns.begin(); k != StatusColumns.end() && j != i; k++, j++) + { + #ifdef _DEBUG + const column& K = *k; + const column& J = *j; + _ASSERTE(K.type == J.type && K.width_type == J.width_type); + #endif + j->width = k->width; + } + StatusColumns.clear(); + } + } return PrepareColumnWidths(PanelView->PanelColumns, (PanelView->Flags&PVS_FULLSCREEN) != 0, false); } @@ -8238,16 +8287,43 @@ void FileList::ShowList(int ShowStatus,int StartColumn) int StatusShown=FALSE; int MaxLeftPos=0,MinLeftPos=FALSE; size_t ColumnCount=ShowStatus ? m_ViewSettings.StatusColumns.size() : m_ViewSettings.PanelColumns.size(); + int StatusHeight = GetPanelStatusHeight(); const auto& Columns = ShowStatus ? m_ViewSettings.StatusColumns : m_ViewSettings.PanelColumns; - for (int I=m_Y1+1+Global->Opt->ShowColumnTitles,J=m_CurTopFile; I<m_Y2-2*Global->Opt->ShowPanelStatus; I++,J++) + size_t K0=0; + unsigned __int64 StatusAlign=0; + + + if (ShowStatus) + { + if ((Columns[K0].type&0xFF)==LINEBREAK_COLUMN) + K0++; + // ������ ������ ������ ������� ������������� �� ������ ShowStatus (1 based) + for (int S=1; S<ShowStatus; S++) + { + while (K0<ColumnCount) + { + if ((Columns[K0++].type&0xFF)==LINEBREAK_COLUMN) + break; + } + } + if (K0 && (Columns[K0-1].type&0xFF)==LINEBREAK_COLUMN) + StatusAlign=Columns[K0-1].type & (COLUMN_CENTERALIGN|COLUMN_RIGHTALIGN); + // ������� ��������� ������� � ���� ������ + size_t K1=K0; + while (K1<ColumnCount && (Columns[K1].type&0xFF)!=LINEBREAK_COLUMN) + K1++; + ColumnCount=K1-K0; + } + + for (int I=m_Y1+1+Global->Opt->ShowColumnTitles,J=m_CurTopFile; I<m_Y2-StatusHeight; I++,J++) { int CurColumn=StartColumn; if (ShowStatus) { SetColor(COL_PANELTEXT); - GotoXY(m_X1+1,m_Y2-1); + GotoXY(m_X1+1,m_Y2-StatusHeight+ShowStatus); } else { @@ -8258,7 +8334,9 @@ void FileList::ShowList(int ShowStatus,int StartColumn) int StatusLine=FALSE; int Level = 1; - for (size_t K=0; K<ColumnCount; K++) + FormatString strLine; + + for (size_t K=K0; K<K0+ColumnCount; K++) { int ListPos=J+CurColumn*m_Height; @@ -8295,7 +8373,8 @@ void FileList::ShowList(int ShowStatus,int StartColumn) { if (!ShowStatus && !StatusShown && m_CurFile==ListPos && Global->Opt->ShowPanelStatus) { - ShowList(TRUE,CurColumn); + for (int S=1; S<StatusHeight; S++) + ShowList(S,CurColumn); GotoXY(CurX,CurY); StatusShown=TRUE; SetShowColor(ListPos); @@ -8329,7 +8408,7 @@ void FileList::ShowList(int ShowStatus,int StartColumn) } } - Global->FS << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<ColumnData+CurLeftPos; + strLine << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<ColumnData+CurLeftPos; } else { @@ -8342,7 +8421,11 @@ void FileList::ShowList(int ShowStatus,int StartColumn) if ((ViewFlags & COLUMN_MARK) && Width>2) { - Text(m_ListData[ListPos].Selected?L"\x221A ":L" "); + const wchar_t *MarkPtr = m_ListData[ListPos].Selected?L"\x221A ":L" "; + if (!ShowStatus) + Text(MarkPtr); + else + strLine.append(MarkPtr); Width-=2; } @@ -8353,10 +8436,15 @@ void FileList::ShowList(int ShowStatus,int StartColumn) FarColor OldColor=GetColor(); if (!ShowStatus) + { SetShowColor(ListPos, false); - - Text(OutCharacter); - SetColor(OldColor); + Text(OutCharacter); + SetColor(OldColor); + } + else + { + strLine.append(OutCharacter); + } } const wchar_t *NamePtr = m_ShowShortNames && !m_ListData[ListPos].strShortName.empty() && !ShowStatus ? m_ListData[ListPos].strShortName.data():m_ListData[ListPos].strName.data(); @@ -8451,7 +8539,10 @@ void FileList::ShowList(int ShowStatus,int StartColumn) Lower(strName); } - Text(strName); + if (!ShowStatus) + Text(strName); + else + strLine.append(strName); if (!ShowStatus) @@ -8496,9 +8587,15 @@ void FileList::ShowList(int ShowStatus,int StartColumn) unsigned __int64 ViewFlags=Columns[K].type; if (ViewFlags&COLUMN_RIGHTALIGN) - Global->FS << fmt::RightAlign()<<fmt::ExactWidth(ColumnWidth)<<ExtPtr; + strLine << fmt::RightAlign()<<fmt::ExactWidth(ColumnWidth)<<ExtPtr; else - Global->FS << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<ExtPtr; + strLine << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<ExtPtr; + + if (!ShowStatus) + { + Text(strLine); + strLine.clear(); + } if (!ShowStatus && StrLength(ExtPtr) > ColumnWidth) { @@ -8522,7 +8619,7 @@ void FileList::ShowList(int ShowStatus,int StartColumn) case PACKED_COLUMN: case STREAMSSIZE_COLUMN: { - Text(FormatStr_Size( + strLine.append(FormatStr_Size( m_ListData[ListPos].FileSize, m_ListData[ListPos].AllocationSize, m_ListData[ListPos].StreamsSize, @@ -8565,13 +8662,13 @@ void FileList::ShowList(int ShowStatus,int StartColumn) break; } - Global->FS << FormatStr_DateTime(FileTime,ColumnType,Columns[K].type,ColumnWidth); + strLine << FormatStr_DateTime(FileTime,ColumnType,Columns[K].type,ColumnWidth); break; } case ATTR_COLUMN: { - Global->FS << FormatStr_Attribute(m_ListData[ListPos].FileAttr,ColumnWidth); + strLine << FormatStr_Attribute(m_ListData[ListPos].FileAttr,ColumnWidth); break; } @@ -8594,7 +8691,7 @@ void FileList::ShowList(int ShowStatus,int StartColumn) if (pos != string::npos) strDizText.resize(pos); - Global->FS << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<strDizText; + strLine << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<strDizText; break; } @@ -8626,7 +8723,7 @@ void FileList::ShowList(int ShowStatus,int StartColumn) } } - Global->FS << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<Owner+CurLeftPos; + strLine << fmt::LeftAlign()<<fmt::ExactWidth(ColumnWidth)<<Owner+CurLeftPos; break; } @@ -8634,15 +8731,15 @@ void FileList::ShowList(int ShowStatus,int StartColumn) { int nlink = m_ListData[ListPos].NumberOfLinks; if (nlink >= 0) - Global->FS << fmt::ExactWidth(ColumnWidth) << nlink; + strLine << fmt::ExactWidth(ColumnWidth) << nlink; else - Global->FS << fmt::ExactWidth(ColumnWidth) << L"?"; + strLine << fmt::ExactWidth(ColumnWidth) << L"?"; break; } case NUMSTREAMS_COLUMN: { - Global->FS << fmt::ExactWidth(ColumnWidth)<<m_ListData[ListPos].NumberOfStreams; + strLine << fmt::ExactWidth(ColumnWidth)<<m_ListData[ListPos].NumberOfStreams; break; } @@ -8651,7 +8748,13 @@ void FileList::ShowList(int ShowStatus,int StartColumn) } else { - Global->FS << fmt::MinWidth(ColumnWidth)<<L""; + strLine << fmt::MinWidth(ColumnWidth)<<L""; + } + + if (!ShowStatus) + { + Text(strLine); + strLine.clear(); } if (ShowDivider==FALSE) @@ -8670,8 +8773,10 @@ void FileList::ShowList(int ShowStatus,int StartColumn) if (K==ColumnCount-1) BoxText(CurX+ColumnWidth==m_X2 ? BoxSymbols[BS_V2]:L' '); + else if (!ShowStatus) + BoxText(BoxSymbols[(Global->Opt->DoubleGlobalColumnSeparator && Level == ColumnsInGlobal)?BS_V2:BS_V1]); else - BoxText(ShowStatus ? L' ':BoxSymbols[(Global->Opt->DoubleGlobalColumnSeparator && Level == ColumnsInGlobal)?BS_V2:BS_V1]); + strLine.append(L" "); if (!ShowStatus) SetColor(COL_PANELTEXT); @@ -8689,6 +8794,29 @@ void FileList::ShowList(int ShowStatus,int StartColumn) } } + if (ShowStatus && !strLine.empty()) + { + GotoXY(m_X1+1,WhereY()); + SetColor(COL_PANELTEXT); + if (StatusAlign & COLUMN_CENTERALIGN) + RemoveExternalSpaces(strLine); + else if (StatusAlign & COLUMN_RIGHTALIGN) + RemoveTrailingSpaces(strLine); + int LineLen = static_cast<int>(strLine.length()); + if (LineLen<(m_X2-m_X1-1)) + { + if (StatusAlign & COLUMN_CENTERALIGN) + Global->FS << fmt::MinWidth((m_X2-m_X1-1-LineLen)>>1)<<L""; + else if (StatusAlign & COLUMN_RIGHTALIGN) + Global->FS << fmt::MinWidth(m_X2-m_X1-1-LineLen)<<L""; + } + else if (LineLen>(m_X2-m_X1-1)) + { + LineLen = m_X2-m_X1-1; + } + Global->FS << fmt::MinWidth(LineLen)<<strLine/*LinePtr*/; + } + if ((!ShowStatus || StatusLine) && WhereX()<m_X2) { SetColor(COL_PANELTEXT); @@ -8733,3 +8861,19 @@ bool FileList::IsColumnDisplayed(int Type) return std::any_of(ALL_CONST_RANGE(m_ViewSettings.PanelColumns), is_same_type) || std::any_of(ALL_CONST_RANGE(m_ViewSettings.StatusColumns), is_same_type); } + +int FileList::GetPanelStatusHeight() +{ + if (!Global->Opt->ShowPanelStatus) + return 0; + int Count=0; + int CountMax = m_Y2-m_Y1-5; + for (size_t I=0; I<m_ViewSettings.StatusColumns.size() && Count<CountMax; I++) + { + if (I && (m_ViewSettings.StatusColumns[I].type&0xFF)==LINEBREAK_COLUMN) + { + Count++; + } + } + return Count+2; // <Number of status lines> + 1 (delimiter line) +} diff --git a/unicode_far/filelist.hpp b/unicode_far/filelist.hpp index 1da4b83..0cd8ace 100644 --- a/unicode_far/filelist.hpp +++ b/unicode_far/filelist.hpp @@ -340,6 +340,7 @@ public: void PluginEndSelection(); int PluginPanelHelp(const PluginHandle* hPlugin) const; void ResetLastUpdateTime() {LastUpdateTime = 0;} + virtual int GetPanelStatusHeight(); static void SetFilePanelModes(); static void SavePanelModes(); diff --git a/unicode_far/panel.hpp b/unicode_far/panel.hpp index 90e2668..2a51fb2 100644 --- a/unicode_far/panel.hpp +++ b/unicode_far/panel.hpp @@ -346,6 +346,7 @@ public: void SetFullScreen() { m_ViewSettings.Flags |= PVS_FULLSCREEN; } bool CreateFullPathName(const string& Name, const string& ShortName, DWORD FileAttr, string &strDest, int UNC, int ShortNameAsIs = TRUE) const; + virtual int GetPanelStatusHeight() { return 0; }; static void EndDrag(); @@ -411,4 +412,4 @@ public: private: virtual void Update(int Mode) override {}; virtual void UpdateKeyBar() override {} -}; \ No newline at end of file +}; diff --git a/unicode_far/panelctype.hpp b/unicode_far/panelctype.hpp index acd9b5e..edb4457 100644 --- a/unicode_far/panelctype.hpp +++ b/unicode_far/panelctype.hpp @@ -60,7 +60,8 @@ enum PANEL_COLUMN_TYPE { CUSTOM_COLUMN7, CUSTOM_COLUMN8, CUSTOM_COLUMN9, - + LINEBREAK_COLUMN, + COLUMN_TYPES_COUNT }; diff --git a/unicode_far/panelmix.cpp b/unicode_far/panelmix.cpp index 31d395e..e21180b 100644 --- a/unicode_far/panelmix.cpp +++ b/unicode_far/panelmix.cpp @@ -50,12 +50,13 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "plugins.hpp" #include "language.hpp" -int ColumnTypeWidth[]={0, 6, 6, 8, 5, 14, 14, 14, 14, 6, 0, 0, 3, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +int ColumnTypeWidth[]={0, 6, 6, 8, 5, 14, 14, 14, 14, 6, 0, 0, 3, 3, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; static_assert(ARRAYSIZE(ColumnTypeWidth) == COLUMN_TYPES_COUNT, "wrong size of ColumnTypeWidth array"); -static const wchar_t *ColumnSymbol[]={L"N",L"S",L"P",L"D",L"T",L"DM",L"DC",L"DA",L"DE",L"A",L"Z",L"O",L"LN",L"F",L"G",L"X",L"C0",L"C1",L"C2",L"C3",L"C4",L"C5",L"C6",L"C7",L"C8",L"C9"}; +static const wchar_t *ColumnSymbol[]={L"N",L"S",L"P",L"D",L"T",L"DM",L"DC",L"DA",L"DE",L"A",L"Z",L"O",L"LN",L"F",L"G",L"X",L"C0",L"C1",L"C2",L"C3",L"C4",L"C5",L"C6",L"C7",L"C8",L"C9",L"B"}; static_assert(ARRAYSIZE(ColumnSymbol) == COLUMN_TYPES_COUNT, "wrong size of ColumnSymbol array"); + void ShellUpdatePanels(Panel *SrcPanel,BOOL NeedSetUpADir) { if (!SrcPanel) @@ -401,12 +402,38 @@ void TextToViewSettings(const string& ColumnTitles,const string& ColumnWidths, s } else { - for (unsigned I=0; I<ARRAYSIZE(ColumnSymbol); I++) + if (strArgName.at(0) == L'B') { - if (strArgName == ColumnSymbol[I]) + unsigned __int64 &ColumnType = Columns.back().type; + ColumnType=LINEBREAK_COLUMN; + const wchar_t *Ptr = strArgName.c_str()+1; + + while (*Ptr) { - Columns.back().type = I; - break; + switch (*Ptr) + { + case L'R': + if (!(ColumnType & COLUMN_CENTERALIGN)) + ColumnType|=COLUMN_RIGHTALIGN; + break; + case L'C': + if (!(ColumnType & COLUMN_RIGHTALIGN)) + ColumnType|=COLUMN_CENTERALIGN; + break; + } + + Ptr++; + } + } + else + { + for (unsigned I=0; I<ARRAYSIZE(ColumnSymbol); I++) + { + if (strArgName == ColumnSymbol[I]) + { + Columns.back().type = I; + break; + } } } } @@ -522,6 +549,14 @@ void ViewSettingsToText(const std::vector<column>& Columns, string &strColumnTit strType += L"R"; } + if (ColumnType==LINEBREAK_COLUMN) + { + if (i.type & COLUMN_CENTERALIGN) + strType += L"C"; + else if (i.type & COLUMN_RIGHTALIGN) + strType += L"R"; + } + strColumnTitles += strType; strColumnWidths += std::to_wstring(i.width); -- 1.8.5.2.msysgit.0 |
|
Will be great, and join with this old wish: http://bugs.farmanager.com/view.php?id=2362 and this old post too: http://forum.farmanager.com/viewtopic.php?f=38&t=6462&p=81806#p81806 Excellent add-on Maximus!!! |