tdesktop/Telegram/SourceFiles/boxes/peers/edit_participant_box.h

174 lines
4.0 KiB
C
Raw Normal View History

/*
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
*/
#pragma once
#include "boxes/abstract_box.h"
2019-01-08 10:54:18 +00:00
#include "base/unique_qptr.h"
2021-03-12 12:48:00 +00:00
namespace MTP {
class Error;
} // namespace MTP
2019-11-13 08:31:12 +00:00
namespace Ui {
class FlatLabel;
class LinkButton;
class Checkbox;
class Radiobutton;
class RadiobuttonGroup;
class CalendarBox;
template <typename Widget>
class SlideWrap;
} // namespace Ui
2019-06-14 14:04:30 +00:00
namespace Core {
struct CloudPasswordResult;
} // namespace Core
class PasscodeBox;
2019-09-18 11:19:05 +00:00
class EditParticipantBox : public Ui::BoxContent {
public:
EditParticipantBox(
QWidget*,
not_null<PeerData*> peer,
not_null<UserData*> user,
bool hasAdminRights);
protected:
void prepare() override;
2019-07-19 14:11:28 +00:00
[[nodiscard]] not_null<UserData*> user() const {
return _user;
}
2019-07-19 14:11:28 +00:00
[[nodiscard]] not_null<PeerData*> peer() const {
return _peer;
}
2019-07-19 14:11:28 +00:00
[[nodiscard]] bool amCreator() const;
template <typename Widget>
2019-01-08 10:54:18 +00:00
Widget *addControl(object_ptr<Widget> widget, QMargins margin = {});
bool hasAdminRights() const {
return _hasAdminRights;
}
private:
not_null<PeerData*> _peer;
not_null<UserData*> _user;
bool _hasAdminRights = false;
class Inner;
QPointer<Inner> _inner;
};
class EditAdminBox : public EditParticipantBox {
public:
EditAdminBox(
QWidget*,
not_null<PeerData*> peer,
not_null<UserData*> user,
const MTPChatAdminRights &rights,
const QString &rank);
void setSaveCallback(
Fn<void(
MTPChatAdminRights,
MTPChatAdminRights,
const QString &rank)> callback) {
_saveCallback = std::move(callback);
}
protected:
void prepare() override;
private:
2019-01-03 14:39:19 +00:00
using Flag = MTPDchatAdminRights::Flag;
using Flags = MTPDchatAdminRights::Flags;
2021-02-12 10:40:55 +00:00
[[nodiscard]] MTPChatAdminRights defaultRights() const;
2019-07-19 14:11:28 +00:00
not_null<Ui::InputField*> addRankInput();
void transferOwnership();
2019-06-14 14:04:30 +00:00
void transferOwnershipChecked();
2021-03-12 12:48:00 +00:00
bool handleTransferPasswordError(const MTP::Error &error);
2019-06-14 14:04:30 +00:00
void requestTransferPassword(not_null<ChannelData*> channel);
void sendTransferRequestFrom(
QPointer<PasscodeBox> box,
not_null<ChannelData*> channel,
const Core::CloudPasswordResult &result);
bool canSave() const {
return _saveCallback != nullptr;
}
void refreshAboutAddAdminsText(bool canAddAdmins);
bool canTransferOwnership() const;
not_null<Ui::SlideWrap<Ui::RpWidget>*> setupTransferButton(bool isGroup);
2019-01-03 14:39:19 +00:00
const MTPChatAdminRights _oldRights;
const QString _oldRank;
Fn<void(
MTPChatAdminRights,
MTPChatAdminRights,
const QString &rank)> _saveCallback;
QPointer<Ui::FlatLabel> _aboutAddAdmins;
mtpRequestId _checkTransferRequestId = 0;
mtpRequestId _transferRequestId = 0;
};
// Restricted box works with flags in the opposite way.
// If some flag is set in the rights then the checkbox is unchecked.
class EditRestrictedBox : public EditParticipantBox {
public:
EditRestrictedBox(
QWidget*,
not_null<PeerData*> peer,
not_null<UserData*> user,
bool hasAdminRights,
const MTPChatBannedRights &rights);
void setSaveCallback(
Fn<void(MTPChatBannedRights, MTPChatBannedRights)> callback) {
_saveCallback = std::move(callback);
}
protected:
void prepare() override;
private:
2019-01-03 14:39:19 +00:00
using Flag = MTPDchatBannedRights::Flag;
using Flags = MTPDchatBannedRights::Flags;
2021-02-12 10:40:55 +00:00
[[nodiscard]] MTPChatBannedRights defaultRights() const;
bool canSave() const {
return !!_saveCallback;
}
void showRestrictUntil();
void setRestrictUntil(TimeId until);
bool isUntilForever() const;
void createUntilGroup();
void createUntilVariants();
TimeId getRealUntilValue() const;
2019-01-03 14:39:19 +00:00
const MTPChatBannedRights _oldRights;
TimeId _until = 0;
2019-01-03 14:39:19 +00:00
Fn<void(MTPChatBannedRights, MTPChatBannedRights)> _saveCallback;
std::shared_ptr<Ui::RadiobuttonGroup> _untilGroup;
2019-01-08 10:54:18 +00:00
std::vector<base::unique_qptr<Ui::Radiobutton>> _untilVariants;
QPointer<Ui::CalendarBox> _restrictUntilBox;
static constexpr auto kUntilOneDay = -1;
static constexpr auto kUntilOneWeek = -2;
static constexpr auto kUntilCustom = -3;
};