diff --git a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp index 0c330447f5..e1bce41188 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp +++ b/src/Mod/Sketcher/Gui/TaskSketcherElements.cpp @@ -499,6 +499,7 @@ TaskSketcherElements::TaskSketcherElements(ViewProviderSketch *sketchView) , previouslyHoveredItemIndex(-1) , previouslyHoveredType(SubElementType::none) , isNamingBoxChecked(false) + , collapseFilter(true) { // we need a separate container widget to add all controls to proxy = new QWidget(this); @@ -547,6 +548,10 @@ TaskSketcherElements::TaskSketcherElements(ViewProviderSketch *sketchView) qAsConst(ui->settingsButton)->actions()[0], SIGNAL(changed()), this, SLOT(on_settings_extendedInformation_changed()) ); + QObject::connect( + qAsConst(ui->settingsButton)->actions()[1], SIGNAL(changed()), + this, SLOT(on_settings_autoCollapseFilter_changed()) + ); connectionElementsChanged = sketchView->signalElementsChanged.connect( boost::bind(&SketcherGui::TaskSketcherElements::slotElementsChanged, this)); @@ -591,14 +596,16 @@ void TaskSketcherElements::on_filterBox_stateChanged(int val){ bool TaskSketcherElements::eventFilter(QObject* obj, QEvent* event) { - if (obj == qobject_cast(ui->filterBox) && event->type() == QEvent::Enter && ui->filterBox->checkState() == Qt::Checked) { - ui->listMultiFilter->show(); - } - else if (obj == qobject_cast(ui->listMultiFilter) && event->type() == QEvent::Leave) { - ui->listMultiFilter->hide(); - } - else if (obj == this && event->type() == QEvent::Leave) { - ui->listMultiFilter->hide(); + if (collapseFilter) { + if (obj == qobject_cast(ui->filterBox) && event->type() == QEvent::Enter && ui->filterBox->checkState() == Qt::Checked) { + ui->listMultiFilter->show(); + } + else if (obj == qobject_cast(ui->listMultiFilter) && event->type() == QEvent::Leave) { + ui->listMultiFilter->hide(); + } + else if (obj == this && event->type() == QEvent::Leave) { + ui->listMultiFilter->hide(); + } } return TaskBox::eventFilter(obj, event); } @@ -1137,16 +1144,23 @@ void TaskSketcherElements::changeEvent(QEvent *e) void TaskSketcherElements::createSettingsButtonActions() { QAction* action = new QAction(QString::fromLatin1("Extended information"), this); + QAction* action2 = new QAction(QString::fromLatin1("Auto collapse filter"), this); action->setCheckable(true); + action2->setCheckable(true); ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher/Elements"); { QSignalBlocker block(this); action->setChecked(hGrp->GetBool("ExtendedNaming", false)); + action2->setChecked(hGrp->GetBool("AutoCollapseFilter", false)); } ui->settingsButton->addAction(action); + ui->settingsButton->addAction(action2); + + isNamingBoxChecked = hGrp->GetBool("ExtendedNaming", false); + collapseFilter = hGrp->GetBool("AutoCollapseFilter", false); } void TaskSketcherElements::on_settings_extendedInformation_changed() @@ -1158,6 +1172,14 @@ void TaskSketcherElements::on_settings_extendedInformation_changed() slotElementsChanged(); } +void TaskSketcherElements::on_settings_autoCollapseFilter_changed() +{ + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher/Elements"); + hGrp->SetBool("AutoCollapseFilter", ui->settingsButton->actions()[1]->isChecked()); + + collapseFilter = ui->settingsButton->actions()[1]->isChecked(); +} + void TaskSketcherElements::on_settingsButton_clicked(bool) { ui->settingsButton->showMenu(); diff --git a/src/Mod/Sketcher/Gui/TaskSketcherElements.h b/src/Mod/Sketcher/Gui/TaskSketcherElements.h index 8cfa9c0e82..e840cb4f17 100644 --- a/src/Mod/Sketcher/Gui/TaskSketcherElements.h +++ b/src/Mod/Sketcher/Gui/TaskSketcherElements.h @@ -202,6 +202,7 @@ public Q_SLOTS: void on_listWidgetElements_itemEntered(QListWidgetItem *item); void on_listWidgetElements_mouseMoveOnItem(QListWidgetItem* item); void on_settings_extendedInformation_changed(); + void on_settings_autoCollapseFilter_changed(); void on_settingsButton_clicked(bool); void on_filterBox_stateChanged(int val); void on_listMultiFilter_itemChanged(QListWidgetItem* item); @@ -223,6 +224,7 @@ private: SubElementType previouslyHoveredType; bool isNamingBoxChecked; + bool collapseFilter; }; } //namespace SketcherGui