Use tr:: instead of Lang::Viewer.

This commit is contained in:
John Preston 2019-06-18 14:16:43 +02:00
parent f35085800a
commit 7af0dd105e
43 changed files with 483 additions and 511 deletions

View File

@ -63,14 +63,14 @@ void AutoDownloadBox::setupContent() {
}; };
const auto values = Ui::CreateChild<base::flat_map<Type, int>>(content); const auto values = Ui::CreateChild<base::flat_map<Type, int>>(content);
const auto add = [&](Type type, LangKey label) { const auto add = [&](Type type, rpl::producer<QString> label) {
if (ranges::find(kHidden, type) != end(kHidden)) { if (ranges::find(kHidden, type) != end(kHidden)) {
return; return;
} }
const auto value = settings->bytesLimit(_source, type); const auto value = settings->bytesLimit(_source, type);
AddButton( AddButton(
content, content,
label, std::move(label),
st::settingsButton st::settingsButton
)->toggleOn( )->toggleOn(
rpl::single(value > 0) rpl::single(value > 0)
@ -80,13 +80,13 @@ void AutoDownloadBox::setupContent() {
}, content->lifetime()); }, content->lifetime());
values->emplace(type, value); values->emplace(type, value);
}; };
add(Type::Photo, lng_media_photo_title); add(Type::Photo, tr::lng_media_photo_title());
add(Type::VoiceMessage, lng_media_audio_title); add(Type::VoiceMessage, tr::lng_media_audio_title());
add(Type::VideoMessage, lng_media_video_messages_title); add(Type::VideoMessage, tr::lng_media_video_messages_title());
add(Type::Video, lng_media_video_title); add(Type::Video, tr::lng_media_video_title());
add(Type::File, lng_media_file_title); add(Type::File, tr::lng_media_file_title());
add(Type::Music, lng_media_music_title); add(Type::Music, tr::lng_media_music_title());
add(Type::GIF, lng_media_animation_title); add(Type::GIF, tr::lng_media_animation_title());
const auto limits = Ui::CreateChild<rpl::event_stream<int>>(content); const auto limits = Ui::CreateChild<rpl::event_stream<int>>(content);
using Pair = base::flat_map<Type, int>::value_type; using Pair = base::flat_map<Type, int>::value_type;
@ -98,7 +98,7 @@ void AutoDownloadBox::setupContent() {
const auto limit = Ui::CreateChild<int>(content, initialLimit); const auto limit = Ui::CreateChild<int>(content, initialLimit);
AddButtonWithLabel( AddButtonWithLabel(
content, content,
lng_media_size_limit, tr::lng_media_size_limit(),
limits->events_starting_with_copy( limits->events_starting_with_copy(
initialLimit initialLimit
) | rpl::map([](int value) { ) | rpl::map([](int value) {

View File

@ -350,9 +350,7 @@ void ChangePhoneBox::prepare() {
const auto label = Ui::CreateChild<Ui::FlatLabel>( const auto label = Ui::CreateChild<Ui::FlatLabel>(
this, this,
Lang::Viewer( tr::lng_change_phone_about(Ui::Text::RichLangValue),
lng_change_phone_about
) | Ui::Text::ToRichLangValue(),
st::changePhoneDescription); st::changePhoneDescription);
label->moveToLeft((st::boxWideWidth - label->width()) / 2, st::changePhoneDescriptionTop); label->moveToLeft((st::boxWideWidth - label->width()) / 2, st::changePhoneDescriptionTop);

View File

@ -597,7 +597,7 @@ not_null<Ui::InputField*> CreatePollBox::setupQuestion(
not_null<Ui::VerticalLayout*> container) { not_null<Ui::VerticalLayout*> container) {
using namespace Settings; using namespace Settings;
AddSubsectionTitle(container, lng_polls_create_question); AddSubsectionTitle(container, tr::lng_polls_create_question());
const auto question = container->add( const auto question = container->add(
object_ptr<Ui::InputField>( object_ptr<Ui::InputField>(
container, container,
@ -645,7 +645,7 @@ object_ptr<Ui::RpWidget> CreatePollBox::setupContent() {
const auto question = setupQuestion(container); const auto question = setupQuestion(container);
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_polls_create_options); AddSubsectionTitle(container, tr::lng_polls_create_options());
const auto options = lifetime().make_state<Options>( const auto options = lifetime().make_state<Options>(
getDelegate()->outerContainer(), getDelegate()->outerContainer(),
container); container);

View File

@ -311,13 +311,13 @@ void EditPrivacyBox::setupContent() {
content, content,
object_ptr<Button>( object_ptr<Button>(
content, content,
Lang::Viewer(text), rpl::duplicate(text),
st::settingsButton))); st::settingsButton)));
CreateRightLabel( CreateRightLabel(
button->entity(), button->entity(),
std::move(label), std::move(label),
st::settingsButton, st::settingsButton,
text); std::move(text));
button->toggleOn(rpl::duplicate( button->toggleOn(rpl::duplicate(
optionValue optionValue
) | rpl::map([=] { ) | rpl::map([=] {
@ -344,7 +344,7 @@ void EditPrivacyBox::setupContent() {
AddDivider(content); AddDivider(content);
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_edit_privacy_exceptions); AddSubsectionTitle(content, tr::lng_edit_privacy_exceptions());
const auto always = addExceptionLink(Exception::Always); const auto always = addExceptionLink(Exception::Always);
const auto never = addExceptionLink(Exception::Never); const auto never = addExceptionLink(Exception::Never);
addLabel(content, _controller->exceptionsDescription()); addLabel(content, _controller->exceptionsDescription());

View File

@ -43,12 +43,12 @@ public:
[[nodiscard]] virtual bool hasOption(Option option) { [[nodiscard]] virtual bool hasOption(Option option) {
return true; return true;
} }
[[nodiscard]] virtual LangKey optionsTitleKey() = 0; [[nodiscard]] virtual rpl::producer<QString> optionsTitleKey() = 0;
[[nodiscard]] virtual LangKey optionLabelKey(Option option); [[nodiscard]] virtual LangKey optionLabelKey(Option option);
[[nodiscard]] virtual rpl::producer<QString> warning() { [[nodiscard]] virtual rpl::producer<QString> warning() {
return rpl::never<QString>(); return rpl::never<QString>();
} }
[[nodiscard]] virtual LangKey exceptionButtonTextKey( [[nodiscard]] virtual rpl::producer<QString> exceptionButtonTextKey(
Exception exception) = 0; Exception exception) = 0;
[[nodiscard]] virtual QString exceptionBoxTitle( [[nodiscard]] virtual QString exceptionBoxTitle(
Exception exception) = 0; Exception exception) = 0;

View File

@ -99,7 +99,7 @@ void Controller::setupCover() {
_user, _user,
_window->sessionController(), _window->sessionController(),
(_phone.isEmpty() (_phone.isEmpty()
? Lang::Viewer(lng_contact_mobile_hidden) ? tr::lng_contact_mobile_hidden()
: rpl::single(App::formatPhone(_phone)))), : rpl::single(App::formatPhone(_phone)))),
style::margins())->setAttribute(Qt::WA_TransparentForMouseEvents); style::margins())->setAttribute(Qt::WA_TransparentForMouseEvents);
} }

View File

@ -248,10 +248,9 @@ object_ptr<Ui::RpWidget> SetupUnlink(
Fn<void(ChannelData*)> callback) { Fn<void(ChannelData*)> callback) {
auto result = object_ptr<Info::Profile::Button>( auto result = object_ptr<Info::Profile::Button>(
parent, parent,
Lang::Viewer(channel->isBroadcast() (channel->isBroadcast()
? lng_manage_discussion_group_unlink ? tr::lng_manage_discussion_group_unlink
: lng_manage_linked_channel_unlink : tr::lng_manage_linked_channel_unlink)() | Ui::Text::ToUpper(),
) | Ui::Text::ToUpper(),
st::infoUnlinkChatButton); st::infoUnlinkChatButton);
result->addClickHandler([=] { result->addClickHandler([=] {
callback(nullptr); callback(nullptr);

View File

@ -320,7 +320,7 @@ void EditAdminBox::prepare() {
: channel->anyoneCanAddMembers(); : channel->anyoneCanAddMembers();
auto [checkboxes, getChecked, changes] = CreateEditAdminRights( auto [checkboxes, getChecked, changes] = CreateEditAdminRights(
this, this,
lng_rights_edit_admin_header, tr::lng_rights_edit_admin_header(),
prepareFlags, prepareFlags,
disabledMessages, disabledMessages,
isGroup, isGroup,
@ -401,9 +401,9 @@ not_null<Ui::SlideWrap<Ui::RpWidget>*> EditAdminBox::setupTransferButton(
addDivider(); addDivider();
container->add(EditPeerInfoBox::CreateButton( container->add(EditPeerInfoBox::CreateButton(
this, this,
Lang::Viewer(isGroup (isGroup
? lng_rights_transfer_group ? tr::lng_rights_transfer_group
: lng_rights_transfer_channel), : tr::lng_rights_transfer_channel)(),
rpl::single(QString()), rpl::single(QString()),
[=] { transferOwnership(); }, [=] { transferOwnership(); },
st::peerPermissionsButton)); st::peerPermissionsButton));
@ -620,7 +620,7 @@ void EditRestrictedBox::prepare() {
auto [checkboxes, getRestrictions, changes] = CreateEditRestrictions( auto [checkboxes, getRestrictions, changes] = CreateEditRestrictions(
this, this,
lng_rights_user_restrictions_header, tr::lng_rights_user_restrictions_header(),
prepareFlags, prepareFlags,
disabledMessages); disabledMessages);
addControl(std::move(checkboxes), QMargins()); addControl(std::move(checkboxes), QMargins());

View File

@ -26,8 +26,8 @@ namespace {
void AddRadioButton( void AddRadioButton(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
HistoryVisibility value, HistoryVisibility value,
LangKey groupTextKey, const QString &groupText,
LangKey groupAboutKey, rpl::producer<QString> groupAbout,
std::shared_ptr<Ui::RadioenumGroup<HistoryVisibility>> historyVisibility) { std::shared_ptr<Ui::RadioenumGroup<HistoryVisibility>> historyVisibility) {
container->add(object_ptr<Ui::FixedHeightWidget>( container->add(object_ptr<Ui::FixedHeightWidget>(
container, container,
@ -36,13 +36,13 @@ void AddRadioButton(
container, container,
historyVisibility, historyVisibility,
value, value,
lang(groupTextKey), groupText,
st::defaultBoxCheckbox)); st::defaultBoxCheckbox));
container->add(object_ptr<Ui::PaddingWrap<Ui::FlatLabel>>( container->add(object_ptr<Ui::PaddingWrap<Ui::FlatLabel>>(
container, container,
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(groupAboutKey), std::move(groupAbout),
st::editPeerPrivacyLabel), st::editPeerPrivacyLabel),
st::editPeerPreHistoryLabelMargins)); st::editPeerPreHistoryLabelMargins));
} }
@ -80,16 +80,16 @@ void FillContent(
AddRadioButton( AddRadioButton(
container, container,
HistoryVisibility::Visible, HistoryVisibility::Visible,
lng_manage_history_visibility_shown, tr::lng_manage_history_visibility_shown(tr::now),
lng_manage_history_visibility_shown_about, tr::lng_manage_history_visibility_shown_about(),
historyVisibility); historyVisibility);
AddRadioButton( AddRadioButton(
container, container,
HistoryVisibility::Hidden, HistoryVisibility::Hidden,
lng_manage_history_visibility_hidden, tr::lng_manage_history_visibility_hidden(tr::now),
(peer->isChat() (peer->isChat()
? lng_manage_history_visibility_hidden_legacy ? tr::lng_manage_history_visibility_hidden_legacy
: lng_manage_history_visibility_hidden_about), : tr::lng_manage_history_visibility_hidden_about)(),
historyVisibility); historyVisibility);
} }

View File

@ -193,7 +193,8 @@ private:
bool canEditInformation() const; bool canEditInformation() const;
void refreshHistoryVisibility(anim::type animated = anim::type::normal); void refreshHistoryVisibility(anim::type animated = anim::type::normal);
void showEditPeerTypeBox(std::optional<LangKey> error = std::nullopt); void showEditPeerTypeBox(
std::optional<rpl::producer<QString>> error = {});
void showEditLinkedChatBox(); void showEditLinkedChatBox();
void fillPrivacyTypeButton(); void fillPrivacyTypeButton();
void fillLinkedChatButton(); void fillLinkedChatButton();
@ -449,7 +450,7 @@ object_ptr<Ui::RpWidget> Controller::createStickersEdit() {
container->add(object_ptr<Ui::FlatLabel>( container->add(object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(lng_group_stickers), tr::lng_group_stickers(),
st::editPeerSectionLabel)); st::editPeerSectionLabel));
container->add(object_ptr<Ui::FixedHeightWidget>( container->add(object_ptr<Ui::FixedHeightWidget>(
container, container,
@ -457,7 +458,7 @@ object_ptr<Ui::RpWidget> Controller::createStickersEdit() {
container->add(object_ptr<Ui::FlatLabel>( container->add(object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(lng_group_stickers_description), tr::lng_group_stickers_description(),
st::editPeerPrivacyLabel)); st::editPeerPrivacyLabel));
container->add(object_ptr<Ui::FixedHeightWidget>( container->add(object_ptr<Ui::FixedHeightWidget>(
container, container,
@ -465,7 +466,7 @@ object_ptr<Ui::RpWidget> Controller::createStickersEdit() {
container->add(object_ptr<Ui::LinkButton>( container->add(object_ptr<Ui::LinkButton>(
_wrap, _wrap,
lang(lng_group_stickers_add), tr::lng_group_stickers_add(tr::now),
st::editPeerInviteLinkButton) st::editPeerInviteLinkButton)
)->addClickHandler([=] { )->addClickHandler([=] {
Ui::show(Box<StickersBox>(channel), LayerOption::KeepOther); Ui::show(Box<StickersBox>(channel), LayerOption::KeepOther);
@ -493,7 +494,8 @@ void Controller::refreshHistoryVisibility(anim::type animated) {
animated); animated);
}; };
void Controller::showEditPeerTypeBox(std::optional<LangKey> error) { void Controller::showEditPeerTypeBox(
std::optional<rpl::producer<QString>> error) {
const auto boxCallback = crl::guard(this, [=]( const auto boxCallback = crl::guard(this, [=](
Privacy checked, QString publicLink) { Privacy checked, QString publicLink) {
_privacyTypeUpdates.fire(std::move(checked)); _privacyTypeUpdates.fire(std::move(checked));
@ -575,19 +577,19 @@ void Controller::fillPrivacyTypeButton() {
const auto isGroup = (_peer->isChat() || _peer->isMegagroup()); const auto isGroup = (_peer->isChat() || _peer->isMegagroup());
AddButtonWithText( AddButtonWithText(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(isGroup (isGroup
? lng_manage_peer_group_type ? tr::lng_manage_peer_group_type
: lng_manage_peer_channel_type), : tr::lng_manage_peer_channel_type)(),
_privacyTypeUpdates.events( _privacyTypeUpdates.events(
) | rpl::map([=](Privacy flag) { ) | rpl::map([=](Privacy flag) {
return lang(Privacy::Public == flag return (Privacy::Public == flag
? (isGroup ? (isGroup
? lng_manage_public_group_title ? tr::lng_manage_public_group_title
: lng_manage_public_peer_title) : tr::lng_manage_public_peer_title)
: (isGroup : (isGroup
? lng_manage_private_group_title ? tr::lng_manage_private_group_title
: lng_manage_private_peer_title)); : tr::lng_manage_private_peer_title))();
}), }) | rpl::flatten_latest(),
[=] { showEditPeerTypeBox(); }); [=] { showEditPeerTypeBox(); });
_privacyTypeUpdates.fire_copy(*_privacySavedValue); _privacyTypeUpdates.fire_copy(*_privacySavedValue);
@ -602,10 +604,10 @@ void Controller::fillLinkedChatButton() {
const auto isGroup = (_peer->isChat() || _peer->isMegagroup()); const auto isGroup = (_peer->isChat() || _peer->isMegagroup());
auto text = !isGroup auto text = !isGroup
? Lang::Viewer(lng_manage_discussion_group) ? tr::lng_manage_discussion_group()
: rpl::combine( : rpl::combine(
Lang::Viewer(lng_manage_linked_channel), tr::lng_manage_linked_channel(),
Lang::Viewer(lng_manage_linked_channel_restore), tr::lng_manage_linked_channel_restore(),
_linkedChatUpdates.events() _linkedChatUpdates.events()
) | rpl::map([=]( ) | rpl::map([=](
const QString &edit, const QString &edit,
@ -619,7 +621,7 @@ void Controller::fillLinkedChatButton() {
return chat ? chat->name : QString(); return chat ? chat->name : QString();
}) | rpl::type_erased() }) | rpl::type_erased()
: rpl::combine( : rpl::combine(
Lang::Viewer(lng_manage_discussion_group_add), tr::lng_manage_discussion_group_add(),
_linkedChatUpdates.events() _linkedChatUpdates.events()
) | rpl::map([=](const QString &add, ChannelData *chat) { ) | rpl::map([=](const QString &add, ChannelData *chat) {
return chat return chat
@ -645,7 +647,7 @@ void Controller::fillInviteLinkButton() {
AddButtonWithText( AddButtonWithText(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(lng_profile_invite_link_section), tr::lng_profile_invite_link_section(),
rpl::single(QString()), //Empty text. rpl::single(QString()), //Empty text.
buttonCallback); buttonCallback);
} }
@ -657,7 +659,7 @@ void Controller::fillSignaturesButton() {
AddButtonWithText( AddButtonWithText(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(lng_edit_sign_messages), tr::lng_edit_sign_messages(),
rpl::single(QString()), rpl::single(QString()),
[=] {} [=] {}
)->toggleOn(rpl::single(channel->addsSignature()) )->toggleOn(rpl::single(channel->addsSignature())
@ -701,13 +703,13 @@ void Controller::fillHistoryVisibilityButton() {
}; };
AddButtonWithText( AddButtonWithText(
container, container,
Lang::Viewer(lng_manage_history_visibility_title), tr::lng_manage_history_visibility_title(),
updateHistoryVisibility->events( updateHistoryVisibility->events(
) | rpl::map([](HistoryVisibility flag) { ) | rpl::map([](HistoryVisibility flag) {
return lang((HistoryVisibility::Visible == flag) return (HistoryVisibility::Visible == flag
? lng_manage_history_visibility_shown ? tr::lng_manage_history_visibility_shown
: lng_manage_history_visibility_hidden); : tr::lng_manage_history_visibility_hidden)();
}), }) | rpl::flatten_latest(),
buttonCallback); buttonCallback);
updateHistoryVisibility->fire_copy(*_historyVisibilitySavedValue); updateHistoryVisibility->fire_copy(*_historyVisibilitySavedValue);
@ -824,7 +826,7 @@ void Controller::fillManageSection() {
if (canEditPermissions) { if (canEditPermissions) {
AddButtonWithCount( AddButtonWithCount(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(lng_manage_peer_permissions), tr::lng_manage_peer_permissions(),
Info::Profile::RestrictionsCountValue(_peer) Info::Profile::RestrictionsCountValue(_peer)
| ToPositiveNumberStringRestrictions(), | ToPositiveNumberStringRestrictions(),
[=] { ShowEditPermissions(_peer); }, [=] { ShowEditPermissions(_peer); },
@ -833,7 +835,7 @@ void Controller::fillManageSection() {
if (canViewAdmins) { if (canViewAdmins) {
AddButtonWithCount( AddButtonWithCount(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(lng_manage_peer_administrators), tr::lng_manage_peer_administrators(),
Info::Profile::AdminsCountValue(_peer) Info::Profile::AdminsCountValue(_peer)
| ToPositiveNumberString(), | ToPositiveNumberString(),
[=] { [=] {
@ -847,7 +849,7 @@ void Controller::fillManageSection() {
if (canViewMembers) { if (canViewMembers) {
AddButtonWithCount( AddButtonWithCount(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(lng_manage_peer_members), tr::lng_manage_peer_members(),
Info::Profile::MembersCountValue(_peer) Info::Profile::MembersCountValue(_peer)
| ToPositiveNumberString(), | ToPositiveNumberString(),
[=] { [=] {
@ -861,7 +863,7 @@ void Controller::fillManageSection() {
if (canViewKicked) { if (canViewKicked) {
AddButtonWithCount( AddButtonWithCount(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(lng_manage_peer_removed_users), tr::lng_manage_peer_removed_users(),
Info::Profile::KickedCountValue(channel) Info::Profile::KickedCountValue(channel)
| ToPositiveNumberString(), | ToPositiveNumberString(),
[=] { [=] {
@ -875,7 +877,7 @@ void Controller::fillManageSection() {
if (hasRecentActions) { if (hasRecentActions) {
AddButtonWithCount( AddButtonWithCount(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(lng_manage_peer_recent_actions), tr::lng_manage_peer_recent_actions(),
rpl::single(QString()), //Empty count. rpl::single(QString()), //Empty count.
[=] { [=] {
navigation->showSection(AdminLog::SectionMemento(channel)); navigation->showSection(AdminLog::SectionMemento(channel));
@ -895,9 +897,9 @@ void Controller::fillManageSection() {
if (canDeleteChannel) { if (canDeleteChannel) {
AddButtonDelete( AddButtonDelete(
_controls.buttonsLayout, _controls.buttonsLayout,
Lang::Viewer(_isGroup (_isGroup
? lng_profile_delete_group ? tr::lng_profile_delete_group
: lng_profile_delete_channel), : tr::lng_profile_delete_channel)(),
[=]{ deleteWithConfirmation(); } [=]{ deleteWithConfirmation(); }
); );
} }
@ -1079,17 +1081,17 @@ void Controller::saveUsername() {
continueSave(); continueSave();
return; return;
} }
const auto errorKey = [&] {
// Very rare case.
showEditPeerTypeBox([&] {
if (type == qstr("USERNAME_INVALID")) { if (type == qstr("USERNAME_INVALID")) {
return lng_create_channel_link_invalid; return tr::lng_create_channel_link_invalid();
} else if (type == qstr("USERNAME_OCCUPIED") } else if (type == qstr("USERNAME_OCCUPIED")
|| type == qstr("USERNAMES_UNAVAILABLE")) { || type == qstr("USERNAMES_UNAVAILABLE")) {
return lng_create_channel_link_occupied; return tr::lng_create_channel_link_occupied();
} }
return lng_create_channel_link_invalid; return tr::lng_create_channel_link_invalid();
}(); }());
// Very rare case.
showEditPeerTypeBox(errorKey);
cancelSave(); cancelSave();
}).send(); }).send();
} }

View File

@ -336,7 +336,7 @@ void EditPeerPermissionsBox::prepare() {
auto [checkboxes, getRestrictions, changes] = CreateEditRestrictions( auto [checkboxes, getRestrictions, changes] = CreateEditRestrictions(
this, this,
lng_rights_default_restrictions_header, tr::lng_rights_default_restrictions_header(),
restrictions, restrictions,
disabledMessages); disabledMessages);
@ -367,7 +367,7 @@ void EditPeerPermissionsBox::addBannedButtons(
const auto navigation = App::wnd()->sessionController(); const auto navigation = App::wnd()->sessionController();
container->add(EditPeerInfoBox::CreateButton( container->add(EditPeerInfoBox::CreateButton(
container, container,
Lang::Viewer(lng_manage_peer_exceptions), tr::lng_manage_peer_exceptions(),
(channel (channel
? Info::Profile::RestrictedCountValue(channel) ? Info::Profile::RestrictedCountValue(channel)
: rpl::single(0)) | ToPositiveNumberString(), : rpl::single(0)) | ToPositiveNumberString(),
@ -381,7 +381,7 @@ void EditPeerPermissionsBox::addBannedButtons(
if (channel) { if (channel) {
container->add(EditPeerInfoBox::CreateButton( container->add(EditPeerInfoBox::CreateButton(
container, container,
Lang::Viewer(lng_manage_peer_removed_users), tr::lng_manage_peer_removed_users(),
Info::Profile::KickedCountValue(channel) Info::Profile::KickedCountValue(channel)
| ToPositiveNumberString(), | ToPositiveNumberString(),
[=] { [=] {
@ -400,7 +400,7 @@ template <
typename FlagLabelPairs> typename FlagLabelPairs>
EditFlagsControl<Flags> CreateEditFlags( EditFlagsControl<Flags> CreateEditFlags(
QWidget *parent, QWidget *parent,
LangKey header, rpl::producer<QString> header,
Flags checked, Flags checked,
const DisabledMessagePairs &disabledMessagePairs, const DisabledMessagePairs &disabledMessagePairs,
const FlagLabelPairs &flagLabelPairs) { const FlagLabelPairs &flagLabelPairs) {
@ -433,7 +433,7 @@ EditFlagsControl<Flags> CreateEditFlags(
container->add( container->add(
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(header), std::move(header),
st::rightsHeaderLabel), st::rightsHeaderLabel),
st::rightsHeaderMargin); st::rightsHeaderMargin);
@ -490,7 +490,7 @@ EditFlagsControl<Flags> CreateEditFlags(
EditFlagsControl<MTPDchatBannedRights::Flags> CreateEditRestrictions( EditFlagsControl<MTPDchatBannedRights::Flags> CreateEditRestrictions(
QWidget *parent, QWidget *parent,
LangKey header, rpl::producer<QString> header,
MTPDchatBannedRights::Flags restrictions, MTPDchatBannedRights::Flags restrictions,
std::map<MTPDchatBannedRights::Flags, QString> disabledMessages) { std::map<MTPDchatBannedRights::Flags, QString> disabledMessages) {
auto result = CreateEditFlags( auto result = CreateEditFlags(
@ -511,7 +511,7 @@ EditFlagsControl<MTPDchatBannedRights::Flags> CreateEditRestrictions(
EditFlagsControl<MTPDchatAdminRights::Flags> CreateEditAdminRights( EditFlagsControl<MTPDchatAdminRights::Flags> CreateEditAdminRights(
QWidget *parent, QWidget *parent,
LangKey header, rpl::producer<QString> header,
MTPDchatAdminRights::Flags rights, MTPDchatAdminRights::Flags rights,
std::map<MTPDchatAdminRights::Flags, QString> disabledMessages, std::map<MTPDchatAdminRights::Flags, QString> disabledMessages,
bool isGroup, bool isGroup,

View File

@ -44,13 +44,13 @@ struct EditFlagsControl {
EditFlagsControl<MTPDchatBannedRights::Flags> CreateEditRestrictions( EditFlagsControl<MTPDchatBannedRights::Flags> CreateEditRestrictions(
QWidget *parent, QWidget *parent,
LangKey header, rpl::producer<QString> header,
MTPDchatBannedRights::Flags restrictions, MTPDchatBannedRights::Flags restrictions,
std::map<MTPDchatBannedRights::Flags, QString> disabledMessages); std::map<MTPDchatBannedRights::Flags, QString> disabledMessages);
EditFlagsControl<MTPDchatAdminRights::Flags> CreateEditAdminRights( EditFlagsControl<MTPDchatAdminRights::Flags> CreateEditAdminRights(
QWidget *parent, QWidget *parent,
LangKey header, rpl::producer<QString> header,
MTPDchatAdminRights::Flags rights, MTPDchatAdminRights::Flags rights,
std::map<MTPDchatAdminRights::Flags, QString> disabledMessages, std::map<MTPDchatAdminRights::Flags, QString> disabledMessages,
bool isGroup, bool isGroup,

View File

@ -78,9 +78,9 @@ public:
return _controls.privacy->value(); return _controls.privacy->value();
} }
void showError(LangKey key) { void showError(rpl::producer<QString> text) {
_controls.usernameInput->showError(); _controls.usernameInput->showError();
showUsernameError(Lang::Viewer(key)); showUsernameError(std::move(text));
} }
private: private:
@ -129,10 +129,10 @@ private:
void addRoundButton( void addRoundButton(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
Privacy value, Privacy value,
LangKey groupTextKey, const QString &groupText,
LangKey channelTextKey, const QString &channelText,
LangKey groupAboutKey, rpl::producer<QString> groupAbout,
LangKey channelAboutKey); rpl::producer<QString> channelAbout);
bool inviteLinkShown(); bool inviteLinkShown();
QString inviteLinkText(); QString inviteLinkText();
@ -197,21 +197,21 @@ void Controller::createContent() {
void Controller::addRoundButton( void Controller::addRoundButton(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
Privacy value, Privacy value,
LangKey groupTextKey, const QString &groupText,
LangKey channelTextKey, const QString &channelText,
LangKey groupAboutKey, rpl::producer<QString> groupAbout,
LangKey channelAboutKey) { rpl::producer<QString> channelAbout) {
container->add(object_ptr<Ui::Radioenum<Privacy>>( container->add(object_ptr<Ui::Radioenum<Privacy>>(
container, container,
_controls.privacy, _controls.privacy,
value, value,
lang(_isGroup ? groupTextKey : channelTextKey), (_isGroup ? groupText : channelText),
st::editPeerPrivacyBoxCheckbox)); st::editPeerPrivacyBoxCheckbox));
container->add(object_ptr<Ui::PaddingWrap<Ui::FlatLabel>>( container->add(object_ptr<Ui::PaddingWrap<Ui::FlatLabel>>(
container, container,
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(_isGroup ? groupAboutKey : channelAboutKey), std::move(_isGroup ? groupAbout : channelAbout),
st::editPeerPrivacyLabel), st::editPeerPrivacyLabel),
st::editPeerPrivacyLabelMargins)); st::editPeerPrivacyLabelMargins));
container->add(object_ptr<Ui::FixedHeightWidget>( container->add(object_ptr<Ui::FixedHeightWidget>(
@ -249,17 +249,17 @@ void Controller::fillPrivaciesButtons(
addRoundButton( addRoundButton(
container, container,
Privacy::Public, Privacy::Public,
lng_create_public_group_title, tr::lng_create_public_group_title(tr::now),
lng_create_public_channel_title, tr::lng_create_public_channel_title(tr::now),
lng_create_public_group_about, tr::lng_create_public_group_about(),
lng_create_public_channel_about); tr::lng_create_public_channel_about());
addRoundButton( addRoundButton(
container, container,
Privacy::Private, Privacy::Private,
lng_create_private_group_title, tr::lng_create_private_group_title(tr::now),
lng_create_private_channel_title, tr::lng_create_private_channel_title(tr::now),
lng_create_private_group_about, tr::lng_create_private_group_about(),
lng_create_private_channel_about); tr::lng_create_private_channel_about());
_controls.privacy->setChangedCallback([=](Privacy value) { _controls.privacy->setChangedCallback([=](Privacy value) {
privacyChanged(value); privacyChanged(value);
@ -303,7 +303,7 @@ object_ptr<Ui::RpWidget> Controller::createUsernameEdit() {
container, container,
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(lng_create_group_link), tr::lng_create_group_link(),
st::editPeerSectionLabel), st::editPeerSectionLabel),
st::editPeerUsernameTitleLabelMargins)); st::editPeerUsernameTitleLabelMargins));
@ -334,7 +334,7 @@ object_ptr<Ui::RpWidget> Controller::createUsernameEdit() {
container, container,
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(lng_create_channel_link_about), tr::lng_create_channel_link_about(),
st::editPeerPrivacyLabel), st::editPeerPrivacyLabel),
st::editPeerUsernameAboutLabelMargins)); st::editPeerUsernameAboutLabelMargins));
@ -415,8 +415,7 @@ void Controller::checkUsernameAvailability() {
return; return;
} }
if (!mtpIsTrue(result) && checking != username) { if (!mtpIsTrue(result) && checking != username) {
showUsernameError( showUsernameError(tr::lng_create_channel_link_occupied());
Lang::Viewer(lng_create_channel_link_occupied));
} else { } else {
showUsernameGood(); showUsernameGood();
} }
@ -438,12 +437,10 @@ void Controller::checkUsernameAvailability() {
setFocusUsername(); setFocusUsername();
} }
} else if (type == qstr("USERNAME_INVALID")) { } else if (type == qstr("USERNAME_INVALID")) {
showUsernameError( showUsernameError(tr::lng_create_channel_link_invalid());
Lang::Viewer(lng_create_channel_link_invalid));
} else if (type == qstr("USERNAME_OCCUPIED") } else if (type == qstr("USERNAME_OCCUPIED")
&& checking != username) { && checking != username) {
showUsernameError( showUsernameError(tr::lng_create_channel_link_occupied());
Lang::Viewer(lng_create_channel_link_occupied));
} }
}).send(); }).send();
} }
@ -475,11 +472,9 @@ void Controller::usernameChanged() {
&& (ch != '_'); && (ch != '_');
}) != username.end(); }) != username.end();
if (bad) { if (bad) {
showUsernameError( showUsernameError(tr::lng_create_channel_link_bad_symbols());
Lang::Viewer(lng_create_channel_link_bad_symbols));
} else if (username.size() < kMinUsernameLength) { } else if (username.size() < kMinUsernameLength) {
showUsernameError( showUsernameError(tr::lng_create_channel_link_too_short());
Lang::Viewer(lng_create_channel_link_too_short));
} else { } else {
_controls.usernameResult = nullptr; _controls.usernameResult = nullptr;
_checkUsernameTimer.callOnce(kUsernameCheckTimeout); _checkUsernameTimer.callOnce(kUsernameCheckTimeout);
@ -494,7 +489,7 @@ void Controller::showUsernameError(rpl::producer<QString> &&error) {
void Controller::showUsernameGood() { void Controller::showUsernameGood() {
_isAllowSave = true; _isAllowSave = true;
showUsernameResult( showUsernameResult(
Lang::Viewer(lng_create_channel_link_available), tr::lng_create_channel_link_available(),
&st::editPeerUsernameGood); &st::editPeerUsernameGood);
} }
@ -585,7 +580,7 @@ object_ptr<Ui::RpWidget> Controller::createInviteLinkEdit() {
if (!_isInviteLink) { if (!_isInviteLink) {
container->add(object_ptr<Ui::FlatLabel>( container->add(object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(lng_profile_invite_link_section), tr::lng_profile_invite_link_section(),
st::editPeerSectionLabel)); st::editPeerSectionLabel));
container->add(object_ptr<Ui::FixedHeightWidget>( container->add(object_ptr<Ui::FixedHeightWidget>(
container, container,
@ -659,7 +654,7 @@ object_ptr<Ui::RpWidget> Controller::createInviteLinkCreate() {
if (!_isInviteLink) { if (!_isInviteLink) {
container->add(object_ptr<Ui::FlatLabel>( container->add(object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(lng_profile_invite_link_section), tr::lng_profile_invite_link_section(),
st::editPeerSectionLabel)); st::editPeerSectionLabel));
container->add(object_ptr<Ui::FixedHeightWidget>( container->add(object_ptr<Ui::FixedHeightWidget>(
container, container,
@ -700,7 +695,7 @@ EditPeerTypeBox::EditPeerTypeBox(
std::optional<FnMut<void(Privacy, QString)>> savedCallback, std::optional<FnMut<void(Privacy, QString)>> savedCallback,
std::optional<Privacy> privacySaved, std::optional<Privacy> privacySaved,
std::optional<QString> usernameSaved, std::optional<QString> usernameSaved,
std::optional<LangKey> usernameError) std::optional<rpl::producer<QString>> usernameError)
: _peer(peer) : _peer(peer)
, _savedCallback(std::move(savedCallback)) , _savedCallback(std::move(savedCallback))
, _privacySavedValue(privacySaved) , _privacySavedValue(privacySaved)
@ -728,7 +723,7 @@ void EditPeerTypeBox::prepare() {
[=] { [=] {
controller->setFocusUsername(); controller->setFocusUsername();
if (_usernameError.has_value()) { if (_usernameError.has_value()) {
controller->showError(*_usernameError); controller->showError(std::move(*_usernameError));
_usernameError = std::nullopt; _usernameError = std::nullopt;
} }
}, },

View File

@ -45,7 +45,7 @@ public:
std::optional<FnMut<void(Privacy, QString)>> savedCallback = {}, std::optional<FnMut<void(Privacy, QString)>> savedCallback = {},
std::optional<Privacy> privacySaved = {}, std::optional<Privacy> privacySaved = {},
std::optional<QString> usernameSaved = {}, std::optional<QString> usernameSaved = {},
std::optional<LangKey> usernameError = {}); std::optional<rpl::producer<QString>> usernameError = {});
protected: protected:
void prepare() override; void prepare() override;
@ -57,7 +57,7 @@ private:
std::optional<Privacy> _privacySavedValue; std::optional<Privacy> _privacySavedValue;
std::optional<QString> _usernameSavedValue; std::optional<QString> _usernameSavedValue;
std::optional<LangKey> _usernameError; std::optional<rpl::producer<QString>> _usernameError;
rpl::event_stream<> _focusRequests; rpl::event_stream<> _focusRequests;

View File

@ -359,7 +359,7 @@ void SessionsBox::Inner::setupContent() {
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this); const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
AddSubsectionTitle(content, lng_sessions_header); AddSubsectionTitle(content, tr::lng_sessions_header());
_current = content->add(object_ptr<List>(content)); _current = content->add(object_ptr<List>(content));
const auto terminateWrap = content->add( const auto terminateWrap = content->add(
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>( object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
@ -369,12 +369,10 @@ void SessionsBox::Inner::setupContent() {
_terminateAll = terminateInner->add( _terminateAll = terminateInner->add(
object_ptr<Info::Profile::Button>( object_ptr<Info::Profile::Button>(
terminateInner, terminateInner,
Lang::Viewer(lng_sessions_terminate_all), tr::lng_sessions_terminate_all(),
st::terminateSessionsButton)); st::terminateSessionsButton));
AddSkip(terminateInner); AddSkip(terminateInner);
AddDividerText( AddDividerText(terminateInner, tr::lng_sessions_terminate_all_about());
terminateInner,
Lang::Viewer(lng_sessions_terminate_all_about));
const auto incompleteWrap = content->add( const auto incompleteWrap = content->add(
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>( object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
@ -382,12 +380,10 @@ void SessionsBox::Inner::setupContent() {
object_ptr<Ui::VerticalLayout>(content)))->setDuration(0); object_ptr<Ui::VerticalLayout>(content)))->setDuration(0);
const auto incompleteInner = incompleteWrap->entity(); const auto incompleteInner = incompleteWrap->entity();
AddSkip(incompleteInner); AddSkip(incompleteInner);
AddSubsectionTitle(incompleteInner, lng_sessions_incomplete); AddSubsectionTitle(incompleteInner, tr::lng_sessions_incomplete());
_incomplete = incompleteInner->add(object_ptr<List>(incompleteInner)); _incomplete = incompleteInner->add(object_ptr<List>(incompleteInner));
AddSkip(incompleteInner); AddSkip(incompleteInner);
AddDividerText( AddDividerText(incompleteInner, tr::lng_sessions_incomplete_about());
incompleteInner,
Lang::Viewer(lng_sessions_incomplete_about));
const auto listWrap = content->add( const auto listWrap = content->add(
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>( object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
@ -395,7 +391,7 @@ void SessionsBox::Inner::setupContent() {
object_ptr<Ui::VerticalLayout>(content)))->setDuration(0); object_ptr<Ui::VerticalLayout>(content)))->setDuration(0);
const auto listInner = listWrap->entity(); const auto listInner = listWrap->entity();
AddSkip(listInner); AddSkip(listInner);
AddSubsectionTitle(listInner, lng_sessions_other_header); AddSubsectionTitle(listInner, tr::lng_sessions_other_header());
_list = listInner->add(object_ptr<List>(listInner)); _list = listInner->add(object_ptr<List>(listInner));
AddSkip(listInner); AddSkip(listInner);
@ -404,7 +400,7 @@ void SessionsBox::Inner::setupContent() {
content, content,
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
content, content,
Lang::Viewer(lng_sessions_other_desc), tr::lng_sessions_other_desc(),
st::boxDividerLabel), st::boxDividerLabel),
st::settingsDividerLabelPadding))->setDuration(0); st::settingsDividerLabelPadding))->setDuration(0);

View File

@ -142,9 +142,9 @@ void PanelController::activatePanel() {
void PanelController::createPanel() { void PanelController::createPanel() {
const auto singlePeer = _settings->onlySinglePeer(); const auto singlePeer = _settings->onlySinglePeer();
_panel = base::make_unique_q<Ui::SeparatePanel>(); _panel = base::make_unique_q<Ui::SeparatePanel>();
_panel->setTitle(Lang::Viewer(singlePeer _panel->setTitle((singlePeer
? lng_export_header_chats ? tr::lng_export_header_chats
: lng_export_title)); : tr::lng_export_title)());
_panel->setInnerSize(st::exportPanelSize); _panel->setInnerSize(st::exportPanelSize);
_panel->closeRequests( _panel->closeRequests(
) | rpl::start_with_next([=] { ) | rpl::start_with_next([=] {
@ -268,7 +268,7 @@ void PanelController::showProgress() {
_settings->availableAt = 0; _settings->availableAt = 0;
ClearSuggestStart(); ClearSuggestStart();
_panel->setTitle(Lang::Viewer(lng_export_progress_title)); _panel->setTitle(tr::lng_export_progress_title());
auto progress = base::make_unique_q<ProgressWidget>( auto progress = base::make_unique_q<ProgressWidget>(
_panel.get(), _panel.get(),
@ -365,7 +365,7 @@ void PanelController::updateState(State &&state) {
} else if (const auto error = base::get_if<OutputErrorState>(&_state)) { } else if (const auto error = base::get_if<OutputErrorState>(&_state)) {
showError(*error); showError(*error);
} else if (_state.is<FinishedState>()) { } else if (_state.is<FinishedState>()) {
_panel->setTitle(Lang::Viewer(lng_export_title)); _panel->setTitle(tr::lng_export_title());
_panel->setHideOnDeactivate(false); _panel->setHideOnDeactivate(false);
} else if (_state.is<CancelledState>()) { } else if (_state.is<CancelledState>()) {
LOG(("Export Info: Stop Panel After Cancel.")); LOG(("Export Info: Stop Panel After Cancel."));

View File

@ -154,12 +154,9 @@ object_ptr<Ui::FlatButton> SetupDiscussButton(
QString(), QString(),
st::historyComposeButton); st::historyComposeButton);
const auto button = result.data(); const auto button = result.data();
auto text = Lang::Viewer(
lng_channel_discuss
) | Ui::Text::ToUpper();
const auto label = Ui::CreateChild<Ui::FlatLabel>( const auto label = Ui::CreateChild<Ui::FlatLabel>(
button, button,
rpl::duplicate(text), tr::lng_channel_discuss() | Ui::Text::ToUpper(),
st::historyComposeButtonLabel); st::historyComposeButtonLabel);
const auto badge = Ui::CreateChild<Ui::UnreadBadge>(button); const auto badge = Ui::CreateChild<Ui::UnreadBadge>(button);
label->show(); label->show();

View File

@ -551,78 +551,76 @@ rpl::producer<QString> TitleValue(
const Section &section, const Section &section,
Key key, Key key,
bool isStackBottom) { bool isStackBottom) {
return Lang::Viewer([&] { const auto peer = key.peer();
const auto peer = key.peer();
switch (section.type()) { switch (section.type()) {
case Section::Type::Profile: case Section::Type::Profile:
/*if (const auto feed = key.feed()) { /*if (const auto feed = key.feed()) {
return lng_info_feed_title; return tr::lng_info_feed_title();
} else */if (const auto user = peer->asUser()) { } else */if (const auto user = peer->asUser()) {
return (user->isBot() && !user->isSupport()) return (user->isBot() && !user->isSupport())
? lng_info_bot_title ? tr::lng_info_bot_title()
: lng_info_user_title; : tr::lng_info_user_title();
} else if (const auto channel = peer->asChannel()) { } else if (const auto channel = peer->asChannel()) {
return channel->isMegagroup() return channel->isMegagroup()
? lng_info_group_title ? tr::lng_info_group_title()
: lng_info_channel_title; : tr::lng_info_channel_title();
} else if (peer->isChat()) { } else if (peer->isChat()) {
return lng_info_group_title; return tr::lng_info_group_title();
}
Unexpected("Bad peer type in Info::TitleValue()");
case Section::Type::Media:
if (peer->isSelf() && isStackBottom) {
return lng_profile_shared_media;
}
switch (section.mediaType()) {
case Section::MediaType::Photo:
return lng_media_type_photos;
case Section::MediaType::Video:
return lng_media_type_videos;
case Section::MediaType::MusicFile:
return lng_media_type_songs;
case Section::MediaType::File:
return lng_media_type_files;
case Section::MediaType::RoundVoiceFile:
return lng_media_type_audios;
case Section::MediaType::Link:
return lng_media_type_links;
case Section::MediaType::RoundFile:
return lng_media_type_rounds;
}
Unexpected("Bad media type in Info::TitleValue()");
case Section::Type::CommonGroups:
return lng_profile_common_groups_section;
case Section::Type::Members:
return lng_profile_participants_section;
//case Section::Type::Channels: // #feed
// return lng_info_feed_channels;
case Section::Type::Settings:
switch (section.settingsType()) {
case Section::SettingsType::Main:
return lng_menu_settings;
case Section::SettingsType::Information:
return lng_settings_section_info;
case Section::SettingsType::Notifications:
return lng_settings_section_notify;
case Section::SettingsType::PrivacySecurity:
return lng_settings_section_privacy;
case Section::SettingsType::Advanced:
return lng_settings_advanced;
case Section::SettingsType::Chat:
return lng_settings_section_chat_settings;
case Section::SettingsType::Calls:
return lng_settings_section_call_settings;
}
Unexpected("Bad settings type in Info::TitleValue()");
} }
Unexpected("Bad section type in Info::TitleValue()"); Unexpected("Bad peer type in Info::TitleValue()");
}());
case Section::Type::Media:
if (peer->isSelf() && isStackBottom) {
return tr::lng_profile_shared_media();
}
switch (section.mediaType()) {
case Section::MediaType::Photo:
return tr::lng_media_type_photos();
case Section::MediaType::Video:
return tr::lng_media_type_videos();
case Section::MediaType::MusicFile:
return tr::lng_media_type_songs();
case Section::MediaType::File:
return tr::lng_media_type_files();
case Section::MediaType::RoundVoiceFile:
return tr::lng_media_type_audios();
case Section::MediaType::Link:
return tr::lng_media_type_links();
case Section::MediaType::RoundFile:
return tr::lng_media_type_rounds();
}
Unexpected("Bad media type in Info::TitleValue()");
case Section::Type::CommonGroups:
return tr::lng_profile_common_groups_section();
case Section::Type::Members:
return tr::lng_profile_participants_section();
//case Section::Type::Channels: // #feed
// return tr::lng_info_feed_channels();
case Section::Type::Settings:
switch (section.settingsType()) {
case Section::SettingsType::Main:
return tr::lng_menu_settings();
case Section::SettingsType::Information:
return tr::lng_settings_section_info();
case Section::SettingsType::Notifications:
return tr::lng_settings_section_notify();
case Section::SettingsType::PrivacySecurity:
return tr::lng_settings_section_privacy();
case Section::SettingsType::Advanced:
return tr::lng_settings_advanced();
case Section::SettingsType::Chat:
return tr::lng_settings_section_chat_settings();
case Section::SettingsType::Calls:
return tr::lng_settings_section_call_settings();
}
Unexpected("Bad settings type in Info::TitleValue()");
}
Unexpected("Bad section type in Info::TitleValue()");
} }
} // namespace Info } // namespace Info

View File

@ -216,12 +216,12 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
auto result = object_ptr<Ui::VerticalLayout>(_wrap); auto result = object_ptr<Ui::VerticalLayout>(_wrap);
auto tracker = Ui::MultiSlideTracker(); auto tracker = Ui::MultiSlideTracker();
auto addInfoLineGeneric = [&]( auto addInfoLineGeneric = [&](
rpl::producer<QString> label, rpl::producer<QString> &&label,
rpl::producer<TextWithEntities> &&text, rpl::producer<TextWithEntities> &&text,
const style::FlatLabel &textSt = st::infoLabeled) { const style::FlatLabel &textSt = st::infoLabeled) {
auto line = CreateTextWithLabel( auto line = CreateTextWithLabel(
result, result,
std::move(label) | WithEmptyEntities(), std::move(label) | Ui::Text::ToWithEntities(),
std::move(text), std::move(text),
textSt, textSt,
st::infoProfileLabeledPadding); st::infoProfileLabeledPadding);
@ -229,20 +229,20 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
return line.text; return line.text;
}; };
auto addInfoLine = [&]( auto addInfoLine = [&](
LangKey label, rpl::producer<QString> &&label,
rpl::producer<TextWithEntities> &&text, rpl::producer<TextWithEntities> &&text,
const style::FlatLabel &textSt = st::infoLabeled) { const style::FlatLabel &textSt = st::infoLabeled) {
return addInfoLineGeneric( return addInfoLineGeneric(
Lang::Viewer(label), std::move(label),
std::move(text), std::move(text),
textSt); textSt);
}; };
auto addInfoOneLine = [&]( auto addInfoOneLine = [&](
LangKey label, rpl::producer<QString> &&label,
rpl::producer<TextWithEntities> &&text, rpl::producer<TextWithEntities> &&text,
const QString &contextCopyText) { const QString &contextCopyText) {
auto result = addInfoLine( auto result = addInfoLine(
label, std::move(label),
std::move(text), std::move(text),
st::infoLabeledOneLine); st::infoLabeledOneLine);
result->setDoubleClickSelectsParagraph(true); result->setDoubleClickSelectsParagraph(true);
@ -257,16 +257,16 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
} }
addInfoOneLine( addInfoOneLine(
lng_info_mobile_label, tr::lng_info_mobile_label(),
PhoneValue(user), PhoneValue(user),
lang(lng_profile_copy_phone)); lang(lng_profile_copy_phone));
if (user->botInfo) { if (user->botInfo) {
addInfoLine(lng_info_about_label, AboutValue(user)); addInfoLine(tr::lng_info_about_label(), AboutValue(user));
} else { } else {
addInfoLine(lng_info_bio_label, BioValue(user)); addInfoLine(tr::lng_info_bio_label(), BioValue(user));
} }
addInfoOneLine( addInfoOneLine(
lng_info_username_label, tr::lng_info_username_label(),
UsernameValue(user), UsernameValue(user),
lang(lng_context_copy_mention)); lang(lng_context_copy_mention));
} else { } else {
@ -288,7 +288,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
return result; return result;
}); });
auto link = addInfoOneLine( auto link = addInfoOneLine(
lng_info_link_label, tr::lng_info_link_label(),
std::move(linkText), std::move(linkText),
QString()); QString());
link->setClickHandlerFilter([peer = _peer](auto&&...) { link->setClickHandlerFilter([peer = _peer](auto&&...) {
@ -300,7 +300,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupInfo() {
} }
return false; return false;
}); });
addInfoLine(lng_info_about_label, AboutValue(_peer)); addInfoLine(tr::lng_info_about_label(), AboutValue(_peer));
} }
if (!_peer->isSelf()) { if (!_peer->isSelf()) {
// No notifications toggle for Self => no separator. // No notifications toggle for Self => no separator.
@ -325,7 +325,7 @@ object_ptr<Ui::RpWidget> DetailsFiller::setupMuteToggle() {
const auto peer = _peer; const auto peer = _peer;
auto result = object_ptr<Button>( auto result = object_ptr<Button>(
_wrap, _wrap,
Lang::Viewer(lng_profile_enable_notifications), tr::lng_profile_enable_notifications(),
st::infoNotificationsButton); st::infoNotificationsButton);
result->toggleOn( result->toggleOn(
NotificationsEnabledValue(peer) NotificationsEnabledValue(peer)
@ -384,7 +384,7 @@ Ui::MultiSlideTracker DetailsFiller::fillUserButtons(
}; };
AddMainButton( AddMainButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_send_message), tr::lng_profile_send_message(),
std::move(sendMessageVisible), std::move(sendMessageVisible),
std::move(sendMessage), std::move(sendMessage),
tracker); tracker);
@ -410,7 +410,7 @@ Ui::MultiSlideTracker DetailsFiller::fillUserButtons(
const auto window = &_controller->parentController()->window()->controller(); const auto window = &_controller->parentController()->window()->controller();
AddMainButton( AddMainButton(
_wrap, _wrap,
Lang::Viewer(lng_info_add_as_contact), tr::lng_info_add_as_contact(),
CanAddContactValue(user), CanAddContactValue(user),
[=] { window->show(Box(EditContactBox, window, user)); }, [=] { window->show(Box(EditContactBox, window, user)); },
tracker); tracker);
@ -439,7 +439,7 @@ Ui::MultiSlideTracker DetailsFiller::fillChannelButtons(
}; };
AddMainButton( AddMainButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_view_channel), tr::lng_profile_view_channel(),
std::move(viewChannelVisible), std::move(viewChannelVisible),
std::move(viewChannel), std::move(viewChannel),
tracker); tracker);
@ -472,7 +472,7 @@ void ActionsFiller::addInviteToGroupAction(
not_null<UserData*> user) { not_null<UserData*> user) {
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_invite_to_group), tr::lng_profile_invite_to_group(),
CanInviteBotToGroupValue(user), CanInviteBotToGroupValue(user),
[user] { AddBotToGroupBoxController::Start(user); }); [user] { AddBotToGroupBoxController::Start(user); });
} }
@ -480,7 +480,7 @@ void ActionsFiller::addInviteToGroupAction(
void ActionsFiller::addShareContactAction(not_null<UserData*> user) { void ActionsFiller::addShareContactAction(not_null<UserData*> user) {
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_info_share_contact), tr::lng_info_share_contact(),
CanShareContactValue(user), CanShareContactValue(user),
[user] { Window::PeerMenuShareContactBox(user); }); [user] { Window::PeerMenuShareContactBox(user); });
} }
@ -489,7 +489,7 @@ void ActionsFiller::addEditContactAction(not_null<UserData*> user) {
const auto window = &_controller->parentController()->window()->controller(); const auto window = &_controller->parentController()->window()->controller();
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_info_edit_contact), tr::lng_info_edit_contact(),
IsContactValue(user), IsContactValue(user),
[=] { window->show(Box(EditContactBox, window, user)); }); [=] { window->show(Box(EditContactBox, window, user)); });
} }
@ -498,7 +498,7 @@ void ActionsFiller::addDeleteContactAction(
not_null<UserData*> user) { not_null<UserData*> user) {
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_info_delete_contact), tr::lng_info_delete_contact(),
IsContactValue(user), IsContactValue(user),
[user] { Window::PeerMenuDeleteContact(user); }); [user] { Window::PeerMenuDeleteContact(user); });
} }
@ -506,7 +506,7 @@ void ActionsFiller::addDeleteContactAction(
void ActionsFiller::addClearHistoryAction(not_null<UserData*> user) { void ActionsFiller::addClearHistoryAction(not_null<UserData*> user) {
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_clear_history), tr::lng_profile_clear_history(),
rpl::single(true), rpl::single(true),
Window::ClearHistoryHandler(user)); Window::ClearHistoryHandler(user));
} }
@ -515,7 +515,7 @@ void ActionsFiller::addDeleteConversationAction(
not_null<UserData*> user) { not_null<UserData*> user) {
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_delete_conversation), tr::lng_profile_delete_conversation(),
rpl::single(true), rpl::single(true),
Window::DeleteAndLeaveHandler(user)); Window::DeleteAndLeaveHandler(user));
} }
@ -550,23 +550,25 @@ void ActionsFiller::addBotCommandActions(not_null<UserData*> user) {
App::sendBotCommand(user, user, '/' + original); App::sendBotCommand(user, user, '/' + original);
} }
}; };
auto addBotCommand = [=](LangKey key, const QString &command) { auto addBotCommand = [=](
rpl::producer<QString> text,
const QString &command) {
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(key), std::move(text),
hasBotCommandValue(command), hasBotCommandValue(command),
[=] { sendBotCommand(command); }); [=] { sendBotCommand(command); });
}; };
addBotCommand(lng_profile_bot_help, qsl("help")); addBotCommand(tr::lng_profile_bot_help(), qsl("help"));
addBotCommand(lng_profile_bot_settings, qsl("settings")); addBotCommand(tr::lng_profile_bot_settings(), qsl("settings"));
addBotCommand(lng_profile_bot_privacy, qsl("privacy")); addBotCommand(tr::lng_profile_bot_privacy(), qsl("privacy"));
} }
void ActionsFiller::addReportAction() { void ActionsFiller::addReportAction() {
const auto peer = _peer; const auto peer = _peer;
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_report), tr::lng_profile_report(),
rpl::single(true), rpl::single(true),
[=] { Ui::show(Box<ReportBox>(peer)); }, [=] { Ui::show(Box<ReportBox>(peer)); },
st::infoBlockButton); st::infoBlockButton);
@ -581,14 +583,14 @@ void ActionsFiller::addBlockAction(not_null<UserData*> user) {
) | rpl::map([user] { ) | rpl::map([user] {
switch (user->blockStatus()) { switch (user->blockStatus()) {
case UserData::BlockStatus::Blocked: case UserData::BlockStatus::Blocked:
return Lang::Viewer((user->isBot() && !user->isSupport()) return ((user->isBot() && !user->isSupport())
? lng_profile_restart_bot ? tr::lng_profile_restart_bot
: lng_profile_unblock_user); : tr::lng_profile_unblock_user)();
case UserData::BlockStatus::NotBlocked: case UserData::BlockStatus::NotBlocked:
default: default:
return Lang::Viewer((user->isBot() && !user->isSupport()) return ((user->isBot() && !user->isSupport())
? lng_profile_block_bot ? tr::lng_profile_block_bot
: lng_profile_block_user); : tr::lng_profile_block_user)();
} }
}) | rpl::flatten_latest( }) | rpl::flatten_latest(
) | rpl::start_spawning(_wrap->lifetime()); ) | rpl::start_spawning(_wrap->lifetime());
@ -622,7 +624,7 @@ void ActionsFiller::addLeaveChannelAction(
not_null<ChannelData*> channel) { not_null<ChannelData*> channel) {
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_leave_channel), tr::lng_profile_leave_channel(),
AmInChannelValue(channel), AmInChannelValue(channel),
Window::DeleteAndLeaveHandler(channel)); Window::DeleteAndLeaveHandler(channel));
} }
@ -635,7 +637,7 @@ void ActionsFiller::addJoinChannelAction(
| rpl::start_spawning(_wrap->lifetime()); | rpl::start_spawning(_wrap->lifetime());
AddActionButton( AddActionButton(
_wrap, _wrap,
Lang::Viewer(lng_profile_join_channel), tr::lng_profile_join_channel(),
rpl::duplicate(joinVisible), rpl::duplicate(joinVisible),
[channel] { Auth().api().joinChannel(channel); }); [channel] { Auth().api().joinChannel(channel); });
_wrap->add(object_ptr<Ui::SlideWrap<Ui::FixedHeightWidget>>( _wrap->add(object_ptr<Ui::SlideWrap<Ui::FixedHeightWidget>>(
@ -736,7 +738,7 @@ object_ptr<Ui::RpWidget> ActionsFiller::fill() {
// const auto feedId = _feed->id(); // const auto feedId = _feed->id();
// auto result = object_ptr<Button>( // auto result = object_ptr<Button>(
// _wrap, // _wrap,
// Lang::Viewer(lng_info_feed_is_default), // tr::lng_info_feed_is_default(),
// st::infoNotificationsButton); // st::infoNotificationsButton);
// result->toggleOn( // result->toggleOn(
// Auth().data().defaultFeedIdValue( // Auth().data().defaultFeedIdValue(

View File

@ -447,7 +447,7 @@ void SharedMediaCover::createLabel() {
using namespace rpl::mappers; using namespace rpl::mappers;
auto label = object_ptr<Ui::FlatLabel>( auto label = object_ptr<Ui::FlatLabel>(
this, this,
Lang::Viewer(lng_profile_shared_media) | Ui::Text::ToUpper(), tr::lng_profile_shared_media() | Ui::Text::ToUpper(),
st::infoBlockHeaderLabel); st::infoBlockHeaderLabel);
label->setAttribute(Qt::WA_TransparentForMouseEvents); label->setAttribute(Qt::WA_TransparentForMouseEvents);

View File

@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "core/application.h" #include "core/application.h"
#include "auth_session.h" #include "auth_session.h"
#include "ui/wrap/slide_wrap.h" #include "ui/wrap/slide_wrap.h"
#include "ui/text/text_utilities.h"
#include "data/data_peer_values.h" #include "data/data_peer_values.h"
#include "data/data_shared_media.h" #include "data/data_shared_media.h"
#include "data/data_folder.h" #include "data/data_folder.h"
@ -30,7 +31,7 @@ rpl::producer<TextWithEntities> NameValue(not_null<PeerData*> peer) {
Notify::PeerUpdate::Flag::NameChanged Notify::PeerUpdate::Flag::NameChanged
) | rpl::map([=] { ) | rpl::map([=] {
return App::peerName(peer); return App::peerName(peer);
}) | WithEmptyEntities(); }) | Ui::Text::ToWithEntities();
} }
rpl::producer<TextWithEntities> PhoneValue(not_null<UserData*> user) { rpl::producer<TextWithEntities> PhoneValue(not_null<UserData*> user) {
@ -39,7 +40,7 @@ rpl::producer<TextWithEntities> PhoneValue(not_null<UserData*> user) {
Notify::PeerUpdate::Flag::UserPhoneChanged Notify::PeerUpdate::Flag::UserPhoneChanged
) | rpl::map([user] { ) | rpl::map([user] {
return App::formatPhone(user->phone()); return App::formatPhone(user->phone());
}) | WithEmptyEntities(); }) | Ui::Text::ToWithEntities();
} }
auto PlainBioValue(not_null<UserData*> user) { auto PlainBioValue(not_null<UserData*> user) {
@ -52,7 +53,7 @@ auto PlainBioValue(not_null<UserData*> user) {
rpl::producer<TextWithEntities> BioValue(not_null<UserData*> user) { rpl::producer<TextWithEntities> BioValue(not_null<UserData*> user) {
return PlainBioValue(user) return PlainBioValue(user)
| ToSingleLine() | ToSingleLine()
| WithEmptyEntities(); | Ui::Text::ToWithEntities();
} }
auto PlainUsernameValue(not_null<PeerData*> peer) { auto PlainUsernameValue(not_null<PeerData*> peer) {
@ -71,7 +72,7 @@ rpl::producer<TextWithEntities> UsernameValue(not_null<UserData*> user) {
return username.isEmpty() return username.isEmpty()
? QString() ? QString()
: ('@' + username); : ('@' + username);
}) | WithEmptyEntities(); }) | Ui::Text::ToWithEntities();
} }
rpl::producer<QString> PlainAboutValue(not_null<PeerData*> peer) { rpl::producer<QString> PlainAboutValue(not_null<PeerData*> peer) {
@ -95,7 +96,7 @@ rpl::producer<TextWithEntities> AboutValue(not_null<PeerData*> peer) {
} }
return PlainAboutValue( return PlainAboutValue(
peer peer
) | WithEmptyEntities( ) | Ui::Text::ToWithEntities(
) | rpl::map([=](TextWithEntities &&text) { ) | rpl::map([=](TextWithEntities &&text) {
TextUtilities::ParseEntities(text, flags); TextUtilities::ParseEntities(text, flags);
return std::move(text); return std::move(text);

View File

@ -30,12 +30,6 @@ inline auto ToSingleLine() {
}); });
} }
inline auto WithEmptyEntities() {
return rpl::map([](QString &&text) {
return TextWithEntities{ std::move(text), {} };
});
}
rpl::producer<TextWithEntities> NameValue(not_null<PeerData*> peer); rpl::producer<TextWithEntities> NameValue(not_null<PeerData*> peer);
rpl::producer<TextWithEntities> PhoneValue(not_null<UserData*> user); rpl::producer<TextWithEntities> PhoneValue(not_null<UserData*> user);
rpl::producer<TextWithEntities> BioValue(not_null<UserData*> user); rpl::producer<TextWithEntities> BioValue(not_null<UserData*> user);

View File

@ -780,18 +780,21 @@ Instance &Current() {
return Core::App().langpack(); return Core::App().langpack();
} }
namespace details {
QString Current(LangKey key) { QString Current(LangKey key) {
return Current().getValue(key); return Lang::Current().getValue(key);
} }
rpl::producer<QString> Viewer(LangKey key) { rpl::producer<QString> Viewer(LangKey key) {
return rpl::single( return rpl::single(
Current().getValue(key) Lang::Current().getValue(key)
) | then(base::ObservableViewer( ) | then(base::ObservableViewer(
Current().updated() Lang::Current().updated()
) | rpl::map([=] { ) | rpl::map([=] {
return Current().getValue(key); return Lang::Current().getValue(key);
})); }));
} }
} // namespace details
} // namespace Lang } // namespace Lang

View File

@ -56,9 +56,6 @@ Language DefaultLanguage();
class Instance; class Instance;
Instance &Current(); Instance &Current();
QString Current(LangKey key);
rpl::producer<QString> Viewer(LangKey key);
enum class Pack { enum class Pack {
None, None,
Current, Current,
@ -162,4 +159,10 @@ private:
}; };
namespace details {
QString Current(LangKey key);
rpl::producer<QString> Viewer(LangKey key);
} // namespace details
} // namespace Lang } // namespace Lang

View File

@ -13,14 +13,13 @@ enum LangKey : int;
enum lngtag_count : int; enum lngtag_count : int;
namespace Lang { namespace Lang {
QString Current(LangKey key);
rpl::producer<QString> Viewer(LangKey key);
namespace details { namespace details {
inline constexpr auto kPluralCount = 6; inline constexpr auto kPluralCount = 6;
QString Current(LangKey key);
rpl::producer<QString> Viewer(LangKey key);
template <typename Tag> struct TagValue; template <typename Tag> struct TagValue;
template <int Index, typename Type, typename Tuple> template <int Index, typename Type, typename Tuple>
@ -90,7 +89,9 @@ struct Producer {
typename T = decltype(std::declval<P>()(QString())), typename T = decltype(std::declval<P>()(QString())),
typename ...Values> typename ...Values>
static T Current(LangKey base, P p, const Values &...values) { static T Current(LangKey base, P p, const Values &...values) {
return ReplaceUnwrap<Tags...>::template Call(p(Lang::Current(base)), values...); return ReplaceUnwrap<Tags...>::template Call(
p(Lang::details::Current(base)),
values...);
} }
}; };
@ -107,7 +108,7 @@ struct Producer<> {
typename P, typename P,
typename T = decltype(std::declval<P>()(QString()))> typename T = decltype(std::declval<P>()(QString()))>
static T Current(LangKey base, P p) { static T Current(LangKey base, P p) {
return p(Lang::Current(base)); return p(Lang::details::Current(base));
} }
}; };
@ -169,7 +170,7 @@ struct Producer<lngtag_count, Tags...> {
auto plural = Plural(base, count, type); auto plural = Plural(base, count, type);
return ReplaceUnwrap<Tags...>::template Call( return ReplaceUnwrap<Tags...>::template Call(
ReplaceTag<T>::Call( ReplaceTag<T>::Call(
p(Lang::Current(LangKey(base + plural.keyShift))), p(Lang::details::Current(LangKey(base + plural.keyShift))),
type, type,
StartReplacements<T>::Call( StartReplacements<T>::Call(
std::move(plural.replacement))), std::move(plural.replacement))),

View File

@ -23,7 +23,7 @@ namespace Passport {
Panel::Panel(not_null<PanelController*> controller) Panel::Panel(not_null<PanelController*> controller)
: _controller(controller) : _controller(controller)
, _widget(std::make_unique<Ui::SeparatePanel>()) { , _widget(std::make_unique<Ui::SeparatePanel>()) {
_widget->setTitle(Lang::Viewer(lng_passport_title)); _widget->setTitle(tr::lng_passport_title());
_widget->setInnerSize(st::passportPanelSize); _widget->setInnerSize(st::passportPanelSize);
_widget->closeRequests( _widget->closeRequests(

View File

@ -829,21 +829,21 @@ auto PanelController::deleteValueLabel() const
Expects(_editScope != nullptr); Expects(_editScope != nullptr);
if (hasValueDocument()) { if (hasValueDocument()) {
return Lang::Viewer(lng_passport_delete_document); return tr::lng_passport_delete_document();
} else if (!hasValueFields()) { } else if (!hasValueFields()) {
return std::nullopt; return std::nullopt;
} }
switch (_editScope->type) { switch (_editScope->type) {
case Scope::Type::PersonalDetails: case Scope::Type::PersonalDetails:
case Scope::Type::Identity: case Scope::Type::Identity:
return Lang::Viewer(lng_passport_delete_details); return tr::lng_passport_delete_details();
case Scope::Type::AddressDetails: case Scope::Type::AddressDetails:
case Scope::Type::Address: case Scope::Type::Address:
return Lang::Viewer(lng_passport_delete_address); return tr::lng_passport_delete_address();
case Scope::Type::Email: case Scope::Type::Email:
return Lang::Viewer(lng_passport_delete_email); return tr::lng_passport_delete_email();
case Scope::Type::Phone: case Scope::Type::Phone:
return Lang::Viewer(lng_passport_delete_phone); return tr::lng_passport_delete_phone();
} }
Unexpected("Type in PanelController::deleteValueLabel."); Unexpected("Type in PanelController::deleteValueLabel.");
} }

View File

@ -234,15 +234,11 @@ void PanelEditContact::setupControls(
_content->add( _content->add(
object_ptr<Info::Profile::Button>( object_ptr<Info::Profile::Button>(
_content, _content,
Lang::Viewer( tr::lng_passport_use_existing(
lng_passport_use_existing__tagged lt_existing,
) | rpl::map([=] { rpl::single(_scheme.format
return lng_passport_use_existing( ? _scheme.format(existing)
lt_existing, : existing)),
(_scheme.format
? _scheme.format(existing)
: existing));
}),
st::passportUploadButton), st::passportUploadButton),
st::passportUploadButtonPadding st::passportUploadButtonPadding
)->addClickHandler([=] { )->addClickHandler([=] {

View File

@ -210,9 +210,9 @@ Ui::SlideWrap<ScanButton> *EditScans::List::nonDeletedErrorRow() const {
} }
rpl::producer<QString> EditScans::List::uploadButtonText() const { rpl::producer<QString> EditScans::List::uploadButtonText() const {
return Lang::Viewer(files.empty() return (files.empty()
? lng_passport_upload_scans ? tr::lng_passport_upload_scans
: lng_passport_upload_more) | Ui::Text::ToUpper(); : tr::lng_passport_upload_more)() | Ui::Text::ToUpper();
} }
void EditScans::List::hideError() { void EditScans::List::hideError() {
@ -611,37 +611,37 @@ void EditScans::setupSpecialScans(
} }
Unexpected("Type in special row title."); Unexpected("Type in special row title.");
}; };
const auto uploadKey = [=](FileType type, bool hasScan) { const auto uploadText = [=](FileType type, bool hasScan) {
switch (type) { switch (type) {
case FileType::FrontSide: case FileType::FrontSide:
return requiresBothSides return requiresBothSides
? (hasScan ? (hasScan
? lng_passport_reupload_front_side ? tr::lng_passport_reupload_front_side
: lng_passport_upload_front_side) : tr::lng_passport_upload_front_side)
: (hasScan : (hasScan
? lng_passport_reupload_main_page ? tr::lng_passport_reupload_main_page
: lng_passport_upload_main_page); : tr::lng_passport_upload_main_page);
case FileType::ReverseSide: case FileType::ReverseSide:
return hasScan return hasScan
? lng_passport_reupload_reverse_side ? tr::lng_passport_reupload_reverse_side
: lng_passport_upload_reverse_side; : tr::lng_passport_upload_reverse_side;
case FileType::Selfie: case FileType::Selfie:
return hasScan return hasScan
? lng_passport_reupload_selfie ? tr::lng_passport_reupload_selfie
: lng_passport_upload_selfie; : tr::lng_passport_upload_selfie;
} }
Unexpected("Type in special row upload key."); Unexpected("Type in special row upload key.");
}; };
const auto description = [&](FileType type) { const auto description = [&](FileType type) {
switch (type) { switch (type) {
case FileType::FrontSide: case FileType::FrontSide:
return lang(requiresBothSides return requiresBothSides
? lng_passport_front_side_description ? tr::lng_passport_front_side_description
: lng_passport_main_page_description); : tr::lng_passport_main_page_description;
case FileType::ReverseSide: case FileType::ReverseSide:
return lang(lng_passport_reverse_side_description); return tr::lng_passport_reverse_side_description;
case FileType::Selfie: case FileType::Selfie:
return lang(lng_passport_selfie_description); return tr::lng_passport_selfie_description;
} }
Unexpected("Type in special row upload key."); Unexpected("Type in special row upload key.");
}; };
@ -684,7 +684,7 @@ void EditScans::setupSpecialScans(
} }
auto label = scan.rowCreated.value( auto label = scan.rowCreated.value(
) | rpl::map([=, type = type](bool created) { ) | rpl::map([=, type = type](bool created) {
return Lang::Viewer(uploadKey(type, created)); return uploadText(type, created)();
}) | rpl::flatten_latest( }) | rpl::flatten_latest(
) | Ui::Text::ToUpper(); ) | Ui::Text::ToUpper();
scan.upload = inner->add( scan.upload = inner->add(
@ -701,7 +701,7 @@ void EditScans::setupSpecialScans(
inner, inner,
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
inner, inner,
description(type), description(type)(tr::now),
st::boxDividerLabel), st::boxDividerLabel),
st::passportFormLabelPadding)); st::passportFormLabelPadding));
} }

View File

@ -57,7 +57,7 @@ void SetupConnectionType(not_null<Ui::VerticalLayout*> container) {
}; };
const auto button = AddButtonWithLabel( const auto button = AddButtonWithLabel(
container, container,
lng_settings_connection_type, tr::lng_settings_connection_type(),
rpl::single( rpl::single(
rpl::empty_value() rpl::empty_value()
) | rpl::then(base::ObservableViewer( ) | rpl::then(base::ObservableViewer(
@ -88,7 +88,7 @@ void SetupUpdate(not_null<Ui::VerticalLayout*> container) {
currentVersionText()); currentVersionText());
const auto toggle = AddButton( const auto toggle = AddButton(
container, container,
lng_settings_update_automatically, tr::lng_settings_update_automatically(),
st::settingsUpdateToggle); st::settingsUpdateToggle);
const auto label = Ui::CreateChild<Ui::FlatLabel>( const auto label = Ui::CreateChild<Ui::FlatLabel>(
toggle.get(), toggle.get(),
@ -102,16 +102,16 @@ void SetupUpdate(not_null<Ui::VerticalLayout*> container) {
const auto inner = options->entity(); const auto inner = options->entity();
const auto install = cAlphaVersion() ? nullptr : AddButton( const auto install = cAlphaVersion() ? nullptr : AddButton(
inner, inner,
lng_settings_install_beta, tr::lng_settings_install_beta(),
st::settingsButton).get(); st::settingsButton).get();
const auto check = AddButton( const auto check = AddButton(
inner, inner,
lng_settings_check_now, tr::lng_settings_check_now(),
st::settingsButton); st::settingsButton);
const auto update = Ui::CreateChild<Button>( const auto update = Ui::CreateChild<Button>(
check.get(), check.get(),
Lang::Viewer(lng_update_telegram) | Ui::Text::ToUpper(), tr::lng_update_telegram() | Ui::Text::ToUpper(),
st::settingsUpdate); st::settingsUpdate);
update->hide(); update->hide();
check->widthValue() | rpl::start_with_next([=](int width) { check->widthValue() | rpl::start_with_next([=](int width) {
@ -403,7 +403,7 @@ void SetupTray(not_null<Ui::VerticalLayout*> container) {
void SetupAnimations(not_null<Ui::VerticalLayout*> container) { void SetupAnimations(not_null<Ui::VerticalLayout*> container) {
AddButton( AddButton(
container, container,
lng_settings_enable_animations, tr::lng_settings_enable_animations(),
st::settingsButton st::settingsButton
)->toggleOn( )->toggleOn(
rpl::single(!anim::Disabled()) rpl::single(!anim::Disabled())
@ -421,7 +421,7 @@ void SetupPerformance(not_null<Ui::VerticalLayout*> container) {
AddButton( AddButton(
container, container,
lng_settings_autoplay_gifs, tr::lng_settings_autoplay_gifs(),
st::settingsButton st::settingsButton
)->toggleOn( )->toggleOn(
rpl::single(cAutoPlayGif()) rpl::single(cAutoPlayGif())
@ -442,10 +442,10 @@ void SetupSystemIntegration(
Fn<void(Type)> showOther) { Fn<void(Type)> showOther) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_system_integration); AddSubsectionTitle(container, tr::lng_settings_system_integration());
AddButton( AddButton(
container, container,
lng_settings_section_call_settings, tr::lng_settings_section_call_settings(),
st::settingsButton st::settingsButton
)->addClickHandler([=] { )->addClickHandler([=] {
showOther(Type::Calls); showOther(Type::Calls);
@ -478,7 +478,7 @@ void Advanced::setupContent() {
if (HasUpdate()) { if (HasUpdate()) {
addDivider(); addDivider();
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_settings_version_info); AddSubsectionTitle(content, tr::lng_settings_version_info());
SetupUpdate(content); SetupUpdate(content);
AddSkip(content); AddSkip(content);
} }
@ -489,7 +489,7 @@ void Advanced::setupContent() {
if (HasConnectionType()) { if (HasConnectionType()) {
addDivider(); addDivider();
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_settings_network_proxy); AddSubsectionTitle(content, tr::lng_settings_network_proxy());
SetupConnectionType(content); SetupConnectionType(content);
AddSkip(content); AddSkip(content);
} }
@ -501,7 +501,7 @@ void Advanced::setupContent() {
AddDivider(content); AddDivider(content);
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_settings_performance); AddSubsectionTitle(content, tr::lng_settings_performance());
SetupPerformance(content); SetupPerformance(content);
AddSkip(content); AddSkip(content);

View File

@ -96,10 +96,10 @@ void Calls::setupContent() {
}(); }();
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_settings_call_section_output); AddSubsectionTitle(content, tr::lng_settings_call_section_output());
AddButtonWithLabel( AddButtonWithLabel(
content, content,
lng_settings_call_output_device, tr::lng_settings_call_output_device(),
rpl::single( rpl::single(
currentOutputName currentOutputName
) | rpl::then( ) | rpl::then(
@ -171,10 +171,10 @@ void Calls::setupContent() {
AddSkip(content); AddSkip(content);
AddDivider(content); AddDivider(content);
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_settings_call_section_input); AddSubsectionTitle(content, tr::lng_settings_call_section_input());
AddButtonWithLabel( AddButtonWithLabel(
content, content,
lng_settings_call_input_device, tr::lng_settings_call_input_device(),
rpl::single( rpl::single(
currentInputName currentInputName
) | rpl::then( ) | rpl::then(
@ -276,12 +276,12 @@ void Calls::setupContent() {
AddSkip(content); AddSkip(content);
AddDivider(content); AddDivider(content);
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_settings_call_section_other); AddSubsectionTitle(content, tr::lng_settings_call_section_other());
#if defined Q_OS_MAC && !defined OS_MAC_STORE #if defined Q_OS_MAC && !defined OS_MAC_STORE
AddButton( AddButton(
content, content,
lng_settings_call_audio_ducking, tr::lng_settings_call_audio_ducking(),
st::settingsButton st::settingsButton
)->toggleOn( )->toggleOn(
rpl::single(Global::CallAudioDuckingEnabled()) rpl::single(Global::CallAudioDuckingEnabled())
@ -298,7 +298,7 @@ void Calls::setupContent() {
AddButton( AddButton(
content, content,
lng_settings_call_open_system_prefs, tr::lng_settings_call_open_system_prefs(),
st::settingsButton st::settingsButton
)->addClickHandler([] { )->addClickHandler([] {
const auto opened = Platform::OpenSystemSettings( const auto opened = Platform::OpenSystemSettings(

View File

@ -419,7 +419,7 @@ void SetupStickersEmoji(not_null<Ui::VerticalLayout*> container) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_stickers_emoji); AddSubsectionTitle(container, tr::lng_settings_stickers_emoji());
auto wrap = object_ptr<Ui::VerticalLayout>(container); auto wrap = object_ptr<Ui::VerticalLayout>(container);
const auto inner = wrap.data(); const auto inner = wrap.data();
@ -471,7 +471,7 @@ void SetupStickersEmoji(not_null<Ui::VerticalLayout*> container) {
AddButton( AddButton(
container, container,
lng_stickers_you_have, tr::lng_stickers_you_have(),
st::settingsChatButton, st::settingsChatButton,
&st::settingsIconStickers, &st::settingsIconStickers,
st::settingsChatIconLeft st::settingsChatIconLeft
@ -481,7 +481,7 @@ void SetupStickersEmoji(not_null<Ui::VerticalLayout*> container) {
AddButton( AddButton(
container, container,
lng_emoji_manage_sets, tr::lng_emoji_manage_sets(),
st::settingsChatButton, st::settingsChatButton,
&st::settingsIconEmoji, &st::settingsIconEmoji,
st::settingsChatIconLeft st::settingsChatIconLeft
@ -496,7 +496,7 @@ void SetupMessages(not_null<Ui::VerticalLayout*> container) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_messages); AddSubsectionTitle(container, tr::lng_settings_messages());
AddSkip(container, st::settingsSendTypeSkip); AddSkip(container, st::settingsSendTypeSkip);
@ -546,7 +546,7 @@ void SetupMessages(not_null<Ui::VerticalLayout*> container) {
void SetupExport(not_null<Ui::VerticalLayout*> container) { void SetupExport(not_null<Ui::VerticalLayout*> container) {
AddButton( AddButton(
container, container,
lng_settings_export_data, tr::lng_settings_export_data(),
st::settingsButton st::settingsButton
)->addClickHandler([] { )->addClickHandler([] {
Ui::hideSettingsAndLayer(); Ui::hideSettingsAndLayer();
@ -560,7 +560,7 @@ void SetupExport(not_null<Ui::VerticalLayout*> container) {
void SetupLocalStorage(not_null<Ui::VerticalLayout*> container) { void SetupLocalStorage(not_null<Ui::VerticalLayout*> container) {
AddButton( AddButton(
container, container,
lng_settings_manage_local_storage, tr::lng_settings_manage_local_storage(),
st::settingsButton st::settingsButton
)->addClickHandler([] { )->addClickHandler([] {
LocalStorageBox::Show( LocalStorageBox::Show(
@ -575,11 +575,11 @@ void SetupDataStorage(not_null<Ui::VerticalLayout*> container) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_data_storage); AddSubsectionTitle(container, tr::lng_settings_data_storage());
const auto ask = AddButton( const auto ask = AddButton(
container, container,
lng_download_path_ask, tr::lng_download_path_ask(),
st::settingsButton st::settingsButton
)->toggleOn(rpl::single(Global::AskDownloadPath())); )->toggleOn(rpl::single(Global::AskDownloadPath()));
@ -590,7 +590,7 @@ void SetupDataStorage(not_null<Ui::VerticalLayout*> container) {
container, container,
object_ptr<Button>( object_ptr<Button>(
container, container,
Lang::Viewer(lng_download_path), tr::lng_download_path(),
st::settingsButton))); st::settingsButton)));
auto pathtext = rpl::single( auto pathtext = rpl::single(
rpl::empty_value() rpl::empty_value()
@ -603,7 +603,7 @@ void SetupDataStorage(not_null<Ui::VerticalLayout*> container) {
path->entity(), path->entity(),
std::move(pathtext), std::move(pathtext),
st::settingsButton, st::settingsButton,
lng_download_path); tr::lng_download_path());
path->entity()->addClickHandler([] { path->entity()->addClickHandler([] {
Ui::show(Box<DownloadPathBox>()); Ui::show(Box<DownloadPathBox>());
}); });
@ -633,21 +633,21 @@ void SetupAutoDownload(not_null<Ui::VerticalLayout*> container) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_media_auto_settings); AddSubsectionTitle(container, tr::lng_media_auto_settings());
using Source = Data::AutoDownload::Source; using Source = Data::AutoDownload::Source;
const auto add = [&](LangKey label, Source source) { const auto add = [&](rpl::producer<QString> label, Source source) {
AddButton( AddButton(
container, container,
label, std::move(label),
st::settingsButton st::settingsButton
)->addClickHandler([=] { )->addClickHandler([=] {
Ui::show(Box<AutoDownloadBox>(source)); Ui::show(Box<AutoDownloadBox>(source));
}); });
}; };
add(lng_media_auto_in_private, Source::User); add(tr::lng_media_auto_in_private(), Source::User);
add(lng_media_auto_in_groups, Source::Group); add(tr::lng_media_auto_in_groups(), Source::Group);
add(lng_media_auto_in_channels, Source::Channel); add(tr::lng_media_auto_in_channels(), Source::Channel);
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
} }
@ -656,7 +656,7 @@ void SetupChatBackground(not_null<Ui::VerticalLayout*> container) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_section_background); AddSubsectionTitle(container, tr::lng_settings_section_background());
container->add( container->add(
object_ptr<BackgroundRow>(container), object_ptr<BackgroundRow>(container),
@ -905,7 +905,7 @@ void SetupDefaultThemes(not_null<Ui::VerticalLayout*> container) {
void SetupThemeOptions(not_null<Ui::VerticalLayout*> container) { void SetupThemeOptions(not_null<Ui::VerticalLayout*> container) {
AddSkip(container, st::settingsPrivacySkip); AddSkip(container, st::settingsPrivacySkip);
AddSubsectionTitle(container, lng_settings_themes); AddSubsectionTitle(container, tr::lng_settings_themes());
AddSkip(container, st::settingsThemesTopSkip); AddSkip(container, st::settingsThemesTopSkip);
SetupDefaultThemes(container); SetupDefaultThemes(container);
@ -913,7 +913,7 @@ void SetupThemeOptions(not_null<Ui::VerticalLayout*> container) {
AddButton( AddButton(
container, container,
lng_settings_bg_edit_theme, tr::lng_settings_bg_edit_theme(),
st::settingsChatButton, st::settingsChatButton,
&st::settingsIconThemes, &st::settingsIconThemes,
st::settingsChatIconLeft st::settingsChatIconLeft

View File

@ -77,15 +77,6 @@ void AddDividerText(
st::settingsDividerLabelPadding)); st::settingsDividerLabelPadding));
} }
not_null<Button*> AddButton(
not_null<Ui::VerticalLayout*> container,
LangKey text,
const style::InfoProfileButton &st,
const style::icon *leftIcon,
int iconLeft) {
return AddButton(container, Lang::Viewer(text), st, leftIcon, iconLeft);
}
not_null<Button*> AddButton( not_null<Button*> AddButton(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
rpl::producer<QString> text, rpl::producer<QString> text,
@ -127,13 +118,13 @@ void CreateRightLabel(
not_null<Button*> button, not_null<Button*> button,
rpl::producer<QString> label, rpl::producer<QString> label,
const style::InfoProfileButton &st, const style::InfoProfileButton &st,
LangKey buttonText) { rpl::producer<QString> buttonText) {
const auto name = Ui::CreateChild<Ui::FlatLabel>( const auto name = Ui::CreateChild<Ui::FlatLabel>(
button.get(), button.get(),
st::settingsButtonRight); st::settingsButtonRight);
rpl::combine( rpl::combine(
button->widthValue(), button->widthValue(),
Lang::Viewer(buttonText), std::move(buttonText),
std::move(label) std::move(label)
) | rpl::start_with_next([=, &st]( ) | rpl::start_with_next([=, &st](
int width, int width,
@ -153,13 +144,18 @@ void CreateRightLabel(
not_null<Button*> AddButtonWithLabel( not_null<Button*> AddButtonWithLabel(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
LangKey text, rpl::producer<QString> text,
rpl::producer<QString> label, rpl::producer<QString> label,
const style::InfoProfileButton &st, const style::InfoProfileButton &st,
const style::icon *leftIcon, const style::icon *leftIcon,
int iconLeft) { int iconLeft) {
const auto button = AddButton(container, text, st, leftIcon, iconLeft); const auto button = AddButton(
CreateRightLabel(button, std::move(label), st, text); container,
rpl::duplicate(text),
st,
leftIcon,
iconLeft);
CreateRightLabel(button, std::move(label), st, std::move(text));
return button; return button;
} }
@ -174,12 +170,6 @@ void AddSubsectionTitle(
st::settingsSubsectionTitlePadding); st::settingsSubsectionTitlePadding);
} }
void AddSubsectionTitle(
not_null<Ui::VerticalLayout*> container,
LangKey text) {
AddSubsectionTitle(container, Lang::Viewer(text));
}
void FillMenu(Fn<void(Type)> showOther, MenuCallback addAction) { void FillMenu(Fn<void(Type)> showOther, MenuCallback addAction) {
if (!Auth().supportMode()) { if (!Auth().supportMode()) {
addAction( addAction(

View File

@ -9,8 +9,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/rp_widget.h" #include "ui/rp_widget.h"
enum LangKey : int;
namespace Ui { namespace Ui {
class VerticalLayout; class VerticalLayout;
} // namespace Ui } // namespace Ui
@ -71,12 +69,6 @@ void AddDivider(not_null<Ui::VerticalLayout*> container);
void AddDividerText( void AddDividerText(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
rpl::producer<QString> text); rpl::producer<QString> text);
not_null<Button*> AddButton(
not_null<Ui::VerticalLayout*> container,
LangKey text,
const style::InfoProfileButton &st,
const style::icon *leftIcon = nullptr,
int iconLeft = 0);
not_null<Button*> AddButton( not_null<Button*> AddButton(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
rpl::producer<QString> text, rpl::producer<QString> text,
@ -85,7 +77,7 @@ not_null<Button*> AddButton(
int iconLeft = 0); int iconLeft = 0);
not_null<Button*> AddButtonWithLabel( not_null<Button*> AddButtonWithLabel(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
LangKey text, rpl::producer<QString> text,
rpl::producer<QString> label, rpl::producer<QString> label,
const style::InfoProfileButton &st, const style::InfoProfileButton &st,
const style::icon *leftIcon = nullptr, const style::icon *leftIcon = nullptr,
@ -94,13 +86,10 @@ void CreateRightLabel(
not_null<Button*> button, not_null<Button*> button,
rpl::producer<QString> label, rpl::producer<QString> label,
const style::InfoProfileButton &st, const style::InfoProfileButton &st,
LangKey buttonText); rpl::producer<QString> buttonText);
void AddSubsectionTitle( void AddSubsectionTitle(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
rpl::producer<QString> text); rpl::producer<QString> text);
void AddSubsectionTitle(
not_null<Ui::VerticalLayout*> conatiner,
LangKey text);
using MenuCallback = Fn<QAction*( using MenuCallback = Fn<QAction*(
const QString &text, const QString &text,

View File

@ -218,17 +218,17 @@ void SetupRows(
AddRow( AddRow(
container, container,
Lang::Viewer(lng_settings_name_label), tr::lng_settings_name_label(),
Info::Profile::NameValue(self), Info::Profile::NameValue(self),
lang(lng_profile_copy_fullname), tr::lng_profile_copy_fullname(tr::now),
[=] { Ui::show(Box<EditNameBox>(self)); }, [=] { Ui::show(Box<EditNameBox>(self)); },
st::settingsInfoName); st::settingsInfoName);
AddRow( AddRow(
container, container,
Lang::Viewer(lng_settings_phone_label), tr::lng_settings_phone_label(),
Info::Profile::PhoneValue(self), Info::Profile::PhoneValue(self),
lang(lng_profile_copy_phone), tr::lng_profile_copy_phone(tr::now),
[] { Ui::show(Box<ChangePhoneBox>()); }, [] { Ui::show(Box<ChangePhoneBox>()); },
st::settingsInfoPhone); st::settingsInfoPhone);
@ -239,14 +239,14 @@ void SetupRows(
return username.text.isEmpty(); return username.text.isEmpty();
}); });
auto label = rpl::combine( auto label = rpl::combine(
Lang::Viewer(lng_settings_username_label), tr::lng_settings_username_label(),
std::move(empty) std::move(empty)
) | rpl::map([](const QString &label, bool empty) { ) | rpl::map([](const QString &label, bool empty) {
return empty ? "t.me/username" : label; return empty ? "t.me/username" : label;
}); });
auto value = rpl::combine( auto value = rpl::combine(
std::move(username), std::move(username),
Lang::Viewer(lng_settings_username_add) tr::lng_settings_username_add()
) | rpl::map([](const TextWithEntities &username, const QString &add) { ) | rpl::map([](const TextWithEntities &username, const QString &add) {
if (!username.text.isEmpty()) { if (!username.text.isEmpty()) {
return username; return username;
@ -263,7 +263,7 @@ void SetupRows(
container, container,
std::move(label), std::move(label),
std::move(value), std::move(value),
lang(lng_context_copy_mention), tr::lng_context_copy_mention(tr::now),
[=] { Ui::show(Box<UsernameBox>()); }, [=] { Ui::show(Box<UsernameBox>()); },
st::settingsInfoUsername); st::settingsInfoUsername);
@ -392,7 +392,7 @@ BioManager SetupBio(
container->add( container->add(
object_ptr<Ui::FlatLabel>( object_ptr<Ui::FlatLabel>(
container, container,
Lang::Viewer(lng_settings_about_bio), tr::lng_settings_about_bio(),
st::boxDividerLabel), st::boxDividerLabel),
st::settingsBioLabelPadding); st::settingsBioLabelPadding);

View File

@ -268,7 +268,7 @@ void IntroWidget::forceContentRepaint() {
void IntroWidget::createTopBar() { void IntroWidget::createTopBar() {
_topBar.create(this, st::infoLayerTopBar); _topBar.create(this, st::infoLayerTopBar);
_topBar->setTitle(Lang::Viewer(lng_menu_settings)); _topBar->setTitle(tr::lng_menu_settings());
auto close = _topBar->addButton( auto close = _topBar->addButton(
base::make_unique_q<Ui::IconButton>( base::make_unique_q<Ui::IconButton>(
_topBar, _topBar,

View File

@ -34,7 +34,7 @@ void SetupLanguageButton(
bool icon) { bool icon) {
const auto button = AddButtonWithLabel( const auto button = AddButtonWithLabel(
container, container,
lng_settings_language, tr::lng_settings_language(),
rpl::single(Lang::Current().nativeName()), rpl::single(Lang::Current().nativeName()),
icon ? st::settingsSectionButton : st::settingsButton, icon ? st::settingsSectionButton : st::settingsButton,
icon ? &st::settingsIconLanguage : nullptr); icon ? &st::settingsIconLanguage : nullptr);
@ -56,12 +56,12 @@ void SetupSections(
AddSkip(container); AddSkip(container);
const auto addSection = [&]( const auto addSection = [&](
LangKey label, rpl::producer<QString> label,
Type type, Type type,
const style::icon *icon) { const style::icon *icon) {
AddButton( AddButton(
container, container,
label, std::move(label),
st::settingsSectionButton, st::settingsSectionButton,
icon icon
)->addClickHandler([=] { showOther(type); }); )->addClickHandler([=] { showOther(type); });
@ -73,24 +73,24 @@ void SetupSections(
AddSkip(container); AddSkip(container);
} else { } else {
addSection( addSection(
lng_settings_information, tr::lng_settings_information(),
Type::Information, Type::Information,
&st::settingsIconInformation); &st::settingsIconInformation);
} }
addSection( addSection(
lng_settings_section_notify, tr::lng_settings_section_notify(),
Type::Notifications, Type::Notifications,
&st::settingsIconNotifications); &st::settingsIconNotifications);
addSection( addSection(
lng_settings_section_privacy, tr::lng_settings_section_privacy(),
Type::PrivacySecurity, Type::PrivacySecurity,
&st::settingsIconPrivacySecurity); &st::settingsIconPrivacySecurity);
addSection( addSection(
lng_settings_section_chat_settings, tr::lng_settings_section_chat_settings(),
Type::Chat, Type::Chat,
&st::settingsIconChat); &st::settingsIconChat);
addSection( addSection(
lng_settings_advanced, tr::lng_settings_advanced(),
Type::Advanced, Type::Advanced,
&st::settingsIconGeneral); &st::settingsIconGeneral);
@ -116,7 +116,7 @@ void SetupInterfaceScale(
const auto switched = (cConfigScale() == kInterfaceScaleAuto); const auto switched = (cConfigScale() == kInterfaceScaleAuto);
const auto button = AddButton( const auto button = AddButton(
container, container,
lng_settings_default_scale, tr::lng_settings_default_scale(),
icon ? st::settingsSectionButton : st::settingsButton, icon ? st::settingsSectionButton : st::settingsButton,
icon ? &st::settingsIconInterfaceScale : nullptr icon ? &st::settingsIconInterfaceScale : nullptr
)->toggleOn(toggled->events_starting_with_copy(switched)); )->toggleOn(toggled->events_starting_with_copy(switched));
@ -216,7 +216,7 @@ void OpenFaq() {
void SetupFaq(not_null<Ui::VerticalLayout*> container, bool icon) { void SetupFaq(not_null<Ui::VerticalLayout*> container, bool icon) {
AddButton( AddButton(
container, container,
lng_settings_faq, tr::lng_settings_faq(),
icon ? st::settingsSectionButton : st::settingsButton, icon ? st::settingsSectionButton : st::settingsButton,
icon ? &st::settingsIconFaq : nullptr icon ? &st::settingsIconFaq : nullptr
)->addClickHandler(OpenFaq); )->addClickHandler(OpenFaq);
@ -231,7 +231,7 @@ void SetupHelp(not_null<Ui::VerticalLayout*> container) {
if (AuthSession::Exists()) { if (AuthSession::Exists()) {
const auto button = AddButton( const auto button = AddButton(
container, container,
lng_settings_ask_question, tr::lng_settings_ask_question(),
st::settingsSectionButton); st::settingsSectionButton);
button->addClickHandler([=] { button->addClickHandler([=] {
const auto ready = crl::guard(button, [](const MTPUser &data) { const auto ready = crl::guard(button, [](const MTPUser &data) {

View File

@ -491,14 +491,14 @@ void SetupAdvancedNotifications(not_null<Ui::VerticalLayout*> container) {
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddDivider(container); AddDivider(container);
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddSubsectionTitle(container, lng_settings_notifications_position); AddSubsectionTitle(container, tr::lng_settings_notifications_position());
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
const auto position = container->add( const auto position = container->add(
object_ptr<NotificationsCount>(container)); object_ptr<NotificationsCount>(container));
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddSubsectionTitle(container, lng_settings_notifications_count); AddSubsectionTitle(container, tr::lng_settings_notifications_count());
const auto count = container->add( const auto count = container->add(
object_ptr<Ui::SettingsSlider>(container, st::settingsSlider), object_ptr<Ui::SettingsSlider>(container, st::settingsSlider),
@ -515,7 +515,7 @@ void SetupAdvancedNotifications(not_null<Ui::VerticalLayout*> container) {
} }
void SetupNotificationsContent(not_null<Ui::VerticalLayout*> container) { void SetupNotificationsContent(not_null<Ui::VerticalLayout*> container) {
AddSubsectionTitle(container, lng_settings_notify_title); AddSubsectionTitle(container, tr::lng_settings_notify_title());
const auto checkbox = [&](LangKey label, bool checked) { const auto checkbox = [&](LangKey label, bool checked) {
return object_ptr<Ui::Checkbox>( return object_ptr<Ui::Checkbox>(
@ -552,7 +552,7 @@ void SetupNotificationsContent(not_null<Ui::VerticalLayout*> container) {
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddDivider(container); AddDivider(container);
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddSubsectionTitle(container, lng_settings_badge_title); AddSubsectionTitle(container, tr::lng_settings_badge_title());
const auto muted = addCheckbox( const auto muted = addCheckbox(
lng_settings_include_muted, lng_settings_include_muted,
@ -565,7 +565,7 @@ void SetupNotificationsContent(not_null<Ui::VerticalLayout*> container) {
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddDivider(container); AddDivider(container);
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddSubsectionTitle(container, lng_settings_events_title); AddSubsectionTitle(container, tr::lng_settings_events_title());
const auto joined = addCheckbox( const auto joined = addCheckbox(
lng_settings_events_joined, lng_settings_events_joined,
@ -615,7 +615,7 @@ void SetupNotificationsContent(not_null<Ui::VerticalLayout*> container) {
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddDivider(container); AddDivider(container);
AddSkip(container, st::settingsCheckboxesSkip); AddSkip(container, st::settingsCheckboxesSkip);
AddSubsectionTitle(container, lng_settings_native_title); AddSubsectionTitle(container, tr::lng_settings_native_title());
return addCheckbox(nativeKey, Global::NativeNotifications()); return addCheckbox(nativeKey, Global::NativeNotifications());
}(); }();

View File

@ -315,21 +315,21 @@ QString PhoneNumberPrivacyController::title() {
return lang(lng_edit_privacy_phone_number_title); return lang(lng_edit_privacy_phone_number_title);
} }
LangKey PhoneNumberPrivacyController::optionsTitleKey() { rpl::producer<QString> PhoneNumberPrivacyController::optionsTitleKey() {
return lng_edit_privacy_phone_number_header; return tr::lng_edit_privacy_phone_number_header();
} }
rpl::producer<QString> PhoneNumberPrivacyController::warning() { rpl::producer<QString> PhoneNumberPrivacyController::warning() {
return Lang::Viewer(lng_edit_privacy_phone_number_warning); return tr::lng_edit_privacy_phone_number_warning();
} }
LangKey PhoneNumberPrivacyController::exceptionButtonTextKey( rpl::producer<QString> PhoneNumberPrivacyController::exceptionButtonTextKey(
Exception exception) { Exception exception) {
switch (exception) { switch (exception) {
case Exception::Always: case Exception::Always:
return lng_edit_privacy_phone_number_always_empty; return tr::lng_edit_privacy_phone_number_always_empty();
case Exception::Never: case Exception::Never:
return lng_edit_privacy_phone_number_never_empty; return tr::lng_edit_privacy_phone_number_never_empty();
} }
Unexpected("Invalid exception value."); Unexpected("Invalid exception value.");
} }
@ -343,7 +343,7 @@ QString PhoneNumberPrivacyController::exceptionBoxTitle(Exception exception) {
} }
rpl::producer<QString> PhoneNumberPrivacyController::exceptionsDescription() { rpl::producer<QString> PhoneNumberPrivacyController::exceptionsDescription() {
return Lang::Viewer(lng_edit_privacy_phone_number_exceptions); return tr::lng_edit_privacy_phone_number_exceptions();
} }
ApiWrap::Privacy::Key LastSeenPrivacyController::key() { ApiWrap::Privacy::Key LastSeenPrivacyController::key() {
@ -358,21 +358,21 @@ QString LastSeenPrivacyController::title() {
return lang(lng_edit_privacy_lastseen_title); return lang(lng_edit_privacy_lastseen_title);
} }
LangKey LastSeenPrivacyController::optionsTitleKey() { rpl::producer<QString> LastSeenPrivacyController::optionsTitleKey() {
return lng_edit_privacy_lastseen_header; return tr::lng_edit_privacy_lastseen_header();
} }
rpl::producer<QString> LastSeenPrivacyController::warning() { rpl::producer<QString> LastSeenPrivacyController::warning() {
return Lang::Viewer(lng_edit_privacy_lastseen_warning); return tr::lng_edit_privacy_lastseen_warning();
} }
LangKey LastSeenPrivacyController::exceptionButtonTextKey( rpl::producer<QString> LastSeenPrivacyController::exceptionButtonTextKey(
Exception exception) { Exception exception) {
switch (exception) { switch (exception) {
case Exception::Always: case Exception::Always:
return lng_edit_privacy_lastseen_always_empty; return tr::lng_edit_privacy_lastseen_always_empty();
case Exception::Never: case Exception::Never:
return lng_edit_privacy_lastseen_never_empty; return tr::lng_edit_privacy_lastseen_never_empty();
} }
Unexpected("Invalid exception value."); Unexpected("Invalid exception value.");
} }
@ -386,7 +386,7 @@ QString LastSeenPrivacyController::exceptionBoxTitle(Exception exception) {
} }
rpl::producer<QString> LastSeenPrivacyController::exceptionsDescription() { rpl::producer<QString> LastSeenPrivacyController::exceptionsDescription() {
return Lang::Viewer(lng_edit_privacy_lastseen_exceptions); return tr::lng_edit_privacy_lastseen_exceptions();
} }
void LastSeenPrivacyController::confirmSave(bool someAreDisallowed, FnMut<void()> saveCallback) { void LastSeenPrivacyController::confirmSave(bool someAreDisallowed, FnMut<void()> saveCallback) {
@ -427,15 +427,15 @@ bool GroupsInvitePrivacyController::hasOption(Option option) {
return (option != Option::Nobody); return (option != Option::Nobody);
} }
LangKey GroupsInvitePrivacyController::optionsTitleKey() { rpl::producer<QString> GroupsInvitePrivacyController::optionsTitleKey() {
return lng_edit_privacy_groups_header; return tr::lng_edit_privacy_groups_header();
} }
LangKey GroupsInvitePrivacyController::exceptionButtonTextKey( rpl::producer<QString> GroupsInvitePrivacyController::exceptionButtonTextKey(
Exception exception) { Exception exception) {
switch (exception) { switch (exception) {
case Exception::Always: return lng_edit_privacy_groups_always_empty; case Exception::Always: return tr::lng_edit_privacy_groups_always_empty();
case Exception::Never: return lng_edit_privacy_groups_never_empty; case Exception::Never: return tr::lng_edit_privacy_groups_never_empty();
} }
Unexpected("Invalid exception value."); Unexpected("Invalid exception value.");
} }
@ -450,7 +450,7 @@ QString GroupsInvitePrivacyController::exceptionBoxTitle(Exception exception) {
auto GroupsInvitePrivacyController::exceptionsDescription() auto GroupsInvitePrivacyController::exceptionsDescription()
-> rpl::producer<QString> { -> rpl::producer<QString> {
return Lang::Viewer(lng_edit_privacy_groups_exceptions); return tr::lng_edit_privacy_groups_exceptions();
} }
ApiWrap::Privacy::Key CallsPrivacyController::key() { ApiWrap::Privacy::Key CallsPrivacyController::key() {
@ -465,15 +465,15 @@ QString CallsPrivacyController::title() {
return lang(lng_edit_privacy_calls_title); return lang(lng_edit_privacy_calls_title);
} }
LangKey CallsPrivacyController::optionsTitleKey() { rpl::producer<QString> CallsPrivacyController::optionsTitleKey() {
return lng_edit_privacy_calls_header; return tr::lng_edit_privacy_calls_header();
} }
LangKey CallsPrivacyController::exceptionButtonTextKey( rpl::producer<QString> CallsPrivacyController::exceptionButtonTextKey(
Exception exception) { Exception exception) {
switch (exception) { switch (exception) {
case Exception::Always: return lng_edit_privacy_calls_always_empty; case Exception::Always: return tr::lng_edit_privacy_calls_always_empty();
case Exception::Never: return lng_edit_privacy_calls_never_empty; case Exception::Never: return tr::lng_edit_privacy_calls_never_empty();
} }
Unexpected("Invalid exception value."); Unexpected("Invalid exception value.");
} }
@ -487,7 +487,7 @@ QString CallsPrivacyController::exceptionBoxTitle(Exception exception) {
} }
rpl::producer<QString> CallsPrivacyController::exceptionsDescription() { rpl::producer<QString> CallsPrivacyController::exceptionsDescription() {
return Lang::Viewer(lng_edit_privacy_calls_exceptions); return tr::lng_edit_privacy_calls_exceptions();
} }
object_ptr<Ui::RpWidget> CallsPrivacyController::setupBelowWidget( object_ptr<Ui::RpWidget> CallsPrivacyController::setupBelowWidget(
@ -497,10 +497,10 @@ object_ptr<Ui::RpWidget> CallsPrivacyController::setupBelowWidget(
AddDivider(content); AddDivider(content);
AddSkip(content); AddSkip(content);
AddSubsectionTitle(content, lng_settings_calls_peer_to_peer_title); AddSubsectionTitle(content, tr::lng_settings_calls_peer_to_peer_title());
Settings::AddPrivacyButton( Settings::AddPrivacyButton(
content, content,
lng_settings_calls_peer_to_peer_button, tr::lng_settings_calls_peer_to_peer_button(),
ApiWrap::Privacy::Key::CallsPeer2Peer, ApiWrap::Privacy::Key::CallsPeer2Peer,
[] { return std::make_unique<CallsPeer2PeerPrivacyController>(); }); [] { return std::make_unique<CallsPeer2PeerPrivacyController>(); });
AddSkip(content); AddSkip(content);
@ -520,8 +520,8 @@ QString CallsPeer2PeerPrivacyController::title() {
return lang(lng_edit_privacy_calls_p2p_title); return lang(lng_edit_privacy_calls_p2p_title);
} }
LangKey CallsPeer2PeerPrivacyController::optionsTitleKey() { rpl::producer<QString> CallsPeer2PeerPrivacyController::optionsTitleKey() {
return lng_edit_privacy_calls_p2p_header; return tr::lng_edit_privacy_calls_p2p_header();
} }
LangKey CallsPeer2PeerPrivacyController::optionLabelKey( LangKey CallsPeer2PeerPrivacyController::optionLabelKey(
@ -535,14 +535,14 @@ LangKey CallsPeer2PeerPrivacyController::optionLabelKey(
} }
rpl::producer<QString> CallsPeer2PeerPrivacyController::warning() { rpl::producer<QString> CallsPeer2PeerPrivacyController::warning() {
return Lang::Viewer(lng_settings_peer_to_peer_about); return tr::lng_settings_peer_to_peer_about();
} }
LangKey CallsPeer2PeerPrivacyController::exceptionButtonTextKey( rpl::producer<QString> CallsPeer2PeerPrivacyController::exceptionButtonTextKey(
Exception exception) { Exception exception) {
switch (exception) { switch (exception) {
case Exception::Always: return lng_edit_privacy_calls_p2p_always_empty; case Exception::Always: return tr::lng_edit_privacy_calls_p2p_always_empty();
case Exception::Never: return lng_edit_privacy_calls_p2p_never_empty; case Exception::Never: return tr::lng_edit_privacy_calls_p2p_never_empty();
} }
Unexpected("Invalid exception value."); Unexpected("Invalid exception value.");
} }
@ -556,7 +556,7 @@ QString CallsPeer2PeerPrivacyController::exceptionBoxTitle(Exception exception)
} }
rpl::producer<QString> CallsPeer2PeerPrivacyController::exceptionsDescription() { rpl::producer<QString> CallsPeer2PeerPrivacyController::exceptionsDescription() {
return Lang::Viewer(lng_edit_privacy_calls_p2p_exceptions); return tr::lng_edit_privacy_calls_p2p_exceptions();
} }
ApiWrap::Privacy::Key ForwardsPrivacyController::key() { ApiWrap::Privacy::Key ForwardsPrivacyController::key() {
@ -571,19 +571,19 @@ QString ForwardsPrivacyController::title() {
return lang(lng_edit_privacy_forwards_title); return lang(lng_edit_privacy_forwards_title);
} }
LangKey ForwardsPrivacyController::optionsTitleKey() { rpl::producer<QString> ForwardsPrivacyController::optionsTitleKey() {
return lng_edit_privacy_forwards_header; return tr::lng_edit_privacy_forwards_header();
} }
rpl::producer<QString> ForwardsPrivacyController::warning() { rpl::producer<QString> ForwardsPrivacyController::warning() {
return Lang::Viewer(lng_edit_privacy_forwards_warning); return tr::lng_edit_privacy_forwards_warning();
} }
LangKey ForwardsPrivacyController::exceptionButtonTextKey( rpl::producer<QString> ForwardsPrivacyController::exceptionButtonTextKey(
Exception exception) { Exception exception) {
switch (exception) { switch (exception) {
case Exception::Always: return lng_edit_privacy_forwards_always_empty; case Exception::Always: return tr::lng_edit_privacy_forwards_always_empty();
case Exception::Never: return lng_edit_privacy_forwards_never_empty; case Exception::Never: return tr::lng_edit_privacy_forwards_never_empty();
} }
Unexpected("Invalid exception value."); Unexpected("Invalid exception value.");
} }
@ -598,7 +598,7 @@ QString ForwardsPrivacyController::exceptionBoxTitle(Exception exception) {
auto ForwardsPrivacyController::exceptionsDescription() auto ForwardsPrivacyController::exceptionsDescription()
-> rpl::producer<QString> { -> rpl::producer<QString> {
return Lang::Viewer(lng_edit_privacy_forwards_exceptions); return tr::lng_edit_privacy_forwards_exceptions();
} }
object_ptr<Ui::RpWidget> ForwardsPrivacyController::setupAboveWidget( object_ptr<Ui::RpWidget> ForwardsPrivacyController::setupAboveWidget(
@ -767,15 +767,15 @@ bool ProfilePhotoPrivacyController::hasOption(Option option) {
return (option != Option::Nobody); return (option != Option::Nobody);
} }
LangKey ProfilePhotoPrivacyController::optionsTitleKey() { rpl::producer<QString> ProfilePhotoPrivacyController::optionsTitleKey() {
return lng_edit_privacy_profile_photo_header; return tr::lng_edit_privacy_profile_photo_header();
} }
LangKey ProfilePhotoPrivacyController::exceptionButtonTextKey( rpl::producer<QString> ProfilePhotoPrivacyController::exceptionButtonTextKey(
Exception exception) { Exception exception) {
switch (exception) { switch (exception) {
case Exception::Always: return lng_edit_privacy_profile_photo_always_empty; case Exception::Always: return tr::lng_edit_privacy_profile_photo_always_empty();
case Exception::Never: return lng_edit_privacy_profile_photo_never_empty; case Exception::Never: return tr::lng_edit_privacy_profile_photo_never_empty();
} }
Unexpected("Invalid exception value."); Unexpected("Invalid exception value.");
} }
@ -790,7 +790,7 @@ QString ProfilePhotoPrivacyController::exceptionBoxTitle(Exception exception) {
auto ProfilePhotoPrivacyController::exceptionsDescription() auto ProfilePhotoPrivacyController::exceptionsDescription()
-> rpl::producer<QString> { -> rpl::producer<QString> {
return Lang::Viewer(lng_edit_privacy_profile_photo_exceptions); return tr::lng_edit_privacy_profile_photo_exceptions();
} }
} // namespace Settings } // namespace Settings

View File

@ -46,9 +46,10 @@ public:
MTPInputPrivacyKey apiKey() override; MTPInputPrivacyKey apiKey() override;
QString title() override; QString title() override;
LangKey optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
rpl::producer<QString> warning() override; rpl::producer<QString> warning() override;
LangKey exceptionButtonTextKey(Exception exception) override; rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override;
QString exceptionBoxTitle(Exception exception) override; QString exceptionBoxTitle(Exception exception) override;
rpl::producer<QString> exceptionsDescription() override; rpl::producer<QString> exceptionsDescription() override;
@ -63,13 +64,16 @@ public:
MTPInputPrivacyKey apiKey() override; MTPInputPrivacyKey apiKey() override;
QString title() override; QString title() override;
LangKey optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
rpl::producer<QString> warning() override; rpl::producer<QString> warning() override;
LangKey exceptionButtonTextKey(Exception exception) override; rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override;
QString exceptionBoxTitle(Exception exception) override; QString exceptionBoxTitle(Exception exception) override;
rpl::producer<QString> exceptionsDescription() override; rpl::producer<QString> exceptionsDescription() override;
void confirmSave(bool someAreDisallowed, FnMut<void()> saveCallback) override; void confirmSave(
bool someAreDisallowed,
FnMut<void()> saveCallback) override;
}; };
@ -83,8 +87,9 @@ public:
QString title() override; QString title() override;
bool hasOption(Option option) override; bool hasOption(Option option) override;
LangKey optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
LangKey exceptionButtonTextKey(Exception exception) override; rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override;
QString exceptionBoxTitle(Exception exception) override; QString exceptionBoxTitle(Exception exception) override;
rpl::producer<QString> exceptionsDescription() override; rpl::producer<QString> exceptionsDescription() override;
@ -99,8 +104,9 @@ public:
MTPInputPrivacyKey apiKey() override; MTPInputPrivacyKey apiKey() override;
QString title() override; QString title() override;
LangKey optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
LangKey exceptionButtonTextKey(Exception exception) override; rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override;
QString exceptionBoxTitle(Exception exception) override; QString exceptionBoxTitle(Exception exception) override;
rpl::producer<QString> exceptionsDescription() override; rpl::producer<QString> exceptionsDescription() override;
@ -118,10 +124,11 @@ public:
MTPInputPrivacyKey apiKey() override; MTPInputPrivacyKey apiKey() override;
QString title() override; QString title() override;
LangKey optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
LangKey optionLabelKey(EditPrivacyBox::Option option) override; LangKey optionLabelKey(EditPrivacyBox::Option option) override;
rpl::producer<QString> warning() override; rpl::producer<QString> warning() override;
LangKey exceptionButtonTextKey(Exception exception) override; rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override;
QString exceptionBoxTitle(Exception exception) override; QString exceptionBoxTitle(Exception exception) override;
rpl::producer<QString> exceptionsDescription() override; rpl::producer<QString> exceptionsDescription() override;
@ -138,9 +145,10 @@ public:
MTPInputPrivacyKey apiKey() override; MTPInputPrivacyKey apiKey() override;
QString title() override; QString title() override;
LangKey optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
rpl::producer<QString> warning() override; rpl::producer<QString> warning() override;
LangKey exceptionButtonTextKey(Exception exception) override; rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override;
QString exceptionBoxTitle(Exception exception) override; QString exceptionBoxTitle(Exception exception) override;
rpl::producer<QString> exceptionsDescription() override; rpl::producer<QString> exceptionsDescription() override;
@ -170,8 +178,9 @@ public:
QString title() override; QString title() override;
bool hasOption(Option option) override; bool hasOption(Option option) override;
LangKey optionsTitleKey() override; rpl::producer<QString> optionsTitleKey() override;
LangKey exceptionButtonTextKey(Exception exception) override; rpl::producer<QString> exceptionButtonTextKey(
Exception exception) override;
QString exceptionBoxTitle(Exception exception) override; QString exceptionBoxTitle(Exception exception) override;
rpl::producer<QString> exceptionsDescription() override; rpl::producer<QString> exceptionsDescription() override;

View File

@ -106,7 +106,7 @@ rpl::producer<int> BlockedUsersCount() {
void SetupPrivacy(not_null<Ui::VerticalLayout*> container) { void SetupPrivacy(not_null<Ui::VerticalLayout*> container) {
AddSkip(container, st::settingsPrivacySkip); AddSkip(container, st::settingsPrivacySkip);
AddSubsectionTitle(container, lng_settings_privacy_title); AddSubsectionTitle(container, tr::lng_settings_privacy_title());
auto count = BlockedUsersCount( auto count = BlockedUsersCount(
) | rpl::map([](int count) { ) | rpl::map([](int count) {
@ -114,7 +114,7 @@ void SetupPrivacy(not_null<Ui::VerticalLayout*> container) {
}); });
AddButtonWithLabel( AddButtonWithLabel(
container, container,
lng_settings_blocked_users, tr::lng_settings_blocked_users(),
std::move(count), std::move(count),
st::settingsButton st::settingsButton
)->addClickHandler([] { )->addClickHandler([] {
@ -132,38 +132,39 @@ void SetupPrivacy(not_null<Ui::VerticalLayout*> container) {
}); });
using Key = Privacy::Key; using Key = Privacy::Key;
const auto add = [&](LangKey label, Key key, auto controller) { const auto add = [&](
AddPrivacyButton(container, label, key, controller); rpl::producer<QString> label,
Key key,
auto controller) {
AddPrivacyButton(container, std::move(label), key, controller);
}; };
add( add(
lng_settings_phone_number_privacy, tr::lng_settings_phone_number_privacy(),
Key::PhoneNumber, Key::PhoneNumber,
[] { return std::make_unique<PhoneNumberPrivacyController>(); }); [] { return std::make_unique<PhoneNumberPrivacyController>(); });
add( add(
lng_settings_last_seen, tr::lng_settings_last_seen(),
Key::LastSeen, Key::LastSeen,
[] { return std::make_unique<LastSeenPrivacyController>(); }); [] { return std::make_unique<LastSeenPrivacyController>(); });
add( add(
lng_settings_forwards_privacy, tr::lng_settings_forwards_privacy(),
Key::Forwards, Key::Forwards,
[] { return std::make_unique<ForwardsPrivacyController>(); }); [] { return std::make_unique<ForwardsPrivacyController>(); });
add( add(
lng_settings_profile_photo_privacy, tr::lng_settings_profile_photo_privacy(),
Key::ProfilePhoto, Key::ProfilePhoto,
[] { return std::make_unique<ProfilePhotoPrivacyController>(); }); [] { return std::make_unique<ProfilePhotoPrivacyController>(); });
add( add(
lng_settings_calls, tr::lng_settings_calls(),
Key::Calls, Key::Calls,
[] { return std::make_unique<CallsPrivacyController>(); }); [] { return std::make_unique<CallsPrivacyController>(); });
add( add(
lng_settings_groups_invite, tr::lng_settings_groups_invite(),
Key::Invites, Key::Invites,
[] { return std::make_unique<GroupsInvitePrivacyController>(); }); [] { return std::make_unique<GroupsInvitePrivacyController>(); });
AddSkip(container, st::settingsPrivacySecurityPadding); AddSkip(container, st::settingsPrivacySecurityPadding);
AddDividerText( AddDividerText(container, tr::lng_settings_group_privacy_about());
container,
Lang::Viewer(lng_settings_group_privacy_about));
} }
not_null<Ui::SlideWrap<Ui::PlainShadow>*> AddSeparator( not_null<Ui::SlideWrap<Ui::PlainShadow>*> AddSeparator(
@ -177,15 +178,15 @@ not_null<Ui::SlideWrap<Ui::PlainShadow>*> AddSeparator(
void SetupLocalPasscode(not_null<Ui::VerticalLayout*> container) { void SetupLocalPasscode(not_null<Ui::VerticalLayout*> container) {
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_passcode_title); AddSubsectionTitle(container, tr::lng_settings_passcode_title());
auto has = PasscodeChanges( auto has = PasscodeChanges(
) | rpl::map([] { ) | rpl::map([] {
return Global::LocalPasscode(); return Global::LocalPasscode();
}); });
auto text = rpl::combine( auto text = rpl::combine(
Lang::Viewer(lng_passcode_change), tr::lng_passcode_change(),
Lang::Viewer(lng_passcode_turn_on), tr::lng_passcode_turn_on(),
base::duplicate(has), base::duplicate(has),
[](const QString &change, const QString &create, bool has) { [](const QString &change, const QString &create, bool has) {
return has ? change : create; return has ? change : create;
@ -207,15 +208,15 @@ void SetupLocalPasscode(not_null<Ui::VerticalLayout*> container) {
inner->add( inner->add(
object_ptr<Button>( object_ptr<Button>(
inner, inner,
Lang::Viewer(lng_settings_passcode_disable), tr::lng_settings_passcode_disable(),
st::settingsButton) st::settingsButton)
)->addClickHandler([] { )->addClickHandler([] {
Ui::show(Box<PasscodeBox>(true)); Ui::show(Box<PasscodeBox>(true));
}); });
const auto label = Platform::LastUserInputTimeSupported() const auto label = Platform::LastUserInputTimeSupported()
? lng_passcode_autolock_away ? tr::lng_passcode_autolock_away
: lng_passcode_autolock_inactive; : tr::lng_passcode_autolock_inactive;
auto value = PasscodeChanges( auto value = PasscodeChanges(
) | rpl::map([] { ) | rpl::map([] {
const auto autolock = Global::AutoLock(); const auto autolock = Global::AutoLock();
@ -226,7 +227,7 @@ void SetupLocalPasscode(not_null<Ui::VerticalLayout*> container) {
AddButtonWithLabel( AddButtonWithLabel(
inner, inner,
label, label(),
std::move(value), std::move(value),
st::settingsButton st::settingsButton
)->addClickHandler([] { )->addClickHandler([] {
@ -244,7 +245,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_password_title); AddSubsectionTitle(container, tr::lng_settings_password_title());
auto has = rpl::single( auto has = rpl::single(
false false
@ -300,8 +301,8 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
}, label->lifetime()); }, label->lifetime());
auto text = rpl::combine( auto text = rpl::combine(
Lang::Viewer(lng_cloud_password_set), tr::lng_cloud_password_set(),
Lang::Viewer(lng_cloud_password_edit), tr::lng_cloud_password_edit(),
base::duplicate(has) base::duplicate(has)
) | rpl::map([](const QString &set, const QString &edit, bool has) { ) | rpl::map([](const QString &set, const QString &edit, bool has) {
return has ? edit : set; return has ? edit : set;
@ -331,7 +332,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
container, container,
object_ptr<Button>( object_ptr<Button>(
container, container,
Lang::Viewer(lng_cloud_password_confirm), tr::lng_cloud_password_confirm(),
st::settingsButton))); st::settingsButton)));
confirm->toggleOn(rpl::single( confirm->toggleOn(rpl::single(
false false
@ -372,7 +373,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
container, container,
object_ptr<Button>( object_ptr<Button>(
container, container,
Lang::Viewer(lng_settings_password_disable), tr::lng_settings_password_disable(),
st::settingsButton))); st::settingsButton)));
disable->toggleOn(rpl::combine( disable->toggleOn(rpl::combine(
rpl::duplicate(has), rpl::duplicate(has),
@ -385,7 +386,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
container, container,
object_ptr<Button>( object_ptr<Button>(
container, container,
Lang::Viewer(lng_settings_password_abort), tr::lng_settings_password_abort(),
st::settingsAttentionButton))); st::settingsAttentionButton)));
abort->toggleOn(rpl::combine( abort->toggleOn(rpl::combine(
rpl::duplicate(has), rpl::duplicate(has),
@ -412,7 +413,7 @@ void SetupCloudPassword(not_null<Ui::VerticalLayout*> container) {
void SetupSelfDestruction(not_null<Ui::VerticalLayout*> container) { void SetupSelfDestruction(not_null<Ui::VerticalLayout*> container) {
AddDivider(container); AddDivider(container);
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_destroy_title); AddSubsectionTitle(container, tr::lng_settings_destroy_title());
Auth().api().reloadSelfDestruct(); Auth().api().reloadSelfDestruct();
const auto label = [] { const auto label = [] {
@ -424,7 +425,7 @@ void SetupSelfDestruction(not_null<Ui::VerticalLayout*> container) {
AddButtonWithLabel( AddButtonWithLabel(
container, container,
lng_settings_destroy_if, tr::lng_settings_destroy_if(),
label(), label(),
st::settingsButton st::settingsButton
)->addClickHandler([] { )->addClickHandler([] {
@ -436,19 +437,17 @@ void SetupSelfDestruction(not_null<Ui::VerticalLayout*> container) {
void SetupSessionsList(not_null<Ui::VerticalLayout*> container) { void SetupSessionsList(not_null<Ui::VerticalLayout*> container) {
AddSkip(container); AddSkip(container);
AddSubsectionTitle(container, lng_settings_sessions_title); AddSubsectionTitle(container, tr::lng_settings_sessions_title());
AddButton( AddButton(
container, container,
lng_settings_show_sessions, tr::lng_settings_show_sessions(),
st::settingsButton st::settingsButton
)->addClickHandler([] { )->addClickHandler([] {
Ui::show(Box<SessionsBox>()); Ui::show(Box<SessionsBox>());
}); });
AddSkip(container, st::settingsPrivacySecurityPadding); AddSkip(container, st::settingsPrivacySecurityPadding);
AddDividerText( AddDividerText(container, tr::lng_settings_sessions_about());
container,
Lang::Viewer(lng_settings_sessions_about));
} }
} // namespace } // namespace
@ -541,13 +540,13 @@ object_ptr<BoxContent> CloudPasswordAppOutdatedBox() {
void AddPrivacyButton( void AddPrivacyButton(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
LangKey label, rpl::producer<QString> label,
Privacy::Key key, Privacy::Key key,
Fn<std::unique_ptr<EditPrivacyController>()> controller) { Fn<std::unique_ptr<EditPrivacyController>()> controller) {
const auto shower = Ui::CreateChild<rpl::lifetime>(container.get()); const auto shower = Ui::CreateChild<rpl::lifetime>(container.get());
AddButtonWithLabel( AddButtonWithLabel(
container, container,
label, std::move(label),
PrivacyString(key), PrivacyString(key),
st::settingsButton st::settingsButton
)->addClickHandler([=] { )->addClickHandler([=] {

View File

@ -23,7 +23,7 @@ object_ptr<BoxContent> CloudPasswordAppOutdatedBox();
void AddPrivacyButton( void AddPrivacyButton(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
LangKey label, rpl::producer<QString> label,
ApiWrap::Privacy::Key key, ApiWrap::Privacy::Key key,
Fn<std::unique_ptr<EditPrivacyController>()> controller); Fn<std::unique_ptr<EditPrivacyController>()> controller);

View File

@ -46,7 +46,7 @@ Bar::Bar(not_null<QWidget*> parent, QDate date)
: _date(date) : _date(date)
, _title( , _title(
this, this,
Lang::Viewer(lng_outdated_title) | Ui::Text::ToUpper(), tr::lng_outdated_title() | Ui::Text::ToUpper(),
st::windowOutdatedTitle) st::windowOutdatedTitle)
, _details(this, , _details(this,
QString(), QString(),