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"
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.
FreeBusyManager::Singleton.
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.