diff -r c3690ec91ef8 -r 923ff622b8b9 src/hbwidgets/popups/hbselectiondialog_p.cpp --- a/src/hbwidgets/popups/hbselectiondialog_p.cpp Wed Jun 23 18:33:25 2010 +0300 +++ b/src/hbwidgets/popups/hbselectiondialog_p.cpp Tue Jul 06 14:36:53 2010 +0300 @@ -33,12 +33,79 @@ #include #include #include +#include + +HbSelectionDialogMarkWidget::HbSelectionDialogMarkWidget(QGraphicsItem *parent):HbWidget(parent),mBackgroundItem(0){ + chkMark = new HbCheckBox(this); + chkMark->setText("Mark All"); + lbCounter = new HbTextItem(this); + HbStyle::setItemName(chkMark,"checkbox"); + HbStyle::setItemName(lbCounter,"counter"); + createPrimitives(); +} + +void HbSelectionDialogMarkWidget::createPrimitives() +{ + if ( !mBackgroundItem ) { + mBackgroundItem = style( )->createPrimitive( HbStyle::P_TumbleView_background , this ); + style()->setItemName( mBackgroundItem , "background" ); + } +} + +void HbSelectionDialogMarkWidget::updatePrimitives() +{ + HbStyleOption option; + initStyleOption( &option ); + + if ( mBackgroundItem ) { + style( )->updatePrimitive( mBackgroundItem , HbStyle::P_TumbleView_background , &option ); + } +} + +/*! + \reimp + */ +QVariant HbSelectionDialogMarkWidget::itemChange( GraphicsItemChange change, const QVariant &value ) +{ + switch ( change ) { + case ItemVisibleHasChanged: { + updatePrimitives( ); + } + break; + + case ItemSceneHasChanged: { + updatePrimitives(); + } + break; + default: + break; + } + return HbWidget::itemChange( change, value ); +} +/*! + Returns the pointer for \a primitive passed. + Will return NULL if \a primitive passed is invalid +*/ +QGraphicsItem* HbSelectionDialogMarkWidget::primitive(HbStyle::Primitive primitive) const +{ + switch (primitive) { + case HbStyle::P_TumbleView_background: + return mBackgroundItem; + default: + return 0; + } +} + +HbSelectionDialogMarkWidget::~HbSelectionDialogMarkWidget() +{ +} HbSelectionDialogContentWidget::HbSelectionDialogContentWidget(HbSelectionDialogPrivate *priv):HbWidget(), - mListView(0),d(priv),chkMark(0),lbCounter(0),markWidgetShown(false) + mListView(0),d(priv),markWidget(0) { } + void HbSelectionDialogContentWidget::_q_listWidgetItemSelected(HbListWidgetItem *item) { Q_UNUSED(item) @@ -78,21 +145,21 @@ { if(!mListView) return; if(mListView->selectionMode()!= HbAbstractItemView::MultiSelection) return; - if(chkMark && lbCounter){ + if(markWidget){ int totalItems = totalItemCount(); int selectedItems = selectedItemCount(); - - lbCounter->setText(QString(QString::number(selectedItems) + "/" + QString::number(totalItems))); + markWidget->updatePrimitives(); + markWidget->lbCounter->setText(QString(QString::number(selectedItems) + "/" + QString::number(totalItems))); //update checked state of "MarkAll" checkbox if (totalItems > 0 && (selectedItems == totalItems)){ - chkMark->blockSignals(true); //should not call _q_checkboxclicked() - chkMark->setChecked(true); - chkMark->blockSignals(false); + markWidget->chkMark->blockSignals(true); //should not call _q_checkboxclicked() + markWidget->chkMark->setChecked(true); + markWidget->chkMark->blockSignals(false); } else{ - chkMark->blockSignals(true); //should not call _q_checkboxclicked() - chkMark->setChecked(false); - chkMark->blockSignals(false); + markWidget->chkMark->blockSignals(true); //should not call _q_checkboxclicked() + markWidget->chkMark->setChecked(false); + markWidget->chkMark->blockSignals(false); } } } @@ -125,25 +192,18 @@ void HbSelectionDialogContentWidget::showMarkWidget(bool bShow) { if(bShow){ - if(!markWidgetShown){ - chkMark = new HbCheckBox(this); - chkMark->setText("Mark All"); - lbCounter = new HbTextItem(this); - HbStyle::setItemName(chkMark,"checkbox"); - HbStyle::setItemName(lbCounter,"counter"); - setProperty("multiSelection",true); - connect(chkMark,SIGNAL(stateChanged ( int )),this,SLOT(_q_checkboxclicked(int))); + if(!markWidget){ + markWidget = new HbSelectionDialogMarkWidget(this); + HbStyle::setItemName(markWidget,"markwidget"); + setProperty("multiSelection",true); + connect(markWidget->chkMark,SIGNAL(stateChanged ( int )),this,SLOT(_q_checkboxclicked(int))); updateCounter(); - markWidgetShown = true; } } else{ - delete chkMark;chkMark=0; - delete lbCounter;lbCounter=0; - HbStyle::setItemName(chkMark,""); - HbStyle::setItemName(lbCounter,""); - setProperty("multiSelection",false); - markWidgetShown = false; + delete markWidget; markWidget = 0; + HbStyle::setItemName(markWidget,""); + setProperty("multiSelection",false); } } @@ -192,6 +252,7 @@ :HbDialogPrivate() { bOwnItems = false; + action1 = action2 = 0; } HbSelectionDialogPrivate::~HbSelectionDialogPrivate() @@ -209,18 +270,30 @@ HbSelectionDialogContentWidget* contentWidget = new HbSelectionDialogContentWidget(this); q->setContentWidget(contentWidget); - HbAction *action1=new HbAction(hbTrId("txt_common_button_ok"),q); - q->addAction(action1); - q->connect(action1,SIGNAL(triggered()),q,SLOT(accept())); - - HbAction *action2=new HbAction(hbTrId("txt_common_button_cancel"),q); - q->addAction(action2); - q->connect(action2,SIGNAL(triggered()),q,SLOT(reject())); - - q->setDismissPolicy(HbPopup::NoDismiss); q->setTimeout(HbPopup::NoTimeout); q->setModal(true); + showActions(mSelectionMode); +} + +void HbSelectionDialogPrivate::showActions(HbAbstractItemView::SelectionMode selectionMode) +{ + Q_Q(HbSelectionDialog); + if(selectionMode == HbAbstractItemView::SingleSelection){ + delete action1;action1=0;delete action2;action2=0; + action1=new HbAction(hbTrId("txt_common_button_cancel"),q); + q->addAction(action1); + q->connect(action1,SIGNAL(triggered()),q,SLOT(reject())); + } + else{ + delete action1;action1=0;delete action2;action2=0; + action1=new HbAction(hbTrId("txt_common_button_ok"),q); + q->addAction(action1); + q->connect(action1,SIGNAL(triggered()),q,SLOT(accept())); + action2=new HbAction(hbTrId("txt_common_button_cancel"),q); + q->addAction(action2); + q->connect(action2,SIGNAL(triggered()),q,SLOT(reject())); + } } void HbSelectionDialogPrivate::setSelectionMode(HbAbstractItemView::SelectionMode mode) @@ -241,6 +314,7 @@ else cWidget->showMarkWidget(false); } + showActions(mSelectionMode); } break; case HbAbstractItemView::NoSelection: