/****************************************************************************
**
** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (developer.feedback@nokia.com)
**
** This file is part of the HbWidgets module of the UI Extensions for Mobile.
**
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this file.
** Please review the following information to ensure the GNU Lesser General
** Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights.  These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at developer.feedback@nokia.com.
**
****************************************************************************/

#include <hbslider.h>
#include "hbsliderpopup_p.h"
#include <hbstyle.h>
#include <QDebug>

#include <QTimeLine>
#include <QGraphicsLinearLayout>

/*!   
    internal- HbSliderPopupContentWidget class 
    creates content widget for slider popup
*/
class HbSliderPopupContentWidget : public HbWidget
{
    Q_OBJECT
public:
    HbSliderPopupPrivate *d;
    HbSlider *slider;
    
    HbSliderPopupContentWidget(HbSliderPopupPrivate *priv,
        QGraphicsItem* parent =0) : HbWidget(parent),d(priv),slider(0)
    {
        d->createSlider();
        slider = d->slider;
        slider->setParentItem(this);
        HbStyle::setItemName( slider,"slider" );
    }
    enum { Type = HbPrivate::ItemType_SliderPopupContentWidget };
    int type() const { return Type; }
};

/*!   
    internal- HbSliderPopupPrivate class ctor
*/
HbSliderPopupPrivate::HbSliderPopupPrivate():slider(0)
{
}

/*!   
    internal- HbSliderPopupPrivate class dtor
*/
HbSliderPopupPrivate::~HbSliderPopupPrivate()
{

}

/*!  
    This is virtual function for creating slider
    derived class can over ride it and return required type of slider
    ex HbVolumeSlider or HbZoomSlider
*/
void HbSliderPopupPrivate::createSlider() 
{
    slider= new HbSlider();
}

/*!   
    This slot will be called when ever value change happens
    This will reset time out interval of popup
*/
void HbSliderPopupPrivate ::_q_valueChanged(int val)
{
    Q_Q(HbSliderPopup);
    startTimeout();
    emit q->valueChanged(val);
}

/*!
   create slider and delegate all signals of slider
*/
void HbSliderPopupPrivate::init()
{
    Q_Q( HbSliderPopup);
    mSliderPopupContentWidget = new HbSliderPopupContentWidget( this );
    q->setContentWidget( mSliderPopupContentWidget );
    setBackgroundItem(HbStylePrivate::P_SliderPopup_background);
    HbStyle::setItemName(q->backgroundItem(),QLatin1String("sliderpopup_background"));

    q->connect(mSliderPopupContentWidget->slider,SIGNAL(valueChanged(int)),q,SLOT(_q_valueChanged(int)));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(sliderPressed()),q,SIGNAL(sliderPressed()));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(sliderReleased()),q,SIGNAL(sliderReleased()));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(rangeChanged(int , int  )),
        q,SIGNAL(rangeChanged(int , int  )));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(sliderMoved(int)),q,SIGNAL(sliderMoved(int)));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(iconPressed()),q,SIGNAL(iconPressed()));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(iconReleased()),q,SIGNAL(iconReleased()));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(iconClicked()),q,SIGNAL(iconClicked()));
    q->connect(mSliderPopupContentWidget->slider,SIGNAL(textClicked()),q,SIGNAL(textClicked()));

    q->setDismissPolicy(HbDialog::TapOutside);
    q->setBackgroundFaded(false);
    q->setModal(false);
    mSliderPopupContentWidget->slider->setFlags(QGraphicsItem::ItemIsFocusable);
}

/*!
    @beta
    @hbwidgets
    \class HbSliderPopup
    \brief HbSliderPopup widget provides a generic vertical or horizontal 
    slider embeeded in a popup.

    HbSliderPopup is a classic widget for controlling a bounded value.
    It lets the user move a slider handle along a horizontal or vertical
    track and translates the handle's position into an integer value
    within the legal range.

    The most important functions are setValue() to set the slider directly
    to some value; and setMinimum() and setMaximum() to define the range
    of the slider.

    HbSliderPopup consists of elements. The available slider elements are
    defined by the Hb::SliderElement enumeration. A set of elements
    can be set by setSliderElements() and currently existing elements can be
    queried by sliderElements().

    HbSliderPopup provides methods for controlling tickmarks.  You can use
    setTickPosition() to indicate where you want the tickmarks to be,
    setMajorTickInterval() and setMinorTickInterval() to indicate how
    many of them you want. The current set tick position and intervals
    can be queried using the tickPosition(), majorTickInterval() and
    minorTickInterval() functions, respectively.

    HbSliderPopup provides a comprehensive set of signals:
    \li valueChanged() Emitted when the slider's value has changed. The tracking()
       determines whether this signal is emitted during user
       interaction.
    \li sliderPressed() Emitted when the user starts to drag the slider.
    \li sliderMoved() Emitted when the user drags the slider.
    \li sliderReleased() Emitted when the user releases the slider.
    \li rangeChanged() Emitted when the range of the slider changes.
    \li iconPressed() Emitted when the user presses the associated slider icon.
    \li iconReleased() Emitted when the user releases the associated slider icon.
    \li iconClicked() Emitted when the user clicks the associated slider icon.

    HbSliderPopup provides only integer ranges. Note that although
    HbSliderPopup handles very large numbers, it becomes difficult for users
    to use a slider accurately for very large ranges.

    The slider handles keys in the following way:
    \li Left/Right moves a horizontal slider by one single step.
    \li Up/Down moves a vertical slider by one single step.

    Example usage:
    \code
    HbSliderPopup *slider = new HbSliderPopup();
    connect(slider, SIGNAL(valueChanged(int)), receiver, SLOT(volumeSliderChanged(int)));
    connect(slider, SIGNAL(iconToggled(bool)), receiver, SLOT(volumeMuted(bool)));
    \endcode

    \sa HbZoomSliderPopup, HbVolumeSliderPopup
*/

/*!
    \fn void HbSliderPopup::valueChanged(int value)

    This signal is emitted when the slider value has changed.

    \sa hasTracking()
*/

/*!
    \fn void HbSliderPopup::sliderPressed()

    This signal is emitted when the slider thumb has been pressed.
*/

/*!
    \fn void HbSliderPopup::sliderReleased()

    This signal is emitted when the slider thumb has been released.
*/

/*!
    \fn void HbSliderPopup::sliderMoved(int value)

    This signal is emitted when the slider position has changed.

    \sa hasTracking()
*/

/*!
    \fn void HbSliderPopup::rangeChanged(int min, int max)

    This signal is emitted when the slider range has changed.
*/

/*!
    \fn void HbSliderPopup::iconPressed()

    This signal is emitted when the slider icon has been pressed.
*/

/*!
    \fn void HbSliderPopup::iconReleased()

    This signal is emitted when the slider icon has been released.
*/

/*!
    \fn void HbSliderPopup::iconClicked()

    This signal is emitted when the slider icon has been clicked.
*/


/*!
    \reimp
    \fn int HbSliderPopup::type() const
 */

/*!
    \enum HbSliderPopup::SliderElement

    This enum defines available slider elements.
 */

/*!
    \var HbSliderPopup::IncreaseElement

    A button to increase the slider value. Usually a plus sign.
 */

/*!
    \var HbSliderPopup::TrackElement

    The slider track that consists of a groove, ticks and handle.
 */

/*!
    \var HbSliderPopup::DecreaseElement

    A button to decrease the slider value. Usually a minus sign.
 */

/*!
    \var HbSliderPopup::IconElement

    An icon element associated to the slider.
 */

/*!
    \var HbSliderPopup::TextElement

    A text element associated to the slider.
 */



