/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "boxes/peers/edit_peer_history_visibility_box.h" #include "boxes/peers/edit_peer_permissions_box.h" #include "boxes/peers/edit_participants_box.h" #include "data/data_channel.h" #include "data/data_chat.h" #include "data/data_peer.h" #include "lang/lang_keys.h" #include "ui/widgets/checkbox.h" #include "ui/widgets/labels.h" #include "ui/wrap/padding_wrap.h" #include "ui/wrap/slide_wrap.h" #include "ui/wrap/vertical_layout.h" #include "styles/style_layers.h" #include "styles/style_info.h" namespace { void AddRadioButton( not_null container, HistoryVisibility value, const QString &groupText, rpl::producer groupAbout, std::shared_ptr> historyVisibility) { container->add(object_ptr( container, st::editPeerHistoryVisibilityTopSkip)); container->add(object_ptr>( container, historyVisibility, value, groupText, st::defaultBoxCheckbox)); container->add(object_ptr>( container, object_ptr( container, std::move(groupAbout), st::editPeerPrivacyLabel), st::editPeerPreHistoryLabelMargins)); } void FillContent( not_null parent, not_null peer, std::shared_ptr> historyVisibility, HistoryVisibility savedValue) { const auto canEdit = [&] { if (const auto chat = peer->asChat()) { return chat->canEditPreHistoryHidden(); } else if (const auto channel = peer->asChannel()) { return channel->canEditPreHistoryHidden(); } Unexpected("User in HistoryVisibilityEdit."); }(); if (!canEdit) { return; } historyVisibility->setValue(savedValue); const auto result = parent->add( object_ptr>( parent, object_ptr(parent), st::editPeerHistoryVisibilityMargins)); const auto container = result->entity(); Assert(historyVisibility != nullptr); AddRadioButton( container, HistoryVisibility::Visible, tr::lng_manage_history_visibility_shown(tr::now), tr::lng_manage_history_visibility_shown_about(), historyVisibility); AddRadioButton( container, HistoryVisibility::Hidden, tr::lng_manage_history_visibility_hidden(tr::now), (peer->isChat() ? tr::lng_manage_history_visibility_hidden_legacy : tr::lng_manage_history_visibility_hidden_about)(), historyVisibility); } } // namespace EditPeerHistoryVisibilityBox::EditPeerHistoryVisibilityBox( QWidget*, not_null peer, FnMut savedCallback, HistoryVisibility historyVisibilitySavedValue) : _peer(peer) , _savedCallback(std::move(savedCallback)) , _historyVisibilitySavedValue(historyVisibilitySavedValue) , _historyVisibility( std::make_shared>( _historyVisibilitySavedValue)) { } void EditPeerHistoryVisibilityBox::prepare() { _peer->updateFull(); setTitle(tr::lng_manage_history_visibility_title()); addButton(tr::lng_settings_save(), [=] { auto local = std::move(_savedCallback); local(_historyVisibility->value()); closeBox(); }); addButton(tr::lng_cancel(), [=] { closeBox(); }); setupContent(); } void EditPeerHistoryVisibilityBox::setupContent() { const auto content = Ui::CreateChild(this); FillContent( content, _peer, _historyVisibility, _historyVisibilitySavedValue); setDimensionsToContent(st::boxWidth, content); }