diff --git a/src/blackgui/loadindicator.cpp b/src/blackgui/loadindicator.cpp index 9aca49a96..eb4cc7c5d 100644 --- a/src/blackgui/loadindicator.cpp +++ b/src/blackgui/loadindicator.cpp @@ -103,10 +103,17 @@ namespace BlackGui this->paint(p); } + bool CLoadIndicator::isParentVisible() const + { + if (this->parentWidget()) { return parentWidget()->isVisible(); } + return false; + } + void CLoadIndicator::paint(QPainter &painter) const { if (!m_displayedWhenStopped && !isAnimated()) { return; } if (!this->isVisible() || !this->isEnabled()) { return; } + if (!isParentVisible()) { return; } int width = qMin(this->width(), this->height()); painter.setRenderHint(QPainter::Antialiasing); diff --git a/src/blackgui/loadindicator.h b/src/blackgui/loadindicator.h index e70329600..f004ef4c0 100644 --- a/src/blackgui/loadindicator.h +++ b/src/blackgui/loadindicator.h @@ -96,6 +96,9 @@ namespace BlackGui //! \copydoc QWidget::paintEvent virtual void paintEvent(QPaintEvent *event) override; + //! Is parent widget visible + bool isParentVisible() const; + private: int m_angle = 0; int m_timerId = -1; diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 823079373..95c003539 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -158,6 +158,16 @@ namespace BlackGui // CStyleSheetUtility::useStyleSheetInDerivedWidget(this, QStyle::PE_Widget); } + void CViewBaseNonTemplate::showEvent(QShowEvent *event) + { + if (this->isShowingLoadIndicator()) + { + // re-center + this->centerLoadIndicator(); + } + QTableView::showEvent(event); + } + void CViewBaseNonTemplate::allowDragDropValueObjects(bool allowDrag, bool allowDrop) { // see model for implementing logic of drag @@ -246,17 +256,21 @@ namespace BlackGui if (!this->m_loadIndicator) { - this->m_loadIndicator = new CLoadIndicator(64, 64, this->viewport()); - // connect(this->m_loadIndicator, &CLoadIndicator::updatedAnimation, this, &CViewBaseNonTemplate::ps_updatedIndicator); - + this->m_loadIndicator = new CLoadIndicator(64, 64, this); } - QPoint middle = this->geometry().center(); + this->centerLoadIndicator(); + this->m_loadIndicator->startAnimation(); + } + + void CViewBaseNonTemplate::centerLoadIndicator() + { + if (!m_loadIndicator) { return; } + QPoint middle = this->viewport()->geometry().center(); int w = m_loadIndicator->width(); int h = m_loadIndicator->height(); int x = middle.x() - w / 2; int y = middle.y() - h / 2; this->m_loadIndicator->setGeometry(x, y, w, h); - this->m_loadIndicator->startAnimation(); } void CViewBaseNonTemplate::hideLoadIndicator() @@ -379,7 +393,7 @@ namespace BlackGui { return model->sortContainerByColumn(container, sortColumn, sortOrder); }); - worker->thenWithResult(this, [this, resize](const ContainerType &sortedContainer) + worker->thenWithResult(this, [this, resize](const ContainerType & sortedContainer) { this->ps_updateContainer(CVariant::from(sortedContainer), false, resize); }); diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index a85bd1b79..c7952b2b3 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -160,6 +160,9 @@ namespace BlackGui //! \copydoc QTableView::paintEvent virtual void paintEvent(QPaintEvent *event) override; + //! \copydoc QTableView::showEvent + virtual void showEvent(QShowEvent *event) override; + //! Perform resizing / non slot method for template virtual void performModeBasedResizeToContent() = 0; @@ -175,6 +178,9 @@ namespace BlackGui //! Resize or skip resize? virtual bool isResizeConditionMet(int containerSize = -1) const; + //! Center / re-center load indicator + void centerLoadIndicator(); + //! Init default values void init();