Add a little spinner

This commit is contained in:
David Sansome 2010-01-16 17:52:51 +00:00
parent 82b010eeba
commit 3526fb3bdc
10 changed files with 144 additions and 9 deletions

View File

@ -51,7 +51,11 @@ void Library::BackendInitialised() {
} }
void Library::WatcherInitialised() { void Library::WatcherInitialised() {
connect(watcher_->Worker().get(), SIGNAL(ScanStarted()), SIGNAL(ScanStarted()));
connect(watcher_->Worker().get(), SIGNAL(ScanFinished()), SIGNAL(ScanFinished()));
watcher_->Worker()->SetEngine(engine_); watcher_->Worker()->SetEngine(engine_);
if (--waiting_for_threads_ == 0) if (--waiting_for_threads_ == 0)
Initialise(); Initialise();
} }

View File

@ -45,6 +45,9 @@ class Library : public SimpleTreeModel<LibraryItem> {
void Error(const QString& message); void Error(const QString& message);
void TotalSongCountUpdated(int count); void TotalSongCountUpdated(int count);
void ScanStarted();
void ScanFinished();
public slots: public slots:
void ShowConfig(); void ShowConfig();

View File

@ -11,6 +11,7 @@
#include "osd.h" #include "osd.h"
#include "trackslider.h" #include "trackslider.h"
#include "edittagdialog.h" #include "edittagdialog.h"
#include "multiloadingindicator.h"
#include "qxtglobalshortcut.h" #include "qxtglobalshortcut.h"
@ -36,6 +37,7 @@ MainWindow::MainWindow(QWidget *parent)
osd_(new OSD(tray_icon_, this)), osd_(new OSD(tray_icon_, this)),
track_slider_(new TrackSlider(this)), track_slider_(new TrackSlider(this)),
edit_tag_dialog_(new EditTagDialog(this)), edit_tag_dialog_(new EditTagDialog(this)),
multi_loading_indicator_(new MultiLoadingIndicator(this)),
radio_model_(new RadioModel(this)), radio_model_(new RadioModel(this)),
playlist_(new Playlist(this)), playlist_(new Playlist(this)),
player_(new Player(playlist_, radio_model_->GetLastFMService(), this)), player_(new Player(playlist_, radio_model_->GetLastFMService(), this)),
@ -135,6 +137,8 @@ MainWindow::MainWindow(QWidget *parent)
connect(ui_.library_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(LibraryDoubleClick(QModelIndex))); connect(ui_.library_view, SIGNAL(doubleClicked(QModelIndex)), SLOT(LibraryDoubleClick(QModelIndex)));
connect(ui_.library_view, SIGNAL(ShowConfigDialog()), library_, SLOT(ShowConfig())); connect(ui_.library_view, SIGNAL(ShowConfigDialog()), library_, SLOT(ShowConfig()));
connect(library_, SIGNAL(TotalSongCountUpdated(int)), ui_.library_view, SLOT(TotalSongCountUpdated(int))); connect(library_, SIGNAL(TotalSongCountUpdated(int)), ui_.library_view, SLOT(TotalSongCountUpdated(int)));
connect(library_, SIGNAL(ScanStarted()), SLOT(LibraryScanStarted()));
connect(library_, SIGNAL(ScanFinished()), SLOT(LibraryScanFinished()));
// Age filters // Age filters
QActionGroup* filter_age_group = new QActionGroup(this); QActionGroup* filter_age_group = new QActionGroup(this);
@ -220,6 +224,8 @@ MainWindow::MainWindow(QWidget *parent)
// Statusbar widgets // Statusbar widgets
ui_.statusBar->addPermanentWidget(track_slider_); ui_.statusBar->addPermanentWidget(track_slider_);
ui_.statusBar->addWidget(multi_loading_indicator_);
multi_loading_indicator_->hide();
// Load theme // Load theme
QFile stylesheet(":mainwindow.css"); QFile stylesheet(":mainwindow.css");
@ -491,3 +497,11 @@ void MainWindow::EditTracks() {
playlist_->ReloadItems(rows); playlist_->ReloadItems(rows);
} }
void MainWindow::LibraryScanStarted() {
multi_loading_indicator_->TaskStarted("Updating library");
}
void MainWindow::LibraryScanFinished() {
multi_loading_indicator_->TaskFinished("Updating library");
}

View File

