Skip to content

Commit

Permalink
enable selection in the dialog item list
Browse files Browse the repository at this point in the history
now the user can use the Ctrl and/or Shift key to select multiple items to be deleted
  • Loading branch information
donovaly committed Feb 16, 2020
1 parent ee203bb commit 8ed4186
Show file tree
Hide file tree
Showing 9 changed files with 142 additions and 40 deletions.
40 changes: 31 additions & 9 deletions src/Mod/PartDesign/Gui/TaskChamferParameters.cpp
Expand Up @@ -25,6 +25,7 @@

#ifndef _PreComp_
# include <QAction>
# include <QListWidget>
#endif

#include "ui_TaskChamferParameters.h"
Expand Down Expand Up @@ -109,6 +110,9 @@ TaskChamferParameters::TaskChamferParameters(ViewProviderDressUp *DressUpView, Q

void TaskChamferParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
{
// executed when the user selected something in the CAD object
// adds/deletes the selection accordingly

if (selectionMode == none)
return;

Expand Down Expand Up @@ -155,21 +159,39 @@ void TaskChamferParameters::clearButtons(const selectionModes notThis)

void TaskChamferParameters::onRefDeleted(void)
{
// get vector of selected objects of active document to assure we have a valid selection
std::vector<Gui::SelectionObject> selection = Gui::Selection().getSelectionEx();
if (selection.size() == 0) {
QMessageBox::warning(this, tr("Selection error"), tr("Nothing selected!"));
return;
}
// assure we we are not in selection mode
exitSelectionMode();
clearButtons(none);
// delete any selections since the reference might be highlighted
// delete any selections since the reference(s) might be highlighted
Gui::Selection().clearSelection();
DressUpView->highlightReferences(false);

PartDesign::Chamfer* pcChamfer = static_cast<PartDesign::Chamfer*>(DressUpView->getObject());
App::DocumentObject* base = pcChamfer->Base.getValue();
std::vector<std::string> refs = pcChamfer->Base.getSubValues();
refs.erase(refs.begin() + ui->listWidgetReferences->currentRow());
setupTransaction();
pcChamfer->Base.setValue(base, refs);
ui->listWidgetReferences->model()->removeRow(ui->listWidgetReferences->currentRow());
pcChamfer->getDocument()->recomputeFeature(pcChamfer);
// get the list of items to be deleted
QList<QListWidgetItem*> selectedList = ui->listWidgetReferences->selectedItems();

// delete the selection backwards to assure the list index keeps valid for the deletion
for (int i = selectedList.count() - 1; i > -1; i--) {
QListWidgetItem* item = selectedList.at(i);
// get the fillet object
PartDesign::Chamfer* pcChamfer = static_cast<PartDesign::Chamfer*>(DressUpView->getObject());
App::DocumentObject* base = pcChamfer->Base.getValue();
// get all fillet references
std::vector<std::string> refs = pcChamfer->Base.getSubValues();
// the ref index is the same as the listWidgetReferences index
// so we can erase using the row number of the element to be deleted
int rowNumber = ui->listWidgetReferences->row(selectedList.at(i));
refs.erase(refs.begin() + rowNumber);
setupTransaction();
pcChamfer->Base.setValue(base, refs);
ui->listWidgetReferences->model()->removeRow(rowNumber);
pcChamfer->getDocument()->recomputeFeature(pcChamfer);
}

// if there is only one item left, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/PartDesign/Gui/TaskChamferParameters.ui
Expand Up @@ -52,6 +52,9 @@ click again to end selection</string>
<string>- select an item to highlight it
- double-click on an item to see the chamfers</string>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
</widget>
</item>
<item>
Expand Down
41 changes: 32 additions & 9 deletions src/Mod/PartDesign/Gui/TaskDraftParameters.cpp
Expand Up @@ -27,6 +27,7 @@
#ifndef _PreComp_
# include <QMessageBox>
# include <QAction>
# include <QListWidget>
#endif

#include "ui_TaskDraftParameters.h"
Expand Down Expand Up @@ -131,6 +132,9 @@ TaskDraftParameters::TaskDraftParameters(ViewProviderDressUp *DressUpView, QWidg

void TaskDraftParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
{
// executed when the user selected something in the CAD object
// adds/deletes the selection accordingly

if (selectionMode == none)
return;

Expand Down Expand Up @@ -229,21 +233,40 @@ void TaskDraftParameters::onButtonLine(bool checked)

void TaskDraftParameters::onRefDeleted(void)
{
// get vector of selected objects of active document to assure we have a valid selection
std::vector<Gui::SelectionObject> selection = Gui::Selection().getSelectionEx();
if (selection.size() == 0) {
QMessageBox::warning(this, tr("Selection error"), tr("Nothing selected!"));
return;
}
// assure we we are not in selection mode
exitSelectionMode();
clearButtons(none);
// delete any selections since the reference might be highlighted
// delete any selections since the reference(s) might be highlighted
Gui::Selection().clearSelection();
DressUpView->highlightReferences(false);

PartDesign::Draft* pcDraft = static_cast<PartDesign::Draft*>(DressUpView->getObject());
App::DocumentObject* base = pcDraft->Base.getValue();
std::vector<std::string> faces = pcDraft->Base.getSubValues();
faces.erase(faces.begin() + ui->listWidgetReferences->currentRow());
setupTransaction();
pcDraft->Base.setValue(base, faces);
ui->listWidgetReferences->model()->removeRow(ui->listWidgetReferences->currentRow());
pcDraft->getDocument()->recomputeFeature(pcDraft);
// get the list of items to be deleted
QList<QListWidgetItem*> selectedList = ui->listWidgetReferences->selectedItems();

// delete the selection backwards to assure the list index keeps valid for the deletion
for (int i = selectedList.count() - 1; i > -1; i--) {
//QMessageBox::warning(this, tr("i"), QString::number(i));
QListWidgetItem* item = selectedList.at(i);
// get the fillet object
PartDesign::Draft* pcDraft = static_cast<PartDesign::Draft*>(DressUpView->getObject());
App::DocumentObject* base = pcDraft->Base.getValue();
// get all fillet references
std::vector<std::string> refs = pcDraft->Base.getSubValues();
// the ref index is the same as the listWidgetReferences index
// so we can erase using the row number of the element to be deleted
int rowNumber = ui->listWidgetReferences->row(selectedList.at(i));
refs.erase(refs.begin() + rowNumber);
setupTransaction();
pcDraft->Base.setValue(base, refs);
ui->listWidgetReferences->model()->removeRow(rowNumber);
pcDraft->getDocument()->recomputeFeature(pcDraft);
}

// if there is only one item left, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/PartDesign/Gui/TaskDraftParameters.ui
Expand Up @@ -52,6 +52,9 @@ click again to end selection</string>
<string>- select an item to highlight it
- double-click on an item to see the drafts</string>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
</widget>
</item>
<item>
Expand Down
6 changes: 4 additions & 2 deletions src/Mod/PartDesign/Gui/TaskDressUpParameters.cpp
Expand Up @@ -196,7 +196,7 @@ void TaskDressUpParameters::setSelection(QListWidgetItem* current) {
hideObject();
// highlight all objects in the list
DressUpView->highlightReferences(true);
// clear existing selections
// clear existing selection because only the current item is highlighted, not all selected ones to keep the overview
Gui::Selection().clearSelection();
// highligh the selected item
Gui::Selection().addSelection(docName.c_str(), objName.c_str(), subName.c_str(), 0, 0, 0);
Expand Down Expand Up @@ -240,8 +240,10 @@ void TaskDressUpParameters::showObject()
{
DressUpView->getObject()->Visibility.setValue(true);
App::DocumentObject* base = getBase();
if (base)
if (base) {
DressUpView->getObject()->Visibility.setValue(true);
base->Visibility.setValue(false);
}
}

Part::Feature* TaskDressUpParameters::getBase(void) const
Expand Down
41 changes: 32 additions & 9 deletions src/Mod/PartDesign/Gui/TaskFilletParameters.cpp
Expand Up @@ -25,6 +25,7 @@

#ifndef _PreComp_
# include <QAction>
# include <QListWidget>
#endif

#include "ui_TaskFilletParameters.h"
Expand Down Expand Up @@ -109,6 +110,9 @@ TaskFilletParameters::TaskFilletParameters(ViewProviderDressUp *DressUpView, QWi

void TaskFilletParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
{
// executed when the user selected something in the CAD object
// adds/deletes the selection accordingly

if (selectionMode == none)
return;

Expand Down Expand Up @@ -155,21 +159,40 @@ void TaskFilletParameters::clearButtons(const selectionModes notThis)

void TaskFilletParameters::onRefDeleted(void)
{
// get vector of selected objects of active document to assure we have a valid selection
std::vector<Gui::SelectionObject> selection = Gui::Selection().getSelectionEx();
if (selection.size() == 0) {
QMessageBox::warning(this, tr("Selection error"), tr("Nothing selected!"));
return;
}
// assure we we are not in selection mode
exitSelectionMode();
clearButtons(none);
// delete any selections since the reference might be highlighted
// delete any selections since the reference(s) might be highlighted
Gui::Selection().clearSelection();
DressUpView->highlightReferences(false);

PartDesign::Fillet* pcFillet = static_cast<PartDesign::Fillet*>(DressUpView->getObject());
App::DocumentObject* base = pcFillet->Base.getValue();
std::vector<std::string> refs = pcFillet->Base.getSubValues();
refs.erase(refs.begin() + ui->listWidgetReferences->currentRow());
setupTransaction();
pcFillet->Base.setValue(base, refs);
ui->listWidgetReferences->model()->removeRow(ui->listWidgetReferences->currentRow());
pcFillet->getDocument()->recomputeFeature(pcFillet);
// get the list of items to be deleted
QList<QListWidgetItem*> selectedList = ui->listWidgetReferences->selectedItems();

// delete the selection backwards to assure the list index keeps valid for the deletion
for (int i = selectedList.count()-1; i > -1; i--) {
//QMessageBox::warning(this, tr("i"), QString::number(i));
QListWidgetItem* item = selectedList.at(i);
// get the fillet object
PartDesign::Fillet* pcFillet = static_cast<PartDesign::Fillet*>(DressUpView->getObject());
App::DocumentObject* base = pcFillet->Base.getValue();
// get all fillet references
std::vector<std::string> refs = pcFillet->Base.getSubValues();
// the ref index is the same as the listWidgetReferences index
// so we can erase using the row number of the element to be deleted
int rowNumber = ui->listWidgetReferences->row(selectedList.at(i));
refs.erase(refs.begin() + rowNumber);
setupTransaction();
pcFillet->Base.setValue(base, refs);
ui->listWidgetReferences->model()->removeRow(rowNumber);
pcFillet->getDocument()->recomputeFeature(pcFillet);
}

// if there is only one item left, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/PartDesign/Gui/TaskFilletParameters.ui
Expand Up @@ -52,6 +52,9 @@ click again to end selection</string>
<string>- select an item to highlight it
- double-click on an item to see the fillets</string>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
</widget>
</item>
<item>
Expand Down
42 changes: 31 additions & 11 deletions src/Mod/PartDesign/Gui/TaskThicknessParameters.cpp
Expand Up @@ -25,6 +25,7 @@

#ifndef _PreComp_
# include <QAction>
# include <QListWidget>
#endif

#include "ui_TaskThicknessParameters.h"
Expand Down Expand Up @@ -131,6 +132,9 @@ TaskThicknessParameters::TaskThicknessParameters(ViewProviderDressUp *DressUpVie

void TaskThicknessParameters::onSelectionChanged(const Gui::SelectionChanges& msg)
{
// executed when the user selected something in the CAD object
// adds/deletes the selection accordingly

if (selectionMode == none)
return;

Expand Down Expand Up @@ -177,23 +181,39 @@ void TaskThicknessParameters::clearButtons(const selectionModes notThis)

void TaskThicknessParameters::onRefDeleted(void)
{
// get vector of selected objects of active document to assure we have a valid selection
std::vector<Gui::SelectionObject> selection = Gui::Selection().getSelectionEx();
if (selection.size() == 0) {
QMessageBox::warning(this, tr("Selection error"), tr("Nothing selected!"));
return;
}
// assure we we are not in selection mode
exitSelectionMode();
clearButtons(none);
// delete any selections since the reference might be highlighted
// delete any selections since the reference(s) might be highlighted
Gui::Selection().clearSelection();
DressUpView->highlightReferences(false);

PartDesign::Thickness* pcThickness = static_cast<PartDesign::Thickness*>(DressUpView->getObject());
App::DocumentObject* base = pcThickness->Base.getValue();
std::vector<std::string> faces = pcThickness->Base.getSubValues();
faces.erase(faces.begin() + ui->listWidgetReferences->currentRow());
setupTransaction();
pcThickness->Base.setValue(base, faces);
ui->listWidgetReferences->model()->removeRow(ui->listWidgetReferences->currentRow());
pcThickness->getDocument()->recomputeFeature(pcThickness);
clearButtons(none);
exitSelectionMode();
// get the list of items to be deleted
QList<QListWidgetItem*> selectedList = ui->listWidgetReferences->selectedItems();

// delete the selection backwards to assure the list index keeps valid for the deletion
for (int i = selectedList.count() - 1; i > -1; i--) {
QListWidgetItem* item = selectedList.at(i);
// get the fillet object
PartDesign::Thickness* pcThickness = static_cast<PartDesign::Thickness*>(DressUpView->getObject());
App::DocumentObject* base = pcThickness->Base.getValue();
// get all fillet references
std::vector<std::string> refs = pcThickness->Base.getSubValues();
// the ref index is the same as the listWidgetReferences index
// so we can erase using the row number of the element to be deleted
int rowNumber = ui->listWidgetReferences->row(selectedList.at(i));
refs.erase(refs.begin() + rowNumber);
setupTransaction();
pcThickness->Base.setValue(base, refs);
ui->listWidgetReferences->model()->removeRow(rowNumber);
pcThickness->getDocument()->recomputeFeature(pcThickness);
}

// if there is only one item left, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/PartDesign/Gui/TaskThicknessParameters.ui
Expand Up @@ -52,6 +52,9 @@ click again to end selection</string>
<string>- select an item to highlight it
- double-click on an item to see the features</string>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::MultiSelection</enum>
</property>
</widget>
</item>
<item>
Expand Down

0 comments on commit 8ed4186

Please sign in to comment.