commit
12280c7321
15 changed files with 184 additions and 6 deletions
|
@ -230,6 +230,24 @@ MessageContentBase {
|
|||
width: 1
|
||||
height: Theme.paddingSmall
|
||||
}
|
||||
Label {
|
||||
width: parent.width
|
||||
wrapMode: Text.Wrap
|
||||
visible: isQuiz && text.length > 0
|
||||
text: Emoji.emojify(Functions.enhanceMessageText(pollData.type.explanation) || "", font.pixelSize)
|
||||
textFormat: Text.StyledText
|
||||
color: pollMessageComponent.isOwnMessage || pollMessageComponent.highlighted ? Theme.highlightColor : Theme.primaryColor
|
||||
font.pixelSize: Theme.fontSizeExtraSmall
|
||||
leftPadding: Theme.iconSizeSmall
|
||||
bottomPadding: Theme.paddingSmall
|
||||
Icon {
|
||||
source: "image://theme/icon-s-high-importance"
|
||||
asynchronous: true
|
||||
width: Theme.iconSizeExtraSmall
|
||||
height: Theme.iconSizeExtraSmall
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
x: -Theme.horizontalPageMargin/2
|
||||
|
@ -259,7 +277,7 @@ MessageContentBase {
|
|||
visible: !pollMessageComponent.canAnswer && !pollData.is_anonymous && pollData.total_voter_count > 0
|
||||
icon.source: "image://theme/icon-m-media-artists"
|
||||
onClicked: {
|
||||
pageStack.push(Qt.resolvedUrl("../../pages/PollResultsPage.qml"), { chatId:chatId, message:pollMessageComponent.message});
|
||||
pageStack.push(Qt.resolvedUrl("../../pages/PollResultsPage.qml"), { chatId:chatId, message:pollMessageComponent.rawMessage});
|
||||
}
|
||||
Icon {
|
||||
opacity: 0.8
|
||||
|
|
|
@ -39,6 +39,7 @@ Dialog {
|
|||
property alias quiz: quizSwitch.checked
|
||||
property alias multiple: multipleSwitch.checked
|
||||
property string replyToMessageId: "0"
|
||||
property alias quizExplanation: quizExplanationTextArea.text
|
||||
// poll request data end
|
||||
|
||||
canAccept: validationErrors.length === 0
|
||||
|
@ -81,6 +82,9 @@ Dialog {
|
|||
if(quiz && (correctOption < 0 || correctOption > options.count - 1)) {
|
||||
errors.push(qsTr("To send a quiz, you have to specify the right answer."));
|
||||
}
|
||||
if(quiz && quizExplanationTextArea.hasError) {
|
||||
errors.push(qsTr("An explanation can be up to 200 characters long."));
|
||||
}
|
||||
if(errors.length === 0) {
|
||||
validationErrorsVisible = false;
|
||||
}
|
||||
|
@ -333,6 +337,25 @@ Dialog {
|
|||
}
|
||||
description: qsTr("Quizzes have one correct answer. Participants can't revoke their responses.")
|
||||
}
|
||||
TextArea {
|
||||
id: quizExplanationTextArea
|
||||
width: parent.width
|
||||
opacity: pollCreationPage.quiz ? 1.0 : 0.0
|
||||
Behavior on opacity { FadeAnimation {} }
|
||||
height: pollCreationPage.quiz ? implicitHeight : 0
|
||||
Behavior on height { NumberAnimation { duration: quizExplanationTextArea.focus ? 0 : 200 } }
|
||||
visible: opacity > 0
|
||||
|
||||
placeholderText: qsTr("Enter an optional explanation")
|
||||
property int charactersLeft: 200 - text.length
|
||||
property bool hasError: charactersLeft < 0
|
||||
color: hasError ? Theme.errorColor : Theme.highlightColor
|
||||
label: qsTr("Shown when the user selects a wrong answer.")
|
||||
wrapMode: TextEdit.Wrap
|
||||
onFocusChanged: {
|
||||
validate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -342,7 +365,7 @@ Dialog {
|
|||
optionsArr.push(options.get(i).text);
|
||||
}
|
||||
|
||||
tdLibWrapper.sendPollMessage(chatId, pollQuestion, optionsArr, anonymous, quiz ? correctOption : -1, multiple, "0");
|
||||
tdLibWrapper.sendPollMessage(chatId, pollQuestion, optionsArr, anonymous, quiz ? correctOption : -1, multiple, quizExplanation, "0");
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -569,7 +569,7 @@ void TDLibWrapper::sendStickerMessage(const QString &chatId, const QString &file
|
|||
this->sendRequest(requestObject);
|
||||
}
|
||||
|
||||
void TDLibWrapper::sendPollMessage(const QString &chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &replyToMessageId)
|
||||
void TDLibWrapper::sendPollMessage(const QString &chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &explanation, const QString &replyToMessageId)
|
||||
{
|
||||
LOG("Sending poll message" << chatId << question << replyToMessageId);
|
||||
QVariantMap requestObject;
|
||||
|
@ -585,6 +585,11 @@ void TDLibWrapper::sendPollMessage(const QString &chatId, const QString &questio
|
|||
if(correctOption > -1) {
|
||||
pollType.insert(_TYPE, "pollTypeQuiz");
|
||||
pollType.insert("correct_option_id", correctOption);
|
||||
if(!explanation.isEmpty()) {
|
||||
QVariantMap formattedExplanation;
|
||||
formattedExplanation.insert("text", explanation);
|
||||
pollType.insert("explanation", formattedExplanation);
|
||||
}
|
||||
} else {
|
||||
pollType.insert(_TYPE, "pollTypeRegular");
|
||||
pollType.insert("allow_multiple_answers", multiple);
|
||||
|
|
|
@ -145,7 +145,7 @@ public:
|
|||
Q_INVOKABLE void sendVoiceNoteMessage(const QString &chatId, const QString &filePath, const QString &message, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendLocationMessage(const QString &chatId, double latitude, double longitude, double horizontalAccuracy, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendStickerMessage(const QString &chatId, const QString &fileId, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendPollMessage(const QString &chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void sendPollMessage(const QString &chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &explanation, const QString &replyToMessageId = "0");
|
||||
Q_INVOKABLE void forwardMessages(const QString &chatId, const QString &fromChatId, const QVariantList &messageIds, bool sendCopy, bool removeCaption);
|
||||
Q_INVOKABLE void getMessage(qlonglong chatId, qlonglong messageId);
|
||||
Q_INVOKABLE void getCallbackQueryAnswer(const QString &chatId, const QString &messageId, const QVariantMap &payload);
|
||||
|
|
|
@ -1064,7 +1064,7 @@
|
|||
<name>MessageVoiceNote</name>
|
||||
<message>
|
||||
<source>Voice Note</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Sprachnotiz</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -1298,6 +1298,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Quizze haben eine korrekte Antwort. Teilnehmer können ihre Antwort nicht zurückziehen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation>Geben Sie eine optionale Erklärung ein</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation>Wird bei Auswahl einer falschen Antwort gezeigt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation>Eine Erklärung kann bis zu 200 Zeichen lang sein.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1064,7 +1064,7 @@
|
|||
<name>MessageVoiceNote</name>
|
||||
<message>
|
||||
<source>Voice Note</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Voice Note</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -1298,6 +1298,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Quizzes have one correct answer. Participants can't revoke their responses.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation>Enter an optional explanation</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation>Shown when the user selects a wrong answer.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation>An explanation can be up to 200 characters long.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1298,6 +1298,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Los interrogatorios tienen una respuesta correcta. Los participantes no pueden revocar sus respuestas.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1299,6 +1299,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Visoilla on yksi oikea vastaus. Osallistujat eivät voi kumota vastaustaan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1279,6 +1279,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1298,6 +1298,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>I quiz hanno una sola risposta corretta. I partecipanti non possono revocare le risposte.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1317,6 +1317,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Quizy mają jedną poprawną odpowiedź. Uczestnicy nie mogą odwołać swoich odpowiedzi.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1317,6 +1317,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Тесты имеют один правильный ответ. Участники не могут отозвать свои ответы.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1298,6 +1298,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Frågor har ett (1) korrekt svar. Deltagarna kan inte återkalla sina svar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1279,6 +1279,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Quiz 拥有一个正确选项,参与者无法撤销回答。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
|
@ -1298,6 +1298,18 @@
|
|||
<source>Quizzes have one correct answer. Participants can't revoke their responses.</source>
|
||||
<translation>Quizzes have one correct answer. Participants can't revoke their responses.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Enter an optional explanation</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shown when the user selects a wrong answer.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>An explanation can be up to 200 characters long.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PollResultsPage</name>
|
||||
|
|
Loading…
Reference in a new issue