/* This file is part of Telegram Desktop, the official desktop version of Telegram messaging app, see https://telegram.org Telegram Desktop is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. In addition, as a special exception, the copyright holders give permission to link the code of portions of this program with the OpenSSL library. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org */ #pragma once #include "ui/rp_widget.h" #include "info/info_wrap_widget.h" #include "window/section_memento.h" namespace Storage { enum class SharedMediaType : char; } // namespace Storage namespace Ui { class ScrollArea; struct ScrollToRequest; } // namespace Ui namespace Info { class ContentMemento; class WrapWidget; class Memento final : public Window::SectionMemento { public: Memento(PeerId peerId); Memento(PeerId peerId, Section section); Memento(std::vector> stack); object_ptr createWidget( QWidget *parent, not_null controller, Window::Column column, const QRect &geometry) override; object_ptr createLayer( not_null controller, const QRect &geometry) override; int stackSize() const { return int(_stack.size()); } std::vector> takeStack(); not_null content() { Expects(!_stack.empty()); return _stack.back().get(); } ~Memento(); private: static std::vector> DefaultStack( PeerId peerId, Section section); static std::unique_ptr Default( PeerId peerId, Section section); std::vector> _stack; }; class MoveMemento final : public Window::SectionMemento { public: MoveMemento(object_ptr content); object_ptr createWidget( QWidget *parent, not_null controller, Window::Column column, const QRect &geometry) override; object_ptr createLayer( not_null controller, const QRect &geometry) override; bool instant() const override { return true; } object_ptr takeContent( QWidget *parent, Wrap wrap); private: object_ptr _content; }; } // namespace Info