@ -16,6 +16,7 @@ class RadioItem;
class OSD; class OSD;
class TrackSlider; class TrackSlider;
class EditTagDialog; class EditTagDialog;
class MultiLoadingIndicator;
class QSortFilterProxyModel; class QSortFilterProxyModel;
class SystemTrayIcon; class SystemTrayIcon;
@ -63,6 +64,9 @@ class MainWindow : public QMainWindow {
void ScrobblingEnabledChanged(bool value); void ScrobblingEnabledChanged(bool value);
void Love(); void Love();
void LibraryScanStarted();
void LibraryScanFinished();
private: private:
void SaveGeometry(); void SaveGeometry();
@ -75,6 +79,7 @@ class MainWindow : public QMainWindow {
OSD* osd_; OSD* osd_;
TrackSlider* track_slider_; TrackSlider* track_slider_;
EditTagDialog* edit_tag_dialog_; EditTagDialog* edit_tag_dialog_;
MultiLoadingIndicator* multi_loading_indicator_;
RadioModel* radio_model_; RadioModel* radio_model_;
Playlist* playlist_; Playlist* playlist_;

View File

@ -0,0 +1,26 @@
#include "multiloadingindicator.h"
MultiLoadingIndicator::MultiLoadingIndicator(QWidget *parent)
: QWidget(parent)
{
ui_.setupUi(this);
}
void MultiLoadingIndicator::TaskStarted(const QString &name) {
tasks_ << name;
UpdateText();
show();
}
void MultiLoadingIndicator::TaskFinished(const QString &name) {
tasks_.removeAll(name);
UpdateText();
if (tasks_.count() == 0)
hide();
}
void MultiLoadingIndicator::UpdateText() {
ui_.text->setText(tasks_.join(", ") + "...");
}

View File

@ -0,0 +1,27 @@
#ifndef MULTILOADINGINDICATOR_H
#define MULTILOADINGINDICATOR_H
#include <QWidget>
#include "ui_multiloadingindicator.h"
class MultiLoadingIndicator : public QWidget {
Q_OBJECT
public:
MultiLoadingIndicator(QWidget* parent = 0);
public slots:
void TaskStarted(const QString& name);
void TaskFinished(const QString& name);
private:
void UpdateText();
private:
Ui::MultiLoadingIndicator ui_;
QStringList tasks_;
};
#endif // MULTILOADINGINDICATOR_H

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MultiLoadingIndicator</class>
<widget class="QWidget" name="MultiLoadingIndicator">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>191</width>
<height>24</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>4</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>4</number>
</property>
<item>
<widget class="BusyIndicator" name="spinner">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="text"/>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>BusyIndicator</class>
<extends>QLabel</extends>
<header>busyindicator.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

View File

@ -6,6 +6,7 @@ RadioLoadingIndicator::RadioLoadingIndicator(QWidget *parent)
: QWidget(parent) : QWidget(parent)
{ {
ui_.setupUi(this); ui_.setupUi(this);
ui_.text->setText("<b>Loading radio stream...</b>");
} }
void RadioLoadingIndicator::paintEvent(QPaintEvent*) { void RadioLoadingIndicator::paintEvent(QPaintEvent*) {

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>160</width> <width>191</width>
<height>24</height> <height>24</height>
</rect> </rect>
</property> </property>
@ -30,11 +30,7 @@
<number>4</number> <number>4</number>
</property> </property>
<item> <item>
<widget class="QLabel" name="text"> <widget class="QLabel" name="text"/>
<property name="text">
<string>&lt;span style=&quot; font-weight:600;&quot;&gt;Loading radio stream...&lt;/span&gt;</string>
</property>
</widget>
</item> </item>
<item> <item>
<widget class="BusyIndicator" name="spinner"> <widget class="BusyIndicator" name="spinner">

View File

@ -47,7 +47,8 @@ SOURCES += main.cpp \
osd.cpp \ osd.cpp \
trackslider.cpp \ trackslider.cpp \
edittagdialog.cpp \ edittagdialog.cpp \
lineedit.cpp lineedit.cpp \
multiloadingindicator.cpp
HEADERS += mainwindow.h \ HEADERS += mainwindow.h \
player.h \ player.h \
library.h \ library.h \
@ -95,7 +96,8 @@ HEADERS += mainwindow.h \
osd.h \ osd.h \
trackslider.h \ trackslider.h \
edittagdialog.h \ edittagdialog.h \
lineedit.h lineedit.h \
multiloadingindicator.h
FORMS += mainwindow.ui \ FORMS += mainwindow.ui \
libraryconfig.ui \ libraryconfig.ui \
fileview.ui \ fileview.ui \
@ -103,7 +105,8 @@ FORMS += mainwindow.ui \
radioloadingindicator.ui \ radioloadingindicator.ui \
lastfmstationdialog.ui \ lastfmstationdialog.ui \
trackslider.ui \ trackslider.ui \
edittagdialog.ui edittagdialog.ui \
multiloadingindicator.ui
RESOURCES += ../data/data.qrc RESOURCES += ../data/data.qrc
OTHER_FILES += ../data/schema.sql \ OTHER_FILES += ../data/schema.sql \
../data/mainwindow.css ../data/mainwindow.css