1 /* This file is part of the KDE project
2    Copyright (C) 2004-2015 Jarosław Staniek <staniek@kde.org>
3 
4    This library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Library General Public
6    License as published by the Free Software Foundation; either
7    version 2 of the License, or (at your option) any later version.
8 
9    This library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Library General Public License for more details.
13 
14    You should have received a copy of the GNU Library General Public License
15    along with this library; see the file COPYING.LIB.  If not, write to
16    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18 */
19 
20 #include "KDbMessageHandler.h"
21 
22 #include "KDbResult.h"
23 
24 class Q_DECL_HIDDEN KDbMessageGuard::Private
25 {
26 public:
Private()27     Private() {}
28     const KDbResult *result;
29     KDbResultable *resultable;
30     KDbMessageHandler *handler;
31 private:
32     Q_DISABLE_COPY(Private)
33 };
34 
KDbMessageGuard(KDbResultable * resultable)35 KDbMessageGuard::KDbMessageGuard(KDbResultable *resultable)
36     : d(new Private)
37 {
38     d->result = nullptr;
39     d->resultable = resultable;
40     d->handler = nullptr;
41 }
42 
KDbMessageGuard(const KDbResult & result,KDbMessageHandler * handler)43 KDbMessageGuard::KDbMessageGuard(const KDbResult &result, KDbMessageHandler *handler)
44  : d(new Private)
45 {
46     d->result = &result;
47     d->resultable = nullptr;
48     d->handler = handler;
49 }
50 
~KDbMessageGuard()51 KDbMessageGuard::~KDbMessageGuard()
52 {
53     if (d->handler && d->result && d->result->isError()) { // variant 1
54         d->handler->showErrorMessage(*d->result);
55     }
56     else if (d->resultable && d->resultable->messageHandler() && d->resultable->result().isError()){ // variant 2
57         d->resultable->messageHandler()->showErrorMessage(d->resultable->result());
58     }
59     delete d;
60 }
61 
62 //------------------------------------------------
63 
KDbMessageTitleSetter(KDbResult * result,const QString & message)64 KDbMessageTitleSetter::KDbMessageTitleSetter(KDbResult* result, const QString& message)
65         : m_result(result)
66         , m_prevMsgTitle(result->messageTitle())
67 {
68     m_result->setMessageTitle(message);
69 }
70 
KDbMessageTitleSetter(KDbResultable * resultable,const QString & message)71 KDbMessageTitleSetter::KDbMessageTitleSetter(KDbResultable* resultable, const QString& message)
72         : m_result(&resultable->m_result)
73         , m_prevMsgTitle(resultable->result().messageTitle())
74 {
75     m_result->setMessageTitle(message);
76 }
77 
~KDbMessageTitleSetter()78 KDbMessageTitleSetter::~KDbMessageTitleSetter()
79 {
80     m_result->setMessageTitle(m_prevMsgTitle);
81 }
82 
83 //------------------------------------------------
84 
85 class Q_DECL_HIDDEN KDbGuiItem::Private
86 {
87 public:
Private()88     Private() {}
89     bool dummy;
90 };
91 
KDbGuiItem()92 KDbGuiItem::KDbGuiItem()
93     : d(new Private)
94 {
95 }
96 
~KDbGuiItem()97 KDbGuiItem::~KDbGuiItem()
98 {
99     delete d;
100 }
101 
102 //------------------------------------------------
103 
104 class Q_DECL_HIDDEN KDbMessageHandler::Private
105 {
106 public:
Private()107     Private()
108      : messageRedirection(nullptr)
109      , enableMessages(true)
110     {
111     }
112 
113     QPointer<QWidget> messageHandlerParentWidget;
114     KDbMessageHandler *messageRedirection;
115     bool enableMessages;
116 private:
117     Q_DISABLE_COPY(Private)
118 };
119 
120 //------------------------------------------------
121 
KDbMessageHandler(QWidget * parent)122 KDbMessageHandler::KDbMessageHandler(QWidget *parent)
123  : d(new Private)
124 {
125     d->messageHandlerParentWidget = parent;
126 }
127 
~KDbMessageHandler()128 KDbMessageHandler::~KDbMessageHandler()
129 {
130     delete d;
131 }
132 
messagesEnabled() const133 bool KDbMessageHandler::messagesEnabled() const
134 {
135     return d->enableMessages;
136 }
137 
setMessagesEnabled(bool enable)138 void KDbMessageHandler::setMessagesEnabled(bool enable)
139 {
140     d->enableMessages = enable;
141 }
142 
askQuestion(KDbMessageHandler::QuestionType messageType,const QString & message,const QString & caption,KDbMessageHandler::ButtonCode defaultResult,const KDbGuiItem & buttonYes,const KDbGuiItem & buttonNo,const QString & dontShowAskAgainName,KDbMessageHandler::Options options,KDbMessageHandler * msgHandler)143 KDbMessageHandler::ButtonCode KDbMessageHandler::askQuestion(
144     KDbMessageHandler::QuestionType messageType,
145     const QString& message,
146     const QString &caption,
147     KDbMessageHandler::ButtonCode defaultResult,
148     const KDbGuiItem &buttonYes,
149     const KDbGuiItem &buttonNo,
150     const QString &dontShowAskAgainName,
151     KDbMessageHandler::Options options,
152     KDbMessageHandler* msgHandler)
153 {
154     if (d->enableMessages && d->messageRedirection) {
155         return d->messageRedirection->askQuestion(messageType, message, caption, defaultResult,
156                                                   buttonYes, buttonNo, dontShowAskAgainName,
157                                                   options, msgHandler);
158     }
159     return defaultResult;
160 }
161 
redirection()162 KDbMessageHandler* KDbMessageHandler::redirection()
163 {
164     return d->messageRedirection;
165 }
166 
redirection() const167 const KDbMessageHandler* KDbMessageHandler::redirection() const
168 {
169     return d->messageRedirection;
170 }
171 
setRedirection(KDbMessageHandler * otherHandler)172 void KDbMessageHandler::setRedirection(KDbMessageHandler *otherHandler)
173 {
174     d->messageRedirection = otherHandler;
175 }
176 
parentWidget()177 QWidget* KDbMessageHandler::parentWidget()
178 {
179     return d->messageHandlerParentWidget;
180 }
181