mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
[poll-create] Added poll option toggle to disable revoting.
This commit is contained in:
@@ -6855,6 +6855,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
"lng_polls_create_show_who_voted_about" = "Display voter name on each option.";
|
||||
"lng_polls_create_allow_multiple_answers" = "Allow Multiple Answers";
|
||||
"lng_polls_create_allow_multiple_answers_about" = "Voters can select more than one option.";
|
||||
"lng_polls_create_allow_revoting" = "Allow Revoting";
|
||||
"lng_polls_create_allow_revoting_about" = "Voters can change their vote.";
|
||||
"lng_polls_create_shuffle_options" = "Shuffle Options";
|
||||
"lng_polls_create_shuffle_options_about" = "Answers appear in random order for each voter.";
|
||||
"lng_polls_create_set_correct_answer" = "Set Correct Answer";
|
||||
|
||||
@@ -1108,6 +1108,16 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
|
||||
| rpl::then(state->multipleForceOff.events()),
|
||||
st::detailedSettingsButtonStyle)
|
||||
: nullptr;
|
||||
const auto revoting = AddPollToggleButton(
|
||||
container,
|
||||
tr::lng_polls_create_allow_revoting(),
|
||||
tr::lng_polls_create_allow_revoting_about(),
|
||||
{
|
||||
.icon = &st::pollBoxFilledPollRevoteIcon,
|
||||
.background = &st::settingsIconBg6,
|
||||
},
|
||||
rpl::single(!(_chosen & PollData::Flag::RevotingDisabled)),
|
||||
st::detailedSettingsButtonStyle);
|
||||
const auto shuffle = AddPollToggleButton(
|
||||
container,
|
||||
tr::lng_polls_create_shuffle_options(),
|
||||
@@ -1150,6 +1160,7 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
|
||||
}, solution->lifetime());
|
||||
|
||||
quiz->setToggleLocked(_disabled & PollData::Flag::Quiz);
|
||||
revoting->setToggleLocked(_disabled & PollData::Flag::RevotingDisabled);
|
||||
shuffle->setToggleLocked(_disabled & PollData::Flag::ShuffleAnswers);
|
||||
if (multiple) {
|
||||
multiple->setToggleLocked((_disabled & PollData::Flag::MultiChoice)
|
||||
@@ -1224,6 +1235,7 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
|
||||
result.setFlags(Flag(0)
|
||||
| (publicVotes ? Flag::PublicVotes : Flag(0))
|
||||
| (multiChoice ? Flag::MultiChoice : Flag(0))
|
||||
| (!revoting->toggled() ? Flag::RevotingDisabled : Flag(0))
|
||||
| (shuffle->toggled() ? Flag::ShuffleAnswers : Flag(0))
|
||||
| (quiz->toggled() ? Flag::Quiz : Flag(0)));
|
||||
return result;
|
||||
|
||||
@@ -77,7 +77,8 @@ bool PollData::applyChanges(const MTPDpoll &poll) {
|
||||
| (poll.is_public_voters() ? Flag::PublicVotes : Flag(0))
|
||||
| (poll.is_multiple_choice() ? Flag::MultiChoice : Flag(0))
|
||||
| (poll.is_quiz() ? Flag::Quiz : Flag(0))
|
||||
| (poll.is_shuffle_answers() ? Flag::ShuffleAnswers : Flag(0));
|
||||
| (poll.is_shuffle_answers() ? Flag::ShuffleAnswers : Flag(0))
|
||||
| (poll.is_revoting_disabled() ? Flag::RevotingDisabled : Flag(0));
|
||||
const auto newCloseDate = poll.vclose_date().value_or_empty();
|
||||
const auto newClosePeriod = poll.vclose_period().value_or_empty();
|
||||
auto newAnswers = ranges::views::all(
|
||||
@@ -265,6 +266,10 @@ bool PollData::shuffleAnswers() const {
|
||||
return (_flags & Flag::ShuffleAnswers);
|
||||
}
|
||||
|
||||
bool PollData::revotingDisabled() const {
|
||||
return (_flags & Flag::RevotingDisabled);
|
||||
}
|
||||
|
||||
MTPPoll PollDataToMTP(not_null<const PollData*> poll, bool close) {
|
||||
const auto convert = [&](const PollAnswer &answer) {
|
||||
return MTP_pollAnswer(
|
||||
@@ -289,6 +294,7 @@ MTPPoll PollDataToMTP(not_null<const PollData*> poll, bool close) {
|
||||
| (poll->publicVotes() ? Flag::f_public_voters : Flag(0))
|
||||
| (poll->quiz() ? Flag::f_quiz : Flag(0))
|
||||
| (poll->shuffleAnswers() ? Flag::f_shuffle_answers : Flag(0))
|
||||
| (poll->revotingDisabled() ? Flag::f_revoting_disabled : Flag(0))
|
||||
| (poll->closePeriod > 0 ? Flag::f_close_period : Flag(0))
|
||||
| (poll->closeDate > 0 ? Flag::f_close_date : Flag(0));
|
||||
return MTP_poll(
|
||||
|
||||
@@ -39,11 +39,12 @@ struct PollData {
|
||||
[[nodiscard]] Main::Session &session() const;
|
||||
|
||||
enum class Flag {
|
||||
Closed = 0x01,
|
||||
PublicVotes = 0x02,
|
||||
MultiChoice = 0x04,
|
||||
Quiz = 0x08,
|
||||
ShuffleAnswers = 0x10,
|
||||
Closed = 0x01,
|
||||
PublicVotes = 0x02,
|
||||
MultiChoice = 0x04,
|
||||
Quiz = 0x08,
|
||||
ShuffleAnswers = 0x10,
|
||||
RevotingDisabled = 0x20,
|
||||
};
|
||||
friend inline constexpr bool is_flag_type(Flag) { return true; };
|
||||
using Flags = base::flags<Flag>;
|
||||
@@ -65,6 +66,7 @@ struct PollData {
|
||||
[[nodiscard]] bool multiChoice() const;
|
||||
[[nodiscard]] bool quiz() const;
|
||||
[[nodiscard]] bool shuffleAnswers() const;
|
||||
[[nodiscard]] bool revotingDisabled() const;
|
||||
|
||||
PollId id = 0;
|
||||
TextWithEntities question;
|
||||
|
||||
@@ -1519,7 +1519,7 @@ void AddPollActions(
|
||||
return;
|
||||
}
|
||||
const auto itemId = item->fullId();
|
||||
if (poll->voted() && !poll->quiz()) {
|
||||
if (poll->voted() && !poll->quiz() && !poll->revotingDisabled()) {
|
||||
menu->addAction(tr::lng_polls_retract(tr::now), [=] {
|
||||
poll->session().api().polls().sendVotes(itemId, {});
|
||||
}, &st::menuIconRetractVote);
|
||||
|
||||
Reference in New Issue
Block a user