Salome HOME
Fixing of IPAL19489 (QT4 porting: loading pattern is impossible).
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_GroupDlg.cxx
index de1f41994a8f92a21ed4ce1a2a82faefdc29723f..ff0c476c5c70fb800a686bfac4f487f321ef1bdb 100644 (file)
@@ -316,6 +316,8 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
 
   QLabel* aColorLab = new QLabel(tr("SMESH_CHECK_COLOR"), aColorBox );
   myColorBtn = new QtxColorButton(aColorBox);
+  myColorBtn->setSizePolicy( QSizePolicy::MinimumExpanding, 
+                            myColorBtn->sizePolicy().verticalPolicy() );
 
   aColorBoxLayout->addWidget(aColorLab);
   aColorBoxLayout->addWidget(myColorBtn);
@@ -930,7 +932,7 @@ void SMESHGUI_GroupDlg::onListSelectionChanged()
 void SMESHGUI_GroupDlg::onObjectSelectionChanged()
 {
   if ( myIsBusy || !isEnabled()) return;
-  if (myCurrentLineEdit == myGeomGroupLine && !myGeomGroupBtn->isDown()) return;
+  if (myCurrentLineEdit == myGeomGroupLine && !myGeomGroupBtn->isChecked()) return;
 
   myIsBusy = true;
 
@@ -956,8 +958,8 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
       myGeomObjects = new GEOM::ListOfGO();
       myGeomObjects->length(0);
 
-      if (myGeomGroupBtn->isDown())
-       myGeomGroupBtn->setDown(false);
+      if (myGeomGroupBtn->isChecked())
+       myGeomGroupBtn->setChecked(false);
       if (!myCreate)
         myName->setText("");
 
@@ -1144,12 +1146,21 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
        aNbItems = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aListStr);
       }
       if (aNbItems > 0) {
+       QListWidgetItem* anItem;
+       QList<QListWidgetItem*> listItemsToSel;
        QStringList anElements = aListStr.split(" ", QString::SkipEmptyParts);
        for (QStringList::iterator it = anElements.begin(); it != anElements.end(); ++it) {
          QList<QListWidgetItem*> found = myElements->findItems(*it, Qt::MatchExactly);
-         QListWidgetItem* anItem;
-         foreach(anItem, found) anItem->setSelected(true);
+         foreach(anItem, found)
+           if (!anItem->isSelected())
+             listItemsToSel.push_back(anItem);
        }
+       bool blocked = myElements->signalsBlocked();
+       myElements->blockSignals(true);
+       foreach(anItem, listItemsToSel) anItem->setSelected(true);
+       myElements->blockSignals(blocked);
+       onListSelectionChanged();
+       listItemsToSel.clear();
       }
     }
   }
@@ -1235,7 +1246,7 @@ void SMESHGUI_GroupDlg::onSelectGeomGroup(bool on)
     setSelectionMode(8);
   }
   else {
-    myGeomGroupBtn->setDown(false);
+    myGeomGroupBtn->setChecked(false);
     myGeomObjects->length(0);
     myGeomGroupLine->setText("");
     myCurrentLineEdit = 0;
@@ -1355,6 +1366,8 @@ void SMESHGUI_GroupDlg::onAdd()
     mySelector->SetSelectionMode(ActorSelection);
   }
 
