| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include <App/Application.h> |
| | #include <Base/Console.h> |
| | #include <Gui/Action.h> |
| | #include <Gui/Application.h> |
| | #include <Gui/BitmapFactory.h> |
| | #include <Gui/CommandT.h> |
| | #include <Gui/Document.h> |
| | #include <Gui/MainWindow.h> |
| | #include <Gui/Notifications.h> |
| | #include <Gui/Selection/Selection.h> |
| | #include <Gui/Selection/SelectionObject.h> |
| |
|
| | #include "DrawSketchHandler.h" |
| | #include "ViewProviderSketch.h" |
| |
|
| | #include <Mod/Part/App/Geometry.h> |
| | #include <Mod/Sketcher/App/SketchObject.h> |
| |
|
| | #include "Utils.h" |
| |
|
| |
|
| | using namespace std; |
| | using namespace SketcherGui; |
| | using namespace Sketcher; |
| |
|
| | bool isSketcherVirtualSpaceActive(Gui::Document* doc, bool actsOnSelection) |
| | { |
| | if (doc) { |
| | |
| | if (doc->getInEdit() && doc->getInEdit()->isDerivedFrom<SketcherGui::ViewProviderSketch>()) { |
| | if (static_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit())->getSketchMode() |
| | == ViewProviderSketch::STATUS_NONE) { |
| | if (!actsOnSelection) { |
| | return true; |
| | } |
| | else if (Gui::Selection().countObjectsOfType<Sketcher::SketchObject>() > 0) { |
| | return true; |
| | } |
| | } |
| | } |
| | } |
| | return false; |
| | } |
| |
|
| | void ActivateVirtualSpaceHandler(Gui::Document* doc, DrawSketchHandler* handler) |
| | { |
| | std::unique_ptr<DrawSketchHandler> ptr(handler); |
| | if (doc) { |
| | if (doc->getInEdit() && doc->getInEdit()->isDerivedFrom<SketcherGui::ViewProviderSketch>()) { |
| | SketcherGui::ViewProviderSketch* vp = static_cast<SketcherGui::ViewProviderSketch*>( |
| | doc->getInEdit() |
| | ); |
| | vp->purgeHandler(); |
| | vp->activateHandler(std::move(ptr)); |
| | } |
| | } |
| | } |
| |
|
| | |
| | DEF_STD_CMD_A(CmdSketcherSwitchVirtualSpace) |
| |
|
| | CmdSketcherSwitchVirtualSpace::CmdSketcherSwitchVirtualSpace() |
| | : Command("Sketcher_SwitchVirtualSpace") |
| | { |
| | sAppModule = "Sketcher"; |
| | sGroup = "Sketcher"; |
| | sMenuText = QT_TR_NOOP("Switch Virtual Space"); |
| | sToolTipText = QT_TR_NOOP( |
| | "Switches the selected constraints or the view to the other virtual space" |
| | ); |
| | sWhatsThis = "Sketcher_SwitchVirtualSpace"; |
| | sStatusTip = sToolTipText; |
| | sPixmap = "Sketcher_SwitchVirtualSpace"; |
| | sAccel = "Z, Z"; |
| | eType = ForEdit; |
| | } |
| |
|
| | void CmdSketcherSwitchVirtualSpace::activated(int iMsg) |
| | { |
| | Q_UNUSED(iMsg); |
| | bool modeChange = true; |
| |
|
| | std::vector<Gui::SelectionObject> selection; |
| |
|
| | if (Gui::Selection().countObjectsOfType<Sketcher::SketchObject>() > 0) { |
| | |
| | selection = getSelection().getSelectionEx(); |
| |
|
| | |
| | if (selection.size() != 1 |
| | || !selection[0].isObjectTypeOf(Sketcher::SketchObject::getClassTypeId())) { |
| | Gui::TranslatedUserWarning( |
| | getActiveGuiDocument(), |
| | QObject::tr("Wrong selection"), |
| | QObject::tr("Select constraints from the sketch.") |
| | ); |
| | return; |
| | } |
| |
|
| | |
| | const std::vector<std::string>& SubNames = selection[0].getSubNames(); |
| | if (SubNames.empty()) { |
| | Gui::TranslatedUserWarning( |
| | getActiveGuiDocument(), |
| | QObject::tr("Wrong selection"), |
| | QObject::tr("Select constraints from the sketch.") |
| | ); |
| | return; |
| | } |
| |
|
| | for (std::vector<std::string>::const_iterator it = SubNames.begin(); it != SubNames.end(); |
| | ++it) { |
| | |
| | if (it->size() > 10 && it->substr(0, 10) == "Constraint") { |
| | modeChange = false; |
| | } |
| | } |
| | } |
| |
|
| | if (modeChange) { |
| | Gui::Document* doc = getActiveGuiDocument(); |
| |
|
| | SketcherGui::ViewProviderSketch* vp = static_cast<SketcherGui::ViewProviderSketch*>( |
| | doc->getInEdit() |
| | ); |
| | vp->setIsShownVirtualSpace(!vp->getIsShownVirtualSpace()); |
| | } |
| | |
| | else { |
| | |
| | const std::vector<std::string>& SubNames = selection[0].getSubNames(); |
| | if (SubNames.empty()) { |
| | Gui::TranslatedUserWarning( |
| | getActiveGuiDocument(), |
| | QObject::tr("Wrong selection"), |
| | QObject::tr("Select constraints from the sketch.") |
| | ); |
| |
|
| | return; |
| | } |
| |
|
| | SketcherGui::ViewProviderSketch* sketchgui = static_cast<SketcherGui::ViewProviderSketch*>( |
| | getActiveGuiDocument()->getInEdit() |
| | ); |
| | Sketcher::SketchObject* Obj = sketchgui->getSketchObject(); |
| |
|
| | |
| | openCommand(QT_TRANSLATE_NOOP("Command", "Toggle constraints to the other virtual space")); |
| |
|
| | int successful = SubNames.size(); |
| | |
| | for (std::vector<std::string>::const_iterator it = SubNames.begin(); it != SubNames.end(); |
| | ++it) { |
| | |
| | if (it->size() > 10 && it->substr(0, 10) == "Constraint") { |
| | int ConstrId = Sketcher::PropertyConstraintList::getIndexFromConstraintName(*it); |
| | Gui::Command::openCommand( |
| | QT_TRANSLATE_NOOP("Command", "Update constraint's virtual space") |
| | ); |
| | try { |
| | Gui::cmdAppObjectArgs(Obj, "toggleVirtualSpace(%d)", ConstrId); |
| | } |
| | catch (const Base::Exception&) { |
| | successful--; |
| | } |
| | } |
| | } |
| |
|
| | if (successful > 0) { |
| | commitCommand(); |
| | } |
| | else { |
| | abortCommand(); |
| | } |
| |
|
| | |
| | tryAutoRecompute(Obj); |
| | getSelection().clearSelection(); |
| | } |
| | } |
| |
|
| | bool CmdSketcherSwitchVirtualSpace::isActive() |
| | { |
| | return isSketcherVirtualSpaceActive(getActiveGuiDocument(), false); |
| | } |
| |
|
| | void CreateSketcherCommandsVirtualSpace() |
| | { |
| | Gui::CommandManager& rcCmdMgr = Gui::Application::Instance->commandManager(); |
| |
|
| | rcCmdMgr.addCommand(new CmdSketcherSwitchVirtualSpace()); |
| | } |
| |
|