Files
o3de/Code/Editor/Plugins/EditorCommon/WinWidget/WinWidget.h
T
Steve Pham b4a2edec6a Final update copyright headers to reference license files at the repo root (#1693)
* Final update copyright headers to reference license files at the repo root

Signed-off-by: spham <spham@amazon.com>

* Fix copyright validator unit tests to support the stale O3DE header scenario

Signed-off-by: spham <spham@amazon.com>
2021-06-30 19:51:55 -07:00

59 lines
1.8 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
#include "EditorCommonAPI.h"
#include "IEditor.h"
#include <WinWidget/WinWidgetManager.h>
#include <Core/QtEditorApplication.h>
#include <QWidget>
namespace WinWidget
{
template<class TWidget>
bool RegisterWinWidget()
{
static QWidget* winWidget {nullptr}; // Must declare outside of lambda
WinWidget::WinWidgetManager::WinWidgetCreateCall createCall = []() -> QWidget*
{
if (!winWidget)
{
winWidget = new QWidget(GetIEditor()->GetEditorMainWindow());
}
// Ensure only one instance of each window type exists
QList<TWidget*> existingWidgets = winWidget->findChildren<TWidget*>();
if (existingWidgets.size() > 0) // Note that the list should contain 0 or 1 entries
{
if (existingWidgets.first()->isVisible())
{
return nullptr; // TWidget type already in use - continue using it and don't create another
}
delete existingWidgets.first(); // Closed TWidget - remove
}
TWidget* createWidget = new TWidget(winWidget);
createWidget->Display();
return winWidget;
};
return GetIEditor()->GetWinWidgetManager()->RegisterWinWidget(TWidget::GetWWId(), createCall);
}
template<class TWidget>
void UnregisterWinWidget()
{
GetIEditor()->GetWinWidgetManager()->UnregisterWinWidget(TWidget::GetWWId());
}
}