From 286a48a6589807d763da51c2b4bb2f0e7ce37c0f Mon Sep 17 00:00:00 2001 From: brige Date: Wed, 18 Jun 2025 23:33:06 +0800 Subject: [PATCH] modify mouse right menu --- src/translations/Dyt_zh_CN.ts | 26 ++++++------ src/ui/ModelBrowser/ModelTreeWidget.cpp | 54 +++++++++++++++---------- src/viewer/OsgWidget.cpp | 5 +++ src/viewer/OsgWidget.h | 1 + src/workspace/WorkSpace.h | 3 ++ 5 files changed, 55 insertions(+), 34 deletions(-) diff --git a/src/translations/Dyt_zh_CN.ts b/src/translations/Dyt_zh_CN.ts index dd6803f0..6c431cd5 100644 --- a/src/translations/Dyt_zh_CN.ts +++ b/src/translations/Dyt_zh_CN.ts @@ -636,57 +636,57 @@ ModelTreeWidget - + Release Track - + Add boke Entity - + Add lsjhqt Entity - + Add nimizi Entity - + Add tkdlj Entity - + Add jiaofan Entity - + Add satellite Entity - + Track - + Add Mesh Component - + Add Path Component - + Delete @@ -694,12 +694,12 @@ OsgWidget - + warning - + open dyt file failed diff --git a/src/ui/ModelBrowser/ModelTreeWidget.cpp b/src/ui/ModelBrowser/ModelTreeWidget.cpp index 2f761cf3..dad2bb61 100644 --- a/src/ui/ModelBrowser/ModelTreeWidget.cpp +++ b/src/ui/ModelBrowser/ModelTreeWidget.cpp @@ -93,18 +93,12 @@ void ModelTreeWidget::OnEntityRemoved(Entity* entity) { void ModelTreeWidget::contextMenuEvent(QContextMenuEvent* event) { QTreeWidgetItem* item = itemAt(event->pos()); if (nullptr != item) { - QMenu menu(this); - QAction* addEntiy = new QAction(tr("Release Track"), this); - connect(addEntiy, &QAction::triggered, [this]() { - OnTrackEntity(nullptr); - } - ); - menu.addAction(addEntiy); - menu.exec(event->globalPos()); - return; - } - QVariant value = item->data(0, E_Entity); - if (nullptr != item && value.isValid()) { + QVariant value = item->data(0, E_Entity); + if (!value.isValid()) { + LOG_WARN("unknown data E_Entity"); + return; + } + Entity* entity = value.value(); PopupEntityMenu(event, entity); } else { @@ -247,14 +241,31 @@ void ModelTreeWidget::OnDeleteEntity(Entity* entity) { void ModelTreeWidget::PopupEntityMenu(QContextMenuEvent* event, Entity* entity) { QMenu menu(this); - QAction* addEntiy = new QAction(tr("Track"), this); - menu.addAction(addEntiy); - connect(addEntiy, &QAction::triggered, [this, entity]() { - OnTrackEntity(entity); + if (nullptr != entity) { + auto workspace = entity->GetWorkspace(); + if (nullptr == workspace) { + LOG_WARN("workspace is nullptr"); + return; } - ); + + if (workspace->GetTrackEntity() == entity) { + QAction* releaseTrack = new QAction(tr("Release Track"), this); + connect(releaseTrack, &QAction::triggered, [this]() { + OnTrackEntity(nullptr); + } + ); + menu.addAction(releaseTrack); + } + } else { + QAction* addEntiy = new QAction(tr("Track"), this); + menu.addAction(addEntiy); + connect(addEntiy, &QAction::triggered, [this, entity]() { + OnTrackEntity(entity); + } + ); + } - addEntiy = new QAction(tr("Add Mesh Component"), this); + QAction* addEntiy = new QAction(tr("Add Mesh Component"), this); menu.addAction(addEntiy); addEntiy = new QAction(tr("Add Path Component"), this); @@ -328,11 +339,12 @@ void ModelTreeWidget::OnTrackEntity(Entity* entity) { } if (nullptr == entity) { - LOG_WARN("entity is nullptr, clear camera manipulator"); + LOG_INFO("clear track entity"); + workspace->UntrackEntity(); return; - } - + } + LOG_INFO("track entity: {}", entity->GetName().toStdString()); workspace->TrackEntity(entity); //scene->Track //MainWindow:: diff --git a/src/viewer/OsgWidget.cpp b/src/viewer/OsgWidget.cpp index c4211b5f..9cee8512 100644 --- a/src/viewer/OsgWidget.cpp +++ b/src/viewer/OsgWidget.cpp @@ -45,6 +45,11 @@ OsgWidget::OsgWidget(QWidget* parent, Qt::WindowFlags f) connect( &timer_, SIGNAL(timeout()), this, SLOT(update()) ); timer_.start( 10 ); + LOG_INFO("OsgWidget::OsgWidget"); +} + +OsgWidget::~OsgWidget() { + LOG_INFO("OsgWidget::~OsgWidget"); } void OsgWidget::Initialize() { diff --git a/src/viewer/OsgWidget.h b/src/viewer/OsgWidget.h index 82b75205..d4954db8 100644 --- a/src/viewer/OsgWidget.h +++ b/src/viewer/OsgWidget.h @@ -10,6 +10,7 @@ class OsgWidget : public QWidget, public osgViewer::CompositeViewer { Q_OBJECT public: OsgWidget(QWidget *parent = nullptr, Qt::WindowFlags f = nullptr); + ~OsgWidget() override; void Initialize(void); void LoadDefaultScene(void); diff --git a/src/workspace/WorkSpace.h b/src/workspace/WorkSpace.h index efa07aca..8094fcf2 100644 --- a/src/workspace/WorkSpace.h +++ b/src/workspace/WorkSpace.h @@ -118,6 +118,9 @@ public: void RemoveEntity(class Entity* entity); bool TrackEntity(class Entity* entity); void UntrackEntity(); + class Entity* GetTrackEntity() const { + return trackedEntity_; + } bool Save(const QString& path); bool Save();