| Attached Files | fix_QDoubleSpinBox_issue.patch [^] (4,001 bytes) 2011-12-01 15:32 [Show Content] [Hide Content]From 3c9cdb9ea4743a5f7d25a8a11bacfc54c6c95004 Mon Sep 17 00:00:00 2001
From: BenjaminLong <benjamin.long@kitware.com>
Date: Wed, 23 Nov 2011 13:35:31 -0500
Subject: [PATCH] Fix all the QDoubleSpinBox issues - Close #88
---
pqDoubleSpinBoxEventTranslator.cxx | 69 ++++++++++++++++++-----------------
pqDoubleSpinBoxEventTranslator.h | 7 ++++
2 files changed, 42 insertions(+), 34 deletions(-)
diff --git a/pqDoubleSpinBoxEventTranslator.cxx b/pqDoubleSpinBoxEventTranslator.cxx
index 12157dd..822876d 100644
--- a/pqDoubleSpinBoxEventTranslator.cxx
+++ b/pqDoubleSpinBoxEventTranslator.cxx
@@ -39,7 +39,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <QStyleOptionSpinBox>
pqDoubleSpinBoxEventTranslator::pqDoubleSpinBoxEventTranslator(QObject* p)
- : pqWidgetEventTranslator(p)
+ : pqWidgetEventTranslator(p),
+ CurrentObject(0)
{
}
@@ -56,46 +57,46 @@ bool pqDoubleSpinBoxEventTranslator::translateEvent(QObject* Object, QEvent* Eve
if(!object)
return false;
- switch(Event->type())
+ if(Event->type() == QEvent::Enter && Object==object)
{
- case QEvent::MouseButtonPress:
+ if(this->CurrentObject != Object)
{
- QMouseEvent* me = static_cast<QMouseEvent*>(Event);
- if(me->button() == Qt::LeftButton)
+ if(this->CurrentObject)
{
- QStyle* style = object->style();
- QStyleOptionSpinBox option;
- option.initFrom(object);
- option.subControls = QStyle::SC_All;
- QStyle::SubControl sub = style->hitTestComplexControl(
- QStyle::CC_SpinBox, &option, me->pos(), object);
- if(sub == QStyle::SC_SpinBoxUp)
- {
- emit recordEvent(object, "spin", "up");
- }
- else if(sub == QStyle::SC_SpinBoxDown)
- {
- emit recordEvent(object, "spin", "down");
- }
+ disconnect(this->CurrentObject, 0, this, 0);
}
+ this->CurrentObject = Object;
+ this->Value = object->value();
+ connect(object, SIGNAL(valueChanged(double)),this, SLOT(onValueChanged(double)));
+ connect(object, SIGNAL(destroyed(QObject*)), this, SLOT(onDestroyed(QObject*)));
}
- break;
- case QEvent::KeyRelease:
+ }
+
+ if(Event->type() == QEvent::KeyRelease && Object==object)
+ {
+ QKeyEvent* ke = static_cast<QKeyEvent*>(Event);
+ QString keyText = ke->text();
+ if(keyText.length() && keyText.at(0).isLetterOrNumber())
{
- QKeyEvent* ke = static_cast<QKeyEvent*>(Event);
- QString keyText = ke->text();
- if(keyText.length() && keyText.at(0).isLetterOrNumber())
- {
- emit recordEvent(object, "set_double", QString("%1").arg(object->value()));
- }
- else
- {
- emit recordEvent(object, "key", QString("%1").arg(ke->key()));
- }
+ emit recordEvent(object, "set_double", QString("%1").arg(object->value()));
+ }
+ else
+ {
+ emit recordEvent(object, "key", QString("%1").arg(ke->key()));
}
- default:
- break;
}
-
+
return true;
}
+
+void pqDoubleSpinBoxEventTranslator::onDestroyed(QObject* /*Object*/)
+{
+ this->CurrentObject = 0;
+}
+
+void pqDoubleSpinBoxEventTranslator::onValueChanged(double number)
+{
+ QString sens = (number - this->Value > 0) ? "up" : "down";
+ this->Value = number;
+ emit recordEvent(this->CurrentObject, "spin", sens);
+}
diff --git a/pqDoubleSpinBoxEventTranslator.h b/pqDoubleSpinBoxEventTranslator.h
index 0c0162b..ab8e5cb 100644
--- a/pqDoubleSpinBoxEventTranslator.h
+++ b/pqDoubleSpinBoxEventTranslator.h
@@ -55,6 +55,13 @@ private:
pqDoubleSpinBoxEventTranslator(const pqDoubleSpinBoxEventTranslator&);
pqDoubleSpinBoxEventTranslator& operator=(const pqDoubleSpinBoxEventTranslator&);
+ int Value;
+ QObject* CurrentObject;
+
+private slots:
+ void onDestroyed(QObject*);
+ void onValueChanged(double number);
+
};
#endif // !_pqDoubleSpinBoxEventTranslator_h
--
1.7.4.1
|