/* 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 */ #include "chat_helpers/tabbed_section.h" #include "styles/style_chat_helpers.h" #include "chat_helpers/tabbed_selector.h" namespace ChatHelpers { TabbedMemento::TabbedMemento( object_ptr selector, base::lambda)> returnMethod) : _selector(std::move(selector)) , _returnMethod(std::move(returnMethod)) { } object_ptr TabbedMemento::createWidget( QWidget *parent, not_null controller, Window::Column column, const QRect &geometry) { auto result = object_ptr( parent, controller, std::move(_selector), std::move(_returnMethod)); result->setGeometry(geometry); return std::move(result); } TabbedMemento::~TabbedMemento() { if (_returnMethod && _selector) { _returnMethod(std::move(_selector)); } } TabbedSection::TabbedSection( QWidget *parent, not_null controller) : TabbedSection( parent, controller, object_ptr(this, controller), base::lambda)>()) { } TabbedSection::TabbedSection( QWidget *parent, not_null controller, object_ptr selector, base::lambda)> returnMethod) : Window::SectionWidget(parent, controller) , _selector(std::move(selector)) , _returnMethod(std::move(returnMethod)) { _selector->setParent(this); _selector->setRoundRadius(0); _selector->setGeometry(rect()); _selector->showStarted(); _selector->show(); connect(_selector, &TabbedSelector::cancelled, this, [this] { if (_cancelledCallback) { _cancelledCallback(); } }); _selector->setAfterShownCallback(base::lambda()); _selector->setBeforeHidingCallback(base::lambda()); setAttribute(Qt::WA_OpaquePaintEvent, true); } void TabbedSection::beforeHiding() { _selector->beforeHiding(); } void TabbedSection::afterShown() { _selector->afterShown(); } void TabbedSection::resizeEvent(QResizeEvent *e) { _selector->setGeometry(rect()); } object_ptr TabbedSection::takeSelector() { _selector->beforeHiding(); return std::move(_selector); } QPointer TabbedSection::getSelector() const { return _selector.data(); } bool TabbedSection::showInternal( not_null memento, const Window::SectionShow ¶ms) { return false; } bool TabbedSection::wheelEventFromFloatPlayer(QEvent *e) { return _selector->wheelEventFromFloatPlayer(e); } QRect TabbedSection::rectForFloatPlayer() const { return _selector->rectForFloatPlayer(); } TabbedSection::~TabbedSection() { beforeHiding(); if (_returnMethod) { _returnMethod(takeSelector()); } } } // namespace ChatHelpers