From 8547990c461fb654281ba3821a360e371ff527a0 Mon Sep 17 00:00:00 2001
From: Otmane Lahlou <otmane.lahlou@c-s.fr>
Date: Mon, 30 Mar 2009 10:06:29 +0200
Subject: [PATCH] ENH : progress in ImageViewerManager

---
 .../Model/otbImageViewerManagerModel.cxx      |  41 +-
 .../Model/otbImageViewerManagerModel.h        |  49 +-
 .../View/otbImageViewerManagerViewGUI.cxx     | 437 +++++++++++++-----
 .../View/otbImageViewerManagerViewGUI.h       |  57 +--
 .../View/otbImageViewerManagerViewGroup.fl    |  38 +-
 5 files changed, 431 insertions(+), 191 deletions(-)

diff --git a/ViewerManager/Model/otbImageViewerManagerModel.cxx b/ViewerManager/Model/otbImageViewerManagerModel.cxx
index 61fcf621f6..12032c5199 100644
--- a/ViewerManager/Model/otbImageViewerManagerModel.cxx
+++ b/ViewerManager/Model/otbImageViewerManagerModel.cxx
@@ -32,15 +32,9 @@ ImageViewerManagerModel::Pointer ImageViewerManagerModel::Instance = NULL;
 
 ImageViewerManagerModel::ImageViewerManagerModel()
 {
-  /* Generate image layers*/
-  m_VisuGenerator = LayerGeneratorType::New();
-
-  m_PixelModel = PixelDescriptionModelType::New();
-  
   //Set all the boolean to false
   m_HasChangedChannelOrder = false;
   m_HasImageOpened = false;
-  
 }
 
 ImageViewerManagerModel
@@ -76,35 +70,46 @@ ImageViewerManagerModel
   reader->GenerateOutputInformation();
       
   /** Generate the layer*/
-  m_VisuGenerator->SetImage(reader->GetOutput());
-  m_VisuGenerator->GenerateLayer();
-  StandardRenderingFunctionType::Pointer  rendrerFuntion  = m_VisuGenerator->GetDefaultRenderingFunction();
-  
-  
+  LayerGeneratorPointerType visuGenerator = LayerGeneratorType::New();
+  visuGenerator->SetImage(reader->GetOutput());
+  visuGenerator->GenerateLayer();
+  StandardRenderingFunctionType::Pointer  rendrerFuntion  = visuGenerator->GetDefaultRenderingFunction();
+    
   /** Rendering image*/
   VisuModelPointerType rendering = VisuModelType::New();
-  rendering->AddLayer(m_VisuGenerator->GetLayer());
+  rendering->AddLayer(visuGenerator->GetLayer());
   rendering->Update();
 
   /** View*/
   VisuViewPointerType visuView = this->BuiltVisu(rendering);
+
+  /** Build the pixelDescription View*/
+  PixelDescriptionViewType::Pointer pixelView = PixelDescriptionViewType::New();
+  PixelDescriptionModelPointerType pixelModel = PixelDescriptionModelType::New();
+  pixelModel->SetLayers(rendering->GetLayers());
+  pixelView->SetModel(pixelModel);
   
   /** Controller*/
-  WidgetControllerPointerType controller = this->BuiltController(rendering, visuView);
+  WidgetControllerPointerType controller = this->BuiltController(rendering, visuView ,pixelModel );
 
-  /** Finish Cuilting the visu*/
+  /** Finish Builting the visu*/
   visuView->SetController(controller);
+    
+  /** Build the curve Widget */
+  CurvesWidgetType::Pointer   curveWidget = CurvesWidgetType::New();
 
   /** Store all the information in the structure*/
   ObjectsTracked currentComponent;
 
   currentComponent.fileName   = filename;
-  currentComponent.pLayer     = m_VisuGenerator->GetLayer();
+  currentComponent.pLayer     = visuGenerator->GetLayer();
   currentComponent.pReader    = reader;
   currentComponent.pRendering = rendering;
   currentComponent.pVisuView  = visuView;
   currentComponent.pWidgetController = controller;
   currentComponent.pRenderFuntion  = rendrerFuntion;
+  currentComponent.pPixelView   = pixelView;
+  currentComponent.pCurveWidget = curveWidget;
 
   /** Add the the struct in the list*/
   m_ObjectTrackedList.push_back(currentComponent);
@@ -135,7 +140,7 @@ ImageViewerManagerModel
 ImageViewerManagerModel
 ::WidgetControllerPointerType
 ImageViewerManagerModel
-::BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView)
+::BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView, PixelDescriptionModelPointerType pixelModel)
 {
   WidgetControllerPointerType controller = WidgetControllerType::New();
   
@@ -164,13 +169,11 @@ ImageViewerManagerModel
   controller->AddActionHandler(changeScaleHandler);
 
   //Pixel Description Handling
-  m_PixelModel->SetLayers(modelRenderingLayer->GetLayers());
   PixelDescriptionActionHandlerType::Pointer pixelActionHandler = PixelDescriptionActionHandlerType::New();
   pixelActionHandler->SetView(visuView);
-  pixelActionHandler->SetModel(m_PixelModel);
+  pixelActionHandler->SetModel(pixelModel);
   controller->AddActionHandler(pixelActionHandler);
   
-
   return controller;
 }
 
diff --git a/ViewerManager/Model/otbImageViewerManagerModel.h b/ViewerManager/Model/otbImageViewerManagerModel.h
index b2ede91a28..08c516c093 100644
--- a/ViewerManager/Model/otbImageViewerManagerModel.h
+++ b/ViewerManager/Model/otbImageViewerManagerModel.h
@@ -39,8 +39,11 @@ PURPOSE.  See the above copyright notices for more information.
 #include "otbModulusRenderingFunction.h"
 #include "otbPhaseRenderingFunction.h"
 
