src/hbwidgets/sliders/hbslidertickmarks.cpp
branchGCC_SURGE
changeset 15 f378acbc9cfb
parent 6 c3690ec91ef8
child 21 4633027730f5
child 34 ed14f46c0e55
--- a/src/hbwidgets/sliders/hbslidertickmarks.cpp	Thu Jul 15 14:03:49 2010 +0100
+++ b/src/hbwidgets/sliders/hbslidertickmarks.cpp	Thu Jul 22 16:36:53 2010 +0100
@@ -25,14 +25,24 @@
 
 #include "hbslidertickmarks_p.h"
 #include "hbwidget_p.h"
-#include "hbslidercontrol_p.h"
 #include "hbsliderhandle_p.h"
+#include "hbslider_p.h"
 #include <hbstyle.h>
 #include <hbstyleoptionslider_p.h>
-#include <hbstyle.h>
 #include <hbapplication.h>
 #include <hbiconitem.h>
+#include <hbslider.h>
 #include <QList>
+#include <QGraphicsItem>
+#include <QGraphicsSceneEvent>
+#include <QGraphicsScene>
+
+
+#ifdef HB_EFFECTS
+#include "hbeffect.h"
+#include "hbeffectinternal_p.h"
+#define HB_SLIDER_TYPE "HB_SLIDER"
+#endif
 
 
 
@@ -45,55 +55,49 @@
 
 public:
     HbSliderTickmarksPrivate();
-    void createTicks( );
-    void updateTickSize( );
     HbStyleOptionSlider sliderOption;
     QList<QGraphicsWidget *> tickmarkmajorIcons;
     QList<QGraphicsWidget *> tickmarkminorIcons;
-    HbSliderControl *sliderControl;
+    HbSlider *slider;
     Hb::SliderTickPositions tickPosition;
-    bool createIcons;
-    int majorTickWidth;
-    int minorTickWidth;
-    int majorTickHeight;
-    int minorTickHeight;
+    qreal majorTickWidth;
+    qreal minorTickWidth;
+    qreal majorTickHeight;
+    qreal minorTickHeight;
+    Qt::Orientation sliderOrientation;
 };
 
 
  HbSliderTickmarksPrivate::HbSliderTickmarksPrivate() :HbWidgetPrivate(){
     tickmarkmajorIcons.clear();
     tickmarkminorIcons.clear();
-    sliderControl = 0;
+    slider = 0;
     tickPosition = Hb::NoSliderTicks;
-    createIcons = true;
     majorTickWidth = 0;
     minorTickWidth = 0;
     majorTickHeight = 0;
     minorTickHeight = 0;
+    sliderOrientation = Qt::Vertical;
 }
 
-
-void  HbSliderTickmarksPrivate::createTicks(  )
+void  HbSliderTickmarks::createTicks(  )
 {
-    Q_Q ( HbSliderTickmarks );
-    if(!createIcons){
-        return;
-    }
-    int minimum = sliderControl->minimum();
-    int maximum = sliderControl->maximum();
-    int majorTickInterval = sliderControl->majorTickInterval ( );
-    int minorTickInterval = sliderControl->minorTickInterval ( );
+    Q_D ( HbSliderTickmarks );
+    int minimum = d->slider->minimum();
+    int maximum =d->slider->maximum();
+    int majorTickInterval = d->slider->majorTickInterval ( );
+    int minorTickInterval =d-> slider->minorTickInterval ( );
     if (majorTickInterval) {
         int totalMajorTicks = ((maximum-minimum)/majorTickInterval)+1;
-        int majorIconListLength =  tickmarkmajorIcons.length();
+        int majorIconListLength =  d->tickmarkmajorIcons.length();
         for (int i=majorIconListLength;i<totalMajorTicks;i++) {
-            QGraphicsItem *iconItem = q->style()->createPrimitive(HbStyle::P_SliderTickMark_majoricon, q);
+            QGraphicsItem *iconItem =style()->createPrimitive(HbStyle::P_SliderTickMark_majoricon, this);
             Q_ASSERT(iconItem->isWidget());
-            tickmarkmajorIcons.append(static_cast<QGraphicsWidget *>(iconItem));//add newly defind primitive
+            d->tickmarkmajorIcons.append(static_cast<QGraphicsWidget *>(iconItem));//add newly defind primitive
         }
-        while ( totalMajorTicks < tickmarkmajorIcons.length() ) {
-            QGraphicsWidget *iconItem = tickmarkmajorIcons.at(totalMajorTicks);
-            tickmarkmajorIcons.removeAll(iconItem);
+        while ( totalMajorTicks < d->tickmarkmajorIcons.length() ) {
+            QGraphicsWidget *iconItem = d->tickmarkmajorIcons.at(totalMajorTicks);
+            d->tickmarkmajorIcons.removeAll(iconItem);
             delete iconItem;
         }
     }
@@ -107,40 +111,27 @@
                 }
             }
         }
