#pragma once #include #include #include #include #include #include #include #include #include #include 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 Create ship category page * @return Ship page widget */ QWidget* CreateShipPage(); /** * @brief Create satellite category page * @return Satellite page widget */ QWidget* CreateSatellitePage(); /** * @brief Create missile category page * @return Missile page widget */ QWidget* CreateMissilePage(); /** * @brief Create jammer category page * @return Jammer page widget */ QWidget* CreateJammerPage(); /** * @brief Create model list items * @param parent Parent widget * @param modelType Model type * @param models Model name list * @return Configured QListWidget */ QListWidget* CreateModelList(QWidget* parent, 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); private: QToolBox* toolBox_; QVBoxLayout* mainLayout_; QListWidget* shipList_; QListWidget* satelliteList_; QListWidget* missileList_; QListWidget* jammerList_; }; /** * @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_; };