diff --git a/src/Mod/Sketcher/Gui/CMakeLists.txt b/src/Mod/Sketcher/Gui/CMakeLists.txt index cfbcb4e0f..7bab80e82 100644 --- a/src/Mod/Sketcher/Gui/CMakeLists.txt +++ b/src/Mod/Sketcher/Gui/CMakeLists.txt @@ -63,7 +63,7 @@ SET(SketcherGui_SRCS Command.cpp CommandCreateGeo.cpp CommandConstraints.cpp - CommandSketcherAccel.cpp + CommandSketcherTools.cpp CommandAlterGeometry.cpp Resources/Sketcher.qrc PreCompiled.cpp diff --git a/src/Mod/Sketcher/Gui/CommandSketcherAccel.cpp b/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp similarity index 96% rename from src/Mod/Sketcher/Gui/CommandSketcherAccel.cpp rename to src/Mod/Sketcher/Gui/CommandSketcherTools.cpp index e979ef702..52dbe42cb 100644 --- a/src/Mod/Sketcher/Gui/CommandSketcherAccel.cpp +++ b/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp @@ -99,6 +99,7 @@ void CmdSketcherCloseShape::activated(int iMsg) QObject::tr("Select at least two edges from the sketch.")); return; } + Sketcher::SketchObject* Obj = dynamic_cast(selection[0].getObject()); int GeoIdFirst=-1; @@ -131,6 +132,16 @@ void CmdSketcherCloseShape::activated(int iMsg) abortCommand(); return; } + + // Check for the special case of closing a shape with two lines to avoid overlap + if (SubNames.size() == 2 && + geo1->getTypeId() == Part::GeomLineSegment::getClassTypeId() && + geo2->getTypeId() == Part::GeomLineSegment::getClassTypeId() ) { + QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"), + QObject::tr("Closing a shape formed by exactly two lines makes no sense.")); + abortCommand(); + return; + } Gui::Command::doCommand( Doc,"App.ActiveDocument.%s.addConstraint(Sketcher.Constraint('Coincident',%d,%d,%d,%d)) ", diff --git a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp index f699af27d..74181474d 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp @@ -55,11 +55,12 @@ using namespace Gui::TaskView; /// NAMESTR is the text appearing in the contextual menuAction /// CMDSTR is the string registered in the commandManager /// FUNC is the name of the member function to be executed on selection of the menu item -#define CONTEXT_ITEM(ICONSTR,NAMESTR,CMDSTR,FUNC) \ +/// ACTSONSELECTION is a true/false value to activate the command only if a selection is made +#define CONTEXT_ITEM(ICONSTR,NAMESTR,CMDSTR,FUNC,ACTSONSELECTION) \ QIcon icon_ ## FUNC( Gui::BitmapFactory().pixmap(ICONSTR) ); \ QAction* constr_ ## FUNC = menu.addAction(icon_ ## FUNC,tr(NAMESTR), this, SLOT(FUNC()), \ - QKeySequence(QString::fromUtf8(Gui::Application::Instance->commandManager().getCommandByName(CMDSTR)->getAccel()))); \ - constr_ ## FUNC->setEnabled(!items.isEmpty()); + QKeySequence(QString::fromUtf8(Gui::Application::Instance->commandManager().getCommandByName(CMDSTR)->getAccel()))); \ + if(ACTSONSELECTION) constr_ ## FUNC->setEnabled(!items.isEmpty()); else constr_ ## FUNC->setEnabled(true); /// Defines the member function corresponding to the CONTEXT_ITEM macro #define CONTEXT_MEMBER_DEF(CMDSTR,FUNC) \ @@ -121,34 +122,34 @@ void ElementView::contextMenuEvent (QContextMenuEvent* event) QList items = selectedItems(); // CONTEXT_ITEM(ICONSTR,NAMESTR,FUNC,KEY) - CONTEXT_ITEM("Constraint_PointOnPoint","Point Coincidence","Sketcher_ConstrainCoincident",doPointCoincidence) - CONTEXT_ITEM("Constraint_PointOnObject","Point on Object","Sketcher_ConstrainPointOnObject",doPointOnObjectConstraint) - CONTEXT_ITEM("Constraint_Vertical","Vertical Constraint","Sketcher_ConstrainVertical", doVerticalConstraint) - CONTEXT_ITEM("Constraint_Horizontal","Horizontal Constraint","Sketcher_ConstrainHorizontal",doHorizontalConstraint) - CONTEXT_ITEM("Constraint_Parallel","Parallel Constraint","Sketcher_ConstrainParallel",doParallelConstraint) - CONTEXT_ITEM("Constraint_Perpendicular","Perpendicular Constraint","Sketcher_ConstrainPerpendicular",doPerpendicularConstraint) - CONTEXT_ITEM("Constraint_Tangent","Tangent Constraint","Sketcher_ConstrainTangent",doTangentConstraint) - CONTEXT_ITEM("Constraint_EqualLength","Equal Length","Sketcher_ConstrainEqual",doEqualConstraint) - CONTEXT_ITEM("Constraint_Symmetric","Symetric","Sketcher_ConstrainSymmetric",doSymetricConstraint) - CONTEXT_ITEM("Sketcher_ConstrainLock","Lock Constraint","Sketcher_ConstrainLock",doLockConstraint) - CONTEXT_ITEM("Constraint_HorizontalDistance","Horizontal Distance","Sketcher_ConstrainDistanceX",doHorizontalDistance) - CONTEXT_ITEM("Constraint_VerticalDistance","Vertical Distance","Sketcher_ConstrainDistanceY",doVerticalDistance) - CONTEXT_ITEM("Constraint_Length","Length Constraint","Sketcher_ConstrainDistance",doLengthConstraint) - CONTEXT_ITEM("Constraint_Radius","Radius Constraint","Sketcher_ConstrainRadius",doRadiusConstraint) - CONTEXT_ITEM("Constraint_InternalAngle","Angle Constraint","Sketcher_ConstrainAngle",doAngleConstraint) + CONTEXT_ITEM("Constraint_PointOnPoint","Point Coincidence","Sketcher_ConstrainCoincident",doPointCoincidence,true) + CONTEXT_ITEM("Constraint_PointOnObject","Point on Object","Sketcher_ConstrainPointOnObject",doPointOnObjectConstraint,true) + CONTEXT_ITEM("Constraint_Vertical","Vertical Constraint","Sketcher_ConstrainVertical", doVerticalConstraint,true) + CONTEXT_ITEM("Constraint_Horizontal","Horizontal Constraint","Sketcher_ConstrainHorizontal",doHorizontalConstraint,true) + CONTEXT_ITEM("Constraint_Parallel","Parallel Constraint","Sketcher_ConstrainParallel",doParallelConstraint,true) + CONTEXT_ITEM("Constraint_Perpendicular","Perpendicular Constraint","Sketcher_ConstrainPerpendicular",doPerpendicularConstraint,true) + CONTEXT_ITEM("Constraint_Tangent","Tangent Constraint","Sketcher_ConstrainTangent",doTangentConstraint,true) + CONTEXT_ITEM("Constraint_EqualLength","Equal Length","Sketcher_ConstrainEqual",doEqualConstraint,true) + CONTEXT_ITEM("Constraint_Symmetric","Symetric","Sketcher_ConstrainSymmetric",doSymetricConstraint,true) + CONTEXT_ITEM("Sketcher_ConstrainLock","Lock Constraint","Sketcher_ConstrainLock",doLockConstraint,true) + CONTEXT_ITEM("Constraint_HorizontalDistance","Horizontal Distance","Sketcher_ConstrainDistanceX",doHorizontalDistance,true) + CONTEXT_ITEM("Constraint_VerticalDistance","Vertical Distance","Sketcher_ConstrainDistanceY",doVerticalDistance,true) + CONTEXT_ITEM("Constraint_Length","Length Constraint","Sketcher_ConstrainDistance",doLengthConstraint,true) + CONTEXT_ITEM("Constraint_Radius","Radius Constraint","Sketcher_ConstrainRadius",doRadiusConstraint,true) + CONTEXT_ITEM("Constraint_InternalAngle","Angle Constraint","Sketcher_ConstrainAngle",doAngleConstraint,true) QAction* sep = menu.addSeparator(); - CONTEXT_ITEM("Sketcher_AlterConstruction","Toggle construction line","Sketcher_ToggleConstruction",doToggleConstruction) + CONTEXT_ITEM("Sketcher_AlterConstruction","Toggle construction line","Sketcher_ToggleConstruction",doToggleConstruction,true) QAction* sep1 = menu.addSeparator(); - CONTEXT_ITEM("Sketcher_CloseShape","Close Shape","Sketcher_CloseShape",doCloseShape) - CONTEXT_ITEM("Sketcher_ConnectLines","Connect","Sketcher_ConnectLines",doConnect) - CONTEXT_ITEM("Sketcher_SelectConstraints","Select Constraints","Sketcher_SelectConstraints",doSelectConstraints) - CONTEXT_ITEM("Sketcher_SelectOrigin","Select Origin","Sketcher_SelectOrigin",doSelectOrigin) - CONTEXT_ITEM("Sketcher_SelectHorizontalAxis","Select Horizontal Axis","Sketcher_SelectHorizontalAxis",doSelectHAxis) - CONTEXT_ITEM("Sketcher_SelectVerticalAxis","Select Vertical Axis","Sketcher_SelectVerticalAxis",doSelectVAxis) + CONTEXT_ITEM("Sketcher_CloseShape","Close Shape","Sketcher_CloseShape",doCloseShape,true) + CONTEXT_ITEM("Sketcher_ConnectLines","Connect","Sketcher_ConnectLines",doConnect,true) + CONTEXT_ITEM("Sketcher_SelectConstraints","Select Constraints","Sketcher_SelectConstraints",doSelectConstraints,true) + CONTEXT_ITEM("Sketcher_SelectOrigin","Select Origin","Sketcher_SelectOrigin",doSelectOrigin,false) + CONTEXT_ITEM("Sketcher_SelectHorizontalAxis","Select Horizontal Axis","Sketcher_SelectHorizontalAxis",doSelectHAxis,false) + CONTEXT_ITEM("Sketcher_SelectVerticalAxis","Select Vertical Axis","Sketcher_SelectVerticalAxis",doSelectVAxis,false) QAction* sep2 = menu.addSeparator(); @@ -254,7 +255,6 @@ TaskSketcherElements::TaskSketcherElements(ViewProviderSketch *sketchView) ui->autoSwitchBox, SIGNAL(stateChanged(int)), this , SLOT (on_autoSwitchBox_stateChanged(int)) ); - connectionElementsChanged = sketchView->signalElementsChanged.connect( boost::bind(&SketcherGui::TaskSketcherElements::slotElementsChanged, this)); @@ -726,6 +726,7 @@ void TaskSketcherElements::on_autoSwitchBox_stateChanged(int state) { isautoSwitchBoxChecked=(state==Qt::Checked); ui->comboBoxElementFilter->setCurrentIndex(0); + ui->comboBoxElementFilter->setEnabled(!isautoSwitchBoxChecked); } void TaskSketcherElements::on_listWidgetElements_currentFilterChanged ( int index ) diff --git a/src/Mod/Sketcher/Gui/Workbench.cpp b/src/Mod/Sketcher/Gui/Workbench.cpp index ab4ddc7a2..04b77b90b 100644 --- a/src/Mod/Sketcher/Gui/Workbench.cpp +++ b/src/Mod/Sketcher/Gui/Workbench.cpp @@ -37,7 +37,7 @@ using namespace SketcherGui; qApp->translate("Workbench", "Sketcher"); qApp->translate("Workbench", "Sketcher geometries"); qApp->translate("Workbench", "Sketcher constraints"); - qApp->translate("Workbench", "Sketcher accelerators"); + qApp->translate("Workbench", "Sketcher tools"); #endif /// @namespace SketcherGui @class Workbench @@ -77,8 +77,8 @@ Gui::MenuItem* Workbench::setupMenuBar() const addSketcherWorkbenchConstraints(*cons); Gui::MenuItem* consaccel = new Gui::MenuItem(); - consaccel->setCommand("Sketcher accelerators"); - addSketcherWorkbenchAccelerators(*consaccel); + consaccel->setCommand("Sketcher tools"); + addSketcherWorkbenchTools(*consaccel); addSketcherWorkbenchSketchActions( *sketch ); *sketch << geom @@ -105,8 +105,8 @@ Gui::ToolBarItem* Workbench::setupToolBars() const addSketcherWorkbenchConstraints( *cons ); Gui::ToolBarItem* consaccel = new Gui::ToolBarItem(root); - consaccel->setCommand("Sketcher accelerators"); - addSketcherWorkbenchAccelerators( *consaccel ); + consaccel->setCommand("Sketcher tools"); + addSketcherWorkbenchTools( *consaccel ); return root; } @@ -200,10 +200,10 @@ inline void SketcherAddWorkbenchConstraints(T& cons){ } template -inline void SketcherAddWorkbenchAccelerators(T& consaccel); +inline void SketcherAddWorkbenchTools(T& consaccel); template <> -inline void SketcherAddWorkbenchAccelerators(Gui::MenuItem& consaccel){ +inline void SketcherAddWorkbenchTools(Gui::MenuItem& consaccel){ consaccel << "Sketcher_CloseShape" << "Sketcher_ConnectLines" << "Sketcher_SelectConstraints" @@ -212,8 +212,10 @@ inline void SketcherAddWorkbenchAccelerators(Gui::MenuItem& consa << "Sketcher_SelectHorizontalAxis"; } template <> -inline void SketcherAddWorkbenchAccelerators(Gui::ToolBarItem& consaccel){ - consaccel << "Sketcher_CloseShape"; +inline void SketcherAddWorkbenchTools(Gui::ToolBarItem& consaccel){ + consaccel << "Sketcher_CloseShape" + << "Sketcher_ConnectLines" + << "Sketcher_SelectConstraints"; } template @@ -241,8 +243,8 @@ inline void Sketcher_addWorkbenchSketchActions(T& sketch){ void addSketcherWorkbenchConstraints( Gui::MenuItem& cons ){ SketcherAddWorkbenchConstraints( cons ); } -void addSketcherWorkbenchAccelerators( Gui::MenuItem& consaccel ){ - SketcherAddWorkbenchAccelerators( consaccel ); +void addSketcherWorkbenchTools( Gui::MenuItem& consaccel ){ + SketcherAddWorkbenchTools( consaccel ); } void addSketcherWorkbenchSketchActions( Gui::MenuItem& sketch ){ Sketcher_addWorkbenchSketchActions( sketch ); @@ -254,9 +256,9 @@ void addSketcherWorkbenchGeometries( Gui::MenuItem& geom ){ void addSketcherWorkbenchConstraints( Gui::ToolBarItem& cons ){ SketcherAddWorkbenchConstraints( cons ); } -void addSketcherWorkbenchAccelerators( Gui::ToolBarItem& consaccel ) +void addSketcherWorkbenchTools( Gui::ToolBarItem& consaccel ) { - SketcherAddWorkbenchAccelerators( consaccel ); + SketcherAddWorkbenchTools( consaccel ); } void addSketcherWorkbenchSketchActions( Gui::ToolBarItem& sketch ){ Sketcher_addWorkbenchSketchActions( sketch ); diff --git a/src/Mod/Sketcher/Gui/Workbench.h b/src/Mod/Sketcher/Gui/Workbench.h index 9c8a2ba4e..d9ead5842 100644 --- a/src/Mod/Sketcher/Gui/Workbench.h +++ b/src/Mod/Sketcher/Gui/Workbench.h @@ -51,12 +51,12 @@ protected: SketcherGuiExport void addSketcherWorkbenchConstraints( Gui::MenuItem& cons ); -SketcherGuiExport void addSketcherWorkbenchAccelerators( Gui::MenuItem& consaccel ); +SketcherGuiExport void addSketcherWorkbenchTools( Gui::MenuItem& consaccel ); SketcherGuiExport void addSketcherWorkbenchSketchActions( Gui::MenuItem& sketch ); SketcherGuiExport void addSketcherWorkbenchGeometries( Gui::MenuItem& geom ); SketcherGuiExport void addSketcherWorkbenchConstraints( Gui::ToolBarItem& cons ); -SketcherGuiExport void addSketcherWorkbenchAccelerators( Gui::ToolBarItem& consaccel ); +SketcherGuiExport void addSketcherWorkbenchTools( Gui::ToolBarItem& consaccel ); SketcherGuiExport void addSketcherWorkbenchSketchActions( Gui::ToolBarItem& sketch ); SketcherGuiExport void addSketcherWorkbenchGeometries( Gui::ToolBarItem& geom );