2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-10-15 14:26:04 +00:00

Moved out template classes for local passcode from header.

This commit is contained in:
23rd
2022-05-05 20:27:16 +03:00
parent c47140c62d
commit 77d50d9177
3 changed files with 146 additions and 132 deletions

View File

@@ -7,137 +7,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "settings/settings_common.h"
#include "settings/settings_type.h"
namespace Settings {
namespace details {
class LocalPasscodeEnter : public AbstractSection {
public:
enum class EnterType {
Create,
Check,
Change,
};
LocalPasscodeEnter(
QWidget *parent,
not_null<Window::SessionController*> controller);
~LocalPasscodeEnter();
void showFinished() override;
void setInnerFocus() override;
[[nodiscard]] rpl::producer<Type> sectionShowOther() override;
[[nodiscard]] rpl::producer<> sectionShowBack() override;
[[nodiscard]] rpl::producer<QString> title() override;
protected:
void setupContent();
[[nodiscard]] virtual EnterType enterType() const = 0;
private:
const not_null<Window::SessionController*> _controller;
rpl::event_stream<> _showFinished;
rpl::event_stream<> _setInnerFocus;
rpl::event_stream<Type> _showOther;
rpl::event_stream<> _showBack;
};
} // namespace details
class LocalPasscodeCreate;
class LocalPasscodeCheck;
class LocalPasscodeChange;
template <typename SectionType>
class TypedLocalPasscodeEnter : public details::LocalPasscodeEnter {
public:
TypedLocalPasscodeEnter(
QWidget *parent,
not_null<Window::SessionController*> controller)
: details::LocalPasscodeEnter(parent, controller) {
setupContent();
}
[[nodiscard]] static Type Id() {
return &SectionMetaImplementation<SectionType>::Meta;
}
[[nodiscard]] Type id() const final override {
return Id();
}
protected:
[[nodiscard]] EnterType enterType() const final override {
if constexpr (std::is_same_v<SectionType, LocalPasscodeCreate>) {
return EnterType::Create;
}
if constexpr (std::is_same_v<SectionType, LocalPasscodeCheck>) {
return EnterType::Check;
}
if constexpr (std::is_same_v<SectionType, LocalPasscodeChange>) {
return EnterType::Change;
}
return EnterType::Create;
}
};
class LocalPasscodeCreate final
: public TypedLocalPasscodeEnter<LocalPasscodeCreate> {
public:
using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter;
};
class LocalPasscodeCheck final
: public TypedLocalPasscodeEnter<LocalPasscodeCheck> {
public:
using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter;
};
class LocalPasscodeChange final
: public TypedLocalPasscodeEnter<LocalPasscodeChange> {
public:
using TypedLocalPasscodeEnter::TypedLocalPasscodeEnter;
};
class LocalPasscodeManage : public Section<LocalPasscodeManage> {
public:
LocalPasscodeManage(
QWidget *parent,
not_null<Window::SessionController*> controller);
~LocalPasscodeManage();
[[nodiscard]] rpl::producer<QString> title() override;
void showFinished() override;
[[nodiscard]] rpl::producer<Type> sectionShowOther() override;
[[nodiscard]] rpl::producer<> sectionShowBack() override;
[[nodiscard]] rpl::producer<std::vector<Type>> removeFromStack() override;
[[nodiscard]] QPointer<Ui::RpWidget> createPinnedToBottom(
not_null<Ui::RpWidget*> parent) override;
private:
void setupContent();
const not_null<Window::SessionController*> _controller;
rpl::variable<bool> _isBottomFillerShown;
rpl::event_stream<> _showFinished;
rpl::event_stream<Type> _showOther;
rpl::event_stream<> _showBack;
};
Type LocalPasscodeCreateId();
Type LocalPasscodeCheckId();
Type LocalPasscodeManageId();
} // namespace Settings