Commit 8fdcd1e9 authored by Benjamin Long's avatar Benjamin Long

Fix all the QSpinBox issues - Close #88

parent f4a72877
...@@ -41,6 +41,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ...@@ -41,6 +41,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
pqSpinBoxEventTranslator::pqSpinBoxEventTranslator(QObject* p) pqSpinBoxEventTranslator::pqSpinBoxEventTranslator(QObject* p)
: pqWidgetEventTranslator(p) : pqWidgetEventTranslator(p)
{ {
this->CurrentObject = 0;
} }
bool pqSpinBoxEventTranslator::translateEvent(QObject* Object, QEvent* Event, bool& /*Error*/) bool pqSpinBoxEventTranslator::translateEvent(QObject* Object, QEvent* Event, bool& /*Error*/)
...@@ -54,49 +55,49 @@ bool pqSpinBoxEventTranslator::translateEvent(QObject* Object, QEvent* Event, bo ...@@ -54,49 +55,49 @@ bool pqSpinBoxEventTranslator::translateEvent(QObject* Object, QEvent* Event, bo
} }
if(!object) if(!object)
return false; 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(this->CurrentObject)
if(me->button() == Qt::LeftButton)
{ {
QStyle* style = object->style(); disconnect(this->CurrentObject, 0, this, 0);
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");
}
} }
this->CurrentObject = Object;
this->Value = object->value();
connect(object, SIGNAL(valueChanged(int)),this, SLOT(onValueChanged(int)));
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();
this->Value = object->value();
if(keyText.length() && keyText.at(0).isLetterOrNumber())
{ {
QKeyEvent* ke = static_cast<QKeyEvent*>(Event); emit recordEvent(object, "set_int", QString("%1").arg(object->value()));
QString keyText = ke->text(); }
if(keyText.length() && keyText.at(0).isLetterOrNumber()) else
{ {
emit recordEvent(object, "set_int", QString("%1").arg(object->value())); emit recordEvent(object, "key", QString("%1").arg(ke->key()));
}
else
{
emit recordEvent(object, "key", QString("%1").arg(ke->key()));
}
} }
default:
break;
} }
return true; return true;
} }
void pqSpinBoxEventTranslator::onDestroyed(QObject* /*Object*/)
{
this->CurrentObject = 0;
}
void pqSpinBoxEventTranslator::onValueChanged(int number)
{
QString sens = (number - this->Value > 0) ? "up" : "down";
this->Value = number;
emit recordEvent(this->CurrentObject, "spin", sens);
}
...@@ -55,6 +55,12 @@ private: ...@@ -55,6 +55,12 @@ private:
pqSpinBoxEventTranslator(const pqSpinBoxEventTranslator&); pqSpinBoxEventTranslator(const pqSpinBoxEventTranslator&);
pqSpinBoxEventTranslator& operator=(const pqSpinBoxEventTranslator&); pqSpinBoxEventTranslator& operator=(const pqSpinBoxEventTranslator&);
int Value;
QObject* CurrentObject;
private slots:
void onDestroyed(QObject*);
void onValueChanged(int number);
}; };
#endif // !_pqSpinBoxEventTranslator_h #endif // !_pqSpinBoxEventTranslator_h
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment