diff --git a/ViewerManager/Controller/otbImageViewerManagerController.cxx b/ViewerManager/Controller/otbImageViewerManagerController.cxx new file mode 100644 index 0000000000000000000000000000000000000000..c18b8dad4e317fbe261c2fadc590a7bda6dd6dba --- /dev/null +++ b/ViewerManager/Controller/otbImageViewerManagerController.cxx @@ -0,0 +1,133 @@ + +/*========================================================================= + +Program: ORFEO Toolbox +Language: C++ +Date: $Date$ +Version: $Revision$ + + +Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. +See OTBCopyright.txt for details. + + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "otbImageViewerManagerController.h" +#include "otbMsgReporter.h" + +namespace otb +{ + +ImageViewerManagerController +::ImageViewerManagerController() +{ + +/** NewVisu */ + // Build a "visu"controller + m_VisuController = VisuControllerType::New(); + m_PreviewVisuController = VisuControllerType::New(); +} + +ImageViewerManagerController +::~ImageViewerManagerController() +{} + + + +void +ImageViewerManagerController +::OpenInputImage(const char * filename) +{ + try + { + std::string strFilename = filename; + m_Model->OpenImage( strFilename ); + } + catch (itk::ExceptionObject & err) + { + MsgReporter::GetInstance()->SendError(err.GetDescription()); + } +} + +/** +* +*/ +void +ImageViewerManagerController +::CloseImage(unsigned int selectedItem) +{ + try + { + std::cout << "CONTROLLER : CloseImage()" << std::endl; + m_Model->CloseImage( selectedItem ); + } + catch (itk::ExceptionObject & err) + { + MsgReporter::GetInstance()->SendError(err.GetDescription()); + } +} + +void +ImageViewerManagerController +::UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem) +{ + try + { + + m_Model->UpdateRGBChannelOrder(redChoice,greenChoice,BlueChoice, selectedItem); + } + catch (itk::ExceptionObject & err) + { + MsgReporter::GetInstance()->SendError(err.GetDescription()); + } +} + +void +ImageViewerManagerController +::UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem) +{ + try + { + + m_Model->UpdateGrayScaleChannelOrder(choice, selectedItem); + } + catch (itk::ExceptionObject & err) + { + MsgReporter::GetInstance()->SendError(err.GetDescription()); + } +} + +void +ImageViewerManagerController +::UpdateModulusChannelOrder(int realChoice, int imChoice, unsigned int selectedItem) +{ + try + { + m_Model->UpdateModulusChannelOrder(realChoice,imChoice, selectedItem); + } + catch (itk::ExceptionObject & err) + { + MsgReporter::GetInstance()->SendError(err.GetDescription()); + } +} + +void +ImageViewerManagerController +::UpdatePhaseChannelOrder(int realChoice, int imChoice, unsigned int selectedItem) +{ + try + { + m_Model->UpdatePhaseChannelOrder(realChoice,imChoice, selectedItem); + } + catch (itk::ExceptionObject & err) + { + MsgReporter::GetInstance()->SendError(err.GetDescription()); + } +} + +} // end namespace otb + diff --git a/ViewerManager/Controller/otbImageViewerManagerController.h b/ViewerManager/Controller/otbImageViewerManagerController.h new file mode 100644 index 0000000000000000000000000000000000000000..9a8c08d767f654abdac14f66c3e88e8dcabb1b06 --- /dev/null +++ b/ViewerManager/Controller/otbImageViewerManagerController.h @@ -0,0 +1,154 @@ +/*========================================================================= + +Program: ORFEO Toolbox +Language: C++ +Date: $Date$ +Version: $Revision$ + + +Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. +See OTBCopyright.txt for details. + + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbImageViewerManagerController_h +#define __otbImageViewerManagerController_h + +#include "otbImageViewerManagerControllerInterface.h" +#include "otbImageViewerManagerViewGUI.h" + +/** NewVisu */ +// #include "otbImageWidgetController.h" +#include "otbWidgetResizingActionHandler.h" + +#include "otbAutoScaleActionHandler.h" + + + +#include "otbObjectList.h" + +namespace otb +{ +class ITK_EXPORT ImageViewerManagerController + : public ImageViewerManagerControllerInterface +{ +public: + /** Standard class typedefs */ + typedef ImageViewerManagerController Self; + typedef ImageViewerManagerControllerInterface Superclass; + typedef itk::SmartPointer<Self> Pointer; + typedef itk::SmartPointer<const Self> ConstPointer; + + typedef ImageViewerManagerViewGUI ViewType; + typedef ViewType::Pointer ViewPointerType; + typedef ViewType::VisuViewType VisuViewType; + typedef ViewType::VisuViewPointerType VisuViewPointerType; + typedef ViewType::ImageWidgetPointerType VisuWidgetPointerType; + + typedef Superclass::ImageType InputImageType; + typedef Superclass::ImagePointerType InputImagePointerType; + + /** NewVisu */ + typedef ModelType::VisuModelType VisuModelType; //RenderingImageLayer + typedef ModelType::VisuModelPointerType VisuModelPointerType; //RenderingImageLayer + + typedef ObjectList<VisuControllerType> VisuControllerListType; + + typedef WidgetResizingActionHandler<VisuModelType,VisuViewType> ResizingHandlerType; + typedef ResizingHandlerType::Pointer ResizingHandlerPointerType; + + typedef ChangeExtractRegionActionHandler<VisuModelType,VisuViewType> ChangeExtractRegionHandlerType; + typedef ChangeExtractRegionHandlerType::Pointer ChangeExtractRegionHandlerPointerType; + + typedef AutoScaleActionHandler<ViewType::ImageWidgetType> AutoScaleHandlerType; + typedef AutoScaleHandlerType::Pointer AutoScaleHandlerPointerType; + + /** Standard type macros */ + itkTypeMacro(ImageViewerManagerController,Superclass); + itkNewMacro(Self); + + /** NewVisu */ + VisuControllerPointerType GetVisuController() + { + return m_VisuController; + } + VisuControllerPointerType GetPreviewVisuController() + { + return m_PreviewVisuController; + } + + void SetView(ViewPointerType pView) + { + m_View = pView; + + m_AutoScaleHandler = AutoScaleHandlerType::New(); + m_AutoScaleHandler->SetPreviewWidget(m_View->GetPreviewWidget()); + m_PreviewVisuController->AddActionHandler(m_AutoScaleHandler); + } + + + +/* VisuControllerListPointerType GetVisuControllerList() */ +/* { */ +/* return m_VisuControllerList; */ +/* } */ + + + //virtual void AddController(VisuModelPointerType modelRenderingLayer ,VisuViewPointerType visuView); + + virtual void OpenInputImage(const char * filename); + virtual void CloseImage(unsigned int selectedItem); + virtual void UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem); + 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 SaveOutput(); */ +/* virtual void ResetModel(); */ +/* virtual void ClearFeatures(); */ +/* virtual void CreateFeature(FeatureType featureType); */ +/* virtual void ClearSelectedChannels(); */ +/* virtual void SetOutputFileName( const char * name ); */ +/* virtual void AddInputChannels(std::vector<unsigned int> list); */ +/* virtual void ChangeFilterStatus(int id); */ +/* virtual void ViewedRegionChanged(); */ +/* virtual void PixelClicked(const IndexType & index); */ +/* virtual void AddToOutputListOrder(int id); */ +/* virtual void RemoveFromOutputListOrder(int id); */ + + +protected: + /** Constructor */ + ImageViewerManagerController(); + /** Destructor */ + virtual ~ImageViewerManagerController(); + +private: + ImageViewerManagerController(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + + /** Pointer to the view */ + ViewPointerType m_View; + +/** NewVisu */ + VisuControllerPointerType m_VisuController; + VisuControllerPointerType m_PreviewVisuController; + + AutoScaleHandlerPointerType m_AutoScaleHandler; + + VisuControllerListPointerType m_VisuControllerList; + + /** Model of the application*/ + +}; +} //end namespace otb + +#endif + diff --git a/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h b/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h new file mode 100644 index 0000000000000000000000000000000000000000..9e31bba096be58518b856dfcc21d890ba7798e22 --- /dev/null +++ b/ViewerManager/Controller/otbImageViewerManagerControllerInterface.h @@ -0,0 +1,101 @@ + +/*========================================================================= + +Program: ORFEO Toolbox +Language: C++ +Date: $Date$ +Version: $Revision$ + + +Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. +See OTBCopyright.txt for details. + + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbImageViewerManagerControllerInterface_h +#define __otbImageViewerManagerControllerInterface_h + +#include "otbImageViewerFullResolutionEventsInterface.h" +#include "otbImageViewerManagerModel.h" + + + +/** NewVisu */ +#include "otbImageWidgetController.h" +#include "otbImageWidget.h" + +#include "otbObjectList.h" + +namespace otb +{ +class ITK_EXPORT ImageViewerManagerControllerInterface + : public ImageViewerFullResolutionEventsInterface +{ +public: + /** Standard class typedefs */ + typedef ImageViewerManagerControllerInterface Self; + typedef ImageViewerFullResolutionEventsInterface Superclass; + typedef itk::SmartPointer<Self> Pointer; + typedef itk::SmartPointer<const Self> ConstPointer; + + + typedef ImageViewerManagerModel ModelType; + typedef ModelType::VisuModelType VisuModelType; //RenderingImageLayer + typedef ModelType::VisuModelPointerType VisuModelPointerType; + typedef ModelType::ImageType ImageType; + typedef ModelType::ImagePointerType ImagePointerType; + + +/** NewVisu */ + typedef ImageWidgetController VisuControllerType; + typedef VisuControllerType::Pointer VisuControllerPointerType; + + typedef ObjectList<VisuControllerType> VisuControllerListType; + typedef VisuControllerListType::Pointer VisuControllerListPointerType; + + typedef ImageWidgetController WidgetControllerType; + typedef WidgetControllerType::Pointer WidgetControllerPointerType; + + typedef ImageWidget<> WidgetType; + typedef WidgetType::Pointer VisuWidgetPointerType; + + /** Standard type macros */ + itkTypeMacro(ImageViewerManagerControllerInterface,Superclass); + + /** Users actions */ + virtual void OpenInputImage(const char * filename) =0; + virtual void CloseImage(unsigned int selectedItem) = 0; + virtual void UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem) = 0; + 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; + + /** NewVisu */ + virtual VisuControllerPointerType GetVisuController()=0; + virtual VisuControllerPointerType GetPreviewVisuController() = 0; + + + +protected: + /** Constructor */ + ImageViewerManagerControllerInterface() + { + m_Model = ModelType::GetInstance(); + } + /** Destructor */ + ~ImageViewerManagerControllerInterface() {}; + + /** The instance of the model (for commodity) */ + ModelType * m_Model; + +private: + ImageViewerManagerControllerInterface(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented +}; +} // end namespace otb + +#endif diff --git a/ViewerManager/Model/otbImageViewerManagerModel.cxx b/ViewerManager/Model/otbImageViewerManagerModel.cxx new file mode 100644 index 0000000000000000000000000000000000000000..61fcf621f69aa27dac8bdbda5e6cfe71bb48dff2 --- /dev/null +++ b/ViewerManager/Model/otbImageViewerManagerModel.cxx @@ -0,0 +1,262 @@ +/*========================================================================= + +Program: ORFEO Toolbox +Language: C++ +Date: $Date$ +Version: $Revision$ + + +Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. +See OTBCopyright.txt for details. + + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include "otbImageViewerManagerModel.h" +#include "otbFltkFilterWatcher.h" +#include <FL/fl_ask.H> +#include "itkExceptionObject.h" +#include "otbMacro.h" + +#include "otbImageFileWriter.h" + + +namespace otb +{ + +/** Initialize the singleton */ +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 +::~ImageViewerManagerModel(){} + + + +/** Manage the singleton */ +ImageViewerManagerModel::Pointer +ImageViewerManagerModel::GetInstance() +{ + if (!Instance) + { + Instance = ImageViewerManagerModel::New(); + } + return Instance; +} + +void +ImageViewerManagerModel +::Notify(ImageViewerManagerEventsListener * listener) +{ + listener->ImageViewerManagerNotify(); +} + +void +ImageViewerManagerModel +::OpenImage(std::string filename) +{ + /** Reader*/ + ReaderPointerType reader = ReaderType::New(); + reader->SetFileName(filename); + reader->GenerateOutputInformation(); + + /** Generate the layer*/ + m_VisuGenerator->SetImage(reader->GetOutput()); + m_VisuGenerator->GenerateLayer(); + StandardRenderingFunctionType::Pointer rendrerFuntion = m_VisuGenerator->GetDefaultRenderingFunction(); + + + /** Rendering image*/ + VisuModelPointerType rendering = VisuModelType::New(); + rendering->AddLayer(m_VisuGenerator->GetLayer()); + rendering->Update(); + + /** View*/ + VisuViewPointerType visuView = this->BuiltVisu(rendering); + + /** Controller*/ + WidgetControllerPointerType controller = this->BuiltController(rendering, visuView); + + /** Finish Cuilting the visu*/ + visuView->SetController(controller); + + /** Store all the information in the structure*/ + ObjectsTracked currentComponent; + + currentComponent.fileName = filename; + currentComponent.pLayer = m_VisuGenerator->GetLayer(); + currentComponent.pReader = reader; + currentComponent.pRendering = rendering; + currentComponent.pVisuView = visuView; + currentComponent.pWidgetController = controller; + currentComponent.pRenderFuntion = rendrerFuntion; + + /** Add the the struct in the list*/ + m_ObjectTrackedList.push_back(currentComponent); + std::cout << "Size of the component Struct is " << m_ObjectTrackedList.size() << std::endl; + + m_HasImageOpened = true; + this->NotifyAll(); + m_HasImageOpened = false; + +} +/** + * Built a part of the visu, create a pointer and add a model to the visu + */ +ImageViewerManagerModel +::VisuViewPointerType +ImageViewerManagerModel +::BuiltVisu(VisuModelPointerType pRendering) +{ + VisuViewPointerType visuView = VisuViewType::New(); + visuView->SetModel(pRendering); + + return visuView; +} + +/** + * Add Controller + */ +ImageViewerManagerModel +::WidgetControllerPointerType +ImageViewerManagerModel +::BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView) +{ + WidgetControllerPointerType controller = WidgetControllerType::New(); + + // Add the resizing handler + ResizingHandlerType::Pointer resizingHandler = ResizingHandlerType::New(); + resizingHandler->SetModel(modelRenderingLayer); + resizingHandler->SetView(visuView); + controller->AddActionHandler(resizingHandler); + + // Add the change scaled region handler + ChangeScaledRegionHandlerType::Pointer changeScaledHandler =ChangeScaledRegionHandlerType::New(); + changeScaledHandler->SetModel(modelRenderingLayer); + changeScaledHandler->SetView(visuView); + controller->AddActionHandler(changeScaledHandler); + + // Add the change extract region handler + ChangeRegionHandlerType::Pointer changeHandler =ChangeRegionHandlerType::New(); + changeHandler->SetModel(modelRenderingLayer); + changeHandler->SetView(visuView); + controller->AddActionHandler(changeHandler); + + // Add the change scaled handler + ChangeScaleHandlerType::Pointer changeScaleHandler =ChangeScaleHandlerType::New(); + changeScaleHandler->SetModel(modelRenderingLayer ); + changeScaleHandler->SetView(visuView); + controller->AddActionHandler(changeScaleHandler); + + //Pixel Description Handling + m_PixelModel->SetLayers(modelRenderingLayer->GetLayers()); + PixelDescriptionActionHandlerType::Pointer pixelActionHandler = PixelDescriptionActionHandlerType::New(); + pixelActionHandler->SetView(visuView); + pixelActionHandler->SetModel(m_PixelModel); + controller->AddActionHandler(pixelActionHandler); + + + return controller; +} + +void +ImageViewerManagerModel +::CloseImage(unsigned int selectedItem) +{ + m_ObjectTrackedList.erase(m_ObjectTrackedList.begin()+selectedItem-1); +} + +void +ImageViewerManagerModel +::UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem) +{ + StandardRenderingFunctionType::Pointer renderFunction = m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion; + renderFunction->SetRedChannelIndex(redChoice); + renderFunction->SetGreenChannelIndex(greenChoice); + renderFunction->SetBlueChannelIndex(BlueChoice); + + //Update the layer + m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(renderFunction); + m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); + + //Notify + m_HasChangedChannelOrder = true; + this->NotifyAll(); + m_HasChangedChannelOrder = false; +} + +void +ImageViewerManagerModel +::UpdateGrayScaleChannelOrder(int choice, unsigned int selectedItem) +{ + StandardRenderingFunctionType::Pointer renderFunction = m_ObjectTrackedList.at(selectedItem-1).pRenderFuntion; + renderFunction->SetAllChannels(choice); + + //Update the layer + m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(renderFunction); + m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); + + //Notify + m_HasChangedChannelOrder = true; + this->NotifyAll(); + m_HasChangedChannelOrder = false; +} + +void +ImageViewerManagerModel +::UpdateModulusChannelOrder(int realChoice , int imChoice, unsigned int selectedItem ) +{ + ModulusRenderingFunction::Pointer modulusFunction = ModulusRenderingFunction::New(); + modulusFunction->SetRedChannelIndex(realChoice); + modulusFunction->SetGreenChannelIndex(imChoice); + modulusFunction->Initialize(); + + //Update the layer + m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(modulusFunction); + m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); + + //Notify + m_HasChangedChannelOrder = true; + this->NotifyAll(); + m_HasChangedChannelOrder = false; +} + + +void +ImageViewerManagerModel +::UpdatePhaseChannelOrder(int realChoice , int imChoice, unsigned int selectedItem ) +{ + PhaseRenderingFunction::Pointer phaseFunction = PhaseRenderingFunction::New(); + phaseFunction->SetRedChannelIndex(realChoice); + phaseFunction->SetGreenChannelIndex(imChoice); + phaseFunction->Initialize(); + + //Update the layer + m_ObjectTrackedList.at(selectedItem-1).pLayer->SetRenderingFunction(phaseFunction); + m_ObjectTrackedList.at(selectedItem-1).pRendering->Update(); + + //Notify + m_HasChangedChannelOrder = true; + this->NotifyAll(); + m_HasChangedChannelOrder = false; +} + + +} + + diff --git a/ViewerManager/Model/otbImageViewerManagerModel.h b/ViewerManager/Model/otbImageViewerManagerModel.h new file mode 100644 index 0000000000000000000000000000000000000000..b2ede91a28f152f555ab2054f7fde01c30985edf --- /dev/null +++ b/ViewerManager/Model/otbImageViewerManagerModel.h @@ -0,0 +1,207 @@ +/*========================================================================= + +Program: ORFEO Toolbox +Language: C++ +Date: $Date$ +Version: $Revision$ + + +Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. +See OTBCopyright.txt for details. + + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbImageViewerManagerModel_h +#define __otbImageViewerManagerModel_h + +#include "otbMVCModel.h" +#include "otbImageViewerManagerEventsListener.h" +#include "otbImage.h" +#include "otbVectorImage.h" +#include "itkRGBPixel.h" +#include "otbImageFileReader.h" +#include "otbObjectList.h" + +/** NewVisu */ +#include "otbImageLayer.h" +#include "otbImageLayerGenerator.h" +#include "otbImageLayerRenderingModel.h" + +#include "otbWidgetResizingActionHandler.h" +#include "otbChangeScaledExtractRegionActionHandler.h" +#include "otbChangeExtractRegionActionHandler.h" +#include "otbChangeScaleActionHandler.h" + +#include "otbModulusRenderingFunction.h" +#include "otbPhaseRenderingFunction.h" + +#include "otbPixelDescriptionModel.h" +#include "otbPixelDescriptionActionHandler.h" + + +#include "otbImageView.h" +#include "otbImageWidgetController.h" + +namespace otb +{ +/** \class ImageViewerManagerModel + * + * + * + */ + +class ITK_EXPORT ImageViewerManagerModel + : public MVCModel<ImageViewerManagerEventsListener> +{ + +public: + /** Standard class typedefs */ + typedef ImageViewerManagerModel Self; + typedef MVCModel<ImageViewerManagerEventsListener> Superclass; + typedef itk::SmartPointer<Self> Pointer; + typedef itk::SmartPointer<const Self> ConstPointer; + + /** Standard type macro */ + itkTypeMacro(ImageViewerManagerModel, MVCModel); + + /** Images typedefs */ + 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 support for layers */ + typedef otb::ImageLayer<ImageType> LayerType; + typedef LayerType::Pointer LayerPointerType; + + 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 support for rendering image*/ + typedef otb::ImageLayerRenderingModel<ViewerImageType> VisuModelType; + typedef VisuModelType::Pointer VisuModelPointerType; + + /** NewVisu */ + typedef ImageView<VisuModelType> VisuViewType; + typedef VisuViewType::Pointer VisuViewPointerType; + + typedef ImageWidgetController WidgetControllerType; + typedef WidgetControllerType::Pointer WidgetControllerPointerType; + + typedef WidgetResizingActionHandler<VisuModelType,VisuViewType> ResizingHandlerType; + typedef ResizingHandlerType::Pointer ResizingHandlerPointerType; + 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; + + + /** + * Struct embedded in the model + */ + struct _ObjectsTracked + { + ReaderPointerType pReader; + LayerPointerType pLayer; + VisuModelPointerType pRendering; + WidgetControllerPointerType pWidgetController; + VisuViewPointerType pVisuView; + StandardRenderingFunctionType::Pointer pRenderFuntion; + std::string fileName; + + }; + + typedef struct _ObjectsTracked ObjectsTracked; + + /** + * List of objectTracked, we cannot use ObjectList + * for struct cause don't implenement Register method + */ + typedef std::vector<ObjectsTracked> ObjectTrackedList; + + /** Get the unique instanc1e of the model */ + static Pointer GetInstance(); + + virtual void OpenImage(std::string strfilename); + virtual void CloseImage(unsigned int selectedItem); + virtual void UpdateRGBChannelOrder(int redChoice , int greenChoice, int BlueChoice, unsigned int selectedItem); + 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 ); + + /** Method needed to Get the list of componenets stored*/ + ObjectTrackedList GetObjectList() + { + return m_ObjectTrackedList; + } + + /** Get the pixel description model */ + itkGetObjectMacro(PixelModel,PixelDescriptionModelType); + + /** Boolean Flags */ + itkGetMacro(HasImageOpened,bool); + itkGetMacro(HasChangedChannelOrder,bool); + + +protected: + /** This is protected for the singleton. Use GetInstance() instead. */ + itkNewMacro(Self); + + /** Constructor */ + ImageViewerManagerModel(); + + /** Destructor */ + virtual ~ImageViewerManagerModel(); + + /** Built Visu & Controller*/ + virtual VisuViewPointerType BuiltVisu(VisuModelPointerType pRendering); + virtual WidgetControllerPointerType BuiltController(VisuModelPointerType modelRenderingLayer, VisuViewPointerType visuView); + + +private: + ImageViewerManagerModel(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + + /** Notify a given listener of changes */ + virtual void Notify(ImageViewerManagerEventsListener * listener); + + /** 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; +}; + + + +} +#endif + diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.cxx b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx new file mode 100644 index 0000000000000000000000000000000000000000..11796b49af7153f6fc7904a910720ff118c01f18 --- /dev/null +++ b/ViewerManager/View/otbImageViewerManagerViewGUI.cxx @@ -0,0 +1,767 @@ +/*========================================================================= + +Program: ORFEO Toolbox +Language: C++ +Date: $Date$ +Version: $Revision$ + + +Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. +See OTBCopyright.txt for details. + + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULA +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#include <FL/Fl_Text_Buffer.H> +#include "otbImageViewerManagerViewGUI.h" +#include "otbMacro.h" +#include "otbFileName.h" + +#include "base/ossimFilename.h" +#include "base/ossimDirectory.h" + +namespace otb +{ +/** + * Constructor + */ + +ImageViewerManagerViewGUI +::ImageViewerManagerViewGUI():m_TemplateViewerName(""),m_DisplayedLabel("+ "), + m_UndisplayedLabel("- ") +{ + + // + m_VisuViewShowedList = VisuViewShowedList::New(); + m_VisuView = VisuViewType::New(); + m_PreviewWidget = ImageWidgetType::New(); + m_pRenderingFuntion = StandardRenderingFunctionType::New(); + m_PixelView = PixelDescriptionViewType::New(); + m_CurveWidget = CurvesWidgetType::New(); + + //Get an instance of the model + m_ImageViewerManagerModel = ImageViewerManagerModel::GetInstance(); + m_ImageViewerManagerModel->RegisterListener(this); + + //Create the component of the GUI + this->CreateGUI(); + + //Create buffer for the guiViewerInformation + Fl_Text_Buffer * buffer = new Fl_Text_Buffer(); + this->guiViewerInformation->buffer(buffer); + + //init the previewWindow + m_PreviewWidget->label("PreviewWidget"); + gPreviewWindow->add(m_PreviewWidget); + gPreviewWindow->box(FL_NO_BOX); + gPreviewWindow->resizable(gPreviewWindow); + m_PreviewWidget->resize(gPreviewWindow->x(), gPreviewWindow->y(), gPreviewWindow->w(), gPreviewWindow->h() ); + + // Init the widgets : PixelDescription, Full, Scroll, Zoom & Histogram + m_FullWindow = new Fl_Window(500,500); + m_ScrollWindow = new Fl_Window(200,200); + m_ZoomWindow = new Fl_Window(200,200); + m_PixelWindow = new Fl_Window(200,200); + m_HistogramWindow = new Fl_Window(300,200); + + + + + // + m_CurveWidget->resize(0,0,300,200); + m_HistogramWindow->add(m_CurveWidget); + m_HistogramWindow->resize(0,0,300,200); + m_Bhistogram = HistogramCurveType::New(); + m_Rhistogram = HistogramCurveType::New(); + m_Ghistogram = HistogramCurveType::New(); + + 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"); + + //Add a widget once + m_PixelWindow->add(m_PixelView->GetPixelDescriptionWidget()); + + // + m_PackedWindow = PackedWidgetManagerType::New(); +} + + /** + * + */ +void +ImageViewerManagerViewGUI +::OpenImage() +{ + std::string pikedFileName=""; + char * cfname ; + cfname = fl_file_chooser("Pick an image file", "*.*",pikedFileName.c_str()); + + if (cfname == NULL || strlen(cfname)<1) + { + otbMsgDebugMacro(<<"Empty file name!"); + return ; + } + + Fl::check(); + guiMainWindow->redraw(); + + //Put the status of the last image + m_DisplayStatusList.push_back(false); + //m_DisplayedWidgetList.push_back(NULL); + + // Call the Controller + m_ImageViewerManagerController->OpenInputImage(cfname); + + + +} + +/** + * Handle the notification of the model + */ +void +ImageViewerManagerViewGUI +::ImageViewerManagerNotify() +{ + if(m_ImageViewerManagerModel->GetHasImageOpened()) + this->AddImageListName(); + + //Update the + if(m_ImageViewerManagerModel->GetHasChangedChannelOrder()) + { + + std::cout << " ViewerNotification " << std::endl; + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + return; // no image selected, return + + //DipalyPreviewWidget + this->DisplayPreviewWidget(selectedItem); + + //Update the widget dispalyed + if(m_DisplayStatusList[selectedItem-1]) + { + this->Display(selectedItem); + m_FullWindow->redraw(); + m_ScrollWindow->redraw(); + m_ZoomWindow->redraw(); + } + + //Update Information + this->UpdateInformation(selectedItem); + } +} + +/** + * CloseImage , Send the notification to the controller then to the model + */ +void +ImageViewerManagerViewGUI +::CloseImage() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + return; // no image selected, return + + //Call the controller + m_ImageViewerManagerController->CloseImage(selectedItem); + + //Erase the item selected + guiImageList->remove(selectedItem); + m_PreviewWidget->hide(); + + if(m_DisplayStatusList[selectedItem-1]) + { + this->Undisplay(selectedItem); + } + m_DisplayStatusList.erase( m_DisplayStatusList.begin()+(selectedItem-1)); + +} +/** + * Show the mainWindow + */ +void +ImageViewerManagerViewGUI +::Show() +{ + guiMainWindow->show(); +} + +/** + * Update the filename + */ +void +ImageViewerManagerViewGUI +::AddImageListName() +{ + //Update the Image List widget + unsigned int len = m_ImageViewerManagerModel->GetObjectList().size(); + std::string fileName = m_ImageViewerManagerModel->GetObjectList().at(len-1).fileName; + int slashIndex = fileName.find_last_of("/",fileName.size()); + + itk::OStringStream oss; + oss<<m_UndisplayedLabel; + oss<<m_TemplateViewerName<<fileName.substr(slashIndex+1,fileName.size()); + guiImageList->add(oss.str().c_str()); + guiImageList->redraw(); +} + +/** + * Quit GUI + */ +void +ImageViewerManagerViewGUI +::SelectAction() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + { + // no image selected, return + return; + } + + //DipalyPreviewWidget + this->DisplayPreviewWidget(selectedItem); + + //Update SelectedImageInformation + this->UpdateInformation(selectedItem); + + //Udpate the ViewerGUISetup + this->UpdateViewerSetupWindow(selectedItem); +} +/** + * Quit GUI + */ +void +ImageViewerManagerViewGUI +::DisplayPreviewWidget(unsigned int selectedItem) +{ + //Build the m_PreviewWidget + VisuModelPointerType rendering = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRendering; + + m_PreviewWidget->ClearBuffer(); + ImageViewerManagerModelType::ViewerImageType * quickLook = rendering->GetRasterizedQuicklook(); + m_PreviewWidget->ReadBuffer(quickLook, quickLook->GetLargestPossibleRegion()); + + double newIsotropicZoom = this->UpdatePreviewWidgetIsotropicZoom(quickLook->GetLargestPossibleRegion().GetSize()); + m_PreviewWidget->SetIsotropicZoom(newIsotropicZoom); + m_PreviewWidget ->show(); + m_PreviewWidget->redraw(); +} + + + +/** + * Compute the size of the + */ +double +ImageViewerManagerViewGUI +::UpdatePreviewWidgetIsotropicZoom(SizeType size) +{ + int h = gPreviewWindow->h(); + int w = gPreviewWindow->w(); + + double zoomW = static_cast<double>(w)/static_cast<double>(size[0]); + double zoomH = static_cast<double>(h)/static_cast<double>(size[1]); + + return std::min(zoomW,zoomH); +} + +/** + * Show Hide + */ +void +ImageViewerManagerViewGUI +::ShowHide() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + { + // no image selected, return + return; + } + + /* check what to do */ + if(!m_DisplayStatusList[selectedItem-1]) + { + //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; + this->UpdateImageListShowed(selectedItem, m_DisplayedLabel); + this->Display(selectedItem); + } + else + { + m_DisplayStatusList[selectedItem-1] = false; + this->UpdateImageListShowed(selectedItem, m_UndisplayedLabel); + this->Undisplay(selectedItem); + } +} + +/** + * Display the three widget + */ +void +ImageViewerManagerViewGUI +::Display(unsigned int selectedItem) +{ + //- Get the view stored in the model + //- Build the widgets + + //First get the histogram list + m_pRenderingFuntion = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion; + m_Rhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(m_pRenderingFuntion->GetRedChannelIndex())); + m_Ghistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(m_pRenderingFuntion->GetGreenChannelIndex())); + m_Bhistogram->SetHistogram(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pLayer->GetHistogramList()->GetNthElement(m_pRenderingFuntion->GetBlueChannelIndex())); + + //build the + VisuViewPointerType currentVisuView = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pVisuView; + m_PixelView->SetModel(m_ImageViewerManagerModel->GetPixelModel()); + + + 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(); + + + +// currentVisuView->GetFullWidget()->show(); +// //m_PixelView->GetPixelDescriptionWidget()->show(); +// currentVisuView->GetScrollWidget()->show(); +// currentVisuView->GetZoomWidget()->show(); + + +// // //Pixel Description + +// // m_PixelWindow->label("Pixel Description"); +// // m_PixelWindow->resizable(m_PixelView->GetPixelDescriptionWidget()); +// // m_PixelWindow->show(); +// m_PackedWindow->m_PixelInformationGroup->resizable(m_PixelView->GetPixelDescriptionWidget()); +// m_PixelView->GetPixelDescriptionWidget()->resize(m_PackedWindow->m_PixelInformationGroup->x(), m_PackedWindow->m_PixelInformationGroup->y(), +// m_PackedWindow->m_PixelInformationGroup->w(),m_PackedWindow->m_PixelInformationGroup->h()); + +// // //FullWidget +// // m_FullWindow->label("Full Window"); +// // m_FullWindow->add(currentVisuView->GetFullWidget()); +// // m_FullWindow->resizable(currentVisuView->GetFullWidget()); +// // m_FullWindow->show(); + +// m_PackedWindow->m_FullGroup->add(currentVisuView->GetFullWidget()); +// m_PackedWindow->m_FullGroup->resizable(currentVisuView->GetFullWidget()); +// currentVisuView->GetFullWidget()->resize(m_PackedWindow->m_FullGroup->x(), m_PackedWindow->m_FullGroup->y(), +// m_PackedWindow->m_FullGroup->w(),m_PackedWindow->m_FullGroup->h()); + +// // m_FullWindow->redraw(); + +// // //ScrollWidget +// // m_ScrollWindow->label("Scroll Window"); +// // m_ScrollWindow->add((currentVisuView->GetScrollWidget())); +// // m_ScrollWindow->resizable(currentVisuView->GetScrollWidget()); +// // m_ScrollWindow->show(); +// m_PackedWindow->m_QuicklookGroup->add(currentVisuView->GetScrollWidget()); +// m_PackedWindow->m_QuicklookGroup->resizable(currentVisuView->GetScrollWidget()); +// currentVisuView->GetScrollWidget()->resize(m_PackedWindow->m_QuicklookGroup->x(),m_PackedWindow->m_QuicklookGroup->y(), +// m_PackedWindow->m_QuicklookGroup->w(),m_PackedWindow->m_QuicklookGroup->h()); +// // m_ScrollWindow->redraw(); + +// // //Zoom Widget +// // m_ZoomWindow->label("Zoom Window"); +// // m_ZoomWindow->add(currentVisuView->GetZoomWidget()); +// // m_ZoomWindow->resizable(currentVisuView->GetZoomWidget()); +// // m_ZoomWindow->show(); + +// m_PackedWindow->m_ZoomGroup->add(currentVisuView->GetZoomWidget()); +// m_PackedWindow->m_ZoomGroup->resizable(currentVisuView->GetZoomWidget()); +// currentVisuView->GetZoomWidget()->resize(m_PackedWindow->m_ZoomGroup->x(),m_PackedWindow->m_ZoomGroup->y(), +// m_PackedWindow->m_ZoomGroup->w(),m_PackedWindow->m_ZoomGroup->h()); + +// // m_ZoomWindow->redraw(); + +// // adding histograms rendering +// // Get the renderingFunction + + + + // // m_HistogramWindow->show(); +// m_PackedWindow->m_HistogramsGroup->add(m_CurveWidget); +// m_CurveWidget->resize(m_PackedWindow->m_HistogramsGroup->x(),m_PackedWindow->m_HistogramsGroup->y(), +// m_PackedWindow->m_HistogramsGroup->w(),m_PackedWindow->m_HistogramsGroup->h()); + +// // m_CurveWidget->redraw(); + + //Display Everything + + + //currentVisuView->GetFullWidget()->show(); + //m_PixelView->GetPixelDescriptionWidget()->show(); + //currentVisuView->GetScrollWidget()->show(); + //currentVisuView->GetZoomWidget()->show(); + //m_CurveWidget->show(); + +} + +/** + * Update the guiImageList + * Put a "+" if the view is being showed, or a "-" otherwise in the begining of the imageName + */ +void +ImageViewerManagerViewGUI +::UpdateImageListShowed(unsigned int selectedItem, std::string status) +{ + + /* Update the ImageList using the status label "+" or "-" */ + std::string fileName = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).fileName; + int slashIndex = fileName.find_last_of("/",fileName.size()); + + itk::OStringStream oss; + oss<<status; + oss<<m_TemplateViewerName<<fileName.substr(slashIndex+1,fileName.size()); + guiImageList->text(selectedItem,oss.str().c_str()); + oss.str(""); +} + +/** + * Hide all the widget opened + */ +void +ImageViewerManagerViewGUI +::Undisplay(unsigned int selectedItem) +{ + // m_FullWindow->hide(); + // m_ScrollWindow->hide(); + // m_ZoomWindow->hide(); + // m_PixelWindow->hide(); + // m_HistogramWindow->hide(); + + + //m_PackedWindow->m_Window->hide(); +} +/** + * Hide all the widget opened + */ +void +ImageViewerManagerViewGUI +::HideAll() +{ + // Set the display Label to undislayed + for(unsigned int i = 0; i<m_DisplayStatusList.size() ; i++) + { + if(m_DisplayStatusList[i]) + { + std::cout << "cest le " << i+1 << " qui est affiche "<< std::endl; + this->UpdateImageListShowed(i+1, m_UndisplayedLabel); + m_DisplayStatusList[i] = false; + } + } + // Close the opened widget + + //packeduWindow->m_Window->hide(); + + +// m_FullWindow->hide(); +// m_ScrollWindow->hide(); +// m_ZoomWindow->hide(); +// m_PixelWindow->hide(); +// m_HistogramWindow->hide(); +} + +/** + * Quit GUI + */ +void +ImageViewerManagerViewGUI +::Quit() +{ + m_FullWindow->hide(); + m_ScrollWindow->hide(); + m_ZoomWindow->hide(); + m_PixelWindow->hide(); + guiMainWindow->hide(); +} + +/** + * + */ +void +ImageViewerManagerViewGUI +::UpdateInformation(unsigned int selectedItem) +{ + itk::OStringStream oss; + oss.str(""); + std::string selectedImageName = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).fileName; + // Clear the info buffer + guiViewerInformation->buffer()->remove(0,guiViewerInformation->buffer()->length()); + oss<<"Filename: "<<selectedImageName<<std::endl; + guiViewerInformation->insert(oss.str().c_str()); + oss.str(""); + oss<<"Image information:"<<std::endl; + guiViewerInformation->insert(oss.str().c_str()); + oss.str(""); + oss<<"Number of bands: "<<m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader->GetOutput()->GetNumberOfComponentsPerPixel(); + oss<<" - Size: "<<m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader->GetOutput()->GetLargestPossibleRegion().GetSize()<<std::endl; + + guiViewerInformation->insert(oss.str().c_str()); + oss.str(""); + + //update band information + if(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader->GetOutput()->GetNumberOfComponentsPerPixel()>=3) + { + oss<<"RGB Composition: "; + oss<<" Band 1: "<<m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion->GetRedChannelIndex(); + oss<<" Band 2: "<<m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion->GetGreenChannelIndex(); + oss<<" Band 3: "<<m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion->GetBlueChannelIndex()<<std::endl; + } + + guiViewerInformation->insert(oss.str().c_str()); + oss.str(""); +} + +/** + * + */ +void +ImageViewerManagerViewGUI +::UpdateViewerSetupWindow(unsigned int selectedItem) +{ + + ImageViewerManagerModelType::ReaderPointerType reader = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pReader; + m_NbComponent = reader->GetOutput()->GetNumberOfComponentsPerPixel(); + + itk::OStringStream oss; + oss.str(""); + + for (unsigned int i = 0;i<m_NbComponent;++i) + { + oss.str(""); + oss<<i+1; + guiGrayscaleChannelChoice->add(oss.str().c_str()); + guiRedChannelChoice->add(oss.str().c_str()); + guiGreenChannelChoice->add(oss.str().c_str()); + guiBlueChannelChoice->add(oss.str().c_str()); + guiGrayscaleChannelChoice->add(oss.str().c_str()); + guiRealChannelChoice->add(oss.str().c_str()); + guiImaginaryChannelChoice->add(oss.str().c_str()); + } + + switch(m_NbComponent){ + case 1 : + this->GrayScaleSet(); + break; + case 4 : + this->RGBSet(); + break; + case 3 : + this->RGBSet(); + break; + default: + this->ComplexSet(); + } + + guiViewerSetupName->value(m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).fileName.c_str()); + +} + +/** + * RGBSet(); + */ +void +ImageViewerManagerViewGUI +::RGBSet() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + { + // no image selected, return + return; + } + + StandardRenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion; + + guiViewerSetupColorMode->set(); + guiViewerSetupComplexMode->clear(); + guiViewerSetupGrayscaleMode->clear(); + guiGrayscaleChannelChoice->deactivate(); + guiRealChannelChoice->deactivate(); + guiImaginaryChannelChoice->deactivate(); + bModulus->deactivate(); + bPhase->deactivate(); + + guiRedChannelChoice->activate(); + 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)); + +} + +/** + * GrayScale(); + */ +void +ImageViewerManagerViewGUI +::GrayScaleSet() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + { + // no image selected, return + return; + } + + StandardRenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion; + + guiViewerSetupGrayscaleMode->set(); + guiViewerSetupComplexMode->clear(); + guiViewerSetupColorMode->clear(); + + guiRealChannelChoice->deactivate(); + guiImaginaryChannelChoice->deactivate(); + bModulus->deactivate(); + bPhase->deactivate(); + guiRedChannelChoice->deactivate(); + guiGreenChannelChoice->deactivate(); + guiBlueChannelChoice->deactivate(); + + guiGrayscaleChannelChoice->activate(); + guiGrayscaleChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),m_NbComponent-1)); +} + + +void +ImageViewerManagerViewGUI +::ComplexSet() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + { + // no image selected, return + return; + } + + StandardRenderingFunctionType::Pointer renderingFunction = m_ImageViewerManagerModel->GetObjectList().at(selectedItem-1).pRenderFuntion; + + guiViewerSetupComplexMode->set(); + guiViewerSetupColorMode->clear(); + guiViewerSetupGrayscaleMode->clear(); + guiGrayscaleChannelChoice->deactivate(); + guiRedChannelChoice->deactivate(); + guiGreenChannelChoice->deactivate(); + guiBlueChannelChoice->deactivate(); + guiRealChannelChoice->activate(); + guiImaginaryChannelChoice->activate(); + bModulus->activate(); + bPhase->activate(); + guiRealChannelChoice->value(std::min(renderingFunction->GetRedChannelIndex(),m_NbComponent-1)); + guiImaginaryChannelChoice->value(std::min(renderingFunction->GetGreenChannelIndex(),m_NbComponent-1)); +} + + +/** + * ViewerSetup(); + */ +void +ImageViewerManagerViewGUI +::ViewerSetup() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + { + // no image selected, return + return; + } + guiViewerSetupWindow->show(); +} + +void +ImageViewerManagerViewGUI +::ViewerSetupOk() +{ + unsigned int selectedItem = guiImageList->value(); + if (selectedItem == 0) + { + // no image selected, return + return; + } + + if (guiViewerSetupColorMode->value()) + { + m_ImageViewerManagerController->UpdateRGBChannelOrder(atoi(guiRedChannelChoice->value())-1, + atoi(guiGreenChannelChoice->value())-1, + atoi(guiBlueChannelChoice->value())-1, + selectedItem); + } + else if (guiViewerSetupGrayscaleMode->value()) + { + m_ImageViewerManagerController->UpdateGrayScaleChannelOrder(atoi(guiGrayscaleChannelChoice->value())-1, + selectedItem); + } + else if (guiViewerSetupComplexMode->value()) + { + if (bModulus->value()) + { + m_ImageViewerManagerController->UpdateModulusChannelOrder(atoi(guiRealChannelChoice->value())-1, + atoi(guiImaginaryChannelChoice->value())-1, + selectedItem); + } + else + { + m_ImageViewerManagerController->UpdatePhaseChannelOrder(atoi(guiRealChannelChoice->value())-1, + atoi(guiImaginaryChannelChoice->value())-1, + selectedItem); + } + } +} + +void +ImageViewerManagerViewGUI +::ViewerSetupCancel() +{ + guiViewerSetupWindow->hide(); +} + +/** + * PrintSelf Method + */ + +void +ImageViewerManagerViewGUI +::PrintSelf(std::ostream& os, itk::Indent indent) const +{ + Superclass::PrintSelf(os, indent); +} +} // End namespace otb + diff --git a/ViewerManager/View/otbImageViewerManagerViewGUI.h b/ViewerManager/View/otbImageViewerManagerViewGUI.h new file mode 100644 index 0000000000000000000000000000000000000000..33ee57c4a1579d57f3f44fcb6ea7d695f8805844 --- /dev/null +++ b/ViewerManager/View/otbImageViewerManagerViewGUI.h @@ -0,0 +1,252 @@ +/*========================================================================= + +Program: ORFEO Toolbox +Language: C++ +Date: $Date$ +Version: $Revision$ + + +Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. +See OTBCopyright.txt for details. + + +This software is distributed WITHOUT ANY WARRANTY; without even +the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ +#ifndef __otbImageViewerManagerViewGUI_h +#define __otbImageViewerManagerViewGUI_h + +#include "otbImageViewerManagerEventsListener.h" + +// Disabling deprecation warning +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4996) +#endif +#include "otbImageViewerManagerViewGroup.h" +//#include "otbImageWidgetPackedManager.h" +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#include <FL/Fl_Group.H> +#include "otbImageViewerManagerModel.h" +#include "otbImageViewerManagerControllerInterface.h" + +#include "otbImageView.h" +#include "otbImageWidget.h" +#include "otbPixelDescriptionView.h" + +#include "otbCurves2DWidget.h" +#include "otbHistogramCurve.h" + +#include "otbPackedWidgetManager.h" + +#include "otbObjectList.h" +#include "otbFixedSizeFullImageWidget.h" +#include <FL/Fl_File_Chooser.H> + +namespace otb +{ +/** \class ImageViewerManagerViewGUI + * + */ + class ITK_EXPORT ImageViewerManagerViewGUI + : public ImageViewerManagerEventsListener, public ImageViewerManagerViewGroup +{ +public: + /** Standard typedefs */ + typedef ImageViewerManagerViewGUI Self; + typedef ImageViewerManagerEventsListener Superclass; + typedef itk::SmartPointer<Self> Pointer; + typedef itk::SmartPointer<const Self> ConstPointer; + + /** Type macro */ + itkNewMacro(Self); + + /** Creation through object factory macro */ + itkTypeMacro(ImageViewerManagerViewGUI,ImageViewerManagerEventListener); + + /** Controller */ + typedef ImageViewerManagerControllerInterface::Pointer ImageViewerManagerControllerInterfacePointerType; + + /** Model*/ + typedef ImageViewerManagerModel ImageViewerManagerModelType; + typedef ImageViewerManagerModelType::VisuModelType VisuModelType; //rendreing Image + typedef ImageViewerManagerModelType::VisuModelPointerType VisuModelPointerType; //rendreing Image + typedef ImageViewerManagerModelType::PixelDescriptionModelType PixelDescriptionModelType; //rendreing Image + typedef ImageViewerManagerModelType::LayerType::HistogramType HistogramType; + typedef ImageViewerManagerModelType::StandardRenderingFunctionType StandardRenderingFunctionType; + + typedef ImageView<VisuModelType> VisuViewType; + typedef VisuViewType::Pointer VisuViewPointerType; + + typedef PixelDescriptionView<PixelDescriptionModelType> PixelDescriptionViewType; + + typedef ObjectList<VisuViewType> VisuViewListType; + typedef VisuViewListType::Pointer VisuViewListPointerType; + + //typedef ImageWidgetPackedManager ImageWidgetPackedManagerType; + //typedef std::vector<ImageWidgetPackedManagerType*> WidgetManagerList; + + // + typedef PackedWidgetManager PackedWidgetManagerType; + typedef PackedWidgetManagerType::Pointer PackedWidgetManagerPointerType; + + /** Widget for the preview*/ + typedef ImageWidget<> ImageWidgetType; + typedef ImageWidgetType::SizeType SizeType; + typedef ImageWidgetType::Pointer ImageWidgetPointerType; + + /** Curves 2D widget */ + typedef Curves2DWidget CurvesWidgetType; + typedef CurvesWidgetType::Pointer CurvesWidgetPointerType; + typedef HistogramCurve<HistogramType> HistogramCurveType; + typedef HistogramCurveType::Pointer HistogramCurvePointerType; + + /** vector to store the status of images : diplayed or not displayed*/ + typedef std::vector<bool> BoolVector; + + typedef ObjectList<VisuViewType> VisuViewShowedList; + + + /** Method to set the controller*/ + itkGetObjectMacro(ImageViewerManagerController,ImageViewerManagerControllerInterface); + + void SetImageViewerManagerController(ImageViewerManagerControllerInterface *pController) + { + m_ImageViewerManagerController = pController; + m_VisuView->SetController(m_ImageViewerManagerController->GetVisuController()); + m_PreviewWidget->SetController(m_ImageViewerManagerController->GetPreviewVisuController()); + } + + + /** VisuModel */ + itkGetMacro(VisuView,VisuViewPointerType); + //itkGetMacro(VisuViewList,VisuViewListPointerType ); + + itkGetMacro(PreviewWidget,ImageWidgetPointerType ); + + /// Show() + virtual void Show(); + + // Update the display + virtual void ImageViewerManagerNotify(); + + /// Inherited methods + virtual void OpenImage(); + //virtual VisuViewPointerType AddView(VisuModelPointerType renderingLayer); + +protected: + virtual void CloseImage(); + 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 AddImageListName(); + virtual void Quit(); + virtual void SelectAction(); + virtual double UpdatePreviewWidgetIsotropicZoom(SizeType size); + virtual void ShowHide(); + virtual void HideAll(); + virtual void Display(unsigned int selectedItem); + virtual void Undisplay(unsigned int selectedItem); + virtual void UpdateImageListShowed(unsigned int selectedItem, std::string status); + virtual void GrayScaleSet(); + virtual void RGBSet(); + virtual void ComplexSet(); + /* virtual void ZoomSmallImagesHook(); */ + /* virtual void Diaporama(); */ + /* virtual void DiaporamaPrevious(); */ + /* virtual void DiaporamaNext(); */ + /* virtual void DiaporamaQuit(); */ + + virtual void UpdateInformation(unsigned int selectedItem); + virtual void UpdateViewerSetupWindow(unsigned int selectedItem); + virtual void DisplayPreviewWidget(unsigned int selectedItem); + + /* virtual void UpdateLinkSetupWindow(unsigned int selectedItem); */ + /* virtual void UpdatePreviewWindow(unsigned int selectedItem); */ + /* virtual void UpdateDiaporamaProgressBar(); */ + + + /** Constructor */ + ImageViewerManagerViewGUI(); + /** Destructor */ + virtual ~ImageViewerManagerViewGUI() + { + + delete m_FullWindow; + delete m_ScrollWindow; + delete m_ZoomWindow; + delete m_PixelWindow; + }; + /**PrintSelf method */ + virtual void PrintSelf(std::ostream& os, itk::Indent indent) const; + +private: + ImageViewerManagerViewGUI(const Self&); //purposely not implemented + void operator=(const Self&); //purposely not implemented + + /** Pointer to the model */ + + ImageViewerManagerModel::Pointer m_ImageViewerManagerModel; + /** Pointer to the controller */ + ImageViewerManagerControllerInterface::Pointer m_ImageViewerManagerController; + + BoolVector m_DisplayStatusList; + std::string m_TemplateViewerName ; + std::string m_DisplayedLabel; + std::string m_UndisplayedLabel ; + VisuViewShowedList::Pointer m_VisuViewShowedList; + + /** FL_Windows*/ + Fl_Window* m_FullWindow; + Fl_Window* m_ScrollWindow; + Fl_Window* m_ZoomWindow; + Fl_Window* m_PixelWindow; + Fl_Window* m_HistogramWindow; + + PackedWidgetManagerType::Pointer m_PackedWindow; + + //Packed View + //ImageWidgetPackedManagerType * packedWindow; + //WidgetManagerList m_DisplayedWidgetList; + + /** Curve widget */ + CurvesWidgetPointerType m_CurveWidget; + HistogramCurveType::Pointer m_Bhistogram; + HistogramCurveType::Pointer m_Ghistogram; + HistogramCurveType::Pointer m_Rhistogram; + + unsigned int m_NbComponent; + /** 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; + HistogramCurveType::ColorType m_Red; + HistogramCurveType::ColorType m_Green; + HistogramCurveType::ColorType m_Blue; + + + +}; +}// End namespace otb + +#endif + diff --git a/ViewerManager/View/otbImageViewerManagerViewGroup.fl b/ViewerManager/View/otbImageViewerManagerViewGroup.fl new file mode 100644 index 0000000000000000000000000000000000000000..c45fc6759fc19e0823bff5b128f5551212e0a1b4 --- /dev/null +++ b/ViewerManager/View/otbImageViewerManagerViewGroup.fl @@ -0,0 +1,262 @@ +# data file for the Fltk User Interface Designer (fluid) +version 1.0109 +header_name {.h} +code_name {.cxx} +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 + } { + Fl_Text_Display guiViewerInformation { + label Information + tooltip {Selected image viewer information} xywh {15 324 575 126} box EMBOSSED_BOX color 54 selection_color 55 labelcolor 186 textcolor 187 + } + Fl_Browser guiImageList { + label {Viewers List} + callback {SelectAction();} + tooltip {List of opened image viewer (showed image viewer are prefixed with +, and hidden with -)} xywh {25 35 230 275} type Hold box EMBOSSED_BOX selection_color 20 labelcolor 186 align 1 textcolor 187 + } + Fl_Group gPreviewWindow {open + xywh {280 38 195 189} resizable + } {} + Fl_Group gBottom {open + xywh {260 244 225 60} + } { + Fl_Button guiShowHide { + label {Show / Hide} + callback {ShowHide();} + tooltip {Show or hide the selected image viewer} xywh {260 257 105 33} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x20 color 23 selection_color 23 labelcolor 186 + } + Fl_Button guiHideAll { + label {Hide all} + callback {HideAll();} + tooltip {Hide all the viewers} xywh {373 257 100 33} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x20 color 23 selection_color 23 labelcolor 186 + } + Fl_Group gBlanck1 {open + xywh {475 254 10 41} resizable + } {} + } + Fl_Group gRight {open + xywh {480 31 115 277} + } { + Fl_Button guiOpenImage { + label {Open Image} + callback {OpenImage();} + tooltip {Open an image in a new image viewer} xywh {489 46 95 24} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x6f color 23 selection_color 23 labelcolor 186 + } + Fl_Button guiCloseImage { + label {Close Image} + callback {CloseImage();} + tooltip {Close the selected image} xywh {489 88 95 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x63 color 23 selection_color 23 labelcolor 186 + } + Fl_Button guiViewerSetup { + label {Viewer setup} + callback {ViewerSetup();} + tooltip {Set up the selected viewer} xywh {489 129 95 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x76 color 23 selection_color 23 labelcolor 186 + } + Fl_Button guiLinkSetup { + label {Link setup} + callback {LinkSetup();} + tooltip {Add or remove links with the selected viewer} xywh {489 172 95 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x6c color 23 selection_color 23 labelcolor 186 + } + Fl_Button guiQuit { + label Quit + callback {Quit();} + tooltip {Quit the viewer manager} xywh {490 258 95 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x71 color 23 selection_color 23 labelcolor 186 + } + Fl_Button {} { + label Slideshow + callback {Diaporama();} + tooltip {Launch the slideshow mode} xywh {490 215 95 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0x64 color 23 selection_color 23 labelcolor 186 + } + Fl_Group gBlanck2 {open + xywh {500 288 75 12} resizable + } {} + } + } + 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 + } { + Fl_Round_Button guiViewerSetupGrayscaleMode { + label {Grayscale mode} + callback {GrayScaleSet();} + tooltip {Swith the image viewer mode to grayscale} xywh {22 18 140 24} box ROUND_UP_BOX down_box ROUND_DOWN_BOX value 1 color 23 selection_color 22 labelcolor 186 + } + Fl_Round_Button guiViewerSetupColorMode { + label {RGB composition mode} + callback {RGBSet();} + tooltip {Switch the image viewer mode to RGB composition} xywh {460 17 184 24} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 22 labelcolor 186 + } + Fl_Input_Choice guiGrayscaleChannelChoice { + label {Channel index } open + tooltip {Select the band to view in grayscale mode} xywh {118 73 57 24} box EMBOSSED_BOX color 7 selection_color 55 labelcolor 187 + } {} + Fl_Input_Choice guiRedChannelChoice { + label {Red channel index } open + tooltip {Select band for red channel in RGB composition} xywh {602 51 57 24} box EMBOSSED_BOX color 7 selection_color 55 labelcolor 187 deactivate + } {} + Fl_Input_Choice guiGreenChannelChoice { + label {Green channel index } open + tooltip {Select band for green channel in RGB composition} xywh {602 73 57 24} box EMBOSSED_BOX color 7 selection_color 55 labelcolor 187 deactivate + } {} + Fl_Input_Choice guiBlueChannelChoice { + label {Blue channel index } open + tooltip {Select band for blue channel in RGB composition} xywh {602 95 57 24} box EMBOSSED_BOX color 7 selection_color 55 labelcolor 187 deactivate + } {} + Fl_Return_Button guiViewerSetupOk { + label Ok + callback {ViewerSetupOk();} + tooltip {Save changes and leave viewer set up interface} xywh {353 180 80 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0xff0d color 23 selection_color 23 labelcolor 186 + } + Fl_Input guiViewerSetupName { + label {Viewer name} + tooltip {Set a new name for the selected viewer} xywh {205 136 305 24} box EMBOSSED_BOX color 54 selection_color 55 labelcolor 186 textcolor 187 + } + Fl_Button guiViewerSetupCancel { + label Cancel + callback {ViewerSetupCancel();} + tooltip {Leave viewer set up interface without saving changes} xywh {240 180 80 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 23 labelcolor 186 + } + Fl_Round_Button guiViewerSetupComplexMode { + label {Complex composition mode} + callback {ComplexSet();} + tooltip {Switch the image viewer mode to complex composition} xywh {215 17 210 26} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 22 labelcolor 186 + } + Fl_Input_Choice guiRealChannelChoice { + label {Real channel index } open + tooltip {Select band for real channel in complex composition} xywh {375 74 57 24} box EMBOSSED_BOX color 7 selection_color 55 labelcolor 187 deactivate + } {} + Fl_Input_Choice guiImaginaryChannelChoice { + label {Imaginary channel index } open + tooltip {Select band for imaginary channel in complex composition} xywh {375 96 57 24} box EMBOSSED_BOX color 7 selection_color 55 labelcolor 187 deactivate + } {} + Fl_Round_Button bModulus { + label Modulus + callback {bPhase->clear();} + tooltip {Toggle modulus mode} xywh {235 50 80 15} down_box ROUND_DOWN_BOX value 1 labelcolor 187 deactivate + } + Fl_Round_Button bPhase { + label Phase + callback {bModulus->clear();} + tooltip {Toggle phase mode} xywh {325 50 80 15} down_box ROUND_DOWN_BOX labelcolor 187 deactivate + } + } + Fl_Window guiLinkSetupWindow { + label {Link setup} + xywh {888 755 440 220} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible + } { + Fl_Input_Choice guiLinkChoice { + label {Link to viewer: } open + tooltip {Select the viewer to link with} xywh {115 26 185 24} box EMBOSSED_BOX color 54 selection_color 55 labelcolor 187 + } {} + Fl_Input guiLinkXOffset { + label {X offset} + tooltip {Set the x offset of the link} xywh {379 16 35 23} box EMBOSSED_BOX selection_color 55 labelcolor 186 textcolor 187 + } + Fl_Input guiLinkYOffset { + label {Y offset} + tooltip {Set the Y offset of the link} xywh {379 41 35 23} box EMBOSSED_BOX selection_color 55 labelcolor 186 textcolor 187 + } + Fl_Button guiSaveLink { + label Apply + callback {LinkSetupSave();} + tooltip {Save the current link} xywh {15 175 90 30} box ROUND_UP_BOX color 23 selection_color 23 labelcolor 186 + } + Fl_Browser guiLinkList { + label {Existing links} + tooltip {List of image viewers already linked with the selected image viewer} xywh {15 88 405 75} type Hold box EMBOSSED_BOX color 54 selection_color 20 labelcolor 186 align 1 textcolor 187 + } + Fl_Button guiLinkRemove { + label Remove + callback {LinkSetupRemove();} + tooltip {Remove the selected link} xywh {121 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 23 labelcolor 186 + } + Fl_Button guiLinkClear { + label Clear + callback {LinkSetupClear();} + tooltip {Clear all links for the selected image viewer} xywh {225 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX color 23 selection_color 23 labelcolor 186 + } + Fl_Return_Button guiLinkOk { + label Quit + callback {LinkSetupOk();} + tooltip {Leave the link set up interface} xywh {331 175 90 30} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0xff0d color 23 selection_color 23 labelcolor 186 + code0 {guiLinkSetupWindow->hide();} + } + } + Fl_Window guiDiaporama { + label Slideshow + xywh {1142 721 390 90} type Double box UP_BOX color 52 selection_color 7 labelcolor 187 visible + } { + Fl_Progress guiDiaporamaProgressBar { + label Progress + tooltip {Position in diaporama} xywh {37 14 310 25} box ROUND_UP_BOX selection_color 20 labelcolor 186 + } + Fl_Button {} { + label Previous + callback {DiaporamaPrevious();} + tooltip {Previous image in diaporama} xywh {20 55 105 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0xff55 color 23 selection_color 23 labelcolor 186 + } + Fl_Button {} { + label Next + callback {DiaporamaNext();} + tooltip {Next image in diaporama} xywh {140 55 105 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0xff56 color 23 selection_color 23 labelcolor 186 + } + Fl_Return_Button {} { + label { Quit} + callback {DiaporamaQuit();} + tooltip {Leave diaporama mode} xywh {262 55 105 25} box ROUND_UP_BOX down_box ROUND_DOWN_BOX shortcut 0xff1b color 23 selection_color 23 labelcolor 186 + } + } + } + Function {ImageViewerManagerViewGroup()} {} {} + Function {~ImageViewerManagerViewGroup()} {open return_type virtual + } {} + Function {OpenImage()} {open return_type {virtual void} + } {} + Function {CloseImage()} {open return_type {virtual void} + } {} + Function {ViewerSetup()} {open return_type {virtual void} + } {} + Function {ViewerSetupOk()} {open return_type {virtual void} + } {} + Function {LinkSetup()} {open return_type {virtual void} + } {} + Function {LinkSetupRemove()} {open return_type {virtual void} + } {} + Function {LinkSetupClear()} {open return_type {virtual void} + } {} + Function {LinkSetupOk()} {open return_type {virtual void} + } {} + Function {LinkSetupSave()} {open return_type {virtual void} + } {} + Function {Quit()} {open return_type {virtual void} + } {} + Function {SelectAction()} {open return_type {virtual void} + } {} + Function {ShowHide()} {open return_type {virtual void} + } {} + Function {GrayScaleSet()} {open return_type {virtual void} + } {} + Function {RGBSet()} {open return_type {virtual void} + } {} + Function {ViewerSetupCancel()} {open return_type {virtual void} + } {} + Function {ZoomSmallImagesHook()} {open return_type {virtual void} + } {} + Function {DiaporamaPrevious()} {open return_type {virtual void} + } {} + Function {DiaporamaNext()} {open return_type {virtual void} + } {} + Function {DiaporamaQuit()} {open return_type {virtual void} + } {} + Function {Diaporama()} {open return_type {virtual void} + } {} + Function {HideAll()} {open return_type {virtual void} + } {} + Function {ComplexSet()} {open return_type {virtual void} + } {} +} diff --git a/ViewerManager/otbImageViewerManager.cxx b/ViewerManager/otbImageViewerManager.cxx index a7179b24d0b7be6bf77d161bcb8edd8d0c2a0a43..b657c1341c62ded11d6a8eaedce26b857c647584 100644 --- a/ViewerManager/otbImageViewerManager.cxx +++ b/ViewerManager/otbImageViewerManager.cxx @@ -15,49 +15,62 @@ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ -#include "otbImageViewerManager.h" +#include "otbImageViewerManagerViewGUI.h" +#include "otbImageViewerManagerModel.h" +#include "otbImageViewerManagerController.h" +#include "otbCommandLineArgumentParser.h" +#include "otbMsgReporter.h" + int main(int argc, char* argv[]) { + + // Parse command line parameters + typedef otb::CommandLineArgumentParser ParserType; + ParserType::Pointer parser = ParserType::New(); + + parser->AddInputImage(false); //Optionnal parameter + + typedef otb::CommandLineArgumentParseResult ParserResultType; + ParserResultType::Pointer parseResult = ParserResultType::New(); + try { - typedef double PixelType; - typedef otb::ImageViewerManager<PixelType> ManagerType; - ManagerType::Pointer manager = ManagerType::New(); - manager->Show(); - std::string strTest("--OTBTesting"); - bool bFlRun(true); - - for (int i = 1; i<argc;++i) - { - if ( strTest.compare(argv[i])==0 ) - { - std::cout << "--OTBTesting option. No FL::run() call !" << std::endl; - bFlRun=false; - } - else - { - manager->OpenImage(argv[i]); - Fl::check(); - } - } - if ( bFlRun==true) return Fl::run(); + parser->ParseCommandLine(argc,argv,parseResult); } catch ( itk::ExceptionObject & err ) { - std::cout << "Following otbException catch :" << std::endl; - std::cout << err << std::endl; - return EXIT_FAILURE; - } - catch ( std::bad_alloc & err ) - { - std::cout << "Exception bad_alloc : "<<(char*)err.what()<< std::endl; - return EXIT_FAILURE; - } - catch ( ... ) - { - std::cout << "Unknown Exception found !" << std::endl; + std::string descriptionException = err.GetDescription(); + if (descriptionException.find("ParseCommandLine(): Help Parser") != std::string::npos) + { + std::cout << "WARNING : output file pixels are converted in 'unsigned char'" << std::endl; + return EXIT_SUCCESS; + } + if (descriptionException.find("ParseCommandLine(): Version Parser") != std::string::npos) + { + return EXIT_SUCCESS; + } return EXIT_FAILURE; } - return EXIT_SUCCESS; + + typedef otb::ImageViewerManagerController ControllerType; + typedef otb::ImageViewerManagerViewGUI ViewType; + + ControllerType::Pointer controller = ControllerType::New(); + ViewType::Pointer view = ViewType::New(); + controller->SetView(view); + view->SetImageViewerManagerController(controller); + //otb::MsgReporter::GetInstance()->SetTitle("Image Viewer Manager application"); + + // + view->Show(); + + if ( parseResult->IsOptionInputImagePresent() ) + view->GetImageViewerManagerController()->OpenInputImage(parseResult->GetInputImage().c_str()); + + Fl::check(); + + otbGenericMsgDebugMacro(<<"Running GUI ..."); + Fl::run(); + }