Skip to content

Commit

Permalink
Gallery: Add status delay
Browse files Browse the repository at this point in the history
When images are slow to load the "Loading" status can be irritating.
This patch adds a user setting to delay the "Loading" & "Playing" status.
  • Loading branch information
dizygotheca committed Apr 29, 2016
1 parent 4e70774 commit 75a698e
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 16 deletions.
6 changes: 6 additions & 0 deletions mythtv/programs/mythfrontend/galleryconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,12 @@ SlideSettings::SlideSettings() : VerticalConfigurationGroup()
transition->setHelpText(tr("The time that each transition lasts, in milliseconds."));
addChild(transition);

HostSpinBox *delay = new HostSpinBox("GalleryStatusDelay", 0, 10000, 50);
delay->setLabel(tr("Status Delay (ms)"));
delay->setHelpText(tr("The delay before showing the Loading/Playing status, "
"in milliseconds."));
addChild(delay);

HostCheckBox *browseTran = new HostCheckBox("GalleryBrowseTransition");
browseTran->setLabel(tr("Use transitions when browsing"));
browseTran->setHelpText(tr("When cleared, transitions will only be used "
Expand Down
51 changes: 36 additions & 15 deletions mythtv/programs/mythfrontend/galleryslideview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,11 @@ GallerySlideView::GallerySlideView(MythScreenStack *parent, const char *name,
m_timer.setSingleShot(true);
m_timer.setInterval(m_slideShowTime);
connect(&m_timer, SIGNAL(timeout()), this, SLOT(ShowNextSlide()));

// Initialise status delay timer
m_delay.setSingleShot(true);
m_delay.setInterval(gCoreContext->GetNumSetting("GalleryStatusDelay", 0));
connect(&m_delay, SIGNAL(timeout()), this, SLOT(ShowStatus()));
}


Expand Down Expand Up @@ -421,8 +426,7 @@ void GallerySlideView::Play(bool useTransition)
m_playing = true;
if (!m_suspended)
m_timer.start();
if (m_uiStatus)
SetStatus(tr("Playing"));
SetStatus(tr("Playing"), true);
}


Expand Down Expand Up @@ -544,7 +548,7 @@ void GallerySlideView::ShowSlide(int direction)
// Load image from file
if (!m_slides.Load(im, direction))
// Image not yet available: show loading status
SetStatus(tr("Loading"));
SetStatus(tr("Loading"), true);
}


Expand Down Expand Up @@ -574,16 +578,7 @@ void GallerySlideView::SlideAvailable(int count)
Slide &next = m_slides.GetNext();

// Update loading status
if (m_uiStatus)
{
if (!next.FailedLoad())

m_uiStatus->SetVisible(false);

else if (ImagePtrK im = next.GetImageData())

SetStatus(tr("Failed to load %1").arg(im->m_filePath));
}
ClearStatus(next);

// Update slide counts
if (m_uiSlideCount)
Expand Down Expand Up @@ -723,11 +718,37 @@ void GallerySlideView::PlayVideo()
\brief Displays status text (Loading, Paused etc.)
\param msg Text to show
*/
void GallerySlideView::SetStatus(QString msg)
void GallerySlideView::SetStatus(QString msg, bool delay)
{
if (m_uiStatus)
{
m_uiStatus->SetText(msg);
m_uiStatus->SetVisible(true);
if (delay)
m_delay.start();
else
ShowStatus();
}
}


void GallerySlideView::ShowStatus()
{
if (m_uiStatus)
m_uiStatus->SetVisible(true);
}

void GallerySlideView::ClearStatus(Slide &slide)
{
if (m_uiStatus)
{
m_delay.stop();

if (!slide.FailedLoad())

m_uiStatus->SetVisible(false);

else if (ImagePtrK im = slide.GetImageData())

SetStatus(tr("Failed to load %1").arg(im->m_filePath));
}
}
5 changes: 4 additions & 1 deletion mythtv/programs/mythfrontend/galleryslideview.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ public slots:
void Transform(ImageFileTransform);
void Zoom(int = 0);
void Pan(QPoint = QPoint(0, 0));
void SetStatus(QString msg);
void SetStatus(QString msg, bool delay = false);
void ClearStatus(Slide &next);

private slots:
void ShowPrevSlide();
Expand All @@ -63,6 +64,7 @@ private slots:
void ShowCaptions();
void HideCaptions();
void PlayVideo();
void ShowStatus();

private:
// Theme widgets
Expand All @@ -81,6 +83,7 @@ private slots:
InfoList m_infoList; //!< Image details overlay
int m_slideShowTime; //!< Time to display a slide in a slideshow
QTimer m_timer; //!< Slide duration timer
QTimer m_delay; //!< Status delay timer
bool m_playing; //!< True when slideshow is running
bool m_suspended; //!< True when transition is running or video playing
bool m_showCaptions; //!< If true, captions are shown
Expand Down

0 comments on commit 75a698e

Please sign in to comment.