Attacher: rework UI
* Remove hint system on buttons. Buttons show currently selected reference type, instead. * Change button's caption to "Selecting..." when selecting. * internal logic rearrangements
This commit is contained in:
parent
f947101938
commit
a392927750
|
@ -211,6 +211,14 @@ TaskDatumParameters::TaskDatumParameters(ViewProviderDatum *DatumView,QWidget *p
|
||||||
ui->buttonRef4->blockSignals(false);
|
ui->buttonRef4->blockSignals(false);
|
||||||
ui->lineRef4->blockSignals(false);
|
ui->lineRef4->blockSignals(false);
|
||||||
ui->listOfModes->blockSignals(false);
|
ui->listOfModes->blockSignals(false);
|
||||||
|
|
||||||
|
if (pcDatum->Support.getSize() == 0){
|
||||||
|
autoNext = true;
|
||||||
|
this->iActiveRef = 0;
|
||||||
|
} else {
|
||||||
|
autoNext = false;
|
||||||
|
}
|
||||||
|
|
||||||
updateUI();
|
updateUI();
|
||||||
updateListOfModes(eMapMode(pcDatum->MapMode.getValue()));
|
updateListOfModes(eMapMode(pcDatum->MapMode.getValue()));
|
||||||
|
|
||||||
|
@ -227,11 +235,6 @@ TaskDatumParameters::TaskDatumParameters(ViewProviderDatum *DatumView,QWidget *p
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pcDatum->Support.getSize() == 0)
|
|
||||||
autoNext = true;
|
|
||||||
else
|
|
||||||
autoNext = false;
|
|
||||||
|
|
||||||
DatumView->setPickable(false);
|
DatumView->setPickable(false);
|
||||||
|
|
||||||
// connect object deletion with slot
|
// connect object deletion with slot
|
||||||
|
@ -314,13 +317,16 @@ void TaskDatumParameters::updateUI(std::string message, bool error)
|
||||||
std::vector<App::DocumentObject*> refs = pcDatum->Support.getValues();
|
std::vector<App::DocumentObject*> refs = pcDatum->Support.getValues();
|
||||||
completed = false;
|
completed = false;
|
||||||
|
|
||||||
// Get hints for further required references
|
// Get hints for further required references...
|
||||||
SuggestResult sugr;
|
// DeepSOIC: hint system became useless since inertial system attachment
|
||||||
|
// modes have been introduced, becuase they accept any number of references
|
||||||
|
// of any type, so the hint will always be 'Any'. I keep the logic
|
||||||
|
// nevertheless, in case it is decided to resurrect hint system.
|
||||||
|
|
||||||
pcDatum->attacher().suggestMapModes(sugr);
|
pcDatum->attacher().suggestMapModes(this->lastSuggestResult);
|
||||||
|
|
||||||
if (sugr.message != SuggestResult::srOK) {
|
if (this->lastSuggestResult.message != SuggestResult::srOK) {
|
||||||
if(sugr.nextRefTypeHint.size() > 0)
|
if(this->lastSuggestResult.nextRefTypeHint.size() > 0)
|
||||||
message = "Need more references";
|
message = "Need more references";
|
||||||
} else {
|
} else {
|
||||||
completed = true;
|
completed = true;
|
||||||
|
@ -330,53 +336,13 @@ void TaskDatumParameters::updateUI(std::string message, bool error)
|
||||||
Base::Vector3d val;
|
Base::Vector3d val;
|
||||||
pcDatum->superPlacement.getValue().getRotation().getValue(val, angle);
|
pcDatum->superPlacement.getValue().getRotation().getValue(val, angle);
|
||||||
|
|
||||||
// Enable the next reference button
|
|
||||||
int numrefs = refs.size();
|
|
||||||
|
|
||||||
ui->buttonRef2->setEnabled(numrefs >= 1);
|
|
||||||
ui->lineRef2->setEnabled(numrefs >= 1);
|
|
||||||
ui->buttonRef3->setEnabled(numrefs >= 2);
|
|
||||||
ui->lineRef3->setEnabled(numrefs >= 2);
|
|
||||||
ui->buttonRef4->setEnabled(numrefs >= 3);
|
|
||||||
ui->lineRef4->setEnabled(numrefs >= 3);
|
|
||||||
|
|
||||||
ui->labelAngle->setEnabled(true);
|
ui->labelAngle->setEnabled(true);
|
||||||
ui->spinAngle->setEnabled(true);
|
ui->spinAngle->setEnabled(true);
|
||||||
|
|
||||||
QString hintText = makeHintText(sugr.nextRefTypeHint);
|
updateRefButton(0);
|
||||||
|
updateRefButton(1);
|
||||||
// Check if we have all required references
|
updateRefButton(2);
|
||||||
if (sugr.nextRefTypeHint.size() == 0) {
|
updateRefButton(3);
|
||||||
ui->buttonRef2->setEnabled(numrefs >= 2);
|
|
||||||
ui->lineRef2->setEnabled(numrefs >= 2);
|
|
||||||
ui->buttonRef3->setEnabled(numrefs >= 3);
|
|
||||||
ui->lineRef3->setEnabled(numrefs >= 3);
|
|
||||||
ui->buttonRef4->setEnabled(numrefs >= 4);
|
|
||||||
ui->lineRef4->setEnabled(numrefs >= 4);
|
|
||||||
completed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hintText.size() != 0 && autoNext) {
|
|
||||||
if (numrefs == 0) {
|
|
||||||
onButtonRef1(true);
|
|
||||||
autoNext = true;
|
|
||||||
} else if (numrefs == 1) {
|
|
||||||
ui->buttonRef2->setText(hintText);
|
|
||||||
onButtonRef2(true);//will reset autonext, so...
|
|
||||||
autoNext = true;
|
|
||||||
} else if (numrefs == 2) {
|
|
||||||
ui->buttonRef3->setText(hintText);
|
|
||||||
onButtonRef3(true);//will reset autonext, so...
|
|
||||||
autoNext = true;
|
|
||||||
} else if (numrefs == 3) {
|
|
||||||
ui->buttonRef4->setText(hintText);
|
|
||||||
onButtonRef4(true);
|
|
||||||
autoNext = true;
|
|
||||||
} else if (numrefs == 4) {
|
|
||||||
onButtonRef4(false);
|
|
||||||
autoNext = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QLineEdit* TaskDatumParameters::getLine(unsigned idx)
|
QLineEdit* TaskDatumParameters::getLine(unsigned idx)
|
||||||
|
@ -460,6 +426,16 @@ void TaskDatumParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
|
||||||
line->blockSignals(false);
|
line->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (autoNext) {
|
||||||
|
if (iActiveRef == -1){
|
||||||
|
//nothing to do
|
||||||
|
} else if (iActiveRef == 4 || this->lastSuggestResult.nextRefTypeHint.size() == 0){
|
||||||
|
iActiveRef = -1;
|
||||||
|
} else {
|
||||||
|
iActiveRef++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
updateUI(message, error);
|
updateUI(message, error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -532,10 +508,10 @@ void TaskDatumParameters::onButtonRef(const bool checked, unsigned idx)
|
||||||
} else {
|
} else {
|
||||||
iActiveRef = -1;
|
iActiveRef = -1;
|
||||||
}
|
}
|
||||||
ui->buttonRef1->setChecked(iActiveRef==0);
|
updateRefButton(0);
|
||||||
ui->buttonRef2->setChecked(iActiveRef==1);
|
updateRefButton(1);
|
||||||
ui->buttonRef3->setChecked(iActiveRef==2);
|
updateRefButton(2);
|
||||||
ui->buttonRef4->setChecked(iActiveRef==3);
|
updateRefButton(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TaskDatumParameters::onButtonRef1(const bool checked) {
|
void TaskDatumParameters::onButtonRef1(const bool checked) {
|
||||||
|
@ -662,6 +638,39 @@ void TaskDatumParameters::onRefName(const QString& text, unsigned idx)
|
||||||
updateUI();
|
updateUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TaskDatumParameters::updateRefButton(int idx)
|
||||||
|
{
|
||||||
|
QAbstractButton* b;
|
||||||
|
switch(idx){
|
||||||
|
case 0: b = ui->buttonRef1; break;
|
||||||
|
case 1: b = ui->buttonRef2; break;
|
||||||
|
case 2: b = ui->buttonRef3; break;
|
||||||
|
case 3: b = ui->buttonRef4; break;
|
||||||
|
default: throw Base::Exception("button index out of range");
|
||||||
|
}
|
||||||
|
|
||||||
|
Part::Datum* pcDatum = static_cast<Part::Datum*>(DatumView->getObject());
|
||||||
|
std::vector<App::DocumentObject*> refs = pcDatum->Support.getValues();
|
||||||
|
|
||||||
|
int numrefs = refs.size();
|
||||||
|
bool enable = true;
|
||||||
|
if (idx > numrefs)
|
||||||
|
enable = false;
|
||||||
|
if (idx == numrefs && this->lastSuggestResult.nextRefTypeHint.size() == 0)
|
||||||
|
enable = false;
|
||||||
|
b->setEnabled(enable);
|
||||||
|
|
||||||
|
b->setChecked(iActiveRef == idx);
|
||||||
|
|
||||||
|
if (iActiveRef == idx) {
|
||||||
|
b->setText(tr("Selecting..."));
|
||||||
|
} else if (idx < this->lastSuggestResult.references_Types.size()){
|
||||||
|
b->setText(AttacherGui::getShapeTypeText(this->lastSuggestResult.references_Types[idx]));
|
||||||
|
} else {
|
||||||
|
b->setText(tr("Reference%1").arg(idx+1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TaskDatumParameters::updateListOfModes(eMapMode curMode)
|
void TaskDatumParameters::updateListOfModes(eMapMode curMode)
|
||||||
{
|
{
|
||||||
//first up, remember currently selected mode.
|
//first up, remember currently selected mode.
|
||||||
|
@ -673,15 +682,14 @@ void TaskDatumParameters::updateListOfModes(eMapMode curMode)
|
||||||
|
|
||||||
//obtain list of available modes:
|
//obtain list of available modes:
|
||||||
Part::Datum* pcDatum = static_cast<Part::Datum*>(DatumView->getObject());
|
Part::Datum* pcDatum = static_cast<Part::Datum*>(DatumView->getObject());
|
||||||
SuggestResult sugr;
|
this->lastSuggestResult.bestFitMode = mmDeactivated;
|
||||||
sugr.bestFitMode = mmDeactivated;
|
|
||||||
int lastValidModeItemIndex = mmDummy_NumberOfModes;
|
int lastValidModeItemIndex = mmDummy_NumberOfModes;
|
||||||
if (pcDatum->Support.getSize() > 0){
|
if (pcDatum->Support.getSize() > 0){
|
||||||
pcDatum->attacher().suggestMapModes(sugr);
|
pcDatum->attacher().suggestMapModes(this->lastSuggestResult);
|
||||||
modesInList = sugr.allApplicableModes;
|
modesInList = this->lastSuggestResult.allApplicableModes;
|
||||||
//add reachable modes to the list, too, but gray them out (using lastValidModeItemIndex, later)
|
//add reachable modes to the list, too, but gray them out (using lastValidModeItemIndex, later)
|
||||||
lastValidModeItemIndex = modesInList.size()-1;
|
lastValidModeItemIndex = modesInList.size()-1;
|
||||||
for(std::pair<const eMapMode, refTypeStringList> &rm: sugr.reachableModes){
|
for(std::pair<const eMapMode, refTypeStringList> &rm: this->lastSuggestResult.reachableModes){
|
||||||
modesInList.push_back(rm.first);
|
modesInList.push_back(rm.first);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -712,7 +720,7 @@ void TaskDatumParameters::updateListOfModes(eMapMode curMode)
|
||||||
//potential mode - can be reached by selecting more stuff
|
//potential mode - can be reached by selecting more stuff
|
||||||
item->setFlags(item->flags() & ~(Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsSelectable));
|
item->setFlags(item->flags() & ~(Qt::ItemFlag::ItemIsEnabled | Qt::ItemFlag::ItemIsSelectable));
|
||||||
|
|
||||||
refTypeStringList &extraRefs = sugr.reachableModes[mmode];
|
refTypeStringList &extraRefs = this->lastSuggestResult.reachableModes[mmode];
|
||||||
if (extraRefs.size() == 1){
|
if (extraRefs.size() == 1){
|
||||||
QStringList buf;
|
QStringList buf;
|
||||||
for(eRefType rt : extraRefs[0]){
|
for(eRefType rt : extraRefs[0]){
|
||||||
|
@ -725,7 +733,7 @@ void TaskDatumParameters::updateListOfModes(eMapMode curMode)
|
||||||
} else {
|
} else {
|
||||||
item->setText(tr("%1 (add more references)").arg(item->text()));
|
item->setText(tr("%1 (add more references)").arg(item->text()));
|
||||||
}
|
}
|
||||||
} else if (mmode == sugr.bestFitMode){
|
} else if (mmode == this->lastSuggestResult.bestFitMode){
|
||||||
//suggested mode - make bold
|
//suggested mode - make bold
|
||||||
assert (item);
|
assert (item);
|
||||||
QFont fnt = item->font();
|
QFont fnt = item->font();
|
||||||
|
@ -748,11 +756,8 @@ Attacher::eMapMode TaskDatumParameters::getActiveMapMode()
|
||||||
if (sel.count() > 0)
|
if (sel.count() > 0)
|
||||||
return modesInList[ui->listOfModes->row(sel[0])];
|
return modesInList[ui->listOfModes->row(sel[0])];
|
||||||
else {
|
else {
|
||||||
Part::Datum* pcDatum = static_cast<Part::Datum*>(DatumView->getObject());
|
if (this->lastSuggestResult.message == SuggestResult::srOK)
|
||||||
SuggestResult sugr;
|
return this->lastSuggestResult.bestFitMode;
|
||||||
pcDatum->attacher().suggestMapModes(sugr);
|
|
||||||
if (sugr.message == SuggestResult::srOK)
|
|
||||||
return sugr.bestFitMode;
|
|
||||||
else
|
else
|
||||||
return mmDeactivated;
|
return mmDeactivated;
|
||||||
};
|
};
|
||||||
|
|
|
@ -98,6 +98,7 @@ private:
|
||||||
QLineEdit* getLine(unsigned idx);
|
QLineEdit* getLine(unsigned idx);
|
||||||
void onButtonRef(const bool checked, unsigned idx);
|
void onButtonRef(const bool checked, unsigned idx);
|
||||||
void onRefName(const QString& text, unsigned idx);
|
void onRefName(const QString& text, unsigned idx);
|
||||||
|
void updateRefButton(int idx);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief updateListOfModes Fills the mode list with modes that apply to
|
* @brief updateListOfModes Fills the mode list with modes that apply to
|
||||||
|
@ -114,9 +115,10 @@ private:
|
||||||
ViewProviderDatum *DatumView;
|
ViewProviderDatum *DatumView;
|
||||||
|
|
||||||
// TODO fix documentation here (2015-11-10, Fat-Zer)
|
// TODO fix documentation here (2015-11-10, Fat-Zer)
|
||||||
int iActiveRef; //what reference is being picked in 3d view now? -1 means no one, 0-2 means a reference is being picked.
|
int iActiveRef; //what reference is being picked in 3d view now? -1 means no one, 0-3 means a reference is being picked.
|
||||||
bool autoNext;//if we should automatically switch to next reference (true after dialog launch, false afterwards)
|
bool autoNext;//if we should automatically switch to next reference (true after dialog launch, false afterwards)
|
||||||
std::vector<Attacher::eMapMode> modesInList; //this list is synchronous to what is populated into listOfModes widget.
|
std::vector<Attacher::eMapMode> modesInList; //this list is synchronous to what is populated into listOfModes widget.
|
||||||
|
Attacher::SuggestResult lastSuggestResult;
|
||||||
bool completed;
|
bool completed;
|
||||||
|
|
||||||
typedef boost::BOOST_SIGNALS_NAMESPACE::connection Connection;
|
typedef boost::BOOST_SIGNALS_NAMESPACE::connection Connection;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user