diff -r 627c4a0fd0e7 -r c3690ec91ef8 src/hbwidgets/sliders/hbslider.cpp --- a/src/hbwidgets/sliders/hbslider.cpp Fri Jun 11 13:58:22 2010 +0300 +++ b/src/hbwidgets/sliders/hbslider.cpp Wed Jun 23 18:33:25 2010 +0300 @@ -39,7 +39,9 @@ #include #include #include - +#ifdef HB_GESTURE_FW +#include +#endif #ifdef HB_EFFECTS #include "hbeffect.h" #include "hbeffectinternal_p.h" @@ -89,7 +91,7 @@ \image html verticalslider.png A Custom vertical slider with all elements. - order in which HbSlider::SliderElement are inserted into QList doesnt matter. + order in which HbSlider::SliderElement are inserted into QList does not matter. HbSlider provides methods for controlling tickmarks. You can use setTickPosition( ) to indicate where you want the tickmarks to be, @@ -196,7 +198,7 @@ /*! \var HbSlider::TrackElement - The slider track that consists of a groove, ticks and handle. + The slider track that consists of a groove and handle. */ /*! @@ -208,7 +210,7 @@ /*! \var HbSlider::IconElement - An icon element associated to the slider. + An icon element associated to the slider.For example mute icon of volume slider */ /*! @@ -276,13 +278,16 @@ HbStyle::setItemName( q,"this" ); q->setFlags( QGraphicsItem::ItemIsFocusable ); q->setProperty("TickLabelPresent",false); +#ifdef HB_GESTURE_FW + q->grabGesture(Qt::TapGesture); +#endif } void HbSliderPrivate::setElements( QList elementList) { Q_Q( HbSlider); bool oldElementRemoved = false; - foreach(HbSlider::SliderElement element,elements){ + foreach(const HbSlider::SliderElement &element,elements){ if(!elementList.contains(element)&& elementItemMap.contains(element)) { delete elementItemMap[element].item; delete elementItemMap[element].touchItem; @@ -305,6 +310,7 @@ } /*! + \internal This api creates widget for given element */ void HbSliderPrivate::elementWidget( HbSlider::SliderElement element ) @@ -402,6 +408,7 @@ /*! + \internal update element will first delete element which are not required and then create new element */ @@ -415,6 +422,7 @@ } /*! + \internal This Api will start incrementing slider value by step size till the time stopReapetAction( ) is not being called or slider value becomes maximum( ) @@ -432,6 +440,7 @@ } /*! + \internal This Api will start decrementing slider value by step size till the time stopReapetAction( ) is not being called or slider value becomes minimum( ) @@ -447,6 +456,7 @@ } /*! + \internal stops the reapeating action reapeat action can be increase slider value by step or decrease slider value by step */ @@ -456,27 +466,10 @@ } -void HbSliderPrivate::setTickLabelPresentProperty( ) -{ - Q_Q ( HbSlider ); - if (q->majorTickInterval( ) > 0 && q->tickPosition( ) !=Hb::NoSliderTicks && - (q->majorTickLabels().length() > 0 || - (q->minorTickInterval() > 0 && q->minorTickLabels( ).length() > 0))) { - if(!q->property("TickLabelPresent").toBool()){ - q->setProperty("TickLabelPresent",true); - q->repolish( ); - } - } else { - if( q->property("TickLabelPresent").toBool()){ - q->setProperty("TickLabelPresent",false); - q->repolish( ); - } - } - -} - - - +/*! + \internal + creates either left tickmarks or right tickmarks or both based on tickposition of slider + */ void HbSliderPrivate::createTickMarks( ) { @@ -536,7 +529,11 @@ } } - +/*! + \internal + creates either left tickmarks or right tickmarksLabel or both based on tickposition of slider + + */ void HbSliderPrivate::createTickLabels( ) { Q_Q(HbSlider); @@ -586,7 +583,10 @@ } } - +/*! + \internal + changes the orientation of slider tick marks or label based on slider's orientation + */ void HbSliderPrivate::setTickOrientation() { Q_Q(HbSlider); @@ -637,9 +637,11 @@ void HbSliderPrivate::updateTickMarks( ) { if (tickmarksLeft) { + tickmarksLeft->createTicks(); tickmarksLeft->updateTicks(); } if (tickmarksRight) { + tickmarksRight->createTicks(); tickmarksRight->updateTicks(); } } @@ -662,58 +664,45 @@ /*! \internal - Updates tick and Label. + deletes slidertickmarks. */ void HbSliderPrivate::deleteTickMarks( ) { - Q_Q ( HbSlider ); - bool deleted = false; if (tickmarksLeft) { + HbStyle::setItemName(tickmarksLeft,QString()); delete tickmarksLeft; tickmarksLeft = 0; - deleted = true; } if (tickmarksRight) { + HbStyle::setItemName(tickmarksRight,QString()); delete tickmarksRight; tickmarksRight = 0; - deleted = true; } - if ( deleted ) { - q->repolish( ); - } - } /*! \internal - Updates tick and Label. + deletes ticklabels. */ void HbSliderPrivate::deleteTickLabels( ) { - - Q_Q(HbSlider); - bool deleted = false; if (tickmarkslabelLeft) { + HbStyle::setItemName(tickmarkslabelLeft,QString()); delete tickmarkslabelLeft; tickmarkslabelLeft = 0; - deleted = true; - } if (tickmarkslabelRight) { + HbStyle::setItemName(tickmarkslabelRight,QString()); delete tickmarkslabelRight; tickmarkslabelRight = 0; - deleted = true; } - if (deleted) { - q->repolish( ); - } - } #ifdef HB_EFFECTS /*! + \internal start effect for on icon press */ void HbSliderPrivate::_q_startIconPressedEffect( ) @@ -723,6 +712,7 @@ } /*! + \internal start effect on icon release */ void HbSliderPrivate::_q_startIconReleasedEffect( ) @@ -811,7 +801,7 @@ { Q_D( const HbSlider ); QList elementList; - foreach(HbSlider::SliderElement element,d->elements){ + foreach(const HbSlider::SliderElement &element,d->elements){ elementList.append ( QVariant ( element ) ); } return elementList; @@ -843,7 +833,7 @@ { Q_D( HbSlider ); QList elements; - foreach ( QVariant elementVar , elementlist ) { + foreach (const QVariant &elementVar , elementlist ) { elements.append( static_cast(elementVar.toInt())); } d->setElements( elements ); @@ -863,8 +853,8 @@ Eg Usage: HbSlider slider; QMap map; - map.insert(QString("IncreaseElement") , QVariant(":/unittest_hbslider/star_on.png")); - map.insert(QString("DecreaseElement") , QVariant(":/unittest_hbslider/star_on.png")); + map.insert(QString("IncreaseElement") , QVariant("example1.png")); + map.insert(QString("DecreaseElement") , QVariant("example2.png")); slider.setElementIcons( map ); \warning Setting icon to a non-existing element has no effect. @@ -1537,9 +1527,10 @@ { Q_D( HbSlider ); d->sliderControl->setTickPosition( position ); - d->setTickLabelPresentProperty( ); d->createTickMarks( ); d->createTickLabels( ); + d->updateTickMarks( ); + d->updateTickLabels( ); } /*! @@ -1606,7 +1597,6 @@ d->updateTickMarks( ); d->updateTickLabels( ); } - d->setTickLabelPresentProperty( ); } /*! @@ -1639,7 +1629,6 @@ d->sliderControl->setMinorTickInterval( interval ); d->updateTickMarks( ); d->updateTickLabels( ); - d->setTickLabelPresentProperty( ); } /*! @@ -1734,6 +1723,11 @@ case 4: if both major & minor tickinterval are same,then only majortickLabel strings are taken into account for drawing the labelItem + case 5: If you want to remove the whole tickLabel then set the empty string as the argument. + + Note:: if the major tickinterval of the slider is very small, the tick labels may overlap, + application needs to take care of this. + \sa majorTickLabels( ) */ void HbSlider::setMajorTickLabels( const QStringList &majorTickLabels ) @@ -1745,7 +1739,6 @@ } else { d->createTickLabels( ); d->updateTickLabels( ); - d->setTickLabelPresentProperty( ); } } @@ -1764,7 +1757,10 @@ /*! @beta Sets the minor ticklabels of the slider. - see setMajorTickLabels for detailed description + see setMajorTickLabels for detailed description. + Note:: if the minor tickinterval of the slider is very small, the tick labels may overlap, + application needs to take care of this. + \sa minorTickLabels( ),setMajorTickLabels( ) */ @@ -1773,7 +1769,6 @@ Q_D( HbSlider ); d->sliderControl->setMinorTickLabels( minorTickLabels ); d->updateTickLabels( ); - d->setTickLabelPresentProperty( ); } @@ -1813,6 +1808,8 @@ break; case HbStyle::P_Slider_groove: return HbSliderControlPrivate::d_ptr( d->sliderControl )->groove; + case HbStyle::P_SliderElement_touchgroove: + return HbSliderControlPrivate::d_ptr( d->sliderControl )->grooveTouchArea; case HbStyle::P_SliderElement_touchhandle: return HbSliderControlPrivate::d_ptr( d->sliderControl )->handle->primitive( @@ -1924,6 +1921,42 @@ } /*! + reimp + +*/ + +void HbSlider::gestureEvent(QGestureEvent *event) +{ + Q_D(HbSlider); + //consume the event if gesture is on increment or decrement,It is being handled in mouse press and mouse release + //If it is on mute/control igonore the gesture as they are handled separately by HbAbstractButton and HbSlidercontrol classes + if (HbTapGesture *tap = qobject_cast(event->gesture(Qt::TapGesture))) { + QPointF pos = event->mapToGraphicsScene(tap->position()); + bool consumeEvent = false; + if ( d->elementItemMap.contains (HbSlider::IncreaseElement ) ) { + if (d->elementItemMap[HbSlider::IncreaseElement].touchItem ) { + if (d->elementItemMap[HbSlider::IncreaseElement].touchItem->sceneBoundingRect().contains(pos)) { + consumeEvent = true; + } + } + } + if ( d->elementItemMap.contains (HbSlider::DecreaseElement ) ) { + if (d->elementItemMap[HbSlider::DecreaseElement].touchItem ) { + if (d->elementItemMap[HbSlider::DecreaseElement].touchItem->sceneBoundingRect().contains(pos)) { + consumeEvent = true; + } + } + } + + if(!consumeEvent) { + event->ignore(); + HbWidget::gestureEvent(event); + } + } + +} + +/*! \reimp This api update the primitive when ever item enable has changed