src/hbwidgets/popups/hbselectiondialog_p.cpp
changeset 23 e6ad4ef83b23
parent 21 4633027730f5
child 28 b7da29130b0e
--- a/src/hbwidgets/popups/hbselectiondialog_p.cpp	Wed Aug 18 10:05:37 2010 +0300
+++ b/src/hbwidgets/popups/hbselectiondialog_p.cpp	Thu Sep 02 20:44:51 2010 +0300
@@ -36,12 +36,12 @@
 #include <hbstyleoption_p.h>
 
 HbSelectionDialogMarkWidget::HbSelectionDialogMarkWidget(QGraphicsItem *parent):HbWidget(parent),mBackgroundItem(0){
-	chkMark = new HbCheckBox(this);
-	chkMark->setText(hbTrId("txt_common_list_mark_all_items"));
-	lbCounter = new HbTextItem(this);
-	HbStyle::setItemName(chkMark,"checkbox");
-	HbStyle::setItemName(lbCounter,"counter");
-	createPrimitives();
+    chkMark = new HbCheckBox(this);
+    chkMark->setText(hbTrId("txt_common_list_mark_all_items"));
+    lbCounter = new HbTextItem(this);
+    HbStyle::setItemName(chkMark,"checkbox");
+    HbStyle::setItemName(lbCounter,"counter");
+    createPrimitives();
 }
 
 void HbSelectionDialogMarkWidget::createPrimitives()
