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 dlangui.widgets.menu;
import std.conv; import std.conv;
import std.container.rbtree; import std.container.rbtree;
import std.algorithm : equal; import std.algorithm : equal, min;
/// cellPopupMenu signal handler interface /// cellPopupMenu signal handler interface
interface CellPopupMenuHandler { interface CellPopupMenuHandler {
@ -1534,6 +1534,32 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter, MenuItemActionHandler
return sz; 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 /// calculate minimum size of widget
override Point minimumVisibleContentSize() { override Point minimumVisibleContentSize() {
Point sz; Point sz;
@ -1542,17 +1568,17 @@ class GridWidgetBase : ScrollWidgetBase, GridModelAdapter, MenuItemActionHandler
sz.y = 100; sz.y = 100;
return sz; return sz;
} }
// width: // width:
if (_cols < 2) for (int i = 0 ; i < min(_cols, _minVisibleCols) ; i++)
sz.x = _colWidths[0]; sz.x += _colWidths[i];
else
sz.x = _colWidths[0] + _colWidths[1];
// height // height
if (_rows < 2) for (int i = 0 ; i < min(_rows, _minVisibleRows) ; i++)
sz.y = _rowHeights[0]; sz.y += _rowHeights[i];
else
sz.y = _rowHeights[0] + _rowHeights[1]; if (_rows<_minVisibleRows)
sz.y += (_minVisibleRows - _rows) * _rowHeights[_rows-1];
return sz; return sz;
} }