3
0

ATLControlsPanel.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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 <AudioControl.h>
  11. #include <AudioControlFilters.h>
  12. #include <IAudioInterfacesCommonData.h>
  13. #include <QTreeWidgetFilter.h>
  14. #include <QWidget>
  15. #include <QMenu>
  16. #include <QLabel>
  17. #include <Source/Editor/ui_ATLControlsPanel.h>
  18. #endif
  19. // Forward declarations
  20. namespace Audio
  21. {
  22. struct IAudioProxy;
  23. } // namespace Audio
  24. class QStandardItemModel;
  25. class QStandardItem;
  26. class QSortFilterProxyModel;
  27. namespace AudioControls
  28. {
  29. class CATLControlsModel;
  30. class QFilterButton;
  31. class IAudioSystemEditor;
  32. class QATLTreeModel;
  33. //-------------------------------------------------------------------------------------------//
  34. class CATLControlsPanel
  35. : public QWidget
  36. , public Ui::ATLControlsPanel
  37. , public IATLControlModelListener
  38. {
  39. Q_OBJECT
  40. public:
  41. CATLControlsPanel(CATLControlsModel* pATLModel, QATLTreeModel* pATLControlsModel);
  42. ~CATLControlsPanel();
  43. ControlList GetSelectedControls();
  44. void Reload();
  45. private:
  46. // Filtering
  47. void ResetFilters();
  48. void ApplyFilter();
  49. bool ApplyFilter(const QModelIndex parent);
  50. bool IsValid(const QModelIndex index);
  51. void ShowControlType(EACEControlType type, bool bShow, bool bExclusive);
  52. // Helper Functions
  53. void SelectItem(QStandardItem* pItem);
  54. void DeselectAll();
  55. QStandardItem* GetCurrentItem();
  56. CATLControl* GetControlFromItem(QStandardItem* pItem);
  57. CATLControl* GetControlFromIndex(QModelIndex index);
  58. bool IsValidParent(QStandardItem* pParent, const EACEControlType eControlType);
  59. void HandleExternalDropEvent(QDropEvent* pDropEvent);
  60. // ------------- IATLControlModelListener ----------------
  61. void OnControlAdded(CATLControl* pControl) override;
  62. // -------------------------------------------------------
  63. // ------------------ QWidget ----------------------------
  64. bool eventFilter(QObject* pObject, QEvent* pEvent) override;
  65. // -------------------------------------------------------
  66. private slots:
  67. void ItemModified(QStandardItem* pItem);
  68. QStandardItem* CreateFolder();
  69. QStandardItem* AddControl(CATLControl* pControl);
  70. // Create controls / folders
  71. void CreateRTPCControl();
  72. void CreateSwitchControl();
  73. void CreateStateControl();
  74. void CreateTriggerControl();
  75. void CreateEnvironmentsControl();
  76. void CreatePreloadControl();
  77. void DeleteSelectedControl();
  78. void ShowControlsContextMenu(const QPoint& pos);
  79. // Filtering
  80. void SetFilterString(const QString& text);
  81. void ShowTriggers(bool bShow);
  82. void ShowRTPCs(bool bShow);
  83. void ShowEnvironments(bool bShow);
  84. void ShowSwitches(bool bShow);
  85. void ShowPreloads(bool bShow);
  86. void ShowUnassigned(bool bShow);
  87. // Audio Preview
  88. void ExecuteControl();
  89. void StopControlExecution();
  90. signals:
  91. void SelectedControlChanged();
  92. void ControlTypeFiltered(EACEControlType type, bool bShow);
  93. private:
  94. QSortFilterProxyModel* m_pProxyModel;
  95. QATLTreeModel* m_pTreeModel;
  96. CATLControlsModel* const m_pATLModel;
  97. // Context Menu
  98. QMenu m_addItemMenu;
  99. // Filtering
  100. QString m_sFilter;
  101. QMenu m_filterMenu;
  102. QFilterButton* m_pControlTypeFilterButtons[eACET_NUM_TYPES];
  103. QFilterButton* m_unassignedFilterButton;
  104. bool m_visibleTypes[eACET_NUM_TYPES];
  105. bool m_showUnassignedControls;
  106. };
  107. class QFilterButton
  108. : public QWidget
  109. {
  110. Q_OBJECT
  111. public:
  112. QFilterButton(const QIcon& icon, const QString& text, QWidget* parent = 0);
  113. void SetText(const QString& text){ m_actionText.setText(text); }
  114. void SetChecked(bool checked);
  115. signals:
  116. void clicked(bool checked = false);
  117. protected:
  118. void mousePressEvent(QMouseEvent* event) override;
  119. void enterEvent(QEvent* event) override;
  120. void leaveEvent(QEvent* event) override;
  121. QLabel m_checkIcon;
  122. QLabel m_filterIcon;
  123. QLabel m_actionText;
  124. QWidget* m_background;
  125. bool m_checked = true;
  126. };
  127. } // namespace AudioControls