DYTSrouce/src/ui/ModelBrowser/PresetModelPanel.cpp

137 lines
5.2 KiB
C++
Raw Normal View History

2025-10-30 00:15:44 +00:00
#include "ui/ModelBrowser/PresetModelPanel.h"
2025-10-29 00:16:25 +00:00
#include <QApplication>
#include <QDebug>
#include <QListWidgetItem>
#include <QMimeData>
#include <QDrag>
#include <QPixmap>
#include <QPainter>
#include <QVBoxLayout>
2025-11-01 10:08:02 +00:00
#include <QMetaType>
2025-10-29 00:16:25 +00:00
#include <QHBoxLayout>
#include <QLabel>
#include <QIcon>
#include <QMouseEvent>
2025-11-01 10:08:02 +00:00
#include <QFontMetrics>
2025-10-29 00:16:25 +00:00
2025-11-01 10:08:02 +00:00
#include "common/RecourceHelper.h"
2025-10-30 00:15:44 +00:00
#include "common/SpdLogger.h"
#include "ui/DockTitleBar.h"
#include "ui/DockWidget.h"
#include "ui_PresetModelPanel.h"
2025-10-29 00:16:25 +00:00
PresetModelPanel::PresetModelPanel(QWidget *parent)
: QWidget(parent)
2025-10-30 00:15:44 +00:00
, ui(new Ui::PresetModelPanel)
2025-11-01 10:08:02 +00:00
, dragSourceWidget_(nullptr)
2025-10-29 00:16:25 +00:00
{
2025-10-30 00:15:44 +00:00
ui->setupUi(this);
2025-10-29 00:16:25 +00:00
InitUI();
}
PresetModelPanel::~PresetModelPanel()
{
2025-10-30 00:15:44 +00:00
delete ui;
2025-10-29 00:16:25 +00:00
}
void PresetModelPanel::AttachDock(DockWidget* dockWidget)
{
if (nullptr == dockWidget) {
qDebug() << __FUNCTION__ << "dockwidget is nullptr";
return;
}
dockWidget->SetDockWidgetTitleBar(nullptr);
dockWidget->setWidget(this);
DockTitleBar* dockTitleBar = new DockTitleBar;
dockWidget->SetDockWidgetTitleBar(dockTitleBar);
}
void PresetModelPanel::InitUI()
{
2025-10-30 00:15:44 +00:00
// Try to load model data from configuration files
2025-11-01 10:08:02 +00:00
QString presetsPath = QString("%1/presets").arg(RecourceHelper::Get().GetResourcesPath());
2025-11-01 13:30:06 +00:00
if (PresetModelConfigParser::Get().LoadAllConfigs(presetsPath)) {
2025-10-30 00:15:44 +00:00
// Successfully loaded from configuration files
LoadModelsFromConfig();
} else {
// Failed to load configuration files, use hardcoded defaults as fallback
LOG_WARN("Failed to load preset models from config files, using hardcoded defaults. Error: {}",
2025-11-01 13:30:06 +00:00
PresetModelConfigParser::Get().GetLastError().toStdString());
2025-10-30 00:15:44 +00:00
LoadDefaultModels();
}
2025-10-29 00:16:25 +00:00
}
2025-11-01 13:30:06 +00:00
void PresetModelPanel::LoadModelsFromConfig() {
2025-10-30 00:15:44 +00:00
// Load ship models
2025-11-01 13:30:06 +00:00
ModelCategory shipCategory = PresetModelConfigParser::Get().GetCategory("Ship");
2025-11-01 10:08:02 +00:00
if (!shipCategory.models.isEmpty()) {
ui->shipList->setModelType("Ship");
ui->shipList->setModelList(shipCategory.models);
2025-10-30 00:15:44 +00:00
}
2025-10-29 00:16:25 +00:00
2025-10-30 00:15:44 +00:00
// Load satellite models
2025-11-01 13:30:06 +00:00
ModelCategory satelliteCategory = PresetModelConfigParser::Get().GetCategory("Satellite");
2025-11-01 10:08:02 +00:00
if (!satelliteCategory.models.isEmpty()) {
ui->satelliteList->setModelType("Satellite");
ui->satelliteList->setModelList(satelliteCategory.models);
2025-10-30 00:15:44 +00:00
}
2025-10-29 00:16:25 +00:00
2025-10-30 00:15:44 +00:00
// Load missile models
2025-11-01 13:30:06 +00:00
ModelCategory missileCategory = PresetModelConfigParser::Get().GetCategory("Missile");
2025-11-01 10:08:02 +00:00
if (!missileCategory.models.isEmpty()) {
ui->missileList->setModelType("Missile");
ui->missileList->setModelList(missileCategory.models);
2025-10-30 00:15:44 +00:00
}
2025-10-29 00:16:25 +00:00
2025-10-30 00:15:44 +00:00
// Load jammer models
2025-11-01 13:30:06 +00:00
ModelCategory jammerCategory = PresetModelConfigParser::Get().GetCategory("Jammer");
2025-11-01 10:08:02 +00:00
if (!jammerCategory.models.isEmpty()) {
ui->jammerList->setModelType("Jammer");
ui->jammerList->setModelList(jammerCategory.models);
2025-10-30 00:15:44 +00:00
}
2025-10-29 00:16:25 +00:00
}
2025-11-01 13:30:06 +00:00
void PresetModelPanel::LoadDefaultModels() {
2025-10-30 00:15:44 +00:00
// Use hardcoded default models as fallback mechanism
2025-11-01 10:08:02 +00:00
QVector<ModelInfo> shipModels = {
{"destroyer", "Destroyer", "Naval destroyer vessel", "", ":/icons/ship.png", true},
{"aircraft_carrier", "Aircraft Carrier", "Large naval vessel", "", ":/icons/ship.png", true},
{"frigate", "Frigate", "Fast naval vessel", "", ":/icons/ship.png", true},
{"submarine", "Submarine", "Underwater vessel", "", ":/icons/ship.png", true}
2025-10-30 00:15:44 +00:00
};
2025-11-01 10:08:02 +00:00
ui->shipList->setModelType("Ship");
ui->shipList->setModelList(shipModels);
QVector<ModelInfo> satelliteModels = {
{"comm_satellite", "Communication Satellite", "Communication satellite", "", ":/icons/satellite.png", true},
{"weather_satellite", "Weather Satellite", "Weather monitoring satellite", "", ":/icons/satellite.png", true},
{"gps_satellite", "GPS Satellite", "GPS navigation satellite", "", ":/icons/satellite.png", true},
{"spy_satellite", "Spy Satellite", "Reconnaissance satellite", "", ":/icons/satellite.png", true}
2025-10-29 00:16:25 +00:00
};
2025-11-01 10:08:02 +00:00
ui->satelliteList->setModelType("Satellite");
ui->satelliteList->setModelList(satelliteModels);
QVector<ModelInfo> missileModels = {
{"cruise_missile", "Cruise Missile", "Long-range cruise missile", "", ":/icons/missile.png", true},
{"ballistic_missile", "Ballistic Missile", "Ballistic missile", "", ":/icons/missile.png", true},
{"anti_ship_missile", "Anti-Ship Missile", "Anti-ship missile", "", ":/icons/missile.png", true},
{"sam_missile", "Surface-to-Air Missile", "Surface-to-air missile", "", ":/icons/missile.png", true}
2025-10-29 00:16:25 +00:00
};
2025-11-01 10:08:02 +00:00
ui->missileList->setModelType("Missile");
ui->missileList->setModelList(missileModels);
QVector<ModelInfo> jammerModels = {
{"electronic_jammer", "Electronic Jammer", "Electronic warfare jammer", "", ":/icons/jammer.png", true},
{"comm_jammer", "Communication Jammer", "Communication jammer", "", ":/icons/jammer.png", true},
{"radar_jammer", "Radar Jammer", "Radar jamming device", "", ":/icons/jammer.png", true},
{"gps_jammer", "GPS Jammer", "GPS jamming device", "", ":/icons/jammer.png", true}
2025-10-29 00:16:25 +00:00
};
2025-11-01 10:08:02 +00:00
ui->jammerList->setModelType("Jammer");
ui->jammerList->setModelList(jammerModels);
2025-10-29 00:16:25 +00:00
}