+  QListWidgetItem* anItem = 0;
+  QList<QListWidgetItem*> listItemsToSel;
 
   if (myCurrentLineEdit == 0) {
     //if (aNbSel != 1) { myIsBusy = false; return; }
@@ -1370,16 +1383,24 @@ void SMESHGUI_GroupDlg::onAdd()
       QStringList anElements = aListStr.split(" ", QString::SkipEmptyParts);
       for (QStringList::iterator it = anElements.begin(); it != anElements.end(); ++it) {
        QList<QListWidgetItem*> found = myElements->findItems(*it, Qt::MatchExactly);
-       QListWidgetItem* anItem;
        if (found.count() == 0) {
          anItem = new QListWidgetItem(*it);
          myElements->addItem(anItem);
-         anItem->setSelected(true);
+         if (!anItem->isSelected())
+           listItemsToSel.push_back(anItem);
        }
        else {
-         foreach(anItem, found) anItem->setSelected(true);
+         foreach(anItem, found)
+           if (!anItem->isSelected())
+             listItemsToSel.push_back(anItem);
        }
       }
+      bool blocked = myElements->signalsBlocked();
+      myElements->blockSignals(true);
+      foreach(anItem, listItemsToSel) anItem->setSelected(true);
+      myElements->blockSignals(blocked);
+      onListSelectionChanged();
+      listItemsToSel.clear();
     }
   } else if (myCurrentLineEdit == mySubMeshLine) {
     //SALOME_ListIteratorOfListIO anIt (mySelectionMgr->StoredIObjects());
@@ -1400,16 +1421,24 @@ void SMESHGUI_GroupDlg::onAdd()
             for (int i = 0; i < k; i++) {
               QString aText = QString::number(anElements[i]);
               QList<QListWidgetItem*> found = myElements->findItems(aText, Qt::MatchExactly);
-             QListWidgetItem* anItem = 0;
               if (found.count() == 0) {
                 anItem = new QListWidgetItem(aText);
                 myElements->addItem(anItem);
-               anItem->setSelected(true);
+               if (!anItem->isSelected())
+                 listItemsToSel.push_back(anItem);
               }
              else {
-               foreach(anItem, found) anItem->setSelected(true);
+               foreach(anItem, found)
+                 if (!anItem->isSelected())
+                   listItemsToSel.push_back(anItem);
              }
             }
+           bool blocked = myElements->signalsBlocked();
+           myElements->blockSignals(true);
+           foreach(anItem, listItemsToSel) anItem->setSelected(true);
+           myElements->blockSignals(blocked);
+           onListSelectionChanged();
+           listItemsToSel.clear();
           }
           catch (const SALOME::SALOME_Exception& ex) {
             SalomeApp_Tools::QtCatchCorbaException(ex);
@@ -1438,16 +1467,24 @@ void SMESHGUI_GroupDlg::onAdd()
          for (int i = 0; i < k; i++) {
            QString aText = QString::number(anElements[i]);
            QList<QListWidgetItem*> found = myElements->findItems(aText, Qt::MatchExactly);
-           QListWidgetItem* anItem = 0;
            if (found.count() == 0) {
              anItem = new QListWidgetItem(aText);
              myElements->addItem(anItem);
-             anItem->setSelected(true);
+             if (!anItem->isSelected())
+               listItemsToSel.push_back(anItem);
            }
            else {
-             foreach(anItem, found) anItem->setSelected(true);
+             foreach(anItem, found)
+               if (!anItem->isSelected())
+                 listItemsToSel.push_back(anItem);
            }
          }
+         bool blocked = myElements->signalsBlocked();
+         myElements->blockSignals(true);
+         foreach(anItem, listItemsToSel) anItem->setSelected(true);
+         myElements->blockSignals(blocked);
+         onListSelectionChanged();
+         listItemsToSel.clear();
        }
       }
     }
@@ -1488,16 +1525,24 @@ void SMESHGUI_GroupDlg::onAdd()
       for (int i = 0; i < k; i++) {
        QString aText = QString::number(anElements[i]);
        QList<QListWidgetItem*> found = myElements->findItems(aText, Qt::MatchExactly);
-       QListWidgetItem* anItem = 0;
        if (found.count() == 0) {
          anItem = new QListWidgetItem(aText);
          myElements->addItem(anItem);
-         anItem->setSelected(true);
+         if (!anItem->isSelected())
+           listItemsToSel.push_back(anItem);
        }
        else {
-         foreach(anItem, found) anItem->setSelected(true);
+         foreach(anItem, found)
+           if (!anItem->isSelected())
+             listItemsToSel.push_back(anItem);
        }
       }
+      bool blocked = myElements->signalsBlocked();
+      myElements->blockSignals(true);
+      foreach(anItem, listItemsToSel) anItem->setSelected(true);
+      myElements->blockSignals(blocked);
+      onListSelectionChanged();
+      listItemsToSel.clear();
     }
 
     //VSR: mySelectGeomGroup->setChecked(false);
@@ -1636,11 +1681,19 @@ void SMESHGUI_GroupDlg::onSort()
     std::sort(anArray.begin(), anArray.end());
     //    anArray.sort();
     myElements->clear();
+    QListWidgetItem* anItem;
+    QList<QListWidgetItem*> listItemsToSel;
     for (i = 0; i < k; i++) {
-      QListWidgetItem* anItem = new QListWidgetItem(QString::number(anArray[i]));
+      anItem = new QListWidgetItem(QString::number(anArray[i]));
       myElements->addItem(anItem);
-      anItem->setSelected(aSelected.contains(anArray[i]));
+      if (aSelected.contains(anArray[i]))
+       listItemsToSel.push_back(anItem);
     }
+    bool blocked = myElements->signalsBlocked();
+    myElements->blockSignals(true);
+    foreach(anItem, listItemsToSel) anItem->setSelected(true);
+    myElements->blockSignals(blocked);
+    listItemsToSel.clear();
     myIsBusy = false;
   }
 }