void RangeProfilePlotManager::updateContextMenu(Subject& subject, const std::string& signal, const boost::any& value) { ContextMenu* pMenu = boost::any_cast<ContextMenu*>(value); if (pMenu == NULL) { return; } QAction* pDiffAction = new QAction("Calculate Difference", pMenu->getActionParent()); VERIFYNRV(mpView); int numSelectedObjects = mpView->getNumSelectedObjects(true); if (numSelectedObjects != 2) { pDiffAction->setEnabled(false); } else { std::list<PlotObject*> objects; mpView->getSelectedObjects(objects, true); for (std::list<PlotObject*>::const_iterator obj = objects.begin(); obj != objects.end(); ++obj) { std::string name; (*obj)->getObjectName(name); if (name == "Difference") { pDiffAction->setEnabled(false); break; } } } VERIFYNR(connect(pDiffAction, SIGNAL(triggered()), this, SLOT(calculateDifferences()))); pMenu->addActionBefore(pDiffAction, "SPECTRAL_RANGEPROFILEPLOT_DIFFERENCE_ACTION", APP_PLOTWIDGET_PRINT_ACTION); QAction* pDelAction = new QAction( (numSelectedObjects > 1) ? "Delete Plots" : "Delete Plot", pMenu->getActionParent()); if (mpView != NULL && numSelectedObjects == 0) { pDelAction->setEnabled(false); } VERIFYNR(connect(pDelAction, SIGNAL(triggered()), this, SLOT(deleteSelectedPlots()))); pMenu->addActionAfter(pDelAction, "SPECTRAL_RANGEPROFILEPLOT_DELETE_ACTION", "SPECTRAL_RANGEPROFILEPLOT_DIFFERENCE_ACTION"); }
void PlotSetImp::updateContextMenu(Subject& subject, const string& signal, const boost::any& value) { ContextMenu* pMenu = boost::any_cast<ContextMenu*>(value); if (pMenu == NULL) { return; } QObject* pParent = pMenu->getActionParent(); vector<SessionItem*> items = pMenu->getSessionItems(); if (items.empty() == true) { return; } bool bAddSeparator = false; bool bAddActivate = false; bool bAddDelete = false; string afterId; vector<DockWindow*> windowItems = pMenu->getSessionItems<DockWindow>(); if (windowItems.size() == 1) { DockWindow* pDockWindow = windowItems.front(); if (pDockWindow != NULL) { PlotSetGroup* pPlotSetGroup = dynamic_cast<PlotSetGroup*>(pDockWindow->getWidget()); if (pPlotSetGroup != NULL) { if (dynamic_cast<PlotSetImp*>(pPlotSetGroup->getCurrentPlotSet()) == this) { bAddSeparator = true; bAddDelete = true; } } } } else if (dynamic_cast<SessionExplorer*>(&subject) != NULL) { // Make sure all of the selected session items for the menu are plot widgets vector<PlotWidget*> plots = pMenu->getSessionItems<PlotWidget>(); if (plots.size() != items.size()) { return; } // Make sure all selected plot widget items are contained in this plot set vector<PlotWidget*>::iterator iter; for (iter = plots.begin(); iter != plots.end(); ++iter) { PlotWidget* pPlot = *iter; if (pPlot != NULL) { if (containsPlot(pPlot) == false) { return; } } } // Check for only one selected plot widget item if (plots.size() == 1) { bAddSeparator = true; // Add an activate action if the selected plot widget is not currently active PlotWidget* pPlot = plots.front(); if (pPlot != NULL) { if (pPlot != getCurrentPlot()) { bAddActivate = true; } } } bAddDelete = true; afterId = APP_PLOTWIDGET_PRINT_ACTION; } // Separator if (bAddSeparator == true) { QAction* pSeparatorAction = new QAction(pParent); pSeparatorAction->setSeparator(true); pMenu->addActionAfter(pSeparatorAction, APP_PLOTSET_SEPARATOR_ACTION, afterId); if (afterId.empty() == false) { afterId = APP_PLOTSET_SEPARATOR_ACTION; } } // Activate if (bAddActivate == true) { QAction* pActivateAction = new QAction("&Activate", pParent); pActivateAction->setAutoRepeat(false); pActivateAction->setStatusTip("Activates the selected plot in the plot set"); VERIFYNR(connect(pActivateAction, SIGNAL(triggered()), this, SLOT(activateSelectedPlot()))); pMenu->addActionAfter(pActivateAction, APP_PLOTSET_ACTIVATE_ACTION, afterId); if (afterId.empty() == false) { afterId = APP_PLOTSET_ACTIVATE_ACTION; } } // Delete if (bAddDelete == true) { QAction* pDeleteAction = new QAction(QIcon(":/icons/Delete"), "&Delete", pParent); pDeleteAction->setAutoRepeat(false); VERIFYNR(connect(pDeleteAction, SIGNAL(triggered()), this, SLOT(destroyCurrentPlot()))); pMenu->addActionAfter(pDeleteAction, APP_PLOTSET_DELETE_ACTION, afterId); } }