#pragma once #include #include #include #include #include #include #include #include #include #include #include "PresetModelConfigParser.h" QT_BEGIN_NAMESPACE namespace Ui { class PresetModelPanel; } QT_END_NAMESPACE class DockWidget; /** * @brief Preset model panel class * * Provides preset 3D models for users to drag into the 3D scene, including: * - Ships: Destroyer, Aircraft Carrier * - Satellites: Geostationary Satellites * - Missiles: Hypersonic Missiles * - Jammers: Passive Jammers, Active Jammers */ 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); Q_SIGNALS: /** * @brief Signal emitted when model is dragged to scene * @param modelType Model type * @param modelName Model name * @param position Scene position (optional) */ void ModelDropped(const QString& modelType, const QString& modelName, const QPointF& position = QPointF()); private slots: /** * @brief Handle model item double click event * @param item Clicked item */ void OnModelItemDoubleClicked(QListWidgetItem* item); private: /** * @brief Initialize user interface */ void InitUI(); /** * @brief Populate model list with items * @param listWidget List widget to populate * @param modelType Model type * @param models Model name list */ void PopulateModelList(QListWidget* listWidget, const QString& modelType, const QStringList& models); /** * @brief Setup drag and drop functionality * @param listWidget List widget to setup drag and drop */ void SetupDragAndDrop(QListWidget* listWidget); /** * @brief Load models from configuration file */ void LoadModelsFromConfig(); /** * @brief Load default models when config is unavailable */ void LoadDefaultModels(); private: Ui::PresetModelPanel *ui; PresetModelConfigParser m_configParser; }; /** * @brief Custom list widget with drag and drop support */ class DraggableListWidget : public QListWidget { Q_OBJECT public: explicit DraggableListWidget(const QString& modelType, QWidget* parent = nullptr); Q_SIGNALS: void ItemDragged(const QString& modelType, const QString& modelName); protected: void mousePressEvent(QMouseEvent* event) override; void mouseMoveEvent(QMouseEvent* event) override; private: QString modelType_; QPoint dragStartPosition_; };