diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h index 2cc6621cec..edb8ff4322 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Include/AtomToolsFramework/Window/AtomToolsMainWindow.h @@ -53,6 +53,7 @@ namespace AtomToolsFramework QWidget* m_centralWidget = nullptr; QMenuBar* m_menuBar = nullptr; AzQtComponents::TabWidget* m_tabWidget = nullptr; + QStatusBar* m_statusBar = nullptr; AZStd::unordered_map m_dockWidgets; diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp index 849169e2e3..ffc618c574 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Window/AtomToolsMainWindow.cpp @@ -31,6 +31,10 @@ namespace AtomToolsFramework m_tabWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); m_tabWidget->setContentsMargins(0, 0, 0, 0); + m_statusBar = new QStatusBar(this); + m_statusBar->setObjectName("StatusBar"); + statusBar()->addPermanentWidget(m_statusBar, 1); + AtomToolsMainWindowRequestBus::Handler::BusConnect(); } diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp index 96a94ebfcc..733a01539e 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.cpp @@ -101,10 +101,6 @@ namespace MaterialEditor m_centralWidget->setLayout(vl); setCentralWidget(m_centralWidget); - m_statusBar = new StatusBarWidget(this); - m_statusBar->setObjectName("StatusBar"); - statusBar()->addPermanentWidget(m_statusBar, 1); - SetupMenu(); SetupTabs(); @@ -245,7 +241,8 @@ namespace MaterialEditor const QString documentPath = GetDocumentPath(documentId); if (!documentPath.isEmpty()) { - m_statusBar->UpdateStatusInfo(QString("Material opened: %1").arg(documentPath)); + const QString status = QString("Material closed: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } } @@ -254,7 +251,8 @@ namespace MaterialEditor RemoveTabForDocumentId(documentId); const QString documentPath = GetDocumentPath(documentId); - m_statusBar->UpdateStatusInfo(QString("Material closed: %1").arg(documentPath)); + const QString status = QString("Material closed: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } void MaterialEditorWindow::OnDocumentModified(const AZ::Uuid& documentId) @@ -280,7 +278,8 @@ namespace MaterialEditor UpdateTabForDocumentId(documentId); const QString documentPath = GetDocumentPath(documentId); - m_statusBar->UpdateStatusInfo(QString("Material saved: %1").arg(documentPath)); + const QString status = QString("Material closed: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } void MaterialEditorWindow::SetupMenu() @@ -321,7 +320,8 @@ namespace MaterialEditor if (!result) { const QString documentPath = GetDocumentPath(documentId); - m_statusBar->UpdateStatusError(QString("Failed to save material: %1").arg(documentPath)); + const QString status = QString("Failed to save material: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } }, QKeySequence::Save); @@ -334,7 +334,8 @@ namespace MaterialEditor documentId, AtomToolsFramework::GetSaveFileInfo(documentPath).absoluteFilePath().toUtf8().constData()); if (!result) { - m_statusBar->UpdateStatusError(QString("Failed to save material: %1").arg(documentPath)); + const QString status = QString("Failed to save material: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } }, QKeySequence::SaveAs); @@ -347,7 +348,8 @@ namespace MaterialEditor documentId, AtomToolsFramework::GetSaveFileInfo(documentPath).absoluteFilePath().toUtf8().constData()); if (!result) { - m_statusBar->UpdateStatusError(QString("Failed to save material: %1").arg(documentPath)); + const QString status = QString("Failed to save material: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } }); @@ -356,7 +358,8 @@ namespace MaterialEditor MaterialDocumentSystemRequestBus::BroadcastResult(result, &MaterialDocumentSystemRequestBus::Events::SaveAllDocuments); if (!result) { - m_statusBar->UpdateStatusError(QString("Failed to save materials.")); + const QString status = QString("Failed to save materials."); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } }); @@ -401,7 +404,8 @@ namespace MaterialEditor if (!result) { const QString documentPath = GetDocumentPath(documentId); - m_statusBar->UpdateStatusError(QString("Failed to perform Undo in material: %1").arg(documentPath)); + const QString status = QString("Failed to perform Undo in material: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } }, QKeySequence::Undo); @@ -412,7 +416,8 @@ namespace MaterialEditor if (!result) { const QString documentPath = GetDocumentPath(documentId); - m_statusBar->UpdateStatusError(QString("Failed to perform Undo in material: %1").arg(documentPath)); + const QString status = QString("Failed to perform Undo in material: %1").arg(documentPath); + m_statusBar->setWindowIconText(QString("%1").arg(status)); } }, QKeySequence::Redo); @@ -505,6 +510,10 @@ namespace MaterialEditor AtomToolsMainWindow::AddTabForDocumentId(documentId); + // Blocking signals from the tab bar so the currentChanged signal is not sent while a document is already being opened. + // This prevents the OnDocumentOpened notification from being sent recursively. + const QSignalBlocker blocker(m_tabWidget); + // Create a new tab for the document ID and assign it's label to the file name of the document. AZStd::string absolutePath; MaterialDocumentRequestBus::EventResult(absolutePath, documentId, &MaterialDocumentRequestBus::Events::GetAbsolutePath); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h index a443f04ebe..65c13a094d 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialEditorWindow.h @@ -113,7 +113,5 @@ namespace MaterialEditor QMenu* m_menuHelp = {}; QAction* m_actionHelp = {}; QAction* m_actionAbout = {}; - - StatusBarWidget* m_statusBar = {}; }; } // namespace MaterialEditor diff --git a/Gems/Atom/Tools/MaterialEditor/Code/materialeditorwindow_files.cmake b/Gems/Atom/Tools/MaterialEditor/Code/materialeditorwindow_files.cmake index f5891a5c2b..caef9916f6 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/materialeditorwindow_files.cmake +++ b/Gems/Atom/Tools/MaterialEditor/Code/materialeditorwindow_files.cmake @@ -42,15 +42,15 @@ set(FILES Source/Window/PerformanceMonitor/PerformanceMonitorWidget.cpp Source/Window/PerformanceMonitor/PerformanceMonitorWidget.h Source/Window/PerformanceMonitor/PerformanceMonitorWidget.ui + Source/Window/StatusBar/StatusBarWidget.cpp + Source/Window/StatusBar/StatusBarWidget.h + Source/Window/StatusBar/StatusBarWidget.ui Source/Window/ToolBar/MaterialEditorToolBar.h Source/Window/ToolBar/MaterialEditorToolBar.cpp Source/Window/ToolBar/ModelPresetComboBox.h Source/Window/ToolBar/ModelPresetComboBox.cpp Source/Window/ToolBar/LightingPresetComboBox.h Source/Window/ToolBar/LightingPresetComboBox.cpp - Source/Window/StatusBar/StatusBarWidget.cpp - Source/Window/StatusBar/StatusBarWidget.h - Source/Window/StatusBar/StatusBarWidget.ui Source/Window/MaterialInspector/MaterialInspector.h Source/Window/MaterialInspector/MaterialInspector.cpp Source/Window/ViewportSettingsInspector/ViewportSettingsInspector.h diff --git a/Gems/Atom/Tools/ShaderManagementConsole/Code/Source/Window/ShaderManagementConsoleWindow.cpp b/Gems/Atom/Tools/ShaderManagementConsole/Code/Source/Window/ShaderManagementConsoleWindow.cpp index 05f88655ca..e02ab83597 100644 --- a/Gems/Atom/Tools/ShaderManagementConsole/Code/Source/Window/ShaderManagementConsoleWindow.cpp +++ b/Gems/Atom/Tools/ShaderManagementConsole/Code/Source/Window/ShaderManagementConsoleWindow.cpp @@ -303,6 +303,10 @@ namespace ShaderManagementConsole AtomToolsMainWindow::AddTabForDocumentId(documentId); + // Blocking signals from the tab bar so the currentChanged signal is not sent while a document is already being opened. + // This prevents the OnDocumentOpened notification from being sent recursively. + const QSignalBlocker blocker(m_tabWidget); + // Create a new tab for the document ID and assign it's label to the file name of the document. AZStd::string absolutePath; ShaderManagementConsoleDocumentRequestBus::EventResult(absolutePath, documentId, &ShaderManagementConsoleDocumentRequestBus::Events::GetAbsolutePath);