@@ -69,7 +69,7 @@
 {
     switch ( change ) {
         case ItemVisibleHasChanged: {
-			updatePrimitives( );
+            updatePrimitives( );
             }
             break;
 
@@ -108,13 +108,13 @@
 
 void HbSelectionDialogContentWidget::_q_listWidgetItemSelected(HbListWidgetItem *item)
 {
-	Q_UNUSED(item)
+    Q_UNUSED(item)
 }
 
 void HbSelectionDialogContentWidget::_q_listItemSelected(QModelIndex index)
 {
     Q_UNUSED(index)
-	if(mListView->selectionMode()== HbAbstractItemView::SingleSelection){
+    if(mListView->selectionMode()== HbAbstractItemView::SingleSelection){
        d->close();
     }
     updateCounter();
@@ -123,32 +123,44 @@
 int HbSelectionDialogContentWidget::selectedItemCount() const
 {
     int selectedItems = 0;
-	if(mListView){
-		QItemSelectionModel* selectionModel = mListView->selectionModel();
-		if(selectionModel){
-			selectedItems = selectionModel->selectedRows().count();
-		}
-	}
+    if(mListView){
+        QItemSelectionModel* selectionModel = mListView->selectionModel();
+        if(selectionModel){
+            selectedItems = selectionModel->selectedRows().count();
+        }
+    }
     return selectedItems;
 }
 
 int HbSelectionDialogContentWidget::totalItemCount() const
 {
-	int nCount = 0;
-	if(mListView && mListView->model()){
-		nCount = mListView->model()->rowCount();
-	}
-	return nCount;
+    int nCount = 0;
+    if(mListView && mListView->model()){
+        nCount = mListView->model()->rowCount();
+    }
+    return nCount;
 }
 
+void HbSelectionDialogContentWidget::setModel(QAbstractItemModel* model)
+{
+    if(mListView){
+        HbListWidget* mView = qobject_cast<HbListWidget*>(mListView);
+        if(!mView){ //can not set model on HbListWidget
+            QObject::disconnect(mListView->selectionModel(),SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),this,SLOT(_q_selectionChanged(const QItemSelection&, const QItemSelection&)));
+            mListView->setModel(model);
+            if(model)
+                QObject::connect(mListView->selectionModel(),SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),this,SLOT(_q_selectionChanged(const QItemSelection&, const QItemSelection&)));
+        }
+    }
+}
 void HbSelectionDialogContentWidget::updateCounter()
 {
-	if(!mListView) return;
+    if(!mListView) return;
     if(mListView->selectionMode()!= HbAbstractItemView::MultiSelection) return;
     if(markWidget){
         int totalItems = totalItemCount();
         int selectedItems = selectedItemCount();
-		markWidget->updatePrimitives();
+        markWidget->updatePrimitives();
         markWidget->lbCounter->setText(QString(QString::number(selectedItems) + "/" + QString::number(totalItems)));
         //update checked state of "MarkAll" checkbox 
         if (totalItems > 0 && (selectedItems == totalItems)){
@@ -191,21 +203,24 @@
 
 void HbSelectionDialogContentWidget::showMarkWidget(bool bShow)
 {
-	if(bShow){
-		if(!markWidget){
-			markWidget = new HbSelectionDialogMarkWidget(this);
-			HbStyle::setItemName(markWidget,"markwidget");
-			setProperty("multiSelection",true);
-            connect(markWidget->chkMark,SIGNAL(stateChanged ( int )),this,SLOT(_q_checkboxclicked(int)));
-			repolish();
-            updateCounter();
-		}
+    if(bShow){
+        if(!markWidget){
+            markWidget = new HbSelectionDialogMarkWidget(this);
+        }
+        else{
+            markWidget->show();
+        }
+        HbStyle::setItemName(markWidget,"markwidget");
+        connect(markWidget->chkMark,SIGNAL(stateChanged ( int )),this,SLOT(_q_checkboxclicked(int)));
+        repolish();
+        updateCounter();
     }
     else{
-		delete markWidget; markWidget = 0;
-		HbStyle::setItemName(markWidget,"");
-		setProperty("multiSelection",false);
-		repolish();
+        if(markWidget){
+            HbStyle::setItemName(markWidget,"");
+            markWidget->hide();
+            repolish();
+        }
     }
 }
 
@@ -216,60 +231,73 @@
     QObject::connect(mListView->model(),SIGNAL(rowsInserted(const QModelIndex& ,int,int)),this,SLOT(modelChanged(const QModelIndex&,int,int)));
 }
 
+void HbSelectionDialogContentWidget::_q_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
+{
+    Q_UNUSED(selected);
+    Q_UNUSED(deselected);
+    updateCounter();
+}
+
 void HbSelectionDialogContentWidget::modelChanged(const QModelIndex &parent, int start,int end)
 {
-	Q_UNUSED(parent);
-	Q_UNUSED(start);
-	Q_UNUSED(end);
-	updateCounter();
+    Q_UNUSED(parent);
+    Q_UNUSED(start);
+    Q_UNUSED(end);
+    updateCounter();
 }
 
 void HbSelectionDialogContentWidget::createListWidget()
 {
-	if(mListView){
-		HbListWidget* mView = qobject_cast<HbListWidget*>(mListView);
-		if(!mView){
-			delete mListView;
-			mListView = new HbListWidget(this);
-			HbStyle::setItemName(mListView, "list");
-			connectSlots();
-		}
-	}
-	else{
-			mListView = new HbListWidget(this);
-			HbStyle::setItemName(mListView, "list");
-			connectSlots();
-	}
+    if(mListView){
+        QObject::disconnect(mListView->selectionModel(),SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),this,SLOT(_q_selectionChanged(const QItemSelection&, const QItemSelection&)));
+        HbListWidget* mView = qobject_cast<HbListWidget*>(mListView);
+        if(!mView){
+            delete mListView;
+            mListView = new HbListWidget(this);
+            HbStyle::setItemName(mListView, "list");
+            connectSlots();
+            repolish();
+        }
+    }
+    else{
+            mListView = new HbListWidget(this);
+            HbStyle::setItemName(mListView, "list");
+            connectSlots();
+            repolish();
+    }
+    QObject::connect(mListView->selectionModel(),SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)),this,SLOT(_q_selectionChanged(const QItemSelection&, const QItemSelection&)));
 }
 
 void HbSelectionDialogContentWidget::createListView()
 {
-	if(mListView){
-		HbListView* mView = qobject_cast<HbListView*>(mListView);
-		if(!mView){
-			delete mListView;
-			mListView = new HbListView(this);
-			HbStyle::setItemName(mListView, "list");
-			connectSlots();
-		}
-	}
-	else{
-			mListView = new HbListView(this);
-			HbStyle::setItemName(mListView, "list");
-			connectSlots();
-	}
+    if(mListView){
+        HbListWidget* mView = qobject_cast<HbListWidget*>(mListView);
+        if(mView){
+            delete mListView;
+            mListView = new HbListView(this);
+            HbStyle::setItemName(mListView, "list");
+            connectSlots();
+            repolish();
+        }
+    }
+    else{
+            mListView = new HbListView(this);
+            HbStyle::setItemName(mListView, "list");
+            connectSlots();
+            repolish();
+    }
 }
 
 HbSelectionDialogPrivate::HbSelectionDialogPrivate()
     :HbDialogPrivate()
 {
     bOwnItems = false;
-	action1 = action2 = 0;
+    action1 = action2 = 0;
 }
 
 HbSelectionDialogPrivate::~HbSelectionDialogPrivate()
 {
-	clearItems(bOwnItems);	
+    clearItems(bOwnItems);    
 }
 
 void HbSelectionDialogPrivate::init()
@@ -278,14 +306,14 @@
     Q_Q(HbSelectionDialog);
 
     bOwnItems = false;
-	mSelectionMode = HbAbstractItemView::SingleSelection;
+    mSelectionMode = HbAbstractItemView::SingleSelection;
     HbSelectionDialogContentWidget* contentWidget = new HbSelectionDialogContentWidget(this);
     q->setContentWidget(contentWidget);
 
     q->setDismissPolicy(HbPopup::NoDismiss);
     q->setTimeout(HbPopup::NoTimeout);      
     q->setModal(true);
-	showActions(mSelectionMode);
+    showActions(mSelectionMode);
 }
 
 void HbSelectionDialogPrivate::showActions(HbAbstractItemView::SelectionMode selectionMode)
@@ -332,49 +360,49 @@
         HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
         if(cWidget && cWidget->mListView){
             cWidget->mListView->setSelectionMode(mSelectionMode);
-			if(mode == HbAbstractItemView::MultiSelection)
-				cWidget->showMarkWidget(true);    
-			else
-				cWidget->showMarkWidget(false);    
-		}
-		showActions(mSelectionMode);
+            if(mode == HbAbstractItemView::MultiSelection)
+                cWidget->showMarkWidget(true);    
+            else
+                cWidget->showMarkWidget(false);    
+        }
+        showActions(mSelectionMode);
     }
     break;
     case HbAbstractItemView::NoSelection:
