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