src/hbwidgets/sliders/hbprogressslider.cpp
changeset 34 ed14f46c0e55
parent 6 c3690ec91ef8
equal deleted inserted replaced
31:7516d6d86cf5 34:ed14f46c0e55
    24 ****************************************************************************/
    24 ****************************************************************************/
    25 
    25 
    26 #include "hbprogressslider_p.h"
    26 #include "hbprogressslider_p.h"
    27 #include <hbprogressslider.h>
    27 #include <hbprogressslider.h>
    28 #include <hbstyleoptionprogressslider_p.h>
    28 #include <hbstyleoptionprogressslider_p.h>
       
    29 #include "hbprogresstrackitem_p.h"
    29 #include <hbtooltip.h>
    30 #include <hbtooltip.h>
    30 #include <hbwidgetfeedback.h>
    31 #include <hbwidgetfeedback.h>
    31 #include "hbglobal_p.h"
    32 #include "hbglobal_p.h"
    32 
    33 #include <hbtoucharea.h>
    33 #include <QGraphicsSceneMouseEvent>
    34 #include <QGraphicsSceneMouseEvent>
    34 #include <QApplication>
    35 #include <QApplication>
    35 
    36 
    36 #ifdef HB_EFFECTS
    37 #ifdef HB_EFFECTS
    37 #include <hbeffect.h>
    38 #include <hbeffect.h>
    38 #include "hbeffectinternal_p.h"
    39 #include "hbeffectinternal_p.h"
    39 #define HB_PRGRESSSLIDER_ITEM_TYPE "HB_PROGRESSSLIDER"
    40 #define HB_PRGRESSSLIDER_ITEM_TYPE "HB_PROGRESSSLIDER"
    40 #endif
    41 #endif
    41 
    42 
       
    43 #ifdef HB_GESTURE_FW
       
    44 #include <hbtapgesture.h>
       
    45 #endif
       
    46 
    42 HbProgressSliderPrivate::HbProgressSliderPrivate()
    47 HbProgressSliderPrivate::HbProgressSliderPrivate()
    43 {
    48 {
    44     mDownState=false;
    49     mDownState=false;
    45     handle = 0;
    50     handle = 0;
    46     mSliderValue = 0;
    51     mSliderValue = 0;
    47     mHandlePath.clear();
    52     mHandlePath.clear();
       
    53     mToolTipTextVisibleUser = false;
    48 }
    54 }
    49 
    55 
    50 HbProgressSliderPrivate::~HbProgressSliderPrivate()
    56 HbProgressSliderPrivate::~HbProgressSliderPrivate()
    51 {
    57 {
    52     if (handle) {
    58     if (handle) {
    53         delete handle;
    59         delete handle;
    54     }
    60     }
    55 }
    61 }
    56 
    62 bool HbProgressSliderPrivate::textVisible() const
       
    63 {
       
    64     return mToolTipTextVisibleUser;
       
    65 }
    57 void HbProgressSliderPrivate::setProgressValue(int value)
    66 void HbProgressSliderPrivate::setProgressValue(int value)
    58 {
    67 {
    59    Q_Q(HbProgressSlider);
    68    Q_Q(HbProgressSlider);
    60    if (mProgressValue == value) {
    69    if (mProgressValue == value) {
    61         return;
    70         return;
    62     }
    71     }
    63     if (value >= mMaximum) {
    72     if (value >= mMaximum) {
    64         value = mMaximum;
    73         value = mMaximum;
    65 #ifdef HB_EFFECTS
    74 #ifdef HB_EFFECTS
    66        // HbEffect::start(mTrack, HB_PRGRESSSLIDER_ITEM_TYPE, "progressbar_progress_complete");
    75         HbEffect::start(mTrack, HB_PRGRESSSLIDER_ITEM_TYPE, "progressbar_progress_complete");
    67 #endif
    76 #endif
    68     }
    77     }
    69     else if (value < mMinimum) {
    78     else if (value < mMinimum) {
    70         value = mMinimum;
    79         value = mMinimum;
    71     }
    80     }
    72     
    81     
    73     mProgressValue=value;
    82     mProgressValue=value;
    74 
    83 
    75     //redraw track
    84     //redraw track
    76     HbStyleOptionProgressSlider sliderOption;
    85    updateProgressTrack();
    77     q->initStyleOption(&sliderOption);
       
    78     if(mTrack) {
       
    79         q->style()->updatePrimitive(mTrack, HbStyle::P_ProgressSlider_track, &sliderOption);
       
    80     }
       
    81 
    86 
    82     emit q->valueChanged(value);
    87     emit q->valueChanged(value);
    83 }
    88 }
    84 
    89 
    85 void HbProgressSliderPrivate::setEnableFlag(bool flag)
    90 void HbProgressSliderPrivate::setEnableFlag(bool flag)
    86 {
    91 {
    87     Q_Q(HbProgressSlider);
    92     Q_Q(HbProgressSlider);
    88 	Q_UNUSED(flag);
    93     Q_UNUSED(flag);
    89     HbStyleOptionProgressSlider option;
       
    90     q->initStyleOption(&option);
       
    91     q->updatePrimitives();
    94     q->updatePrimitives();
       
    95     if(flag) {
       
    96         handle->setHandleNormalState();
       
    97     }
    92 }
    98 }
    93 
    99 
    94 void HbProgressSliderPrivate::init()
   100 void HbProgressSliderPrivate::init()
    95 {
   101 {
    96     Q_Q(HbProgressSlider);
   102     Q_Q(HbProgressSlider);
    97 
   103 
    98     mSliderGraphicItem  = q->style()->createPrimitive(HbStyle::P_ProgressSlider_slidertrack,mFrame);
   104     mSliderGraphicItem = new HbProgressTrackItem(mFrame);
       
   105     HbStyle::setItemName(mSliderGraphicItem, "slider-track");
       
   106     qgraphicsitem_cast<HbProgressTrackItem*>(mSliderGraphicItem)->frameDrawer().setFillWholeRect(true);
       
   107     mSliderGraphicItem->setZValue(-1);
    99     // Show the touch area which is created in ProgressBar//
   108     // Show the touch area which is created in ProgressBar//
   100     mTouchAreaItem = q->style()->createPrimitive(HbStyle::P_ProgressSlider_toucharea,q);
   109 
       
   110     mTouchAreaItem =  q->style()->createPrimitive(HbStyle::PT_TouchArea, "toucharea",q);
       
   111     mTouchAreaItem->setFlag(QGraphicsItem::ItemIsFocusable);
       
   112     mTouchAreaItem->setZValue(TOUCHAREA_ZVALUE);
       
   113 
   101     mFrame->setZValue(mTouchAreaItem->zValue()+1);
   114     mFrame->setZValue(mTouchAreaItem->zValue()+1);
   102 
   115 
   103 #ifdef HB_EFFECTS
   116 #ifdef HB_EFFECTS
   104     HbEffectInternal::add(HB_PRGRESSSLIDER_ITEM_TYPE,"progressslider_trackpress", "progressslider_trackpress");
   117     HbEffectInternal::add(HB_PRGRESSSLIDER_ITEM_TYPE,"progressslider_trackpress", "progressslider_trackpress");
   105     HbEffectInternal::add(HB_PRGRESSSLIDER_ITEM_TYPE,"progressslider_trackrelease", "progressslider_trackrelease");
   118     HbEffectInternal::add(HB_PRGRESSSLIDER_ITEM_TYPE,"progressslider_trackrelease", "progressslider_trackrelease");
   106 #endif
   119 #endif
   107 
   120 
   108     q->grabGesture(Qt::TapGesture);
   121 #ifdef HB_GESTURE_FW
   109 
   122     mTouchAreaItem->grabGesture(Qt::TapGesture);
   110     if(QGraphicsObject *touchArea = mTouchAreaItem->toGraphicsObject()) {
   123 #endif 
   111         touchArea->grabGesture(Qt::TapGesture);
       
   112     }
       
   113 }
   124 }
   114 
   125 
   115 void HbProgressSliderPrivate::emitSliderPressed()
   126 void HbProgressSliderPrivate::emitSliderPressed()
   116 {
   127 {
   117     Q_Q(HbProgressSlider);
   128     Q_Q(HbProgressSlider);
   119 }
   130 }
   120 
   131 
   121 void HbProgressSliderPrivate::emitSliderReleased()
   132 void HbProgressSliderPrivate::emitSliderReleased()
   122 {
   133 {
   123     Q_Q(HbProgressSlider);
   134     Q_Q(HbProgressSlider);
       
   135     if(mDownState){
       
   136         mDownState = false;
       
   137 
       
   138         if (mFrame) {
       
   139             HbStyleFramePrimitiveData data; 
       
   140             q->initPrimitiveData(&data, mFrame); 
       
   141             q->style()->updatePrimitive(mFrame, &data, q);
       
   142         }
       
   143         HbWidgetFeedback::triggered(q, Hb::InstantReleased);
       
   144 
       
   145 #ifdef HB_EFFECTS
       
   146         HbEffect::start(q, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackrelease");
       
   147 #endif
       
   148     }
       
   149 
   124     emit q->sliderReleased();
   150     emit q->sliderReleased();
   125 }
   151 }
   126 
   152 
   127 void HbProgressSliderPrivate::emitSliderMoved(int newValue)
   153 void HbProgressSliderPrivate::emitSliderMoved(int newValue)
   128 {
   154 {
   136 QRectF HbProgressSliderPrivate::boundingRect()const
   162 QRectF HbProgressSliderPrivate::boundingRect()const
   137 {
   163 {
   138     return mFrame->boundingRect();
   164     return mFrame->boundingRect();
   139 }
   165 }
   140 
   166 
   141 HbStyle* HbProgressSliderPrivate::style() const
       
   142 {
       
   143      Q_Q(const HbProgressSlider);
       
   144      return q->style();
       
   145 }
       
   146 
       
   147 QGraphicsItem* HbProgressSliderPrivate::parentGraphicsItem() const
   167 QGraphicsItem* HbProgressSliderPrivate::parentGraphicsItem() const
   148 {
   168 {
   149     return mFrame;
   169     return mFrame;
   150 }
   170 }
   151 
   171 
   193     return mOrientation;
   213     return mOrientation;
   194 }
   214 }
   195 
   215 
   196 void HbProgressSliderPrivate::setRange(int minimum, int maximum)
   216 void HbProgressSliderPrivate::setRange(int minimum, int maximum)
   197 {
   217 {
   198 	Q_Q(HbProgressSlider);
   218     Q_Q(HbProgressSlider);
   199     if( minimum > maximum ){
   219     if( minimum > maximum ){
   200         maximum = minimum ;
   220         maximum = minimum ;
   201     }
   221     }
   202     mMinimum = minimum;
   222     mMinimum = minimum;
   203     mMaximum = maximum;
   223     mMaximum = maximum;
   208 
   228 
   209     if(mProgressValue > mMaximum){
   229     if(mProgressValue > mMaximum){
   210         mProgressValue = mMaximum;
   230         mProgressValue = mMaximum;
   211     }
   231     }
   212 
   232 
   213     HbStyleOptionProgressSlider progressSliderOption;
   233     updateSliderTrack();
   214     q->initStyleOption(&progressSliderOption);
   234 
       
   235     updateProgressTrack();
       
   236     
       
   237     q->setSliderValue(mSliderValue);
       
   238 }
       
   239 
       
   240 /*
       
   241     \internal
       
   242     Update progress track primitive
       
   243 */
       
   244 void HbProgressSliderPrivate::updateProgressTrack()
       
   245 {
       
   246     Q_Q(HbProgressSlider);
       
   247 
       
   248     if (mTrack) {
       
   249             HbProgressTrackItem* frameItem = qgraphicsitem_cast<HbProgressTrackItem*>(mTrack);
       
   250             if(!frameItem->isVisible()) {
       
   251                 return;
       
   252             }
       
   253 
       
   254             frameItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal);
       
   255             if(!q->isEnabled()){
       
   256                 frameItem->frameDrawer().setFrameGraphicsName(QLatin1String("qtg_fr_progslider_loaded_disabled"));
       
   257             }
       
   258             else
       
   259                 frameItem->frameDrawer().setFrameGraphicsName(QLatin1String("qtg_fr_progslider_loaded"));
       
   260 
       
   261             frameItem->setMaximum(mMaximum);
       
   262             frameItem->setMinimum(mMinimum);
       
   263             frameItem->setValue(mProgressValue);
       
   264             frameItem->setInverted(mInvertedAppearance);
       
   265             frameItem->setOrientation(mOrientation);
       
   266             frameItem->update();
       
   267         }
       
   268 }
       
   269 
       
   270 /*
       
   271     \internal
       
   272     Update slider track primitive
       
   273 */
       
   274 void HbProgressSliderPrivate::updateSliderTrack()
       
   275 {
       
   276     Q_Q(HbProgressSlider);
   215 
   277 
   216     if (mSliderGraphicItem) {
   278     if (mSliderGraphicItem) {
   217             q->style()->updatePrimitive(mSliderGraphicItem, HbStyle::P_ProgressSlider_slidertrack, &progressSliderOption);
   279             HbProgressTrackItem* frameItem = qgraphicsitem_cast<HbProgressTrackItem*>(mSliderGraphicItem);
   218     }
   280             if(!frameItem->isVisible()) {
   219 
   281                 return;
   220     if (mTrack) {
   282             }
   221             q->style()->updatePrimitive(mTrack, HbStyle::P_ProgressSlider_track, &progressSliderOption);
   283 
   222      }
   284             frameItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal);
   223     
   285             if(!q->isEnabled()){
   224 	q->setSliderValue(mSliderValue);
   286                 frameItem->frameDrawer().setFrameGraphicsName(QLatin1String("qtg_fr_progslider_played_disabled"));
   225 }
   287             }
       
   288             else
       
   289                 frameItem->frameDrawer().setFrameGraphicsName(QLatin1String("qtg_fr_progslider_played"));
       
   290 
       
   291             frameItem->setMaximum(mMaximum);
       
   292             frameItem->setMinimum(mMinimum);
       
   293             frameItem->setValue(mSliderValue);
       
   294             frameItem->setInverted(mInvertedAppearance);
       
   295             frameItem->setOrientation(mOrientation);
       
   296             frameItem->update();
       
   297         }
       
   298 }
       
   299 
   226 
   300 
   227 /*!
   301 /*!
   228     @beta
   302     @beta
   229     @hbwidgets
   303     @hbwidgets
   230     \class HbProgressSlider
   304     \class HbProgressSlider
   247     HbProgressSlider emits below signals 
   321     HbProgressSlider emits below signals 
   248 
   322 
   249     void sliderPressed();
   323     void sliderPressed();
   250     void sliderReleased();
   324     void sliderReleased();
   251     void sliderMoved(int value);
   325     void sliderMoved(int value);
   252 
   326     void trackPressed();
   253     sliderPressed is emitted when the track is pressed. 
   327     void trackReleased();
   254     sliderReleased is emitted when the track is released.
   328 
       
   329     sliderPressed is emitted when the handle is pressed. 
       
   330     sliderReleased is emitted when the handle is released.
   255     sliderMoved is emitted when the handle is moved in any direction.
   331     sliderMoved is emitted when the handle is moved in any direction.
       
   332     trackPressed is emitted when the track is pressed. 
       
   333     trackReleased is emitted when the track is released.
   256 
   334 
   257     The Application can customize the Slider behaviour by listening to the signals sliderPressed and sliderReleased.By default there 
   335     The Application can customize the Slider behaviour by listening to the signals sliderPressed and sliderReleased.By default there 
   258     is no behaviour defined by HbProgressSlider for these actions.
   336     is no behaviour defined by HbProgressSlider for these actions.
   259 
   337 
   260     By default the min value is 0 and max value is 100. The application can set the progressValue (buffer data) and 
   338     By default the min value is 0 and max value is 100. The application can set the progressValue (buffer data) and 
   296     d->init();
   374     d->init();
   297     setMinMaxTextVisible(true);
   375     setMinMaxTextVisible(true);
   298 
   376 
   299     setFocusPolicy(Qt::FocusPolicy(qApp->style()->styleHint(QStyle::SH_Button_FocusPolicy)));
   377     setFocusPolicy(Qt::FocusPolicy(qApp->style()->styleHint(QStyle::SH_Button_FocusPolicy)));
   300     d->handle =new HbProgressSliderHandle(d);
   378     d->handle =new HbProgressSliderHandle(d);
       
   379     d->handle->setZValue(1010);
   301     if(!flags().testFlag(ItemIsFocusable)) {
   380     if(!flags().testFlag(ItemIsFocusable)) {
   302         d->handle->setVisible(false);
   381         d->handle->setVisible(false);
   303     }
   382     }
   304     if(d->mOrientation == Qt::Horizontal){
   383     if(d->mOrientation == Qt::Horizontal){
   305         qreal x = boundingRect().height();
   384         qreal x = boundingRect().height();
   320     \param parent The parent of ProgressBar
   399     \param parent The parent of ProgressBar
   321 */
   400 */
   322 HbProgressSlider::HbProgressSlider(HbProgressSliderPrivate &dd,QGraphicsItem *parent) : 
   401 HbProgressSlider::HbProgressSlider(HbProgressSliderPrivate &dd,QGraphicsItem *parent) : 
   323     HbProgressBar( dd,parent)
   402     HbProgressBar( dd,parent)
   324 {
   403 {
       
   404 
   325     Q_D( HbProgressSlider );
   405     Q_D( HbProgressSlider );
   326     d->init();
   406     d->init();
   327 
   407 
   328     setFocusPolicy(Qt::FocusPolicy(qApp->style()->styleHint(QStyle::SH_Button_FocusPolicy)));
   408     setFocusPolicy(Qt::FocusPolicy(qApp->style()->styleHint(QStyle::SH_Button_FocusPolicy)));
   329     d->handle =new HbProgressSliderHandle(d);
   409     d->handle =new HbProgressSliderHandle(d);
   371     if (value<minimum()) {
   451     if (value<minimum()) {
   372         value = minimum();
   452         value = minimum();
   373     }
   453     }
   374     d->mSliderValue = value;
   454     d->mSliderValue = value;
   375 
   455 
   376     HbStyleOptionProgressSlider option;
   456     d->updateSliderTrack();
   377     initStyleOption(&option);
       
   378 
       
   379     if (d->mSliderGraphicItem) {
       
   380         style()->updatePrimitive(d->mSliderGraphicItem, HbStyle::P_ProgressSlider_slidertrack, &option);
       
   381     }
       
   382     d->handle->setHandlePosForValue(sliderValue());
   457     d->handle->setHandlePosForValue(sliderValue());
   383 }
   458 }
   384 
   459 
   385 /*!
   460 /*!
   386     @beta
   461     @beta
   431 /*!
   506 /*!
   432     \reimp
   507     \reimp
   433  */
   508  */
   434 void HbProgressSlider::mousePressEvent(QGraphicsSceneMouseEvent *event) 
   509 void HbProgressSlider::mousePressEvent(QGraphicsSceneMouseEvent *event) 
   435 {
   510 {
       
   511 #ifndef HB_GESTURE_FW
   436     Q_D(HbProgressSlider);
   512     Q_D(HbProgressSlider);
   437  
   513  
   438     QRectF rect = d->mTouchAreaItem->sceneBoundingRect( );
   514     QRectF rect = d->mTouchAreaItem->sceneBoundingRect( );
   439     // return if point is outside track touch area
   515     // return if point is outside track touch area
   440     if ( !rect.contains( event->scenePos( ) ) ) {
   516     if ( !rect.contains( event->scenePos( ) ) ) {
   442         return;
   518         return;
   443     }
   519     }
   444 
   520 
   445     if(flags().testFlag(ItemIsFocusable)) {
   521     if(flags().testFlag(ItemIsFocusable)) {
   446         d->mDownState = true;
   522         d->mDownState = true;
   447         HbStyleOptionProgressSlider option;
       
   448         initStyleOption(&option);
       
   449         if (d->mFrame) {
   523         if (d->mFrame) {
   450             style()->updatePrimitive(d->mFrame, HbStyle::P_ProgressSlider_frame, &option);          
   524             HbStyleFramePrimitiveData data; 
       
   525             initPrimitiveData(&data, d->mFrame); 
       
   526 
       
   527             style()->updatePrimitive(d->mFrame, &data, this);
   451         }
   528         }
   452         
   529         
   453         HbWidgetFeedback::triggered(this, Hb::InstantPressed);
   530         HbWidgetFeedback::triggered(this, Hb::InstantPressed);
       
   531         emit trackPressed();
   454         d->handle->handleTrackPress(event);
   532         d->handle->handleTrackPress(event);
   455         event->accept();
   533         event->accept();
   456         #ifdef HB_EFFECTS
   534         #ifdef HB_EFFECTS
   457             HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackpress");
   535             HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackpress");
   458         #endif
   536         #endif
   459     } else {
   537     } else {
   460         event->ignore();
   538         event->ignore();
   461     }
   539     }
       
   540 #else
       
   541     Q_UNUSED(event)
       
   542 #endif 
   462 }
   543 }
   463 
   544 
   464 /*!
   545 /*!
   465     \reimp
   546     \reimp
   466  */
   547  */
   467 void HbProgressSlider::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) 
   548 void HbProgressSlider::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) 
   468 {
   549 {
       
   550 #ifndef HB_GESTURE_FW
   469     Q_D(HbProgressSlider);
   551     Q_D(HbProgressSlider);
   470 
   552 
   471     if(flags().testFlag(ItemIsFocusable)) {
   553     if(flags().testFlag(ItemIsFocusable)) {
   472         d->mDownState = false;
   554         d->mDownState = false;
   473 
   555 
   474         HbStyleOptionProgressSlider option;
       
   475         initStyleOption(&option);
       
   476         if (d->mFrame) {
   556         if (d->mFrame) {
   477             style()->updatePrimitive(d->mFrame, HbStyle::P_ProgressSlider_frame, &option);          
   557             HbStyleFramePrimitiveData data; 
       
   558             initPrimitiveData(&data, d->mFrame); 
       
   559 
       
   560             style()->updatePrimitive(d->mFrame, &data, this);
   478         }
   561         }
   479 
   562 
   480         HbWidgetFeedback::triggered(this, Hb::InstantReleased);
   563         HbWidgetFeedback::triggered(this, Hb::InstantReleased);
   481         d->handle->handleTrackRelease(event);
   564         d->handle->handleTrackRelease(event);
       
   565         emit trackReleased();
   482         event->accept();
   566         event->accept();
   483 #ifdef HB_EFFECTS
   567 #ifdef HB_EFFECTS
   484         HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackrelease");
   568         HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackrelease");
   485 #endif
   569 #endif
   486     } else {
   570     } else {
   487         event->ignore();
   571         event->ignore();
   488     }
   572     }
   489 }
   573 #else
       
   574     Q_UNUSED(event)
       
   575 #endif 
       
   576 }
       
   577 
       
   578 #ifdef HB_GESTURE_FW
       
   579 void HbProgressSlider::gestureEvent(QGestureEvent *event)
       
   580 {
       
   581     Q_D (HbProgressSlider);
       
   582 
       
   583     if(event->gesture(Qt::TapGesture)) {
       
   584 
       
   585         HbTapGesture *tapGesture = static_cast<HbTapGesture *>(event->gesture(Qt::TapGesture));
       
   586         switch(tapGesture->state()) {
       
   587             case Qt::GestureStarted :{           
       
   588                     QRectF rect = d->mTouchAreaItem->sceneBoundingRect( );
       
   589                     // return if point is outside track touch area
       
   590                     if ( !rect.contains( event->mapToGraphicsScene(tapGesture->position( ) ) ) ) {
       
   591                         event->ignore( );
       
   592                         return;
       
   593                     }
       
   594                     if(flags().testFlag(ItemIsFocusable)) {
       
   595                         #ifdef HB_EFFECTS
       
   596                             HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackpress");
       
   597                         #endif
       
   598                         d->mDownState = true;
       
   599                          if (d->mFrame) {
       
   600                             HbStyleFramePrimitiveData data; 
       
   601                             initPrimitiveData(&data, d->mFrame); 
       
   602 
       
   603                             style()->updatePrimitive(d->mFrame, &data, this);
       
   604                         }
       
   605                         
       
   606                         HbWidgetFeedback::triggered(this, Hb::InstantPressed);
       
   607                         emit trackPressed();
       
   608                         d->handle->handleTrackPress(event);
       
   609                         event->accept();
       
   610 
       
   611                     } 
       
   612                     else {                    
       
   613                         event->ignore();
       
   614                     }
       
   615             }
       
   616             break;
       
   617             case Qt::GestureCanceled:
       
   618             case Qt::GestureFinished:{       
       
   619                 if(d->mDownState) {
       
   620                     if(flags().testFlag(ItemIsFocusable)) {                    
       
   621                             #ifdef HB_EFFECTS
       
   622                                 HbEffect::start(this, HB_PRGRESSSLIDER_ITEM_TYPE, "progressslider_trackrelease");
       
   623                             #endif
       
   624 
       
   625                             d->mDownState = false;
       
   626                             if (d->mFrame) {
       
   627                                 HbStyleFramePrimitiveData data; 
       
   628                                 initPrimitiveData(&data, d->mFrame); 
       
   629 
       
   630                                 style()->updatePrimitive(d->mFrame, &data, this);
       
   631                             }
       
   632                             HbWidgetFeedback::triggered(this, Hb::InstantReleased);
       
   633                            
       
   634                             d->handle->handleTrackRelease(event);
       
   635                             emit trackReleased();
       
   636                             event->accept();
       
   637                             } else {
       
   638                             event->ignore();
       
   639                       }
       
   640                 }
       
   641 
       
   642             }
       
   643             break;
       
   644             default:break;
       
   645         }
       
   646     }
       
   647 
       
   648 }
       
   649 #endif 
       
   650 
       
   651 
   490 /*!
   652 /*!
   491     \reimp
   653     \reimp
   492  */
   654  */
   493 void HbProgressSlider::setGeometry(const QRectF & rect)
   655 void HbProgressSlider::setGeometry(const QRectF & rect)
   494 {
   656 {
   514     }
   676     }
   515     else {
   677     else {
   516         option->disableState = true;
   678         option->disableState = true;
   517     }
   679     }
   518 }
   680 }
       
   681 
       
   682 /*!
       
   683     \reimp
       
   684 */
       
   685 void HbProgressSlider::initPrimitiveData(HbStylePrimitiveData *primitiveData, const QGraphicsObject *primitive)
       
   686 {
       
   687     Q_D(HbProgressSlider);
       
   688 
       
   689     QString itemName = HbStyle::itemName(primitive);
       
   690     if (itemName == QLatin1String("frame")) {
       
   691         HbStyleFramePrimitiveData *data = hbstyleprimitivedata_cast<HbStyleFramePrimitiveData*>(primitiveData);
       
   692 
       
   693         data->frameType = HbFrameDrawer::ThreePiecesHorizontal;
       
   694 
       
   695         if (!isEnabled() ) {
       
   696             data->frameGraphicsName = QLatin1String("qtg_fr_progslider_frame_disabled");
       
   697             }
       
   698             else {
       
   699                 if(d->mDownState) {
       
   700                     data->frameGraphicsName = QLatin1String("qtg_fr_progslider_frame_pressed");
       
   701                 }
       
   702                 else {
       
   703                     data->frameGraphicsName = QLatin1String("qtg_fr_progslider_frame_normal");
       
   704                 }
       
   705             }
       
   706     }
       
   707 
       
   708 }
       
   709 
   519 /*!
   710 /*!
   520     \reimp
   711     \reimp
   521  */
   712  */
   522 void HbProgressSlider::updatePrimitives()
   713 void HbProgressSlider::updatePrimitives()
   523 {
   714 {
   524     Q_D(HbProgressSlider);
   715     Q_D(HbProgressSlider);
   525     if(isVisible()){
   716     if(isVisible()){
   526         d->mWaitTrack->setVisible(false);
   717         d->mWaitTrack->setVisible(false);
   527         d->mTrack->setVisible(true);
   718         d->mTrack->setVisible(true);
   528 
   719 
   529         HbStyleOptionProgressSlider option;
       
   530         initStyleOption(&option);
       
   531 
       
   532         if (d->mSliderGraphicItem) {
       
   533             style()->updatePrimitive(d->mSliderGraphicItem, HbStyle::P_ProgressSlider_slidertrack, &option);
       
   534         }
       
   535 
       
   536         if(d->handle)
       
   537               d->handle->setHandlePosForValue(sliderValue());
       
   538     
       
   539         if (d->mFrame) {
   720         if (d->mFrame) {
   540             style()->updatePrimitive(d->mFrame, HbStyle::P_ProgressSlider_frame, &option);          
   721             HbStyleFramePrimitiveData data; 
   541         }
   722             initPrimitiveData(&data, d->mFrame); 
       
   723 
       
   724             style()->updatePrimitive(d->mFrame, &data, this);
       
   725         }
       
   726 
       
   727          // update progress value mask
       
   728         d->updateProgressTrack();
   542      
   729      
   543         if (d->mTrack) {
   730         // update slider value mask
   544                 style()->updatePrimitive(d->mTrack, HbStyle::P_ProgressSlider_track, &option);
   731         d->updateSliderTrack();
   545         }
       
   546                 
   732                 
   547         if(d->mMinTextItem && d->mMinMaxTextVisible) {
   733         if(d->mMinTextItem && d->mMinMaxTextVisible) {
   548             style()->updatePrimitive(d->mMinTextItem,HbStyle::P_ProgressBar_mintext,&option);    
   734             HbStyleTextPrimitiveData data; 
       
   735             HbProgressBar::initPrimitiveData(&data, d->mMinTextItem); 
       
   736 
       
   737             style()->updatePrimitive(d->mMinTextItem, &data, this);
   549         }
   738         }
   550 
   739 
   551         if(d->mMaxTextItem && d->mMinMaxTextVisible) {
   740         if(d->mMaxTextItem && d->mMinMaxTextVisible) {
   552             style()->updatePrimitive(d->mMaxTextItem,HbStyle::P_ProgressBar_maxtext,&option);    
   741             HbStyleTextPrimitiveData data; 
   553         }
   742             HbProgressBar::initPrimitiveData(&data, d->mMaxTextItem); 
       
   743 
       
   744             style()->updatePrimitive(d->mMaxTextItem, &data, this);
       
   745         }
       
   746 
       
   747         if(d->handle)
       
   748             d->handle->setHandlePosForValue(sliderValue());
   554     }
   749     }
   555 }
   750 }
   556 /*!
   751 /*!
   557     \reimp
   752     \reimp
   558  */
   753  */
   587     return HbProgressBar::itemChange(change, value);
   782     return HbProgressBar::itemChange(change, value);
   588 }
   783 }
   589 /*!
   784 /*!
   590     \reimp
   785     \reimp
   591  */
   786  */
   592 bool HbProgressSlider::sceneEventFilter(QGraphicsItem *obj,QEvent *event)
   787 void HbProgressSlider::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
   593 {
   788 {
   594     Q_D(HbProgressSlider);
   789 #ifndef HB_GESTURE_FW
   595     if( obj == d->mTouchAreaItem) {
   790     Q_D(HbProgressSlider); 
   596        if (!isEnabled() ) {
   791     QRectF rect = d->mTouchAreaItem->sceneBoundingRect( );
   597             return false;
   792     // return if point is outside track touch area
   598         }
   793     if ( !rect.contains( event->scenePos( ) ) ) {
   599         if (event->type() == QEvent::GraphicsSceneMousePress){
   794         event->ignore( );
   600             mousePressEvent((QGraphicsSceneMouseEvent *) event);
   795         return;
   601              return true;
   796     }
   602         }
   797 
   603         else if (event->type() == QEvent::GraphicsSceneMouseRelease){
   798     if(flags().testFlag(ItemIsFocusable)) {
   604             mouseReleaseEvent((QGraphicsSceneMouseEvent *) event);
   799         d->handle->handleTrackPress(event);
   605             return true;
   800         event->accept();
   606         }
   801     } else {
   607     } 
   802         event->ignore();
   608     return false;
   803     }
   609 }
   804 #else
   610 
   805     Q_UNUSED(event)
       
   806 #endif 
       
   807 }
   611 
   808 
   612 /*!
   809 /*!
   613     @beta
   810     @beta
   614     Sets the tooltip for the Slider handle. By default it shows the slider value.
   811     Sets the tooltip for the Slider handle. By default it shows the slider value.
   615     The application can customize the tooltip text using this API.
   812     The application can customize the tooltip text using this API. setting NULL string
       
   813     will disable the tooltip.
   616 
   814 
   617     \param text tooltip text
   815     \param text tooltip text
   618 
   816 
   619     \sa sliderToolTip()
   817     \sa sliderToolTip()
   620 */
   818 */
   621 void HbProgressSlider::setSliderToolTip(const QString &text)
   819 void HbProgressSlider::setSliderToolTip(const QString &text)
   622 {
   820 {
   623     Q_D(HbProgressSlider);
   821     Q_D(HbProgressSlider);
   624     d->mTooltipText = text;
   822     d->mTooltipText = text;
       
   823     d->mToolTipTextVisibleUser = true;
   625 }
   824 }
   626 
   825 
   627 
   826 
   628 /*!
   827 /*!
   629     @beta
   828     @beta
   669 {
   868 {
   670     Q_D(const HbProgressSlider);
   869     Q_D(const HbProgressSlider);
   671     return d->mHandlePath;
   870     return d->mHandlePath;
   672 }
   871 }
   673 
   872 
   674 /*!
   873 bool HbProgressSlider::sceneEventFilter(QGraphicsItem *obj,QEvent *event)
   675 
   874 {
   676     \deprecated HbProgressSlider::primitive(HbStyle::Primitive)
   875     Q_D(HbProgressSlider);
   677         is deprecated.
   876     bool accepted = false;
   678 
   877 
   679     Returns the pointer for \a primitive passed.
   878     if( obj == d->mTouchAreaItem) 
   680     Will return NULL if \a primitive passed is invalid
   879         if (!isEnabled() ) {
   681 */
   880             return false;
   682 QGraphicsItem* HbProgressSlider::primitive(HbStyle::Primitive primitive) const
   881         }
       
   882         
       
   883     if(obj == static_cast<HbTouchArea*>(d->mTouchAreaItem)) {
       
   884         if(event->type() == QEvent::Gesture ) {
       
   885              gestureEvent(static_cast<QGestureEvent *>( event ));
       
   886         }
       
   887     }
       
   888     return accepted;
       
   889 }
       
   890 
       
   891 QGraphicsItem *HbProgressSlider::primitive(const QString &itemName) const
   683 {
   892 {
   684     Q_D(const HbProgressSlider);
   893     Q_D(const HbProgressSlider);
   685 
   894 
   686     switch (primitive) {
   895     if(!itemName.compare(QString("slider-track"))){
   687         case HbStyle::P_ProgressSlider_frame:
   896         return d->mSliderGraphicItem;
   688             return d->mFrame;
   897     }
   689         case HbStyle::P_ProgressSlider_track:
   898     if(!itemName.compare(QString("toucharea"))){
   690             return d->mTrack;
   899         return d->mTouchAreaItem;
   691         case HbStyle::P_ProgressSlider_slidertrack:
   900     }
   692             return d->mSliderGraphicItem;
   901     if(!itemName.compare(QString("handle-icon")) ||
   693         case HbStyle::P_ProgressSlider_toucharea:
   902         !itemName.compare(QString("handle-toucharea"))){
   694             return d->mTouchAreaItem; 
   903             return d->handle->primitive(itemName);
   695         case HbStyle::P_ProgressSliderHandle_icon:
   904     }
   696         case HbStyle::P_ProgressSliderHandle_toucharea:
   905 
   697             return d->handle->primitive(primitive);
   906     return HbProgressBar::primitive(itemName);
   698         default:
   907 }
   699             return 0;
       
   700     }
       
   701 }
       
   702