diff --git a/Code/Visu/otbImageViewerFullWidget.h b/Code/Visu/otbImageViewerFullWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..d88dee6f863f6bc221b138c22a9ab442905593b1 --- /dev/null +++ b/Code/Visu/otbImageViewerFullWidget.h @@ -0,0 +1,135 @@ +/*========================================================================= + +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 _otbImageViewerFullWidget_h +#define _otbImageViewerFullWidget_h + +#include "otbFullResolutionImageWidget.h" + + +namespace otb +{ +template <class TPixel> class ImageViewer; + + +template <class TPixel> +class ITK_EXPORT ImageViewerFullWidget + : public FullResolutionImageWidget<TPixel> +{ + public: + /** Standard class typedefs */ + typedef ImageViewerFullWidget Self; + typedef FullResolutionImageWidget<TPixel> Superclass; + typedef itk::SmartPointer<Self> Pointer; + typedef itk::SmartPointer<const Self> ConstPointer; + + /** Method for creation through the object factory. */ + itkNewMacro(Self); + + /** Run-time type information (and related methods). */ + itkTypeMacro(ImageViewerFullWidget, FullResolutionImageWidget); + + typedef TPixel PixelType; + typedef typename Superclass::IndexType IndexType; + typedef typename Superclass::SizeType SizeType; + + typedef ImageViewer<PixelType> ParentType; + typedef typename ParentType::Pointer ParentPointerType; + + itkSetObjectMacro(Parent,ParentType); + itkGetObjectMacro(Parent,ParentType); + /** Handle method */ + virtual int handle(int event) + { + switch(event) + { + case FL_PUSH: + { + int x = Fl::event_x(); + int y = Fl::event_y(); + IndexType clickedIndex; + clickedIndex[0]=x; + clickedIndex[1]=y; + clickedIndex=this->WindowToImageCoordinates(clickedIndex); + m_Parent->ChangeZoomViewedRegion(clickedIndex); + return 1; + } + case FL_ENTER: + { + m_MouseIn = true; + return 1; + } + case FL_LEAVE: + { + m_MouseIn = false; + m_Parent->PrintPixLocVal(""); + return 1; + } + case FL_MOVE: + { + m_MouseIn=true; + if(m_MouseMoveCount%m_ValueUpdateFrequency==0) + { + m_MousePos[0]=Fl::event_x(); + m_MousePos[1]=Fl::event_y(); + std::stringstream oss; + IndexType newIndex = this->WindowToImageCoordinates(m_MousePos); + oss<<"Location: "<<newIndex<<", Values: "<<this->GetInput()->GetPixel(newIndex); + m_Parent->PrintPixLocVal(oss.str()); + m_MouseMoveCount=0; + } + m_MouseMoveCount++; + return 1; + } + } + return 0; + } + + virtual void resize(int x,int y, int w, int h) + { + Superclass::resize(x,y,w,h); + if(m_Parent->GetBuilt()) + m_Parent->UpdateScrollWidget(); + } + + protected: + /** + * Constructor. + */ + ImageViewerFullWidget() + { + m_MouseIn = false; + m_MousePos.Fill(0); + m_MouseMoveCount = 0; + m_ValueUpdateFrequency = 5; + }; + /** + * Destructor. + */ + ~ImageViewerFullWidget(){}; + + private: + ParentPointerType m_Parent; + IndexType m_MousePos; + bool m_MouseIn; + unsigned int m_MouseMoveCount; + unsigned int m_ValueUpdateFrequency; + +}; + +} // end namespace otb +#endif