---------------------------------------------- File: ModelReportItemTree_contextMenuEvent.txt ---------------------------------------------- void ModelReportItemTree::contextMenuEvent(QContextMenuEvent* event) { // If the clicked item has an associated object or slot or something // we want to support opening its dialog. // Note that we assume that the context menu event selected the item. Slot* slot (NULL); Account* acct (NULL); SimObj* simObj (NULL); RplStatement* rplStmt (NULL); // See note below. RplFunction* rplFunc (NULL); // See note below. RplBlock* rplBlock (NULL); RplGroup* rplGroup (NULL); RplSet* rplSet (NULL); // Note [Phil, 1-2017, RW 7.1]: RplStatement* and RplFunction* are // here for completeness. Those aren't currently expected to be // returned from ModelReportItem::lookupAssociatedWorkspaceObject(), // but if they ever were to be, their corresponding RplBlock and/or // RplSet would be computed, resulting in context menu actions to // show dialogs for those containing objects. ModelReportItem* selectedItem = selectedReportItem(); if (selectedItem) { Root* rootObj = selectedItem->lookupAssociatedWorkspaceObject(); if (rootObj) { slot = dynamic_cast(rootObj); acct = dynamic_cast(rootObj); simObj = dynamic_cast(rootObj); rplStmt = dynamic_cast(rootObj); rplFunc = dynamic_cast(rootObj); rplBlock = dynamic_cast(rootObj); rplGroup = dynamic_cast(rootObj); rplSet = dynamic_cast(rootObj); if (slot) { _openSlotDlgAction->setIcon(RwQPixmap16::slotPmap(slot)); simObj = const_cast (slot->baseSimObj()); acct = slot->getAccount(); } if (acct) { _openAcctDlgAction->setIcon(RwQPixmap16::acctPmap(acct)); simObj = acct->getSimObj(); } if (simObj) { _openObjDlgAction->setIcon( RwQtIcons::smallSimObjPixmap(simObj, false)); } if (rplStmt) // see note above { rplBlock = rplStmt->getParentBlock(); // see processing below } if (rplFunc) // see note above { rplGroup = rplFunc->getParent(); // RplUtilityGroup* // see processing below } if (rplBlock) { _openRplBlockAction->setIcon( RplIcons::getObjIcon (rplBlock, rplSet)); rplSet = rplBlock->getSet(); rplGroup = rplBlock->getParent(); // PolicyGroup* } if (rplGroup) { _openRplGroupAction->setIcon( RplIcons::getObjIcon (rplGroup, rplSet)); rplSet = rplGroup->getSet(); } if (rplSet) { _openRplSetAction->setIcon( RplIcons::getObjIcon (rplSet, rplSet)); } } } _openSlotDlgAction->setEnabled(slot != NULL); _openSlotDlgAction->setVisible(slot != NULL); _openAcctDlgAction->setEnabled(acct != NULL); _openAcctDlgAction->setVisible(acct != NULL); _openObjDlgAction->setEnabled(simObj != NULL); _openObjDlgAction->setVisible(simObj != NULL); _openRplBlockAction->setEnabled(rplBlock != NULL); _openRplBlockAction->setVisible(rplBlock != NULL); _openRplGroupAction->setEnabled(rplGroup != NULL); _openRplGroupAction->setVisible(rplGroup != NULL); _openRplSetAction->setEnabled(rplSet != NULL); _openRplSetAction->setVisible(rplSet != NULL); _enableItemAction ->setChecked(selectedItem && selectedItem->enabled() && selectedItem->ancestorsEnabled()); _enableItemAction ->setEnabled(selectedItem && selectedItem->ancestorsEnabled()); QList itemSlots; if (selectedItem) itemSlots = selectedItem->locateUsedSlots (true); // child items too const int itemSlotCnt = itemSlots.count(); _copySlotsAction->setEnabled(itemSlotCnt > 0); _copySlotsAction->setVisible(itemSlotCnt > 0); if (itemSlotCnt < 1) _copySlotsAction->setText(tr("Copy Item Slots")); else if (itemSlotCnt == 1) _copySlotsAction->setText(tr("Copy Item Slot")); else { static const QString fmt (tr("Copy Item Slots (%1)")); _copySlotsAction->setText(fmt.arg (itemSlotCnt)); } _contextMenu->popup(event->globalPos()); } ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- void ModelReportItemTree::openRplBlockHandler() { ModelReportItem* selectedItem = selectedReportItem(); if (!selectedItem) { QApplication::beep(); return; } Root* selRoot = selectedItem->lookupAssociatedWorkspaceObject(); RplStatement* rplStmt = dynamic_cast (selRoot); RplBlock* rplBlock = dynamic_cast (selRoot); if (rplStmt) rplBlock = rplStmt->getParentBlock(); if (rplBlock) { if (rplStmt) rplDlgMgr->openRplBlockDlgSelectStatement (rplBlock, rplStmt); else rplDlgMgr->openRplDlg (rplBlock); } else { QApplication::beep(); } } void ModelReportItemTree::openRplGroupHandler() { ModelReportItem* selectedItem = selectedReportItem(); if (!selectedItem) { QApplication::beep(); return; } Root* selRoot = selectedItem->lookupAssociatedWorkspaceObject(); RplObj* itemRplObj (NULL); // 2nd level object RplStatement* rplStmt = dynamic_cast (selRoot); RPlFunction* rplFunc = dynamic_cast (selRoot); RplBlock* rplBlock = dynamic_cast (selRoot); RplGroup* rplGroup = dynamic_cast (selRoot); if (rplStmt) { rplBlock = rplStmt->getParentBlock(); itemRplObj = rplStmt; } if (rplFunc) { rplGroup = rplFunc->getParent(); // RplUtilityGroup* itemRplObj = rplFunc; } if (rplBlock) { rplGroup = rplBlock->getParent(); // PolicyGroup* if (itemRplObj == NULL) itemRplObj = rplBlock; } if (rplGroup) { if (itemRplObj) rplDlgMgr->openRplDlgSelectRplObjViewRow (rplGroup, itemRplObj); else rplDlgMgr->openRplDlg (rplGroup); } else { QApplication::beep(); } } ---