-        int minorIconListLength =  tickmarkminorIcons.length();
+        int minorIconListLength =  d->tickmarkminorIcons.length();
         for (int i=minorIconListLength;i<totalMinorTicks;i++) {
-            QGraphicsItem *iconItem =  q->style()->createPrimitive(HbStyle::P_SliderTickMark_minoricon, q);
+            QGraphicsItem *iconItem = style()->createPrimitive(HbStyle::P_SliderTickMark_minoricon, this);
             Q_ASSERT(iconItem->isWidget());
-            tickmarkminorIcons.append(static_cast<QGraphicsWidget *>(iconItem));//add newly defind primitive
+            d->tickmarkminorIcons.append(static_cast<QGraphicsWidget *>(iconItem));//add newly defind primitive
         }
-        while (totalMinorTicks < tickmarkminorIcons.length() ){
-            QGraphicsWidget *iconItem = tickmarkminorIcons.at(totalMinorTicks);
-            tickmarkminorIcons.removeAll(iconItem);
+        while (totalMinorTicks < d->tickmarkminorIcons.length() ){
+            QGraphicsWidget *iconItem = d->tickmarkminorIcons.at(totalMinorTicks);
+            d->tickmarkminorIcons.removeAll(iconItem);
             delete iconItem;
         }
     } else {
-        while (tickmarkminorIcons.length() > 0 ){
-            QGraphicsWidget *iconItem = tickmarkminorIcons.at(0);
-            tickmarkminorIcons.removeAll(iconItem);
+        while (d->tickmarkminorIcons.length() > 0 ){
+            QGraphicsWidget *iconItem = d->tickmarkminorIcons.at(0);
+            d->tickmarkminorIcons.removeAll(iconItem);
             delete iconItem;
         }
     }
-    q->setProperty("state", "normal"); 
+    setProperty("state", "normal"); 
 }
 
