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"