diff --git a/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp b/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp index 39d96dd39..a7391e7c2 100644 --- a/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/edit_peer_permissions_box.cpp @@ -636,103 +636,6 @@ template < }; } -template < - typename Flags, - typename DisabledMessagePairs, - typename FlagLabelPairs> -[[nodiscard]] EditFlagsControl CreateEditAdminFlags( - QWidget *parent, - rpl::producer header, - Flags checked, - const DisabledMessagePairs &disabledMessagePairs, - const FlagLabelPairs &flagLabelPairs) { - auto widget = object_ptr(parent); - const auto container = widget.data(); - - const auto checkboxes = container->lifetime( - ).make_state>>(); - - const auto value = [=] { - auto result = Flags(0); - for (const auto &[flags, checkbox] : *checkboxes) { - if (checkbox->checked()) { - result |= flags; - } else { - result &= ~flags; - } - } - return result; - }; - - const auto changes = container->lifetime( - ).make_state>(); - - const auto applyDependencies = [=](Ui::AbstractCheckView *view) { - static const auto dependencies = Dependencies(Flags()); - ApplyDependencies(*checkboxes, dependencies, view); - }; - - container->add( - object_ptr( - container, - std::move(header), - st::rightsHeaderLabel), - st::rightsHeaderMargin); - - auto addCheckbox = [&](Flags flags, const QString &text) { - const auto lockedIt = ranges::find_if( - disabledMessagePairs, - [&](const auto &pair) { return (pair.first & flags) != 0; }); - const auto locked = (lockedIt != end(disabledMessagePairs)) - ? std::make_optional(lockedIt->second) - : std::nullopt; - const auto toggled = ((checked & flags) != 0); - auto toggle = std::make_unique( - st::rightsToggle, - toggled); - toggle->setLocked(locked.has_value()); - const auto control = container->add( - object_ptr( - container, - text, - st::rightsCheckbox, - std::move(toggle)), - st::rightsToggleMargin); - control->checkedChanges( - ) | rpl::start_with_next([=](bool checked) { - if (locked.has_value()) { - if (checked != toggled) { - Ui::ShowMultilineToast({ - .parentOverride = parent, - .text = { *locked }, - }); - control->setChecked(toggled); - } - } else { - InvokeQueued(control, [=] { - applyDependencies(control->checkView()); - changes->fire({}); - }); - } - }, control->lifetime()); - checkboxes->emplace(flags, control->checkView()); - }; - for (const auto &[flags, label] : flagLabelPairs) { - addCheckbox(flags, label); - } - - applyDependencies(nullptr); - for (const auto &[flags, checkbox] : *checkboxes) { - checkbox->finishAnimating(); - } - - return { - std::move(widget), - value, - changes->events() | rpl::map(value) - }; -} - void AddSlowmodeLabels( not_null container) { const auto labels = container->add( @@ -1164,12 +1067,19 @@ EditFlagsControl CreateEditAdminRights( ChatAdminRights rights, std::map disabledMessages, Data::AdminRightsSetOptions options) { - return CreateEditAdminFlags( - parent, + using String = std::optional>; + using Labels = std::pair>; + + auto widget = object_ptr(parent); + auto result = CreateEditFlags( + widget.data(), header, rights, disabledMessages, - AdminRightLabels(options)); + std::vector{ { std::nullopt, AdminRightLabels(options) } }); + result.widget = std::move(widget); + + return result; } ChatAdminRights DisabledByDefaultRestrictions(not_null peer) {