/* 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 "mainwindow.h" #include "window/window_adaptive.h" #include "ui/layers/layer_widget.h" namespace Main { class Account; } // namespace Main namespace Media::View { struct OpenRequest; } // namespace Media::View namespace Window { class Controller final : public base::has_weak_ptr { public: Controller(); ~Controller(); Controller(const Controller &other) = delete; Controller &operator=(const Controller &other) = delete; void showAccount(not_null account); [[nodiscard]] not_null<::MainWindow*> widget() { return &_widget; } [[nodiscard]] Main::Account &account() const { Expects(_account != nullptr); return *_account; } [[nodiscard]] SessionController *sessionController() const { return _sessionController.get(); } [[nodiscard]] bool locked() const; [[nodiscard]] Adaptive &adaptive() const; void finishFirstShow(); void setupPasscodeLock(); void clearPasscodeLock(); void setupIntro(); void setupMain(); void showLogoutConfirmation(); void showSettings(); [[nodiscard]] int verticalShadowTop() const; template QPointer show( object_ptr content, Ui::LayerOptions options = Ui::LayerOption::KeepOther, anim::type animated = anim::type::normal) { const auto result = QPointer(content.data()); showBox(std::move(content), options, animated); return result; } void showToast(const QString &text); void showLayer( std::unique_ptr &&layer, Ui::LayerOptions options, anim::type animated = anim::type::normal); void showRightColumn(object_ptr widget); void sideBarChanged(); void activate(); void reActivate(); void updateIsActiveFocus(); void updateIsActiveBlur(); void updateIsActive(); void minimize(); void close(); void preventOrInvoke(Fn &&callback); void invokeForSessionController( not_null account, Fn)> &&callback); void openInMediaView(Media::View::OpenRequest &&request); [[nodiscard]] auto openInMediaViewRequests() const -> rpl::producer; QPoint getPointForCallPanelCenter() const; rpl::lifetime &lifetime(); private: void showBox( object_ptr content, Ui::LayerOptions options, anim::type animated); void checkThemeEditor(); void checkLockByTerms(); void showTermsDecline(); void showTermsDelete(); Main::Account *_account = nullptr; ::MainWindow _widget; const std::unique_ptr _adaptive; std::unique_ptr _sessionController; base::Timer _isActiveTimer; QPointer _termsBox; rpl::event_stream _openInMediaViewRequests; rpl::lifetime _accountLifetime; rpl::lifetime _lifetime; }; } // namespace Window