qt-material-widgets/source/component/qtmaterialautocomplete_inte...

72 lines
1.9 KiB
C++
Raw Normal View History

2023-01-31 10:08:03 +00:00
#include <QDebug>
#include <QMenu>
2017-10-15 10:38:53 +00:00
#include <QPropertyAnimation>
2023-01-31 10:08:03 +00:00
#include <QSignalTransition>
#include "qtmaterialautocomplete_internal.h"
#include <QtWidgets/QGraphicsOpacityEffect>
2017-10-15 10:38:53 +00:00
/*!
* \class QtMaterialAutoCompleteStateMachine
* \internal
*/
/*!
* \internal
*/
2023-01-31 10:08:03 +00:00
QtMaterialAutoCompleteStateMachine::QtMaterialAutoCompleteStateMachine(
QWidget* menu)
: QStateMachine(menu)
, m_menu(menu)
, m_closedState(new QState)
, m_openState(new QState)
, m_closingState(new QState)
2017-10-15 10:38:53 +00:00
{
2023-01-31 10:08:03 +00:00
Q_ASSERT(menu);
2017-10-15 10:38:53 +00:00
2023-01-31 10:08:03 +00:00
addState(m_closedState);
addState(m_openState);
addState(m_closingState);
setInitialState(m_closedState);
2017-10-15 10:38:53 +00:00
2023-01-31 10:08:03 +00:00
QSignalTransition* transition;
2017-10-15 10:38:53 +00:00
2023-01-31 10:08:03 +00:00
transition = new QSignalTransition(this, SIGNAL(shouldOpen()));
transition->setTargetState(m_openState);
m_closedState->addTransition(transition);
2023-01-31 10:08:03 +00:00
transition = new QSignalTransition(this, SIGNAL(shouldClose()));
transition->setTargetState(m_closedState);
m_openState->addTransition(transition);
2023-01-31 10:08:03 +00:00
transition = new QSignalTransition(this, SIGNAL(shouldFade()));
transition->setTargetState(m_closingState);
m_openState->addTransition(transition);
2023-01-31 10:08:03 +00:00
m_closedState->assignProperty(menu, "visible", false);
m_openState->assignProperty(menu, "visible", true);
2023-01-31 10:08:03 +00:00
QGraphicsOpacityEffect* effect = new QGraphicsOpacityEffect;
menu->setGraphicsEffect(effect);
2023-01-31 10:08:03 +00:00
m_openState->assignProperty(effect, "opacity", 1);
m_closingState->assignProperty(effect, "opacity", 0);
m_closedState->assignProperty(effect, "opacity", 0);
2023-01-31 10:08:03 +00:00
QPropertyAnimation* animation;
2023-01-31 10:08:03 +00:00
animation = new QPropertyAnimation(effect, "opacity", this);
animation->setDuration(240);
addDefaultAnimation(animation);
2023-01-31 10:08:03 +00:00
transition = new QSignalTransition(animation, SIGNAL(finished()));
transition->setTargetState(m_closedState);
m_closingState->addTransition(transition);
2017-10-15 10:38:53 +00:00
}
/*!
* \internal
*/
2023-01-31 10:08:03 +00:00
QtMaterialAutoCompleteStateMachine::~QtMaterialAutoCompleteStateMachine() {}