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<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
- boost::shared_ptr<ModelAPI_Document> 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<ModelAPI_Document> 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;
}
myActiveDocLbl = new QLabel(tr("Part set"), aLabelWgt);
myActiveDocLbl->setMargin(2);
+ myActiveDocLbl->setContextMenuPolicy(Qt::CustomContextMenu);
myActiveDocLbl->installEventFilter(this);
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());
}
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);
}
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();
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
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(); }
private slots:
void onActivePartChanged(FeaturePtr thePart);
+ void onContextMenuRequested(QContextMenuEvent* theEvent);
+ void onLabelContextMenuRequested(const QPoint& thePnt);
private:
//! Internal model
QLabel* myActiveDocLbl;
XGUI_DataTree* myTreeView;
+
+ QFeatureList myFeaturesList;
};
#endif
\ No newline at end of file