SVN commit 1192326 by mutz: DeclarativeWidgetBaseHelper: factor itemChanged(), too, into DeclarativeWidgetBaseHelper M +13 -2 declarativewidgetbase.cpp M +18 -16 declarativewidgetbase.h --- trunk/KDE/kdepim/mobile/lib/declarativewidgetbase.cpp #1192325:1192326 @@ -22,10 +22,11 @@ #include "stylesheetloader.h" #include -//#include +#include -DeclarativeWidgetBaseHelper::DeclarativeWidgetBaseHelper( QWidget * widget, QGraphicsItem * parent ) +DeclarativeWidgetBaseHelper::DeclarativeWidgetBaseHelper( QWidget * widget, QGraphicsItem * parent, const RegisterFunction & registerFunc ) : QGraphicsProxyWidget( parent ), + m_registerFunc( registerFunc ), m_widget( widget ) { Q_ASSERT( m_widget ); @@ -39,3 +40,13 @@ } DeclarativeWidgetBaseHelper::~DeclarativeWidgetBaseHelper() {} + +QVariant DeclarativeWidgetBaseHelper::itemChange( GraphicsItemChange change, const QVariant & value ) +{ + if ( !m_registerFunc.empty() ) + if ( change == ItemSceneHasChanged ) + if ( QGraphicsScene* scene = value.value() ) + Q_FOREACH( QGraphicsView * v, scene->views() ) + m_registerFunc( v, m_widget ); + return QGraphicsProxyWidget::itemChange ( change, value ); +} --- trunk/KDE/kdepim/mobile/lib/declarativewidgetbase.h #1192325:1192326 @@ -23,21 +23,29 @@ #include "mobileui_export.h" #include -#include -#include +#include + +class QGraphicsView; +class QWidget; + /** \internal */ class MOBILEUI_EXPORT DeclarativeWidgetBaseHelper : public QGraphicsProxyWidget { protected: - DeclarativeWidgetBaseHelper( QWidget * widget, QGraphicsItem *parent ); + typedef boost::function RegisterFunction; + DeclarativeWidgetBaseHelper( QWidget * widget, QGraphicsItem *parent, const RegisterFunction & registerFunc ); ~DeclarativeWidgetBaseHelper(); QWidget * widget() const { return m_widget; } +protected: + /* reimp */ QVariant itemChange( GraphicsItemChange change, const QVariant & value ); + private: + const RegisterFunction m_registerFunc; QWidget * m_widget; }; @@ -46,26 +54,20 @@ { public: explicit DeclarativeWidgetBase( QGraphicsItem *parent = 0 ) - : DeclarativeWidgetBaseHelper( new WidgetT, parent ) {} + : DeclarativeWidgetBaseHelper( new WidgetT, parent, ¬ify ) {} /** use this constructor if you inherit from this template to customize widget construction. */ DeclarativeWidgetBase( WidgetT *widget, QGraphicsItem *parent ) - : DeclarativeWidgetBaseHelper( widget, parent ) {} + : DeclarativeWidgetBaseHelper( widget, parent, ¬ify ) {} protected: - QVariant itemChange ( GraphicsItemChange change, const QVariant& value ) - { - if ( change == ItemSceneHasChanged ) { - if ( QGraphicsScene* scene = value.value() ) - Q_FOREACH( QGraphicsView * v, scene->views() ) + WidgetT * widget() const { return static_cast( DeclarativeWidgetBaseHelper::widget() ); } + + private: + static void notify( QGraphicsView * v, QWidget * w ) { if ( ViewT * view = qobject_cast( v ) ) - (view->*registerFunc)( widget() ); + (view->*registerFunc)( static_cast( w ) ); } - return QGraphicsProxyWidget::itemChange ( change, value ); - } - - protected: - WidgetT * widget() const { return static_cast( DeclarativeWidgetBaseHelper::widget() ); } }; #endif