From b0ec0931cb60c60115ed68ec720bdf0a61cf5049 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 13 Feb 2012 20:11:14 -0200 Subject: [PATCH 1/2] Added Std_Edit FreeCAD command That command (located in the Edit menu) toggles (enters or leaves) the Edit mode of a selected object. --- src/Gui/CommandDoc.cpp | 43 +++++++++++ src/Gui/Icons/edit-edit.svg | 149 ++++++++++++++++++++++++++++++++++++ src/Gui/Icons/resource.qrc | 1 + src/Gui/Workbench.cpp | 2 +- 4 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 src/Gui/Icons/edit-edit.svg diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index 8e1e79cfb6..8bbe611c07 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -52,6 +52,8 @@ #include "Placement.h" #include "WaitCursor.h" #include "ViewProvider.h" +#include +#include #include "MergeDocuments.h" using namespace Gui; @@ -1022,6 +1024,46 @@ bool StdCmdPlacement::isActive(void) return (Gui::Control().activeDialog()==0); } +//=========================================================================== +// Std_Edit +//=========================================================================== +DEF_STD_CMD_A(StdCmdEdit); + +StdCmdEdit::StdCmdEdit() + :Command("Std_Edit") +{ + sGroup = QT_TR_NOOP("Edit"); + sMenuText = QT_TR_NOOP("Toggle &Editmode"); + sToolTipText = QT_TR_NOOP("Toggles the selected object's edit mode"); + sWhatsThis = "Std_Edit"; + sStatusTip = QT_TR_NOOP("Enters or leaves the selected object's edit mode"); +#if QT_VERSION >= 0x040200 + sPixmap = "edit-edit"; +#endif + eType = ForEdit; +} + +void StdCmdEdit::activated(int iMsg) +{ + Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); + if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { + Gui::View3DInventorViewer* viewer = static_cast(view)->getViewer(); + if (viewer->isEditingViewProvider()) { + doCommand(Command::Gui,"Gui.activeDocument().resetEdit()"); + } else { + if (Selection().getCompleteSelection().size() > 0) { + SelectionSingleton::SelObj obj = Selection().getCompleteSelection()[0]; + doCommand(Command::Gui,"Gui.activeDocument().setEdit(\"%s\",0)",obj.FeatName); + } + } + } +} + +bool StdCmdEdit::isActive(void) +{ + return (Selection().getCompleteSelection().size() > 0) || (Gui::Control().activeDialog() != 0); +} + namespace Gui { @@ -1054,6 +1096,7 @@ void CreateDocCommands(void) rcCmdMgr.addCommand(new StdCmdRefresh()); rcCmdMgr.addCommand(new StdCmdTransform()); rcCmdMgr.addCommand(new StdCmdPlacement()); + rcCmdMgr.addCommand(new StdCmdEdit()); } } // namespace Gui diff --git a/src/Gui/Icons/edit-edit.svg b/src/Gui/Icons/edit-edit.svg new file mode 100644 index 0000000000..d63fb7ce7b --- /dev/null +++ b/src/Gui/Icons/edit-edit.svg @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/src/Gui/Icons/resource.qrc b/src/Gui/Icons/resource.qrc index 78a314d169..82548cd396 100644 --- a/src/Gui/Icons/resource.qrc +++ b/src/Gui/Icons/resource.qrc @@ -45,6 +45,7 @@ edit-select-all.svg edit-redo.svg edit-undo.svg + edit-edit.svg help-browser.svg preferences-system.svg window-new.svg diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index b3e1115d00..749278fb01 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -440,7 +440,7 @@ MenuItem* StdWorkbench::setupMenuBar() const *edit << "Std_Undo" << "Std_Redo" << "Separator" << "Std_Cut" << "Std_Copy" << "Std_Paste" << "Std_DuplicateSelection" << "Separator" << "Std_Refresh" << "Std_SelectAll" << "Std_Delete" << "Std_Placement" - << "Separator" << "Std_DlgPreferences"; + << "Std_Edit" << "Separator" << "Std_DlgPreferences"; // Standard views MenuItem* stdviews = new MenuItem; From 328f038f01ed7676a970d2b1a2288f25387c1b3b Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 13 Feb 2012 20:13:13 -0200 Subject: [PATCH 2/2] Fixed editmode bugs in Draft & Arch --- src/Mod/Arch/ArchAxis.py | 5 ++--- src/Mod/Arch/ArchComponent.py | 5 ++--- src/Mod/Draft/DraftGui.py | 6 ++---- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index 53b425b757..dc9cca6504 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -340,10 +340,9 @@ class _AxisTaskPanel: self.obj.Angles = a FreeCAD.ActiveDocument.recompute() - def finish(self): + def accept(self): self.resetObject() - if self.obj: - self.obj.ViewObject.finishEditing() + FreeCADGui.ActiveDocument.resetEdit() def retranslateUi(self, TaskPanel): TaskPanel.setWindowTitle(QtGui.QApplication.translate("Arch", "Axes", None, QtGui.QApplication.UnicodeUTF8)) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index 6b8b33af15..b6065fa044 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -222,8 +222,7 @@ class ComponentTaskPanel: def accept(self): FreeCAD.ActiveDocument.recompute() - if self.obj: - self.obj.ViewObject.finishEditing() + FreeCADGui.ActiveDocument.resetEdit() return True def editObject(self,wid,col): @@ -308,7 +307,7 @@ class ViewProviderComponent: def unsetEdit(self,vobj,mode): FreeCADGui.Control.closeDialog() - return + return False class ArchSelectionObserver: def __init__(self,origin,watched): diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 831220e514..9d942fe140 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -147,12 +147,10 @@ class DraftTaskPanel: def getStandardButtons(self): return int(QtGui.QDialogButtonBox.Cancel) def accept(self): - if FreeCAD.activeDraftCommand: - FreeCAD.activeDraftCommand.finish() + FreeCADGui.ActiveDocument.resetEdit() return True def reject(self): - if FreeCAD.activeDraftCommand: - FreeCAD.activeDraftCommand.finish() + FreeCADGui.ActiveDocument.resetEdit() return True class DraftToolBar: