EBusHandlerActionMenu.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #if !defined(Q_MOC_RUN)
  10. #include <QAbstractListModel>
  11. #include <QAbstractItemView>
  12. #include <QMenu>
  13. #include <qregexp.h>
  14. #include <QSortFilterProxyModel>
  15. #include <AzCore/Component/Entity.h>
  16. #include <ScriptCanvas/GraphCanvas/NodeDescriptorBus.h>
  17. #endif
  18. namespace Ui
  19. {
  20. class EBusHandlerActionListWidget;
  21. }
  22. namespace ScriptCanvasEditor
  23. {
  24. struct EBusHandlerActionItem
  25. {
  26. public:
  27. int m_index = -1;
  28. QString m_name;
  29. QString m_displayName;
  30. bool m_active = false;
  31. ScriptCanvas::EBusEventId m_eventId;
  32. };
  33. class EBusHandlerActionSourceModel
  34. : public QAbstractListModel
  35. {
  36. Q_OBJECT
  37. public:
  38. AZ_CLASS_ALLOCATOR(EBusHandlerActionSourceModel, AZ::SystemAllocator);
  39. EBusHandlerActionSourceModel(QObject* parent = nullptr);
  40. ~EBusHandlerActionSourceModel();
  41. int rowCount(const QModelIndex& parent) const override;
  42. QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
  43. QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
  44. Qt::ItemFlags flags(const QModelIndex &index) const override;
  45. void OnItemClicked(const QModelIndex& index);
  46. void SetEBusNodeSource(const AZ::EntityId& ebusNode);
  47. EBusHandlerActionItem& GetActionItemForRow(int row);
  48. const EBusHandlerActionItem& GetActionItemForRow(int row) const;
  49. private:
  50. void UpdateEBusItem(EBusHandlerActionItem& actionItem);
  51. AZStd::vector< EBusHandlerActionItem > m_actionItems;
  52. AZ::EntityId m_ebusNode;
  53. AZStd::string m_busName;
  54. };
  55. class EBusHandlerActionFilterProxyModel
  56. : public QSortFilterProxyModel
  57. {
  58. Q_OBJECT
  59. public:
  60. AZ_CLASS_ALLOCATOR(EBusHandlerActionFilterProxyModel, AZ::SystemAllocator);
  61. EBusHandlerActionFilterProxyModel(QObject* parent = nullptr);
  62. ~EBusHandlerActionFilterProxyModel() = default;
  63. void SetFilterSource(QLineEdit* lineEdit);
  64. bool filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const override;
  65. public slots:
  66. void OnFilterChanged(const QString& text);
  67. private:
  68. QString m_filter;
  69. QRegExp m_regex;
  70. };
  71. class EBusHandlerActionMenu
  72. : public QMenu
  73. {
  74. Q_OBJECT
  75. public:
  76. AZ_CLASS_ALLOCATOR(EBusHandlerActionMenu, AZ::SystemAllocator);
  77. EBusHandlerActionMenu(QWidget* parent = nullptr);
  78. ~EBusHandlerActionMenu() = default;
  79. void SetEbusHandlerNode(const AZ::EntityId& ebusWrapperNode);
  80. public slots:
  81. void ResetFilter();
  82. void ItemClicked(const QModelIndex& modelIndex);
  83. protected:
  84. void keyPressEvent(QKeyEvent* keyEvent) override;
  85. private:
  86. EBusHandlerActionFilterProxyModel* m_proxyModel;
  87. EBusHandlerActionSourceModel* m_model;
  88. Ui::EBusHandlerActionListWidget* m_listWidget;
  89. };
  90. }