You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
8.1 KiB
C++
201 lines
8.1 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>
|