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
{
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)
{
if (obj == NULL)

View File

@ -48,6 +48,9 @@ public:
};
// 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>
const QString getRefStr(const App::DocumentObject* obj, const std::vector<std::string>& sub);
/// 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));
}
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)
{
if (selectionMode == none)
@ -182,7 +165,7 @@ void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
} else if ((selectionMode == plane)) {
std::vector<std::string> planes;
App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, planes);
getReferencedSelection(pcDraft, msg, selObj, planes);
pcDraft->NeutralPlane.setValue(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")) {
std::vector<std::string> edges;
App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, edges);
getReferencedSelection(pcDraft, msg, selObj, edges);
pcDraft->PullDirection.setValue(selObj, edges);
ui->lineLine->setText(getRefStr(selObj, edges));

View File

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

View File

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

View File

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

View File

@ -209,8 +209,8 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges&
if (!blockUpdate) {
std::vector<std::string> axes;
App::DocumentObject* selObj;
getReferencedSelection(msg, selObj, axes);
PartDesign::PolarPattern* pcPolarPattern = static_cast<PartDesign::PolarPattern*>(getObject());
getReferencedSelection(pcPolarPattern, msg, selObj, axes);
pcPolarPattern->Axis.setValue(selObj, axes);
recomputeFeature();
@ -222,7 +222,8 @@ void TaskPolarPatternParameters::onSelectionChanged(const Gui::SelectionChanges&
std::vector<std::string> axes;
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->setCurrentIndex(1);
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));
}
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

View File

@ -86,10 +86,7 @@ protected:
void hideOriginals();
void showOriginals();
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);
void addReferenceSelectionGate(bool edge, bool face);
bool isViewUpdated() const;
int getUpdateViewTimeout() const;