20 #include "erroroverlay_p.h"
21 #include "ui_erroroverlay.h"
22 #include "selftestdialog_p.h"
26 #include <KLocalizedString>
28 #include <QtCore/QEvent>
31 using namespace Akonadi;
35 class ErrorOverlayStatic
38 QVector<QPair<QPointer<QWidget>, QPointer<QWidget> > > baseWidgets;
41 K_GLOBAL_STATIC( ErrorOverlayStatic, sInstanceOverlay )
43 static
bool isParentOf( QObject* o1, QObject* o2 )
49 return isParentOf( o1, o2->parent() );
53 QWidget( parent ? parent : baseWidget->window() ),
54 mBaseWidget( baseWidget ),
55 mOverlayActive( false ),
56 mBaseWidgetIsParent( false ),
59 Q_ASSERT( baseWidget );
61 mBaseWidgetIsParent = isParentOf( mBaseWidget,
this );
64 for ( QVector<QPair< QPointer<QWidget>, QPointer<QWidget> > >::Iterator it = sInstanceOverlay->baseWidgets.begin();
65 it != sInstanceOverlay->baseWidgets.end(); ) {
66 if ( ( *it ).first == 0 || ( *it ).second == 0 ) {
68 it = sInstanceOverlay->baseWidgets.erase( it );
71 if ( isParentOf( ( *it ).first, baseWidget ) ) {
78 if ( isParentOf( baseWidget, ( *it ).first ) ) {
80 delete ( *it ).second;
81 it = sInstanceOverlay->baseWidgets.erase( it );
86 sInstanceOverlay->baseWidgets.append( qMakePair( mBaseWidget, QPointer<QWidget>(
this ) ) );
88 connect( baseWidget, SIGNAL(destroyed()), SLOT(deleteLater()) );
89 mPreviousState = mBaseWidget->isEnabled();
92 ui->notRunningIcon->setPixmap( KIcon( QLatin1String(
"akonadi" ) ).pixmap( 64 ) );
93 ui->brokenIcon->setPixmap( KIcon( QString::fromLatin1(
"dialog-error" ) ).pixmap( 64 ) );
94 ui->progressIcon->setPixmap( KIcon( QLatin1String(
"akonadi" ) ).pixmap( 32 ) );
95 ui->quitButton->setText( KStandardGuiItem::quit().text() );
96 ui->detailsQuitButton->setText( KStandardGuiItem::quit().text() );
98 #ifndef KDEPIM_MOBILE_UI
99 ui->quitButton->hide();
100 ui->detailsQuitButton->hide();
103 connect( ui->startButton, SIGNAL(clicked()), SLOT(startClicked()) );
104 connect( ui->quitButton, SIGNAL(clicked()), SLOT(quitClicked()) );
105 connect( ui->detailsQuitButton, SIGNAL(clicked()), SLOT(quitClicked()) );
106 connect( ui->selfTestButton, SIGNAL(clicked()), SLOT(selfTestClicked()) );
110 serverStateChanged( state );
115 QPalette p = palette();
116 p.setColor( backgroundRole(), QColor( 0, 0, 0, 128 ) );
117 p.setColor( foregroundRole(), Qt::white );
119 setAutoFillBackground(
true );
121 mBaseWidget->installEventFilter(
this );
126 ErrorOverlay::~ ErrorOverlay()
128 if ( mBaseWidget && !mBaseWidgetIsParent )
129 mBaseWidget->setEnabled( mPreviousState );
132 void ErrorOverlay::reposition()
139 if ( parentWidget() != mBaseWidget->window() )
140 setParent( mBaseWidget->window() );
144 if ( !mBaseWidget->isVisible() ) {
148 if ( mOverlayActive )
152 const QPoint topLevelPos = mBaseWidget->mapTo( window(), QPoint( 0, 0 ) );
153 const QPoint parentPos = parentWidget()->mapFrom( window(), topLevelPos );
158 resize( mBaseWidget->size() );
161 bool ErrorOverlay::eventFilter(QObject *
object, QEvent * event)
163 if (
object == mBaseWidget && mOverlayActive &&
164 ( event->type() == QEvent::Move ||
event->type() == QEvent::Resize ||
165 event->type() == QEvent::Show ||
event->type() == QEvent::Hide ||
166 event->type() == QEvent::ParentChange ) ) {
169 return QWidget::eventFilter(
object, event );
172 void ErrorOverlay::startClicked()
176 serverStateChanged( state );
182 void ErrorOverlay::quitClicked()
187 void ErrorOverlay::selfTestClicked()
199 mOverlayActive =
false;
201 if ( !mBaseWidgetIsParent )
202 mBaseWidget->setEnabled( mPreviousState );
203 }
else if ( !mOverlayActive ) {
204 mOverlayActive =
true;
205 if ( mBaseWidget->isVisible() )
208 if ( !mBaseWidgetIsParent ) {
209 mPreviousState = mBaseWidget->isEnabled();
210 mBaseWidget->setEnabled(
false );
216 if ( mOverlayActive ) {
219 ui->stackWidget->setCurrentWidget( ui->notRunningPage );
222 ui->stackWidget->setCurrentWidget( ui->brokenPage );
225 ui->progressPage->setToolTip( i18n(
"Personal information management service is starting..." ) );
226 ui->progressDescription->setText( i18n(
"Personal information management service is starting..." ) );
227 ui->stackWidget->setCurrentWidget( ui->progressPage );
230 ui->progressPage->setToolTip( i18n(
"Personal information management service is shutting down..." ) );
231 ui->progressDescription->setText( i18n(
"Personal information management service is shutting down..." ) );
232 ui->stackWidget->setCurrentWidget( ui->progressPage );
235 ui->progressPage->setToolTip( i18n(
"Personal information management service is performing a database upgrade." ) );
236 ui->progressDescription->setText( i18n(
"Personal information management service is performing a database upgrade.\n"
237 "This happens after a software update and is necessary to optimize performance.\n"
238 "Depending on the amount of personal information, this might take a few minutes.") );
239 ui->stackWidget->setCurrentWidget( ui->progressPage );
249 #include "moc_erroroverlay_p.cpp"
static ServerManager * self()
Returns the singleton instance of this class, for connecting to its signals.
ErrorOverlay(QWidget *baseWidget, QWidget *parent=0)
Create an overlay widget for baseWidget.
static State state()
Returns the state of the server.
Server is performing a database upgrade as part of a new startup.
Server is not running, could be no one started it yet or it failed to start.
static bool start()
Starts the server.
Server was started but is not yet running.
Server is running and operational.
State
Enum for the various states the server can be in.
A dialog that checks the current status of the Akonadi system.
Server is not operational and an error has been detected.