diff --git a/src/dlangui/widgets/grid.d b/src/dlangui/widgets/grid.d index 27844b0b..8d450b48 100644 --- a/src/dlangui/widgets/grid.d +++ b/src/dlangui/widgets/grid.d @@ -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; }