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.
60 lines
1.8 KiB
C++
60 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());
|
|
}
|
|
}
|