diff --git a/src/libtomahawk/network/servent.cpp b/src/libtomahawk/network/servent.cpp index b73689421..cad2cafb4 100644 --- a/src/libtomahawk/network/servent.cpp +++ b/src/libtomahawk/network/servent.cpp @@ -60,6 +60,7 @@ Servent::Servent( QObject* parent ) : QTcpServer( parent ) , m_port( 0 ) , m_externalPort( 0 ) + , m_ready( false ) , m_portfwd( 0 ) { s_instance = this; @@ -133,6 +134,7 @@ Servent::startListening( QHostAddress ha, bool upnp, int port ) tLog() << "Forcing static preferred host and port"; m_externalHostname = TomahawkSettings::instance()->externalHostname(); m_externalPort = TomahawkSettings::instance()->externalPort(); + m_ready = true; emit ready(); return true; } @@ -155,7 +157,10 @@ Servent::startListening( QHostAddress ha, bool upnp, int port ) QMetaObject::invokeMethod( this, "setExternalAddress", Qt::QueuedConnection, Q_ARG( QHostAddress, ha ), Q_ARG( unsigned int, m_port ) ); } else + { + m_ready = true; emit ready(); + } break; } break; @@ -227,6 +232,7 @@ Servent::setExternalAddress( QHostAddress ha, unsigned int port ) qDebug() << "No external access, LAN and outbound connections only!"; } + m_ready = true; emit ready(); } diff --git a/src/libtomahawk/network/servent.h b/src/libtomahawk/network/servent.h index 4e9c37035..f432e3f3e 100644 --- a/src/libtomahawk/network/servent.h +++ b/src/libtomahawk/network/servent.h @@ -1,5 +1,5 @@ /* === This file is part of Tomahawk Player - === - * + * * Copyright 2010-2011, Christian Muehlhaeuser * * Tomahawk is free software: you can redistribute it and/or modify @@ -123,6 +123,8 @@ public: QSharedPointer localFileIODeviceFactory( const Tomahawk::result_ptr& result ); QSharedPointer httpIODeviceFactory( const Tomahawk::result_ptr& result ); + bool isReady() const { return m_ready; }; + signals: void streamStarted( StreamConnection* ); void streamFinished( StreamConnection* ); @@ -159,6 +161,7 @@ private: int m_port, m_externalPort; QHostAddress m_externalAddress; QString m_externalHostname; + bool m_ready; // currently active file transfers: QList< StreamConnection* > m_scsessions; diff --git a/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.h b/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.h index 0dde3520d..5720df34c 100644 --- a/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.h +++ b/src/libtomahawk/playlist/dynamic/widgets/LoadingSpinner.h @@ -1,5 +1,5 @@ /* === This file is part of Tomahawk Player - === - * + * * Copyright 2010-2011, Christian Muehlhaeuser * * Tomahawk is free software: you can redistribute it and/or modify @@ -21,31 +21,33 @@ #include +#include "dllmacro.h" + class QMovie; class QTimeLine; /** * A small widget that displays an animated loading spinner */ -class LoadingSpinner : public QWidget { +class DLLEXPORT LoadingSpinner : public QWidget { Q_OBJECT public: LoadingSpinner( QWidget* parent ); virtual ~LoadingSpinner(); - + virtual QSize sizeHint() const; virtual void paintEvent( QPaintEvent* ); virtual void resizeEvent( QResizeEvent* ); - -public slots: + +public slots: void fadeIn(); void fadeOut(); - + private slots: void hideFinished(); - + private: void reposition(); - + QTimeLine* m_showHide; QMovie* m_anim; }; diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index 1e0b14a5a..1707489ed 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -51,6 +51,7 @@ #include "ui_proxydialog.h" #include "ui_stackedsettingsdialog.h" +#include static QString md5( const QByteArray& src ) @@ -66,6 +67,7 @@ SettingsDialog::SettingsDialog( QWidget *parent ) , m_rejected( false ) , m_sipModel( 0 ) , m_resolversModel( 0 ) + , m_sipSpinner( 0 ) { ui->setupUi( this ); TomahawkSettings* s = TomahawkSettings::instance(); @@ -107,6 +109,13 @@ SettingsDialog::SettingsDialog( QWidget *parent ) m_sipModel = new SipModel( this ); ui->accountsView->setModel( m_sipModel ); + if ( !Servent::instance()->isReady() ) + { + m_sipSpinner = new LoadingSpinner( ui->accountsView ); + m_sipSpinner->fadeIn(); + connect( Servent::instance(), SIGNAL( ready() ),m_sipSpinner, SLOT( fadeOut() ) ); + } + setupSipButtons(); ui->staticHostName->setText( s->externalHostname() ); diff --git a/src/settingsdialog.h b/src/settingsdialog.h index da8102091..471ee685d 100644 --- a/src/settingsdialog.h +++ b/src/settingsdialog.h @@ -22,6 +22,7 @@ #include #include +class LoadingSpinner; class QListWidgetItem; class Ui_StackedSettingsDialog; class SipPluginFactory; @@ -112,6 +113,7 @@ private: bool m_rejected; SipModel* m_sipModel; ResolversModel* m_resolversModel; + LoadingSpinner* m_sipSpinner; }; #endif // SETTINGSDIALOG_H diff --git a/src/tomahawkwindow.cpp b/src/tomahawkwindow.cpp index aac45bdc1..2eb4f5418 100644 --- a/src/tomahawkwindow.cpp +++ b/src/tomahawkwindow.cpp @@ -347,6 +347,12 @@ TomahawkWindow::setupSignals() ui->menuWindow->menuAction()->setVisible( false ); #endif + if ( !Servent::instance()->isReady() ) + { + ui->actionPreferences->setEnabled( false ); + connect( Servent::instance(), SIGNAL( ready() ), this, SLOT( enablePreferences() ) ); + } + // connect( SipHandler::instance(), SIGNAL( connected( SipPlugin* ) ), SLOT( onSipConnected() ) ); connect( SipHandler::instance(), SIGNAL( disconnected( SipPlugin* ) ), SLOT( onSipDisconnected() ) ); @@ -705,6 +711,12 @@ TomahawkWindow::checkForUpdates() #endif } +void +TomahawkWindow::enablePreferences() +{ + ui->actionPreferences->setEnabled( true ); +} + void TomahawkWindow::onSearch( const QString& search ) diff --git a/src/tomahawkwindow.h b/src/tomahawkwindow.h index 988d66899..27559f77d 100644 --- a/src/tomahawkwindow.h +++ b/src/tomahawkwindow.h @@ -89,6 +89,7 @@ private slots: void showAboutTomahawk(); void checkForUpdates(); + void enablePreferences(); void onSipPluginAdded( SipPlugin* p ); void onSipPluginRemoved( SipPlugin* p );