GH-2119 Update group view scrollbar when the size of rows doesn't change
Previously, it would only update when you resize the window horizontally enough to change the number of icons that fit in a row.
This commit is contained in:
parent
3277b820a7
commit
0bcb24502e
@ -104,37 +104,9 @@ inline bool operator<(const LocaleString &lhs, const LocaleString &rhs)
|
|||||||
return (QString::localeAwareCompare(lhs, rhs) < 0);
|
return (QString::localeAwareCompare(lhs, rhs) < 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroupView::updateGeometries()
|
void GroupView::updateScrollbar()
|
||||||
{
|
{
|
||||||
geometryCache.clear();
|
|
||||||
int previousScroll = verticalScrollBar()->value();
|
int previousScroll = verticalScrollBar()->value();
|
||||||
|
|
||||||
QMap<LocaleString, VisualGroup *> cats;
|
|
||||||
|
|
||||||
for (int i = 0; i < model()->rowCount(); ++i)
|
|
||||||
{
|
|
||||||
const QString groupName = model()->index(i, 0).data(GroupViewRoles::GroupRole).toString();
|
|
||||||
if (!cats.contains(groupName))
|
|
||||||
{
|
|
||||||
VisualGroup *old = this->category(groupName);
|
|
||||||
if (old)
|
|
||||||
{
|
|
||||||
auto cat = new VisualGroup(old);
|
|
||||||
cats.insert(groupName, cat);
|
|
||||||
cat->update();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
auto cat = new VisualGroup(groupName, this);
|
|
||||||
cats.insert(groupName, cat);
|
|
||||||
cat->update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
qDeleteAll(m_groups);
|
|
||||||
m_groups = cats.values();
|
|
||||||
|
|
||||||
if (m_groups.isEmpty())
|
if (m_groups.isEmpty())
|
||||||
{
|
{
|
||||||
verticalScrollBar()->setRange(0, 0);
|
verticalScrollBar()->setRange(0, 0);
|
||||||
@ -167,7 +139,38 @@ void GroupView::updateGeometries()
|
|||||||
}
|
}
|
||||||
|
|
||||||
verticalScrollBar()->setValue(qMin(previousScroll, verticalScrollBar()->maximum()));
|
verticalScrollBar()->setValue(qMin(previousScroll, verticalScrollBar()->maximum()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupView::updateGeometries()
|
||||||
|
{
|
||||||
|
geometryCache.clear();
|
||||||
|
|
||||||
|
QMap<LocaleString, VisualGroup *> cats;
|
||||||
|
|
||||||
|
for (int i = 0; i < model()->rowCount(); ++i)
|
||||||
|
{
|
||||||
|
const QString groupName = model()->index(i, 0).data(GroupViewRoles::GroupRole).toString();
|
||||||
|
if (!cats.contains(groupName))
|
||||||
|
{
|
||||||
|
VisualGroup *old = this->category(groupName);
|
||||||
|
if (old)
|
||||||
|
{
|
||||||
|
auto cat = new VisualGroup(old);
|
||||||
|
cats.insert(groupName, cat);
|
||||||
|
cat->update();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto cat = new VisualGroup(groupName, this);
|
||||||
|
cats.insert(groupName, cat);
|
||||||
|
cat->update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qDeleteAll(m_groups);
|
||||||
|
m_groups = cats.values();
|
||||||
|
updateScrollbar();
|
||||||
viewport()->update();
|
viewport()->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -511,6 +514,10 @@ void GroupView::resizeEvent(QResizeEvent *event)
|
|||||||
m_currentItemsPerRow = newItemsPerRow;
|
m_currentItemsPerRow = newItemsPerRow;
|
||||||
updateGeometries();
|
updateGeometries();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
updateScrollbar();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GroupView::dragEnterEvent(QDragEnterEvent *event)
|
void GroupView::dragEnterEvent(QDragEnterEvent *event)
|
||||||
|
@ -96,6 +96,8 @@ protected:
|
|||||||
|
|
||||||
void startDrag(Qt::DropActions supportedActions) override;
|
void startDrag(Qt::DropActions supportedActions) override;
|
||||||
|
|
||||||
|
void updateScrollbar();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend struct VisualGroup;
|
friend struct VisualGroup;
|
||||||
QList<VisualGroup *> m_groups;
|
QList<VisualGroup *> m_groups;
|
||||||
|
Loading…
Reference in New Issue
Block a user