Prevented spin boxes in property editor from stealing focus on wheel scroll

This commit is contained in:
parax0 2015-07-29 00:41:23 -04:00
parent 7c2c1c9088
commit 8280055e21
7 changed files with 63 additions and 11 deletions

View File

@ -131,7 +131,8 @@ SOURCES += \
Resource/CScan.cpp \ Resource/CScan.cpp \
Resource/factory/CScanLoader.cpp \ Resource/factory/CScanLoader.cpp \
UI/WStringPreviewPanel.cpp \ UI/WStringPreviewPanel.cpp \
UI/WScanPreviewPanel.cpp UI/WScanPreviewPanel.cpp \
UI/WIntegralSpinBox.cpp
HEADERS += \ HEADERS += \
Common/AnimUtil.h \ Common/AnimUtil.h \
@ -277,7 +278,8 @@ HEADERS += \
Resource/CScan.h \ Resource/CScan.h \
Resource/factory/CScanLoader.h \ Resource/factory/CScanLoader.h \
UI/WStringPreviewPanel.h \ UI/WStringPreviewPanel.h \
UI/WScanPreviewPanel.h UI/WScanPreviewPanel.h \
UI/WIntegralSpinBox.h
FORMS += \ FORMS += \
UI/CWorldEditorWindow.ui \ UI/CWorldEditorWindow.ui \

View File

@ -77,3 +77,9 @@ void WDraggableSpinBox::mouseMoveEvent(QMouseEvent*)
mLastY = QCursor::pos().y(); mLastY = QCursor::pos().y();
} }
} }
void WDraggableSpinBox::wheelEvent(QWheelEvent *pEvent)
{
if (!hasFocus()) pEvent->ignore();
else QDoubleSpinBox::wheelEvent(pEvent);
}

View File

@ -14,9 +14,10 @@ class WDraggableSpinBox : public QDoubleSpinBox
public: public:
explicit WDraggableSpinBox(QWidget *parent = 0); explicit WDraggableSpinBox(QWidget *parent = 0);
~WDraggableSpinBox(); ~WDraggableSpinBox();
void mousePressEvent(QMouseEvent *Event); void mousePressEvent(QMouseEvent *pEvent);
void mouseReleaseEvent(QMouseEvent *Event); void mouseReleaseEvent(QMouseEvent *pEvent);
void mouseMoveEvent(QMouseEvent *Event); void mouseMoveEvent(QMouseEvent *pEvent);
void wheelEvent(QWheelEvent *pEvent);
}; };
#endif // WDRAGGABLESPINBOX_H #endif // WDRAGGABLESPINBOX_H

16
UI/WIntegralSpinBox.cpp Normal file
View File

@ -0,0 +1,16 @@
#include "WIntegralSpinBox.h"
#include <QWheelEvent>
WIntegralSpinBox::WIntegralSpinBox(QWidget *pParent) : QSpinBox(pParent)
{
}
WIntegralSpinBox::~WIntegralSpinBox()
{
}
void WIntegralSpinBox::wheelEvent(QWheelEvent *pEvent)
{
if (!hasFocus()) pEvent->ignore();
else QSpinBox::wheelEvent(pEvent);
}

16
UI/WIntegralSpinBox.h Normal file
View File

@ -0,0 +1,16 @@
#ifndef WINTEGRALSPINBOX_H
#define WINTEGRALSPINBOX_H
#include <QSpinBox>
// Simple subclass to disable focus stealing on wheel event
class WIntegralSpinBox : public QSpinBox
{
Q_OBJECT
public:
explicit WIntegralSpinBox(QWidget *pParent);
~WIntegralSpinBox();
void wheelEvent(QWheelEvent *pEvent);
};
#endif // WINTEGRALSPINBOX_H

View File

