Some code unification for Gui selections

This commit is contained in:
jrheinlaender 2013-05-23 17:29:40 +04:30 committed by Stefan Tröger
parent a8e4f0f1ca
commit 0e9ee59129
9 changed files with 32 additions and 50 deletions

View File

@ -116,6 +116,22 @@ bool ReferenceSelection::allow(App::Document* pDoc, App::DocumentObject* pObj, c
namespace PartDesignGui namespace PartDesignGui
{ {
void getReferencedSelection(const App::DocumentObject* thisObj, const Gui::SelectionChanges& msg,
App::DocumentObject*& selObj, std::vector<std::string>& selSub)
{
selObj = thisObj->getDocument()->getObject(msg.pObjectName);
if (selObj == thisObj)
return;
std::string subname = msg.pSubName;
// Remove subname for planes and datum features
if (PartDesign::Feature::isDatum(selObj)) {
subname = "";
}
selSub = std::vector<std::string>(1,subname);
}
const QString getRefStr(const App::DocumentObject* obj, const std::vector<std::string>& sub) const QString getRefStr(const App::DocumentObject* obj, const std::vector<std::string>& sub)
{ {
if (obj == NULL) if (obj == NULL)

View File

@ -48,6 +48,9 @@ public:
}; };
// Convenience methods // Convenience methods
/// Extract reference from Selection
void getReferencedSelection(const App::DocumentObject* thisObj, const Gui::SelectionChanges& msg,
App::DocumentObject*& selObj, std::vector<std::string>& selSub);
/// Return reference as string for UI elements (format <obj>:<subelement> /// Return reference as string for UI elements (format <obj>:<subelement>
const QString getRefStr(const App::DocumentObject* obj, const std::vector<std::string>& sub); const QString getRefStr(const App::DocumentObject* obj, const std::vector<std::string>& sub);
/// Return reference as string for python (format (<obj>, ["<subelement>"]) ) /// Return reference as string for python (format (<obj>, ["<subelement>"]) )

View File

@ -110,23 +110,6 @@ TaskDraftParameters::TaskDraftParameters(ViewProviderDraft *DraftView,QWidget *p
ui->lineLine->setText(getRefStr(ref, strings)); ui->lineLine->setText(getRefStr(ref, strings));
} }
void TaskDraftParameters::getReferencedSelection(const Gui::SelectionChanges& msg,
App::DocumentObject*& selObj, std::vector<std::string>& selSub)
{
PartDesign::DressUp* pcDressup = static_cast<PartDesign::DressUp*>(DraftView->getObject());
selObj = pcDressup->getDocument()->getObject(msg.pObjectName);
if (selObj == pcDressup)
return;
std::string subname = msg.pSubName;
// Remove subname for planes and datum features
if (PartDesign::Feature::isDatum(selObj)) {
subname = "";
}
selSub = std::vector<std::string>(1,subname);
}
void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg) void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
{ {
if (selectionMode == none) if (selectionMode == none)
@ -182,7 +165,7 @@ void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
} else if ((selectionMode == plane)) { } else if ((selectionMode == plane)) {
std::vector<std::string> planes; std::vector<std::string> planes;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, planes); getReferencedSelection(pcDraft, msg, selObj, planes);
pcDraft->NeutralPlane.setValue(selObj, planes); pcDraft->NeutralPlane.setValue(selObj, planes);
ui->linePlane->setText(getRefStr(selObj, planes)); ui->linePlane->setText(getRefStr(selObj, planes));
@ -192,7 +175,7 @@ void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
} else if ((selectionMode == line) && (subName.size() > 4 && subName.substr(0,4) == "Edge")) { } else if ((selectionMode == line) && (subName.size() > 4 && subName.substr(0,4) == "Edge")) {
std::vector<std::string> edges; std::vector<std::string> edges;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, edges); getReferencedSelection(pcDraft, msg, selObj, edges);
pcDraft->PullDirection.setValue(selObj, edges); pcDraft->PullDirection.setValue(selObj, edges);
ui->lineLine->setText(getRefStr(selObj, edges)); ui->lineLine->setText(getRefStr(selObj, edges));

View File

@ -83,10 +83,7 @@ private:
ViewProviderDraft *DraftView; ViewProviderDraft *DraftView;
enum selectionModes { none, faceAdd, faceRemove, plane, line }; enum selectionModes { none, faceAdd, faceRemove, plane, line };
selectionModes selectionMode; selectionModes selectionMode;
void getReferencedSelection(const Gui::SelectionChanges& msg,
App::DocumentObject*& selObj, std::vector<std::string>& selSub);
}; };
/// simulation dialog for the TaskView /// simulation dialog for the TaskView

View File

