/* * 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 #include #include namespace WinWidget { template 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 existingWidgets = winWidget->findChildren(); 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 void UnregisterWinWidget() { GetIEditor()->GetWinWidgetManager()->UnregisterWinWidget(TWidget::GetWWId()); } }