mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-03 07:35:48 +08:00
refs #614, allow to resize view by presize algorithm
This commit is contained in:
@@ -94,6 +94,7 @@ namespace BlackGui
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CViewBaseNonTemplate::setFilterDialog(CFilterDialog *filterDialog)
|
||||
{
|
||||
this->setFilterWidgetImpl(filterDialog);
|
||||
@@ -250,7 +251,7 @@ namespace BlackGui
|
||||
if (menu.actions().size() > items) { menu.addSeparator(); }
|
||||
|
||||
// resizing
|
||||
menu.addAction(BlackMisc::CIcons::resize16(), "Full resize", this, &CViewBaseNonTemplate::fullResizeToContents);
|
||||
menu.addAction(BlackMisc::CIcons::resize16(), "Resize", this, &CViewBaseNonTemplate::presizeOrFullResizeToContents);
|
||||
|
||||
// resize to content might decrease performance,
|
||||
// so I only allow changing to "content resizing" if size matches
|
||||
@@ -535,6 +536,11 @@ namespace BlackGui
|
||||
this->setVisible(true);
|
||||
}
|
||||
|
||||
void CViewBaseNonTemplate::presizeOrFullResizeToContents()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void CViewBaseNonTemplate::ps_customMenuRequested(QPoint pos)
|
||||
{
|
||||
QMenu menu;
|
||||
@@ -650,7 +656,7 @@ namespace BlackGui
|
||||
// when we will not resize, we might presize
|
||||
if (presizeThresholdReached)
|
||||
{
|
||||
const int presizeRandomElements = container.size() > 1000 ? container.size() / 100 : container.size() / 40;
|
||||
const int presizeRandomElements = this->getPresizeRandomElementsSize(container.size());
|
||||
if (presizeRandomElements > 0)
|
||||
{
|
||||
this->m_model->update(container.sampleElements(presizeRandomElements), false);
|
||||
@@ -677,6 +683,13 @@ namespace BlackGui
|
||||
return c;
|
||||
}
|
||||
|
||||
int CViewBaseNonTemplate::getPresizeRandomElementsSize(int containerSize) const
|
||||
{
|
||||
containerSize = containerSize >= 0 ? containerSize : this->rowCount();
|
||||
const int presizeRandomElements = containerSize > 1000 ? containerSize / 100 : containerSize / 40;
|
||||
return presizeRandomElements;
|
||||
}
|
||||
|
||||
template <class ModelClass, class ContainerType, class ObjectType>
|
||||
BlackMisc::CWorker *CViewBase<ModelClass, ContainerType, ObjectType>::updateContainerAsync(const ContainerType &container, bool sort, bool resize)
|
||||
{
|
||||
@@ -839,6 +852,27 @@ namespace BlackGui
|
||||
return delta;
|
||||
}
|
||||
|
||||
template <class ModelClass, class ContainerType, class ObjectType>
|
||||
void CViewBase<ModelClass, ContainerType, ObjectType>::presizeOrFullResizeToContents()
|
||||
{
|
||||
const int rc = this->rowCount();
|
||||
if (rc > ResizeSubsetThreshold)
|
||||
{
|
||||
const int presizeRandomElements = this->getPresizeRandomElementsSize(rc);
|
||||
if (presizeRandomElements > 0)
|
||||
{
|
||||
const ContainerType containerBackup(this->container());
|
||||
this->m_model->update(containerBackup.sampleElements(presizeRandomElements), false);
|
||||
this->fullResizeToContents();
|
||||
this->m_model->update(containerBackup, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this->fullResizeToContents();
|
||||
}
|
||||
}
|
||||
|
||||
template <class ModelClass, class ContainerType, class ObjectType>
|
||||
int CViewBase<ModelClass, ContainerType, ObjectType>::rowCount() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user