21 #include "servermanager.h"
22 #include "ui_controlprogressindicator.h"
24 #include "selftestdialog_p.h"
25 #include "erroroverlay_p.h"
32 #include <QtCore/QEventLoop>
33 #include <QtCore/QCoreApplication>
34 #include <QtCore/QTimer>
35 #include <QtCore/QPointer>
36 #include <QtGui/QFrame>
38 using namespace Akonadi;
43 class ControlProgressIndicator :
public QFrame
46 ControlProgressIndicator( QWidget *parent = 0 ) :
49 setWindowModality( Qt::ApplicationModal );
51 setWindowFlags( Qt::FramelessWindowHint | Qt::Dialog );
54 setFrameShadow( QFrame::Plain );
55 setFrameShape( QFrame::Box );
58 void setMessage(
const QString &msg )
60 ui.statusLabel->setText( msg );
63 Ui::ControlProgressIndicator ui;
66 class StaticControl :
public Control
74 K_GLOBAL_STATIC( Internal::StaticControl, s_instance )
83 : mParent( parent ), mEventLoop( 0 ),
84 mProgressIndicator( 0 ),
86 mStarting( false ), mStopping( false )
92 delete mProgressIndicator;
95 void setupProgressIndicator(
const QString &msg, QWidget *parent = 0 )
97 if ( !mProgressIndicator )
98 mProgressIndicator =
new Internal::ControlProgressIndicator( parent );
100 mProgressIndicator->setMessage( msg );
103 void createErrorOverlays()
106 foreach ( QWidget* widget, mPendingOverlays )
110 mPendingOverlays.clear();
115 s_instance.destroy();
121 QPointer<Control> mParent;
122 QEventLoop *mEventLoop;
123 QPointer<Internal::ControlProgressIndicator> mProgressIndicator;
124 QList<QPointer<QWidget> > mPendingOverlays;
131 bool Control::Private::exec()
133 if ( mProgressIndicator )
134 mProgressIndicator->show();
136 kDebug() <<
"Starting/Stopping Akonadi (using an event loop).";
137 mEventLoop =
new QEventLoop( mParent );
139 mEventLoop->deleteLater();
143 kWarning() <<
"Could not start/stop Akonadi!";
145 if ( mProgressIndicator && mStarting ) {
146 QPointer<SelfTestDialog> dlg =
new SelfTestDialog( mProgressIndicator->parentWidget() );
155 delete mProgressIndicator;
156 mProgressIndicator = 0;
160 const bool rv = mSuccess;
168 if ( mEventLoop && mEventLoop->isRunning() ) {
175 : d( new Private( this ) )
181 if ( QCoreApplication::instance() )
182 connect( QCoreApplication::instance(), SIGNAL(aboutToQuit()),
this, SLOT(cleanup()) );
193 kDebug() <<
"Server is currently being stopped, wont try to start it now";
197 kDebug() <<
"Server is already running";
200 s_instance->d->mStarting =
true;
202 kDebug() <<
"ServerManager::start failed -> return false";
205 return s_instance->d->exec();
214 s_instance->d->mStopping =
true;
217 return s_instance->d->exec();
231 s_instance->d->setupProgressIndicator( i18n(
"Starting Akonadi server..." ), parent );
237 s_instance->d->setupProgressIndicator( i18n(
"Stopping Akonadi server..." ), parent );
244 if ( !
stop( parent ) )
247 return start( parent );
252 s_instance->d->mPendingOverlays.append( widget );
255 QTimer::singleShot( 0, s_instance, SLOT(createErrorOverlays()) );
260 #include "control.moc"