| 1180 | } |
| 1181 | |
| 1182 | void TreeWidget::contextMenuEvent(QContextMenuEvent* e) |
| 1183 | { |
| 1184 | // ask workbenches and view provider, ... |
| 1185 | MenuItem view; |
| 1186 | Gui::Application::Instance->setupContextMenu("Tree", &view); |
| 1187 | |
| 1188 | view << "Std_Properties" << "Separator" << "Std_Expressions"; |
| 1189 | Workbench::createLinkMenu(&view); |
| 1190 | |
| 1191 | QMenu contextMenu; |
| 1192 | |
| 1193 | QMenu subMenu; |
| 1194 | QMenu editMenu; |
| 1195 | QActionGroup subMenuGroup(&subMenu); |
| 1196 | subMenuGroup.setExclusive(true); |
| 1197 | connect(&subMenuGroup, &QActionGroup::triggered, this, &TreeWidget::onActivateDocument); |
| 1198 | MenuManager::getInstance()->setupContextMenu(&view, contextMenu); |
| 1199 | |
| 1200 | // get the current item |
| 1201 | this->contextItem = itemAt(e->pos()); |
| 1202 | |
| 1203 | if (this->contextItem && this->contextItem->type() == DocumentType) { |
| 1204 | auto docitem = static_cast<DocumentItem*>(this->contextItem); |
| 1205 | App::Document* doc = docitem->document()->getDocument(); |
| 1206 | |
| 1207 | // It's better to let user decide whether and how to activate |
| 1208 | // the current document, such as by double-clicking. |
| 1209 | // App::GetApplication().setActiveDocument(doc); |
| 1210 | |
| 1211 | showHiddenAction->setChecked(docitem->showHidden()); |
| 1212 | contextMenu.addAction(this->showHiddenAction); |
| 1213 | contextMenu.addAction(this->openFileLocationAction); |
| 1214 | contextMenu.addAction(this->searchObjectsAction); |
| 1215 | contextMenu.addAction(this->closeDocAction); |
| 1216 | if (doc->testStatus(App::Document::PartialDoc)) { |
| 1217 | contextMenu.addAction(this->reloadDocAction); |
| 1218 | } |
| 1219 | else { |
| 1220 | for (auto d : doc->getDependentDocuments()) { |
| 1221 | if (d->testStatus(App::Document::PartialDoc)) { |
| 1222 | contextMenu.addAction(this->reloadDocAction); |
| 1223 | break; |
| 1224 | } |
| 1225 | } |
| 1226 | contextMenu.addAction(this->selectDependentsAction); |
| 1227 | if (doc == App::GetApplication().getActiveDocument() && this->skipRecomputeCommand) { |
| 1228 | // if active document is selected, use Command |
| 1229 | this->skipRecomputeCommand->addTo(&contextMenu); |
| 1230 | } |
| 1231 | else { |
| 1232 | // if other document is selected or Command load fails, edit selected Document directly |
| 1233 | this->skipRecomputeAction->setChecked(doc->testStatus(App::Document::SkipRecompute)); |
| 1234 | contextMenu.addAction(this->skipRecomputeAction); |
| 1235 | } |
| 1236 | this->allowPartialRecomputeAction->setChecked( |
| 1237 | doc->testStatus(App::Document::AllowPartialRecompute) |
| 1238 | ); |
| 1239 | if (doc->testStatus(App::Document::SkipRecompute)) { |
nothing calls this directly
no test coverage detected