+
 #include "otbPixelDescriptionModel.h"
+#include "otbPixelDescriptionView.h"
 #include "otbPixelDescriptionActionHandler.h"
+#include "otbCurves2DWidget.h"
 
 
 #include "otbImageView.h" 
@@ -72,25 +75,25 @@ public:
   typedef double                                                          PixelType;
   
   /**  Image Type*/
-  typedef VectorImage<PixelType , 2>                                      ImageType;
-  typedef itk::RGBPixel<unsigned char>                                    RGBPixelType; 
-  typedef Image<RGBPixelType,2>                                           ViewerImageType;
-  typedef ImageType::Pointer                                              ImagePointerType;
+  typedef VectorImage<PixelType , 2>                                                ImageType;
+  typedef itk::RGBPixel<unsigned char>                                              RGBPixelType; 
+  typedef Image<RGBPixelType,2>                                                     ViewerImageType;
+  typedef ImageType::Pointer                                                        ImagePointerType;
 
   /** typedef support for layers */
-  typedef otb::ImageLayer<ImageType>                                      LayerType;
-  typedef LayerType::Pointer                                              LayerPointerType;   
+  typedef otb::ImageLayer<ImageType>                                                 LayerType;
+  typedef LayerType::Pointer                                                         LayerPointerType;   
   
-  typedef otb::ImageLayerGenerator<LayerType>                             LayerGeneratorType;
-  typedef LayerGeneratorType::Pointer                                     LayerGeneratorPointerType;
-  typedef LayerGeneratorType::RenderingFunctionType                       StandardRenderingFunctionType;
+  typedef otb::ImageLayerGenerator<LayerType>                                        LayerGeneratorType;
+  typedef LayerGeneratorType::Pointer                                                LayerGeneratorPointerType;
+  typedef LayerGeneratorType::RenderingFunctionType                                  StandardRenderingFunctionType;
 
   typedef Function::ModulusRenderingFunction<ImageType::InternalPixelType, RGBPixelType>    ModulusRenderingFunction;
   typedef Function::PhaseRenderingFunction<ImageType::InternalPixelType, RGBPixelType>      PhaseRenderingFunction;
   
   /** typedef support for reader*/
-  typedef ImageFileReader<ImageType>                                      ReaderType;
-  typedef ReaderType::Pointer                                             ReaderPointerType;
+  typedef ImageFileReader<ImageType>                                                  ReaderType;
+  typedef ReaderType::Pointer                                                         ReaderPointerType;
     
   /** Typedef support for rendering image*/
   typedef otb::ImageLayerRenderingModel<ViewerImageType>                              VisuModelType;
@@ -108,10 +111,13 @@ public:
   typedef otb::ChangeScaledExtractRegionActionHandler<VisuModelType,VisuViewType>     ChangeScaledRegionHandlerType;
   typedef otb::ChangeExtractRegionActionHandler<VisuModelType,VisuViewType>           ChangeRegionHandlerType;
   typedef otb::ChangeScaleActionHandler<VisuModelType,VisuViewType>                   ChangeScaleHandlerType;
-  
+   
   typedef otb::PixelDescriptionModel<ViewerImageType>                                 PixelDescriptionModelType;
-  typedef otb::PixelDescriptionActionHandler<PixelDescriptionModelType,VisuViewType> PixelDescriptionActionHandlerType;
+  typedef PixelDescriptionModelType::Pointer                                          PixelDescriptionModelPointerType;
+  typedef PixelDescriptionView<PixelDescriptionModelType>                             PixelDescriptionViewType;
+  typedef otb::PixelDescriptionActionHandler<PixelDescriptionModelType,VisuViewType>  PixelDescriptionActionHandlerType;
 
+  typedef Curves2DWidget                                                              CurvesWidgetType;
   
   /** 
    * Struct embedded in the model
@@ -124,8 +130,9 @@ public:
     WidgetControllerPointerType            pWidgetController;
     VisuViewPointerType                    pVisuView;
     StandardRenderingFunctionType::Pointer pRenderFuntion;
+    PixelDescriptionViewType::Pointer      pPixelView;
+    CurvesWidgetType::Pointer              pCurveWidget;      
     std::string                            fileName;
-    
   };
   
   typedef struct _ObjectsTracked                                          ObjectsTracked;
@@ -151,10 +158,7 @@ public:
     {
       return m_ObjectTrackedList;
     }
-
-   /** Get the pixel description model */
-   itkGetObjectMacro(PixelModel,PixelDescriptionModelType);
-   
+      
    /** Boolean Flags */
    itkGetMacro(HasImageOpened,bool);
    itkGetMacro(HasChangedChannelOrder,bool);
@@ -172,7 +176,7 @@ protected:
 
   /** Built Visu & Controller*/
   virtual VisuViewPointerType BuiltVisu(VisuModelPointerType pRendering);
-  virtual WidgetControllerPointerType BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView);
+  virtual WidgetControllerPointerType BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView , PixelDescriptionModelType::Pointer pixelModel);
   
     
 private:
@@ -184,18 +188,11 @@ private:
   
   /** The instance singleton */
   static Pointer Instance;
-
-  /**Temporary Flags*/
-  PixelDescriptionModelType::Pointer         m_PixelModel;
-  
   
   /** Boolean flags*/
   bool   m_HasImageOpened;
   bool   m_HasChangedChannelOrder;
 
-  /* Layer Generator Smart Pointer*/
-  LayerGeneratorPointerType                  m_VisuGenerator;
-
   /** The manipuleted list*/
   ObjectTrackedList                          m_ObjectTrackedList;
 };
diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx
index a94f5f716f..a99b513f4b 100644
--- a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx
+++ b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx
@@ -31,17 +31,13 @@ namespace otb
 
 ImageViewerManagerViewGUI
 ::ImageViewerManagerViewGUI():m_TemplateViewerName(""),m_DisplayedLabel("+ "),