-	break;
-	}
+    break;
+    }
 }
 
 
 void HbSelectionDialogPrivate::clearItems(bool keepItems)
 {
-	Q_Q(HbSelectionDialog);
-	HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
-	if(cWidget){
-		HbListWidget* mWidget = qobject_cast<HbListWidget*>(cWidget->mListView);
-		if(mWidget){
-				if(keepItems){
-				int nRows = 0;
-				QAbstractItemModel* itemModel = mWidget->model();
-				if(itemModel){
-					nRows = itemModel->rowCount();
-					while(nRows){
-						mWidget->takeItem(0);
-						nRows = itemModel->rowCount();
-					}
-				}
-			}
-			else{
-				mWidget->clear();
-			}
-			bOwnItems = false;
-			return;
-		}
-		HbListView* mView = qobject_cast<HbListView*>(cWidget->mListView);
-		if(mView){
-			cWidget->mListView->setModel(0);
-		}
-	}
+    Q_Q(HbSelectionDialog);
+    HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
+    if(cWidget){
+        HbListWidget* mWidget = qobject_cast<HbListWidget*>(cWidget->mListView);
+        if(mWidget){
+                if(keepItems){
+                int nRows = 0;
+                QAbstractItemModel* itemModel = mWidget->model();
+                if(itemModel){
+                    nRows = itemModel->rowCount();
+                    while(nRows){
+                        mWidget->takeItem(0);
+                        nRows = itemModel->rowCount();
+                    }
+                }
+            }
+            else{
+                mWidget->clear();
+            }
+            bOwnItems = false;
+            return;
+        }
+        HbListView* mView = qobject_cast<HbListView*>(cWidget->mListView);
+        if(mView){
+            cWidget->setModel(0);
+        }
+    }
 }
 
 QList<HbListWidgetItem*> HbSelectionDialogPrivate::widgetItems() const
