Sketcher: Refactor miscelaneous command isActive()

This commit is contained in:
Abdullah Tahiri
2023-02-07 15:33:09 +01:00
committed by abdullahtahiriyo
parent fbbadde9fe
commit fe405fcefb
3 changed files with 26 additions and 29 deletions

View File

@@ -50,6 +50,7 @@
#include "SketchOrientationDialog.h"
#include "TaskSketcherValidation.h"
#include "ViewProviderSketch.h"
#include "Utils.h"
using namespace std;
@@ -130,14 +131,6 @@ namespace SketcherGui {
}
} //namespace SketcherGui
bool isSketchInEdit(Gui::Document* doc) {
if (doc) {
// checks if a Sketch Viewprovider is in Edit and is in no special mode
auto* vp = dynamic_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit());
return (vp != nullptr);
}
return false;
}
/* Sketch commands =======================================================*/
DEF_STD_CMD_A(CmdSketcherNewSketch)
@@ -363,13 +356,7 @@ void CmdSketcherStopOperation::activated(int iMsg)
bool CmdSketcherStopOperation::isActive()
{
Gui::Document *doc = getActiveGuiDocument();
if (doc) {
SketcherGui::ViewProviderSketch* vp = dynamic_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit());
if (vp)
return true;
}
return false;
return isSketchInEdit(getActiveGuiDocument());
}
DEF_STD_CMD_A(CmdSketcherReorientSketch)

View File

@@ -315,22 +315,28 @@ void SketcherGui::ActivateHandler(Gui::Document* doc, DrawSketchHandler* handler
}
}
bool SketcherGui::isCommandActive(Gui::Document* doc, bool actsOnSelection)
{
bool SketcherGui::isSketchInEdit(Gui::Document* doc) {
if (doc) {
// checks if a Sketch Viewprovider is in Edit and is in no special mode
if (doc->getInEdit()
&& doc->getInEdit()->isDerivedFrom(SketcherGui::ViewProviderSketch::getClassTypeId())) {
auto mode =
static_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit())->getSketchMode();
if (mode == ViewProviderSketch::STATUS_NONE
|| mode == ViewProviderSketch::STATUS_SKETCH_UseHandler) {
if (!actsOnSelection)
return true;
else if (Gui::Selection().countObjectsOfType(
Sketcher::SketchObject::getClassTypeId())
> 0)
return true;
auto* vp = dynamic_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit());
return (vp != nullptr);
}
return false;
}
bool SketcherGui::isCommandActive(Gui::Document* doc, bool actsOnSelection)
{
if(isSketchInEdit(doc)) {
auto mode = static_cast<SketcherGui::ViewProviderSketch*>(doc->getInEdit())->getSketchMode();
if (mode == ViewProviderSketch::STATUS_NONE ||
mode == ViewProviderSketch::STATUS_SKETCH_UseHandler) {
if (!actsOnSelection) {
return true;
}
else if (Gui::Selection().countObjectsOfType(Sketcher::SketchObject::getClassTypeId()) > 0) {
return true;
}
}
}

View File

@@ -117,6 +117,10 @@ double GetPointAngle (const Base::Vector2d &p1, const Base::Vector2d &p2);
void ActivateHandler(Gui::Document *doc, DrawSketchHandler *handler);
/// Returns if a sketch is in edit mode
bool isSketchInEdit(Gui::Document* doc);
/// Returns whether an edit mode command should be activated or not. It is only activated if the sketcher is no special state or a sketchHandler is active.
bool isCommandActive(Gui::Document *doc, bool actsOnSelection = false);
SketcherGui::ViewProviderSketch* getSketchViewprovider(Gui::Document *doc);