20#include "erroroverlay_p.h"
21#include "ui_erroroverlay.h"
22#include "selftestdialog_p.h"
26#include <KLocalizedString>
28#include <QtCore/QEvent>
35class ErrorOverlayStatic
38 QVector<QPair<QPointer<QWidget>, QPointer<QWidget> > > baseWidgets;
41K_GLOBAL_STATIC(ErrorOverlayStatic, sInstanceOverlay)
44static 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);
132ErrorOverlay::~ ErrorOverlay()
134 if (mBaseWidget && !mBaseWidgetIsParent) {
135 mBaseWidget->setEnabled(mPreviousState);
139void 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());
171bool 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);
182void ErrorOverlay::startClicked()
186 serverStateChanged(state);
192void ErrorOverlay::quitClicked()
197void 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"
ErrorOverlay(QWidget *baseWidget, QWidget *parent=0)
Create an overlay widget for baseWidget.
A dialog that checks the current status of the Akonadi system.
static ServerManager * self()
Returns the singleton instance of this class, for connecting to its signals.
static State state()
Returns the state of the server.
static bool start()
Starts the server.
State
Enum for the various states the server can be in.
@ Running
Server is running and operational.
@ Starting
Server was started but is not yet running.
@ Broken
Server is not operational and an error has been detected.
@ Upgrading
Server is performing a database upgrade as part of a new startup.
@ NotRunning
Server is not running, could be no one started it yet or it failed to start.
@ Stopping
Server is shutting down.
FreeBusyManager::Singleton.