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>
160 lines
6.2 KiB
C++
160 lines
6.2 KiB
C++
/*
|
|
* All or portions of this file Copyright(c) Amazon.com, Inc. or its affiliates or
|
|
*its licensors.
|
|
*
|
|
* For complete copyrightand 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/BundleListTabWidget.h>
|
|
#include <source/ui/ui_BundleListTabWidget.h>
|
|
|
|
#include <source/models/BundleFileListModel.h>
|
|
#include <source/utils/GUIApplicationManager.h>
|
|
|
|
#include <AzQtComponents/Components/FilteredSearchWidget.h>
|
|
|
|
#include <QFileDialog>
|
|
#include <QItemSelectionModel>
|
|
|
|
const double BytesToMegabytes = 1024.0 * 1024.0;
|
|
|
|
namespace AssetBundler
|
|
{
|
|
|
|
BundleListTabWidget::BundleListTabWidget(QWidget* parent, GUIApplicationManager* guiApplicationManager)
|
|
: AssetBundlerTabWidget(parent, guiApplicationManager)
|
|
{
|
|
m_ui.reset(new Ui::BundleListTabWidget);
|
|
m_ui->setupUi(this);
|
|
|
|
m_ui->mainVerticalLayout->setContentsMargins(MarginSize, MarginSize, MarginSize, MarginSize);
|
|
|
|
m_fileTableModel.reset(new BundleFileListModel);
|
|
m_fileTableFilterModel.reset(new AssetBundlerFileTableFilterModel(this, m_fileTableModel->GetFileNameColumnIndex(), m_fileTableModel->GetTimeStampColumnIndex()));
|
|
|
|
m_fileTableFilterModel->setSourceModel(m_fileTableModel.data());
|
|
m_ui->fileTableView->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->fileTableView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &BundleListTabWidget::FileSelectionChanged);
|
|
|
|
m_ui->fileTableView->setIndentation(0);
|
|
|
|
m_relatedBundlesListModel.reset(new QStringListModel);
|
|
m_ui->relatedBundlesListView->setModel(m_relatedBundlesListModel.data());
|
|
|
|
m_ui->bundleFileContentsVerticalLayout->setContentsMargins(MarginSize, MarginSize, MarginSize, MarginSize);
|
|
|
|
SetModelDataSource();
|
|
}
|
|
|
|
void BundleListTabWidget::Reload()
|
|
{
|
|
// The act of cracking open paks kicks off a DirectoryChanged event. We need to temporarily remove the Bundles
|
|
// directory from our watched paths to prevent an infinite loop of events.
|
|
m_guiApplicationManager->RemoveWatchedPaths(m_watchedFolders);
|
|
|
|
// Reload all the bundle files
|
|
m_fileTableModel->Reload(AzToolsFramework::AssetBundleSettings::GetBundleFileExtension(), m_watchedFolders, m_watchedFiles);
|
|
|
|
// Update the selected row
|
|
FileSelectionChanged();
|
|
|
|
// Start recieving DirectoryChanged events for these folders again
|
|
m_guiApplicationManager->AddWatchedPaths(m_watchedFolders);
|
|
}
|
|
|
|
void BundleListTabWidget::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->GetBundlesFolder().c_str());
|
|
ReadScanPathsFromAssetBundlerSettings(AssetBundlingFileType::BundleFileType);
|
|
|
|
m_guiApplicationManager->AddWatchedPaths(m_watchedFolders + m_watchedFiles);
|
|
}
|
|
|
|
AzQtComponents::TableView* BundleListTabWidget::GetFileTableView()
|
|
{
|
|
return m_ui->fileTableView;
|
|
}
|
|
|
|
QModelIndex BundleListTabWidget::GetSelectedFileTableIndex()
|
|
{
|
|
return m_selectedFileTableIndex;
|
|
}
|
|
|
|
AssetBundlerAbstractFileTableModel* BundleListTabWidget::GetFileTableModel()
|
|
{
|
|
return m_fileTableModel.get();
|
|
}
|
|
|
|
void BundleListTabWidget::SetActiveProjectLabel(const QString& labelText)
|
|
{
|
|
m_ui->activeProjectLabel->setText(labelText);
|
|
}
|
|
|
|
void BundleListTabWidget::ApplyConfig()
|
|
{
|
|
const GUIApplicationManager::Config& config = m_guiApplicationManager->GetConfig();
|
|
m_ui->fileTableFrame->setFixedWidth(config.fileTableWidth);
|
|
m_ui->fileTableView->header()->resizeSection(BundleFileListModel::Column::ColumnFileName, config.fileNameColumnWidth);
|
|
}
|
|
|
|
|
|
void BundleListTabWidget::FileSelectionChanged(const QItemSelection& /*selected*/, const QItemSelection& /*deselected*/)
|
|
{
|
|
if (m_ui->fileTableView->selectionModel()->selectedRows().size() == 0)
|
|
{
|
|
m_selectedFileTableIndex = QModelIndex();
|
|
ClearDisplayedBundleValues();
|
|
return;
|
|
}
|
|
|
|
m_selectedFileTableIndex = m_fileTableFilterModel->mapToSource(m_ui->fileTableView->selectionModel()->selectedRows()[0]);
|
|
AZ::Outcome< BundleFileInfoPtr, void> fileInfoOutcome = m_fileTableModel->GetBundleInfo(m_selectedFileTableIndex);
|
|
|
|
if (!fileInfoOutcome.IsSuccess())
|
|
{
|
|
ClearDisplayedBundleValues();
|
|
return;
|
|
}
|
|
|
|
BundleFileInfoPtr fileInfoPtr = fileInfoOutcome.GetValue();
|
|
|
|
m_ui->absolutePathLabel->setText(fileInfoPtr->m_absolutePath.c_str());
|
|
|
|
QString sizeFormat("%1 MB");
|
|
double compressedSize = (double)fileInfoPtr->m_compressedSize / BytesToMegabytes;
|
|
m_ui->compressedSizeValueLabel->setText(sizeFormat.arg(compressedSize, 6, 'f', 3));
|
|
|
|
bool hasRelatedBundles = !fileInfoPtr->m_relatedBundles.isEmpty();
|
|
if (hasRelatedBundles)
|
|
{
|
|
m_relatedBundlesListModel->setStringList(fileInfoPtr->m_relatedBundles);
|
|
}
|
|
m_ui->relatedBundlesLabel->setVisible(hasRelatedBundles);
|
|
m_ui->relatedBundlesListView->setVisible(hasRelatedBundles);
|
|
}
|
|
|
|
void BundleListTabWidget::ClearDisplayedBundleValues()
|
|
{
|
|
m_ui->absolutePathLabel->clear();
|
|
m_ui->compressedSizeValueLabel->clear();
|
|
m_ui->relatedBundlesLabel->setVisible(false);
|
|
m_ui->relatedBundlesListView->setVisible(false);
|
|
m_relatedBundlesListModel->setStringList({});
|
|
}
|
|
}
|
|
|
|
#include <source/ui/moc_BundleListTabWidget.cpp>
|