src/hbwidgets/sliders/hbzoomslider_p.cpp
changeset 0 16d8024aca5e
child 1 f7ac710697a9
equal deleted inserted replaced
-1:000000000000 0:16d8024aca5e
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (developer.feedback@nokia.com)
       
     6 **
       
     7 ** This file is part of the HbWidgets module of the UI Extensions for Mobile.
       
     8 **
       
     9 ** GNU Lesser General Public License Usage
       
    10 ** This file may be used under the terms of the GNU Lesser General Public
       
    11 ** License version 2.1 as published by the Free Software Foundation and
       
    12 ** appearing in the file LICENSE.LGPL included in the packaging of this file.
       
    13 ** Please review the following information to ensure the GNU Lesser General
       
    14 ** Public License version 2.1 requirements will be met:
       
    15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    16 **
       
    17 ** In addition, as a special exception, Nokia gives you certain additional
       
    18 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    20 **
       
    21 ** If you have questions regarding the use of this file, please contact
       
    22 ** Nokia at developer.feedback@nokia.com.
       
    23 **
       
    24 ****************************************************************************/
       
    25 
       
    26 #include "hbzoomslider_p.h"
       
    27 #include "hbslider_p.h"
       
    28 #include "hbnamespace_p.h"
       
    29 #include "hbinstance.h"
       
    30 #include "hbwidget.h"
       
    31 #include "hbslidercontrol_p.h"
       
    32 #include <QGraphicsSceneEvent>
       
    33 #include <QGraphicsScene>
       
    34 
       
    35 /*!
       
    36     \depricated
       
    37     This class will be depricated
       
    38     Use HbSlider instead
       
    39     Example usage:
       
    40     \code
       
    41     HbSlider *slider = new HbSlider(Qt::Horizontal);
       
    42     QList<HbSlider::SliderElement> sliderElements;
       
    43     sliderElements.append(HbSlider::DecreaseElement);
       
    44     sliderElements.append(HbSlider::TrackElement);
       
    45     sliderElements.append(HbSlider::IncreaseElement);
       
    46     sliderElements.append(HbSlider::IconElement);
       
    47     sliderElements.append(HbSlider::TextElement);
       
    48     slider->setElements(sliderElements);
       
    49     slider->setRange(0, 100);
       
    50     slider->setMajorTickInterval(50);
       
    51     slider->setTickPosition(Hb::SliderTicksLeft);
       
    52     // decreaseIcon is valid HbIcon
       
    53     slider->setIcon(HbSlider::DecreaseElement, decreaseIcon);
       
    54     // increaseIcon is valid HbIcon
       
    55     slider->setIcon(HbSlider:: IncreaseElement, increaseIcon);
       
    56     // icon is valid HbIcon
       
    57     slider->setIcon(HbSlider:: IncreaseElement,icon);
       
    58     slider->setText( "1%");
       
    59 
       
    60     \endcode
       
    61 
       
    62     @hbwidgets
       
    63     \class HbZoomSlider
       
    64     \brief HbZoomSlider widget provides a vertical zoom slider.
       
    65 
       
    66     HbZoomSlider is provided for convenience. HbZoomSlider sets appropriate
       
    67     icons, properties and provides zoom slider specific functionality like a
       
    68     zoom level indicator label and appropriate elements out of the box.
       
    69     HbZoomSlider sets HbSlider::text  and consists of following
       
    70     slider elements by default:
       
    71     \li HbSlider::IncreaseElement
       
    72     \li HbSlider::TrackElement
       
    73     \li HbSlider::DecreaseElement
       
    74     \li HbSlider::TextElement
       
    75 
       
    76     \image html hbzoomslider.png A vertical zoom slider.
       
    77 
       
    78     The elements can be changed by calling HbSlider::setElements( ) later at any time.
       
    79 
       
    80     \note order of element can not be changed
       
    81 
       
    82     Orientation of HbZoomSlider can not be changed. If orientation change is need, 
       
    83     then first create HbSlider and set needed elements.
       
    84 
       
    85     Note:: if setElement is called on this slider , application is reponsible for
       
    86     inconsitent UI.
       
    87 */
       
    88 
       
    89 
       
    90 class HbZoomSliderPrivate : public HbSliderPrivate
       
    91 {
       
    92     Q_DECLARE_PUBLIC( HbZoomSlider )
       
    93 
       
    94 public:
       
    95     HbZoomSliderPrivate( );
       
    96     virtual ~HbZoomSliderPrivate( );
       
    97     void init( );
       
    98     // zoom slider can have default level set by Apps
       
    99     bool mDefaultSet;
       
   100     int mDefaultZoomLevel;
       
   101     void _q_resetToDefault( );
       
   102 };
       
   103 
       
   104 
       
   105 HbZoomSliderPrivate::HbZoomSliderPrivate( )
       
   106 {
       
   107  
       
   108 }
       
   109 
       
   110 
       
   111 HbZoomSliderPrivate::~HbZoomSliderPrivate( )
       
   112 {
       
   113 }
       
   114 
       
   115 /*!
       
   116     creates slider element and set default values
       
   117  */
       
   118 void HbZoomSliderPrivate::init( )
       
   119 {
       
   120     Q_Q( HbZoomSlider );
       
   121     mDefaultSet = false;
       
   122 
       
   123     QList<HbSlider::SliderElement> elements;
       
   124     elements << HbSlider::IncreaseElement 
       
   125         << HbSlider::TrackElement 
       
   126         << HbSlider::DecreaseElement 
       
   127         << HbSlider::TextElement;
       
   128     setElements( elements );
       
   129 
       
   130      // create element because HbSlider will not create element for NULL Icon
       
   131     // and zoom slider Icon is set in style
       
   132 
       
   133     if ( !elementItemMap.contains(HbSlider::IncreaseElement) ) {
       
   134         elementItemMap[HbSlider::IncreaseElement].item = 
       
   135             q->style( )->createPrimitive( HbStyle::P_SliderElement_increase, q);
       
   136         HbStyle::setItemName( elementItemMap[HbSlider::IncreaseElement].item, "increment-icon" );
       
   137         elementItemMap[HbSlider::IncreaseElement].type= HbStyle::P_SliderElement_increase;
       
   138         elementItemMap[HbSlider::IncreaseElement].touchItem = 
       
   139             q->style( )->createPrimitive( HbStyle::P_SliderElement_touchincrease,q );
       
   140         HbStyle::setItemName( elementItemMap[HbSlider::IncreaseElement].touchItem, "increment-icon-toucharea" );
       
   141     }
       
   142 
       
   143     if ( !elementItemMap.contains(HbSlider::DecreaseElement) ) {
       
   144         elementItemMap[HbSlider::DecreaseElement].item = 
       
   145             q->style( )->createPrimitive( HbStyle::P_SliderElement_decrease, q);
       
   146         elementItemMap[HbSlider::DecreaseElement].type = HbStyle::P_SliderElement_decrease;
       
   147         HbStyle::setItemName( elementItemMap[HbSlider::DecreaseElement].item, "decrement-icon" );
       
   148         elementItemMap[HbSlider::DecreaseElement].touchItem = q->style( )->createPrimitive( HbStyle::P_SliderElement_touchdecrease,q ) ;
       
   149         HbStyle::setItemName( elementItemMap[HbSlider::DecreaseElement].touchItem, "decrement-icon-toucharea" );
       
   150     }
       
   151 
       
   152     HbStyleOptionSlider option;
       
   153     q->initStyleOption( &option );
       
   154     option.sliderElementIcon = icons.value( HbSlider::IncreaseElement ); 
       
   155     q->style( )->updatePrimitive(elementItemMap[HbSlider::IncreaseElement].item ,HbStyle::P_SliderElement_increase,&option );
       
   156     option.sliderElementIcon = icons.value( HbSlider::DecreaseElement ); 
       
   157     q->style( )->updatePrimitive(elementItemMap[HbSlider::DecreaseElement].item ,HbStyle::P_SliderElement_decrease,&option );
       
   158     q->setFlags( QGraphicsItem::ItemIsFocusable );
       
   159     q->connect( q, SIGNAL( textClicked( ) ), q, SLOT( _q_resetToDefault( ) ) );
       
   160     q->setProperty("changeincrementState" ,false);
       
   161     q->setProperty("changedecrementState" ,false);
       
   162     q->setProperty("state", "normal");
       
   163 }
       
   164 
       
   165 /*!
       
   166     This slot will be called when ever there is click on text
       
   167     this will set zoom level to default if specified by Application
       
   168  */
       
   169 void HbZoomSliderPrivate::_q_resetToDefault( )
       
   170 {
       
   171     Q_Q( HbZoomSlider );
       
   172     if( mDefaultSet ) {
       
   173         q->setValue( q->defaultZoomLevel( ) );
       
   174     }
       
   175 }
       
   176 
       
   177 
       
   178 /*!
       
   179     \deprecated HbZoomSlider::HbZoomSlider( QGraphicsItem *parent )
       
   180         is deprecated. Please use HbSlider instead
       
   181     
       
   182     Constructs a zoom slider with \a parent.
       
   183 
       
   184     The orientation is \b Qt::Vertical and the slider contains increase, track, 
       
   185     decrease and text elements by default.
       
   186     \sa setOrientation( ), setElements( )
       
   187 */
       
   188 
       
   189 HbZoomSlider::HbZoomSlider( QGraphicsItem *parent )
       
   190     : HbSlider( *new HbZoomSliderPrivate, parent )
       
   191 {
       
   192     Q_D( HbZoomSlider );
       
   193     d->q_ptr = this;
       
   194     d->init( );
       
   195     // UX specifies that the default step value for zoom slider should be 10
       
   196     setSingleStep( 10 );
       
   197 }
       
   198 
       
   199 /*!
       
   200     Destroys the zoom slider.
       
   201 */
       
   202 HbZoomSlider::~HbZoomSlider( )
       
   203 {
       
   204 }
       
   205 
       
   206 
       
   207 /*!
       
   208     \deprecated HbZoomSlider::defaultZoomLevel( ) const
       
   209         is deprecated. Please use HbSlider instead
       
   210     Returns the default Zoom Level of the zoom slider if set by application
       
   211     otherwise returns minimum value. 
       
   212 
       
   213     \sa setDefaultZoomLevel( )
       
   214 
       
   215 */
       
   216 int HbZoomSlider::defaultZoomLevel( ) const
       
   217 {
       
   218     Q_D( const HbZoomSlider );
       
   219     if( d->mDefaultSet ) {
       
   220          return d->mDefaultZoomLevel;
       
   221     } else {
       
   222          return minimum( );
       
   223     }
       
   224 }
       
   225 
       
   226 
       
   227 /*!
       
   228     \deprecated HbZoomSlider::setDefaultZoomLevel( int value )
       
   229         is deprecated. Please use HbSlider instead
       
   230     
       
   231     sets the default Zoom Level of the zoom slider with \a value.
       
   232     if not set minimum( ) value will be used for default value.
       
   233 
       
   234     \sa defaultZoomLevel( )
       
   235 */
       
   236 void HbZoomSlider::setDefaultZoomLevel( int value )
       
   237 {
       
   238     Q_D( HbZoomSlider );
       
   239     d->mDefaultSet=true;
       
   240     //bound check
       
   241     if( value > minimum( ) && value < maximum( ) ) {
       
   242         d->mDefaultZoomLevel=value;
       
   243     }
       
   244 }
       
   245 
       
   246 
       
   247 /*!
       
   248     \deprecated HbZoomSlider::setToolTipVisible( bool b )
       
   249         is deprecated. Please use HbSlider instead
       
   250     
       
   251     \reimp
       
   252     This is not supported in HbZoomSlider
       
   253  */
       
   254 void HbZoomSlider::setToolTipVisible( bool /*b*/ )
       
   255 {
       
   256     Q_ASSERT_X( false, "HbZoomSlider::setToolTipVisible( )", 
       
   257         "Current value display as tooltip is not supported in zoom slider" );
       
   258 
       
   259 }
       
   260 
       
   261 /*!
       
   262     \reimp
       
   263  */
       
   264 void HbZoomSlider::mousePressEvent( QGraphicsSceneMouseEvent *event )
       
   265 {
       
   266     Q_D( HbZoomSlider );
       
   267     if( d->elementItemMap.contains(HbSlider::IncreaseElement) ) {
       
   268         if ( d->elementItemMap[HbSlider::IncreaseElement].touchItem->isUnderMouse( ) ) {
       
   269             setProperty("changeincrementState" ,true);
       
   270             setProperty("changedecrementState" ,false);
       
   271             setProperty("state", "pressed"); 
       
   272         }
       
   273     }
       
   274     if( d->elementItemMap.contains(HbSlider::DecreaseElement) ) {
       
   275         if ( d->elementItemMap[HbSlider::DecreaseElement].touchItem->isUnderMouse( ) ) {
       
   276             setProperty("changeincrementState" ,false);
       
   277             setProperty("changedecrementState" ,true);
       
   278             setProperty("state", "pressed"); 
       
   279         }
       
   280     }
       
   281    
       
   282     HbSlider::mousePressEvent( event );
       
   283 }
       
   284 
       
   285 /*!
       
   286     \reimp
       
   287 
       
   288  */
       
   289 void HbZoomSlider::mouseReleaseEvent( QGraphicsSceneMouseEvent *event )
       
   290 {
       
   291     Q_D( HbZoomSlider );
       
   292     HbSlider::mouseReleaseEvent( event );
       
   293     d->stopRepeatAction( );
       
   294     setProperty("changeincrementState" ,false);
       
   295     setProperty("changedecrementState" ,false);
       
   296     setProperty("state", "normal"); 
       
   297 }
       
   298 
       
   299 /*!
       
   300     \reimp
       
   301  */
       
   302 QVariant HbZoomSlider::itemChange( GraphicsItemChange change, const QVariant &value )
       
   303 {
       
   304     Q_D( HbZoomSlider );
       
   305     switch ( static_cast<HbPrivate::HbItemChangeValues>( change ) ) {
       
   306       case ItemVisibleHasChanged:
       
   307             if( !value.toBool( ) ){
       
   308                 if( d->sliderControl ){
       
   309                     d->sliderControl->setSliderDown( false );
       
   310                 }
       
   311                 setProperty("changeincrementState" ,false);
       
   312                 setProperty("changedecrementState" ,false);
       
   313                 setProperty("state", "normal");  
       
   314              }
       
   315             break;
       
   316         default:
       
   317             break;
       
   318     }
       
   319     return HbSlider::itemChange( change, value );
       
   320 }
       
   321 
       
   322 /*!
       
   323     \reimp
       
   324  */
       
   325 void HbZoomSlider::initStyleOption( HbStyleOptionSlider *option ) const
       
   326 {
       
   327     option->sliderType=HbStyleOptionSlider::ZoomType;
       
   328     HbSlider::initStyleOption( option );
       
   329 
       
   330 }
       
   331 
       
   332 /*!
       
   333     \reimp
       
   334  */
       
   335 void HbZoomSlider::focusInEvent( QFocusEvent *event )
       
   336 {
       
   337     Q_UNUSED( event );
       
   338     Q_D( HbZoomSlider );
       
   339     d->sliderControl->setFocus( );
       
   340 }
       
   341 
       
   342 #include "moc_hbzoomslider_p.cpp"
       
   343