-void HbSliderTickmarksPrivate::updateTickSize()
-{
-    for(int i=0;i<tickmarkmajorIcons.length();i++) {
-        tickmarkmajorIcons.at(i)->setMinimumSize(majorTickWidth,majorTickHeight);
-        tickmarkmajorIcons.at(i)->setMaximumSize(majorTickWidth,majorTickHeight);
-    }
-    for(int i=0;i<tickmarkminorIcons.length();i++) {
-        tickmarkminorIcons.at(i)->setMinimumSize(minorTickWidth,minorTickHeight);
-        tickmarkminorIcons.at(i)->setMaximumSize(minorTickWidth,minorTickHeight);
-    }
-
-
-}
 
 void HbSliderTickmarks::resizeEvent(QGraphicsSceneResizeEvent *event)
 {
@@ -163,8 +154,9 @@
 {
     Q_D( HbSliderTickmarks );
     d->q_ptr = this;
-    d->sliderControl=dynamic_cast<HbSliderControl*>( parentItem() );
-    d->createTicks();
+    d->slider=dynamic_cast<HbSlider*>( parentItem() );
+    createTicks();
+    d->sliderOrientation = d->slider->orientation( );
 }
 
 /*!
@@ -174,26 +166,7 @@
 {
 }
 
-void HbSliderTickmarks::createIcons( bool create ) 
-{
 
-    Q_D(HbSliderTickmarks);
-    d->createIcons = create;
-    if (!create) {
-        while ( d->tickmarkmajorIcons.length() > 0) {
-            QGraphicsWidget *iconItem = d->tickmarkmajorIcons.at(0);
-            d->tickmarkmajorIcons.removeAll(iconItem);
-            delete iconItem;
-        }
-        while ( d->tickmarkminorIcons.length() > 0) {
-            QGraphicsWidget *iconItem = d->tickmarkminorIcons.at(0);
-            d->tickmarkminorIcons.removeAll(iconItem);
-            delete iconItem;
-        }
-    } else {
-        d->createTicks();
-    }
- }
 /*!
     updates the ticks whenever there is change in position or number of ticks
 */
@@ -201,26 +174,27 @@
 void HbSliderTickmarks::updateTicks( )
 {
     Q_D ( HbSliderTickmarks );
-    if(!d->createIcons) {
+    int minimum = d->slider->minimum();
+    int maximum = d->slider->maximum();
+    int majorTickInterval = d->slider->majorTickInterval ( );
+    int minorTickInterval = d->slider->minorTickInterval ( );
+    qreal span = 0;
+    bool rtlLayout = (((d->slider->orientation()!=Qt::Vertical)&&
+        (HbApplication::layoutDirection() == Qt::LeftToRight))?false:true);
+    HbSliderPrivate *sliderPrivate = dynamic_cast<HbSliderPrivate*>(HbSliderPrivate::d_ptr(d->slider));
+    QSizeF handleSize(0.0,0.0);
+    if( sliderPrivate) {
+        handleSize = sliderPrivate->getHandleSize( );
+    } else {
         return;
     }
-    d->createTicks();
-    d->updateTickSize();
-    int minimum = d->sliderControl->minimum();
-    int maximum = d->sliderControl->maximum();
-    int majorTickInterval = d->sliderControl->majorTickInterval ( );
-    int minorTickInterval = d->sliderControl->minorTickInterval ( );
-    qreal span = 0;
-    bool rtlLayout = (((d->sliderControl->orientation()!=Qt::Vertical)&&
-        (HbApplication::layoutDirection() == Qt::LeftToRight))?false:true);
-    HbSliderHandle *handle = dynamic_cast <HbSliderHandle *> (d->sliderControl->primitive (HbStyle::P_Slider_thumb));
-    if ( d->sliderControl->orientation() == Qt::Horizontal) {
-        span = d->sliderControl->size().width();
-        span-=handle->size().width();
+    if ( d->slider->orientation() == Qt::Horizontal) {
+        span = boundingRect().width();
+        span-=handleSize.width();
     }
-    if ( d->sliderControl->orientation() == Qt::Vertical) {
-        span = d->sliderControl->size().height();
-        span-=handle->size().height();
+    if ( d->slider->orientation() == Qt::Vertical) {
+        span = boundingRect().height();
+        span-=handleSize.height();
     }
     if (majorTickInterval) {
         int totalMajorTicks = ((maximum-minimum)/majorTickInterval)+1;
@@ -228,22 +202,20 @@
              QGraphicsWidget *iconItem = d->tickmarkmajorIcons.at ( i);
              HbStyleOptionSlider opt;
              initStyleOption(&opt);
-             opt.orientation = d->sliderControl->orientation();
+             opt.orientation = d->slider->orientation();
              style()->updatePrimitive(iconItem,HbStyle::P_SliderTickMark_majoricon,&opt);
             int pos = QStyle::sliderPositionFromValue( minimum, maximum,
                 minimum+majorTickInterval*i,static_cast<int>( span ), rtlLayout );
 
-            if ( d->sliderControl->orientation() == Qt::Horizontal) {
-                qreal correctedPosX = handle->size().width()/2+pos; 
-                qreal correctedPosY = 0;
-                iconItem->setPos ( correctedPosX,correctedPosY );
-                iconItem->update();
+            qreal correctedPosX = 0;
+            qreal correctedPosY = 0;
+            if ( d->slider->orientation() == Qt::Horizontal) {
+                correctedPosX = handleSize.width()/2+pos; 
             } else {
-                qreal correctedPosY = handle->size().height()/2+pos;
-                qreal correctedPosX =0;
-                iconItem->setPos ( correctedPosX,correctedPosY );
-                iconItem->update();
+                correctedPosY = handleSize.height()/2+pos;
             }
+            iconItem->setGeometry (QRectF( correctedPosX,correctedPosY ,d->majorTickWidth,d->majorTickHeight));
+            iconItem->update();
         }
     }
     if (minorTickInterval) {
@@ -259,26 +231,23 @@
             minorIndex++;
             HbStyleOptionSlider opt;
             initStyleOption(&opt);
-            opt.orientation = d->sliderControl->orientation();
+            opt.orientation = d->slider->orientation();
             style()->updatePrimitive(iconItem,HbStyle::P_SliderTickMark_minoricon,&opt);
             int pos = QStyle::sliderPositionFromValue( minimum, maximum,
                 minimum+minorTickInterval*i,static_cast<int>( span ), rtlLayout );
- 
-            if ( d->sliderControl->orientation() == Qt::Horizontal) {
-                qreal correctedPosX = handle->size().width()/2+pos; 
-                qreal correctedPosY = 0;
-                iconItem->setPos ( correctedPosX,correctedPosY );
-                iconItem->update();
+            qreal correctedPosX = 0;
+            qreal correctedPosY = 0;
 
+            if ( d->slider->orientation() == Qt::Horizontal) {
+                correctedPosX = handleSize.width()/2+pos; 
             } else {
-                qreal correctedPosY = handle->size().height()/2+pos;
-                qreal correctedPosX =0;
-                iconItem->setPos ( correctedPosX,correctedPosY );
-                iconItem->update();
-
+                correctedPosY = handleSize.height()/2+pos;
             }
+            iconItem->setGeometry (QRectF( correctedPosX,correctedPosY ,d->majorTickWidth,d->majorTickHeight));
+            iconItem->update();
         }
     }
+	update(boundingRect());
  }
 
 /* !
@@ -316,16 +285,21 @@
 void HbSliderTickmarks::polish( HbStyleParameters& params )
 {
     Q_D (HbSliderTickmarks);
-    params.addParameter("fixed-width-major");
-    params.addParameter("fixed-height-major");
-    params.addParameter("fixed-width-minor");
-    params.addParameter("fixed-height-minor");
-    HbWidget::polish(params);
-    d->majorTickWidth = params.value("fixed-width-major").toInt();
-    d->majorTickHeight = params.value("fixed-height-major").toInt();
-    d->minorTickWidth = params.value("fixed-width-minor").toInt();
-    d->minorTickHeight = params.value("fixed-height-minor").toInt();
-    updateTicks();
+    if (d->majorTickHeight == 0 || d->sliderOrientation!= d->slider->orientation() ) {
+        d->sliderOrientation = d->slider->orientation();
+	    params.addParameter("fixed-width-major");
+	    params.addParameter("fixed-height-major");
+	    params.addParameter("fixed-width-minor");
+	    params.addParameter("fixed-height-minor");
+	    HbWidget::polish(params);
+	    d->majorTickWidth = params.value("fixed-width-major").toReal();
+	    d->majorTickHeight = params.value("fixed-height-major").toReal();
+	    d->minorTickWidth = params.value("fixed-width-minor").toReal();
+	    d->minorTickHeight = params.value("fixed-height-minor").toReal();
+    } else  {
+	    HbWidget::polish(params);
+        updateTicks();
+    }
 }
 
  //end of file