-			      m_UndisplayedLabel("- ")
+			      m_UndisplayedLabel("- "),m_DiaporamaCurrentIndex(0)
 {
 
   m_VisuView            =  VisuViewType::New();
   m_PreviewWidget       =  ImageWidgetType::New();
   m_pRenderingFuntion   =  StandardRenderingFunctionType::New();
-  m_PackedWindow        =  PackedWidgetManagerType::New(); 
-  m_SplittedWindow      =  SplittedWidgetManagerType::New(); 
-  m_SplittedManagerList =  SplittedManagerList::New();
-  m_PixelView           =  PixelDescriptionViewType::New();
-  m_CurveWidget         =  CurvesWidgetType::New();
+  m_WidgetManagerList   =  WidgetManagerList::New();
 
   //Get an instance of the model
   m_ImageViewerManagerModel = ImageViewerManagerModel::GetInstance();
@@ -49,6 +45,8 @@ ImageViewerManagerViewGUI
 
   //Create the component of the GUI
   this->CreateGUI();
+  bSplitted->activate();
+  bPacked->activate();
   
   //Create buffer for the guiViewerInformation
   Fl_Text_Buffer * buffer = new Fl_Text_Buffer();
@@ -61,35 +59,16 @@ ImageViewerManagerViewGUI
   gPreviewWindow->resizable(gPreviewWindow);
   m_PreviewWidget->resize(gPreviewWindow->x(), gPreviewWindow->y(), gPreviewWindow->w(), gPreviewWindow->h() );
   
-
-  //Histogram 
-  m_Bhistogram          = HistogramCurveType::New();
-  m_Rhistogram          = HistogramCurveType::New();
-  m_Ghistogram          = HistogramCurveType::New();
-  
+  //Color Definition    
   m_Red.Fill(0);
   m_Green.Fill(0);
   m_Blue.Fill(0);
-  
   m_Red[0]  = 1.;   m_Red[3]   = 0.5;
   m_Green[1]= 1.;   m_Green[3] = 0.5;
   m_Blue[2] = 1.;   m_Blue[3]  = 0.5;
-  
-  m_Ghistogram->SetHistogramColor(m_Green);
-  m_Ghistogram->SetLabelColor(m_Green);
-  m_Bhistogram->SetHistogramColor(m_Blue);
-  m_Bhistogram->SetLabelColor(m_Blue);
-  m_Rhistogram->SetHistogramColor(m_Red);
-  m_Rhistogram->SetLabelColor(m_Red);
-  
-  m_CurveWidget->AddCurve(m_Bhistogram);
-  m_CurveWidget->AddCurve(m_Ghistogram);
-  m_CurveWidget->AddCurve(m_Rhistogram);
-  m_CurveWidget->SetXAxisLabel("Pixels");
-  m_CurveWidget->SetYAxisLabel("Frequency");
-    
-  //Widget Manager
 
+  //Slide Show 
+  m_WidgetManager  =  PackedWidgetManagerType::New();
 }
   
   /**
@@ -112,15 +91,30 @@ ImageViewerManagerViewGUI
   Fl::check();
   guiMainWindow->redraw();
   
-  //Put the status of the last image 
-  m_DisplayStatusList.push_back(false);
-  //m_DisplayedWidgetList.push_back(NULL);
-
+  //Initialise the boolean pair
+  PairType      pair(false,false); //Not displayed , Packed View
+  
+  //Put a new WidgetManager in the list
+  if(bSplitted->value() && !bPacked->value())
+    {
+      SplittedWidgetManagerType::Pointer widgetManager  =  SplittedWidgetManagerType::New(); 
+      m_WidgetManagerList->PushBack(widgetManager);
+      pair.second = true;
+    }
+  else
+    {
+      PackedWidgetManagerType::Pointer widgetManager     =   PackedWidgetManagerType::New(); 
+      m_WidgetManagerList->PushBack(widgetManager);
+    }
+  
+  //Put the status of the last added image
+  m_DisplayStatusList.push_back(pair);
+  
   // Call the Controller
   m_ImageViewerManagerController->OpenInputImage(cfname);
 
-
-
+  //Update the Progress Bar 
+  this->UpdateDiaporamaProgressBar();
 }
 
 /**
@@ -133,11 +127,9 @@ ImageViewerManagerViewGUI
   if(m_ImageViewerManagerModel->GetHasImageOpened())
     this->AddImageListName();
   
-  //Update the 
+  //Update the widget when channel order modified
   if(m_ImageViewerManagerModel->GetHasChangedChannelOrder())
     {
-      
-      std::cout << " ViewerNotification " << std::endl;
       unsigned int selectedItem = guiImageList->value();
       if (selectedItem == 0)
 	return;        // no image selected, return
@@ -146,10 +138,12 @@ ImageViewerManagerViewGUI
       this->DisplayPreviewWidget(selectedItem);
                 
       //Update the widget dispalyed
-      if(m_DisplayStatusList[selectedItem-1])
+      if(m_DisplayStatusList[selectedItem-1].first)
 	{
+	  //m_CurveWidget->ClearAllCurves();//hide();
+	  m_WidgetManagerList->GetNthElement(selectedItem-1)->Refresh();
 	  this->Display(selectedItem);
-	  m_SplittedWindow->Refresh();
+	  
 	}
 
       //Update Information
@@ -167,20 +161,24 @@ ImageViewerManagerViewGUI
   unsigned int selectedItem = guiImageList->value();
   if (selectedItem == 0)
     return;        // no image selected, return
+
+  //Hide if showned
+  if(m_DisplayStatusList[selectedItem-1].first)
+    {
+      this->Undisplay(selectedItem);
+    }
   
   //Call the controller
   m_ImageViewerManagerController->CloseImage(selectedItem);
-
+  
   //Erase the item selected
-  guiImageList->remove(selectedItem);
   m_PreviewWidget->hide();
+  guiImageList->remove(selectedItem);
   
-  if(m_DisplayStatusList[selectedItem-1])
-    {
-      this->Undisplay(selectedItem);
-    }
+  //Erase from the lists
   m_DisplayStatusList.erase( m_DisplayStatusList.begin()+(selectedItem-1));
-
+  m_WidgetManagerList->Erase(selectedItem-1);
+  
 }
 /**
  * Show the mainWindow 
@@ -225,6 +223,18 @@ ImageViewerManagerViewGUI
       return;
     }
   
+  //Update the radio button 
+  if( m_DisplayStatusList[selectedItem-1].second)
+    {
+      bSplitted->value(true);
+      bPacked->value(false);
+    }
+  else
+    {
+      bSplitted->value(false);
+      bPacked->value(true);
+    }
+  
   //DipalyPreviewWidget
   this->DisplayPreviewWidget(selectedItem);
     
@@ -286,26 +296,17 @@ ImageViewerManagerViewGUI
       return;
     }
   
-  /* check what to do */
-  if(!m_DisplayStatusList[selectedItem-1])
+  //check what to do
+  if(!m_DisplayStatusList[selectedItem-1].first)
     {
-      //check if there are displayed images : Close them if yes
-      for(unsigned int i = 0; i<m_DisplayStatusList.size() ; i++)    
-	{
-	  if(m_DisplayStatusList[i])
-	    {
-	      this->UpdateImageListShowed(i+1, m_UndisplayedLabel);
-	      m_DisplayStatusList[i] = false;
-	    }
-	}
-      //Display the new image
-      m_DisplayStatusList[selectedItem-1] = true;
+      //New Display 
+      m_DisplayStatusList[selectedItem-1].first = true;
       this->UpdateImageListShowed(selectedItem, m_DisplayedLabel);
       this->Display(selectedItem);
     }
   else
     {
-      m_DisplayStatusList[selectedItem-1] = false;
+      m_DisplayStatusList[selectedItem-1].first = false;
       this->UpdateImageListShowed(selectedItem, m_UndisplayedLabel);
       this->Undisplay(selectedItem);
     }
@@ -318,35 +319,116 @@ void
 ImageViewerManagerViewGUI
 ::Display(unsigned int selectedItem)
 {
-  //- Get the view stored in the model 
-  VisuViewPointerType currentVisuView = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pVisuView;
-  m_PixelView->SetModel(m_ImageViewerManagerModel->GetPixelModel());
+  //Get the view stored in the model 
+  CurvesWidgetType::Pointer         curveWidget         =  m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pCurveWidget;
+  VisuViewPointerType               currentVisuView     =  m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pVisuView;
   
   //First get the histogram list
   StandardRenderingFunctionType::Pointer pRenderingFuntion = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
-  m_Rhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetRedChannelIndex()));
-  m_Ghistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetGreenChannelIndex()));
-  m_Bhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetBlueChannelIndex()));
-  
-  //Edit the Widget Manager : Packed Windows
-  // m_PackedWindow->RegisterFullWidget(currentVisuView->GetFullWidget());
-  // m_PackedWindow->RegisterScrollWidget(currentVisuView->GetScrollWidget());
-  // m_PackedWindow->RegisterZoomWidget(currentVisuView->GetZoomWidget());
-  // m_PackedWindow->RegisterPixelInformationWidget(m_PixelView->GetPixelDescriptionWidget());
-  // m_PackedWindow->RegisterHistogramWidget(m_CurveWidget);
-  // m_PackedWindow->Show();
-
-  //Edit the Widget Manager : Splitted Windows
-  m_SplittedWindow->UnRegisterAll();
-  m_SplittedWindow->RegisterFullWidget(currentVisuView->GetFullWidget());
-  m_SplittedWindow->RegisterScrollWidget(currentVisuView->GetScrollWidget());
-  m_SplittedWindow->RegisterZoomWidget(currentVisuView->GetZoomWidget());
-  m_SplittedWindow->RegisterPixelInformationWidget(m_PixelView->GetPixelDescriptionWidget());
-  m_SplittedWindow->RegisterHistogramWidget(m_CurveWidget);
-  m_SplittedWindow->SetLabel("SplittedView");
-  m_SplittedWindow->Show();
-  m_SplittedWindow->Refresh();
   
+  HistogramCurveType::Pointer rhistogram = HistogramCurveType::New();
+  HistogramCurveType::Pointer ghistogram = HistogramCurveType::New();
+  HistogramCurveType::Pointer bhistogram = HistogramCurveType::New();
+  
+  ghistogram->SetHistogramColor(m_Green);
+  ghistogram->SetLabelColor(m_Green);
+  bhistogram->SetHistogramColor(m_Blue);
+  bhistogram->SetLabelColor(m_Blue);
+  rhistogram->SetHistogramColor(m_Red);
+  rhistogram->SetLabelColor(m_Red);
+  
+  rhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetRedChannelIndex()));
+  ghistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetGreenChannelIndex()));
+  bhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetBlueChannelIndex()));
+  
+  curveWidget->ClearAllCurves();
+  curveWidget->AddCurve(bhistogram);
+  curveWidget->AddCurve(ghistogram);
+  curveWidget->AddCurve(rhistogram);
+  curveWidget->SetXAxisLabel("Pixels");
+  curveWidget->SetYAxisLabel("Frequency");
+  
+  //Get the pixelView 
+  PixelDescriptionViewType::Pointer pixelView = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pPixelView;
+
+  //Edit the Widget Manager 
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->UnRegisterAll();
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterFullWidget(currentVisuView->GetFullWidget());
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterScrollWidget(currentVisuView->GetScrollWidget());
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterZoomWidget(currentVisuView->GetZoomWidget());
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterPixelInformationWidget(pixelView->GetPixelDescriptionWidget());
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->RegisterHistogramWidget(curveWidget);
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->SetLabel("SplittedView");
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->Show();
+}
+
+/**
+ */
+void
+ImageViewerManagerViewGUI
+::SplittedViewMode()
+{
+    unsigned int selectedItem = guiImageList->value();
+  if (selectedItem == 0)
+    {
+      // no image selected, return
+      return;
+    }
+  
+  //Update the view mode
+  if(!m_DisplayStatusList[selectedItem-1].first)
+    {
+      SplittedWidgetManagerType::Pointer widgetManager  =  SplittedWidgetManagerType::New();
+      m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide();
+      m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager);
+      m_DisplayStatusList[selectedItem-1].second = true;
+    }
+    
+  //If already displayed : update the view mode and display the new viewMode
+  if(m_DisplayStatusList[selectedItem-1].first /*&& !m_DisplayStatusList[selectedItem-1].second*/ )
+    {
+      SplittedWidgetManagerType::Pointer widgetManager  =  SplittedWidgetManagerType::New();
+      m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide();
+      m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager);
+      m_DisplayStatusList[selectedItem-1].second = true;
+      this->Display(selectedItem);
+    }
+}
+
+/**
+*
+*/
+void
+ImageViewerManagerViewGUI
+::PackedViewMode()
+{
+  unsigned int selectedItem = guiImageList->value();
+  if (selectedItem == 0)
+    {
+      // no image selected, return
+      return;
+    }
+  
+  //Update the view mode
+  if(!m_DisplayStatusList[selectedItem-1].first)
+    {
+      PackedWidgetManagerType::Pointer widgetManager  =  PackedWidgetManagerType::New();
+      m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide();
+      m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager);
+      m_DisplayStatusList[selectedItem-1].second = false;
+    }
+  
+  //If already displayed : update the view mode and display the new viewMode
+  std::cout << "Displaying the Packed Mode" << std::endl;
+  if(m_DisplayStatusList[selectedItem-1].first /*&& m_DisplayStatusList[selectedItem-1].second*/ )
+    {
+      PackedWidgetManagerType::Pointer widgetManager  =  PackedWidgetManagerType::New();
+      m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide();
+      m_WidgetManagerList->SetNthElement(selectedItem-1,widgetManager);
+      m_DisplayStatusList[selectedItem-1].second = false;
+      this->Display(selectedItem);
+    }
+  std::cout << "Displaying the Packed Mode" << std::endl;
 }
 
 /**
@@ -376,8 +458,8 @@ void
 ImageViewerManagerViewGUI
 ::Undisplay(unsigned int selectedItem)
 {
-  //m_PackedWindow->Hide();
-  m_SplittedWindow->Hide();
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->Hide(); 
+  m_WidgetManagerList->GetNthElement(selectedItem-1)->UnRegisterAll();
 }
 /**
  * Hide all the widget opened
@@ -389,17 +471,15 @@ ImageViewerManagerViewGUI
   // Set the display Label to undislayed
   for(unsigned int i = 0; i<m_DisplayStatusList.size() ; i++)    
     {
-      if(m_DisplayStatusList[i])
+      if(m_DisplayStatusList[i].first)
 	{
 	  std::cout << "cest le " << i+1 << " qui est affiche  "<< std::endl; 
 	  this->UpdateImageListShowed(i+1, m_UndisplayedLabel);
-	  m_DisplayStatusList[i] = false;
+	  m_DisplayStatusList[i].first = false;
+	  m_WidgetManagerList->GetNthElement(i)->Hide();
+	  m_WidgetManagerList->GetNthElement(i)->UnRegisterAll();
 	}
     }
- 
-  // Close the opened widget
-  //m_PackedWindow->Hide();
-  m_SplittedWindow->Hide();
  }
 
 /**
@@ -410,8 +490,13 @@ ImageViewerManagerViewGUI
 ::Quit()
 {
   guiMainWindow->hide();
-  //m_PackedWindow->Hide();
-  m_SplittedWindow->Hide();
+
+  for(unsigned int i = 0; i<m_DisplayStatusList.size() ; i++)    
+    if(m_DisplayStatusList[i].first)
+      {
+	m_WidgetManagerList->GetNthElement(i)->Hide();
+	m_WidgetManagerList->GetNthElement(i)->UnRegisterAll();
+      }
 }
 
 /**
@@ -460,12 +545,22 @@ ImageViewerManagerViewGUI
 {
   
   ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader;
-  m_NbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
+  unsigned int nbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
+  std::cout <<" NOMBRE  NbComponent  " << nbComponent  << std::endl;
 
   itk::OStringStream oss;
   oss.str("");
+
+  //Clear all the choices
+  guiGrayscaleChannelChoice->clear();
+  guiRedChannelChoice->clear();
+  guiGreenChannelChoice->clear();
+  guiBlueChannelChoice->clear();
+  guiGrayscaleChannelChoice->clear();
+  guiRealChannelChoice->clear();
+  guiImaginaryChannelChoice->clear();
   
-  for (unsigned int i = 0;i<m_NbComponent;++i)
+  for (unsigned int i = 0;i<nbComponent;++i)
   {
     oss.str("");
     oss<<i+1;
@@ -477,8 +572,10 @@ ImageViewerManagerViewGUI
     guiRealChannelChoice->add(oss.str().c_str());
     guiImaginaryChannelChoice->add(oss.str().c_str());
   }
+  guiViewerSetupWindow->redraw();
+  guiGrayscaleChannelChoice->redraw();
 
-  switch(m_NbComponent){
+  switch(nbComponent){
   case 1 :
     this->GrayScaleSet();
     break;
@@ -488,8 +585,11 @@ ImageViewerManagerViewGUI
   case 3 : 
     this->RGBSet();
     break;    
-  default:
+  case 2:
     this->ComplexSet();
+    break;
+  default : 
+    break;
   }
   
   guiViewerSetupName->value(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).fileName.c_str());
@@ -509,7 +609,10 @@ ImageViewerManagerViewGUI
       // no image selected, return
       return;
     }
-
+  
+  ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader;
+  unsigned int nbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
+  
   StandardRenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
   
   guiViewerSetupColorMode->set();
@@ -525,9 +628,9 @@ ImageViewerManagerViewGUI
   guiGreenChannelChoice->activate();
   guiBlueChannelChoice->activate();
 
-  guiRedChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),m_NbComponent-1));
-  guiGreenChannelChoice->value(std::min(renderingFunction->GetGreenChannelIndex(),m_NbComponent-1));
-  guiBlueChannelChoice->value(std::min(renderingFunction->GetBlueChannelIndex(),m_NbComponent-1));
+  guiRedChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),nbComponent-1));
+  guiGreenChannelChoice->value(std::min(renderingFunction->GetGreenChannelIndex(),nbComponent-1));
+  guiBlueChannelChoice->value(std::min(renderingFunction->GetBlueChannelIndex(),nbComponent-1));
   
 }
 
@@ -544,7 +647,9 @@ ImageViewerManagerViewGUI
       // no image selected, return
       return;
     }
-
+  ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader;
+  unsigned int nbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
+  
   StandardRenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
   
   guiViewerSetupGrayscaleMode->set();
@@ -560,7 +665,7 @@ ImageViewerManagerViewGUI
   guiBlueChannelChoice->deactivate();
 
   guiGrayscaleChannelChoice->activate();
-  guiGrayscaleChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),m_NbComponent-1));
+  guiGrayscaleChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),nbComponent-1));
 }
 
 
@@ -574,6 +679,8 @@ ImageViewerManagerViewGUI
     // no image selected, return
     return;
   }
+  ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader;
+  unsigned int nbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel();
   
   StandardRenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion;
   
@@ -588,8 +695,8 @@ ImageViewerManagerViewGUI
   guiImaginaryChannelChoice->activate();
   bModulus->activate();
   bPhase->activate();
-  guiRealChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),m_NbComponent-1));
-  guiImaginaryChannelChoice->value(std::min(renderingFunction->GetGreenChannelIndex(),m_NbComponent-1));
+  guiRealChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),nbComponent-1));
+  guiImaginaryChannelChoice->value(std::min(renderingFunction->GetGreenChannelIndex(),nbComponent-1));
 }
 
 
@@ -656,6 +763,122 @@ ImageViewerManagerViewGUI
   guiViewerSetupWindow->hide();
 }
 
+
+
+void
+ImageViewerManagerViewGUI
+::Diaporama()
+{
+  if (guiImageList->size()  == 0 || guiDiaporama->shown())
+  {
+    // no image selected, return
+    return;
+  }
+   guiDiaporama->show();
+   //guiDiaporama->set_modal();
+   guiDiaporamaProgressBar->minimum(1);
+   guiDiaporamaProgressBar->maximum(static_cast<float>(guiImageList->size()));
+   
+   this->DisplayDiaporama();
+   UpdateDiaporamaProgressBar();
+}
+
+void
+ImageViewerManagerViewGUI
+::DisplayDiaporama()
+{
+  std::cout << "m_DiaporamaCurrentIndex  : " << m_DiaporamaCurrentIndex<< std::endl;
+  //guiDiapoDisplay->clear();
+  
+  //PackedWidgetManagerType::Pointer  m_WidgetManager     =   PackedWidgetManagerType::New(); 
+  
+  //Get the view stored in the model 
+  CurvesWidgetType::Pointer         curveWidget         =  m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pCurveWidget;
+  VisuViewPointerType               currentVisuView     =  m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pVisuView;
+  
+  //First get the histogram list
+  StandardRenderingFunctionType::Pointer pRenderingFuntion = m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pRenderFuntion;
+  
+  HistogramCurveType::Pointer rhistogram = HistogramCurveType::New();
+  HistogramCurveType::Pointer ghistogram = HistogramCurveType::New();
+  HistogramCurveType::Pointer bhistogram = HistogramCurveType::New();
+  
+  ghistogram->SetHistogramColor(m_Green);
+  ghistogram->SetLabelColor(m_Green);
+  bhistogram->SetHistogramColor(m_Blue);
+  bhistogram->SetLabelColor(m_Blue);
+  rhistogram->SetHistogramColor(m_Red);
+  rhistogram->SetLabelColor(m_Red);
+  
+  rhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetRedChannelIndex()));
+  ghistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetGreenChannelIndex()));
+  bhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pLayer->GetHistogramList()->GetNthElement(pRenderingFuntion->GetBlueChannelIndex()));
+  
+  curveWidget->ClearAllCurves();
+  curveWidget->AddCurve(bhistogram);
+  curveWidget->AddCurve(ghistogram);
+  curveWidget->AddCurve(rhistogram);
+  curveWidget->SetXAxisLabel("Pixels");
+  curveWidget->SetYAxisLabel("Frequency");
+  
+  //Get the pixelView 
+  PixelDescriptionViewType::Pointer pixelView = m_ImageViewerManagerModel->GetObjectList().at(m_DiaporamaCurrentIndex).pPixelView;
+  
+  //Edit the Widget Manager 
+  m_WidgetManager->UnRegisterAll();
+  m_WidgetManager->RegisterFullWidget(currentVisuView->GetFullWidget());
+  m_WidgetManager->RegisterScrollWidget(currentVisuView->GetScrollWidget());
+  m_WidgetManager->RegisterZoomWidget(currentVisuView->GetZoomWidget());
+  m_WidgetManager->RegisterPixelInformationWidget(pixelView->GetPixelDescriptionWidget());
+  m_WidgetManager->RegisterHistogramWidget(curveWidget);
+  
+  m_WidgetManager->Refresh();
+  m_WidgetManager->Show();
+}
+void
+ImageViewerManagerViewGUI
+::DiaporamaNext()
+{
+  if (m_DiaporamaCurrentIndex < static_cast<unsigned int>(guiImageList->size())-1)
+  {
+    ++m_DiaporamaCurrentIndex;
+    this->DisplayDiaporama();
+  }
+  UpdateDiaporamaProgressBar();
+}
+
+void
+ImageViewerManagerViewGUI
+::DiaporamaPrevious()
+{
+  if (m_DiaporamaCurrentIndex>0)
+  {
+    --m_DiaporamaCurrentIndex;
+    this->DisplayDiaporama();
+  }
+  UpdateDiaporamaProgressBar();
+}
+
+
+void
+ImageViewerManagerViewGUI
+::UpdateDiaporamaProgressBar()
+{
+  itk::OStringStream oss;
+  oss.str("");
+  oss<<m_DiaporamaCurrentIndex+1<<"/"<<guiImageList->size();
+  guiDiaporamaProgressBar->copy_label(oss.str().c_str());
+  guiDiaporamaProgressBar->value(static_cast<float>(m_DiaporamaCurrentIndex));
+}
+
+void
+ImageViewerManagerViewGUI
+::DiaporamaQuit()
+{
+  //guiDiaporama->set_non_modal();
+    guiDiaporama->hide();
+}
+
 /**
  * PrintSelf Method
  */
diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.h b/ViewerManager/View/otbImageViewerManagerViewGUI.h
index 7fbb134ad7..7269b2cf74 100644
--- a/ViewerManager/View/otbImageViewerManagerViewGUI.h
+++ b/ViewerManager/View/otbImageViewerManagerViewGUI.h
@@ -42,6 +42,7 @@ PURPOSE.  See the above copyright notices for more information.
 #include "otbCurves2DWidget.h"
 #include "otbHistogramCurve.h"
 
+#include "otbWidgetManager.h"
 #include "otbPackedWidgetManager.h"
 #include "otbSplittedWidgetManager.h"
 
@@ -84,8 +85,6 @@ public:
   typedef ImageView<VisuModelType>                                VisuViewType;
   typedef VisuViewType::Pointer                                   VisuViewPointerType;
   
-  
-
   /* Method to display the Widget : Packed or Splitted */ 
   typedef PackedWidgetManager                                     PackedWidgetManagerType;
   typedef PackedWidgetManagerType::Pointer                        PackedWidgetManagerPointerType;
@@ -107,11 +106,13 @@ public:
   typedef PixelDescriptionView<PixelDescriptionModelType>         PixelDescriptionViewType;
   
   /** vector to store the status of images : diplayed or not displayed*/
-  typedef std::vector<bool>                                       BoolVector;
+  //---> Note : f the packed view is selected : 2nd boolean : false, Splitted view : 2nd boolean true;
+  typedef std::pair<bool, bool>                                   PairType;
+  typedef std::vector<PairType>                                  BoolVector;
   
   /** list in order to store the diplay manager*/
-  typedef ObjectList<PackedWidgetManagerType>                     PackedManagerList;
-  typedef ObjectList<SplittedWidgetManagerType>                   SplittedManagerList;
+  typedef WidgetManager                                           WidgetManagerType;
+  typedef ObjectList<WidgetManagerType>                           WidgetManagerList;
 
 
   
@@ -144,11 +145,11 @@ protected:
   virtual void   ViewerSetup();
   virtual void   ViewerSetupOk(); 
   virtual void   ViewerSetupCancel(); 
-  /*   virtual void LinkSetup(); */
-  /*   virtual void LinkSetupRemove(); */
-  /*   virtual void LinkSetupClear(); */
-  /*   virtual void LinkSetupOk(); */
-  /*   virtual void LinkSetupSave(); */
+  /* virtual void LinkSetup(); */
+  /* virtual void LinkSetupRemove(); */
+  /* virtual void LinkSetupClear(); */
+  /* virtual void LinkSetupOk(); */
+  /* virtual void LinkSetupSave(); */
   virtual void   AddImageListName();
   virtual void   Quit(); 
   virtual void   SelectAction(); 
@@ -161,20 +162,23 @@ protected:
   virtual void   GrayScaleSet(); 
   virtual void   RGBSet(); 
   virtual void   ComplexSet(); 
-  /*   virtual void Diaporama(); */
-  /*   virtual void DiaporamaPrevious(); */
-  /*   virtual void DiaporamaNext(); */
-  /*   virtual void DiaporamaQuit(); */
+  virtual void Diaporama(); 
+  virtual void DisplayDiaporama(); 
+  virtual void DiaporamaNext();   
+  virtual void DiaporamaPrevious(); 
+  virtual void DiaporamaQuit(); 
   
   virtual void UpdateInformation(unsigned int selectedItem); 
   virtual void UpdateViewerSetupWindow(unsigned int selectedItem); 
   virtual void DisplayPreviewWidget(unsigned int selectedItem);
+  virtual void SplittedViewMode();
+  virtual void PackedViewMode();
+  virtual void UpdateDiaporamaProgressBar(); 
   
   /*   virtual void UpdateLinkSetupWindow(unsigned int selectedItem); */
   /*   virtual void UpdatePreviewWindow(unsigned int selectedItem); */
-  /*   virtual void UpdateDiaporamaProgressBar(); */
   
-
+  
   /** Constructor */
   ImageViewerManagerViewGUI();
   /** Destructor */
@@ -194,32 +198,21 @@ private:
   
   //
   BoolVector                                     m_DisplayStatusList;
-  std::string                                    m_TemplateViewerName ;
+  std::string                                    m_TemplateViewerName;
   std::string                                    m_DisplayedLabel;
   std::string                                    m_UndisplayedLabel ;
-  //VisuViewShowedList::Pointer                    m_VisuViewShowedList;
   
   //Widget Manager
-  PackedWidgetManagerType::Pointer               m_PackedWindow;
-  SplittedWidgetManagerType::Pointer             m_SplittedWindow;
-  SplittedManagerList::Pointer                   m_SplittedManagerList;                
-  PackedManagerList::Pointer                     m_PackedManagerList;                
-  
-  /** Curve widget */
-  CurvesWidgetPointerType                        m_CurveWidget;
-  HistogramCurveType::Pointer                    m_Bhistogram;
-  HistogramCurveType::Pointer                    m_Ghistogram;
-  HistogramCurveType::Pointer                    m_Rhistogram;
+  WidgetManagerList::Pointer                     m_WidgetManagerList;  
 
+  //SlideShow widget Manager
+  PackedWidgetManagerType::Pointer               m_WidgetManager;
 
-  /** NewVisu */
   VisuViewPointerType                            m_VisuView;
   
   /**ImageWidget for my preview*/
   ImageWidgetPointerType                         m_PreviewWidget;
 
-  /** view associated to the pixelDescription*/
-  PixelDescriptionViewType::Pointer             m_PixelView ;
 
   /** Histogram */
   StandardRenderingFunctionType::Pointer        m_pRenderingFuntion;
@@ -228,7 +221,7 @@ private:
   HistogramCurveType::ColorType                 m_Blue;
   
   /** Store the component number of a pixel*/
-  unsigned int                                   m_NbComponent;
+  unsigned int                                  m_DiaporamaCurrentIndex;
 
 };
 }// End namespace otb
diff --git a/ViewerManager/View/otbImageViewerManagerViewGroup.fl b/ViewerManager/View/otbImageViewerManagerViewGroup.fl
index c45fc6759f..aa9aba6f03 100644
--- a/ViewerManager/View/otbImageViewerManagerViewGroup.fl
+++ b/ViewerManager/View/otbImageViewerManagerViewGroup.fl
@@ -7,8 +7,8 @@ class ImageViewerManagerViewGroup {open
   Function {CreateGUI()} {open return_type void
   } {
     Fl_Window guiMainWindow {
-      label otbImageViewerManagerView open selected
-      xywh {495 250 610 460} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 resizable visible
+      label otbImageViewerManagerView open
+      xywh {833 76 610 460} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 hide resizable
     } {
       Fl_Text_Display guiViewerInformation {
         label Information
@@ -23,7 +23,7 @@ class ImageViewerManagerViewGroup {open
         xywh {280 38 195 189} resizable
       } {}
       Fl_Group gBottom {open
-        xywh {260 244 225 60}
+        xywh {260 231 225 73}
       } {
         Fl_Button guiShowHide {
           label {Show / Hide}
@@ -38,6 +38,26 @@ class ImageViewerManagerViewGroup {open
         Fl_Group gBlanck1 {open
           xywh {475 254 10 41} resizable
         } {}
+        Fl_Round_Button bPacked {
+          label {Packed View}
+          callback {PackedViewMode();
+//bPacked->value(1);
+//if(bSplitted->value())
+// bPacked->deactivate();
+//else
+// bPacked->value(1);}
+          tooltip {Toggle Packed  mode} xywh {380 238 105 15} type Radio down_box ROUND_DOWN_BOX value 1 labelcolor 187 deactivate
+        }
+        Fl_Round_Button bSplitted {
+          label {Splitted View}
+          callback {SplittedViewMode();
+//bSplitted->value(1);
+//if(bPacked->value())
+// bSplitted->deactivate();
+//else
+// bSplitted->value(1);} selected
+          tooltip {Toggle Splitted mode} xywh {275 237 105 15} type Radio down_box ROUND_DOWN_BOX labelcolor 187 deactivate
+        }
       }
       Fl_Group gRight {open
         xywh {480 31 115 277}
@@ -78,8 +98,8 @@ class ImageViewerManagerViewGroup {open
       }
     }
     Fl_Window guiViewerSetupWindow {
-      label {Viewer setup} open
-      xywh {885 215 705 230} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible
+      label {Viewer setup}
+      xywh {885 215 705 230} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 hide
     } {
       Fl_Round_Button guiViewerSetupGrayscaleMode {
         label {Grayscale mode}
@@ -147,7 +167,7 @@ class ImageViewerManagerViewGroup {open
     }
     Fl_Window guiLinkSetupWindow {
       label {Link setup}
-      xywh {888 755 440 220} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible
+      xywh {888 755 440 220} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 hide
     } {
       Fl_Input_Choice guiLinkChoice {
         label {Link to viewer: } open
@@ -189,7 +209,7 @@ class ImageViewerManagerViewGroup {open
     }
     Fl_Window guiDiaporama {
       label Slideshow
-      xywh {1142 721 390 90} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible
+      xywh {652 599 390 90} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible
     } {
       Fl_Progress guiDiaporamaProgressBar {
         label Progress
@@ -259,4 +279,8 @@ class ImageViewerManagerViewGroup {open
   } {}
   Function {ComplexSet()} {open return_type {virtual void}
   } {}
+  Function {SplittedViewMode()} {open return_type {virtual void}
+  } {}
+  Function {PackedViewMode()} {open return_type {virtual void}
+  } {}
 } 
-- 
GitLab