improve property link dialog for multi-selection

This commit is contained in:
wmayer
2017-09-23 18:37:52 +02:00
parent 22ac03a5b5
commit aa370e5d1b
2 changed files with 15 additions and 13 deletions

View File

@@ -51,7 +51,7 @@ DlgPropertyLink::DlgPropertyLink(const QStringList& list, QWidget* parent, Qt::W
assert(list.size() == 4);
#endif
ui->setupUi(this);
findObjects(ui->checkObjectType->isChecked());
findObjects(ui->checkObjectType->isChecked(), QString());
}
/**
@@ -67,7 +67,7 @@ void DlgPropertyLink::setSelectionMode(QAbstractItemView::SelectionMode mode)
{
ui->listWidget->setSelectionMode(mode);
ui->listWidget->clear();
findObjects(ui->checkObjectType->isChecked());
findObjects(ui->checkObjectType->isChecked(), ui->searchBox->text());
}
void DlgPropertyLink::accept()
@@ -120,13 +120,13 @@ QVariantList DlgPropertyLink::propertyLinkList() const
return varList;
}
void DlgPropertyLink::findObjects(bool on)
void DlgPropertyLink::findObjects(bool on, const QString& searchText)
{
QString docName = link[0];
QString objName = link[1];
QString parName = link[3];
QString searchText = ui->searchBox->text();
QString docName = link[0]; // document name
QString objName = link[1]; // internal object name
QString parName = link[3]; // internal object name of the parent of the link property
bool isSingleSelection = (ui->listWidget->selectionMode() == QAbstractItemView::SingleSelection);
App::Document* doc = App::GetApplication().getDocument((const char*)docName.toLatin1());
if (doc) {
Base::Type baseType = App::DocumentObject::getClassTypeId();
@@ -154,12 +154,14 @@ void DlgPropertyLink::findObjects(bool on)
std::vector<App::DocumentObject*> outList;
App::DocumentObject* par = doc->getObject((const char*)parName.toLatin1());
if (par) {
outList = par->getOutList();
// for multi-selection we need all objects
if (isSingleSelection)
outList = par->getOutList();
outList.push_back(par);
}
// Add a "None" entry on top
if (ui->listWidget->selectionMode() == QAbstractItemView::SingleSelection) {
if (isSingleSelection) {
QListWidgetItem* item = new QListWidgetItem(ui->listWidget);
item->setText(tr("None (Remove link)"));
QByteArray ba("");
@@ -192,14 +194,14 @@ void DlgPropertyLink::findObjects(bool on)
void DlgPropertyLink::on_checkObjectType_toggled(bool on)
{
ui->listWidget->clear();
findObjects(on);
findObjects(on, ui->searchBox->text());
}
void DlgPropertyLink::on_searchBox_textChanged(const QString& /*search*/)
void DlgPropertyLink::on_searchBox_textChanged(const QString& search)
{
ui->listWidget->clear();
bool on = ui->checkObjectType->isChecked();
findObjects(on);
findObjects(on, search);
}
#include "moc_DlgPropertyLink.cpp"

View File

@@ -48,7 +48,7 @@ private Q_SLOTS:
void on_searchBox_textChanged(const QString&);
private:
void findObjects(bool on);
void findObjects(bool on, const QString& searchText);
private:
QStringList link;