ShaderManagementConsoleTableView.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 <AtomToolsFramework/Document/AtomToolsDocumentNotificationBus.h>
  11. #include <Document/ShaderManagementConsoleDocumentRequestBus.h>
  12. #include <QStandardItemModel>
  13. #include <QTableWidget>
  14. #include <QVBoxLayout>
  15. #include <QHBoxLayout>
  16. #include <QLabel>
  17. #include <QPushButton>
  18. #include <QComboBox>
  19. #endif
  20. namespace ShaderManagementConsole
  21. {
  22. enum ColumnSortMode
  23. {
  24. Alpha, Rank, Cost
  25. };
  26. class ShaderManagementConsoleTableView
  27. : public QTableWidget
  28. , public AtomToolsFramework::AtomToolsDocumentNotificationBus::Handler
  29. {
  30. public:
  31. AZ_CLASS_ALLOCATOR(ShaderManagementConsoleTableView, AZ::SystemAllocator);
  32. ShaderManagementConsoleTableView(const AZ::Crc32& toolId, const AZ::Uuid& documentId, QWidget* parent);
  33. ~ShaderManagementConsoleTableView();
  34. void SetColumnSortMode(ColumnSortMode);
  35. protected:
  36. // AtomToolsFramework::AtomToolsDocumentNotificationBus::Handler overrides...
  37. void OnDocumentOpened(const AZ::Uuid& documentId) override;
  38. void OnDocumentModified(const AZ::Uuid& documentId) override;
  39. void RebuildTable();
  40. void OnCellSelected(int row, int column, int previousRow, int previousColumn);
  41. void OnCellChanged(int row, int column);
  42. void ShowContextMenu(const QPoint& pos);
  43. void keyPressEvent(QKeyEvent*) override;
  44. void mousePressEvent(QMouseEvent* event) override;
  45. enum RebuildMode { KeepAsIs, CallOnModified };
  46. void TransferViewModelToModel(RebuildMode);
  47. enum class CountQuery { ForUi, Options };
  48. int GetColumnsCount(CountQuery) const;
  49. int UiColumnToOption(int uiColumnIndex) const;
  50. const AZ::Crc32 m_toolId = {};
  51. const AZ::Uuid m_documentId = AZ::Uuid::CreateNull();
  52. AZ::RPI::ShaderVariantListSourceData m_shaderVariantListSourceData;
  53. AZStd::vector<AZ::RPI::ShaderOptionDescriptor> m_shaderOptionDescriptors;
  54. size_t m_shaderVariantCount = {};
  55. size_t m_shaderOptionCount = {};
  56. ColumnSortMode m_columnSortMode = Cost;
  57. QIcon m_emptyOptionIcon;
  58. };
  59. class ShaderManagementConsoleContainer : public QVBoxLayout
  60. {
  61. public:
  62. AZ_CLASS_ALLOCATOR(ShaderManagementConsoleContainer, AZ::SystemAllocator);
  63. ShaderManagementConsoleContainer(QWidget* container, const AZ::Crc32& toolId, const AZ::Uuid& documentId, QWidget* parent);
  64. ShaderManagementConsoleTableView m_tableView;
  65. QHBoxLayout m_subLayout;
  66. QLabel m_sortLabel;
  67. QComboBox m_sortComboBox;
  68. QPushButton m_defragVariants;
  69. };
  70. } // namespace ShaderManagementConsole