#pragma once #include "rendering/view.h" #include namespace Donut { class Scene; // What a workspace gets each frame to build its panels. `scene` is mutable — // workspaces edit the document through it. struct UIContext { Scene& scene; std::string device_name; }; // A Dorico-style workspace: one tab that owns its side panels and declares // which viewport View it shows. Switching tabs switches both. Concrete // workspaces (Setup / Scene / Simulation / Export) live in ui_layer.cpp. class Workspace { public: virtual ~Workspace() = default; virtual auto name() const -> const char* = 0; virtual auto view() const -> View = 0; virtual auto on_ui(const UIContext& ctx) -> void = 0; }; }