1 /*
2 This file is part of KNewStuffQuick.
3 SPDX-FileCopyrightText: 2016 Dan Leinir Turthra Jensen <admin@leinir.dk>
4
5 SPDX-License-Identifier: LGPL-2.1-or-later
6 */
7
8 #include "quickquestionlistener.h"
9
10 #include "core/question.h"
11
12 #include <QCoreApplication>
13
14 using namespace KNewStuffQuick;
15
16 class QuickQuestionListenerHelper
17 {
18 public:
QuickQuestionListenerHelper()19 QuickQuestionListenerHelper()
20 : q(nullptr)
21 {
22 }
~QuickQuestionListenerHelper()23 ~QuickQuestionListenerHelper()
24 {
25 }
26 QuickQuestionListenerHelper(const QuickQuestionListenerHelper &) = delete;
27 QuickQuestionListenerHelper &operator=(const QuickQuestionListenerHelper &) = delete;
28 QuickQuestionListener *q;
29 };
30 Q_GLOBAL_STATIC(QuickQuestionListenerHelper, s_kns3_quickQuestionListener)
31
32 class QuickQuestionListener::Private
33 {
34 public:
Private()35 Private()
36 {
37 }
38 KNSCore::Question *question = nullptr;
39 };
40
instance()41 QuickQuestionListener *QuickQuestionListener::instance()
42 {
43 if (!s_kns3_quickQuestionListener()->q) {
44 new QuickQuestionListener;
45 }
46 return s_kns3_quickQuestionListener()->q;
47 }
48
QuickQuestionListener()49 QuickQuestionListener::QuickQuestionListener()
50 : KNSCore::QuestionListener(nullptr)
51 , d(new Private)
52 {
53 setParent(qApp);
54 s_kns3_quickQuestionListener()->q = this;
55 }
56
~QuickQuestionListener()57 QuickQuestionListener::~QuickQuestionListener()
58 {
59 if (d->question) {
60 d->question->setResponse(KNSCore::Question::CancelResponse);
61 }
62 delete d;
63 }
64
askQuestion(KNSCore::Question * question)65 void QuickQuestionListener::askQuestion(KNSCore::Question *question)
66 {
67 d->question = question;
68 switch (question->questionType()) {
69 case KNSCore::Question::SelectFromListQuestion:
70 Q_EMIT askListQuestion(question->title(), question->question(), question->list());
71 break;
72 case KNSCore::Question::ContinueCancelQuestion:
73 Q_EMIT askContinueCancelQuestion(d->question->title(), d->question->question());
74 break;
75 case KNSCore::Question::InputTextQuestion:
76 Q_EMIT askTextInputQuestion(d->question->title(), d->question->question());
77 break;
78 case KNSCore::Question::PasswordQuestion:
79 Q_EMIT askPasswordQuestion(d->question->title(), d->question->question());
80 break;
81 case KNSCore::Question::YesNoQuestion:
82 default:
83 Q_EMIT askYesNoQuestion(d->question->title(), d->question->question());
84 break;
85 }
86 }
87
passResponse(bool responseIsContinue,QString input)88 void KNewStuffQuick::QuickQuestionListener::passResponse(bool responseIsContinue, QString input)
89 {
90 if (d->question) {
91 if (responseIsContinue) {
92 d->question->setResponse(input);
93 switch (d->question->questionType()) {
94 case KNSCore::Question::ContinueCancelQuestion:
95 d->question->setResponse(KNSCore::Question::ContinueResponse);
96 break;
97 case KNSCore::Question::YesNoQuestion:
98 d->question->setResponse(KNSCore::Question::YesResponse);
99 break;
100 case KNSCore::Question::SelectFromListQuestion:
101 case KNSCore::Question::InputTextQuestion:
102 case KNSCore::Question::PasswordQuestion:
103 default:
104 d->question->setResponse(KNSCore::Question::OKResponse);
105 break;
106 }
107 } else {
108 switch (d->question->questionType()) {
109 case KNSCore::Question::YesNoQuestion:
110 d->question->setResponse(KNSCore::Question::NoResponse);
111 break;
112 case KNSCore::Question::SelectFromListQuestion:
113 case KNSCore::Question::InputTextQuestion:
114 case KNSCore::Question::PasswordQuestion:
115 case KNSCore::Question::ContinueCancelQuestion:
116 default:
117 d->question->setResponse(KNSCore::Question::CancelResponse);
118 break;
119 }
120 }
121 d->question = nullptr;
122 }
123 }
124