From 67d9b37aa2cc5177dca23acec3c25f764d6fc397 Mon Sep 17 00:00:00 2001
From: Otmane Lahlou <otmane.lahlou@c-s.fr>
Date: Wed, 1 Apr 2009 14:14:45 +0200
Subject: [PATCH] ENH: Link images added

---
 .../otbImageViewerManagerController.cxx       | 14 +++
 .../otbImageViewerManagerController.h         |  2 +-
 ...otbImageViewerManagerControllerInterface.h |  2 +-
 .../Model/otbImageViewerManagerModel.cxx      | 98 +++++++++++++++++++
 .../Model/otbImageViewerManagerModel.h        |  8 +-
 5 files changed, 120 insertions(+), 4 deletions(-)

diff --git a/ViewerManager/Controller/otbImageViewerManagerController.cxx b/ViewerManager/Controller/otbImageViewerManagerController.cxx
index 5c33f1fd51..d4131f3755 100644
--- a/ViewerManager/Controller/otbImageViewerManagerController.cxx
+++ b/ViewerManager/Controller/otbImageViewerManagerController.cxx
@@ -128,5 +128,19 @@ ImageViewerManagerController
     }
 }
 
+void
+ImageViewerManagerController
+::Link(unsigned int leftChoice, unsigned int rightChoice)
+{
+  try
+    {
+      m_Model->Link(leftChoice,rightChoice);
+    }
+  catch (itk::ExceptionObject & err)
+    {
+      MsgReporter::GetInstance()->SendError(err.GetDescription());
+    }
+}
+
 } // end namespace otb
 
diff --git a/ViewerManager/Controller/otbImageViewerManagerController.h b/ViewerManager/Controller/otbImageViewerManagerController.h
index 9a8c08d767..1f31e15db8 100644
--- a/ViewerManager/Controller/otbImageViewerManagerController.h
+++ b/ViewerManager/Controller/otbImageViewerManagerController.h
@@ -106,7 +106,7 @@ public:
   virtual void UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem );
   virtual void UpdateModulusChannelOrder(int realChoice , int imChoice ,unsigned int selectedItem );
   virtual void UpdatePhaseChannelOrder(int realChoice , int imChoice, unsigned int selectedItem);
-  
+  virtual void Link(unsigned int leftChoice, unsigned int rightChoice);
 
   
   
diff --git a/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h b/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h
index 9e31bba096..10de1fa831 100644
--- a/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h
+++ b/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h
@@ -73,7 +73,7 @@ public:
   virtual void UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem) = 0; 
   virtual void UpdateModulusChannelOrder(int realChoice , int imChoice,unsigned int selectedItem) = 0; 
   virtual void UpdatePhaseChannelOrder(int realChoice , int imChoice, unsigned int selectedItem) = 0; 
-
+  virtual void Link(unsigned int leftChoice, unsigned int rightChoice) = 0;
   /** NewVisu */
   virtual VisuControllerPointerType GetVisuController()=0;
   virtual VisuControllerPointerType GetPreviewVisuController() = 0;
diff --git a/ViewerManager/Model/otbImageViewerManagerModel.cxx b/ViewerManager/Model/otbImageViewerManagerModel.cxx
index b306ddd13d..c75895b4a2 100644
--- a/ViewerManager/Model/otbImageViewerManagerModel.cxx
+++ b/ViewerManager/Model/otbImageViewerManagerModel.cxx
@@ -109,6 +109,7 @@ ImageViewerManagerModel
   currentComponent.pWidgetController = controller;
   currentComponent.pRenderFuntion  = rendrerFuntion;
   currentComponent.pPixelView   = pixelView;
+  currentComponent.pPixelModel  = pixelModel;
   currentComponent.pCurveWidget = curveWidget;
 
   /** Add the the struct in the list*/
@@ -258,6 +259,103 @@ ImageViewerManagerModel
   m_HasChangedChannelOrder = false;
 }
 