@@ -406,16 +434,16 @@
     if(!cWidget) return;
     
     int nRows = 0;
-	cWidget->createListWidget();
-	setSelectionMode(mSelectionMode);
+    cWidget->createListWidget();
+    setSelectionMode(mSelectionMode);
     if(cWidget->mListView){
         int count = items.size();
-		if(count > 0) clearItems(bOwnItems); //Clear the existing items first
+        if(count > 0) clearItems(bOwnItems); //Clear the existing items first
         for (int i = 0; i < count; ++i) {
             HbListWidgetItem* modelItem = new HbListWidgetItem();
             QString str = items.at(i);
             modelItem->setText(str);
-			HbListWidget* widget = (HbListWidget*)cWidget->mListView;
+            HbListWidget* widget = (HbListWidget*)cWidget->mListView;
             widget->addItem(modelItem);
             
             QAbstractItemModel* itemModel = cWidget->mListView->model();
@@ -451,11 +479,10 @@
 
     HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
     if(cWidget){
-		cWidget->createListView();
-		setSelectionMode(mSelectionMode);
-        cWidget->mListView->setModel(model); 
-		cWidget->updateCounter();
-		cWidget->connectSlots();
+        cWidget->createListView();
+        setSelectionMode(mSelectionMode);
+        cWidget->setModel(model); 
+        cWidget->updateCounter();
     }
 }
 
@@ -465,12 +492,12 @@
 
     HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
     if(cWidget){
-		cWidget->createListWidget();
-		setSelectionMode(mSelectionMode);
+        cWidget->createListWidget();
+        setSelectionMode(mSelectionMode);
         if(cWidget->mListView){
-			HbListWidget* widget = (HbListWidget*)cWidget->mListView;
+            HbListWidget* widget = (HbListWidget*)cWidget->mListView;
             int count = items.count();
-			if(count > 0) clearItems(bOwnItems); //Clear the existing items first
+            if(count > 0) clearItems(bOwnItems); //Clear the existing items first
             for(int i = 0; i < count; i++){
                 widget->addItem(items[i]);
             }
@@ -478,7 +505,7 @@
             
         }
         bOwnItems = transferOwnership;
-		cWidget->updateCounter();
+        cWidget->updateCounter();
     }
 }
 
@@ -488,7 +515,7 @@
     
     HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
     if(cWidget && cWidget->mListView){
-		return cWidget->mListView->model();
+        return cWidget->mListView->model();
     }
     return 0;
 }
@@ -510,16 +537,16 @@
     QItemSelectionModel *model = 0;
     model = selectionModel();
     if(model){
-		model->clearSelection();
+        model->clearSelection();
         Q_FOREACH(QVariant i,items) {
                 model->select(model->model()->index(i.toInt(),0),
                     QItemSelectionModel::Select);
         }
-		HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
-		if(cWidget){
-			cWidget->updateCounter();
-		}
-	}
+        HbSelectionDialogContentWidget* cWidget = qobject_cast<HbSelectionDialogContentWidget*>(q->contentWidget());
+        if(cWidget){
+            cWidget->updateCounter();
+        }
+    }
 }
 
 QList<QVariant> HbSelectionDialogPrivate::selectedItems() const
@@ -554,6 +581,6 @@
 void HbSelectionDialogPrivate::close()
 {
     Q_Q(HbSelectionDialog);
-	q->accept(); //emit the signal
+    q->accept(); //emit the signal
 }