[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    [PyKDE] event type bug with sip-4-20031024?
From:       Gerard Vermeulen <gvermeul () grenoble ! cnrs ! fr>
Date:       2003-10-27 7:31:57
[Download RAW message or body]

Hi Phil,

The SIP-4 API feels great and I can RECOMMEND sip-4 to newbies because
handwritten code is much easier to write.

While adapting PyQwt for sip-4, I ran into the following warnings indicating
that event handlers are getting objects of the wrong type:

TypeError: argument 1 of QwtSlider.mouseDoubleClickEvent() has an invalid type
TypeError: argument 1 of QwtSlider.mouseDoubleClickEvent() has an invalid type
TypeError: argument 1 of QwtSlider.mouseDoubleClickEvent() has an invalid type
TypeError: argument 1 of QwtSlider.keyPressEvent() has an invalid type
TypeError: argument 1 of QwtSlider.keyPressEvent() has an invalid type
TypeError: argument 1 of QwtSlider.keyPressEvent() has an invalid type
TypeError: argument 1 of QwtSlider.keyPressEvent() has an invalid type
TypeError: argument 1 of QwtSlider.keyPressEvent() has an invalid type

And during some of the keyPressEvent()'s I moved the mouse (the events
seem to be history dependent).

The class hierarchy looks like this (sorry this is a hopeless bug-report;
I can make a mini-PyQwt-4.0 tonight, if you need it):

class QwtSliderBase: QWidget, QwtDblRange
{
    ...
signals:
    void valueChanged(double);
    void sliderPressed();
    void sliderReleased();
    void sliderMoved(double);

protected:
    void setPosition(const QPoint &);
    virtual void valueChange();

    virtual void timerEvent(QTimerEvent *);
    virtual void mousePressEvent(QMouseEvent *);
    virtual void mouseReleaseEvent(QMouseEvent *);
    virtual void mouseMoveEvent(QMouseEvent *);
    virtual void keyPressEvent(QKeyEvent *);
    virtual void wheelEvent(QWheelEvent *);

    virtual double getValue(const QPoint &) = 0;
    virtual SIP_PYTUPLE getScrollMode(const QPoint &) = 0 [void (const QPoint &,
 int &, int &)];
    // see 'virtual State QValidator::validate(QString &, int &) = 0;'
    // see 'virtual void getButtonShift(int &, int &) = 0;
%MethodCode
    // The Python interface takes a QPoint and returns a tuple.
    int scrollMode;
    int direction;

    Py_BEGIN_ALLOW_THREADS
    sipCpp->getScrollMode(*a0, scrollMode, direction);
    Py_END_ALLOW_THREADS

    sipRes = sipBuildResult(&sipIsErr, "(ii)", scrollMode, direction);
%End
%VirtualCatcherCode
    PyObject *result = sipCallMethod(&sipIsErr, sipMethod,
                                     "Mii", &a0, sipClass_QPoint, a1, a2);

    if (0 != result)
        sipParseResult(&sipIsErr, sipMethod, result, "(ii)", &a1, &a2);
%End
};

class QwtSlider: QwtSliderBase, QwtScaleIf
{
    ...
protected:
    virtual double getValue(const QPoint &);
    /* virtual */ SIP_PYTUPLE getScrollMode(const QPoint &);
%MethodCode
    // The Python interface takes a QPoint and returns a tuple.
    int scrollMode;
    int direction;

    Py_BEGIN_ALLOW_THREADS
    sipCpp->getScrollMode(*a0, scrollMode, direction);
    Py_END_ALLOW_THREADS

    sipRes = sipBuildResult(&sipIsErr, "(ii)", scrollMode, direction);
%End
     ...
};

QwtScaleIf and QwtDoubleRange have no event related stuff.

Gerard

PS: I tried to check if it was related to your latest objmap.c change, and
it does not seem to be the case ( but I do not understand why my printf
tracing statements didn't print ). 

_______________________________________________
PyKDE mailing list    PyKDE@mats.imk.fraunhofer.de
http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic