diff -r 7516d6d86cf5 -r ed14f46c0e55 src/hbwidgets/sliders/hbprogressbar.cpp --- a/src/hbwidgets/sliders/hbprogressbar.cpp Mon Oct 04 17:49:30 2010 +0300 +++ b/src/hbwidgets/sliders/hbprogressbar.cpp Mon Oct 18 18:23:13 2010 +0300 @@ -27,6 +27,8 @@ #include #include "hbglobal_p.h" +#include "hbrepeaticonitem_p.h" +#include "hbprogresstrackitem_p.h" #ifdef HB_EFFECTS #include #include "hbeffectinternal_p.h" @@ -121,7 +123,8 @@ mMaxText(QString()), mOrientation(Qt::Horizontal), mDelayHideInProgress(true), - mShowEffectInProgress(false) + mShowEffectInProgress(false), + mStopWaitAnimation(false) { } @@ -140,13 +143,18 @@ void HbProgressBarPrivate::init() { Q_Q(HbProgressBar); - - HbStyle *style = qobject_cast(q->style()); - Q_ASSERT(style); + + mFrame = q->style()->createPrimitive(HbStyle::PT_FrameItem, "frame",q); + mFrame->setZValue(-1); + qgraphicsitem_cast(mFrame)->frameDrawer().setFillWholeRect(true); - mFrame = style->createPrimitive(HbStyle::P_ProgressBar_frame,q); - mTrack = style->createPrimitive(HbStyle::P_ProgressBar_track,mFrame); - mWaitTrack = style->createPrimitive(HbStyle::P_ProgressBar_waittrack,mFrame); + mTrack = new HbProgressTrackItem(mFrame); + HbStyle::setItemName(mTrack, "track"); + qgraphicsitem_cast(mTrack)->frameDrawer().setFillWholeRect(true); + mTrack->setZValue(-2); + + mWaitTrack = new HbRepeatIconItem(QLatin1String("qtg_graf_progbar_h_wait"), mFrame); + HbStyle::setItemName(mWaitTrack, "wait-track"); mWaitTrack->setVisible(false); if(q->layoutDirection() == Qt::RightToLeft) { @@ -167,39 +175,92 @@ { Q_Q(HbProgressBar); - mMinTextItem = q->style()->createPrimitive(HbStyle::P_ProgressBar_mintext,q); - mMaxTextItem = q->style()->createPrimitive(HbStyle::P_ProgressBar_maxtext,q); + mMinTextItem = q->style()->createPrimitive(HbStyle::PT_TextItem, "min-text",q); + mMaxTextItem = q->style()->createPrimitive(HbStyle::PT_TextItem, "max-text",q); } void HbProgressBarPrivate::setProgressValue(int value) { Q_Q(HbProgressBar); - if (mProgressValue == value) { - return; - } - if (value >= mMaximum) { - value = mMaximum; -#ifdef HB_EFFECTS - HbEffect::start(mTrack, HB_PRGRESSBAR_ITEM_TYPE, "progressbar_progress_complete"); -#endif - } - else if (value < mMinimum) { - value = mMinimum; - } - - mProgressValue=value; + + // set progress value only for normal progressbar type + if( !((mMinimum ==0) && (mMaximum==0))) { + if (mProgressValue == value) { + return; + } + if (value >= mMaximum) { + value = mMaximum; + #ifdef HB_EFFECTS + HbEffect::start(mTrack, HB_PRGRESSBAR_ITEM_TYPE, "progressbar_progress_complete"); + #endif + } + else if (value < mMinimum) { + value = mMinimum; + } + + mProgressValue=value; + + //redraw track + updateProgressTrack(); + + emit q->valueChanged(value); + } +} - //redraw track - HbStyleOptionProgressBar progressBarOption; - q->initStyleOption(&progressBarOption); - if(mTrack) { - q->style()->updatePrimitive(mTrack, HbStyle::P_ProgressBar_track, &progressBarOption); - } +/* + \internal + Update wait track primitive +*/ +void HbProgressBarPrivate::updateWaitTrack() +{ + if (mWaitTrack && mWaitTrack->isVisible()) { + HbRepeatIconItem *iconItem = qgraphicsitem_cast(mWaitTrack); + iconItem->setOrientation(mOrientation); + if( !iconItem->isVisible() ) { + //break; + } + if(mOrientation == Qt::Horizontal){ + iconItem->setName(QLatin1String("qtg_graf_progbar_h_wait")); + } + else{ + iconItem->setName(QLatin1String("qtg_graf_progbar_v_wait")); + } + if(mStopWaitAnimation){ + iconItem->stopAnimation(); + } + } +} - emit q->valueChanged(value); - +/* + \internal + Update track primitive +*/ +void HbProgressBarPrivate::updateProgressTrack() +{ + if (mTrack) { + HbProgressTrackItem* frameItem = qgraphicsitem_cast(mTrack); + if(!frameItem->isVisible()) { + //break; + } + + if(mOrientation == Qt::Horizontal){ + frameItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal); + frameItem->frameDrawer().setFrameGraphicsName(QLatin1String("qtg_fr_progbar_h_filled")); + } + else{ + frameItem->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesVertical); + frameItem->frameDrawer().setFrameGraphicsName(QLatin1String("qtg_fr_progbar_v_filled")); + } + frameItem->setMaximum(mMaximum); + frameItem->setMinimum(mMinimum); + frameItem->setValue(mProgressValue); + frameItem->setInverted(mInvertedAppearance); + frameItem->setOrientation(mOrientation); + frameItem->update(); + } } + /* \internal Sets the progressbar enabling/disabling @@ -207,9 +268,9 @@ void HbProgressBarPrivate::setEnableFlag(bool flag) { Q_Q(HbProgressBar); + if(!flag) { q->setProgressValue(q->minimum()); - } } @@ -219,7 +280,7 @@ */ void HbProgressBarPrivate::setRange(int minimum, int maximum) { - Q_Q(HbProgressBar); + if( minimum > maximum ){ maximum = minimum ; } @@ -236,19 +297,17 @@ // update primitve optimization, update only track primitive // incase of normal as well as in infinite progressbar - HbStyleOptionProgressBar progressBarOption; - q->initStyleOption(&progressBarOption); if( (mMinimum == 0) && (mMaximum == 0) ) { mWaitTrack->setVisible(true); mTrack->setVisible(false); - q->style()->updatePrimitive(mWaitTrack, HbStyle::P_ProgressBar_waittrack, &progressBarOption); + updateWaitTrack(); } else { mWaitTrack->setVisible(false); mTrack->setVisible(true); - q->style()->updatePrimitive(mTrack, HbStyle::P_ProgressBar_track, &progressBarOption); + updateProgressTrack(); } //q->updatePrimitives(); } @@ -458,9 +517,12 @@ Q_D(HbProgressBar); if (d->mMinText != text) { d->mMinText = text; - HbStyleOptionProgressBar progressBarOption; - progressBarOption.minText = d->mMinText; - style()->updatePrimitive(d->mMinTextItem,HbStyle::P_ProgressBar_mintext,&progressBarOption); + + if(d->mMinTextItem && d->mMinMaxTextVisible) { + HbStyleTextPrimitiveData data; + initPrimitiveData(&data, d->mMinTextItem); + style()->updatePrimitive(d->mMinTextItem, &data, this); + } } } @@ -489,9 +551,12 @@ Q_D(HbProgressBar); if (d->mMaxText != text) { d->mMaxText = text; - HbStyleOptionProgressBar progressBarOption; - progressBarOption.maxText = d->mMaxText; - style()->updatePrimitive(d->mMaxTextItem,HbStyle::P_ProgressBar_maxtext,&progressBarOption); + + if(d->mMaxTextItem && d->mMinMaxTextVisible) { + HbStyleTextPrimitiveData data; + initPrimitiveData(&data, d->mMaxTextItem); + style()->updatePrimitive(d->mMaxTextItem, &data, this); + } } } @@ -526,11 +591,17 @@ // update primitve optimization, update only text primitives // incase of with and without min-max text - HbStyleOptionProgressBar progressBarOption; - initStyleOption(&progressBarOption); + if(d->mMinTextItem && d->mMinMaxTextVisible) { + HbStyleTextPrimitiveData data; + initPrimitiveData(&data, d->mMinTextItem); + style()->updatePrimitive(d->mMinTextItem, &data, this); + } - style()->updatePrimitive(d->mMinTextItem,HbStyle::P_ProgressBar_mintext,&progressBarOption); - style()->updatePrimitive(d->mMaxTextItem,HbStyle::P_ProgressBar_maxtext,&progressBarOption); + if(d->mMaxTextItem && d->mMinMaxTextVisible) { + HbStyleTextPrimitiveData data; + initPrimitiveData(&data, d->mMaxTextItem); + style()->updatePrimitive(d->mMaxTextItem, &data, this); + } d->mMinTextItem->show(); d->mMaxTextItem->show(); @@ -584,8 +655,7 @@ if (d->mMinMaxTextVisible) { repolish(); } - // no need for primitve updation, only layout change is required - //updatePrimitives(); + prepareGeometryChange(); } } @@ -627,57 +697,37 @@ } /*! - \deprecated HbProgressBar::primitive(HbStyle::Primitive) - is deprecated. + \reimp */ -QGraphicsItem* HbProgressBar::primitive(HbStyle::Primitive primitive) const -{ - Q_D(const HbProgressBar); - - switch (primitive) { - case HbStyle::P_ProgressBar_frame: - return d->mFrame; - case HbStyle::P_ProgressBar_track: - return d->mTrack; - case HbStyle::P_ProgressBar_waittrack: - return d->mWaitTrack; - case HbStyle::P_ProgressBar_mintext: - return d->mMinTextItem; - case HbStyle::P_ProgressBar_maxtext: - return d->mMaxTextItem; - default: - return 0; - } -} - -/*! - \reimp - */ void HbProgressBar::updatePrimitives() { Q_D(HbProgressBar); if(isVisible()){ - HbStyleOptionProgressBar progressBarOption; - initStyleOption(&progressBarOption); + if (d->mFrame) { - style()->updatePrimitive(d->mFrame, HbStyle::P_ProgressBar_frame, &progressBarOption); + HbStyleFramePrimitiveData data; + initPrimitiveData(&data, d->mFrame); + + style()->updatePrimitive(d->mFrame, &data, this); } - if (d->mTrack) { - style()->updatePrimitive(d->mTrack, HbStyle::P_ProgressBar_track, &progressBarOption); - } + d->updateProgressTrack(); - if (d->mWaitTrack) { - style()->updatePrimitive(d->mWaitTrack, HbStyle::P_ProgressBar_waittrack, &progressBarOption); - } + d->updateWaitTrack(); if(d->mMinTextItem && d->mMinMaxTextVisible) { - style()->updatePrimitive(d->mMinTextItem,HbStyle::P_ProgressBar_mintext,&progressBarOption); + HbStyleTextPrimitiveData data; + initPrimitiveData(&data, d->mMinTextItem); + + style()->updatePrimitive(d->mMinTextItem, &data, this); } if(d->mMaxTextItem && d->mMinMaxTextVisible) { - style()->updatePrimitive(d->mMaxTextItem,HbStyle::P_ProgressBar_maxtext,&progressBarOption); + HbStyleTextPrimitiveData data; + initPrimitiveData(&data, d->mMaxTextItem); + + style()->updatePrimitive(d->mMaxTextItem, &data, this); } } HbWidget::updatePrimitives(); @@ -707,16 +757,54 @@ /*! \reimp +*/ +void HbProgressBar::initPrimitiveData(HbStylePrimitiveData *primitiveData, const QGraphicsObject *primitive) +{ + Q_D(HbProgressBar); + HbWidgetBase::initPrimitiveData(primitiveData, primitive); + QString itemName = HbStyle::itemName(primitive); + if (itemName == QLatin1String("frame")) { + HbStyleFramePrimitiveData *data = hbstyleprimitivedata_cast(primitiveData); + + if (d->mOrientation == Qt::Horizontal) { + data->frameType = HbFrameDrawer::ThreePiecesHorizontal; + data->frameGraphicsName = QLatin1String("qtg_fr_progbar_h_frame"); + } else { + data->frameType = HbFrameDrawer::ThreePiecesVertical; + data->frameGraphicsName = QLatin1String("qtg_fr_progbar_v_frame"); + } + + } + + if (itemName == QLatin1String("min-text")) { + HbStyleTextPrimitiveData *data = hbstyleprimitivedata_cast(primitiveData); + if(!d->mMinTextItem) { + return; + } + data->text = d->mMinText; + data->textWrapping = Hb::TextWrapAnywhere; + } + else if(itemName == QLatin1String("max-text")) { + HbStyleTextPrimitiveData *data = hbstyleprimitivedata_cast(primitiveData); + if(!d->mMaxTextItem) { + return; + } + data->text = d->mMaxText; + data->textWrapping = Hb::TextWrapAnywhere; + } + +} + +/*! + \reimp */ void HbProgressBar::closeEvent ( QCloseEvent * event ) { Q_D(HbProgressBar); - HbStyleOptionProgressBar progressBarOption; - initStyleOption(&progressBarOption); - progressBarOption.stopWaitAnimation = true; - if (d->mWaitTrack) { - style()->updatePrimitive(d->mWaitTrack, HbStyle::P_ProgressBar_waittrack, &progressBarOption); - } + + d->mStopWaitAnimation = true; + + d->updateWaitTrack(); event->accept(); } @@ -788,4 +876,27 @@ HbWidget::changeEvent(event); } +QGraphicsItem *HbProgressBar::primitive(const QString &itemName) const +{ + Q_D(const HbProgressBar); + + if(!itemName.compare(QString("frame"))){ + return d->mFrame; + } + if(!itemName.compare(QString("track"))){ + return d->mTrack; + } + if(!itemName.compare(QString("wait-track"))){ + return d->mWaitTrack; + } + if(!itemName.compare(QString("min-text"))){ + return d->mMinTextItem; + } + if(!itemName.compare(QString("max-text"))){ + return d->mMaxTextItem; + } + + return HbWidget::primitive(itemName); +} + #include "moc_hbprogressbar.cpp"