20 #include "erroroverlay_p.h"
21 #include "ui_erroroverlay.h"
22 #include "selftestdialog_p.h"
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"