99 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// This file is part of Desktop App Toolkit,
 | 
						|
// a set of libraries for developing nice desktop applications.
 | 
						|
//
 | 
						|
// For license and copyright information please follow this link:
 | 
						|
// https://github.com/desktop-app/legal/blob/master/LEGAL
 | 
						|
//
 | 
						|
#include "ui/toast/toast.h"
 | 
						|
 | 
						|
#include "ui/toast/toast_manager.h"
 | 
						|
#include "ui/toast/toast_widget.h"
 | 
						|
#include "styles/style_widgets.h"
 | 
						|
 | 
						|
namespace Ui {
 | 
						|
namespace Toast {
 | 
						|
namespace {
 | 
						|
 | 
						|
QPointer<QWidget> DefaultParent;
 | 
						|
 | 
						|
} // namespace
 | 
						|
 | 
						|
Instance::Instance(
 | 
						|
	const Config &config,
 | 
						|
	not_null<QWidget*> widgetParent,
 | 
						|
	const Private &)
 | 
						|
: _st(config.st)
 | 
						|
, _hideAt(crl::now() + config.durationMs)
 | 
						|
, _sliding(config.slideSide != RectPart::None)
 | 
						|
, _widget(std::make_unique<internal::Widget>(widgetParent, config)) {
 | 
						|
	_shownAnimation.start(
 | 
						|
		[=] { shownAnimationCallback(); },
 | 
						|
		0.,
 | 
						|
		1.,
 | 
						|
		_sliding ? _st->durationSlide : _st->durationFadeIn);
 | 
						|
}
 | 
						|
 | 
						|
void SetDefaultParent(not_null<QWidget*> parent) {
 | 
						|
	DefaultParent = parent;
 | 
						|
}
 | 
						|
 | 
						|
base::weak_ptr<Instance> Show(
 | 
						|
		not_null<QWidget*> parent,
 | 
						|
		const Config &config) {
 | 
						|
	const auto manager = internal::Manager::instance(parent);
 | 
						|
	return manager->addToast(std::make_unique<Instance>(
 | 
						|
		config,
 | 
						|
		parent,
 | 
						|
		Instance::Private()));
 | 
						|
}
 | 
						|
 | 
						|
base::weak_ptr<Instance> Show(const Config &config) {
 | 
						|
	if (const auto parent = DefaultParent.data()) {
 | 
						|
		return Show(parent, config);
 | 
						|
	}
 | 
						|
	return nullptr;
 | 
						|
}
 | 
						|
 | 
						|
base::weak_ptr<Instance> Show(
 | 
						|
		not_null<QWidget*> parent,
 | 
						|
		const QString &text) {
 | 
						|
	return Show(parent, Config{ .text = { text }, .st = &st::defaultToast });
 | 
						|
}
 | 
						|
 | 
						|
base::weak_ptr<Instance> Show(const QString &text) {
 | 
						|
	return Show(Config{ .text = { text }, .st = &st::defaultToast });
 | 
						|
}
 | 
						|
 | 
						|
void Instance::shownAnimationCallback() {
 | 
						|
	_widget->setShownLevel(_shownAnimation.value(_hiding ? 0. : 1.));
 | 
						|
	if (!_shownAnimation.animating()) {
 | 
						|
		if (_hiding) {
 | 
						|
			hide();
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void Instance::hideAnimated() {
 | 
						|
	_hiding = true;
 | 
						|
	_shownAnimation.start(
 | 
						|
		[=] { shownAnimationCallback(); },
 | 
						|
		1.,
 | 
						|
		0.,
 | 
						|
		_sliding ? _st->durationSlide : _st->durationFadeOut);
 | 
						|
}
 | 
						|
 | 
						|
void Instance::hide() {
 | 
						|
	_widget->hide();
 | 
						|
	_widget->deleteLater();
 | 
						|
}
 | 
						|
 | 
						|
void Instance::setInputUsed(bool used) {
 | 
						|
	_widget->setInputUsed(used);
 | 
						|
}
 | 
						|
 | 
						|
not_null<RpWidget*> Instance::widget() const {
 | 
						|
	return _widget.get();
 | 
						|
}
 | 
						|
 | 
						|
} // namespace Toast
 | 
						|
} // namespace Ui
 |