enable selection in the dialog item list

now the user can use the Ctrl and/or Shift key to select multiple items to be deleted
This commit is contained in:
donovaly
2020-02-16 21:31:56 +01:00
committed by wmayer
parent 0283cb09fb
commit 58bb17478c
9 changed files with 139 additions and 39 deletions

View File

@@ -27,6 +27,7 @@
#ifndef _PreComp_
# include <QMessageBox>
# include <QAction>
# include <QListWidget>
#endif
#include "ui_TaskDraftParameters.h"
@@ -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;
@@ -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) {