ATWindowNotificationBus and ATFactoryRequestBus

Signed-off-by: Dayo Lawal <lawalfua@amazon.com>
This commit is contained in:
Dayo Lawal
2021-08-03 19:24:46 -05:00
parent 4eacd076da
commit 259bc3f85e
17 changed files with 61 additions and 177 deletions
@@ -9,12 +9,17 @@
#include <AtomToolsFramework/Communication/LocalServer.h>
#include <AtomToolsFramework/Communication/LocalSocket.h>
#include <AtomToolsFramework/Window/AtomToolsMainWindowNotificationBus.h>
#include <AzCore/Component/Entity.h>
#include <AzCore/Component/TickBus.h>
#include <AzCore/UserSettings/UserSettingsProvider.h>
#include <AzFramework/Application/Application.h>
#include <AzFramework/Asset/AssetSystemBus.h>
#include <AzQtComponents/Application/AzQtApplication.h>
#include <AzToolsFramework/API/AssetDatabaseBus.h>
#include <AzToolsFramework/API/EditorPythonConsoleBus.h>
#include <AzToolsFramework/Logger/TraceLogger.h>
@@ -31,6 +36,7 @@ namespace AtomToolsFramework
, protected AzFramework::AssetSystemStatusBus::Handler
, protected AzToolsFramework::EditorPythonConsoleNotificationBus::Handler
, protected AZ::UserSettingsOwnerRequestBus::Handler
, protected AtomToolsMainWindowNotificationBus::Handler
{
public:
AZ_TYPE_INFO(AtomTools::AtomToolsApplication, "{A0DF25BA-6F74-4F11-9F85-0F99278D5986}");
@@ -38,6 +44,7 @@ namespace AtomToolsFramework
using Base = AzFramework::Application;
AtomToolsApplication(int* argc, char*** argv);
~AtomToolsApplication();
//////////////////////////////////////////////////////////////////////////
// AzFramework::Application
@@ -52,6 +59,11 @@ namespace AtomToolsFramework
void Stop() override;
protected:
//////////////////////////////////////////////////////////////////////////
// AtomsToolMainWindowNotificationBus::Handler overrides...
void OnMainWindowClosing() override;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// AssetDatabaseRequestsBus::Handler overrides...
bool GetAssetDatabaseLocation(AZStd::string& result) override;
@@ -8,6 +8,7 @@
#pragma once
#include <AtomToolsFramework/Window/AtomToolsMainWindowRequestBus.h>
#include <AzCore/Memory/SystemAllocator.h>
#include <AzQtComponents/Components/DockMainWindow.h>
@@ -19,11 +19,11 @@ namespace AtomToolsFramework
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
/// Creates and shows the AtomToolsMainWindow
virtual void CreateAtomToolsMainWindow() = 0;
/// Creates and shows main window
virtual void CreateMainWindow() = 0;
//! Destroys material editor window and releases all cached assets
virtual void DestroyAtomToolsMainWindow() = 0;
//! Destroys main window and releases all cached assets
virtual void DestroyMainWindow() = 0;
};
using AtomToolsMainWindowFactoryRequestBus = AZ::EBus<AtomToolsMainWindowFactoryRequests>;
@@ -18,7 +18,7 @@ namespace AtomToolsFramework
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual void OnAtomToolsMainWindowWindowClosing(){};
virtual void OnMainWindowClosing(){};
};
using AtomToolsMainWindowNotificationBus = AZ::EBus<AtomToolsMainWindowNotifications>;
@@ -10,6 +10,7 @@
#include <AtomToolsFramework/Util/Util.h>
#include <AtomToolsFramework/Application/AtomToolsApplication.h>
#include <AtomToolsFramework/Window/AtomToolsMainWindowFactoryRequestBus.h>
#include <AzCore/IO/Path/Path.h>
#include <AzCore/Utils/Utils.h>
@@ -66,6 +67,11 @@ namespace AtomToolsFramework
});
}
AtomToolsApplication ::~AtomToolsApplication()
{
AtomToolsMainWindowNotificationBus::Handler::BusDisconnect();
}
void AtomToolsApplication::CreateReflectionManager()
{
Base::CreateReflectionManager();
@@ -147,12 +153,21 @@ namespace AtomToolsFramework
m_timer.start();
}
void AtomToolsApplication::OnMainWindowClosing()
{
ExitMainLoop();
}
void AtomToolsApplication::Destroy()
{
// before modules are unloaded, destroy UI to free up any assets it cached
AtomToolsMainWindowFactoryRequestBus::Broadcast(&AtomToolsMainWindowFactoryRequestBus::Handler::DestroyMainWindow);
AzToolsFramework::EditorPythonConsoleNotificationBus::Handler::BusDisconnect();
AzToolsFramework::AssetDatabase::AssetDatabaseRequestsBus::Handler::BusDisconnect();
AtomToolsMainWindowNotificationBus::Handler::BusDisconnect();
AzFramework::AssetSystemRequestBus::Broadcast(&AzFramework::AssetSystem::AssetSystemRequests::StartDisconnectingAssetProcessor);
Base::Destroy();
}
@@ -391,6 +406,10 @@ namespace AtomToolsFramework
LoadSettings();
AtomToolsMainWindowNotificationBus::Handler::BusConnect();
AtomToolsMainWindowFactoryRequestBus::Broadcast(&AtomToolsMainWindowFactoryRequestBus::Handler::CreateMainWindow);
auto editorPythonEventsInterface = AZ::Interface<AzToolsFramework::EditorPythonEventsInterface>::Get();
if (editorPythonEventsInterface)
{
@@ -438,6 +457,8 @@ namespace AtomToolsFramework
void AtomToolsApplication::Stop()
{
AtomToolsMainWindowFactoryRequestBus::Broadcast(&AtomToolsMainWindowFactoryRequestBus::Handler::DestroyMainWindow);
UnloadSettings();
Base::Stop();
}
@@ -1,31 +0,0 @@
/*
* 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
#include <AzCore/EBus/EBus.h>
namespace MaterialEditor
{
//! MaterialEditorWindowFactoryRequestBus provides
class MaterialEditorWindowFactoryRequests
: public AZ::EBusTraits
{
public:
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
/// Creates and shows the MaterialEditorWindow
virtual void CreateMaterialEditorWindow() = 0;
//! Destroys material editor window and releases all cached assets
virtual void DestroyMaterialEditorWindow() = 0;
};
using MaterialEditorWindowFactoryRequestBus = AZ::EBus<MaterialEditorWindowFactoryRequests>;
} // namespace MaterialEditor
@@ -6,8 +6,6 @@
*
*/
#include <AtomToolsFramework/Util/Util.h>
#include <Atom/RPI.Edit/Common/AssetUtils.h>
#include <Atom/RPI.Public/RPISystemInterface.h>
@@ -17,8 +15,9 @@
#include <Atom/Viewport/MaterialViewportModule.h>
#include <Atom/Window/MaterialEditorWindowModule.h>
#include <Atom/Window/MaterialEditorWindowFactoryRequestBus.h>
#include <Atom/Window/MaterialEditorWindowRequestBus.h>
#include <AtomToolsFramework/Util/Util.h>
#include <AtomToolsFramework/Window/AtomToolsMainWindowRequestBus.h>
#include <AzCore/IO/Path/Path.h>
#include <AzCore/Utils/Utils.h>
@@ -84,7 +83,6 @@ namespace MaterialEditor
MaterialEditorApplication::~MaterialEditorApplication()
{
AzToolsFramework::AssetDatabase::AssetDatabaseRequestsBus::Handler::BusDisconnect();
MaterialEditorWindowNotificationBus::Handler::BusDisconnect();
AzToolsFramework::EditorPythonConsoleNotificationBus::Handler::BusDisconnect();
}
@@ -96,22 +94,6 @@ namespace MaterialEditor
outModules.push_back(aznew MaterialEditorWindowModule);
}
void MaterialEditorApplication::OnMaterialEditorWindowClosing()
{
ExitMainLoop();
}
void MaterialEditorApplication::Destroy()
{
// before modules are unloaded, destroy UI to free up any assets it cached
MaterialEditor::MaterialEditorWindowFactoryRequestBus::Broadcast(
&MaterialEditor::MaterialEditorWindowFactoryRequestBus::Handler::DestroyMaterialEditorWindow);
MaterialEditorWindowNotificationBus::Handler::BusDisconnect();
Base::Destroy();
}
AZStd::vector<AZStd::string> MaterialEditorApplication::GetCriticalAssetFilters() const
{
return AZStd::vector<AZStd::string>({ "passes/", "config/", "MaterialEditor" });
@@ -122,8 +104,8 @@ namespace MaterialEditor
const AZStd::string activateWindowSwitchName = "activatewindow";
if (commandLine.HasSwitch(activateWindowSwitchName))
{
MaterialEditor::MaterialEditorWindowRequestBus::Broadcast(
&MaterialEditor::MaterialEditorWindowRequestBus::Handler::ActivateWindow);
AtomToolsFramework::AtomToolsMainWindowRequestBus::Broadcast(
&AtomToolsFramework::AtomToolsMainWindowRequestBus::Handler::ActivateWindow);
}
// Process command line options for opening one or more material documents on startup
@@ -138,22 +120,4 @@ namespace MaterialEditor
Base::ProcessCommandLine(commandLine);
}
void MaterialEditorApplication::StartInternal()
{
Base::StartInternal();
MaterialEditorWindowNotificationBus::Handler::BusConnect();
MaterialEditor::MaterialEditorWindowFactoryRequestBus::Broadcast(
&MaterialEditor::MaterialEditorWindowFactoryRequestBus::Handler::CreateMaterialEditorWindow);
}
void MaterialEditorApplication::Stop()
{
MaterialEditor::MaterialEditorWindowFactoryRequestBus::Broadcast(
&MaterialEditor::MaterialEditorWindowFactoryRequestBus::Handler::DestroyMaterialEditorWindow);
Base::Stop();
}
} // namespace MaterialEditor
@@ -9,7 +9,6 @@
#pragma once
#include <Atom/Document/MaterialDocumentSystemRequestBus.h>
#include <Atom/Window/MaterialEditorWindowNotificationBus.h>
#include <AtomToolsFramework/Application/AtomToolsApplication.h>
#include <QTimer>
@@ -20,7 +19,6 @@ namespace MaterialEditor
class MaterialEditorApplication
: public AtomToolsFramework::AtomToolsApplication
, private MaterialEditorWindowNotificationBus::Handler
{
public:
AZ_TYPE_INFO(MaterialEditor::MaterialEditorApplication, "{30F90CA5-1253-49B5-8143-19CEE37E22BB}");
@@ -34,21 +32,9 @@ namespace MaterialEditor
// AzFramework::Application
void CreateStaticModules(AZStd::vector<AZ::Module*>& outModules) override;
const char* GetCurrentConfigurationName() const override;
void Stop() override;
private:
//////////////////////////////////////////////////////////////////////////
// MaterialEditorWindowNotificationBus::Handler overrides...
void OnMaterialEditorWindowClosing() override;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// AzFramework::Application overrides...
void Destroy() override;
//////////////////////////////////////////////////////////////////////////
void ProcessCommandLine(const AZ::CommandLine& commandLine) override;
void StartInternal() override;
AZStd::string GetBuildTargetName() const override;
//! List of common asset filters for things that need to be compiled to run the material editor
@@ -186,7 +186,7 @@ namespace MaterialEditor
windowSettings->m_mainWindowState.assign(windowState.begin(), windowState.end());
AtomToolsFramework::AtomToolsMainWindowNotificationBus::Broadcast(
&AtomToolsFramework::AtomToolsMainWindowNotifications::OnAtomToolsMainWindowWindowClosing);
&AtomToolsFramework::AtomToolsMainWindowNotifications::OnMainWindowClosing);
}
void MaterialEditorWindow::OnDocumentOpened(const AZ::Uuid& documentId)
@@ -9,7 +9,6 @@
set(FILES
Include/Atom/Window/MaterialEditorWindowModule.h
Include/Atom/Window/MaterialEditorWindowSettings.h
Include/Atom/Window/MaterialEditorWindowFactoryRequestBus.h
Source/Window/MaterialEditorBrowserInteractions.h
Source/Window/MaterialEditorBrowserInteractions.cpp
Source/Window/MaterialEditorWindow.h
@@ -1,33 +0,0 @@
/*
* 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
#include <AzCore/EBus/EBus.h>
#include <AzCore/std/containers/vector.h>
#include <AzCore/Asset/AssetCommon.h>
namespace ShaderManagementConsole
{
//! ShaderManagementConsoleWindowRequestBus provides
class ShaderManagementConsoleWindowRequests
: public AZ::EBusTraits
{
public:
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
/// Creates and shows main window
virtual void CreateShaderManagementConsoleWindow() = 0;
//! Destroys main window
virtual void DestroyShaderManagementConsoleWindow() = 0;
};
using ShaderManagementConsoleWindowRequestBus = AZ::EBus<ShaderManagementConsoleWindowRequests>;
} // namespace ShaderManagementConsole
@@ -35,7 +35,6 @@
#include <Atom/Document/ShaderManagementConsoleDocumentSystemRequestBus.h>
#include <Atom/Window/ShaderManagementConsoleWindowModule.h>
#include <Atom/Window/ShaderManagementConsoleWindowRequestBus.h>
#include <AzCore/IO/Path/Path.h>
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
#include <AzCore/Utils/Utils.h>
@@ -77,6 +76,12 @@ namespace ShaderManagementConsole
*AZ::SettingsRegistry::Get(), GetBuildTargetName());
}
ShaderManagementConsoleApplication::~ShaderManagementConsoleApplication()
{
AzToolsFramework::AssetDatabase::AssetDatabaseRequestsBus::Handler::BusDisconnect();
AzToolsFramework::EditorPythonConsoleNotificationBus::Handler::BusDisconnect();
}
void ShaderManagementConsoleApplication::CreateStaticModules(AZStd::vector<AZ::Module*>& outModules)
{
Base::CreateStaticModules(outModules);
@@ -84,23 +89,6 @@ namespace ShaderManagementConsole
outModules.push_back(aznew ShaderManagementConsoleWindowModule);
}
void ShaderManagementConsoleApplication::OnShaderManagementConsoleWindowClosing()
{
ExitMainLoop();
ShaderManagementConsoleWindowNotificationBus::Handler::BusDisconnect();
AzToolsFramework::EditorPythonConsoleNotificationBus::Handler::BusDisconnect();
}
void ShaderManagementConsoleApplication::Destroy()
{
// before modules are unloaded, destroy UI to free up any assets it cached
ShaderManagementConsole::ShaderManagementConsoleWindowRequestBus::Broadcast(&ShaderManagementConsole::ShaderManagementConsoleWindowRequestBus::Handler::DestroyShaderManagementConsoleWindow);
ShaderManagementConsoleWindowNotificationBus::Handler::BusDisconnect();
Base::Destroy();
}
AZStd::vector<AZStd::string> ShaderManagementConsoleApplication::GetCriticalAssetFilters() const
{
return AZStd::vector<AZStd::string>({ "passes/", "config/" });
@@ -129,13 +117,4 @@ namespace ShaderManagementConsole
ShaderManagementConsoleDocumentSystemRequestBus::Broadcast(&ShaderManagementConsoleDocumentSystemRequestBus::Events::OpenDocument, openDocumentPath);
}
}
void ShaderManagementConsoleApplication::StartInternal()
{
Base::StartInternal();
ShaderManagementConsoleWindowNotificationBus::Handler::BusConnect();
ShaderManagementConsole::ShaderManagementConsoleWindowRequestBus::Broadcast(&ShaderManagementConsole::ShaderManagementConsoleWindowRequestBus::Handler::CreateShaderManagementConsoleWindow);
}
} // namespace ShaderManagementConsole
@@ -9,7 +9,6 @@
#pragma once
#include <Atom/Document/ShaderManagementConsoleDocumentSystemRequestBus.h>
#include <Atom/Window/ShaderManagementConsoleWindowNotificationBus.h>
#include <AtomToolsFramework/Application/AtomToolsApplication.h>
#include <QTimer>
@@ -18,7 +17,6 @@ namespace ShaderManagementConsole
{
class ShaderManagementConsoleApplication
: public AtomToolsFramework::AtomToolsApplication
, private ShaderManagementConsoleWindowNotificationBus::Handler
{
public:
AZ_TYPE_INFO(ShaderManagementConsole::ShaderManagementConsoleApplication, "{A31B1AEB-4DA3-49CD-884A-CC998FF7546F}");
@@ -26,7 +24,7 @@ namespace ShaderManagementConsole
using Base = AtomToolsFramework::AtomToolsApplication;
ShaderManagementConsoleApplication(int* argc, char*** argv);
virtual ~ShaderManagementConsoleApplication() = default;
virtual ~ShaderManagementConsoleApplication();
//////////////////////////////////////////////////////////////////////////
// AzFramework::Application
@@ -34,18 +32,7 @@ namespace ShaderManagementConsole
const char* GetCurrentConfigurationName() const override;
private:
//////////////////////////////////////////////////////////////////////////
// ShaderManagementConsoleWindowNotificationBus::Handler overrides...
void OnShaderManagementConsoleWindowClosing() override;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
// AzFramework::Application overrides...
void Destroy() override;
//////////////////////////////////////////////////////////////////////////
void ProcessCommandLine();
void StartInternal() override;
AZStd::string GetBuildTargetName() const override;
AZStd::vector<AZStd::string> GetCriticalAssetFilters() const override;
};
@@ -82,7 +82,7 @@ namespace ShaderManagementConsole
}
AtomToolsFramework::AtomToolsMainWindowNotificationBus::Broadcast(
&AtomToolsFramework::AtomToolsMainWindowNotifications::OnAtomToolsMainWindowWindowClosing);
&AtomToolsFramework::AtomToolsMainWindowNotifications::OnMainWindowClosing);
}
void ShaderManagementConsoleWindow::OnDocumentOpened(const AZ::Uuid& documentId)
@@ -44,12 +44,12 @@ namespace ShaderManagementConsole
if (AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
{
behaviorContext->EBus<ShaderManagementConsoleWindowRequestBus>("ShaderManagementConsoleWindowRequestBus")
behaviorContext->EBus<ShaderManagementConsoleWindowFactoryRequestBus>("ShaderManagementConsoleWindowRequestBus")
->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation)
->Attribute(AZ::Script::Attributes::Category, "Editor")
->Attribute(AZ::Script::Attributes::Module, "shadermanagementconsole")
->Event("CreateShaderManagementConsoleWindow", &ShaderManagementConsoleWindowRequestBus::Events::CreateShaderManagementConsoleWindow)
->Event("DestroyShaderManagementConsoleWindow", &ShaderManagementConsoleWindowRequestBus::Events::DestroyShaderManagementConsoleWindow)
->Event("CreateShaderManagementConsoleWindow", &ShaderManagementConsoleWindowFactoryRequestBus::Events::CreateShaderManagementConsoleWindow)
->Event("DestroyShaderManagementConsoleWindow", &ShaderManagementConsoleWindowFactoryRequestBus::Events::DestroyShaderManagementConsoleWindow)
;
behaviorContext->EBus<ShaderManagementConsoleRequestBus>("ShaderManagementConsoleRequestBus")
@@ -87,7 +87,7 @@ namespace ShaderManagementConsole
void ShaderManagementConsoleWindowComponent::Activate()
{
AzToolsFramework::EditorWindowRequestBus::Handler::BusConnect();
ShaderManagementConsoleWindowRequestBus::Handler::BusConnect();
ShaderManagementConsoleWindowFactoryRequestBus::Handler::BusConnect();
ShaderManagementConsoleRequestBus::Handler::BusConnect();
AzToolsFramework::SourceControlConnectionRequestBus::Broadcast(&AzToolsFramework::SourceControlConnectionRequests::EnableSourceControl, true);
}
@@ -95,7 +95,7 @@ namespace ShaderManagementConsole
void ShaderManagementConsoleWindowComponent::Deactivate()
{
ShaderManagementConsoleRequestBus::Handler::BusDisconnect();
ShaderManagementConsoleWindowRequestBus::Handler::BusDisconnect();
ShaderManagementConsoleWindowFactoryRequestBus::Handler::BusDisconnect();
AzToolsFramework::EditorWindowRequestBus::Handler::BusDisconnect();
m_window.reset();
@@ -13,7 +13,7 @@
#include <Atom/RPI.Reflect/Material/MaterialAsset.h>
#include <Atom/Window/ShaderManagementConsoleWindowRequestBus.h>
#include <Atom/Window/ShaderManagementConsoleWindowFactoryRequestBus.h>
#include <Atom/Core/ShaderManagementConsoleRequestBus.h>
#include <Source/Window/ShaderManagementConsoleBrowserInteractions.h>
#include <Source/Window/ShaderManagementConsoleWindow.h>
@@ -24,7 +24,7 @@ namespace ShaderManagementConsole
//! used for initialization and registration of other classes, including ShaderManagementConsoleWindow.
class ShaderManagementConsoleWindowComponent
: public AZ::Component
, private ShaderManagementConsoleWindowRequestBus::Handler
, private ShaderManagementConsoleWindowFactoryRequestBus::Handler
, private ShaderManagementConsoleRequestBus::Handler
, private AzToolsFramework::EditorWindowRequestBus::Handler
{
@@ -8,7 +8,6 @@
set(FILES
Include/Atom/Window/ShaderManagementConsoleWindowModule.h
Include/Atom/Window/ShaderManagementConsoleWindowRequestBus.h
Include/Atom/Core/ShaderManagementConsoleRequestBus.h
Source/Window/ShaderManagementConsoleBrowserInteractions.h
Source/Window/ShaderManagementConsoleBrowserInteractions.cpp