/*!
    Constructs a slider embeeded in a popup with \a parent.

    The orientation is \b Qt::Vertical and the slider contains only track element by default.

    \sa setOrientation(), setElements()
*/
HbSliderPopup::HbSliderPopup(QGraphicsItem *parent) :
    HbDialog(*new HbSliderPopupPrivate, parent)
{
    Q_UNUSED( parent);
    Q_D(HbSliderPopup);
    d->q_ptr = this;
    d->init();
}

/*!
@beta
Constructs a sliderPopup with a \a orientation and \a parent.

The slider contains only track element by default.

\sa setElements()
*/
HbSliderPopup::HbSliderPopup(Qt::Orientation orientation, QGraphicsItem *parent) :
    HbDialog(*new HbSliderPopupPrivate, parent)
{
    Q_D(HbSliderPopup);
    d->q_ptr = this;
    d->init();
    setOrientation(orientation);
}

/*!
    \internal
 */
HbSliderPopup::HbSliderPopup(HbSliderPopupPrivate &dd, QGraphicsItem *parent) :
    HbDialog(dd, parent)
{
    Q_UNUSED( parent);
    Q_D(HbSliderPopup);
    d->q_ptr = this;
    d->init();
}

/*!
    Destructs the slider.
*/
HbSliderPopup::~HbSliderPopup()
{
}

/*!
    @beta
    Returns the slider text.

    returns empty text if text element does not exist

    \sa setText()
*/
QString HbSliderPopup::text() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->text();
}

/*!
    @beta
    Sets the slider \a text for text element 

    Slider will not take care of localization.

    \warning Setting text to a non-existing text element has no effect.

    \sa text()
*/
void HbSliderPopup::setText(const QString &text)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setText(text);
}

/*!
    @beta
    Sets whether the tooltip is visible .

    \sa isToolTipVisible()
*/
void HbSliderPopup::setToolTipVisible(bool value)
{
    Q_D(const HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setToolTipVisible(value);
}

/*!
    @beta
    Returns \c true if tooltip is visible.

    The default value is \c false.

    \sa setToolTipVisible()
*/
bool HbSliderPopup::isToolTipVisible()
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->isToolTipVisible();
}

/*!
    @beta
   sets the toolTip Alignment with respect to the thumb.

    \sa toolTipAlignment()
*/
void HbSliderPopup::setToolTipAlignment(Qt::Alignment alignment)
{
    Q_D( HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setToolTipAlignment(alignment);
}

/*!
    @beta
    returns the tooltip Alignment with respect to the thumb

    \sa setToolTipAlignment()
*/
Qt::Alignment HbSliderPopup::toolTipAlignment() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->toolTipAlignment();
}


/*!
    @beta
    Returns the major ticklabels of the slider popup.
  
    \sa setMajorTickLabels()
*/
QStringList HbSliderPopup::majorTickLabels() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->majorTickLabels();
}

/*!
    @beta
    Sets the major ticklabels of the slider popup.

    Detailed description:

    Strings from the stringlist will be taken sequentially for drawing
    LabelItem,there exists a one-to-one mapping between tickmarkitem &
    tickmarklabelitem.

    case 1: if strings provided > tickmarks, labels are drawn for the
    strings which maps the tickmarkitems.If there are extra strings 
    available in the list beyond 1-1 mapping, those strings will be left out.

    case 2: if strings provided < tickmarks, labels are drawn only for strings
    provided.Rest of the tickmarkitems will be drawn without labelItem.

    case 3: If some tickmarkitems to be drawn without labelItem in the middle,
    specify empty string ("") for that item  in the string list.

    case 4: if both major & minor tickinterval are same,then only majortickLabel
    strings are taken into account for drawing the labelItem

    \sa majorTickLabels()
*/
void HbSliderPopup::setMajorTickLabels(const QStringList &majorTickLabels)
{
    Q_D(HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->setMajorTickLabels(majorTickLabels);
}

/*!
    @beta
    Returns the minor ticklabels of the slider popup.
  
    \sa setMajorTickLabels()
*/
QStringList HbSliderPopup::minorTickLabels() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->minorTickLabels();
}

/*!
    @beta
    Sets the minor ticklabels of the slider popup.
    see setMajorTickLabels for detailed description

    \sa minorTickLabels(),setMajorTickLabels()
*/
void HbSliderPopup::setMinorTickLabels(const QStringList &minorTickLabels)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setMinorTickLabels(minorTickLabels);
}

/*!
    @beta
    Returns the icon of the \a element.

    returns NULL if element does not exist or icon was not set for this element

    \sa setElementIcon()
*/
HbIcon HbSliderPopup::elementIcon(HbSlider::SliderElement element) const
{
    Q_D(const HbSliderPopup);
    return(d->mSliderPopupContentWidget->slider->elementIcon(element));
}

/*!
    @beta
    Sets the \a icon if the \a element.

    Supported elements:
    \li HbSlider::IncreaseElement
    \li HbSlider::DecreaseElement
    \li HbSlider::IconElement

    \warning Setting icon to a non-existing element has no effect.

    \sa elementIcon() setElements()
*/
void HbSliderPopup::setElementIcon(HbSlider::SliderElement element, const HbIcon &icon)
{
    Q_D( HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setElementIcon(element,icon);
}



/*!
    @beta
    Returns the map , which consist of element name as key and icon name  as value

    returns NULL map if none of the element has icon

    \sa setElementIcons()
*/
QMap<QString,QVariant> HbSliderPopup::elementIcons( )const
{
    Q_D(const HbSliderPopup);
    return(d->mSliderPopupContentWidget->slider->elementIcons());
}


/*!
    @beta
    Sets the icons for elements

    key of \a elements is element name  QString)  and value is icon
    name to set on given element
    Use following string for specifying elements
    "IncreaseElement" for increase element
    "DecreaseElement" for decrease element
    "IconElement" for icon element
    
    Eg Usage:
    HbSlider slider;
    QMap<QString , QVariant> map;
    map.insert(  QString( "IncreaseElement", QVariant(":\icon\small.jpg"));
    map.insert(  QString( "IconElement", QVariant(":\icon\small.jpg"));
    slider.setElementIcons( map );

    \warning Setting icon to a non-existing element has no effect.

    \sa elementIcons() setSliderElements() setElementIcon()
*/

void HbSliderPopup::setElementIcons(const QMap<QString,QVariant> &elements)
{
    Q_D( HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setElementIcons(elements);
}


/*!
    @beta
    Returns \c true whether the slider track is inverted.

    The default value is \c false.

    If this property is \c false, the minimum and maximum will
    be shown in its classic position. If the value is \c true,
    the minimum and maximum appear at their opposite location.

    \sa setInvertedAppearance()
*/
bool HbSliderPopup::invertedAppearance() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->invertedAppearance();
}

/*!
    @beta
    Sets whether the slider track is \a inverted.

    \sa invertedAppearance()
*/
void HbSliderPopup::setInvertedAppearance(bool inverted)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setInvertedAppearance(inverted);
 }

/*!
    @beta
    Returns the list of slider elements as QVariant ( can be type-casted to HbSlider::SliderElement ).   

    The slider contains only track element by default.

    \sa setSliderElements()
*/
QList<QVariant> HbSliderPopup::sliderElements() const
{
    Q_D(const HbSliderPopup);
    return (d->mSliderPopupContentWidget->slider->sliderElements());
}

/*!
    @beta
    Sets the elements of the slider.

    \note Duplicate elements will be ignored.

    \note element order cant be changed

    Eg Usages:
    HbSliderPopup slider;
    QList<QVariant> list;
    list.append( QVariant( HbSlider::IncreaseElement));
    list.append( QVariant( HbSlider::DecreaseElement));
    list.append( QVariant( HbSlider::IconElement));
    slider.setElements( list);

    The available slider elements are
    defined by the HbSlider::SliderElement enumeration

    \sa sliderElements()

*/
void HbSliderPopup::setSliderElements(const QList<QVariant>&elements)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setSliderElements(elements);

}


