M module-gui/gui/widgets/ListViewEngine.cpp => module-gui/gui/widgets/ListViewEngine.cpp +30 -31
@@ 18,7 18,7 @@ namespace gui
clear();
}
- void ListViewEngine::setElementsCount(unsigned int count)
+ void ListViewEngine::setElementsCount(unsigned count)
{
if ((elementsCount != count) || (elementsCount == listview::nPos)) {
onElementsCountChanged(count);
@@ 55,7 55,7 @@ namespace gui
return elementsCount == 0;
}
- void ListViewEngine::rebuildList(listview::RebuildType rebuildType, unsigned int dataOffset, bool forceRebuild)
+ void ListViewEngine::rebuildList(listview::RebuildType rebuildType, unsigned dataOffset, bool forceRebuild)
{
if (pageLoaded || forceRebuild) {
@@ 87,7 87,7 @@ namespace gui
storedFocusIndex = listview::nPos;
}
- void ListViewEngine::prepareOnOffsetRebuild(unsigned int dataOffset)
+ void ListViewEngine::prepareOnOffsetRebuild(unsigned dataOffset)
{
if (dataOffset < elementsCount) {
startIndex = dataOffset;
@@ 105,13 105,14 @@ namespace gui
}
}
- void ListViewEngine::prepareOnPageElementRebuild(unsigned int dataOffset)
+ void ListViewEngine::prepareOnPageElementRebuild(unsigned dataOffset)
{
- startIndex = (dataOffset / calculateMaxItemsOnPage()) * calculateMaxItemsOnPage();
- storedFocusIndex = dataOffset % calculateMaxItemsOnPage();
+ const auto maxItemsOnPage = calculateMaxItemsOnPage();
+ startIndex = (dataOffset / maxItemsOnPage) * maxItemsOnPage;
+ storedFocusIndex = dataOffset % maxItemsOnPage;
}
- void ListViewEngine::setup(listview::RebuildType rebuildType, unsigned int dataOffset)
+ void ListViewEngine::setup(listview::RebuildType rebuildType, unsigned dataOffset)
{
switch (rebuildType) {
case listview::RebuildType::Full:
@@ 147,12 148,12 @@ namespace gui
clear();
}
- unsigned int ListViewEngine::getFocusItemIndex()
+ unsigned ListViewEngine::getFocusItemIndex()
{
auto index = body->getFocusItemIndex();
if (direction == listview::Direction::Top) {
- int position = currentPageSize - 1 - index;
+ const int position = currentPageSize - 1 - index;
index = std::abs(position);
}
@@ 176,7 177,7 @@ namespace gui
{
body->setFocusItem(nullptr);
- while (auto el = body->children.back()) {
+ while (const auto el = body->children.back()) {
if (el->type == ItemType::LIST_ITEM) {
@@ 187,8 188,9 @@ namespace gui
body->erase(el);
}
}
- else
+ else {
body->erase(el);
+ }
}
}
@@ 242,16 244,18 @@ namespace gui
Order ListViewEngine::getOrderFromDirection() const noexcept
{
- if (direction == listview::Direction::Bottom)
+ if (direction == listview::Direction::Bottom) {
return Order::Next;
+ }
return Order::Previous;
}
Order ListViewEngine::getOppositeOrderFromDirection() const noexcept
{
- if (direction == listview::Direction::Bottom)
+ if (direction == listview::Direction::Bottom) {
return Order::Previous;
+ }
return Order::Next;
}
@@ 306,9 310,7 @@ namespace gui
{
currentPageSize = 0;
- ListItem *item = nullptr;
-
- while ((item = provider->getItem(getOrderFromDirection())) != nullptr) {
+ while (const auto item = provider->getItem(getOrderFromDirection())) {
body->addWidget(item);
@@ 340,7 342,7 @@ namespace gui
if (requestCompleteData) {
- unsigned int page = 0;
+ unsigned page = 0;
auto pageStartIndex = 0;
clear();
@@ 401,7 403,7 @@ namespace gui
}
}
- void ListViewEngine::onElementsCountChanged(unsigned int count)
+ void ListViewEngine::onElementsCountChanged(unsigned count)
{
if (elementsCount == 0 || count == 0) {
shouldCallEmptyListCallbacks = true;
@@ 433,9 435,9 @@ namespace gui
{
if (currentPageSize != body->getVisibleChildrenCount()) {
- unsigned int diff = currentPageSize < body->getVisibleChildrenCount()
- ? 0
- : currentPageSize - body->getVisibleChildrenCount();
+ const unsigned diff = currentPageSize < body->getVisibleChildrenCount()
+ ? 0
+ : currentPageSize - body->getVisibleChildrenCount();
currentPageSize = body->getVisibleChildrenCount();
if (direction == listview::Direction::Top) {
@@ 453,24 455,21 @@ namespace gui
}
}
- unsigned int ListViewEngine::calculateMaxItemsOnPage()
+ unsigned ListViewEngine::calculateMaxItemsOnPage()
{
assert(provider->getMinimalItemSpaceRequired() != 0);
- auto count = body->getPrimarySize() / provider->getMinimalItemSpaceRequired();
-
+ const auto count = body->getPrimarySize() / provider->getMinimalItemSpaceRequired();
return count;
}
- unsigned int ListViewEngine::calculateLimit(listview::Direction value)
+ unsigned ListViewEngine::calculateLimit(listview::Direction value)
{
- auto minLimit =
- (2 * currentPageSize > calculateMaxItemsOnPage() ? 2 * currentPageSize : calculateMaxItemsOnPage());
+ const auto minLimit = std::max(2 * currentPageSize, calculateMaxItemsOnPage());
+
if (value == listview::Direction::Bottom) {
- return (minLimit + startIndex <= elementsCount ? minLimit : elementsCount - startIndex);
- }
- else {
- return minLimit < startIndex ? minLimit : startIndex;
+ return (minLimit + startIndex <= elementsCount) ? minLimit : (elementsCount - startIndex);
}
+ return std::min(minLimit, startIndex);
}
bool ListViewEngine::requestNextPage()
M module-gui/gui/widgets/ListViewEngine.hpp => module-gui/gui/widgets/ListViewEngine.hpp +21 -21
@@ 10,7 10,7 @@ namespace gui
{
namespace listview
{
- inline constexpr auto nPos = std::numeric_limits<unsigned int>::max();
+ inline constexpr auto nPos = std::numeric_limits<unsigned>::max();
/// Possible List scrolling directions
enum class Direction
@@ 59,24 59,24 @@ namespace gui
struct ListViewScrollSetupData
{
- const unsigned int storedStartIndex;
- const unsigned int currentPage;
- const unsigned int pagesCount;
+ const unsigned storedStartIndex;
+ const unsigned currentPage;
+ const unsigned pagesCount;
};
struct ListViewScrollUpdateData
{
- const unsigned int startIndex;
- const unsigned int listPageSize;
- const unsigned int elementsCount;
- const unsigned int elementMinimalSpaceRequired;
+ const unsigned startIndex;
+ const unsigned listPageSize;
+ const unsigned elementsCount;
+ const unsigned elementMinimalSpaceRequired;
const listview::Direction direction;
const Boundaries boundaries;
};
class ListItemProvider;
- using rebuildRequest = std::pair<listview::RebuildType, unsigned int>;
+ using rebuildRequest = std::pair<listview::RebuildType, unsigned>;
class ListViewEngine
{
@@ 85,15 85,15 @@ namespace gui
virtual ~ListViewEngine();
/// First requested index from provider
- unsigned int startIndex = 0;
+ unsigned startIndex = 0;
void setStartIndex();
/// Recalculating startIndex if list internal conditions (i.e. size has changed).
void recalculateStartIndex();
/// Calculate max items on page based on provided minimal item in axis size from provider.
/// That method is used when full list render can be omitted.
- unsigned int calculateMaxItemsOnPage();
+ unsigned calculateMaxItemsOnPage();
/// Calculates request elements count to full next request page with small excess
- unsigned int calculateLimit(listview::Direction value = listview::Direction::Bottom);
+ unsigned calculateLimit(listview::Direction value = listview::Direction::Bottom);
/// Recalculate startIndex on body resize requests
void recalculateOnBoxRequestedResize();
@@ 105,13 105,13 @@ namespace gui
void fillFirstPage();
/// Stored index of focused element before new data request
- unsigned int storedFocusIndex = listview::nPos;
- [[nodiscard]] unsigned int getFocusItemIndex();
+ unsigned storedFocusIndex = listview::nPos;
+ [[nodiscard]] unsigned getFocusItemIndex();
/// Total provider elements count
unsigned int elementsCount = listview::nPos;
- void setElementsCount(unsigned int count);
- void onElementsCountChanged(unsigned int count);
+ void setElementsCount(unsigned count);
+ void onElementsCountChanged(unsigned count);
bool shouldCallEmptyListCallbacks = false;
void checkEmptyListCallbacks();
@@ 119,7 119,7 @@ namespace gui
std::shared_ptr<ListItemProvider> provider = nullptr;
/// Count of elements displayed on current page
- unsigned int currentPageSize = 0;
+ unsigned currentPageSize = 0;
/// Flag indicating that page has been loaded
bool pageLoaded = true;
/// Handle focusing method
@@ 145,11 145,11 @@ namespace gui
/// Stored last executed rebuildRequest
rebuildRequest lastRebuildRequest = {listview::RebuildType::Full, 0};
/// Setup method for list rebuild request
- void setup(listview::RebuildType rebuildType, unsigned int dataOffset = 0);
+ void setup(listview::RebuildType rebuildType, unsigned dataOffset = 0);
void prepareFullRebuild();
- void prepareOnOffsetRebuild(unsigned int dataOffset);
+ void prepareOnOffsetRebuild(unsigned dataOffset);
void prepareInPlaceRebuild();
- void prepareOnPageElementRebuild(unsigned int dataOffset);
+ void prepareOnPageElementRebuild(unsigned dataOffset);
/// List boundaries types
Boundaries boundaries = Boundaries::Fixed;
@@ 179,7 179,7 @@ namespace gui
/// send list rebuild request
void rebuildList(listview::RebuildType rebuildType = listview::RebuildType::Full,
- unsigned int dataOffset = 0,
+ unsigned dataOffset = 0,
bool forceRebuild = false);
/// In case of elements count change there can be a need to resend request in case of having one async query for
/// count and records.