@ -1,5 +1,6 @@
#include "WPropertyEditor.h" #include "WPropertyEditor.h"
#include "WDraggableSpinBox.h" #include "WDraggableSpinBox.h"
#include "WIntegralSpinBox.h"
#include "WResourceSelector.h" #include "WResourceSelector.h"
#include "WColorPicker.h" #include "WColorPicker.h"
#include "WVectorEditor.h" #include "WVectorEditor.h"
@ -85,39 +86,42 @@ void WPropertyEditor::CreateEditor()
break; break;
} }
// Byte - QSpinBox // Byte - WIntegralSpinBox
case eByteProperty: case eByteProperty:
{ {
CByteProperty *pByteCast = static_cast<CByteProperty*>(mpProperty); CByteProperty *pByteCast = static_cast<CByteProperty*>(mpProperty);
QSpinBox *pSpinBox = new QSpinBox(this); QSpinBox *pSpinBox = new WIntegralSpinBox(this);
pSpinBox->setRange(-128, 128); pSpinBox->setRange(-128, 128);
pSpinBox->setFocusPolicy(Qt::StrongFocus);
pSpinBox->setValue(pByteCast->Get()); pSpinBox->setValue(pByteCast->Get());
mUI.EditorWidget = pSpinBox; mUI.EditorWidget = pSpinBox;
break; break;
} }
// Short - QSpinBox // Short - WIntegralSpinBox
case eShortProperty: case eShortProperty:
{ {
CShortProperty *pShortCast = static_cast<CShortProperty*>(mpProperty); CShortProperty *pShortCast = static_cast<CShortProperty*>(mpProperty);
QSpinBox *pSpinBox = new QSpinBox(this); QSpinBox *pSpinBox = new WIntegralSpinBox(this);
pSpinBox->setRange(-32768, 32767); pSpinBox->setRange(-32768, 32767);
pSpinBox->setFocusPolicy(Qt::StrongFocus);
pSpinBox->setValue(pShortCast->Get()); pSpinBox->setValue(pShortCast->Get());
mUI.EditorWidget = pSpinBox; mUI.EditorWidget = pSpinBox;
break; break;
} }
// Long - QSpinBox // Long - WIntegralSpinBox
case eLongProperty: case eLongProperty:
{ {
CLongProperty *pLongCast = static_cast<CLongProperty*>(mpProperty); CLongProperty *pLongCast = static_cast<CLongProperty*>(mpProperty);
QSpinBox *pSpinBox = new QSpinBox(this); QSpinBox *pSpinBox = new WIntegralSpinBox(this);
pSpinBox->setRange(-2147483648, 2147483647); pSpinBox->setRange(-2147483648, 2147483647);
pSpinBox->setFocusPolicy(Qt::StrongFocus);
pSpinBox->setValue(pLongCast->Get()); pSpinBox->setValue(pLongCast->Get());
mUI.EditorWidget = pSpinBox; mUI.EditorWidget = pSpinBox;
@ -131,6 +135,7 @@ void WPropertyEditor::CreateEditor()
WDraggableSpinBox *pDraggableSpinBox = new WDraggableSpinBox(this); WDraggableSpinBox *pDraggableSpinBox = new WDraggableSpinBox(this);
pDraggableSpinBox->setDecimals(4); pDraggableSpinBox->setDecimals(4);
pDraggableSpinBox->setFocusPolicy(Qt::StrongFocus);
pDraggableSpinBox->setValue(pFloatCast->Get()); pDraggableSpinBox->setValue(pFloatCast->Get());
mUI.EditorWidget = pDraggableSpinBox; mUI.EditorWidget = pDraggableSpinBox;

View File

@ -7,6 +7,9 @@ WVectorEditor::WVectorEditor(QWidget *pParent) : QWidget(pParent)
mpSpinBoxX = new WDraggableSpinBox(this); mpSpinBoxX = new WDraggableSpinBox(this);
mpSpinBoxY = new WDraggableSpinBox(this); mpSpinBoxY = new WDraggableSpinBox(this);
mpSpinBoxZ = new WDraggableSpinBox(this); mpSpinBoxZ = new WDraggableSpinBox(this);
mpSpinBoxX->setFocusPolicy(Qt::StrongFocus);
mpSpinBoxY->setFocusPolicy(Qt::StrongFocus);
mpSpinBoxZ->setFocusPolicy(Qt::StrongFocus);
connect(mpSpinBoxX, SIGNAL(valueChanged(double)), this, SLOT(SetX(double))); connect(mpSpinBoxX, SIGNAL(valueChanged(double)), this, SLOT(SetX(double)));
connect(mpSpinBoxY, SIGNAL(valueChanged(double)), this, SLOT(SetY(double))); connect(mpSpinBoxY, SIGNAL(valueChanged(double)), this, SLOT(SetY(double)));
connect(mpSpinBoxZ, SIGNAL(valueChanged(double)), this, SLOT(SetZ(double))); connect(mpSpinBoxZ, SIGNAL(valueChanged(double)), this, SLOT(SetZ(double)));
@ -46,6 +49,9 @@ WVectorEditor::WVectorEditor(const CVector3f& Value, QWidget *pParent) : QWidget
mpSpinBoxX->setMaximumHeight(21); mpSpinBoxX->setMaximumHeight(21);
mpSpinBoxY->setMaximumHeight(21); mpSpinBoxY->setMaximumHeight(21);
mpSpinBoxZ->setMaximumHeight(21); mpSpinBoxZ->setMaximumHeight(21);
mpSpinBoxX->setFocusPolicy(Qt::StrongFocus);
mpSpinBoxY->setFocusPolicy(Qt::StrongFocus);
mpSpinBoxZ->setFocusPolicy(Qt::StrongFocus);
connect(mpSpinBoxX, SIGNAL(valueChanged(double)), this, SLOT(SetX(double))); connect(mpSpinBoxX, SIGNAL(valueChanged(double)), this, SLOT(SetX(double)));
connect(mpSpinBoxY, SIGNAL(valueChanged(double)), this, SLOT(SetY(double))); connect(mpSpinBoxY, SIGNAL(valueChanged(double)), this, SLOT(SetY(double)));
connect(mpSpinBoxZ, SIGNAL(valueChanged(double)), this, SLOT(SetZ(double))); connect(mpSpinBoxZ, SIGNAL(valueChanged(double)), this, SLOT(SetZ(double)));