+/**
+ *
+ */
+void
+ImageViewerManagerModel
+::Link(unsigned int leftChoice, unsigned int rightChoice)
+{
+
+  //Get the controllers of the selected images
+  WidgetControllerPointerType rightController = m_ObjectTrackedList.at(rightChoice-1).pWidgetController;
+  WidgetControllerPointerType leftController = m_ObjectTrackedList.at(leftChoice-1).pWidgetController;
+
+  //Get the models related to the choosen images
+  VisuModelPointerType rightRenderModel       = m_ObjectTrackedList.at(rightChoice-1).pRendering;
+  VisuModelPointerType leftRenderModel       = m_ObjectTrackedList.at(leftChoice-1).pRendering;
+  
+  //Get the views related to the choosen images
+  VisuViewPointerType  pRightVisuView         = m_ObjectTrackedList.at(rightChoice-1).pVisuView;; 
+  VisuViewPointerType  pLeftVisuView          = m_ObjectTrackedList.at(leftChoice-1).pVisuView;
+
+  //Pixel View
+  PixelDescriptionModelPointerType rightPixelModel = m_ObjectTrackedList.at(rightChoice-1).pPixelModel;
+  PixelDescriptionModelPointerType leftPixelModel  = m_ObjectTrackedList.at(leftChoice-1).pPixelModel;
+    
+  // Add the resizing handler
+  ResizingHandlerType::Pointer rightResizingHandler = ResizingHandlerType::New();
+  rightResizingHandler->SetModel(rightRenderModel);
+  rightResizingHandler->SetView(pLeftVisuView);
+
+  ResizingHandlerType::Pointer leftResizingHandler = ResizingHandlerType::New();
+  leftResizingHandler->SetModel(leftRenderModel);
+  leftResizingHandler->SetView(pRightVisuView);
+  
+  rightController->AddActionHandler( leftResizingHandler);
+  leftController->AddActionHandler(rightResizingHandler);
+  
+  // Add the change scaled region handler
+  ChangeScaledRegionHandlerType::Pointer rightChangeScaledHandler =ChangeScaledRegionHandlerType::New();
+  rightChangeScaledHandler->SetModel(rightRenderModel);
+  rightChangeScaledHandler->SetView(pLeftVisuView);
+
+  ChangeScaledRegionHandlerType::Pointer leftChangeScaledHandler =ChangeScaledRegionHandlerType::New();
+  leftChangeScaledHandler->SetModel(leftRenderModel);
+  leftChangeScaledHandler->SetView(pRightVisuView);
+  
+  rightController->AddActionHandler(leftChangeScaledHandler);
+  leftController->AddActionHandler( rightChangeScaledHandler);
+  
+  // Add the change extract region handler
+  ChangeRegionHandlerType::Pointer rightChangeHandler =ChangeRegionHandlerType::New();
+  rightChangeHandler->SetModel(rightRenderModel);
+  rightChangeHandler->SetView(pLeftVisuView);
+    
+  ChangeRegionHandlerType::Pointer leftChangeHandler =ChangeRegionHandlerType::New();
+  leftChangeHandler->SetModel(leftRenderModel);
+  leftChangeHandler->SetView(pRightVisuView);
+  
+  rightController->AddActionHandler( leftChangeHandler);
+  leftController->AddActionHandler(rightChangeHandler);
+
+  // Add the change scaled handler
+  ChangeScaleHandlerType::Pointer rightChangeScaleHandler =ChangeScaleHandlerType::New();
+  rightChangeScaleHandler->SetModel(rightRenderModel );
+  rightChangeScaleHandler->SetView(pLeftVisuView);
+
+  ChangeScaleHandlerType::Pointer leftChangeScaleHandler =ChangeScaleHandlerType::New();
+  leftChangeScaleHandler->SetModel(leftRenderModel );
+  leftChangeScaleHandler->SetView(pRightVisuView);
+
+  rightController->AddActionHandler( leftChangeScaleHandler);
+  leftController->AddActionHandler(rightChangeScaleHandler);
+
+ //Pixel Description Handling
+  PixelDescriptionActionHandlerType::Pointer rightPixelActionHandler = PixelDescriptionActionHandlerType::New();
+  rightPixelActionHandler->SetView(pLeftVisuView );
+  rightPixelActionHandler->SetModel(rightPixelModel);
+  
+  PixelDescriptionActionHandlerType::Pointer leftPixelActionHandler = PixelDescriptionActionHandlerType::New();
+  leftPixelActionHandler->SetView(pRightVisuView);
+  leftPixelActionHandler->SetModel(leftPixelModel);
+
+  rightController->AddActionHandler(leftPixelActionHandler );
+  leftController->AddActionHandler(rightPixelActionHandler);
+
+}
+
+/**
+ *
+ */
+void
+ImageViewerManagerModel
+::AddLinkActionHandler(unsigned int choice)
+{
+  
+}
+
+
 
 }
 
diff --git a/ViewerManager/Model/otbImageViewerManagerModel.h b/ViewerManager/Model/otbImageViewerManagerModel.h
index 08c516c093..4fb3e307de 100644
--- a/ViewerManager/Model/otbImageViewerManagerModel.h
+++ b/ViewerManager/Model/otbImageViewerManagerModel.h
@@ -131,7 +131,8 @@ public:
     VisuViewPointerType                    pVisuView;
     StandardRenderingFunctionType::Pointer pRenderFuntion;
     PixelDescriptionViewType::Pointer      pPixelView;
-    CurvesWidgetType::Pointer              pCurveWidget;      
+    PixelDescriptionModelPointerType       pPixelModel;
+    CurvesWidgetType::Pointer              pCurveWidget;
     std::string                            fileName;
   };
   
@@ -152,6 +153,8 @@ public:
   virtual void UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem);
   virtual void UpdateModulusChannelOrder(int realChoice , int imChoice,unsigned int selectedItem );
   virtual void UpdatePhaseChannelOrder(int realChoice , int imChoice,unsigned int selectedItem );
+  virtual void Link(unsigned int leftChoice, unsigned int rightChoice);
+  virtual void AddLinkActionHandler(unsigned int choice);
   
   /** Method needed to Get the list of componenets stored*/
    ObjectTrackedList GetObjectList()
@@ -162,7 +165,7 @@ public:
    /** Boolean Flags */
    itkGetMacro(HasImageOpened,bool);
    itkGetMacro(HasChangedChannelOrder,bool);
-   
+   itkGetMacro(HasNewLink,bool);
 
 protected:
   /** This is protected for the singleton. Use GetInstance() instead. */
@@ -192,6 +195,7 @@ private:
   /** Boolean flags*/
   bool   m_HasImageOpened;
   bool   m_HasChangedChannelOrder;
+  bool   m_HasNewLink;
 
   /** The manipuleted list*/
   ObjectTrackedList                          m_ObjectTrackedList;
-- 
GitLab