/*!
    @beta
    Returns the maximum value of the slider.

    The default value is \c 100.

    \sa setMaximum()
*/
int HbSliderPopup::maximum() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->maximum();
}

/*!
    @beta
    Sets the maximum value of the slider.

    \note When setting this property, the minimum is adjusted if

    necessary to ensure that the range remains valid.  Also the

    slider's current value is adjusted to be within the new range.

    \sa maximum()
*/
void HbSliderPopup::setMaximum(int max)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setMaximum(max);
}

/*!
    @beta
    Returns the minimum value of the slider.

    The default value is \c 0.

    \sa setMinimum()
*/
int HbSliderPopup::minimum() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->minimum();
}

/*!
    @beta
    Sets the minimum value of the slider.

    \note When setting this property, the maximum is adjusted if
    necessary to ensure that the range remains valid. Also the
    slider's current value is adjusted to be within the new range.

    \sa minimum()
*/
void HbSliderPopup::setMinimum(int min)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setMinimum(min);
}

/*!
    @beta
    This function is provided for convenience.

    Sets the slider's minimum to \a min and its maximum to \a max.

    If maximum is smaller than minimum, minimum becomes the only legal value.

    \sa setMinimum(), setMaximum()
*/
void HbSliderPopup::setRange(int min, int max)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setRange(min, max);
}

/*!
    @beta
    Returns the page step of the slider.

    The default value is \c 10.

    The larger of two natural steps that a slider provides
    and typically corresponds to the user pressing PageUp or PageDown.

    \sa setPageStep()
*/
int HbSliderPopup::pageStep() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->pageStep();
}

/*!
    @beta
    Sets the page \a step of the slider.

    \sa pageStep()
*/
void HbSliderPopup::setPageStep(int step)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setPageStep(step);
}

/*!
    @beta
    Returns the single step of the slider.

    The default value is \c 1.

    The smaller of two natural steps that an
    abstract sliders provides and typically corresponds to the user
    pressing an arrow key.

    \sa setSingleStep()
*/
int HbSliderPopup::singleStep() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->singleStep();
}

/*!
    @beta
    Sets the single \a step of the slider.

    \sa singleStep()
*/
void HbSliderPopup::setSingleStep(int step)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setSingleStep(step);
}

/*!
    @beta
    Returns the current slider position.

    If tracking is enabled (the default), this is identical to the value.

    \sa setSliderPosition()
*/
int HbSliderPopup::sliderPosition() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->sliderPosition();
}

/*!
    @beta
    Sets the current slider position.

    \sa sliderPosition()
*/
void HbSliderPopup::setSliderPosition(int pos)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setSliderPosition(pos);
}

/*!
    @beta
    Returns \c true whether slider tracking is enabled.

    The default value is \c true.

    If tracking is enabled, the slider emits the
    valueChanged() signal while the slider is being dragged. If
    tracking is disabled, the slider emits the valueChanged() signal
    only when the user releases the slider.

    \sa setTracking()
*/
bool HbSliderPopup::hasTracking() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->hasTracking();
}

/*!
    @beta
    Sets whether the slider tracking is enabled.

    \sa hasTracking()
*/
void HbSliderPopup::setTracking(bool enable)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setTracking(enable);
}

/*!
    @beta
    Returns the current value of the slider.

    The default value is \c 0.
*/
int HbSliderPopup::value() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->value();
}

/*!
    @beta
    Sets the current value of the slider.

    The slider forces the value to be within the legal range: \b
    minimum <= \c value <= \b maximum.

    Changing the value also changes the \b sliderPosition.

    \sa value()
*/
void HbSliderPopup::setValue(int value)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setValue(value);
}

