Class diagram update

This commit is contained in:
Markus Gans 2017-09-06 02:15:00 +02:00
parent 5a077e73c4
commit 92af0e811c
3 changed files with 203 additions and 201 deletions

185
README.md
View File

@ -19,22 +19,22 @@
The Final Cut The Final Cut
============= =============
The Final Cut is a class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple windows on the screen. The Final Cut is a class library and widget toolkit with full mouse support for creating a [text-based user interface](https://en.wikipedia.org/wiki/Text-based_user_interface). The library supports the programmer to develop an application for the text console. It allows the simultaneous handling of multiple windows on the screen.
The C++ class design was inspired by the Qt framework. It provides common controls like dialog windows, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on. The C++ class design was inspired by the Qt framework. It provides common controls like dialog windows, push buttons, check boxes, radio buttons, input lines, list boxes, status bars and so on.
![](doc/fileopen-dialog.png) ![](doc/fileopen-dialog.png)
![](doc/progress-bar.png) ![](doc/progress-bar.png)
![](doc/textview.png) ![](doc/textview.png)
![](doc/Mandelbrot.png) ![](doc/Mandelbrot.png)
newfont newfont
------- -------
A new text font for X11 and the Linux console. A new text font for X11 and the Linux console.
![](doc/newfont1.png) ![](doc/newfont1.png)
![](doc/newfont2.png) ![](doc/newfont2.png)
@ -43,8 +43,8 @@ A new text font for X11 and the Linux console.
Virtual terminal Virtual terminal
---------------- ----------------
It uses a virtual terminal to print the character via an update method on the screen. It uses a virtual terminal to print the character via an update method on the screen.
The virtual windows are an overlying layer to realizing window movements. The virtual windows are an overlying layer to realizing window movements.
The update method transmits only the changes to the virtual terminal or the screen. The update method transmits only the changes to the virtual terminal or the screen.
<pre style="line-height: 1 !important;"> <pre style="line-height: 1 !important;">
@ -87,7 +87,7 @@ printf(...)
│ output_buffer │ │ output_buffer │
└───────────────┘ └───────────────┘
│ flush_out() │ flush_out()
│ + │ +
│ Fputchar(char) │ Fputchar(char)
@ -122,90 +122,85 @@ Class digramm
│ ┌─────────────┐ │ ┌─────────────┐
┌────────┐ ├────┤ FAccelEvent │ ┌────────┐ ├────┤ FAccelEvent │
│ FEvent │◄─┤ └─────────────┘ │ FEvent │◄─┤ └─────────────┘
└────┬───┘ │ ┌──────────────┐ └───┬────┘ │ ┌──────────────┐
:1 ├────┤ FResizeEvent │ :1 ├────┤ FResizeEvent │
: │ └──────────────┘ : │ └──────────────┘
: │ ┌────────────┐ : │ ┌────────────┐
: ├────┤ FShowEvent │ : ├────┤ FShowEvent │
: │ └────────────┘ : │ └────────────┘
: │ ┌────────────┐ : │ ┌────────────┐
: ├────┤ FHideEvent │ : ├────┤ FHideEvent │
: │ └────────────┘ : │ └────────────┘
: │ ┌─────────────┐ : │ ┌─────────────┐
: ├────┤ FCloseEvent │ : ├────┤ FCloseEvent │
: │ └─────────────┘ : │ └─────────────┘
: │ ┌─────────────┐ 1┌───────────┐ : │ ┌─────────────┐
: └────┤ FTimerEvent │ ┌-----------┤ FOptiMove │ : └────┤ FTimerEvent │
: └─────────────┘ : └───────────┘ : └─────────────┘
: : 1┌───────────┐ :
: ┌──────────────┐ ┌-----------┤ FOptiAttr │ : ┌──────────────┐
: ┌────┤ FApplication │ : └───────────┘ : ┌────┤ FApplication │
: │ └──────────────┘ : *┌─────────┐ : │ └──────────────┘
: │ ┌─────────┐1 : ┌--------┤ FString │ : │ ┌─────────┐
: ├────┤ FButton ├-----------------------------┐ : : └─────────┘ : ├────┤ FButton │
: │ └─────────┘ : : : *┌────────┐ : │ └─────────┘
: │ ┌────────┐1 : : ┌--------┤ FPoint │ : │ ┌────────┐
: ├────┤ FLabel ├------------------------------┐ : : └────────┘ : ├────┤ FLabel │
: │ └────────┘ : : : *┌───────┐ : │ └────────┘
: │ ┌───────────┐1 : : ┌--------┤ FRect │ : │ ┌───────────┐
: ├────┤ FLineEdit ├---------------------------┐ : : └───────┘ : ├────┤ FLineEdit │
: │ └───────────┘ : :1 :1 : │ └───────────┘
: │ ┌──────────────┐ ┌──────────────┐1 : ┌─┴──┴──┐ : │ ┌──────────────┐ ┌──────────────┐
:1 ├────┤ FButtonGroup │ ┌──┤ FRadioButton ├--┐ │ FTerm │◄────┐ :1 ├────┤ FButtonGroup │ ┌──┤ FRadioButton │
┌─────────┐ ┌────────┐ ┌─────┴───┐ │ └──────────────┘ │ └──────────────┘ : └───────┘ │ ┌────────┐ ┌────┴────┐ │ └──────────────┘ │ └──────────────┘
│ FObject │◄─┬─┤ FVTerm │◄───┤ FWidget │◄─┤ ┌───────────────┐ │ ┌───────────┐1 : ├─┤ FVTerm │◄──┤ FWidget │◄─┤ ┌───────────────┐ │ ┌───────────┐
└─────────┘ │ └────┬───┘ └───┬─┬───┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox ├-----┐ ┌─────────┐ │ └────────┘ └─────────┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox │
│ :1 :1:1 │ └───────────────┘ │ └───────────┘ : │ FObject │◄──┘ │ └───────────────┘ │ └───────────┘
┌───────┐ │ : : : │ ┌──────────────┐ │ ┌─────────┐1 : └─────────┘ │ ┌──────────────┐ │ ┌─────────┐
│ FTerm │◄─┘ └------------┐ : ├────┤ FProgressbar │ └──┤ FSwitch ├-------┐ ├────┤ FProgressbar │ └──┤ FSwitch │
└─┬───┬─┘ : : │ └──────────────┘ └─────────┘ : │ └──────────────┘ └─────────┘
:1 :1 : : │ ┌────────────┐ : *┌─────────┐ │ ┌────────────┐
: └------------------------┐ : ├────┤ FScrollbar │ ├---┤ FString │ ├────┤ FScrollbar │
: : : │ └────────────┘ : └─────────┘ │ └────────────┘
: 1┌───────────┐ : : │ ┌───────────┐1 : │ ┌───────────┐
└---┤ FOptiAttr │ : : ├────┤ FTextView ├---------------------------┘ ├────┤ FTextView │
: └───────────┘ : : │ └───────────┘ : │ └───────────┘
: 1┌───────────┐ : : │ ┌──────────┐1 *┌──────────────┐1 : │ ┌──────────┐1 *┌──────────────┐
└---┤ FOptiMove │ : : ├────┤ FListBox ├-------┤ FListBoxItem ├-----┘ ├────┤ FListBox ├-------┤ FListBoxItem │
└───────────┘ : : │ └──────────┘ └──────────────┘ : │ └──────────┘ └──────────────┘
: : │ ┌─────────────┐ : ┌─────────────┐1 │ 1┌───────────┐1 *┌───────────────┐
: : ├────┤ FScrollView │ : │ FTermBuffer ├---------------------------├────┤ FListView ├------┤ FListViewItem │
: : │ └─────────────┘ : └─────────────┘ │ └───────────┘ └───────────────┘
: : │ ┌────────────┐1 *┌────────────┐1 : │ ┌─────────────┐
: : │ ┌──┤ FStatusBar ├-----┤ FStatusKey ├-------┘ ├────┤ FScrollView │
: : │ │ └────┬───────┘ └────────────┘ : │ └─────────────┘
: : │ │ 1└----------------------------------┘ │ ┌────────────┐1 *┌────────────┐
: : │ ▼ ┌─────────────┐1 : │ ┌──┤ FStatusBar ├-----┤ FStatusKey │
: : ┌───┴─┴───┐ ┌─────────┐ ┌──┤ FFileDialog ├----┘ │ │ └────────────┘ └────────────┘
: : │ FWindow │◄─┤ FDialog │◄──┤ └─────────────┘ : │ │
: : └──┬──┬───┘ └────┬────┘ │ ┌─────────────┐1 : │ ▼ ┌─────────────┐
: : ▲ ▲ 1: └──┤ FMessageBox ├----┘ ┌───┴─┴───┐ ┌─────────┐ ┌──┤ FFileDialog │
: : │ │ : └─────────────┘ : │ FWindow │◄─┤ FDialog │◄──┤ └─────────────┘
: : │ │ └------------------------------┘ └──┬──┬───┘ └─────────┘ │ ┌─────────────┐
: : │ │ ┌──────────┐ : ▲ ▲ └──┤ FMessageBox │
: : │ └──────┤ FToolTip ├------------------------┘ │ │ └─────────────┘
: : │ └──────────┘ : │ │ ┌──────────┐
: : └───────────────┐ ┌──────────┐ : │ └──────┤ FToolTip │
: : │ ┌───┤ FMenuBar │ : │ └──────────┘
: : ┌───────────┐ └──────┤ └──────────┘ : └───────────────┐ ┌──────────┐
: : │ FMenuList │◄──────────┤ ┌───────┐ : │ ┌───┤ FMenuBar │
: : └────┬──────┘ └───┤ FMenu │◄──┐ : ┌───────────┐ └──────┤ └──────────┘
: : 1: └───────┘ │ : │ FMenuList │◄──────────┤ ┌───────┐
: : : ┌─────────────────┐ │ : └────┬──────┘ └───┤ FMenu │◄──┐
: : : │ FDialogListMenu ├───┘ : 1: └───────┘ │
: : : └─────────────────┘ : : ┌─────────────────┐ │
: : : ┌────────────────┐* : : │ FDialogListMenu ├───┘
: : : *┌───────────┐ ┌──┤ FCheckMenuItem ├-┐ : : └─────────────────┘
: : ├--┤ FMenuItem │◄─┤ └────────────────┘ : : : ┌────────────────┐*
: : : └───────────┘ │ ┌────────────────┐*: : : *┌───────────┐ ┌──┤ FCheckMenuItem ├-┐
: : : └──┤ FRadioMenuItem ├-┤ : ├--┤ FMenuItem │◄─┤ └────────────────┘ :
: : : └────────────────┘ : : : └───────────┘ │ ┌────────────────┐*:
: : └---------------------------------------┘ : : └──┤ FRadioMenuItem ├-┤
: └---------------------------------------------------┘ : └────────────────┘ :
: *┌────────┐ └---------------------------------------┘
└---┤ FPoint │
: └────────┘
: *┌───────┐
└---┤ FRect │
└───────┘
</pre> </pre>

View File

@ -17,89 +17,85 @@
│ ┌─────────────┐ │ ┌─────────────┐
┌────────┐ ├────┤ FAccelEvent │ ┌────────┐ ├────┤ FAccelEvent │
│ FEvent │◄─┤ └─────────────┘ │ FEvent │◄─┤ └─────────────┘
└────┬───┘ │ ┌──────────────┐ └───┬────┘ │ ┌──────────────┐
:1 ├────┤ FResizeEvent │ :1 ├────┤ FResizeEvent │
: │ └──────────────┘ : │ └──────────────┘
: │ ┌────────────┐ : │ ┌────────────┐
: ├────┤ FShowEvent │ : ├────┤ FShowEvent │
: │ └────────────┘ : │ └────────────┘
: │ ┌────────────┐ : │ ┌────────────┐
: ├────┤ FHideEvent │ : ├────┤ FHideEvent │
: │ └────────────┘ : │ └────────────┘
: │ ┌─────────────┐ : │ ┌─────────────┐
: ├────┤ FCloseEvent │ : ├────┤ FCloseEvent │
: │ └─────────────┘ : │ └─────────────┘
: │ ┌─────────────┐ 1┌───────────┐ : │ ┌─────────────┐
: └────┤ FTimerEvent │ ┌-----------┤ FOptiMove │ : └────┤ FTimerEvent │
: └─────────────┘ : └───────────┘ : └─────────────┘
: : 1┌───────────┐ :
: ┌──────────────┐ ┌-----------┤ FOptiAttr │ : ┌──────────────┐
: ┌────┤ FApplication │ : └───────────┘ : ┌────┤ FApplication │
: │ └──────────────┘ : *┌─────────┐ : │ └──────────────┘
: │ ┌─────────┐1 : ┌--------┤ FString │ : │ ┌─────────┐
: ├────┤ FButton ├-----------------------------┐ : : └─────────┘ : ├────┤ FButton │
: │ └─────────┘ : : : *┌────────┐ : │ └─────────┘
: │ ┌────────┐1 : : ┌--------┤ FPoint │ : │ ┌────────┐
: ├────┤ FLabel ├------------------------------┐ : : └────────┘ : ├────┤ FLabel │
: │ └────────┘ : : : *┌───────┐ : │ └────────┘
: │ ┌───────────┐1 : : ┌--------┤ FRect │ : │ ┌───────────┐
: ├────┤ FLineEdit ├---------------------------┐ : : └───────┘ : ├────┤ FLineEdit │
: │ └───────────┘ : :1 :1 : │ └───────────┘
: │ ┌──────────────┐ ┌──────────────┐1 : ┌─┴──┴──┐ : │ ┌──────────────┐ ┌──────────────┐
:1 ├────┤ FButtonGroup │ ┌──┤ FRadioButton ├--┐ │ FTerm │◄────┐ :1 ├────┤ FButtonGroup │ ┌──┤ FRadioButton │
┌─────────┐ ┌────────┐ ┌─────┴───┐ │ └──────────────┘ │ └──────────────┘ : └───────┘ │ ┌────────┐ ┌────┴────┐ │ └──────────────┘ │ └──────────────┘
│ FObject │◄─┬─┤ FVTerm │◄───┤ FWidget │◄─┤ ┌───────────────┐ │ ┌───────────┐1 : ├─┤ FVTerm │◄──┤ FWidget │◄─┤ ┌───────────────┐ │ ┌───────────┐
└─────────┘ │ └────┬───┘ └───┬─┬───┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox ├-----┐ ┌─────────┐ │ └────────┘ └─────────┘ ├────┤ FToggleButton │◄─┼──┤ FCheckBox │
│ :1 :1:1 │ └───────────────┘ │ └───────────┘ : │ FObject │◄──┘ │ └───────────────┘ │ └───────────┘
┌───────┐ │ : : : │ ┌──────────────┐ │ ┌─────────┐1 : └─────────┘ │ ┌──────────────┐ │ ┌─────────┐
│ FTerm │◄─┘ └------------┐ : ├────┤ FProgressbar │ └──┤ FSwitch ├-------┐ ├────┤ FProgressbar │ └──┤ FSwitch │
└─┬───┬─┘ : : │ └──────────────┘ └─────────┘ : │ └──────────────┘ └─────────┘
:1 :1 : : │ ┌────────────┐ : *┌─────────┐ │ ┌────────────┐
: └------------------------┐ : ├────┤ FScrollbar │ ├---┤ FString │ ├────┤ FScrollbar │
: : : │ └────────────┘ : └─────────┘ │ └────────────┘
: 1┌───────────┐ : : │ ┌───────────┐1 : │ ┌───────────┐
└---┤ FOptiAttr │ : : ├────┤ FTextView ├---------------------------┘ ├────┤ FTextView │
: └───────────┘ : : │ └───────────┘ : │ └───────────┘
: 1┌───────────┐ : : │ ┌──────────┐1 *┌──────────────┐1 : │ ┌──────────┐1 *┌──────────────┐
└---┤ FOptiMove │ : : ├────┤ FListBox ├-------┤ FListBoxItem ├-----┘ ├────┤ FListBox ├-------┤ FListBoxItem │
└───────────┘ : : │ └──────────┘ └──────────────┘ : │ └──────────┘ └──────────────┘
: : │ ┌─────────────┐ : ┌─────────────┐1 │ 1┌───────────┐1 *┌───────────────┐
: : ├────┤ FScrollView │ : │ FTermBuffer ├---------------------------├────┤ FListView ├------┤ FListViewItem │
: : │ └─────────────┘ : └─────────────┘ │ └───────────┘ └───────────────┘
: : │ ┌────────────┐1 *┌────────────┐1 : │ ┌─────────────┐
: : │ ┌──┤ FStatusBar ├-----┤ FStatusKey ├-------┘ ├────┤ FScrollView │
: : │ │ └────┬───────┘ └────────────┘ : │ └─────────────┘
: : │ │ 1└----------------------------------┘ │ ┌────────────┐1 *┌────────────┐
: : │ ▼ ┌─────────────┐1 : │ ┌──┤ FStatusBar ├-----┤ FStatusKey │
: : ┌───┴─┴───┐ ┌─────────┐ ┌──┤ FFileDialog ├----┘ │ │ └────────────┘ └────────────┘
: : │ FWindow │◄─┤ FDialog │◄──┤ └─────────────┘ : │ │
: : └──┬──┬───┘ └────┬────┘ │ ┌─────────────┐1 : │ ▼ ┌─────────────┐
: : ▲ ▲ 1: └──┤ FMessageBox ├----┘ ┌───┴─┴───┐ ┌─────────┐ ┌──┤ FFileDialog │
: : │ │ : └─────────────┘ : │ FWindow │◄─┤ FDialog │◄──┤ └─────────────┘
: : │ │ └------------------------------┘ └──┬──┬───┘ └─────────┘ │ ┌─────────────┐
: : │ │ ┌──────────┐ : ▲ ▲ └──┤ FMessageBox │
: : │ └──────┤ FToolTip ├------------------------┘ │ │ └─────────────┘
: : │ └──────────┘ : │ │ ┌──────────┐
: : └───────────────┐ ┌──────────┐ : │ └──────┤ FToolTip │
: : │ ┌───┤ FMenuBar │ : │ └──────────┘
: : ┌───────────┐ └──────┤ └──────────┘ : └───────────────┐ ┌──────────┐
: : │ FMenuList │◄──────────┤ ┌───────┐ : │ ┌───┤ FMenuBar │
: : └────┬──────┘ └───┤ FMenu │◄──┐ : ┌───────────┐ └──────┤ └──────────┘
: : 1: └───────┘ │ : │ FMenuList │◄──────────┤ ┌───────┐
: : : ┌─────────────────┐ │ : └────┬──────┘ └───┤ FMenu │◄──┐
: : : │ FDialogListMenu ├───┘ : 1: └───────┘ │
: : : └─────────────────┘ : : ┌─────────────────┐ │
: : : ┌────────────────┐* : : │ FDialogListMenu ├───┘
: : : *┌───────────┐ ┌──┤ FCheckMenuItem ├-┐ : : └─────────────────┘
: : ├--┤ FMenuItem │◄─┤ └────────────────┘ : : : ┌────────────────┐*
: : : └───────────┘ │ ┌────────────────┐*: : : *┌───────────┐ ┌──┤ FCheckMenuItem ├-┐
: : : └──┤ FRadioMenuItem ├-┤ : ├--┤ FMenuItem │◄─┤ └────────────────┘ :
: : : └────────────────┘ : : : └───────────┘ │ ┌────────────────┐*:
: : └---------------------------------------┘ : : └──┤ FRadioMenuItem ├-┤
: └---------------------------------------------------┘ : └────────────────┘ :
: *┌────────┐ └---------------------------------------┘
└---┤ FPoint │
: └────────┘
: *┌───────┐
└---┤ FRect │
└───────┘

View File

@ -122,7 +122,8 @@ FString FListViewItem::getText (int column) const
|| column > int(column_value.size()) ) || column > int(column_value.size()) )
return *fc::empty_string; return *fc::empty_string;
return column_value[uInt(column - 1)]; column--; // Convert column position to address offset (index)
return column_value[uInt(column)];
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -134,21 +135,22 @@ void FListViewItem::setText (int column, const FString& text)
return; return;
FObject* parent = getParent(); FObject* parent = getParent();
column--; // Convert column position to address offset (index)
if ( parent && parent->isInstanceOf("FListView") ) if ( parent && parent->isInstanceOf("FListView") )
{ {
FListView* listview = static_cast<FListView*>(parent); FListView* listview = static_cast<FListView*>(parent);
if ( ! listview->header[uInt(column - 1)].fixed_width ) if ( ! listview->header[uInt(column)].fixed_width )
{ {
int length = int(text.getLength()); int length = int(text.getLength());
if ( length > listview->header[uInt(column - 1)].width ) if ( length > listview->header[uInt(column)].width )
listview->header[uInt(column - 1)].width = length; listview->header[uInt(column)].width = length;
} }
} }
column_value[uInt(column - 1)] = text; column_value[uInt(column)] = text;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -250,7 +252,8 @@ fc::text_alignment FListView::getColumnAlignment (int column) const
if ( column < 1 || header.empty() || column > int(header.size()) ) if ( column < 1 || header.empty() || column > int(header.size()) )
return fc::alignLeft; return fc::alignLeft;
return header[uInt(column - 1)].alignment; column--; // Convert column position to address offset (index)
return header[uInt(column)].alignment;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -261,7 +264,8 @@ FString FListView::getColumnText (int column) const
if ( column < 1 || header.empty() || column > int(header.size()) ) if ( column < 1 || header.empty() || column > int(header.size()) )
return *fc::empty_string; return *fc::empty_string;
return header[uInt(column - 1)].name; column--; // Convert column position to address offset (index)
return header[uInt(column)].name;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -291,7 +295,8 @@ void FListView::setColumnAlignment (int column, fc::text_alignment align)
if ( column < 1 || header.empty() || column > int(header.size()) ) if ( column < 1 || header.empty() || column > int(header.size()) )
{beep();return;} {beep();return;}
header[uInt(column - 1)].alignment = align; column--; // Convert column position to address offset (index)
header[uInt(column)].alignment = align;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -302,15 +307,17 @@ void FListView::setColumnText (int column, const FString& label)
if ( column < 1 || header.empty() || column > int(header.size()) ) if ( column < 1 || header.empty() || column > int(header.size()) )
return; return;
if ( ! header[uInt(column - 1)].fixed_width ) column--; // Convert column position to address offset (index)
if ( ! header[uInt(column)].fixed_width )
{ {
int length = int(label.getLength()); int length = int(label.getLength());
if ( length > header[uInt(column - 1)].width ) if ( length > header[uInt(column)].width )
header[uInt(column - 1)].width = length; header[uInt(column)].width = length;
} }
header[uInt(column - 1)].name = label; header[uInt(column)].name = label;
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
@ -337,7 +344,7 @@ void FListView::insert (FListViewItem* item)
{ {
static const int padding_space = 1; static const int padding_space = 1;
int line_width = padding_space; // leading space int line_width = padding_space; // leading space
uInt column = 1; uInt column_idx = 0;
uInt entries = uInt(item->column_value.size()); uInt entries = uInt(item->column_value.size());
headerItems::iterator iter; headerItems::iterator iter;
@ -353,8 +360,8 @@ void FListView::insert (FListViewItem* item)
{ {
int len; int len;
if ( column <= entries ) if ( column_idx < entries )
len = int(item->column_value[column - 1].getLength()); len = int(item->column_value[column_idx].getLength());
else else
len = 0; len = 0;
@ -363,7 +370,7 @@ void FListView::insert (FListViewItem* item)
} }
line_width += (*iter).width + padding_space; // width + tailing space line_width += (*iter).width + padding_space; // width + tailing space
column++; column_idx++;
++iter; ++iter;
} }
@ -1211,7 +1218,7 @@ void FListView::drawList()
for (uInt y = start; y < end; y++) for (uInt y = start; y < end; y++)
{ {
bool isCurrentLine = bool(y + uInt(yoffset) + 1 == uInt(current)); bool isCurrentLine = bool( y + uInt(yoffset) + 1 == uInt(current) );
setPrintPos (2, 2 + int(y)); setPrintPos (2, 2 + int(y));
setColor (wc.list_fg, wc.list_bg); setColor (wc.list_fg, wc.list_bg);
@ -1250,14 +1257,17 @@ void FListView::drawList()
// print columns // print columns
if ( ! (*iter)->column_value.empty() ) if ( ! (*iter)->column_value.empty() )
{ {
for (uInt i = 0; i < (*iter)->column_value.size(); i++) for (uInt i = 0; i < (*iter)->column_value.size(); )
{ {
static const int leading_space = 1; static const int leading_space = 1;
static const int ellipsis_length = 2; static const int ellipsis_length = 2;
FString text = (*iter)->column_value[i]; FString text = (*iter)->column_value[i];
int width = header[i].width; int width = header[i].width;
uInt txt_length = text.getLength(); uInt txt_length = text.getLength();
fc::text_alignment align = getColumnAlignment(int(i + 1)); // Increment the value of i for the column position
// and the next iteration
i++;
fc::text_alignment align = getColumnAlignment(int(i));
uInt align_offset = getAlignOffset (align, txt_length, uInt(width)); uInt align_offset = getAlignOffset (align, txt_length, uInt(width));
if ( align_offset > 0 ) if ( align_offset > 0 )
@ -1266,7 +1276,8 @@ void FListView::drawList()
if ( align_offset + txt_length <= uInt(width) ) if ( align_offset + txt_length <= uInt(width) )
{ {
line += text.left(width); line += text.left(width);
line += FString (leading_space + width - int(align_offset + txt_length), ' '); line += FString ( leading_space + width
- int(align_offset + txt_length), ' ');
} }
else if ( align == fc::alignRight ) else if ( align == fc::alignRight )
{ {