[PartDesign] for chamfer and fillet, add SelectAllEdges option in the context menu while in add or remove mode
This commit is contained in:
@@ -96,6 +96,9 @@ TaskChamferParameters::TaskChamferParameters(ViewProviderDressUp *DressUpView, Q
|
||||
createDeleteAction(ui->listWidgetReferences, ui->buttonRefRemove);
|
||||
connect(deleteAction, SIGNAL(triggered()), this, SLOT(onRefDeleted()));
|
||||
|
||||
createAddAllEdgesAction(ui->listWidgetReferences);
|
||||
connect(addAllEdgesAction, &QAction::triggered, this, &TaskChamferParameters::onAddAllEdges);
|
||||
|
||||
connect(ui->listWidgetReferences, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
|
||||
this, SLOT(setSelection(QListWidgetItem*)));
|
||||
connect(ui->listWidgetReferences, SIGNAL(itemClicked(QListWidgetItem*)),
|
||||
@@ -246,6 +249,12 @@ void TaskChamferParameters::onRefDeleted(void)
|
||||
}
|
||||
}
|
||||
|
||||
void TaskChamferParameters::onAddAllEdges(void)
|
||||
{
|
||||
TaskDressUpParameters::addAllEdges(ui->listWidgetReferences);
|
||||
ui->buttonRefRemove->setEnabled(true);
|
||||
}
|
||||
|
||||
void TaskChamferParameters::onTypeChanged(int index)
|
||||
{
|
||||
PartDesign::Chamfer* pcChamfer = static_cast<PartDesign::Chamfer*>(DressUpView->getObject());
|
||||
|
||||
@@ -51,6 +51,7 @@ private Q_SLOTS:
|
||||
void onAngleChanged(double);
|
||||
void onFlipDirection(bool);
|
||||
void onRefDeleted(void);
|
||||
void onAddAllEdges(void);
|
||||
|
||||
protected:
|
||||
virtual void clearButtons(const selectionModes notThis);
|
||||
|
||||
@@ -65,6 +65,7 @@ TaskDressUpParameters::TaskDressUpParameters(ViewProviderDressUp *DressUpView, b
|
||||
, proxy(0)
|
||||
, DressUpView(DressUpView)
|
||||
, deleteAction(nullptr)
|
||||
, addAllEdgesAction(nullptr)
|
||||
, allowFaces(selectFaces)
|
||||
, allowEdges(selectEdges)
|
||||
{
|
||||
@@ -139,12 +140,43 @@ bool TaskDressUpParameters::referenceSelected(const Gui::SelectionChanges& msg)
|
||||
return false;
|
||||
}
|
||||
|
||||
void TaskDressUpParameters::addAllEdges(QListWidget* widget)
|
||||
{
|
||||
PartDesign::DressUp* pcDressUp = static_cast<PartDesign::DressUp*>(DressUpView->getObject());
|
||||
if (pcDressUp) {
|
||||
App::DocumentObject* base = pcDressUp->Base.getValue();
|
||||
if (base) {
|
||||
Gui::WaitCursor wait;
|
||||
int count = pcDressUp->getBaseTopoShape().countSubElements("Edge");
|
||||
std::vector<std::string> edgeNames;
|
||||
for (int ii = 0; ii < count; ii++){
|
||||
std::ostringstream edgeName;
|
||||
edgeName << "Edge" << ii+1;
|
||||
edgeNames.push_back(edgeName.str());
|
||||
}
|
||||
|
||||
for (std::vector<std::string>::const_iterator it = edgeNames.begin(); it != edgeNames.end(); ++it){
|
||||
if (widget->findItems(QLatin1String(it->c_str()), Qt::MatchExactly).isEmpty()){
|
||||
widget->addItem(QLatin1String(it->c_str()));
|
||||
}
|
||||
}
|
||||
|
||||
pcDressUp->Base.setValue(base, edgeNames);
|
||||
pcDressUp->getDocument()->recomputeFeature(pcDressUp);
|
||||
hideObject();
|
||||
DressUpView->highlightReferences(true);
|
||||
onButtonRefAdd(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void TaskDressUpParameters::onButtonRefAdd(bool checked)
|
||||
{
|
||||
if (checked) {
|
||||
clearButtons(refAdd);
|
||||
hideObject();
|
||||
selectionMode = refAdd;
|
||||
addAllEdgesAction->setEnabled(true);
|
||||
AllowSelectionFlags allow;
|
||||
allow.setFlag(AllowSelection::EDGE, allowEdges);
|
||||
allow.setFlag(AllowSelection::FACE, allowFaces);
|
||||
@@ -152,6 +184,7 @@ void TaskDressUpParameters::onButtonRefAdd(bool checked)
|
||||
Gui::Selection().addSelectionGate(new ReferenceSelection(this->getBase(), allow));
|
||||
DressUpView->highlightReferences(true);
|
||||
} else {
|
||||
addAllEdgesAction->setEnabled(false);
|
||||
exitSelectionMode();
|
||||
DressUpView->highlightReferences(false);
|
||||
}
|
||||
@@ -232,9 +265,26 @@ void TaskDressUpParameters::itemClickedTimeout() {
|
||||
wasDoubleClicked = false;
|
||||
}
|
||||
|
||||
void TaskDressUpParameters::createAddAllEdgesAction(QListWidget* parentList)
|
||||
{
|
||||
// creates a context menu, a shortcut for it and connects it to e slot function
|
||||
|
||||
addAllEdgesAction = new QAction(tr("Add all edges"), this);
|
||||
addAllEdgesAction->setShortcut(QKeySequence(QString::fromLatin1("Ctrl+Shift+A")));
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
|
||||
// display shortcut behind the context menu entry
|
||||
addAllEdgesAction->setShortcutVisibleInContextMenu(true);
|
||||
#endif
|
||||
parentList->addAction(addAllEdgesAction);
|
||||
addAllEdgesAction->setEnabled(false);
|
||||
addAllEdgesAction->setStatusTip(tr("Adds all edges to the list box (active only when in add selection mode)."));
|
||||
parentList->setContextMenuPolicy(Qt::ActionsContextMenu);
|
||||
}
|
||||
|
||||
|
||||
void TaskDressUpParameters::createDeleteAction(QListWidget* parentList, QWidget* parentButton)
|
||||
{
|
||||
// creates a context menu, a shortcutt for it and connects it to e slot function
|
||||
// creates a context menu, a shortcut for it and connects it to e slot function
|
||||
|
||||
deleteAction = new QAction(tr("Remove"), this);
|
||||
deleteAction->setShortcut(QKeySequence::Delete);
|
||||
@@ -263,6 +313,10 @@ bool TaskDressUpParameters::KeyEvent(QEvent *e)
|
||||
kevent->accept();
|
||||
return true;
|
||||
}
|
||||
if (addAllEdgesAction && kevent->key() == Qt::Key_A && kevent->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)){
|
||||
kevent->accept();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if we have a Del key, trigger the deleteAction
|
||||
@@ -273,6 +327,11 @@ bool TaskDressUpParameters::KeyEvent(QEvent *e)
|
||||
deleteAction->trigger();
|
||||
return true;
|
||||
}
|
||||
if (kevent->key() == Qt::Key_A && kevent->modifiers() == (Qt::ControlModifier | Qt::ShiftModifier)) {
|
||||
if (addAllEdgesAction && addAllEdgesAction->isEnabled())
|
||||
addAllEdgesAction->trigger();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return TaskDressUpParameters::event(e);
|
||||
|
||||
@@ -71,6 +71,7 @@ protected Q_SLOTS:
|
||||
void itemClickedTimeout();
|
||||
virtual void onRefDeleted(void) = 0;
|
||||
void createDeleteAction(QListWidget* parentList, QWidget* parentButton);
|
||||
void createAddAllEdgesAction(QListWidget* parentList);
|
||||
|
||||
protected:
|
||||
void exitSelectionMode();
|
||||
@@ -78,7 +79,7 @@ protected:
|
||||
bool wasDoubleClicked = false;
|
||||
bool KeyEvent(QEvent *e);
|
||||
void hideOnError();
|
||||
|
||||
void addAllEdges(QListWidget* listWidget);
|
||||
protected:
|
||||
enum selectionModes { none, refAdd, refRemove, plane, line };
|
||||
virtual void clearButtons(const selectionModes notThis) = 0;
|
||||
@@ -91,6 +92,7 @@ protected:
|
||||
QWidget* proxy;
|
||||
ViewProviderDressUp *DressUpView;
|
||||
QAction* deleteAction;
|
||||
QAction* addAllEdgesAction;
|
||||
|
||||
bool allowFaces, allowEdges;
|
||||
selectionModes selectionMode;
|
||||
|
||||
@@ -90,6 +90,9 @@ TaskFilletParameters::TaskFilletParameters(ViewProviderDressUp *DressUpView, QWi
|
||||
createDeleteAction(ui->listWidgetReferences, ui->buttonRefRemove);
|
||||
connect(deleteAction, SIGNAL(triggered()), this, SLOT(onRefDeleted()));
|
||||
|
||||
createAddAllEdgesAction(ui->listWidgetReferences);
|
||||
connect(addAllEdgesAction, &QAction::triggered, this, &TaskFilletParameters::onAddAllEdges);
|
||||
|
||||
connect(ui->listWidgetReferences, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
|
||||
this, SLOT(setSelection(QListWidgetItem*)));
|
||||
connect(ui->listWidgetReferences, SIGNAL(itemClicked(QListWidgetItem*)),
|
||||
@@ -201,6 +204,12 @@ void TaskFilletParameters::onRefDeleted(void)
|
||||
}
|
||||
}
|
||||
|
||||
void TaskFilletParameters::onAddAllEdges(void)
|
||||
{
|
||||
TaskDressUpParameters::addAllEdges(ui->listWidgetReferences);
|
||||
ui->buttonRefRemove->setEnabled(true);
|
||||
}
|
||||
|
||||
void TaskFilletParameters::onLengthChanged(double len)
|
||||
{
|
||||
clearButtons(none);
|
||||
|
||||
@@ -44,6 +44,7 @@ public:
|
||||
private Q_SLOTS:
|
||||
void onLengthChanged(double);
|
||||
void onRefDeleted(void);
|
||||
void onAddAllEdges(void);
|
||||
|
||||
protected:
|
||||
double getLength(void) const;
|
||||
|
||||
Reference in New Issue
Block a user