mirror of https://github.com/procxx/kepka.git
Correctly show scheduled polls.
This commit is contained in:
parent
f690f93f32
commit
8eac2dcb78
|
@ -213,8 +213,12 @@ QSize Poll::countOptimalSize() {
|
||||||
return { maxWidth, minHeight };
|
return { maxWidth, minHeight };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Poll::showVotes() const {
|
||||||
|
return _voted || _closed;
|
||||||
|
}
|
||||||
|
|
||||||
bool Poll::canVote() const {
|
bool Poll::canVote() const {
|
||||||
return !_voted && !_closed;
|
return !showVotes() && IsServerMsgId(_parent->data()->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Poll::countAnswerTop(
|
int Poll::countAnswerTop(
|
||||||
|
@ -395,7 +399,7 @@ void Poll::updateAnswerVotesFromOriginal(
|
||||||
const PollAnswer &original,
|
const PollAnswer &original,
|
||||||
int percent,
|
int percent,
|
||||||
int maxVotes) {
|
int maxVotes) {
|
||||||
if (canVote()) {
|
if (!showVotes()) {
|
||||||
answer.votesPercent = 0;
|
answer.votesPercent = 0;
|
||||||
answer.votesPercentString.clear();
|
answer.votesPercentString.clear();
|
||||||
answer.votesPercentWidth = 0;
|
answer.votesPercentWidth = 0;
|
||||||
|
@ -590,7 +594,7 @@ int Poll::paintAnswer(
|
||||||
selection);
|
selection);
|
||||||
p.setOpacity(1.);
|
p.setOpacity(1.);
|
||||||
}
|
}
|
||||||
} else if (canVote()) {
|
} else if (!showVotes()) {
|
||||||
paintRadio(p, answer, left, top, selection);
|
paintRadio(p, answer, left, top, selection);
|
||||||
} else {
|
} else {
|
||||||
paintPercent(
|
paintPercent(
|
||||||
|
@ -730,14 +734,14 @@ void Poll::saveStateInAnimation() const {
|
||||||
if (_answersAnimation) {
|
if (_answersAnimation) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const auto can = canVote();
|
const auto show = showVotes();
|
||||||
_answersAnimation = std::make_unique<AnswersAnimation>();
|
_answersAnimation = std::make_unique<AnswersAnimation>();
|
||||||
_answersAnimation->data.reserve(_answers.size());
|
_answersAnimation->data.reserve(_answers.size());
|
||||||
const auto convert = [&](const Answer &answer) {
|
const auto convert = [&](const Answer &answer) {
|
||||||
auto result = AnswerAnimation();
|
auto result = AnswerAnimation();
|
||||||
result.percent = can ? 0. : float64(answer.votesPercent);
|
result.percent = show ? float64(answer.votesPercent) : 0.;
|
||||||
result.filling = can ? 0. : answer.filling;
|
result.filling = show ? answer.filling : 0.;
|
||||||
result.opacity = can ? 0. : 1.;
|
result.opacity = show ? 1. : 0.;
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
ranges::transform(
|
ranges::transform(
|
||||||
|
@ -751,7 +755,7 @@ bool Poll::checkAnimationStart() const {
|
||||||
// Skip initial changes.
|
// Skip initial changes.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const auto result = (canVote() != (!_poll->voted() && !_poll->closed))
|
const auto result = (showVotes() != (_poll->voted() || _poll->closed))
|
||||||
|| answerVotesChanged();
|
|| answerVotesChanged();
|
||||||
if (result) {
|
if (result) {
|
||||||
saveStateInAnimation();
|
saveStateInAnimation();
|
||||||
|
@ -764,12 +768,12 @@ void Poll::startAnswersAnimation() const {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto can = canVote();
|
const auto show = showVotes();
|
||||||
auto &&both = ranges::view::zip(_answers, _answersAnimation->data);
|
auto &&both = ranges::view::zip(_answers, _answersAnimation->data);
|
||||||
for (auto &&[answer, data] : both) {
|
for (auto &&[answer, data] : both) {
|
||||||
data.percent.start(can ? 0. : float64(answer.votesPercent));
|
data.percent.start(show ? float64(answer.votesPercent) : 0.);
|
||||||
data.filling.start(can ? 0. : answer.filling);
|
data.filling.start(show ? answer.filling : 0.);
|
||||||
data.opacity.start(can ? 0. : 1.);
|
data.opacity.start(show ? 1. : 0.);
|
||||||
}
|
}
|
||||||
_answersAnimation->progress.start(
|
_answersAnimation->progress.start(
|
||||||
[=] { history()->owner().requestViewRepaint(_parent); },
|
[=] { history()->owner().requestViewRepaint(_parent); },
|
||||||
|
@ -785,6 +789,7 @@ TextState Poll::textState(QPoint point, StateRequest request) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto can = canVote();
|
const auto can = canVote();
|
||||||
|
const auto show = showVotes();
|
||||||
const auto padding = st::msgPadding;
|
const auto padding = st::msgPadding;
|
||||||
auto paintw = width();
|
auto paintw = width();
|
||||||
auto tshift = st::historyPollQuestionTop;
|
auto tshift = st::historyPollQuestionTop;
|
||||||
|
@ -804,7 +809,7 @@ TextState Poll::textState(QPoint point, StateRequest request) const {
|
||||||
if (can) {
|
if (can) {
|
||||||
_lastLinkPoint = point;
|
_lastLinkPoint = point;
|
||||||
result.link = answer.handler;
|
result.link = answer.handler;
|
||||||
} else {
|
} else if (show) {
|
||||||
result.customTooltip = true;
|
result.customTooltip = true;
|
||||||
using Flag = Ui::Text::StateRequest::Flag;
|
using Flag = Ui::Text::StateRequest::Flag;
|
||||||
if (request.flags & Flag::LookupCustomTooltip) {
|
if (request.flags & Flag::LookupCustomTooltip) {
|
||||||
|
|
|
@ -51,7 +51,8 @@ private:
|
||||||
QSize countOptimalSize() override;
|
QSize countOptimalSize() override;
|
||||||
QSize countCurrentSize(int newWidth) override;
|
QSize countCurrentSize(int newWidth) override;
|
||||||
|
|
||||||
bool canVote() const;
|
[[nodiscard]] bool showVotes() const;
|
||||||
|
[[nodiscard]] bool canVote() const;
|
||||||
|
|
||||||
[[nodiscard]] int countAnswerTop(
|
[[nodiscard]] int countAnswerTop(
|
||||||
const Answer &answer,
|
const Answer &answer,
|
||||||
|
|
Loading…
Reference in New Issue