AssetListTabWidget.cpp 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  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. #include <source/ui/AssetListTabWidget.h>
  9. #include <source/ui/ui_AssetListTabWidget.h>
  10. #include <source/utils/GUIApplicationManager.h>
  11. #include <source/ui/GenerateBundlesModal.h>
  12. #include <source/ui/NewFileDialog.h>
  13. #include <source/models/AssetListFileTableModel.h>
  14. #include <source/models/AssetListTableModel.h>
  15. #include <AzCore/Outcome/Outcome.h>
  16. #include <AzFramework/StringFunc/StringFunc.h>
  17. #include <AzQtComponents/Components/FilteredSearchWidget.h>
  18. #include <AzQtComponents/Components/Widgets/TableView.h>
  19. #include <AzToolsFramework/Asset/AssetSeedManager.h>
  20. #include <AzToolsFramework/AssetCatalog/PlatformAddressedAssetCatalog.h>
  21. #include <QItemSelection>
  22. #include <QItemSelectionRange>
  23. #include <QMessageBox>
  24. #include <QPushButton>
  25. namespace AssetBundler
  26. {
  27. AssetListTabWidget::AssetListTabWidget(QWidget* parent, GUIApplicationManager* guiApplicationManager)
  28. : AssetBundlerTabWidget(parent, guiApplicationManager)
  29. , m_fileTableModel(new AssetListFileTableModel())
  30. , m_assetListContentsModel(new AssetListTableModel())
  31. {
  32. m_ui.reset(new Ui::AssetListTabWidget);
  33. m_ui->setupUi(this);
  34. m_ui->mainVerticalLayout->setContentsMargins(10, 10, 10, 10);
  35. // File view of all Asset List Files
  36. m_fileTableFilterModel.reset(new AssetBundlerFileTableFilterModel(
  37. this,
  38. m_fileTableModel->GetFileNameColumnIndex(),
  39. m_fileTableModel->GetTimeStampColumnIndex()));
  40. m_fileTableFilterModel->setSourceModel(m_fileTableModel.data());
  41. m_ui->assetListsTable->setModel(m_fileTableFilterModel.data());
  42. connect(m_ui->fileFilteredSearchWidget,
  43. &AzQtComponents::FilteredSearchWidget::TextFilterChanged,
  44. m_fileTableFilterModel.data(),
  45. static_cast<void (QSortFilterProxyModel::*)(const QString&)>(&AssetBundlerFileTableFilterModel::FilterChanged));
  46. connect(m_ui->assetListsTable->selectionModel(),
  47. &QItemSelectionModel::selectionChanged,
  48. this,
  49. &AssetListTabWidget::FileSelectionChanged);
  50. m_ui->fileTableHeaderLayout->setContentsMargins(0, 0, 0, 0);
  51. m_ui->fileTableVerticalLayout->setContentsMargins(0, 0, 0, 0);
  52. m_ui->assetListsTable->setIndentation(0);
  53. // Generate Bundle Button
  54. m_ui->generateBundleButton->setDefault(true);
  55. m_ui->generateBundleButton->setEnabled(false);
  56. connect(m_ui->generateBundleButton, &QPushButton::clicked, this, &AssetListTabWidget::OnGenerateBundleButtonPressed);
  57. // Absolute path of selected Asset List file
  58. m_ui->assetListFileAbsolutePathLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
  59. // Table that displays the contents of an Asset List File
  60. m_assetListContentsFilterModel.reset(new AssetBundlerFileTableFilterModel(this, AssetListTableModel::Column::ColumnAssetName));
  61. m_assetListContentsFilterModel->setSourceModel(m_assetListContentsModel.data());
  62. m_ui->assetListContentsTable->setModel(m_assetListContentsFilterModel.data());
  63. connect(m_ui->assetListContentsFilteredSearchWidget,
  64. &AzQtComponents::FilteredSearchWidget::TextFilterChanged,
  65. m_assetListContentsFilterModel.data(),
  66. static_cast<void (QSortFilterProxyModel::*)(const QString&)>(&AssetBundlerFileTableFilterModel::FilterChanged));
  67. m_ui->fileContentsHeaderLayout->setContentsMargins(0, 0, 0, 0);
  68. m_ui->fileContentsVerticalLayout->setContentsMargins(0, 0, 0, 0);
  69. m_ui->assetListContentsTable->setIndentation(0);
  70. SetModelDataSource();
  71. }
  72. void AssetListTabWidget::SetModelDataSource()
  73. {
  74. // Remove the current watched folders and files
  75. m_guiApplicationManager->RemoveWatchedPaths(m_watchedFolders + m_watchedFiles);
  76. // Set the new watched folder for the model
  77. m_watchedFolders.clear();
  78. m_watchedFiles.clear();
  79. m_watchedFolders.insert(m_guiApplicationManager->GetAssetListsFolder().c_str());
  80. ReadScanPathsFromAssetBundlerSettings(AssetBundlingFileType::AssetListFileType);
  81. m_guiApplicationManager->AddWatchedPaths(m_watchedFolders + m_watchedFiles);
  82. }
  83. AzQtComponents::TableView* AssetListTabWidget::GetFileTableView()
  84. {
  85. return m_ui->assetListsTable;
  86. }
  87. QModelIndex AssetListTabWidget::GetSelectedFileTableIndex()
  88. {
  89. return m_selectedFileTableIndex;
  90. }
  91. AssetBundlerAbstractFileTableModel* AssetListTabWidget::GetFileTableModel()
  92. {
  93. return m_fileTableModel.get();
  94. }
  95. void AssetListTabWidget::SetActiveProjectLabel(const QString& labelText)
  96. {
  97. m_ui->activeProjectLabel->setText(labelText);
  98. }
  99. void AssetListTabWidget::ApplyConfig()
  100. {
  101. const GUIApplicationManager::Config& config = m_guiApplicationManager->GetConfig();
  102. m_ui->fileTableFrame->setFixedWidth(config.fileTableWidth);
  103. m_ui->assetListsTable->header()->resizeSection(
  104. AssetListFileTableModel::Column::ColumnFileName,
  105. config.assetListFileNameColumnWidth);
  106. m_ui->assetListsTable->header()->resizeSection(
  107. AssetListFileTableModel::Column::ColumnPlatform,
  108. config.assetListPlatformColumnWidth);
  109. m_ui->assetListContentsFilteredSearchWidget->setFixedWidth(config.fileTableWidth);
  110. m_ui->assetListContentsTable->header()->resizeSection(
  111. AssetListTableModel::Column::ColumnAssetName,
  112. config.productAssetNameColumnWidth);
  113. m_ui->assetListContentsTable->header()->resizeSection(
  114. AssetListTableModel::Column::ColumnRelativePath,
  115. config.productAssetRelativePathColumnWidth);
  116. }
  117. void AssetListTabWidget::Reload()
  118. {
  119. // Reload all the asset list files
  120. m_fileTableModel->Reload(AzToolsFramework::AssetSeedManager::GetAssetListFileExtension(), m_watchedFolders, m_watchedFiles);
  121. // Update the selected row
  122. FileSelectionChanged();
  123. }
  124. void AssetListTabWidget::FileSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
  125. {
  126. AZ_UNUSED(selected);
  127. AZ_UNUSED(deselected);
  128. if (m_ui->assetListsTable->selectionModel()->selectedRows().size() == 0)
  129. {
  130. // Set selected index to an invalid value
  131. m_selectedFileTableIndex = QModelIndex();
  132. m_ui->assetListFileAbsolutePathLabel->setText("");
  133. m_assetListContentsModel.reset(new AssetListTableModel());
  134. m_assetListContentsFilterModel->setSourceModel(m_assetListContentsModel.data());
  135. m_ui->generateBundleButton->setEnabled(false);
  136. return;
  137. }
  138. m_selectedFileTableIndex = m_fileTableFilterModel->mapToSource(m_ui->assetListsTable->selectionModel()->currentIndex());
  139. m_ui->assetListFileAbsolutePathLabel->setText(QString(m_fileTableModel->GetFileAbsolutePath(m_selectedFileTableIndex).c_str()));
  140. m_assetListContentsModel = m_fileTableModel->GetAssetListFileContents(m_selectedFileTableIndex);
  141. m_assetListContentsFilterModel->setSourceModel(m_assetListContentsModel.data());
  142. m_ui->generateBundleButton->setEnabled(true);
  143. }
  144. void AssetListTabWidget::OnGenerateBundleButtonPressed()
  145. {
  146. GenerateBundlesModal generateBundlesModal(
  147. this,
  148. m_fileTableModel->GetFileAbsolutePath(m_selectedFileTableIndex),
  149. m_guiApplicationManager->GetBundlesFolder(),
  150. m_guiApplicationManager->GetBundleSettingsFolder(),
  151. this);
  152. generateBundlesModal.exec();
  153. }
  154. } //namespace AssetBundler
  155. #include <source/ui/moc_AssetListTabWidget.cpp>