AtomToolsMainWindowRequestBus
Signed-off-by: Dayo Lawal <lawalfua@amazon.com>
This commit is contained in:
+18
-4
@@ -8,6 +8,7 @@
|
||||
|
||||
#pragma once
|
||||
#include <AzCore/Memory/SystemAllocator.h>
|
||||
#include <AtomToolsFramework/Window/AtomToolsMainWindowRequestBus.h>
|
||||
|
||||
#include <AzQtComponents/Components/DockMainWindow.h>
|
||||
#include <AzQtComponents/Components/FancyDocking.h>
|
||||
@@ -22,14 +23,19 @@ namespace AtomToolsFramework
|
||||
{
|
||||
class AtomToolsMainWindow
|
||||
: public AzQtComponents::DockMainWindow
|
||||
, protected AtomToolsFramework::AtomToolsMainWindowRequestBus::Handler
|
||||
{
|
||||
public:
|
||||
AtomToolsMainWindow(QWidget* parent = 0);
|
||||
~AtomToolsMainWindow();
|
||||
|
||||
protected:
|
||||
AzQtComponents::FancyDocking* m_advancedDockManager = nullptr;
|
||||
QWidget* m_centralWidget = nullptr;
|
||||
QMenuBar* m_menuBar = nullptr;
|
||||
AzQtComponents::TabWidget* m_tabWidget = nullptr;
|
||||
void ActivateWindow() override;
|
||||
bool AddDockWidget(const AZStd::string& name, QWidget* widget, uint32_t area, uint32_t orientation) override;
|
||||
void RemoveDockWidget(const AZStd::string& name) override;
|
||||
void SetDockWidgetVisible(const AZStd::string& name, bool visible) override;
|
||||
bool IsDockWidgetVisible(const AZStd::string& name) const override;
|
||||
AZStd::vector<AZStd::string> GetDockWidgetNames() const override;
|
||||
|
||||
virtual void SetupMenu();
|
||||
|
||||
@@ -43,6 +49,14 @@ namespace AtomToolsFramework
|
||||
virtual void SelectPreviousTab();
|
||||
virtual void SelectNextTab();
|
||||
|
||||
AzQtComponents::FancyDocking* m_advancedDockManager = nullptr;
|
||||
QWidget* m_centralWidget = nullptr;
|
||||
QMenuBar* m_menuBar = nullptr;
|
||||
AzQtComponents::TabWidget* m_tabWidget = nullptr;
|
||||
|
||||
AZStd::unordered_map<AZStd::string, AzQtComponents::StyledDockWidget*> m_dockWidgets;
|
||||
|
||||
QMenu* m_menuFile = {};
|
||||
//StatusBarWidget* m_statusBar = {};
|
||||
};
|
||||
}
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 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 AtomToolsFramework
|
||||
{
|
||||
//! AtomToolsMainWindowFactoryRequestBus provides
|
||||
class AtomToolsMainWindowFactoryRequests : public AZ::EBusTraits
|
||||
{
|
||||
public:
|
||||
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;
|
||||
|
||||
//! Destroys material editor window and releases all cached assets
|
||||
virtual void DestroyAtomToolsMainWindow() = 0;
|
||||
};
|
||||
using AtomToolsMainWindowFactoryRequestBus = AZ::EBus<AtomToolsMainWindowFactoryRequests>;
|
||||
|
||||
} // namespace AtomToolsFramework
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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
|
||||
#pragma warning(disable : 4100)
|
||||
#include <AzCore/EBus/EBus.h>
|
||||
#include <AzCore/std/containers/vector.h>
|
||||
#include <AzCore/std/string/string.h>
|
||||
|
||||
class QWidget;
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
//! AtomToolsMainWindowRequestBus provides
|
||||
class AtomToolsMainWindowRequests : public AZ::EBusTraits
|
||||
{
|
||||
public:
|
||||
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
|
||||
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
|
||||
|
||||
//! Bring main window to foreground
|
||||
virtual void ActivateWindow() = 0;
|
||||
|
||||
//! Add dockable widget in main window
|
||||
//! @param name title of the dockable window
|
||||
//! @param widget docked window content
|
||||
//! @param area location of docked window corresponding to Qt::DockWidgetArea
|
||||
//! @param orientation orientation of docked window corresponding to Qt::Orientation
|
||||
virtual bool AddDockWidget(const AZStd::string& name, QWidget* widget, uint32_t area, uint32_t orientation) = 0;
|
||||
|
||||
//! Destroy dockable widget in main window
|
||||
//! @param name title of the dockable window
|
||||
virtual void RemoveDockWidget(const AZStd::string& name) = 0;
|
||||
|
||||
//! Show or hide dockable widget in main window
|
||||
//! @param name title of the dockable window
|
||||
virtual void SetDockWidgetVisible(const AZStd::string& name, bool visible) = 0;
|
||||
|
||||
//! Determine visibility of dockable widget in main window
|
||||
//! @param name title of the dockable window
|
||||
virtual bool IsDockWidgetVisible(const AZStd::string& name) const = 0;
|
||||
|
||||
//! Get a list of registered docked widget names
|
||||
virtual AZStd::vector<AZStd::string> GetDockWidgetNames() const = 0;
|
||||
|
||||
//! Resizes the Material Editor window to achieve a requested size for the viewport render target.
|
||||
//! (This indicates the size of the render target, not the desktop-scaled QT widget size).
|
||||
virtual void ResizeViewportRenderTarget(uint32_t width, uint32_t height) {};
|
||||
|
||||
//! Forces the viewport's render target to use the given resolution, ignoring the size of the viewport widget.
|
||||
virtual void LockViewportRenderTargetSize(uint32_t width, uint32_t height) {};
|
||||
|
||||
//! Releases the viewport's render target resolution lock, allowing it to match the viewport widget again.
|
||||
virtual void UnlockViewportRenderTargetSize() {};
|
||||
};
|
||||
using AtomToolsMainWindowRequestBus = AZ::EBus<AtomToolsMainWindowRequests>;
|
||||
|
||||
} // namespace AtomToolsFramework
|
||||
@@ -8,7 +8,6 @@
|
||||
|
||||
#include <AtomToolsFramework/Window/AtomToolsMainWindow.h>
|
||||
|
||||
|
||||
namespace AtomToolsFramework
|
||||
{
|
||||
AtomToolsMainWindow::AtomToolsMainWindow(QWidget* parent)
|
||||
@@ -31,6 +30,80 @@ namespace AtomToolsFramework
|
||||
m_tabWidget->setObjectName("TabWidget");
|
||||
m_tabWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred);
|
||||
m_tabWidget->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
AtomToolsMainWindowRequestBus::Handler::BusConnect();
|
||||
}
|
||||
|
||||
AtomToolsMainWindow::~AtomToolsMainWindow()
|
||||
{
|
||||
AtomToolsMainWindowRequestBus::Handler::BusDisconnect();
|
||||
}
|
||||
|
||||
void AtomToolsMainWindow::ActivateWindow()
|
||||
{
|
||||
activateWindow();
|
||||
raise();
|
||||
}
|
||||
|
||||
bool AtomToolsMainWindow::AddDockWidget(const AZStd::string& name, QWidget* widget, uint32_t area, uint32_t orientation)
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end() || !widget)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
auto dockWidget = new AzQtComponents::StyledDockWidget(name.c_str());
|
||||
dockWidget->setObjectName(QString("%1_DockWidget").arg(name.c_str()));
|
||||
dockWidget->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
|
||||
widget->setObjectName(name.c_str());
|
||||
widget->setParent(dockWidget);
|
||||
widget->setMinimumSize(QSize(300, 300));
|
||||
dockWidget->setWidget(widget);
|
||||
addDockWidget(aznumeric_cast<Qt::DockWidgetArea>(area), dockWidget);
|
||||
resizeDocks({ dockWidget }, { 400 }, aznumeric_cast<Qt::Orientation>(orientation));
|
||||
m_dockWidgets[name] = dockWidget;
|
||||
return true;
|
||||
}
|
||||
|
||||
void AtomToolsMainWindow::RemoveDockWidget(const AZStd::string& name)
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end())
|
||||
{
|
||||
delete dockWidgetItr->second;
|
||||
m_dockWidgets.erase(dockWidgetItr);
|
||||
}
|
||||
}
|
||||
|
||||
void AtomToolsMainWindow::SetDockWidgetVisible(const AZStd::string& name, bool visible)
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end())
|
||||
{
|
||||
dockWidgetItr->second->setVisible(visible);
|
||||
}
|
||||
}
|
||||
|
||||
bool AtomToolsMainWindow::IsDockWidgetVisible(const AZStd::string& name) const
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end())
|
||||
{
|
||||
return dockWidgetItr->second->isVisible();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
AZStd::vector<AZStd::string> AtomToolsMainWindow::GetDockWidgetNames() const
|
||||
{
|
||||
AZStd::vector<AZStd::string> names;
|
||||
names.reserve(m_dockWidgets.size());
|
||||
for (const auto& dockWidgetPair : m_dockWidgets)
|
||||
{
|
||||
names.push_back(dockWidgetPair.first);
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
||||
void AtomToolsMainWindow::SetupMenu()
|
||||
@@ -132,4 +205,4 @@ namespace AtomToolsFramework
|
||||
m_tabWidget->setCurrentIndex((m_tabWidget->currentIndex() + 1) % m_tabWidget->count());
|
||||
}
|
||||
}
|
||||
}
|
||||
} // namespace AtomToolsFramework
|
||||
|
||||
@@ -24,7 +24,9 @@ set(FILES
|
||||
Include/AtomToolsFramework/Viewport/RenderViewportWidget.h
|
||||
Include/AtomToolsFramework/Viewport/ModularViewportCameraController.h
|
||||
Include/AtomToolsFramework/Viewport/ModularViewportCameraControllerRequestBus.h
|
||||
Include/AtomToolsFramework/Window/AtomToolsMainWindow.h
|
||||
Include/AtomToolsFramework/Window/AtomToolsMainWindow.h
|
||||
Include/AtomToolsFramework/Window/AtomToolsMainWindowRequestBus.h
|
||||
Include/AtomToolsFramework/Window/AtomToolsMainWindowFactoryRequestBus.h
|
||||
Source/Application/AtomToolsApplication.cpp
|
||||
Source/Communication/LocalServer.cpp
|
||||
Source/Communication/LocalSocket.cpp
|
||||
@@ -41,5 +43,5 @@ set(FILES
|
||||
Source/Util/Util.cpp
|
||||
Source/Viewport/RenderViewportWidget.cpp
|
||||
Source/Viewport/ModularViewportCameraController.cpp
|
||||
Source/Window/AtomToolsMainWindow.cpp
|
||||
Source/Window/AtomToolsMainWindow.cpp
|
||||
)
|
||||
|
||||
@@ -131,7 +131,6 @@ namespace MaterialEditor
|
||||
m_advancedDockManager->restoreState(windowState);
|
||||
}
|
||||
|
||||
MaterialEditorWindowRequestBus::Handler::BusConnect();
|
||||
MaterialDocumentNotificationBus::Handler::BusConnect();
|
||||
OnDocumentOpened(AZ::Uuid::CreateNull());
|
||||
}
|
||||
@@ -139,76 +138,9 @@ namespace MaterialEditor
|
||||
MaterialEditorWindow::~MaterialEditorWindow()
|
||||
{
|
||||
MaterialDocumentNotificationBus::Handler::BusDisconnect();
|
||||
MaterialEditorWindowRequestBus::Handler::BusDisconnect();
|
||||
}
|
||||
|
||||
void MaterialEditorWindow::ActivateWindow()
|
||||
{
|
||||
activateWindow();
|
||||
raise();
|
||||
}
|
||||
|
||||
bool MaterialEditorWindow::AddDockWidget(const AZStd::string& name, QWidget* widget, uint32_t area, uint32_t orientation)
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end() || !widget)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
auto dockWidget = new AzQtComponents::StyledDockWidget(name.c_str());
|
||||
dockWidget->setObjectName(QString("%1_DockWidget").arg(name.c_str()));
|
||||
dockWidget->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
|
||||
widget->setObjectName(name.c_str());
|
||||
widget->setParent(dockWidget);
|
||||
widget->setMinimumSize(QSize(300, 300));
|
||||
dockWidget->setWidget(widget);
|
||||
addDockWidget(aznumeric_cast<Qt::DockWidgetArea>(area), dockWidget);
|
||||
resizeDocks({ dockWidget }, { 400 }, aznumeric_cast<Qt::Orientation>(orientation));
|
||||
m_dockWidgets[name] = dockWidget;
|
||||
return true;
|
||||
}
|
||||
|
||||
void MaterialEditorWindow::RemoveDockWidget(const AZStd::string& name)
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end())
|
||||
{
|
||||
delete dockWidgetItr->second;
|
||||
m_dockWidgets.erase(dockWidgetItr);
|
||||
}
|
||||
}
|
||||
|
||||
void MaterialEditorWindow::SetDockWidgetVisible(const AZStd::string& name, bool visible)
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end())
|
||||
{
|
||||
dockWidgetItr->second->setVisible(visible);
|
||||
}
|
||||
}
|
||||
|
||||
bool MaterialEditorWindow::IsDockWidgetVisible(const AZStd::string& name) const
|
||||
{
|
||||
auto dockWidgetItr = m_dockWidgets.find(name);
|
||||
if (dockWidgetItr != m_dockWidgets.end())
|
||||
{
|
||||
return dockWidgetItr->second->isVisible();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
AZStd::vector<AZStd::string> MaterialEditorWindow::GetDockWidgetNames() const
|
||||
{
|
||||
AZStd::vector<AZStd::string> names;
|
||||
names.reserve(m_dockWidgets.size());
|
||||
for (const auto& dockWidgetPair : m_dockWidgets)
|
||||
{
|
||||
names.push_back(dockWidgetPair.first);
|
||||
}
|
||||
return names;
|
||||
}
|
||||
|
||||
|
||||
void MaterialEditorWindow::ResizeViewportRenderTarget(uint32_t width, uint32_t height)
|
||||
{
|
||||
QSize requestedViewportSize = QSize(width, height) / devicePixelRatioF();
|
||||
|
||||
@@ -46,7 +46,6 @@ namespace MaterialEditor
|
||||
*/
|
||||
class MaterialEditorWindow
|
||||
: public AtomToolsFramework::AtomToolsMainWindow
|
||||
, private MaterialEditorWindowRequestBus::Handler
|
||||
, private MaterialDocumentNotificationBus::Handler
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -59,14 +58,6 @@ namespace MaterialEditor
|
||||
~MaterialEditorWindow();
|
||||
|
||||
private:
|
||||
// MaterialEditorWindowRequestBus::Handler overrides...
|
||||
void ActivateWindow() override;
|
||||
bool AddDockWidget(const AZStd::string& name, QWidget* widget, uint32_t area, uint32_t orientation) override;
|
||||
void RemoveDockWidget(const AZStd::string& name) override;
|
||||
void SetDockWidgetVisible(const AZStd::string& name, bool visible) override;
|
||||
bool IsDockWidgetVisible(const AZStd::string& name) const override;
|
||||
AZStd::vector<AZStd::string> GetDockWidgetNames() const override;
|
||||
|
||||
void ResizeViewportRenderTarget(uint32_t width, uint32_t height) override;
|
||||
void LockViewportRenderTargetSize(uint32_t width, uint32_t height) override;
|
||||
void UnlockViewportRenderTargetSize() override;
|
||||
@@ -92,8 +83,6 @@ namespace MaterialEditor
|
||||
MaterialViewportWidget* m_materialViewport = nullptr;
|
||||
MaterialEditorToolBar* m_toolBar = nullptr;
|
||||
|
||||
AZStd::unordered_map <AZStd::string, AzQtComponents::StyledDockWidget*> m_dockWidgets;
|
||||
|
||||
QAction* m_actionNew = {};
|
||||
QAction* m_actionOpen = {};
|
||||
QAction* m_actionOpenRecent = {};
|
||||
|
||||
+15
-28
@@ -58,24 +58,8 @@ namespace ShaderManagementConsole
|
||||
SetupMenu();
|
||||
SetupTabs();
|
||||
|
||||
m_assetBrowserDockWidget = new AzQtComponents::StyledDockWidget("Asset Browser");
|
||||
m_assetBrowserDockWidget->setObjectName(m_assetBrowserDockWidget->windowTitle());
|
||||
m_assetBrowserDockWidget->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
|
||||
m_assetBrowser = new ShaderManagementConsoleBrowserWidget(m_assetBrowserDockWidget);
|
||||
m_assetBrowser->setMinimumSize(QSize(300, 300));
|
||||
m_assetBrowserDockWidget->setWidget(m_assetBrowser);
|
||||
addDockWidget(Qt::BottomDockWidgetArea, m_assetBrowserDockWidget);
|
||||
resizeDocks({ m_assetBrowserDockWidget }, { 400 }, Qt::Vertical);
|
||||
|
||||
m_pythonTerminalDockWidget = new AzQtComponents::StyledDockWidget("Python Terminal");
|
||||
m_pythonTerminalDockWidget->setObjectName(m_pythonTerminalDockWidget->windowTitle());
|
||||
m_pythonTerminalDockWidget->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetMovable);
|
||||
m_pythonTerminal = new AzToolsFramework::CScriptTermDialog(m_pythonTerminalDockWidget);
|
||||
m_pythonTerminal->setMinimumSize(QSize(300, 300));
|
||||
m_pythonTerminalDockWidget->setWidget(m_pythonTerminal);
|
||||
addDockWidget(Qt::BottomDockWidgetArea, m_pythonTerminalDockWidget);
|
||||
resizeDocks({ m_pythonTerminalDockWidget }, { 400 }, Qt::Vertical);
|
||||
m_pythonTerminalDockWidget->setVisible(false);
|
||||
AddDockWidget("Asset Browser", new ShaderManagementConsoleBrowserWidget, Qt::BottomDockWidgetArea, Qt::Vertical);
|
||||
AddDockWidget("Python Terminal", new AzToolsFramework::CScriptTermDialog, Qt::BottomDockWidgetArea, Qt::Horizontal);
|
||||
|
||||
ShaderManagementConsoleDocumentNotificationBus::Handler::BusConnect();
|
||||
OnDocumentOpened(AZ::Uuid::CreateNull());
|
||||
@@ -256,17 +240,20 @@ namespace ShaderManagementConsole
|
||||
|
||||
m_menuView = m_menuBar->addMenu("&View");
|
||||
|
||||
m_actionAssetBrowser = m_menuView->addAction("&Asset Browser", [this]() {
|
||||
m_assetBrowserDockWidget->setVisible(!m_assetBrowserDockWidget->isVisible());
|
||||
});
|
||||
|
||||
m_actionPythonTerminal = m_menuView->addAction("Python &Terminal", [this]() {
|
||||
m_pythonTerminalDockWidget->setVisible(!m_pythonTerminalDockWidget->isVisible());
|
||||
if (m_pythonTerminalDockWidget->isVisible())
|
||||
m_actionAssetBrowser = m_menuView->addAction(
|
||||
"&Asset Browser",
|
||||
[this]()
|
||||
{
|
||||
// reposition console window on the bottom, otherwise it gets docked in some weird spot...
|
||||
addDockWidget(Qt::BottomDockWidgetArea, m_pythonTerminalDockWidget);
|
||||
}
|
||||
const AZStd::string label = "Asset Browser";
|
||||
SetDockWidgetVisible(label, !IsDockWidgetVisible(label));
|
||||
});
|
||||
|
||||
m_actionPythonTerminal = m_menuView->addAction(
|
||||
"Python &Terminal",
|
||||
[this]()
|
||||
{
|
||||
const AZStd::string label = "Python Terminal";
|
||||
SetDockWidgetVisible(label, !IsDockWidgetVisible(label));
|
||||
});
|
||||
|
||||
m_menuView->addSeparator();
|
||||
|
||||
-5
@@ -79,12 +79,7 @@ namespace ShaderManagementConsole
|
||||
|
||||
void CreateDocumentContent(const AZ::Uuid& documentId, QStandardItemModel* model);
|
||||
|
||||
ShaderManagementConsoleBrowserWidget* m_assetBrowser = nullptr;
|
||||
ShaderManagementConsoleToolBar* m_toolBar = nullptr;
|
||||
AzToolsFramework::CScriptTermDialog* m_pythonTerminal = nullptr;
|
||||
|
||||
AzQtComponents::StyledDockWidget* m_assetBrowserDockWidget = nullptr;
|
||||
AzQtComponents::StyledDockWidget* m_pythonTerminalDockWidget = nullptr;
|
||||
|
||||
QMenu* m_menuNew = {};
|
||||
QAction* m_actionOpen = {};
|
||||
|
||||
Reference in New Issue
Block a user