Split utility window contracts from feature factories

This commit is contained in:
2026-04-27 15:37:39 +08:00
parent 66d968c3ce
commit 2e6643b4d1
26 changed files with 294 additions and 208 deletions

View File

@@ -15,9 +15,11 @@ class DefaultEditorWindowContentFactory final : public EditorWindowContentFactor
public:
DefaultEditorWindowContentFactory(
EditorWindowSystem& windowSystem,
EditorWorkspacePanelRuntimeSetFactory workspacePanelFactory)
EditorWorkspacePanelRuntimeSetFactory workspacePanelFactory,
EditorUtilityWindowPanelFactory utilityPanelFactory)
: m_windowSystem(windowSystem)
, m_workspacePanelFactory(std::move(workspacePanelFactory)) {}
, m_workspacePanelFactory(std::move(workspacePanelFactory))
, m_utilityPanelFactory(std::move(utilityPanelFactory)) {}
std::unique_ptr<EditorWindowContentController> CreateWorkspaceContentController(
const UIEditorWindowWorkspaceState& windowState) const override {
@@ -33,22 +35,31 @@ public:
std::unique_ptr<EditorWindowContentController> CreateUtilityContentController(
const EditorUtilityWindowDescriptor& descriptor) const override {
return CreateEditorUtilityWindowContentController(descriptor);
std::unique_ptr<EditorUtilityWindowPanel> panel =
m_utilityPanelFactory
? m_utilityPanelFactory(descriptor.kind)
: nullptr;
return CreateEditorUtilityWindowContentController(
descriptor,
std::move(panel));
}
private:
EditorWindowSystem& m_windowSystem;
EditorWorkspacePanelRuntimeSetFactory m_workspacePanelFactory = {};
EditorUtilityWindowPanelFactory m_utilityPanelFactory = {};
};
} // namespace
std::unique_ptr<EditorWindowContentFactory> CreateDefaultEditorWindowContentFactory(
EditorWindowSystem& windowSystem,
EditorWorkspacePanelRuntimeSetFactory workspacePanelFactory) {
EditorWorkspacePanelRuntimeSetFactory workspacePanelFactory,
EditorUtilityWindowPanelFactory utilityPanelFactory) {
return std::make_unique<DefaultEditorWindowContentFactory>(
windowSystem,
std::move(workspacePanelFactory));
std::move(workspacePanelFactory),
std::move(utilityPanelFactory));
}
} // namespace XCEngine::UI::Editor::App