mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added icons to buttons for privacy settings that require premium.
This commit is contained in:
parent
02e1c03ed9
commit
27bd9e3ee5
1 changed files with 65 additions and 18 deletions
|
@ -8,7 +8,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/settings_privacy_security.h"
|
#include "settings/settings_privacy_security.h"
|
||||||
|
|
||||||
#include "api/api_authorizations.h"
|
#include "api/api_authorizations.h"
|
||||||
#include "api/api_blocked_peers.h"
|
|
||||||
#include "api/api_cloud_password.h"
|
#include "api/api_cloud_password.h"
|
||||||
#include "api/api_self_destruct.h"
|
#include "api/api_self_destruct.h"
|
||||||
#include "api/api_sensitive_content.h"
|
#include "api/api_sensitive_content.h"
|
||||||
|
@ -24,31 +23,25 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "settings/settings_privacy_controllers.h"
|
#include "settings/settings_privacy_controllers.h"
|
||||||
#include "settings/settings_websites.h"
|
#include "settings/settings_websites.h"
|
||||||
#include "base/timer_rpl.h"
|
#include "base/timer_rpl.h"
|
||||||
#include "boxes/edit_privacy_box.h"
|
|
||||||
#include "boxes/passcode_box.h"
|
#include "boxes/passcode_box.h"
|
||||||
#include "boxes/auto_lock_box.h"
|
|
||||||
#include "boxes/sessions_box.h"
|
#include "boxes/sessions_box.h"
|
||||||
#include "ui/boxes/confirm_box.h"
|
#include "ui/boxes/confirm_box.h"
|
||||||
#include "boxes/self_destruction_box.h"
|
#include "boxes/self_destruction_box.h"
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
#include "core/core_settings.h"
|
#include "core/core_settings.h"
|
||||||
#include "ui/chat/chat_style.h"
|
#include "ui/chat/chat_style.h"
|
||||||
|
#include "ui/effects/premium_top_bar.h"
|
||||||
#include "ui/text/format_values.h"
|
#include "ui/text/format_values.h"
|
||||||
#include "ui/text/text_utilities.h"
|
#include "ui/text/text_utilities.h"
|
||||||
#include "ui/toast/toast.h"
|
#include "ui/toast/toast.h"
|
||||||
#include "ui/wrap/vertical_layout.h"
|
|
||||||
#include "ui/wrap/slide_wrap.h"
|
#include "ui/wrap/slide_wrap.h"
|
||||||
#include "ui/wrap/fade_wrap.h"
|
#include "ui/wrap/fade_wrap.h"
|
||||||
#include "ui/widgets/shadow.h"
|
#include "ui/widgets/shadow.h"
|
||||||
#include "ui/widgets/labels.h"
|
|
||||||
#include "ui/widgets/buttons.h"
|
|
||||||
#include "ui/widgets/checkbox.h"
|
#include "ui/widgets/checkbox.h"
|
||||||
#include "ui/layers/generic_box.h"
|
|
||||||
#include "ui/vertical_list.h"
|
#include "ui/vertical_list.h"
|
||||||
|
#include "ui/rect.h"
|
||||||
#include "calls/calls_instance.h"
|
#include "calls/calls_instance.h"
|
||||||
#include "core/core_cloud_password.h"
|
|
||||||
#include "core/update_checker.h"
|
#include "core/update_checker.h"
|
||||||
#include "base/platform/base_platform_last_input.h"
|
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "data/data_session.h"
|
#include "data/data_session.h"
|
||||||
#include "data/data_chat.h"
|
#include "data/data_chat.h"
|
||||||
|
@ -62,9 +55,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
#include "styles/style_settings.h"
|
#include "styles/style_settings.h"
|
||||||
#include "styles/style_menu_icons.h"
|
#include "styles/style_menu_icons.h"
|
||||||
#include "styles/style_layers.h"
|
#include "styles/style_layers.h"
|
||||||
#include "styles/style_boxes.h"
|
|
||||||
|
|
||||||
#include <QtGui/QGuiApplication>
|
#include <QtGui/QGuiApplication>
|
||||||
|
#include <QtSvg/QSvgRenderer>
|
||||||
|
|
||||||
namespace Settings {
|
namespace Settings {
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -73,6 +66,53 @@ constexpr auto kUpdateTimeout = 60 * crl::time(1000);
|
||||||
|
|
||||||
using Privacy = Api::UserPrivacy;
|
using Privacy = Api::UserPrivacy;
|
||||||
|
|
||||||
|
[[nodiscard]] QImage PremiumStar() {
|
||||||
|
const auto factor = style::DevicePixelRatio();
|
||||||
|
const auto size = Size(st::settingsButtonNoIcon.style.font->ascent);
|
||||||
|
auto image = QImage(
|
||||||
|
size * factor,
|
||||||
|
QImage::Format_ARGB32_Premultiplied);
|
||||||
|
image.setDevicePixelRatio(factor);
|
||||||
|
image.fill(Qt::transparent);
|
||||||
|
{
|
||||||
|
auto p = QPainter(&image);
|
||||||
|
auto star = QSvgRenderer(Ui::Premium::ColorizedSvg());
|
||||||
|
star.render(&p, Rect(size));
|
||||||
|
}
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddPremiumStar(
|
||||||
|
not_null<Ui::SettingsButton*> button,
|
||||||
|
not_null<Main::Session*> session,
|
||||||
|
rpl::producer<QString> label,
|
||||||
|
const QMargins &padding) {
|
||||||
|
const auto badge = Ui::CreateChild<Ui::RpWidget>(button.get());
|
||||||
|
badge->showOn(Data::AmPremiumValue(session));
|
||||||
|
const auto sampleLeft = st::settingsColorSamplePadding.left();
|
||||||
|
const auto badgeLeft = padding.left() + sampleLeft;
|
||||||
|
|
||||||
|
auto star = PremiumStar();
|
||||||
|
badge->resize(star.size() / style::DevicePixelRatio());
|
||||||
|
badge->paintRequest(
|
||||||
|
) | rpl::start_with_next([=] {
|
||||||
|
auto p = QPainter(badge);
|
||||||
|
p.drawImage(0, 0, star);
|
||||||
|
}, badge->lifetime());
|
||||||
|
|
||||||
|
rpl::combine(
|
||||||
|
button->sizeValue(),
|
||||||
|
std::move(label)
|
||||||
|
) | rpl::start_with_next([=](const QSize &s, const QString &) {
|
||||||
|
if (s.isNull()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
badge->moveToLeft(
|
||||||
|
button->fullTextWidth() + badgeLeft,
|
||||||
|
(s.height() - badge->height()) / 2);
|
||||||
|
}, badge->lifetime());
|
||||||
|
}
|
||||||
|
|
||||||
QString PrivacyBase(Privacy::Key key, Privacy::Option option) {
|
QString PrivacyBase(Privacy::Key key, Privacy::Option option) {
|
||||||
using Key = Privacy::Key;
|
using Key = Privacy::Key;
|
||||||
using Option = Privacy::Option;
|
using Option = Privacy::Option;
|
||||||
|
@ -137,6 +177,9 @@ void AddPremiumPrivacyButton(
|
||||||
container,
|
container,
|
||||||
rpl::duplicate(label),
|
rpl::duplicate(label),
|
||||||
st));
|
st));
|
||||||
|
|
||||||
|
AddPremiumStar(button, session, rpl::duplicate(label), st.padding);
|
||||||
|
|
||||||
struct State {
|
struct State {
|
||||||
State(QWidget *parent) : widget(parent) {
|
State(QWidget *parent) : widget(parent) {
|
||||||
widget.setAttribute(Qt::WA_TransparentForMouseEvents);
|
widget.setAttribute(Qt::WA_TransparentForMouseEvents);
|
||||||
|
@ -246,18 +289,22 @@ void AddMessagesPrivacyButton(
|
||||||
not_null<Ui::VerticalLayout*> container) {
|
not_null<Ui::VerticalLayout*> container) {
|
||||||
const auto session = &controller->session();
|
const auto session = &controller->session();
|
||||||
const auto privacy = &session->api().globalPrivacy();
|
const auto privacy = &session->api().globalPrivacy();
|
||||||
AddButtonWithLabel(
|
auto label = rpl::conditional(
|
||||||
|
privacy->newRequirePremium(),
|
||||||
|
tr::lng_edit_privacy_premium(),
|
||||||
|
tr::lng_edit_privacy_everyone());
|
||||||
|
const auto &st = st::settingsButtonNoIcon;
|
||||||
|
const auto button = AddButtonWithLabel(
|
||||||
container,
|
container,
|
||||||
tr::lng_settings_messages_privacy(),
|
tr::lng_settings_messages_privacy(),
|
||||||
rpl::conditional(
|
rpl::duplicate(label),
|
||||||
privacy->newRequirePremium(),
|
st,
|
||||||
tr::lng_edit_privacy_premium(),
|
{});
|
||||||
tr::lng_edit_privacy_everyone()),
|
button->addClickHandler([=] {
|
||||||
st::settingsButtonNoIcon,
|
|
||||||
{}
|
|
||||||
)->addClickHandler([=] {
|
|
||||||
controller->show(Box(EditMessagesPrivacyBox, controller));
|
controller->show(Box(EditMessagesPrivacyBox, controller));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
AddPremiumStar(button, session, rpl::duplicate(label), st.padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<int> BlockedPeersCount(not_null<::Main::Session*> session) {
|
rpl::producer<int> BlockedPeersCount(not_null<::Main::Session*> session) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue