From 59692c86077801b2b4b912ee1b39358604f714c9 Mon Sep 17 00:00:00 2001
From: Antoine Regimbeau <antoine.regimbeau@c-s.fr>
Date: Thu, 31 May 2018 11:02:28 +0200
Subject: [PATCH] BUG: correction of layer delete bug

---
 .../include/mvdStackedLayerModel.h            |  2 +-
 .../src/mvdStackedLayerModel.cxx              |  2 +-
 .../include/mvdLayerStackItemModel.h          |  2 +-
 .../include/mvdLayerStackWidget.h             |  5 ++-
 .../src/mvdLayerStackController.cxx           |  7 ++--
 .../src/mvdLayerStackItemModel.cxx            | 21 ++----------
 .../MonteverdiGui/src/mvdLayerStackWidget.cxx | 32 +++++++++++++------
 7 files changed, 36 insertions(+), 35 deletions(-)

diff --git a/Modules/Visualization/MonteverdiCore/include/mvdStackedLayerModel.h b/Modules/Visualization/MonteverdiCore/include/mvdStackedLayerModel.h
index 2d8a7d363c..d71632f878 100644
--- a/Modules/Visualization/MonteverdiCore/include/mvdStackedLayerModel.h
+++ b/Modules/Visualization/MonteverdiCore/include/mvdStackedLayerModel.h
@@ -212,7 +212,7 @@ public:
 // Public SLOTS.
 public slots:
   void Clear();
-  void Deleting( SizeType index )
+  void Deleting( int index );
   inline void Delete( const KeyType & );
   inline void DeleteCurrent();
   inline void LowerCurrent();
diff --git a/Modules/Visualization/MonteverdiCore/src/mvdStackedLayerModel.cxx b/Modules/Visualization/MonteverdiCore/src/mvdStackedLayerModel.cxx
index 95b465600c..fef681ebea 100644
--- a/Modules/Visualization/MonteverdiCore/src/mvdStackedLayerModel.cxx
+++ b/Modules/Visualization/MonteverdiCore/src/mvdStackedLayerModel.cxx
@@ -220,7 +220,7 @@ StackedLayerModel
 /*****************************************************************************/
 void
 StackedLayerModel
-::Deleting( SizeType index )
+::Deleting( int index )
 {
     // qDebug() << this << "::Delete(" << index << ")";
 
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdLayerStackItemModel.h b/Modules/Visualization/MonteverdiGui/include/mvdLayerStackItemModel.h
index 6156ef2734..87cece8e45 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdLayerStackItemModel.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdLayerStackItemModel.h
@@ -255,7 +255,7 @@ public slots:
 //
 // Signals.
 signals:
-  void LayerDeleting(unsigned int index);
+  void LayerDeletingModel( int index);
 
   /*-[ PROTECTED SECTION ]---------------------------------------------------*/
 
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdLayerStackWidget.h b/Modules/Visualization/MonteverdiGui/include/mvdLayerStackWidget.h
index 84762eaff3..ee0d89303d 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdLayerStackWidget.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdLayerStackWidget.h
@@ -154,13 +154,16 @@ public:
 // Public SLOTS.
 public slots:
 
+//bugfix
+  void OnLayerDeletingWidget( int index );
+
   /*-[ SIGNALS SECTION ]-----------------------------------------------------*/
 
 //
 // Signals.
 signals:
   //bugFix
-  void LayerDeletingWidget( unsigned int index );
+  void LayerDeletingWidget( int index );
   /**
    */
   void CurrentChanged( int );
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdLayerStackController.cxx b/Modules/Visualization/MonteverdiGui/src/mvdLayerStackController.cxx
index 25fad1a7ac..8a368f468d 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdLayerStackController.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdLayerStackController.cxx
@@ -151,13 +151,16 @@ LayerStackController
   );  
 
 //bugfix
+  bool conSuc =
   QObject::connect(
     widget,
-    SIGNAL( LayerDeletingWidget( unsigned int index ) ),
+    SIGNAL( LayerDeletingWidget( int ) ),
     // to:
     model,
     SLOT( Deleting( int ) )
   );
