#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "workspace/ModelInfo.h" #include "ui/ModelBrowser/PresetModelListWidget.h" namespace Ui { class PresetModelPanel; } class DockWidget; /** * @brief Preset model panel class * * Provides preset 3D models for users to drag into the 3D scene. * Dynamically creates UI based on configuration files, supporting any number of categories. */ class PresetModelPanel : public QWidget { Q_OBJECT public: explicit PresetModelPanel(QWidget *parent = nullptr); ~PresetModelPanel() override; /** * @brief Attach to dock widget * @param dockWidget Dock widget pointer */ void AttachDock(DockWidget* dockWidget); private: /** * @brief Initialize user interface */ void InitUI(); /** * @brief Create dynamic UI based on configuration */ void CreateDynamicUI(); /** * @brief Load models from configuration file */ void LoadModelsFromConfig(); /** * @brief Clear all dynamic UI elements */ void ClearDynamicUI(); private: Ui::PresetModelPanel *ui; // Dynamic UI management QMap categoryWidgets_; QMap categoryPages_; // Drag and drop support QPoint dragStartPosition_; QListWidget* dragSourceWidget_; };