ganeswidgets/src/hgindexfeedback.cpp
changeset 14 645b870db620
parent 6 1cdcc61142d2
--- a/ganeswidgets/src/hgindexfeedback.cpp	Fri Aug 06 09:27:34 2010 +0300
+++ b/ganeswidgets/src/hgindexfeedback.cpp	Mon Aug 23 13:45:39 2010 +0300
@@ -19,7 +19,6 @@
 #include "hgindexfeedback_p.h"
 
 #include <HbScrollbar>
-#include <HbStyleOptionIndexFeedback>
 #include <HbStyleParameters>
 #include <HbStyle>
 #include <HbDeviceProfile>
@@ -30,7 +29,6 @@
 #include <QObject>
 #include <QGraphicsScene>
 
-
 /* rather than magic numbers, let's define some constants. */
 namespace {
 /*
@@ -58,7 +56,7 @@
     Constructs a new HgIndexFeedback with a parent.
 */
 HgIndexFeedback::HgIndexFeedback(QGraphicsItem *parent)
-    : HbWidget( *new HgIndexFeedbackPrivate, parent, 0)
+    : HbWidget(parent), p_ptr(new HgIndexFeedbackPrivate)
 
 {
     Q_D( HgIndexFeedback );
@@ -75,6 +73,7 @@
 HgIndexFeedback::~HgIndexFeedback()
 {
     HbStyleLoader::unregisterFilePath(":/hgindexfeedback.css");
+    delete p_ptr;
 }
 
 /*!
@@ -135,7 +134,7 @@
 
     d->connectModelToIndexFeedback(d->mWidget->selectionModel());
 
-    d->connectScrollBarToIndexFeedback(d->mWidget->scrollBar());
+    d->connectWidgetToIndexFeedback();
 
     connect(d->mWidget, SIGNAL(destroyed(QObject*)),
         this, SLOT(_q_itemViewDestroyed()));
@@ -161,37 +160,6 @@
     return d->mWidget;
 }
 
-/*!
-    Returns the primitives used in HgIndexFeedback.
-
-    \param primitive The primitive type requested.
-
-    \return A pointer for the primitive requested.
-*/
-QGraphicsItem* HgIndexFeedback::primitive(HbStyle::Primitive primitive) const
-{
-    Q_D( const HgIndexFeedback );
-
-    QGraphicsItem* retVal = HbWidget::primitive(primitive);
-
-    switch (primitive) {
-        case HbStyle::P_IndexFeedback_popup_text:
-            retVal = d->mTextItem;
-            break;
-
-        case HbStyle::P_IndexFeedback_popup_background:
-            retVal = d->mPopupItem;
-            break;
-
-        default:
-            qt_noop();
-            break;
-    }
-
-    return retVal;
-}
-
-
 /*
     A scene event filter.  It's purpose is to call calculatePopupRects on
     a resize event for the item view.
@@ -202,6 +170,7 @@
 
     if (ev->type() == QEvent::GraphicsSceneResize) {
         d->calculatePopupRects();
+        d->updatePrimitives();
     }
 
     return QGraphicsItem::sceneEventFilter(watched, ev);
@@ -217,96 +186,42 @@
 bool HgIndexFeedback::eventFilter(QObject *obj, QEvent *ev)
 {
     Q_D( HgIndexFeedback );
-    HbScrollBar* scrollBar = qobject_cast<HbScrollBar*>(obj);
-
-    if (d->mIndexFeedbackPolicy != HgWidget::IndexFeedbackNone
-        && scrollBar) {
-        switch (ev->type()) {
-            case QEvent::GraphicsSceneMousePress:
-            case QEvent::MouseButtonPress:
-                if (scrollBar->isInteractive()) {
-                    d->scrollBarPressed();
-                }
-                break;
-
-            case QEvent::GraphicsSceneMouseRelease:
-            case QEvent::MouseButtonRelease:
-                if (scrollBar->isInteractive()) {
-                    d->scrollBarReleased();
-                }
-                break;
-
-            case QEvent::GraphicsSceneResize:
-            case QEvent::Resize:
-                    d->_q_hideIndexFeedbackNow();
-                    d->calculatePopupRects();
-                    d->updatePrimitives();
-                break;
-
-            default:
-                // do nothing, ignore other events.
-                break;
+    HbScrollBar *scrollBar = qobject_cast<HbScrollBar*>(obj);
+    HgWidget *widget = qobject_cast<HgWidget*>(obj);
+    
+    if (d->mIndexFeedbackPolicy != HgWidget::IndexFeedbackNone) {
+        if (scrollBar) {
+            switch (ev->type()) {
+                case QEvent::GraphicsSceneMousePress:
+                case QEvent::MouseButtonPress:
+                    if (scrollBar->isInteractive()) {
+                        d->scrollBarPressed();
+                    }
+                    break;
+    
+                case QEvent::GraphicsSceneMouseRelease:
+                case QEvent::MouseButtonRelease:
+                    if (scrollBar->isInteractive()) {
+                        d->scrollBarReleased();
+                    }
+                    break;
+                default:
+                    // do nothing, ignore other events.
+                    break;
+            }
+        }
+        if (widget && (ev->type() == QEvent::GraphicsSceneResize || ev->type() == QEvent::Resize)) {
+            // widget size has changed and size of the popup letter box depends from it
+            // so recalculate the popup rects
+            d->_q_hideIndexFeedbackNow();
+            d->calculatePopupRects();
+            d->updatePrimitives();
         }
     }
 
     return QObject::eventFilter(obj, ev);
 }
 
-/*
-    For use with HbStyle.
-
-    Provide the correct data to use in the 'model.'
-*/
-void HgIndexFeedback::initStyleOption(HbStyleOptionIndexFeedback *option) const
-{
-    Q_D( const HgIndexFeedback );
-
-    HbWidget::initStyleOption(option);
-
-    if (!d->mWidget) {
-        return;
-    }
-
-    HbFontSpec fontSpec;
-    qreal margin = 0;
-
-    style()->parameter(QLatin1String("hb-param-margin-gene-popup"), margin);
-
-    switch (d->mIndexFeedbackPolicy) {
-        case HgWidget::IndexFeedbackSingleCharacter:
-            {
-                fontSpec = HbFontSpec(HbFontSpec::Primary);
-                fontSpec.setTextHeight(d->textHeight());
-            }
-            break;
-
-        case HgWidget::IndexFeedbackThreeCharacter:
-            {
-                fontSpec = HbFontSpec(HbFontSpec::Primary);
-                fontSpec.setTextHeight(d->textHeight());
-            }
-            break;
-
-        case HgWidget::IndexFeedbackString:
-            {
-                fontSpec = HbFontSpec(HbFontSpec::Primary);
-                qreal textPaneHeight = 0;
-                style()->parameter(QLatin1String("hb-param-text-height-primary"), textPaneHeight);
-                fontSpec.setTextHeight( textPaneHeight );
-            }
-            break;
-
-        case HgWidget::IndexFeedbackNone:
-            // leave the HbStyleOption uninitialized
-            return;
-    }
-
-    option->text = d->mPopupContent;
-    option->fontSpec = fontSpec;
-    option->textRect = d->mPopupTextRect;
-    option->popupRect = d->mPopupBackgroundRect;
-}
-
 void HgIndexFeedback::polish(HbStyleParameters& params)
 {
     Q_D( HgIndexFeedback );
@@ -324,6 +239,7 @@
     d->mStringOffset = params.value( STRING_OFFSET ).toDouble();
 
     d->calculatePopupRects();
+    d->updatePrimitives();
 }
 
 #include "moc_hgindexfeedback.cpp"