improve code as suggested by Werner

see https://forum.freecadweb.org/viewtopic.php?p=369921#p369921
This commit is contained in:
donovaly
2020-02-18 22:51:41 +01:00
committed by wmayer
parent 69f97014e7
commit cc3b21fa0b
10 changed files with 59 additions and 149 deletions

View File

@@ -87,22 +87,8 @@ TaskChamferParameters::TaskChamferParameters(ViewProviderDressUp *DressUpView, Q
this, SLOT(onButtonRefRemove(bool)));
// Create context menu
deleteAction = new QAction(tr("Remove"), this);
deleteAction->setShortcut(QKeySequence::Delete);
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
// display shortcut behind the context menu entry
deleteAction->setShortcutVisibleInContextMenu(true);
#endif
ui->listWidgetReferences->addAction(deleteAction);
// if there is only one item, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
deleteAction->setEnabled(false);
deleteAction->setStatusTip(tr("There must be at least one item"));
ui->buttonRefRemove->setEnabled(false);
ui->buttonRefRemove->setToolTip(tr("There must be at least one item"));
}
createDeleteAction(ui->listWidgetReferences, ui->buttonRefRemove);
connect(deleteAction, SIGNAL(triggered()), this, SLOT(onRefDeleted()));
ui->listWidgetReferences->setContextMenuPolicy(Qt::ActionsContextMenu);
connect(ui->listWidgetReferences, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(setSelection(QListWidgetItem*)));
@@ -225,27 +211,7 @@ TaskChamferParameters::~TaskChamferParameters()
bool TaskChamferParameters::event(QEvent *e)
{
// in case another instance takes key events, accept the overridden key event
if (e && e->type() == QEvent::ShortcutOverride) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->modifiers() == Qt::NoModifier) {
if (kevent->key() == Qt::Key_Delete) {
kevent->accept();
return true;
}
}
}
// if we have a Del key, trigger the deleteAction
else if (e && e->type() == QEvent::KeyPress) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->key() == Qt::Key_Delete) {
if (deleteAction->isEnabled())
deleteAction->trigger();
return true;
}
}
return TaskDressUpParameters::event(e);
return TaskDressUpParameters::KeyEvent(e);
}
void TaskChamferParameters::changeEvent(QEvent *e)

View File

@@ -53,7 +53,6 @@ protected:
double getLength(void) const;
private:
QAction* deleteAction;
Ui_TaskChamferParameters* ui;
};

View File

@@ -101,22 +101,8 @@ TaskDraftParameters::TaskDraftParameters(ViewProviderDressUp *DressUpView, QWidg
this, SLOT(onButtonLine(bool)));
// Create context menu
deleteAction = new QAction(tr("Remove"), this);
deleteAction->setShortcut(QKeySequence::Delete);
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
// display shortcut behind the context menu entry
deleteAction->setShortcutVisibleInContextMenu(true);
#endif
ui->listWidgetReferences->addAction(deleteAction);
// if there is only one item, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
deleteAction->setEnabled(false);
deleteAction->setStatusTip(tr("There must be at least one item"));
ui->buttonRefRemove->setEnabled(false);
ui->buttonRefRemove->setToolTip(tr("There must be at least one item"));
}
createDeleteAction(ui->listWidgetReferences, ui->buttonRefRemove);
connect(deleteAction, SIGNAL(triggered()), this, SLOT(onRefDeleted()));
ui->listWidgetReferences->setContextMenuPolicy(Qt::ActionsContextMenu);
connect(ui->listWidgetReferences, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(setSelection(QListWidgetItem*)));
@@ -331,27 +317,7 @@ TaskDraftParameters::~TaskDraftParameters()
bool TaskDraftParameters::event(QEvent *e)
{
// in case another instance takes key events, accept the overridden key event
if (e && e->type() == QEvent::ShortcutOverride) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->modifiers() == Qt::NoModifier) {
if (kevent->key() == Qt::Key_Delete) {
kevent->accept();
return true;
}
}
}
// if we have a Del key, trigger the deleteAction
else if (e && e->type() == QEvent::KeyPress) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->key() == Qt::Key_Delete) {
if (deleteAction->isEnabled())
deleteAction->trigger();
return true;
}
}
return TaskDressUpParameters::event(e);
return TaskDressUpParameters::KeyEvent(e);
}
void TaskDraftParameters::changeEvent(QEvent *e)

