20 #include "erroroverlay_p.h"
21 #include "ui_erroroverlay.h"
22 #include "selftestdialog_p.h"
26 #include <KLocalizedString>
28 #include <QtCore/QEvent>
33 using namespace Akonadi;
37 class ErrorOverlayStatic
40 QVector<QPair<QPointer<QWidget>, QPointer<QWidget> > > baseWidgets;
43 K_GLOBAL_STATIC( ErrorOverlayStatic, sInstanceOverlay )
45 static
bool isParentOf( QObject* o1, QObject* o2 )
51 return isParentOf( o1, o2->parent() );
55 QWidget( parent ? parent : baseWidget->window() ),
56 mBaseWidget( baseWidget ),
57 mBaseWidgetIsParent( false ),
60 Q_ASSERT( baseWidget );
62 mBaseWidgetIsParent = isParentOf( mBaseWidget,
this );
65 for ( QVector<QPair< QPointer<QWidget>, QPointer<QWidget> > >::Iterator it = sInstanceOverlay->baseWidgets.begin();
66 it != sInstanceOverlay->baseWidgets.end(); ) {
67 if ( ( *it ).first == 0 || ( *it ).second == 0 ) {
69 it = sInstanceOverlay->baseWidgets.erase( it );
72 if ( isParentOf( ( *it ).first, baseWidget ) ) {
79 if ( isParentOf( baseWidget, ( *it ).first ) ) {
81 delete ( *it ).second;
82 it = sInstanceOverlay->baseWidgets.erase( it );
87 sInstanceOverlay->baseWidgets.append( qMakePair( mBaseWidget, QPointer<QWidget>(
this ) ) );
89 connect( baseWidget, SIGNAL(destroyed()), SLOT(deleteLater()) );
90 mPreviousState = mBaseWidget->isEnabled();
93 ui->notRunningIcon->setPixmap( KIcon( QLatin1String(
"akonadi" ) ).pixmap( 64 ) );
94 ui->brokenIcon->setPixmap( KIcon( QString::fromLatin1(
"dialog-error" ) ).pixmap( 64 ) );
95 ui->progressIcon->setPixmap( KIcon( QLatin1String(
"akonadi" ) ).pixmap( 32 ) );
96 ui->quitButton->setText( KStandardGuiItem::quit().text() );
97 ui->detailsQuitButton->setText( KStandardGuiItem::quit().text() );
99 #ifndef KDEPIM_MOBILE_UI
100 ui->quitButton->hide();
101 ui->detailsQuitButton->hide();
104 connect( ui->startButton, SIGNAL(clicked()), SLOT(startClicked()) );
105 connect( ui->quitButton, SIGNAL(clicked()), SLOT(quitClicked()) );
106 connect( ui->detailsQuitButton, SIGNAL(clicked()), SLOT(quitClicked()) );
107 connect( ui->selfTestButton, SIGNAL(clicked()), SLOT(selfTestClicked()) );
111 serverStateChanged( state );
118 QPalette p = palette();
119 p.setColor( backgroundRole(), QColor( 0, 0, 0, 128 ) );
120 p.setColor( foregroundRole(), Qt::white );
122 setAutoFillBackground(
true );
124 mBaseWidget->installEventFilter(
this );
129 ErrorOverlay::~ ErrorOverlay()
131 if ( mBaseWidget && !mBaseWidgetIsParent )
132 mBaseWidget->setEnabled( mPreviousState );
135 void ErrorOverlay::reposition()
142 if ( parentWidget() != mBaseWidget->window() )
143 setParent( mBaseWidget->window() );
147 if ( !mBaseWidget->isVisible() ) {
151 if ( mOverlayActive )
155 const QPoint topLevelPos = mBaseWidget->mapTo( window(), QPoint( 0, 0 ) );
156 const QPoint parentPos = parentWidget()->mapFrom( window(), topLevelPos );
161 resize( mBaseWidget->size() );
164 bool ErrorOverlay::eventFilter(QObject *
object, QEvent * event)
166 if (
object == mBaseWidget && mOverlayActive &&
167 ( event->type() == QEvent::Move ||
event->type() == QEvent::Resize ||
168 event->type() == QEvent::Show ||
event->type() == QEvent::Hide ||
169 event->type() == QEvent::ParentChange ) ) {
172 return QWidget::eventFilter(
object, event );
175 void ErrorOverlay::startClicked()
179 serverStateChanged( state );
185 void ErrorOverlay::quitClicked()
190 void ErrorOverlay::selfTestClicked()
202 mOverlayActive =
false;
204 if ( !mBaseWidgetIsParent )
205 mBaseWidget->setEnabled( mPreviousState );
206 }
else if ( !mOverlayActive ) {
207 mOverlayActive =
true;
208 if ( mBaseWidget->isVisible() )
211 if ( !mBaseWidgetIsParent ) {
212 mPreviousState = mBaseWidget->isEnabled();
213 mBaseWidget->setEnabled(
false );
219 if ( mOverlayActive ) {
222 ui->stackWidget->setCurrentWidget( ui->notRunningPage );
225 ui->stackWidget->setCurrentWidget( ui->brokenPage );
228 ui->progressPage->setToolTip( i18n(
"Personal information management service is starting..." ) );
229 ui->progressDescription->setText( i18n(
"Personal information management service is starting..." ) );
230 ui->stackWidget->setCurrentWidget( ui->progressPage );
233 ui->progressPage->setToolTip( i18n(
"Personal information management service is shutting down..." ) );
234 ui->progressDescription->setText( i18n(
"Personal information management service is shutting down..." ) );
235 ui->stackWidget->setCurrentWidget( ui->progressPage );
238 ui->progressPage->setToolTip( i18n(
"Personal information management service is performing a database upgrade." ) );
239 ui->progressDescription->setText( i18n(
"Personal information management service is performing a database upgrade. "
240 "This happens after a software update and is necessary to optimize performance. "
241 "Depending on the amount of personal information, this might take a few minutes.") );
242 ui->stackWidget->setCurrentWidget( ui->progressPage );
252 #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.