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.
o3de/Code/Tools/AssetBundler/source/utils/GUIApplicationManager.h

161 lines
5.3 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#if !defined(Q_MOC_RUN)
#include <source/utils/applicationManager.h>
#include <AzCore/Outcome/Outcome.h>
#include <AzCore/std/containers/vector.h>
#include <AzFramework/Asset/AssetCatalog.h>
#include <AzFramework/Platform/PlatformDefaults.h>
#include <QCoreApplication>
#include <QDir>
#include <QMap>
#include <QSettings>
#include <QSharedPointer>
#include <QString>
#include <QFileSystemWatcher>
#endif
namespace AssetBundler
{
enum AssetBundlingFileType : int
{
SeedListFileType = 0,
AssetListFileType,
BundleSettingsFileType,
BundleFileType,
RulesFileType,
NumBundlingFileTypes
};
class MainWindow;
class GUIApplicationManager
: public ApplicationManager
{
Q_OBJECT
public:
struct Config
{
// These default values are used if the values can't be read from AssetBundlerConfig.ini,
// and the call to defaultConfig fails.
// Error Log
int logTypeColumnWidth = -1;
int logSourceColumnWidth = -1;
// General File Tables
int fileTableWidth = -1;
int fileNameColumnWidth = -1;
// Seeds Tab
int checkBoxColumnWidth = -1;
int seedListFileNameColumnWidth = -1;
int projectNameColumnWidth = -1;
int seedListContentsNameColumnWidth = -1;
// Asset Lists Tab
int assetListFileNameColumnWidth = -1;
int assetListPlatformColumnWidth = -1;
int productAssetNameColumnWidth = -1;
int productAssetRelativePathColumnWidth = -1;
};
/*!
* Loads the button config data from a settings object.
*/
static Config loadConfig(QSettings& settings);
/*!
* Returns default button config data.
*/
static Config defaultConfig();
explicit GUIApplicationManager(int* argc, char*** argv, QObject* parent = 0);
virtual ~GUIApplicationManager();
bool Init() override;
bool Run() override;
AZStd::string GetCurrentProjectFolder() { return m_currentProjectFolder; }
AZStd::string GetAssetBundlingFolder() { return m_assetBundlingFolder; }
AZStd::string GetSeedListsFolder() { return m_seedListsFolder; }
AZStd::string GetAssetListsFolder() { return m_assetListsFolder; }
AZStd::string GetRulesFolder() { return m_rulesFolder; }
AZStd::string GetBundleSettingsFolder() { return m_bundleSettingsFolder; }
AZStd::string GetBundlesFolder() { return m_bundlesFolder; }
AZStd::string GetCurrentProjectCacheFolder() { return m_currentProjectCacheFolder; }
AzFramework::PlatformFlags GetEnabledPlatforms() { return m_enabledPlatforms; }
void AddWatchedPath(const QString& path);
void AddWatchedPaths(const QSet<QString>& paths);
void RemoveWatchedPath(const QString& path);
void RemoveWatchedPaths(const QSet<QString>& paths);
////////////////////////////////////////////////////////////////////////////////////////////
// Override the ApplicationManager TraceMessageBus methods so that messages go through MainWindow and not the CLI
bool OnPreError(const char* window, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* message) override;
bool OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) override;
bool OnPrintf(const char* /*window*/, const char* /*message*/) override;
////////////////////////////////////////////////////////////////////////////////////////////
const Config& GetConfig() { return m_config; }
Q_SIGNALS:
void ShowWindow();
void UpdateTab(const AZStd::string& directory);
void UpdateFiles(AssetBundlingFileType fileType, const AZStd::vector<AZStd::string>& absoluteFilePaths);
protected Q_SLOTS:
void DirectoryChanged(const QString& directory);
void FileChanged(const QString& path);
void ApplyConfig();
private:
/**
* Generates directory information for all paths used in this tool
* @return void on success, error message on failure
*/
AZ::Outcome<void, AZStd::string> InitializePaths();
QSharedPointer<QCoreApplication> m_qApp;
Config m_config;
QSharedPointer<MainWindow> m_mainWindow;
AZStd::string m_currentProjectFolder;
AZStd::string m_assetBundlingFolder;
AZStd::string m_seedListsFolder;
AZStd::string m_assetListsFolder;
AZStd::string m_rulesFolder;
AZStd::string m_bundleSettingsFolder;
AZStd::string m_bundlesFolder;
AZStd::string m_currentProjectCacheFolder;
AzFramework::PlatformFlags m_enabledPlatforms = AzFramework::PlatformFlags::Platform_NONE;
AZStd::unique_ptr<AzToolsFramework::PlatformAddressedAssetCatalogManager> m_platformCatalogManager;
bool m_isInitializing = false;
QFileSystemWatcher m_fileWatcher;
};
} // namespace AssetBundler