a5d4eb5d44
The AssetBundler is a new ToolsApplication that allows users to work through the entire Asset Bundling process without ever touching a command line. * Integrating github/AssetBundler through commit 1d65018 * Asset Bundler bug fixes: platform initialization and GUI styling (#5) * fixed enabled platform initialization * fixed the cached engine root. This fixed some of my Seeds tab data issues. The default Engine Seed List appeared, and was able to display the contents on screen. * updated my notes of active bugs * changed some casing in various include lines to hopefully fix my linux build * another include fix for linux * AssetBundler GUI is now compiling on Mac * removed some things off of my todo list because the mac build fix actually fixed the visuals! everything's the right color again * removed the word Lumberyard from the bundler * Asset bundler bug fixes - Bundles, Gems, and Tests (#9) * Fixed the Bundle loading and generation problem. Turned out to be a FileWatcher issue. * turns out gem loading wasn't broken, there were just no existing SeedListFiles for any of the gems loaded by the AutomatedTesting project. I added a default SeedListFile for the PrimitiveAssets Gem. * fixed some failing AssetBundler Gem tests * Misunderstood the need to have default seed lists for asset-only gems. removing the previously created seed list file * Asset bundler bug fixes: Seeds Tab display issues and _dependencies.xml loading (#10) * Fixed the Project Source column in the Seeds tab * The AssetBundler will no longer attempt to copy a template version of the ProjectName_dependencies.xml file into your active project. However, it will throw an error if you do not have one. A follow-up ticket has been cut to address this issue. * updated the AssetBundler icon. This one matches the current style guides * PR feedback: pass a const ref instead of a value * PR feedback: safer conversion from a string_view to a QString Co-authored-by: alexpete <alexpete@amazon.com>
183 lines
7.8 KiB
C++
183 lines
7.8 KiB
C++
/*
|
|
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
|
* its licensors.
|
|
*
|
|
* For complete copyright and license terms please see the LICENSE at the root of this
|
|
* distribution (the "License"). All use of this software is governed by the License,
|
|
* or, if provided, by the license below or the license accompanying this file. Do not
|
|
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
*
|
|
*/
|
|
|
|
#include <source/ui/AssetListTabWidget.h>
|
|
#include <source/ui/ui_AssetListTabWidget.h>
|
|
|
|
#include <source/utils/GUIApplicationManager.h>
|
|
#include <source/ui/GenerateBundlesModal.h>
|
|
#include <source/ui/NewFileDialog.h>
|
|
#include <source/models/AssetListFileTableModel.h>
|
|
#include <source/models/AssetListTableModel.h>
|
|
|
|
#include <AzCore/Outcome/Outcome.h>
|
|
#include <AzFramework/StringFunc/StringFunc.h>
|
|
#include <AzQtComponents/Components/FilteredSearchWidget.h>
|
|
#include <AzQtComponents/Components/Widgets/TableView.h>
|
|
#include <AzToolsFramework/Asset/AssetSeedManager.h>
|
|
#include <AzToolsFramework/AssetCatalog/PlatformAddressedAssetCatalog.h>
|
|
|
|
#include <QItemSelection>
|
|
#include <QItemSelectionRange>
|
|
#include <QMessageBox>
|
|
#include <QPushButton>
|
|
|
|
namespace AssetBundler
|
|
{
|
|
AssetListTabWidget::AssetListTabWidget(QWidget* parent, GUIApplicationManager* guiApplicationManager)
|
|
: AssetBundlerTabWidget(parent, guiApplicationManager)
|
|
, m_fileTableModel(new AssetListFileTableModel())
|
|
, m_assetListContentsModel(new AssetListTableModel())
|
|
{
|
|
m_ui.reset(new Ui::AssetListTabWidget);
|
|
m_ui->setupUi(this);
|
|
|
|
m_ui->mainVerticalLayout->setContentsMargins(10, 10, 10, 10);
|
|
|
|
// File view of all Asset List Files
|
|
m_fileTableFilterModel.reset(new AssetBundlerFileTableFilterModel(this, m_fileTableModel->GetFileNameColumnIndex(), m_fileTableModel->GetTimeStampColumnIndex()));
|
|
|
|
m_fileTableFilterModel->setSourceModel(m_fileTableModel.data());
|
|
m_ui->assetListsTable->setModel(m_fileTableFilterModel.data());
|
|
connect(m_ui->fileFilteredSearchWidget, &AzQtComponents::FilteredSearchWidget::TextFilterChanged,
|
|
m_fileTableFilterModel.data(), static_cast<void (QSortFilterProxyModel::*)(const QString&)>(&AssetBundlerFileTableFilterModel::FilterChanged));
|
|
|
|
connect(m_ui->assetListsTable->selectionModel(), &QItemSelectionModel::selectionChanged, this, &AssetListTabWidget::FileSelectionChanged);
|
|
|
|
m_ui->fileTableHeaderLayout->setContentsMargins(0, 0, 0, 0);
|
|
m_ui->fileTableVerticalLayout->setContentsMargins(0, 0, 0, 0);
|
|
m_ui->assetListsTable->setIndentation(0);
|
|
|
|
// Generate Bundle Button
|
|
m_ui->generateBundleButton->setDefault(true);
|
|
m_ui->generateBundleButton->setEnabled(false);
|
|
connect(m_ui->generateBundleButton, &QPushButton::clicked, this, &AssetListTabWidget::OnGenerateBundleButtonPressed);
|
|
|
|
// Absolute path of selected Asset List file
|
|
m_ui->assetListFileAbsolutePathLabel->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
|
|
|
// Table that displays the contents of an Asset List File
|
|
m_assetListContentsFilterModel.reset(new AssetBundlerFileTableFilterModel(this, AssetListTableModel::Column::ColumnAssetName));
|
|
|
|
m_assetListContentsFilterModel->setSourceModel(m_assetListContentsModel.data());
|
|
m_ui->assetListContentsTable->setModel(m_assetListContentsFilterModel.data());
|
|
connect(m_ui->assetListContentsFilteredSearchWidget, &AzQtComponents::FilteredSearchWidget::TextFilterChanged,
|
|
m_assetListContentsFilterModel.data(), static_cast<void (QSortFilterProxyModel::*)(const QString&)>(&AssetBundlerFileTableFilterModel::FilterChanged));
|
|
|
|
|
|
m_ui->fileContentsHeaderLayout->setContentsMargins(0, 0, 0, 0);
|
|
m_ui->fileContentsVerticalLayout->setContentsMargins(0, 0, 0, 0);
|
|
m_ui->assetListContentsTable->setIndentation(0);
|
|
|
|
SetModelDataSource();
|
|
}
|
|
|
|
void AssetListTabWidget::SetModelDataSource()
|
|
{
|
|
// Remove the current watched folders and files
|
|
m_guiApplicationManager->RemoveWatchedPaths(m_watchedFolders + m_watchedFiles);
|
|
|
|
// Set the new watched folder for the model
|
|
m_watchedFolders.clear();
|
|
m_watchedFiles.clear();
|
|
m_watchedFolders.insert(m_guiApplicationManager->GetAssetListsFolder().c_str());
|
|
ReadScanPathsFromAssetBundlerSettings(AssetBundlingFileType::AssetListFileType);
|
|
|
|
m_guiApplicationManager->AddWatchedPaths(m_watchedFolders + m_watchedFiles);
|
|
}
|
|
|
|
AzQtComponents::TableView* AssetListTabWidget::GetFileTableView()
|
|
{
|
|
return m_ui->assetListsTable;
|
|
}
|
|
|
|
QModelIndex AssetListTabWidget::GetSelectedFileTableIndex()
|
|
{
|
|
return m_selectedFileTableIndex;
|
|
}
|
|
|
|
AssetBundlerAbstractFileTableModel* AssetListTabWidget::GetFileTableModel()
|
|
{
|
|
return m_fileTableModel.get();
|
|
}
|
|
|
|
void AssetListTabWidget::SetActiveProjectLabel(const QString& labelText)
|
|
{
|
|
m_ui->activeProjectLabel->setText(labelText);
|
|
}
|
|
|
|
void AssetListTabWidget::ApplyConfig()
|
|
{
|
|
const GUIApplicationManager::Config& config = m_guiApplicationManager->GetConfig();
|
|
|
|
m_ui->fileTableFrame->setFixedWidth(config.fileTableWidth);
|
|
|
|
m_ui->assetListsTable->header()->resizeSection(AssetListFileTableModel::Column::ColumnFileName, config.assetListFileNameColumnWidth);
|
|
m_ui->assetListsTable->header()->resizeSection(AssetListFileTableModel::Column::ColumnPlatform, config.assetListPlatformColumnWidth);
|
|
|
|
m_ui->assetListContentsFilteredSearchWidget->setFixedWidth(config.fileTableWidth);
|
|
|
|
m_ui->assetListContentsTable->header()->resizeSection(AssetListTableModel::Column::ColumnAssetName, config.productAssetNameColumnWidth);
|
|
m_ui->assetListContentsTable->header()->resizeSection(AssetListTableModel::Column::ColumnRelativePath, config.productAssetRelativePathColumnWidth);
|
|
}
|
|
|
|
|
|
void AssetListTabWidget::Reload()
|
|
{
|
|
// Reload all the asset list files
|
|
m_fileTableModel->Reload(AzToolsFramework::AssetSeedManager::GetAssetListFileExtension(), m_watchedFolders, m_watchedFiles);
|
|
|
|
// Update the selected row
|
|
FileSelectionChanged();
|
|
}
|
|
|
|
void AssetListTabWidget::FileSelectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
|
|
{
|
|
AZ_UNUSED(selected);
|
|
AZ_UNUSED(deselected);
|
|
|
|
if (m_ui->assetListsTable->selectionModel()->selectedRows().size() == 0)
|
|
{
|
|
// Set selected index to an invalid value
|
|
m_selectedFileTableIndex = QModelIndex();
|
|
m_ui->assetListFileAbsolutePathLabel->setText("");
|
|
m_assetListContentsModel.reset(new AssetListTableModel());
|
|
m_assetListContentsFilterModel->setSourceModel(m_assetListContentsModel.data());
|
|
m_ui->generateBundleButton->setEnabled(false);
|
|
|
|
return;
|
|
}
|
|
|
|
m_selectedFileTableIndex = m_fileTableFilterModel->mapToSource(m_ui->assetListsTable->selectionModel()->currentIndex());
|
|
|
|
m_ui->assetListFileAbsolutePathLabel->setText(QString(m_fileTableModel->GetFileAbsolutePath(m_selectedFileTableIndex).c_str()));
|
|
|
|
m_assetListContentsModel = m_fileTableModel->GetAssetListFileContents(m_selectedFileTableIndex);
|
|
m_assetListContentsFilterModel->setSourceModel(m_assetListContentsModel.data());
|
|
|
|
m_ui->generateBundleButton->setEnabled(true);
|
|
}
|
|
|
|
void AssetListTabWidget::OnGenerateBundleButtonPressed()
|
|
{
|
|
GenerateBundlesModal generateBundlesModal(
|
|
this,
|
|
m_fileTableModel->GetFileAbsolutePath(m_selectedFileTableIndex),
|
|
m_guiApplicationManager->GetBundlesFolder(),
|
|
m_guiApplicationManager->GetBundleSettingsFolder(),
|
|
this);
|
|
generateBundlesModal.exec();
|
|
}
|
|
} //namespace AssetBundler
|
|
|
|
#include <source/ui/moc_AssetListTabWidget.cpp>
|