File indexing completed on 2024-04-28 15:29:03

0001 /*
0002     This file is part of KNewStuffQuick.
0003     SPDX-FileCopyrightText: 2016 Dan Leinir Turthra Jensen <admin@leinir.dk>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include "quickquestionlistener.h"
0009 
0010 #include "core/question.h"
0011 
0012 #include <QCoreApplication>
0013 #include <QPointer>
0014 
0015 using namespace KNewStuffQuick;
0016 
0017 class QuickQuestionListenerHelper
0018 {
0019 public:
0020     QuickQuestionListenerHelper()
0021         : q(nullptr)
0022     {
0023     }
0024     ~QuickQuestionListenerHelper()
0025     {
0026     }
0027     QuickQuestionListenerHelper(const QuickQuestionListenerHelper &) = delete;
0028     QuickQuestionListenerHelper &operator=(const QuickQuestionListenerHelper &) = delete;
0029     QuickQuestionListener *q;
0030 };
0031 Q_GLOBAL_STATIC(QuickQuestionListenerHelper, s_kns3_quickQuestionListener)
0032 
0033 class QuickQuestionListener::Private
0034 {
0035 public:
0036     Private()
0037     {
0038     }
0039     QPointer<KNSCore::Question> question;
0040 };
0041 
0042 QuickQuestionListener *QuickQuestionListener::instance()
0043 {
0044     if (!s_kns3_quickQuestionListener()->q) {
0045         new QuickQuestionListener;
0046     }
0047     return s_kns3_quickQuestionListener()->q;
0048 }
0049 
0050 QuickQuestionListener::QuickQuestionListener()
0051     : KNSCore::QuestionListener(nullptr)
0052     , d(new Private)
0053 {
0054     setParent(qApp);
0055     s_kns3_quickQuestionListener()->q = this;
0056 }
0057 
0058 QuickQuestionListener::~QuickQuestionListener()
0059 {
0060     if (d->question) {
0061         d->question->setResponse(KNSCore::Question::CancelResponse);
0062     }
0063 }
0064 
0065 void QuickQuestionListener::askQuestion(KNSCore::Question *question)
0066 {
0067     d->question = question;
0068     switch (question->questionType()) {
0069     case KNSCore::Question::SelectFromListQuestion:
0070         Q_EMIT askListQuestion(question->title(), question->question(), question->list());
0071         break;
0072     case KNSCore::Question::ContinueCancelQuestion:
0073         Q_EMIT askContinueCancelQuestion(d->question->title(), d->question->question());
0074         break;
0075     case KNSCore::Question::InputTextQuestion:
0076         Q_EMIT askTextInputQuestion(d->question->title(), d->question->question());
0077         break;
0078     case KNSCore::Question::PasswordQuestion:
0079         Q_EMIT askPasswordQuestion(d->question->title(), d->question->question());
0080         break;
0081     case KNSCore::Question::YesNoQuestion:
0082     default:
0083         Q_EMIT askYesNoQuestion(d->question->title(), d->question->question());
0084         break;
0085     }
0086 }
0087 
0088 void KNewStuffQuick::QuickQuestionListener::passResponse(bool responseIsContinue, QString input)
0089 {
0090     if (d->question) {
0091         if (responseIsContinue) {
0092             d->question->setResponse(input);
0093             switch (d->question->questionType()) {
0094             case KNSCore::Question::ContinueCancelQuestion:
0095                 d->question->setResponse(KNSCore::Question::ContinueResponse);
0096                 break;
0097             case KNSCore::Question::YesNoQuestion:
0098                 d->question->setResponse(KNSCore::Question::YesResponse);
0099                 break;
0100             case KNSCore::Question::SelectFromListQuestion:
0101             case KNSCore::Question::InputTextQuestion:
0102             case KNSCore::Question::PasswordQuestion:
0103             default:
0104                 d->question->setResponse(KNSCore::Question::OKResponse);
0105                 break;
0106             }
0107         } else {
0108             switch (d->question->questionType()) {
0109             case KNSCore::Question::YesNoQuestion:
0110                 d->question->setResponse(KNSCore::Question::NoResponse);
0111                 break;
0112             case KNSCore::Question::SelectFromListQuestion:
0113             case KNSCore::Question::InputTextQuestion:
0114             case KNSCore::Question::PasswordQuestion:
0115             case KNSCore::Question::ContinueCancelQuestion:
0116             default:
0117                 d->question->setResponse(KNSCore::Question::CancelResponse);
0118                 break;
0119             }
0120         }
0121         d->question.clear();
0122     }
0123 }
0124 
0125 #include "moc_quickquestionlistener.cpp"