/*!
    @beta
    Returns the tickmark position of the slider.

    The default value is \c HbSlider::NoTicks.

    \sa setTickPosition()
*/
Hb::SliderTickPositions HbSliderPopup::tickPosition() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->tickPosition();
}

/*!
    @beta
    Sets the tickmark position of the slider.

    \sa tickPosition()
 */
void HbSliderPopup::setTickPosition(Hb::SliderTickPositions  position)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setTickPosition(position);
}

/*!
    @beta
    Returns the SnappingMode of the slider.

    The default value is \c HbSlider::MinorTickSnapping.

    \sa setSnappingMode()
*/
HbSlider::SnappingMode HbSliderPopup::snappingMode() const  
{
    Q_D(const HbSliderPopup);
    HbSlider::SnappingMode mode = d->mSliderPopupContentWidget->slider->snappingMode();
    return mode;
}

/*!
    @beta
    Sets the snappingMode of the slider.

    \sa snappingMode()
*/
void HbSliderPopup::setSnappingMode(HbSlider::SnappingMode mode)   
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setSnappingMode(mode);
}

/*!
    @beta
    Sets the \a orientation of the sliderpopup.

    \sa orientation()
*/
void HbSliderPopup::setOrientation(Qt::Orientation orientation)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setOrientation(orientation);
}

/*!
    @beta
    Returns the orientation of the sliderpopup.

    The default value is \c Qt::Vertical.

    \sa setOrientation()
 */
Qt::Orientation HbSliderPopup::orientation() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->orientation();
}

/*!
    @beta
    Returns the interval between major tickmarks.

    The default value is \c 0.

    \sa setMajorTickInterval()
*/
int HbSliderPopup::majorTickInterval() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->majorTickInterval();
}

/*!
    @beta
    Sets the interval between major tickmarks.

    Special values:
    \li a negative value means no major ticks will be drawn
    \li value \c 0 means that the interval is automatically calculated

    \sa majorTickInterval()
*/
void HbSliderPopup::setMajorTickInterval(int interval)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setMajorTickInterval(interval);
}

/*!
    @beta
    Returns the interval between minor tickmarks.

    The default value is \c 0.

    \sa setMinorTickInterval()
*/
int HbSliderPopup::minorTickInterval() const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->minorTickInterval();
}

/*!
    @beta
    Sets the interval between minor tickmarks.

    Special values:
    \li a negative value means no minor ticks will be drawn
    \li value \c 0 means that the interval is automatically calculated

    \sa minorTickInterval()
*/
void HbSliderPopup::setMinorTickInterval(int interval)
{
    Q_D(HbSliderPopup);
    d->mSliderPopupContentWidget->slider->setMinorTickInterval(interval);
}

/*!
    \reimp
 */
void HbSliderPopup::updatePrimitives()
{
    Q_D(const HbSliderPopup);
    d->mSliderPopupContentWidget->slider->updatePrimitives();
    HbDialog::updatePrimitives();
}

/*!
    @beta
    Sets whether to display progress track or not

    \default value is true

    \sa isTrackFilled( )
*/
void HbSliderPopup::setTrackFilled(bool trackVisible )
{
    
    Q_D( const HbSliderPopup );
    return d->mSliderPopupContentWidget->slider->setTrackFilled( trackVisible );

}

/*!
    @beta
    returns whether progress track is visible or not

    \sa setTrackFilled( )
     
*/
bool HbSliderPopup::isTrackFilled() const
{
    Q_D( const HbSliderPopup );
    return d->mSliderPopupContentWidget->slider->isTrackFilled();

}


/*!

    \deprecated HbSliderPopup::primitive(HbStyle::Primitive)
        is deprecated.

    \reimp
 */
QGraphicsItem * HbSliderPopup::primitive(HbStyle::Primitive primitive) const
{
    Q_D(const HbSliderPopup);
    return d->mSliderPopupContentWidget->slider->primitive( primitive );
}

#include "moc_hbsliderpopup.cpp"
#include "hbsliderpopup.moc"
