From 0b7ddc4f1ddddb0873ba035c47675f0366bfb5ed Mon Sep 17 00:00:00 2001
From: Rashad Kanavath <rashad.kanavath@c-s.fr>
Date: Thu, 7 May 2015 19:17:22 +0200
Subject: [PATCH] BUG: removing items and adding again clears previous
 selection. mantis #1025

---
 .../otbWrapperQtWidgetListViewParameter.cxx   | 33 ++++++++++++-------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx
index 93a7b04f21..bdc9eba455 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx
@@ -37,22 +37,33 @@ QtWidgetListViewParameter::~QtWidgetListViewParameter()
 
 void QtWidgetListViewParameter::DoUpdateGUI()
 {
-  // remove all the items set before
-  while(m_ListView->takeItem(0))
+  size_t numSelected = m_ListViewParam->GetSelectedItems().size();
+
+  //Clear m_ListView add re-add choices only if no items selected.
+  //Otherwise results in mantis #1025
+
+  if(numSelected < 1)
     {
-    m_ListView->removeItemWidget( m_ListView->takeItem(0) );
+    while(m_ListView->takeItem(0))
+      {
+      m_ListView->removeItemWidget( m_ListView->takeItem(0) );
+      }
+
+    for (unsigned int i = 0; i < m_ListViewParam->GetNbChoices(); ++i)
+      {
+      // Add listBox items
+      QString key = m_ListViewParam->GetChoiceKey(i).c_str();
+      m_ListView->addItem( key);
+      }
     }
 
-  for (unsigned int i = 0; i < m_ListViewParam->GetNbChoices(); ++i)
+  //I can't find any reason for calling m_ListView->setCurrentRow(value) in this
+  //case because QListWidget is a MultiSelection widget.
+  if (m_ListView->selectionMode() == QAbstractItemView::SingleSelection)
     {
-    // Add listBox items
-    QString key = m_ListViewParam->GetChoiceKey(i).c_str();
-    m_ListView->addItem( key);
+    unsigned int value = m_ListViewParam->GetValue( );
+    m_ListView->setCurrentRow(value);
     }
-
-  // Update the combobox value
-  unsigned int value = m_ListViewParam->GetValue( );
-  m_ListView->setCurrentRow(value);
 }
 
 void QtWidgetListViewParameter::DoCreateWidget()
-- 
GitLab