src/hbwidgets/popups/hbselectiondialog_p.cpp
changeset 7 923ff622b8b9
parent 6 c3690ec91ef8
child 21 4633027730f5
child 34 ed14f46c0e55
--- 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 <QtDebug>
 #include <hbcheckbox.h>
 #include <hbaction.h>
+#include <hbstyleoption_p.h>
+
+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: