tdesktop/Telegram/SourceFiles/boxes/peers/edit_peer_history_visibilit...

134 lines
3.7 KiB
C++
Raw Normal View History

2019-03-15 21:26:01 +00:00
/*
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"
2019-09-18 11:19:05 +00:00
#include "styles/style_layers.h"
#include "styles/style_info.h"
2019-03-15 21:26:01 +00:00
namespace {
2019-03-19 15:45:46 +00:00
void AddRadioButton(
not_null<Ui::VerticalLayout*> container,
HistoryVisibility value,
2019-06-18 12:16:43 +00:00
const QString &groupText,
rpl::producer<QString> groupAbout,
2019-03-19 15:45:46 +00:00
std::shared_ptr<Ui::RadioenumGroup<HistoryVisibility>> historyVisibility) {
2019-03-15 21:26:01 +00:00
container->add(object_ptr<Ui::FixedHeightWidget>(
container,
st::editPeerHistoryVisibilityTopSkip));
container->add(object_ptr<Ui::Radioenum<HistoryVisibility>>(
container,
historyVisibility,
value,
2019-06-18 12:16:43 +00:00
groupText,
2019-03-15 21:26:01 +00:00
st::defaultBoxCheckbox));
container->add(object_ptr<Ui::PaddingWrap<Ui::FlatLabel>>(
container,
object_ptr<Ui::FlatLabel>(
container,
2019-06-18 12:16:43 +00:00
std::move(groupAbout),
2019-03-15 21:26:01 +00:00
st::editPeerPrivacyLabel),
st::editPeerPreHistoryLabelMargins));
}
2019-03-15 21:26:01 +00:00
void FillContent(
2019-03-19 15:45:46 +00:00
not_null<Ui::VerticalLayout*> parent,
not_null<PeerData*> peer,
std::shared_ptr<Ui::RadioenumGroup<HistoryVisibility>> historyVisibility,
HistoryVisibility savedValue) {
2019-03-15 21:26:01 +00:00
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;
}
const auto channel = peer->asChannel();
historyVisibility->setValue(savedValue);
2019-03-19 15:45:46 +00:00
const auto result = parent->add(
object_ptr<Ui::SlideWrap<Ui::VerticalLayout>>(
parent,
object_ptr<Ui::VerticalLayout>(parent),
st::editPeerHistoryVisibilityMargins));
const auto container = result->entity();
2019-03-19 15:45:46 +00:00
Assert(historyVisibility != nullptr);
2019-03-15 21:26:01 +00:00
2019-03-19 15:45:46 +00:00
AddRadioButton(
2019-03-15 21:26:01 +00:00
container,
HistoryVisibility::Visible,
2019-06-18 12:16:43 +00:00
tr::lng_manage_history_visibility_shown(tr::now),
tr::lng_manage_history_visibility_shown_about(),
historyVisibility);
2019-03-19 15:45:46 +00:00
AddRadioButton(
2019-03-15 21:26:01 +00:00
container,
HistoryVisibility::Hidden,
2019-06-18 12:16:43 +00:00
tr::lng_manage_history_visibility_hidden(tr::now),
2019-03-15 21:26:01 +00:00
(peer->isChat()
2019-06-18 12:16:43 +00:00
? tr::lng_manage_history_visibility_hidden_legacy
: tr::lng_manage_history_visibility_hidden_about)(),
historyVisibility);
2019-03-15 21:26:01 +00:00
}
} // namespace
EditPeerHistoryVisibilityBox::EditPeerHistoryVisibilityBox(
2019-03-19 15:45:46 +00:00
QWidget*,
not_null<PeerData*> peer,
FnMut<void(HistoryVisibility)> savedCallback,
HistoryVisibility historyVisibilitySavedValue)
2019-03-15 21:26:01 +00:00
: _peer(peer)
, _savedCallback(std::move(savedCallback))
, _historyVisibilitySavedValue(historyVisibilitySavedValue)
, _historyVisibility(
std::make_shared<Ui::RadioenumGroup<HistoryVisibility>>(
_historyVisibilitySavedValue)) {
2019-03-15 21:26:01 +00:00
}
void EditPeerHistoryVisibilityBox::prepare() {
_peer->updateFull();
setTitle(tr::lng_manage_history_visibility_title());
addButton(tr::lng_settings_save(), [=] {
2019-03-15 21:26:01 +00:00
auto local = std::move(_savedCallback);
local(_historyVisibility->value());
2019-03-15 21:26:01 +00:00
closeBox();
});
addButton(tr::lng_cancel(), [=] { closeBox(); });
2019-03-15 21:26:01 +00:00
setupContent();
}
void EditPeerHistoryVisibilityBox::setupContent() {
const auto content = Ui::CreateChild<Ui::VerticalLayout>(this);
2019-03-19 15:45:46 +00:00
FillContent(
content,
_peer,
_historyVisibility,
_historyVisibilitySavedValue);
2019-03-15 21:26:01 +00:00
setDimensionsToContent(st::boxWidth, content);
}