From 5eb1ddaeacd9a9cbb94e057f59d4e89fe4090851 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Tue, 4 Feb 2020 10:02:29 +0100 Subject: [PATCH] Implemented SendToPythonConsole FreeCAD-wide (edit and context menu) --- src/Gui/CommandFeat.cpp | 58 +++++++++++++++++++++++++++++++++++++++++ src/Gui/Workbench.cpp | 9 ++++--- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/Gui/CommandFeat.cpp b/src/Gui/CommandFeat.cpp index 0c18d43037..52d0a5f859 100644 --- a/src/Gui/CommandFeat.cpp +++ b/src/Gui/CommandFeat.cpp @@ -111,6 +111,63 @@ bool StdCmdRandomColor::isActive(void) } +//=========================================================================== +// Std_SendToPythonConsole +//=========================================================================== + +DEF_STD_CMD_A(StdCmdSendToPythonConsole) + +StdCmdSendToPythonConsole::StdCmdSendToPythonConsole() + :Command("Std_SendToPythonConsole") +{ + // setting the + sGroup = QT_TR_NOOP("Edit"); + sMenuText = QT_TR_NOOP("&Send to Python Console"); + sToolTipText = QT_TR_NOOP("Sends the selected object to the Python console"); + sWhatsThis = "Std_SendToPythonConsole"; + sStatusTip = QT_TR_NOOP("Sends the selected object to the Python console"); + sPixmap = "applications-python"; + sAccel = "Ctrl+Shift+P"; +} + +bool StdCmdSendToPythonConsole::isActive(void) +{ + return (Gui::Selection().size() == 1); +} + +void StdCmdSendToPythonConsole::activated(int iMsg) +{ + Q_UNUSED(iMsg); + + const std::vector &sels = Gui::Selection().getSelectionEx("*",App::DocumentObject::getClassTypeId(),true,true); + if (sels.empty()) + return; + const App::DocumentObject *obj = sels[0].getObject(); + QString docname = QString::fromLatin1(obj->getDocument()->getName()); + QString objname = QString::fromLatin1(obj->getNameInDocument()); + try { + QString cmd = QString::fromLatin1("obj = App.getDocument(\"%1\").getObject(\"%2\")").arg(docname,objname); + Gui::Command::runCommand(Gui::Command::Gui,cmd.toLatin1()); + if (sels[0].hasSubNames()) { + std::vector subnames = sels[0].getSubNames(); + if (obj->getPropertyByName("Shape")) { + QString subname = QString::fromLatin1(subnames[0].c_str()); + cmd = QString::fromLatin1("shp = App.getDocument(\"%1\").getObject(\"%2\").Shape") + .arg(docname, objname); + Gui::Command::runCommand(Gui::Command::Gui,cmd.toLatin1()); + cmd = QString::fromLatin1("elt = App.getDocument(\"%1\").getObject(\"%2\").Shape.%4") + .arg(docname,objname,subname); + Gui::Command::runCommand(Gui::Command::Gui,cmd.toLatin1()); + } + } + } + catch (const Base::Exception& e) { + e.ReportException(); + } + +} + + namespace Gui { void CreateFeatCommands(void) @@ -119,6 +176,7 @@ void CreateFeatCommands(void) rcCmdMgr.addCommand(new StdCmdFeatRecompute()); rcCmdMgr.addCommand(new StdCmdRandomColor()); + rcCmdMgr.addCommand(new StdCmdSendToPythonConsole()); } } // namespace Gui diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index 05b4fcfb31..513ecef5c2 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -495,7 +495,8 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const if (Gui::Selection().countObjectsOfType(App::DocumentObject::getClassTypeId()) > 0) { *item << "Separator" << "Std_SetAppearance" << "Std_ToggleVisibility" << "Std_ToggleSelectability" << "Std_TreeSelection" - << "Std_RandomColor" << "Separator" << "Std_Delete"; + << "Std_RandomColor" << "Separator" << "Std_Delete" + << "Std_SendToPythonConsole"; } } else if (strcmp(recipient,"Tree") == 0) @@ -504,7 +505,8 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const *item << "Std_ToggleVisibility" << "Std_ShowSelection" << "Std_HideSelection" << "Std_ToggleSelectability" << "Std_TreeSelectAllInstances" << "Separator" << "Std_SetAppearance" << "Std_RandomColor" << "Separator" - << "Std_Cut" << "Std_Copy" << "Std_Paste" << "Std_Delete" << "Separator"; + << "Std_Cut" << "Std_Copy" << "Std_Paste" << "Std_Delete" + << "Std_SendToPythonConsole" << "Separator"; } } } @@ -534,7 +536,8 @@ MenuItem* StdWorkbench::setupMenuBar() const edit->setCommand("&Edit"); *edit << "Std_Undo" << "Std_Redo" << "Separator" << "Std_Cut" << "Std_Copy" << "Std_Paste" << "Std_DuplicateSelection" << "Separator" - << "Std_Refresh" << "Std_BoxSelection" << "Std_BoxElementSelection" << "Std_SelectAll" << "Std_Delete" + << "Std_Refresh" << "Std_BoxSelection" << "Std_BoxElementSelection" + << "Std_SelectAll" << "Std_Delete" << "Std_SendToPythonConsole" << "Separator" << "Std_Placement" /*<< "Std_TransformManip"*/ << "Std_Alignment" << "Std_Edit" << "Separator" << "Std_DlgPreferences";