@ -239,8 +239,8 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges
if (!blockUpdate) { if (!blockUpdate) {
std::vector<std::string> directions; std::vector<std::string> directions;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, directions);
PartDesign::LinearPattern* pcLinearPattern = static_cast<PartDesign::LinearPattern*>(getObject()); PartDesign::LinearPattern* pcLinearPattern = static_cast<PartDesign::LinearPattern*>(getObject());
getReferencedSelection(pcLinearPattern, msg, selObj, directions);
pcLinearPattern->Direction.setValue(selObj, directions); pcLinearPattern->Direction.setValue(selObj, directions);
recomputeFeature(); recomputeFeature();
@ -256,7 +256,8 @@ void TaskLinearPatternParameters::onSelectionChanged(const Gui::SelectionChanges
std::vector<std::string> directions; std::vector<std::string> directions;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, directions); PartDesign::LinearPattern* pcLinearPattern = static_cast<PartDesign::LinearPattern*>(getObject());
getReferencedSelection(pcLinearPattern, msg, selObj, directions);
ui->comboDirection->addItem(getRefStr(selObj, directions)); ui->comboDirection->addItem(getRefStr(selObj, directions));
ui->comboDirection->setCurrentIndex(maxcount); ui->comboDirection->setCurrentIndex(maxcount);
ui->comboDirection->addItem(tr("Select reference...")); ui->comboDirection->addItem(tr("Select reference..."));

View File

@ -195,8 +195,8 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg
if (!blockUpdate) { if (!blockUpdate) {
std::vector<std::string> mirrorPlanes; std::vector<std::string> mirrorPlanes;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, mirrorPlanes);
PartDesign::Mirrored* pcMirrored = static_cast<PartDesign::Mirrored*>(getObject()); PartDesign::Mirrored* pcMirrored = static_cast<PartDesign::Mirrored*>(getObject());
getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes);
pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes); pcMirrored->MirrorPlane.setValue(selObj, mirrorPlanes);
recomputeFeature(); recomputeFeature();
@ -212,7 +212,8 @@ void TaskMirroredParameters::onSelectionChanged(const Gui::SelectionChanges& msg
std::vector<std::string> mirrorPlanes; std::vector<std::string> mirrorPlanes;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, mirrorPlanes); PartDesign::Mirrored* pcMirrored = static_cast<PartDesign::Mirrored*>(getObject());
getReferencedSelection(pcMirrored, msg, selObj, mirrorPlanes);
ui->comboPlane->addItem(getRefStr(selObj, mirrorPlanes)); ui->comboPlane->addItem(getRefStr(selObj, mirrorPlanes));
ui->comboPlane->setCurrentIndex(maxcount); ui->comboPlane->setCurrentIndex(maxcount);
ui->comboPlane->addItem(tr("Select reference...")); ui->comboPlane->addItem(tr("Select reference..."));

View File

@ -209,8 +209,8 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges&
if (!blockUpdate) { if (!blockUpdate) {
std::vector<std::string> axes; std::vector<std::string> axes;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, axes);
PartDesign::PolarPattern* pcPolarPattern = static_cast<PartDesign::PolarPattern*>(getObject()); PartDesign::PolarPattern* pcPolarPattern = static_cast<PartDesign::PolarPattern*>(getObject());
getReferencedSelection(pcPolarPattern, msg, selObj, axes);
pcPolarPattern->Axis.setValue(selObj, axes); pcPolarPattern->Axis.setValue(selObj, axes);
recomputeFeature(); recomputeFeature();
@ -222,7 +222,8 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges&
std::vector<std::string> axes; std::vector<std::string> axes;
App::DocumentObject* selObj; App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, axes); PartDesign::PolarPattern* pcPolarPattern = static_cast<PartDesign::PolarPattern*>(getObject());
getReferencedSelection(pcPolarPattern, msg, selObj, axes);
ui->comboAxis->addItem(getRefStr(selObj, axes)); ui->comboAxis->addItem(getRefStr(selObj, axes));
ui->comboAxis->setCurrentIndex(1); ui->comboAxis->setCurrentIndex(1);
ui->comboAxis->addItem(tr("Select reference...")); ui->comboAxis->addItem(tr("Select reference..."));

View File

@ -228,23 +228,6 @@ void TaskTransformedParameters::addReferenceSelectionGate(bool edge, bool face)
Gui::Selection().addSelectionGate(new ReferenceSelection(getSupportObject(), edge, face, true)); Gui::Selection().addSelectionGate(new ReferenceSelection(getSupportObject(), edge, face, true));
} }
void TaskTransformedParameters::getReferencedSelection(const Gui::SelectionChanges& msg,
App::DocumentObject*& selObj, std::vector<std::string>& selSub)
{
PartDesign::Transformed* pcTransformed = static_cast<PartDesign::Transformed*>(getObject());
selObj = pcTransformed->getDocument()->getObject(msg.pObjectName);
if (selObj == pcTransformed)
return;
std::string subname = msg.pSubName;
// Remove subname for planes and datum features
if (PartDesign::Feature::isDatum(selObj)) {
subname = "";
}
selSub = std::vector<std::string>(1,subname);
}
//************************************************************************** //**************************************************************************
//************************************************************************** //**************************************************************************
// TaskDialog // TaskDialog

View File

@ -86,10 +86,7 @@ protected:
void hideOriginals(); void hideOriginals();
void showOriginals(); void showOriginals();
void addReferenceSelectionGate(bool edge, bool face); void addReferenceSelectionGate(bool edge, bool face);
/// Extract reference from Selection (convenience method)
void getReferencedSelection(const Gui::SelectionChanges& msg,
App::DocumentObject*& selObj, std::vector<std::string>& selSub);
bool isViewUpdated() const; bool isViewUpdated() const;
int getUpdateViewTimeout() const; int getUpdateViewTimeout() const;