6#include <QtCore/QTimer>
7#include <QtWidgets/QGraphicsOpacityEffect>
8#include <QtWidgets/QWidget>
9#include <QtCore/QParallelAnimationGroup>
10#include <QtCore/QPropertyAnimation>
11#include <QtCore/QVariantAnimation>
14#include <icomp/CComponentBase.h>
15#include <ilog/CMessageContainer.h>
16#include <ilog/IMessageConsumer.h>
19#include <imtbase/TModelUpdateBinder.h>
20#include <imtgui/IClientAreaProvider.h>
21#include <imtgui/IPopupController.h>
22#include <imtgui/IPopupEventHandler.h>
23#include <imtgui/IPopupWidget.h>
30class CPopupController:
32 virtual public IPopupController
36 typedef icomp::CComponentBase BaseClass;
40 void SetAnchorCorner(Qt::Corner corner);
41 void SetParentWidget(QWidget* parentPtr);
42 void SetScreen(QScreen* screenPtr);
43 void SetRatioX(
double ratio);
44 void SetRatioY(
double ratio);
45 void SetSpacing(
double spacing);
46 void SetDefaultTimeOut(
int msec);
47 void SetPopupWidgetFactory(IPopupWidgetFactory* factoryPtr);
48 void SetExclusiveMessageSources(
const QStringList& exclusiveMessageSources);
50 void SetEnabled(
bool enable);
53 virtual QByteArray AddPopup(
const MessagePtr& messagePtr,
int timeout = -1,
bool isClosingOnMouseClickAllowed =
true, QWidget* contentWidgetPtr =
nullptr)
override;
54 virtual void ClosePopup(
const QByteArray& popupId)
override;
55 virtual void RegisterEventHandler(IPopupEventHandler* handlerPtr)
override;
56 virtual void UnRegisterEventHandler(IPopupEventHandler* handlerPtr)
override;
59 virtual bool IsMessageSupported(
60 int messageCategory = -1,
62 const istd::IInformationProvider* messagePtr = NULL)
const override;
63 virtual void AddMessage(
const MessagePtr& messagePtr)
override;
66 void EmitAddMessage(
const QByteArray&
id,
const MessagePtr& messagePtr);
69 const MessagePtr& messagePtr,
71 bool isClosingOnMouseClickAllowed,
72 QWidget* contentWidgetPtr);
73 void EmitClosePopup(
const QByteArray& popupId);
76 void OnAddMessage(
const QByteArray&
id,
const MessagePtr& messagePtr);
79 const MessagePtr& messagePtr,
81 bool isClosingOnMouseClickAllowed,
82 QWidget* contentWidgetPtr);
83 void OnClosePopup(
const QByteArray& popupId);
85 void OnScreenGeometryChanged(
const QRect& rect);
87 void OnHoverEnter(QEvent* event);
88 void OnHoverLeave(QEvent* event);
89 void OnCloseRequest();
90 void OnPopupTimeout();
91 void OnFadeFinished();
98 const MessagePtr& messagePtr,
100 bool isClosingOnMouseClickAllowed,
101 QWidget* contentWidgetPtr);
102 void RemovePopupItem(
int index);
103 int GetVisibleItemIndex(
const QByteArray&
id);
104 int GetVisibleItemIndex(
const QObject* memberPtr);
105 int GetInvisibleItemIndex(
const QByteArray&
id);
107 PopupItem* GetPopupItem(
const QByteArray& popupId);
108 PopupItem* GetPopupItem(
const QString& source);
110 void ValidateVisibleItems();
111 void ArrangeVisibleItems();
115 virtual bool eventFilter(QObject* watched, QEvent* event)
override;
124 fadeAnimation.setTargetObject(&effect);
125 fadeAnimation.setPropertyName(
"opacity");
126 fadeAnimation.setDuration(500);
127 fadeAnimation.setStartValue(0);
128 fadeAnimation.setEndValue(1);
134 fadeAnimation.stop();
136 widgetPtr->deleteLater();
143 QGraphicsOpacityEffect effect;
144 QPropertyAnimation fadeAnimation;
146 typedef istd::TSmartPtr<PopupItem> PopupItemPtr;
152 QWidget* m_parentPtr;
153 QScreen* m_screenPtr;
158 IPopupWidgetFactory* m_widgetFactoryPtr;
160 QList<IPopupEventHandler*> m_eventHandlers;
161 QMutex m_eventHandlersMutex;
163 QStringList m_exclusiveMessageSources;
165 QList<PopupItemPtr> m_items;
166 QList<PopupItemPtr> m_visibleItems;