From 123393af21dbfd8a850291f9b1e2ce690674342e Mon Sep 17 00:00:00 2001 From: vsv Date: Mon, 19 May 2014 17:04:20 +0400 Subject: [PATCH] Create pop-up on ObjectBrowser root label (issue #23) --- src/XGUI/XGUI_ContextMenuMgr.cpp | 31 ++++++++++++++++++--------- src/XGUI/XGUI_ObjectsBrowser.cpp | 36 ++++++++++++++++++++++++++------ src/XGUI/XGUI_ObjectsBrowser.h | 6 +++++- 3 files changed, 56 insertions(+), 17 deletions(-) diff --git a/src/XGUI/XGUI_ContextMenuMgr.cpp b/src/XGUI/XGUI_ContextMenuMgr.cpp index 753027907..4dc852f9a 100644 --- a/src/XGUI/XGUI_ContextMenuMgr.cpp +++ b/src/XGUI/XGUI_ContextMenuMgr.cpp @@ -78,23 +78,34 @@ void XGUI_ContextMenuMgr::onContextMenuRequest(QContextMenuEvent* theEvent) QMenu* XGUI_ContextMenuMgr::objectBrowserMenu() const { + QMenu* aMenu = new QMenu(); XGUI_SelectionMgr* aSelMgr = myWorkshop->selector(); QFeatureList aFeatures = aSelMgr->selectedFeatures(); if (aFeatures.size() == 1) { + PluginManagerPtr aMgr = ModelAPI_PluginManager::get(); FeaturePtr aFeature = aFeatures.first(); - QMenu* aMenu = new QMenu(); - if (aFeature->getKind() == "Part") { - boost::shared_ptr aMgr = ModelAPI_PluginManager::get(); - boost::shared_ptr aFeaDoc = aFeature->data()->docRef("PartDocument")->value(); - if (aMgr->currentDocument() == aFeaDoc) - aMenu->addAction(action("DEACTIVATE_PART_CMD")); - else + //Process Feature + if (aFeature) { + if (aFeature->getKind() == "Part") { + boost::shared_ptr aFeaDoc = aFeature->data()->docRef("PartDocument")->value(); + if (aMgr->currentDocument() == aFeaDoc) + aMenu->addAction(action("DEACTIVATE_PART_CMD")); + else + aMenu->addAction(action("ACTIVATE_PART_CMD")); + } else { + aMenu->addAction(action("EDIT_CMD")); + } + + // Process Root object (document) + } else { // If feature is 0 the it means that selected root object (document) + if (aMgr->currentDocument() != aMgr->rootDocument()) { aMenu->addAction(action("ACTIVATE_PART_CMD")); - } else { - aMenu->addAction(action("EDIT_CMD")); + } } - return aMenu; } + if (aMenu->actions().size() > 0) + return aMenu; + delete aMenu; return 0; } diff --git a/src/XGUI/XGUI_ObjectsBrowser.cpp b/src/XGUI/XGUI_ObjectsBrowser.cpp index 8850213f7..dd9706048 100644 --- a/src/XGUI/XGUI_ObjectsBrowser.cpp +++ b/src/XGUI/XGUI_ObjectsBrowser.cpp @@ -102,6 +102,7 @@ XGUI_ObjectsBrowser::XGUI_ObjectsBrowser(QWidget* theParent) myActiveDocLbl = new QLabel(tr("Part set"), aLabelWgt); myActiveDocLbl->setMargin(2); + myActiveDocLbl->setContextMenuPolicy(Qt::CustomContextMenu); myActiveDocLbl->installEventFilter(this); @@ -119,8 +120,11 @@ XGUI_ObjectsBrowser::XGUI_ObjectsBrowser(QWidget* theParent) connect(myTreeView, SIGNAL(selectionChanged()), this, SIGNAL(selectionChanged())); connect(myTreeView, SIGNAL(activePartChanged(FeaturePtr)), this, SLOT(onActivePartChanged(FeaturePtr))); connect(myTreeView, SIGNAL(activePartChanged(FeaturePtr)), this, SIGNAL(activePartChanged(FeaturePtr))); + + connect(myActiveDocLbl, SIGNAL(customContextMenuRequested(const QPoint&)), + this, SLOT(onLabelContextMenuRequested(const QPoint&))); connect(myTreeView, SIGNAL(contextMenuRequested(QContextMenuEvent*)), - this, SIGNAL(contextMenuRequested(QContextMenuEvent*))); + this, SLOT(onContextMenuRequested(QContextMenuEvent*))); onActivePartChanged(FeaturePtr()); } @@ -137,11 +141,11 @@ void XGUI_ObjectsBrowser::onActivePartChanged(FeaturePtr thePart) if (thePart) { //myActiveDocLbl->setText(tr("Activate Part set")); aPalet.setColor(QPalette::Foreground, Qt::black); - myActiveDocLbl->setCursor(Qt::PointingHandCursor); + //myActiveDocLbl->setCursor(Qt::PointingHandCursor); } else { //myActiveDocLbl->setText(tr("Part set is active")); aPalet.setColor(QPalette::Foreground, QColor(0, 72, 140)); - myActiveDocLbl->unsetCursor(); + //myActiveDocLbl->unsetCursor(); } myActiveDocLbl->setPalette(aPalet); } @@ -170,9 +174,13 @@ void XGUI_ObjectsBrowser::activateCurrentPart(bool toActivate) myTreeView->setExpanded(myDocModel->activePartIndex(), false); } bool isChanged = myDocModel->activatedIndex(aIndex); - if ((isChanged) && (myDocModel->activePartIndex().isValid())) { - myTreeView->setExpanded(aIndex, true); - onActivePartChanged(myDocModel->feature(aIndex)); + if (isChanged) { + if (myDocModel->activePartIndex().isValid()) { + myTreeView->setExpanded(aIndex, true); + onActivePartChanged(myDocModel->feature(aIndex)); + } else { + onActivePartChanged(FeaturePtr()); + } } } else { QModelIndex aIndex = myDocModel->activePartIndex(); @@ -182,4 +190,20 @@ void XGUI_ObjectsBrowser::activateCurrentPart(bool toActivate) onActivePartChanged(FeaturePtr()); } } +} + +void XGUI_ObjectsBrowser::onContextMenuRequested(QContextMenuEvent* theEvent) +{ + myFeaturesList = myTreeView->selectedFeatures(); + emit contextMenuRequested(theEvent); +} + +void XGUI_ObjectsBrowser::onLabelContextMenuRequested(const QPoint& thePnt) +{ + myFeaturesList.clear(); + //Empty feature pointer means that selected root document + myFeaturesList.append(FeaturePtr()); + + QContextMenuEvent aEvent( QContextMenuEvent::Mouse, thePnt, myActiveDocLbl->mapToGlobal(thePnt) ); + emit contextMenuRequested(&aEvent); } \ No newline at end of file diff --git a/src/XGUI/XGUI_ObjectsBrowser.h b/src/XGUI/XGUI_ObjectsBrowser.h index 18c03d2cc..c1907e34d 100644 --- a/src/XGUI/XGUI_ObjectsBrowser.h +++ b/src/XGUI/XGUI_ObjectsBrowser.h @@ -61,7 +61,7 @@ public: XGUI_DocumentDataModel* dataModel() const { return myDocModel; } //! Returns list of currently selected features - QFeatureList selectedFeatures() const { return myTreeView->selectedFeatures(); } + QFeatureList selectedFeatures() const { return myFeaturesList; } //! Returns currently selected indexes QModelIndexList selectedIndexes() const { return myTreeView->selectionModel()->selectedIndexes(); } @@ -87,6 +87,8 @@ protected: private slots: void onActivePartChanged(FeaturePtr thePart); + void onContextMenuRequested(QContextMenuEvent* theEvent); + void onLabelContextMenuRequested(const QPoint& thePnt); private: //! Internal model @@ -94,6 +96,8 @@ private: QLabel* myActiveDocLbl; XGUI_DataTree* myTreeView; + + QFeatureList myFeaturesList; }; #endif \ No newline at end of file -- 2.39.2