From e9b31ddb6a1ac7c2099ec539e73132489301afe0 Mon Sep 17 00:00:00 2001 From: DeepSOIC Date: Fri, 29 Jul 2016 14:20:52 +0300 Subject: [PATCH] Part: add/update GUI commands * Updated translation contexts for Gui commands for JoinFeatures. * Added Gui commands for Split tools: BooleanFragments, Slice, XOR. Icons. --- src/Mod/Part/Gui/Command.cpp | 130 ++++++++++- src/Mod/Part/Gui/Resources/Part.qrc | 3 + .../Resources/icons/Part_BooleanFragments.svg | 206 ++++++++++++++++++ .../Part/Gui/Resources/icons/Part_Slice.svg | 161 ++++++++++++++ src/Mod/Part/Gui/Resources/icons/Part_XOR.svg | 196 +++++++++++++++++ src/Mod/Part/Gui/Workbench.cpp | 8 +- 6 files changed, 693 insertions(+), 11 deletions(-) create mode 100644 src/Mod/Part/Gui/Resources/icons/Part_BooleanFragments.svg create mode 100644 src/Mod/Part/Gui/Resources/icons/Part_Slice.svg create mode 100644 src/Mod/Part/Gui/Resources/icons/Part_XOR.svg diff --git a/src/Mod/Part/Gui/Command.cpp b/src/Mod/Part/Gui/Command.cpp index 0e2acee6b7db..adfd29df7834 100644 --- a/src/Mod/Part/Gui/Command.cpp +++ b/src/Mod/Part/Gui/Command.cpp @@ -33,6 +33,7 @@ # include # include # include +# include #endif #include @@ -569,25 +570,25 @@ void CmdPartCompJoinFeatures::languageChange() Gui::Command* joinConnect = rcCmdMgr.getCommandByName("Part_JoinConnect"); if (joinConnect) { QAction* cmd0 = a[0]; - cmd0->setText(QApplication::translate("PartCompJoinFeatures", joinConnect->getMenuText())); - cmd0->setToolTip(QApplication::translate("Part_JoinConnect", joinConnect->getToolTipText())); - cmd0->setStatusTip(QApplication::translate("Part_JoinConnect", joinConnect->getStatusTip())); + cmd0->setText(QApplication::translate("Part_JoinFeatures", joinConnect->getMenuText())); + cmd0->setToolTip(QApplication::translate("Part_JoinFeatures", joinConnect->getToolTipText())); + cmd0->setStatusTip(QApplication::translate("Part_JoinFeatures", joinConnect->getStatusTip())); } Gui::Command* joinEmbed = rcCmdMgr.getCommandByName("Part_JoinEmbed"); if (joinEmbed) { QAction* cmd1 = a[1]; - cmd1->setText(QApplication::translate("PartCompJoinFeatures", joinEmbed->getMenuText())); - cmd1->setToolTip(QApplication::translate("Part_JoinEmbed", joinEmbed->getToolTipText())); - cmd1->setStatusTip(QApplication::translate("Part_JoinEmbed", joinEmbed->getStatusTip())); + cmd1->setText(QApplication::translate("Part_JoinFeatures", joinEmbed->getMenuText())); + cmd1->setToolTip(QApplication::translate("Part_JoinFeatures", joinEmbed->getToolTipText())); + cmd1->setStatusTip(QApplication::translate("Part_JoinFeatures", joinEmbed->getStatusTip())); } Gui::Command* joinCutout = rcCmdMgr.getCommandByName("Part_JoinCutout"); if (joinCutout) { QAction* cmd2 = a[2]; - cmd2->setText(QApplication::translate("PartCompJoinFeatures", joinCutout->getMenuText())); - cmd2->setToolTip(QApplication::translate("Part_JoinCutout", joinCutout->getToolTipText())); - cmd2->setStatusTip(QApplication::translate("Part_JoinCutout", joinCutout->getStatusTip())); + cmd2->setText(QApplication::translate("Part_JoinFeatures", joinCutout->getMenuText())); + cmd2->setToolTip(QApplication::translate("Part_JoinFeatures", joinCutout->getToolTipText())); + cmd2->setStatusTip(QApplication::translate("Part_JoinFeatures", joinCutout->getStatusTip())); } } @@ -599,6 +600,116 @@ bool CmdPartCompJoinFeatures::isActive(void) return false; } +//=========================================================================== +// Part_CompSplitFeatures (dropdown toolbar button for BooleanFragments, Slice) +//=========================================================================== + +DEF_STD_CMD_ACL(CmdPartCompSplitFeatures); + +CmdPartCompSplitFeatures::CmdPartCompSplitFeatures() + : Command("Part_CompSplitFeatures") +{ + sAppModule = "Part"; + sGroup = QT_TR_NOOP("Part"); + sMenuText = QT_TR_NOOP("Split objects..."); + sToolTipText = QT_TR_NOOP("Shape splitting tools. Compsolid creation tools. OCC 6.9.0 or later is required."); + sWhatsThis = "Part_CompSplitFeatures"; + sStatusTip = sToolTipText; +} + +void CmdPartCompSplitFeatures::activated(int iMsg) +{ + Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); + if (iMsg==0) + rcCmdMgr.runCommandByName("Part_BooleanFragments"); + else if (iMsg==1) + rcCmdMgr.runCommandByName("Part_Slice"); + else if (iMsg==2) + rcCmdMgr.runCommandByName("Part_XOR"); + else + return; + + // Since the default icon is reset when enabing/disabling the command we have + // to explicitly set the icon of the used command. + Gui::ActionGroup* pcAction = qobject_cast(_pcAction); + QList a = pcAction->actions(); + + assert(iMsg < a.size()); + pcAction->setIcon(a[iMsg]->icon()); +} + +Gui::Action * CmdPartCompSplitFeatures::createAction(void) +{ + Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow()); + pcAction->setDropDownMenu(true); + applyCommandData(this->className(), pcAction); + + QAction* cmd0 = pcAction->addAction(QString()); + cmd0->setIcon(Gui::BitmapFactory().pixmap("Part_BooleanFragments")); + QAction* cmd1 = pcAction->addAction(QString()); + cmd1->setIcon(Gui::BitmapFactory().pixmap("Part_Slice")); + QAction* cmd2 = pcAction->addAction(QString()); + cmd2->setIcon(Gui::BitmapFactory().pixmap("Part_XOR")); + + _pcAction = pcAction; + languageChange(); + + pcAction->setIcon(cmd0->icon()); + int defaultId = 0; + pcAction->setProperty("defaultAction", QVariant(defaultId)); + + return pcAction; +} + +void CmdPartCompSplitFeatures::languageChange() +{ + Command::languageChange(); + + if (!_pcAction) + return; + + Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); + + Gui::ActionGroup* pcAction = qobject_cast(_pcAction); + QList a = pcAction->actions(); + + Gui::Command* splitBoolFragments = rcCmdMgr.getCommandByName("Part_BooleanFragments"); + if (splitBoolFragments) { + QAction* cmd0 = a[0]; + cmd0->setText(QApplication::translate("Part_SplitFeatures", splitBoolFragments->getMenuText())); + cmd0->setToolTip(QApplication::translate("Part_SplitFeatures", splitBoolFragments->getToolTipText())); + cmd0->setStatusTip(QApplication::translate("Part_SplitFeatures", splitBoolFragments->getStatusTip())); + } + + Gui::Command* splitSlice = rcCmdMgr.getCommandByName("Part_Slice"); + if (splitSlice) { + QAction* cmd1 = a[1]; + cmd1->setText(QApplication::translate("Part_SplitFeatures", splitSlice->getMenuText())); + cmd1->setToolTip(QApplication::translate("Part_SplitFeatures", splitSlice->getToolTipText())); + cmd1->setStatusTip(QApplication::translate("Part_SplitFeatures", splitSlice->getStatusTip())); + } + + Gui::Command* splitXOR = rcCmdMgr.getCommandByName("Part_XOR"); + if (splitXOR) { + QAction* cmd2 = a[2]; + cmd2->setText(QApplication::translate("Part_SplitFeatures", splitXOR->getMenuText())); + cmd2->setToolTip(QApplication::translate("Part_SplitFeatures", splitXOR->getToolTipText())); + cmd2->setStatusTip(QApplication::translate("Part_SplitFeatures", splitXOR->getStatusTip())); + } +} + +bool CmdPartCompSplitFeatures::isActive(void) +{ + if (getActiveGuiDocument()) +#if OCC_VERSION_HEX < 0x060900 + return false; +#else + return true; +#endif + else + return false; +} + //=========================================================================== // Part_Compound //=========================================================================== @@ -1909,6 +2020,7 @@ void CreatePartCommands(void) rcCmdMgr.addCommand(new CmdPartCut()); rcCmdMgr.addCommand(new CmdPartFuse()); rcCmdMgr.addCommand(new CmdPartCompJoinFeatures()); + rcCmdMgr.addCommand(new CmdPartCompSplitFeatures()); rcCmdMgr.addCommand(new CmdPartCompound()); rcCmdMgr.addCommand(new CmdPartSection()); //rcCmdMgr.addCommand(new CmdPartBox2()); diff --git a/src/Mod/Part/Gui/Resources/Part.qrc b/src/Mod/Part/Gui/Resources/Part.qrc index 341d070e3640..48ac2a6f97e7 100644 --- a/src/Mod/Part/Gui/Resources/Part.qrc +++ b/src/Mod/Part/Gui/Resources/Part.qrc @@ -5,6 +5,7 @@ icons/PartFeatureImport.xpm icons/Part_Attachment.svg icons/Part_Booleans.svg + icons/Part_BooleanFragments.svg icons/Part_Box.svg icons/Part_Chamfer.svg icons/Part_Common.svg @@ -28,10 +29,12 @@ icons/Part_CrossSections.svg icons/Part_Shapebuilder.png icons/Part_ShapeInfo.svg + icons/Part_Slice.svg icons/Part_Sphere.svg icons/Part_Sweep.svg icons/Part_Thickness.svg icons/Part_Torus.svg + icons/Part_XOR.svg icons/preferences-part_design.svg icons/Tree_Part.svg icons/Part_CheckGeometry.svg diff --git a/src/Mod/Part/Gui/Resources/icons/Part_BooleanFragments.svg b/src/Mod/Part/Gui/Resources/icons/Part_BooleanFragments.svg new file mode 100644 index 000000000000..2e6fabcef721 --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_BooleanFragments.svg @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/Part/Gui/Resources/icons/Part_Slice.svg b/src/Mod/Part/Gui/Resources/icons/Part_Slice.svg new file mode 100644 index 000000000000..982f8d13d685 --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_Slice.svg @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/src/Mod/Part/Gui/Resources/icons/Part_XOR.svg b/src/Mod/Part/Gui/Resources/icons/Part_XOR.svg new file mode 100644 index 000000000000..1406c7a8d7cb --- /dev/null +++ b/src/Mod/Part/Gui/Resources/icons/Part_XOR.svg @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/src/Mod/Part/Gui/Workbench.cpp b/src/Mod/Part/Gui/Workbench.cpp index 173942e10c57..560e284b95ba 100644 --- a/src/Mod/Part/Gui/Workbench.cpp +++ b/src/Mod/Part/Gui/Workbench.cpp @@ -71,6 +71,10 @@ Gui::MenuItem* Workbench::setupMenuBar() const join->setCommand("Join"); *join << "Part_JoinConnect" << "Part_JoinEmbed" << "Part_JoinCutout"; + Gui::MenuItem* split = new Gui::MenuItem; + split->setCommand("Split"); + *split << "Part_BooleanFragments" << "Part_Slice" << "Part_XOR"; + Gui::MenuItem* part = new Gui::MenuItem; root->insertItem(item, part); part->setCommand("&Part"); @@ -78,7 +82,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *part << prim << "Part_Primitives" << "Part_Builder" << "Separator" << "Part_ShapeFromMesh" << "Part_MakeSolid" << "Part_ReverseShape" << "Part_SimpleCopy" << "Part_RefineShape" << "Part_CheckGeometry" - << "Separator" << bop << join << "Separator" + << "Separator" << bop << join << split << "Separator" << "Part_CrossSections" << "Part_Compound" << "Part_MakeFace" << "Part_Extrude" << "Part_Revolve" << "Part_Mirror" << "Part_Fillet" << "Part_Chamfer" << "Part_RuledSurface" << "Part_Loft" << "Part_Sweep" @@ -123,7 +127,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const Gui::ToolBarItem* boolop = new Gui::ToolBarItem(root); boolop->setCommand("Boolean"); *boolop << "Part_Boolean" << "Part_Cut" << "Part_Fuse" << "Part_Common" - << "Part_CompJoinFeatures" << "Part_CheckGeometry" << "Part_Section" + << "Part_CompJoinFeatures" << "Part_CompSplitFeatures" << "Part_CheckGeometry" << "Part_Section" << "Part_CrossSections"; Gui::ToolBarItem* measure = new Gui::ToolBarItem(root);