View File

@@ -60,7 +60,6 @@ protected:
virtual void onSelectionChanged(const Gui::SelectionChanges& msg);
private:
QAction* deleteAction;
Ui_TaskDraftParameters* ui;
};

View File

@@ -25,6 +25,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <QAction>
# include <QApplication>
# include <QListWidget>
# include <QListWidgetItem>
@@ -211,6 +212,52 @@ void TaskDressUpParameters::itemClickedTimeout() {
wasDoubleClicked = false;
}
void TaskDressUpParameters::createDeleteAction(QListWidget* parentList, QWidget* parentButton)
{
// creates a context menu, a shortcutt for it and connects it to e slot function
deleteAction = new QAction(tr("Remove"), this);
deleteAction->setShortcut(QKeySequence::Delete);
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
// display shortcut behind the context menu entry
deleteAction->setShortcutVisibleInContextMenu(true);
#endif
parentList->addAction(deleteAction);
// if there is only one item, it cannot be deleted
if (parentList->count() == 1) {
deleteAction->setEnabled(false);
deleteAction->setStatusTip(tr("There must be at least one item"));
parentButton->setEnabled(false);
parentButton->setToolTip(tr("There must be at least one item"));
}
parentList->setContextMenuPolicy(Qt::ActionsContextMenu);
}
bool TaskDressUpParameters::KeyEvent(QEvent *e)
{
// in case another instance takes key events, accept the overridden key event
if (e && e->type() == QEvent::ShortcutOverride) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->modifiers() == Qt::NoModifier) {
if (kevent->key() == Qt::Key_Delete) {
kevent->accept();
return true;
}
}
}
// if we have a Del key, trigger the deleteAction
else if (e && e->type() == QEvent::KeyPress) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->key() == Qt::Key_Delete) {
if (deleteAction->isEnabled())
deleteAction->trigger();
return true;
}
}
return TaskDressUpParameters::event(e);
}
const std::vector<std::string> TaskDressUpParameters::getReferences() const
{
PartDesign::DressUp* pcDressUp = static_cast<PartDesign::DressUp*>(DressUpView->getObject());

View File

@@ -31,6 +31,7 @@
#include "TaskFeatureParameters.h"
#include "ViewProviderDressUp.h"
class QAction;
class QListWidget;
class QListWidgetItem;
@@ -65,16 +66,18 @@ protected Q_SLOTS:
void setSelection(QListWidgetItem* current);
void itemClickedTimeout();
virtual void onRefDeleted(void) = 0;
void createDeleteAction(QListWidget* parentList, QWidget* parentButton);
protected:
QAction* deleteAction;
void exitSelectionMode();
bool referenceSelected(const Gui::SelectionChanges& msg);
bool wasDoubleClicked = false;
bool KeyEvent(QEvent *e);
protected:
enum selectionModes { none, refAdd, refRemove, plane, line };
virtual void clearButtons(const selectionModes notThis) = 0;
virtual void changeEvent(QEvent *e) = 0;
static void removeItemFromListWidget(QListWidget* widget, const char* itemstr);
ViewProviderDressUp* getDressUpView() const

View File

@@ -87,22 +87,8 @@ TaskFilletParameters::TaskFilletParameters(ViewProviderDressUp *DressUpView, QWi
this, SLOT(onButtonRefRemove(bool)));
// Create context menu
deleteAction = new QAction(tr("Remove"), this);
deleteAction->setShortcut(QKeySequence::Delete);
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
// display shortcut behind the context menu entry
deleteAction->setShortcutVisibleInContextMenu(true);
#endif
ui->listWidgetReferences->addAction(deleteAction);
// if there is only one item, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
deleteAction->setEnabled(false);
deleteAction->setStatusTip(tr("There must be at least one item"));
ui->buttonRefRemove->setEnabled(false);
ui->buttonRefRemove->setToolTip(tr("There must be at least one item"));
}
createDeleteAction(ui->listWidgetReferences, ui->buttonRefRemove);
connect(deleteAction, SIGNAL(triggered()), this, SLOT(onRefDeleted()));
ui->listWidgetReferences->setContextMenuPolicy(Qt::ActionsContextMenu);
connect(ui->listWidgetReferences, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(setSelection(QListWidgetItem*)));
@@ -226,27 +212,7 @@ TaskFilletParameters::~TaskFilletParameters()
bool TaskFilletParameters::event(QEvent *e)
{
// in case another instance takes key events, accept the overridden key event
if (e && e->type() == QEvent::ShortcutOverride) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->modifiers() == Qt::NoModifier) {
if (kevent->key() == Qt::Key_Delete) {
kevent->accept();
return true;
}
}
}
// if we have a Del key, trigger the deleteAction
else if (e && e->type() == QEvent::KeyPress) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->key() == Qt::Key_Delete) {
if (deleteAction->isEnabled())
deleteAction->trigger();
return true;
}
}
return TaskDressUpParameters::event(e);
return TaskDressUpParameters::KeyEvent(e);
}
void TaskFilletParameters::changeEvent(QEvent *e)

