src/hbwidgets/popups/hbselectiondialog_p.cpp
changeset 7 923ff622b8b9
parent 6 c3690ec91ef8
child 21 4633027730f5
child 34 ed14f46c0e55
equal deleted inserted replaced
6:c3690ec91ef8 7:923ff622b8b9
    31 #include <hblistwidget.h>
    31 #include <hblistwidget.h>
    32 #include <hblistwidgetitem.h>
    32 #include <hblistwidgetitem.h>
    33 #include <QtDebug>
    33 #include <QtDebug>
    34 #include <hbcheckbox.h>
    34 #include <hbcheckbox.h>
    35 #include <hbaction.h>
    35 #include <hbaction.h>
       
    36 #include <hbstyleoption_p.h>
       
    37 
       
    38 HbSelectionDialogMarkWidget::HbSelectionDialogMarkWidget(QGraphicsItem *parent):HbWidget(parent),mBackgroundItem(0){
       
    39 	chkMark = new HbCheckBox(this);
       
    40 	chkMark->setText("Mark All");
       
    41 	lbCounter = new HbTextItem(this);
       
    42 	HbStyle::setItemName(chkMark,"checkbox");
       
    43 	HbStyle::setItemName(lbCounter,"counter");
       
    44 	createPrimitives();
       
    45 }
       
    46 
       
    47 void HbSelectionDialogMarkWidget::createPrimitives()
       
    48 {
       
    49     if ( !mBackgroundItem ) {
       
    50         mBackgroundItem = style( )->createPrimitive( HbStyle::P_TumbleView_background , this );
       
    51         style()->setItemName( mBackgroundItem , "background" );
       
    52     }
       
    53 }
       
    54 
       
    55 void HbSelectionDialogMarkWidget::updatePrimitives()
       
    56 {
       
    57     HbStyleOption option;
       
    58     initStyleOption( &option );
       
    59    
       
    60     if ( mBackgroundItem ) {
       
    61             style( )->updatePrimitive( mBackgroundItem , HbStyle::P_TumbleView_background , &option );
       
    62     }       
       
    63 }
       
    64 
       
    65 /*!
       
    66     \reimp
       
    67  */
       
    68 QVariant HbSelectionDialogMarkWidget::itemChange( GraphicsItemChange change, const QVariant &value )
       
    69 {
       
    70     switch ( change ) {
       
    71         case ItemVisibleHasChanged: {
       
    72 			updatePrimitives( );
       
    73             }
       
    74             break;
       
    75 
       
    76         case ItemSceneHasChanged: {
       
    77             updatePrimitives();
       
    78             }
       
    79             break;
       
    80         default:
       
    81             break;
       
    82     }
       
    83     return HbWidget::itemChange( change, value );
       
    84 }
       
    85 /*!
       
    86     Returns the pointer for \a primitive passed.
       
    87     Will return NULL if \a primitive passed is invalid
       
    88 */
       
    89 QGraphicsItem* HbSelectionDialogMarkWidget::primitive(HbStyle::Primitive primitive) const
       
    90 {
       
    91     switch (primitive) {
       
    92         case HbStyle::P_TumbleView_background:
       
    93             return mBackgroundItem;
       
    94         default:
       
    95             return 0;
       
    96     }
       
    97 }
       
    98 
       
    99 HbSelectionDialogMarkWidget::~HbSelectionDialogMarkWidget()
       
   100 {
       
   101 }
    36 
   102 
    37 HbSelectionDialogContentWidget::HbSelectionDialogContentWidget(HbSelectionDialogPrivate *priv):HbWidget(),
   103 HbSelectionDialogContentWidget::HbSelectionDialogContentWidget(HbSelectionDialogPrivate *priv):HbWidget(),
    38                         mListView(0),d(priv),chkMark(0),lbCounter(0),markWidgetShown(false)
   104                         mListView(0),d(priv),markWidget(0)
    39 {
   105 {
    40     
   106     
    41 }
   107 }
       
   108 
    42 void HbSelectionDialogContentWidget::_q_listWidgetItemSelected(HbListWidgetItem *item)
   109 void HbSelectionDialogContentWidget::_q_listWidgetItemSelected(HbListWidgetItem *item)
    43 {
   110 {
    44 	Q_UNUSED(item)
   111 	Q_UNUSED(item)
    45 }
   112 }
    46 
   113 
    76 
   143 
    77 void HbSelectionDialogContentWidget::updateCounter()
   144 void HbSelectionDialogContentWidget::updateCounter()
    78 {
   145 {
    79 	if(!mListView) return;
   146 	if(!mListView) return;
    80     if(mListView->selectionMode()!= HbAbstractItemView::MultiSelection) return;
   147     if(mListView->selectionMode()!= HbAbstractItemView::MultiSelection) return;
    81     if(chkMark && lbCounter){
   148     if(markWidget){
    82         int totalItems = totalItemCount();
   149         int totalItems = totalItemCount();
    83         int selectedItems = selectedItemCount();
   150         int selectedItems = selectedItemCount();
    84 
   151 		markWidget->updatePrimitives();
    85         lbCounter->setText(QString(QString::number(selectedItems) + "/" + QString::number(totalItems)));
   152         markWidget->lbCounter->setText(QString(QString::number(selectedItems) + "/" + QString::number(totalItems)));
    86         //update checked state of "MarkAll" checkbox 
   153         //update checked state of "MarkAll" checkbox 
    87         if (totalItems > 0 && (selectedItems == totalItems)){
   154         if (totalItems > 0 && (selectedItems == totalItems)){
    88             chkMark->blockSignals(true); //should not call _q_checkboxclicked()
   155             markWidget->chkMark->blockSignals(true); //should not call _q_checkboxclicked()
    89             chkMark->setChecked(true);
   156             markWidget->chkMark->setChecked(true);
    90             chkMark->blockSignals(false);
   157             markWidget->chkMark->blockSignals(false);
    91         }
   158         }
    92         else{
   159         else{
    93             chkMark->blockSignals(true); //should not call _q_checkboxclicked()
   160             markWidget->chkMark->blockSignals(true); //should not call _q_checkboxclicked()
    94             chkMark->setChecked(false);
   161             markWidget->chkMark->setChecked(false);
    95             chkMark->blockSignals(false);
   162             markWidget->chkMark->blockSignals(false);
    96         }
   163         }
    97     }
   164     }
    98 }
   165 }
    99 
   166 
   100 void HbSelectionDialogContentWidget::_q_checkboxclicked(int value)
   167 void HbSelectionDialogContentWidget::_q_checkboxclicked(int value)
   123 }
   190 }
   124 
   191 
   125 void HbSelectionDialogContentWidget::showMarkWidget(bool bShow)
   192 void HbSelectionDialogContentWidget::showMarkWidget(bool bShow)
   126 {
   193 {
   127 	if(bShow){
   194 	if(bShow){
   128 		if(!markWidgetShown){
   195 		if(!markWidget){
   129             chkMark = new HbCheckBox(this);
   196 			markWidget = new HbSelectionDialogMarkWidget(this);
   130             chkMark->setText("Mark All");
   197 			HbStyle::setItemName(markWidget,"markwidget");
   131             lbCounter = new HbTextItem(this);
   198 			setProperty("multiSelection",true);
   132             HbStyle::setItemName(chkMark,"checkbox");
   199             connect(markWidget->chkMark,SIGNAL(stateChanged ( int )),this,SLOT(_q_checkboxclicked(int)));
   133             HbStyle::setItemName(lbCounter,"counter");
       
   134             setProperty("multiSelection",true);
       
   135             connect(chkMark,SIGNAL(stateChanged ( int )),this,SLOT(_q_checkboxclicked(int)));
       
   136             updateCounter();
   200             updateCounter();
   137 			markWidgetShown = true;
       
   138 		}
   201 		}
   139     }
   202     }
   140     else{
   203     else{
   141         delete chkMark;chkMark=0;
   204 		delete markWidget; markWidget = 0;
   142         delete lbCounter;lbCounter=0;
   205 		HbStyle::setItemName(markWidget,"");
   143         HbStyle::setItemName(chkMark,"");
   206 		setProperty("multiSelection",false);
   144         HbStyle::setItemName(lbCounter,"");
       
   145         setProperty("multiSelection",false);
       
   146 		markWidgetShown = false;
       
   147     }
   207     }
   148 }
   208 }
   149 
   209 
   150 void HbSelectionDialogContentWidget::connectSlots()
   210 void HbSelectionDialogContentWidget::connectSlots()
   151 {
   211 {
   190 
   250 
   191 HbSelectionDialogPrivate::HbSelectionDialogPrivate()
   251 HbSelectionDialogPrivate::HbSelectionDialogPrivate()
   192     :HbDialogPrivate()
   252     :HbDialogPrivate()
   193 {
   253 {
   194     bOwnItems = false;
   254     bOwnItems = false;
       
   255 	action1 = action2 = 0;
   195 }
   256 }
   196 
   257 
   197 HbSelectionDialogPrivate::~HbSelectionDialogPrivate()
   258 HbSelectionDialogPrivate::~HbSelectionDialogPrivate()
   198 {
   259 {
   199 	clearItems(bOwnItems);	
   260 	clearItems(bOwnItems);	
   207     bOwnItems = false;
   268     bOwnItems = false;
   208 	mSelectionMode = HbAbstractItemView::SingleSelection;
   269 	mSelectionMode = HbAbstractItemView::SingleSelection;
   209     HbSelectionDialogContentWidget* contentWidget = new HbSelectionDialogContentWidget(this);
   270     HbSelectionDialogContentWidget* contentWidget = new HbSelectionDialogContentWidget(this);
   210     q->setContentWidget(contentWidget);
   271     q->setContentWidget(contentWidget);
   211 
   272 
   212     HbAction *action1=new HbAction(hbTrId("txt_common_button_ok"),q);
       
   213     q->addAction(action1);
       
   214     q->connect(action1,SIGNAL(triggered()),q,SLOT(accept()));
       
   215 
       
   216     HbAction *action2=new HbAction(hbTrId("txt_common_button_cancel"),q);
       
   217     q->addAction(action2);
       
   218     q->connect(action2,SIGNAL(triggered()),q,SLOT(reject()));
       
   219 
       
   220 
       
   221     q->setDismissPolicy(HbPopup::NoDismiss);
   273     q->setDismissPolicy(HbPopup::NoDismiss);
   222     q->setTimeout(HbPopup::NoTimeout);      
   274     q->setTimeout(HbPopup::NoTimeout);      
   223     q->setModal(true);
   275     q->setModal(true);
       
   276 	showActions(mSelectionMode);
       
   277 }
       
   278 
       
   279 void HbSelectionDialogPrivate::showActions(HbAbstractItemView::SelectionMode selectionMode)
       
   280 {
       
   281 	Q_Q(HbSelectionDialog);
       
   282 	if(selectionMode == HbAbstractItemView::SingleSelection){
       
   283 		delete action1;action1=0;delete action2;action2=0;
       
   284 		action1=new HbAction(hbTrId("txt_common_button_cancel"),q);
       
   285 		q->addAction(action1);
       
   286 		q->connect(action1,SIGNAL(triggered()),q,SLOT(reject()));
       
   287 	}
       
   288 	else{
       
   289 		delete action1;action1=0;delete action2;action2=0;
       
   290 		action1=new HbAction(hbTrId("txt_common_button_ok"),q);
       
   291 		q->addAction(action1);
       
   292 		q->connect(action1,SIGNAL(triggered()),q,SLOT(accept()));
       
   293 		action2=new HbAction(hbTrId("txt_common_button_cancel"),q);
       
   294 		q->addAction(action2);
       
   295 		q->connect(action2,SIGNAL(triggered()),q,SLOT(reject()));
       
   296 	}
   224 }
   297 }
   225 
   298 
   226 void HbSelectionDialogPrivate::setSelectionMode(HbAbstractItemView::SelectionMode mode)
   299 void HbSelectionDialogPrivate::setSelectionMode(HbAbstractItemView::SelectionMode mode)
   227 {
   300 {
   228     Q_Q(HbSelectionDialog);
   301     Q_Q(HbSelectionDialog);
   239 			if(mode == HbAbstractItemView::MultiSelection)
   312 			if(mode == HbAbstractItemView::MultiSelection)
   240 				cWidget->showMarkWidget(true);    
   313 				cWidget->showMarkWidget(true);    
   241 			else
   314 			else
   242 				cWidget->showMarkWidget(false);    
   315 				cWidget->showMarkWidget(false);    
   243 		}
   316 		}
       
   317 		showActions(mSelectionMode);
   244     }
   318     }
   245     break;
   319     break;
   246     case HbAbstractItemView::NoSelection:
   320     case HbAbstractItemView::NoSelection:
   247 	break;
   321 	break;
   248 	}
   322 	}