20 #include "erroroverlay_p.h"
21 #include "ui_erroroverlay.h"
22 #include "selftestdialog_p.h"
26 #include <KLocalizedString>
28 #include <QtCore/QEvent>
35 class ErrorOverlayStatic
38 QVector<QPair<QPointer<QWidget>, QPointer<QWidget> > > baseWidgets;
41 K_GLOBAL_STATIC(ErrorOverlayStatic, sInstanceOverlay)
44 static bool isParentOf(QWidget *o1, QWidget *o2)
55 return isParentOf(o1, o2->parentWidget());
59 : QWidget(parent ? parent : baseWidget->window())
60 , mBaseWidget(baseWidget)
61 , mOverlayActive(false)
62 , mBaseWidgetIsParent(false)
67 mBaseWidgetIsParent = isParentOf(mBaseWidget,
this);
70 for (QVector<QPair< QPointer<QWidget>, QPointer<QWidget> > >::Iterator it = sInstanceOverlay->baseWidgets.begin();
71 it != sInstanceOverlay->baseWidgets.end();) {
72 if ((*it).first == 0 || (*it).second == 0) {
74 it = sInstanceOverlay->baseWidgets.erase(it);
77 if (isParentOf((*it).first, baseWidget)) {
84 if (isParentOf(baseWidget, (*it).first)) {
87 it = sInstanceOverlay->baseWidgets.erase(it);
92 sInstanceOverlay->baseWidgets.append(qMakePair(mBaseWidget, QPointer<QWidget>(
this)));
94 connect(baseWidget, SIGNAL(destroyed()), SLOT(deleteLater()));
95 mPreviousState = mBaseWidget->isEnabled();
98 ui->notRunningIcon->setPixmap(KIcon(QLatin1String(
"akonadi")).pixmap(64));
99 ui->brokenIcon->setPixmap(KIcon(QString::fromLatin1(
"dialog-error")).pixmap(64));
100 ui->progressIcon->setPixmap(KIcon(QLatin1String(
"akonadi")).pixmap(32));
101 ui->quitButton->setText(KStandardGuiItem::quit().text());
102 ui->detailsQuitButton->setText(KStandardGuiItem::quit().text());
104 #ifndef KDEPIM_MOBILE_UI
105 ui->quitButton->hide();
106 ui->detailsQuitButton->hide();
109 connect(ui->startButton, SIGNAL(clicked()), SLOT(startClicked()));
110 connect(ui->quitButton, SIGNAL(clicked()), SLOT(quitClicked()));
111 connect(ui->detailsQuitButton, SIGNAL(clicked()), SLOT(quitClicked()));
112 connect(ui->selfTestButton, SIGNAL(clicked()), SLOT(selfTestClicked()));
116 serverStateChanged(state);
121 QPalette p = palette();
122 p.setColor(backgroundRole(), QColor(0, 0, 0, 128));
123 p.setColor(foregroundRole(), Qt::white);
125 setAutoFillBackground(
true);
127 mBaseWidget->installEventFilter(
this);
132 ErrorOverlay::~ ErrorOverlay()
134 if (mBaseWidget && !mBaseWidgetIsParent) {
135 mBaseWidget->setEnabled(mPreviousState);
139 void ErrorOverlay::reposition()
147 if (parentWidget() != mBaseWidget->window()) {
148 setParent(mBaseWidget->window());
153 if (!mBaseWidget->isVisible()) {
157 if (mOverlayActive) {
162 const QPoint topLevelPos = mBaseWidget->mapTo(window(), QPoint(0, 0));
163 const QPoint parentPos = parentWidget()->mapFrom(window(), topLevelPos);
168 resize(mBaseWidget->size());
171 bool ErrorOverlay::eventFilter(QObject *
object, QEvent *event)
173 if (
object == mBaseWidget && mOverlayActive &&
174 (event->type() == QEvent::Move || event->type() == QEvent::Resize ||
175 event->type() == QEvent::Show || event->type() == QEvent::Hide ||
176 event->type() == QEvent::ParentChange)) {
179 return QWidget::eventFilter(
object, event);
182 void ErrorOverlay::startClicked()
186 serverStateChanged(state);
192 void ErrorOverlay::quitClicked()
197 void ErrorOverlay::selfTestClicked()
210 mOverlayActive =
false;
212 if (!mBaseWidgetIsParent) {
213 mBaseWidget->setEnabled(mPreviousState);
215 }
else if (!mOverlayActive) {
216 mOverlayActive =
true;
217 if (mBaseWidget->isVisible()) {
221 if (!mBaseWidgetIsParent) {
222 mPreviousState = mBaseWidget->isEnabled();
223 mBaseWidget->setEnabled(
false);
229 if (mOverlayActive) {
232 ui->stackWidget->setCurrentWidget(ui->notRunningPage);
235 ui->stackWidget->setCurrentWidget(ui->brokenPage);
238 ui->progressPage->setToolTip(i18n(
"Personal information management service is starting..."));
239 ui->progressDescription->setText(i18n(
"Personal information management service is starting..."));
240 ui->stackWidget->setCurrentWidget(ui->progressPage);
243 ui->progressPage->setToolTip(i18n(
"Personal information management service is shutting down..."));
244 ui->progressDescription->setText(i18n(
"Personal information management service is shutting down..."));
245 ui->stackWidget->setCurrentWidget(ui->progressPage);
248 ui->progressPage->setToolTip(i18n(
"Personal information management service is performing a database upgrade."));
249 ui->progressDescription->setText(i18n(
"Personal information management service is performing a database upgrade.\n"
250 "This happens after a software update and is necessary to optimize performance.\n"
251 "Depending on the amount of personal information, this might take a few minutes."));
252 ui->stackWidget->setCurrentWidget(ui->progressPage);
262 #include "moc_erroroverlay_p.cpp"