View File

@@ -53,7 +53,6 @@ protected:
virtual void onSelectionChanged(const Gui::SelectionChanges& msg);
private:
QAction* deleteAction;
Ui_TaskFilletParameters* ui;
};

View File

@@ -103,22 +103,8 @@ TaskThicknessParameters::TaskThicknessParameters(ViewProviderDressUp *DressUpVie
this, SLOT(onJoinTypeChanged(int)));
// Create context menu
deleteAction = new QAction(tr("Remove"), this);
deleteAction->setShortcut(QKeySequence::Delete);
#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
// display shortcut behind the context menu entry
deleteAction->setShortcutVisibleInContextMenu(true);
#endif
ui->listWidgetReferences->addAction(deleteAction);
// if there is only one item, it cannot be deleted
if (ui->listWidgetReferences->count() == 1) {
deleteAction->setEnabled(false);
deleteAction->setStatusTip(tr("There must be at least one item"));
ui->buttonRefRemove->setEnabled(false);
ui->buttonRefRemove->setToolTip(tr("There must be at least one item"));
}
createDeleteAction(ui->listWidgetReferences, ui->buttonRefRemove);
connect(deleteAction, SIGNAL(triggered()), this, SLOT(onRefDeleted()));
ui->listWidgetReferences->setContextMenuPolicy(Qt::ActionsContextMenu);
connect(ui->listWidgetReferences, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(setSelection(QListWidgetItem*)));
@@ -302,27 +288,7 @@ TaskThicknessParameters::~TaskThicknessParameters()
bool TaskThicknessParameters::event(QEvent *e)
{
// in case another instance takes key events, accept the overridden key event
if (e && e->type() == QEvent::ShortcutOverride) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->modifiers() == Qt::NoModifier) {
if (kevent->key() == Qt::Key_Delete) {
kevent->accept();
return true;
}
}
}
// if we have a Del key, trigger the deleteAction
else if (e && e->type() == QEvent::KeyPress) {
QKeyEvent * kevent = static_cast<QKeyEvent*>(e);
if (kevent->key() == Qt::Key_Delete) {
if (deleteAction->isEnabled())
deleteAction->trigger();
return true;
}
}
return TaskDressUpParameters::event(e);
return TaskDressUpParameters::KeyEvent(e);
}
void TaskThicknessParameters::changeEvent(QEvent *e)

View File

@@ -60,7 +60,6 @@ protected:
virtual void onSelectionChanged(const Gui::SelectionChanges& msg);
private:
QAction* deleteAction;
Ui_TaskThicknessParameters* ui;
};