qtmaterialautocomplete_internal.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "qtmaterialautocomplete_internal.h"
  2. #include <QSignalTransition>
  3. #include <QPropertyAnimation>
  4. #include <QtWidgets/QGraphicsOpacityEffect>
  5. #include <QDebug>
  6. /*!
  7. * \class QtMaterialAutoCompleteStateMachine
  8. * \internal
  9. */
  10. /*!
  11. * \internal
  12. */
  13. QtMaterialAutoCompleteStateMachine::QtMaterialAutoCompleteStateMachine(QWidget *menu)
  14. : QStateMachine(menu),
  15. m_menu(menu),
  16. m_closedState(new QState),
  17. m_openState(new QState),
  18. m_closingState(new QState)
  19. {
  20. Q_ASSERT(menu);
  21. addState(m_closedState);
  22. addState(m_openState);
  23. addState(m_closingState);
  24. setInitialState(m_closedState);
  25. QSignalTransition *transition;
  26. transition = new QSignalTransition(this, SIGNAL(shouldOpen()));
  27. transition->setTargetState(m_openState);
  28. m_closedState->addTransition(transition);
  29. transition = new QSignalTransition(this, SIGNAL(shouldClose()));
  30. transition->setTargetState(m_closedState);
  31. m_openState->addTransition(transition);
  32. transition = new QSignalTransition(this, SIGNAL(shouldFade()));
  33. transition->setTargetState(m_closingState);
  34. m_openState->addTransition(transition);
  35. m_closedState->assignProperty(menu, "visible", false);
  36. m_openState->assignProperty(menu, "visible", true);
  37. QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect;
  38. menu->setGraphicsEffect(effect);
  39. m_openState->assignProperty(effect, "opacity", 1);
  40. m_closingState->assignProperty(effect, "opacity", 0);
  41. m_closedState->assignProperty(effect, "opacity", 0);
  42. QPropertyAnimation *animation;
  43. animation = new QPropertyAnimation(effect, "opacity", this);
  44. animation->setDuration(240);
  45. addDefaultAnimation(animation);
  46. transition = new QSignalTransition(animation, SIGNAL(finished()));
  47. transition->setTargetState(m_closedState);
  48. m_closingState->addTransition(transition);
  49. }
  50. /*!
  51. * \internal
  52. */
  53. QtMaterialAutoCompleteStateMachine::~QtMaterialAutoCompleteStateMachine()
  54. {
  55. }