Grid: ability to set how many columns/rows get to measure widget size.

This commit is contained in:
and3md 2017-06-29 20:15:17 +02:00
parent f152eacf59
commit f458c4d9d0
1 changed files with 36 additions and 10 deletions

View File

@ -59,7 +59,7 @@ import dlangui.widgets.scroll;
import dlangui.widgets.menu;
import std.conv;
import std.container.rbtree;
import std.algorithm : equal;
import std.algorithm : equal, min;
/// cellPopupMenu signal handler interface
interface CellPopupMenuHandler {
@ -1534,6 +1534,32 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter, MenuItemActionHandler
return sz;
}
protected int _minVisibleCols = 2;
protected int _minVisibleRows = 2;
/// returns number of columns from 0 that are taken to measure minimum visible width
@property int minVisibleCols() {
return _minVisibleCols;
}
/// sets number of columns from 0 that are taken to measure minimum visible width
@property void minVisibleCols(int newMinVisibleCols) {
_minVisibleCols = newMinVisibleCols;
requestLayout();
}
/// returns number of rows from 0 that are taken to measure minimum visible height
@property int minVisibleRows() {
return _minVisibleRows;
}
/// sets number of rows from 0 that are taken to measure minimum visible height, if there are too little rows last row height is multiplied
@property void minVisibleRows(int newMinVisibleRows) {
_minVisibleRows = newMinVisibleRows;
requestLayout();
}
/// calculate minimum size of widget
override Point minimumVisibleContentSize() {
Point sz;
@ -1542,18 +1568,18 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter, MenuItemActionHandler
sz.y = 100;
return sz;
}
// width:
if (_cols < 2)
sz.x = _colWidths[0];
else
sz.x = _colWidths[0] + _colWidths[1];
for (int i = 0 ; i < min(_cols, _minVisibleCols) ; i++)
sz.x += _colWidths[i];
// height
if (_rows < 2)
sz.y = _rowHeights[0];
else
sz.y = _rowHeights[0] + _rowHeights[1];
for (int i = 0 ; i < min(_rows, _minVisibleRows) ; i++)
sz.y += _rowHeights[i];
if (_rows<_minVisibleRows)
sz.y += (_minVisibleRows - _rows) * _rowHeights[_rows-1];
return sz;
}