QmlDesigner: Flash transient scrollbars only when they are enabled

Visibility has a more complex definition in transient scrollbars since
they are transient. Also, it's meaningful when it's disabled, it
shouldn't be flashed. So here we use this ability to prevent them from
being flashed when they are disabled.

Also, the enabled property would be changed instead of the visibility
for the cases that transient scrollbars are out of the scroll area.
(TimelineWidget and TransitionEditorWidget)

Task-number: QDS-10644
Change-Id: If74d71571a216153a2d3aa09694760d7a02026ca
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Ali Kianian
2023-09-14 09:51:41 +03:00
parent 252a1f3c74
commit 4b1862fdb1
3 changed files with 39 additions and 13 deletions

View File

@@ -365,13 +365,23 @@ ScrollBar::~ScrollBar()
void ScrollBar::flash()
{
if (!d->flashed && style()->styleHint(QStyle::SH_ScrollBar_Transient, nullptr, this)) {
if (!style()->styleHint(QStyle::SH_ScrollBar_Transient, nullptr, this))
return;
if (!isEnabled()) {
d->flashed = false;
hide();
return;
}
if (!d->flashed) {
d->flashed = true;
if (!isVisible())
show();
else
update();
}
if (!d->flashTimer)
d->flashTimer = startTimer(0);
}

View File

@@ -538,13 +538,18 @@ void TimelineWidget::invalidateTimelinePosition(const QmlTimeline &timeline)
void TimelineWidget::setupScrollbar(int min, int max, int current)
{
int singleStep = (max - min) / 10;
if (m_scrollbar->minimum() != min || m_scrollbar->maximum() != max
|| m_scrollbar->value() != current || m_scrollbar->singleStep() != singleStep) {
bool b = m_scrollbar->blockSignals(true);
m_scrollbar->setRange(min, max);
m_scrollbar->setValue(current);
m_scrollbar->setSingleStep((max - min) / 10);
m_scrollbar->setSingleStep(singleStep);
m_scrollbar->blockSignals(b);
m_scrollbar->flash();
}
}
void TimelineWidget::setTimelineId(const QString &id)
{
@@ -575,6 +580,7 @@ void TimelineWidget::setTimelineActive(bool b)
m_toolbar->setVisible(true);
m_graphicsView->setVisible(true);
m_rulerView->setVisible(true);
m_scrollbar->setEnabled(true); // Set the transient scrollbar enabled to be able to flash it.
m_scrollbar->setVisible(true);
m_addButton->setVisible(false);
m_onboardingContainer->setVisible(false);
@@ -584,6 +590,8 @@ void TimelineWidget::setTimelineActive(bool b)
m_toolbar->setVisible(false);
m_graphicsView->setVisible(false);
m_rulerView->setVisible(false);
m_scrollbar->setEnabled(
false); // Set the transient scrollbar disabled to prevent it from being flashed.
m_scrollbar->setVisible(false);
m_statusBar->clear();
m_addButton->setVisible(true);

View File

@@ -231,6 +231,7 @@ void TransitionEditorWidget::setTransitionActive(bool b)
m_toolbar->setVisible(true);
m_graphicsView->setVisible(true);
m_rulerView->setVisible(true);
m_scrollbar->setEnabled(true); // Set the transient scrollbar enabled to be able to flash it.
m_scrollbar->setVisible(true);
m_addButton->setVisible(false);
m_onboardingContainer->setVisible(false);
@@ -240,6 +241,8 @@ void TransitionEditorWidget::setTransitionActive(bool b)
m_toolbar->setVisible(false);
m_graphicsView->setVisible(false);
m_rulerView->setVisible(false);
m_scrollbar->setEnabled(
false); // Set the transient scrollbar disabled to prevent it from being flashed.
m_scrollbar->setVisible(false);
m_addButton->setVisible(true);
m_onboardingContainer->setVisible(true);
@@ -378,12 +381,17 @@ TransitionEditorToolBar *TransitionEditorWidget::toolBar() const
void TransitionEditorWidget::setupScrollbar(int min, int max, int current)
{
int singleStep = (max - min) / 10;
if (m_scrollbar->minimum() != min || m_scrollbar->maximum() != max
|| m_scrollbar->value() != current || m_scrollbar->singleStep() != singleStep) {
bool b = m_scrollbar->blockSignals(true);
m_scrollbar->setMinimum(min);
m_scrollbar->setMaximum(max);
m_scrollbar->setRange(min, max);
m_scrollbar->setValue(current);
m_scrollbar->setSingleStep((max - min) / 10);
m_scrollbar->setSingleStep(singleStep);
m_scrollbar->blockSignals(b);
m_scrollbar->flash();
}
}
void TransitionEditorWidget::showEvent([[maybe_unused]] QShowEvent *event)