+  std::cout<<"LayerDeletingWidget connect with Deleting : "
+  <<conSuc<<std::endl;
 
   QObject::connect(
     widget,
@@ -251,7 +254,7 @@ LayerStackController
   QObject::disconnect(
     model,
     SIGNAL( CurrentChanged( size_t ) ),
-    // from:
+    // from:deletin
     this,
     SLOT( OnStackedLayerCurrentChanged( size_t ) )
   );
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdLayerStackItemModel.cxx b/Modules/Visualization/MonteverdiGui/src/mvdLayerStackItemModel.cxx
index 1d7c77e8f3..3b2e07c1f8 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdLayerStackItemModel.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdLayerStackItemModel.cxx
@@ -108,6 +108,7 @@ LayerStackItemModel
   QAbstractItemModel( p ),
   m_StackedLayerModel( NULL )
 {
+  std::cout<<"Construction of ItemModel : "<<this<<std::endl;
   // QObject::connect(
   //   this,
   //   SIGNAL( modelAboutToBeReset() ),
@@ -788,34 +789,16 @@ LayerStackItemModel
 
   if( p.isValid() || count!=1 )
     return false;
-  
-  LayerStackWidget * widget = GetWidget< LayerStackWidget >();
-  assert( widget!=NULL );
-  QObject::disconnect(
-    widget,
-    SIGNAL( SelectionChanged( int ) ),
-    // from:
-    this,
-    SLOT( OnSelectionChanged( int ) )
-  );
 
   beginRemoveRows( p, row, row + count - 1 );
   {
   // StackedLayerModel has already been shortened.
-  emit LayerDeleting(row);
+  emit LayerDeletingModel(row);
   // TODO: Release additional row data here.
   }
 
   endRemoveRows();
 
-  QObject::connect(
-    widget,
-    SIGNAL( SelectionChanged( int ) ),
-    // from:
-    this,
-    SLOT( OnSelectionChanged( int ) )
-  );
-
   return true;
 }
 
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdLayerStackWidget.cxx b/Modules/Visualization/MonteverdiGui/src/mvdLayerStackWidget.cxx
index 8d0d24d63e..85083945ec 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdLayerStackWidget.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdLayerStackWidget.cxx
@@ -113,6 +113,7 @@ LayerStackWidget
     SLOT( OnCurrentRowChanged( const QModelIndex &, const QModelIndex & ) )
     );
 
+bool test =
   QObject::connect(
     m_UI->treeView->selectionModel(),
     SIGNAL( selectionChanged( const QItemSelection &,  const QItemSelection & ) ),
@@ -120,16 +121,7 @@ LayerStackWidget
     this,
     SLOT( OnSelectionChanged( const QItemSelection &, const QItemSelection & ) )
     );
-  
-  /////// Bugfix  
-  QObject::connect(
-    m_UI->treeView->selectionModel(),
-    SIGNAL( LayerDeleting(unsigned int index) ),
-    // to:
-    this,
-    SIGNAL( LayerDeletingWidget(unsigned int index) )
-    );
-  ///////////////
+  std::cout<<"An other conncetion worked : "<<test<<std::endl;
 
   QObject::connect(
     m_UI->topButton,
@@ -202,8 +194,28 @@ LayerStackWidget
     this,
     SIGNAL( ResetEffectsButtonClicked() )
   );
+
+  /////// Bugfix  
+  bool connectionBugFix = QObject::connect(
+    this->GetItemModel(),
+    SIGNAL( LayerDeletingModel(int) ),
+    // to:
+    this,
+    SLOT( OnLayerDeletingWidget(int) )
+    );
+  std::cout<<"LayerDeletingModel connected with OnLayerDeletingWidget : "
+  <<connectionBugFix<<std::endl;
+  std::cout<<"Model adress : "<<m_UI->treeView->selectionModel()<<std::endl;
+  ///////////////
 }
 
+void 
+LayerStackWidget
+::OnLayerDeletingWidget(int index)
+{
+  std::cout<<"In widget, sending LayerDeletingSignal"<<std::endl;
+  emit LayerDeletingWidget(index);
+}
 /*******************************************************************************/
 LayerStackWidget
 ::~LayerStackWidget()
-- 
GitLab