50 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.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
 | |
| //
 | |
| #pragma once
 | |
| 
 | |
| #include "ui/toast/toast.h"
 | |
| #include "base/timer.h"
 | |
| 
 | |
| namespace Ui {
 | |
| namespace Toast {
 | |
| namespace internal {
 | |
| 
 | |
| class Widget;
 | |
| class Manager final : public QObject {
 | |
| 	struct CreateTag {
 | |
| 	};
 | |
| 
 | |
| public:
 | |
| 	Manager(not_null<QWidget*> parent, const CreateTag &);
 | |
| 	Manager(const Manager &other) = delete;
 | |
| 	Manager &operator=(const Manager &other) = delete;
 | |
| 	~Manager();
 | |
| 
 | |
| 	static not_null<Manager*> instance(not_null<QWidget*> parent);
 | |
| 
 | |
| 	base::weak_ptr<Instance> addToast(std::unique_ptr<Instance> &&toast);
 | |
| 
 | |
| protected:
 | |
| 	bool eventFilter(QObject *o, QEvent *e);
 | |
| 
 | |
| private:
 | |
| 	void toastWidgetDestroyed(QObject *widget);
 | |
| 	void startNextHideTimer();
 | |
| 	void hideByTimer();
 | |
| 
 | |
| 	base::Timer _hideTimer;
 | |
| 
 | |
| 	base::flat_multi_map<crl::time, not_null<Instance*>> _toastByHideTime;
 | |
| 	base::flat_map<not_null<Widget*>, not_null<Instance*>> _toastByWidget;
 | |
| 	std::vector<std::unique_ptr<Instance>> _toasts;
 | |
| 	std::vector<QPointer<QWidget>> _toastParents;
 | |
| 
 | |
| };
 | |
| 
 | |
| } // namespace internal
 | |
| } // namespace Toast
 | |
| } // namespace Ui
 | 
