X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvMainWindow.h;h=81588c146a6ca7a746b1747b2bb9b74dcd0503ae;hb=4e8939cad4521503fc448378dd148373bd4d129e;hp=dfc2fc6116f96934cb53756ebc2112b00b0a540f;hpb=934a64f5b51382ad6bbc78d9c8734691e599cf09;p=clitk.git diff --git a/vv/vvMainWindow.h b/vv/vvMainWindow.h index dfc2fc6..81588c1 100644 --- a/vv/vvMainWindow.h +++ b/vv/vvMainWindow.h @@ -1,38 +1,35 @@ /*========================================================================= + Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Program: vv - Language: C++ - Author : Pierre Seroul (pierre.seroul@gmail.com) + Authors belong to: + - University of LYON http://www.universite-lyon.fr/ + - Léon Bérard cancer center http://www.centreleonberard.fr + - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr -Copyright (C) 2008 -Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr -CREATIS-LRMN http://www.creatis.insa-lyon.fr + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the copyright notices for more information. -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3 of the License. + It is distributed under dual licence -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + - BSD See included LICENSE.txt file + - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +===========================================================================**/ -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -=========================================================================*/ - -#ifndef vvMainWindow_h -#define vvMainWindow_h +#ifndef VVMAINWINDOW_H +#define VVMAINWINDOW_H #include #include - #include "ui_vvMainWindow.h" - -#include "vvConstants.h" -#include "vvImage.h" +#include "vvMainWindowBase.h" +#include "vvToolManager.h" +#include "vvImageReader.h" #include "vvMesh.h" +#include "clitkMemoryUsage.h" + +#include "vtkSmartPointer.h" + class vvSlicerManager; class vvHelpDialog; @@ -40,146 +37,179 @@ class vvDocumentation; class vtkRenderWindowInteractor; class vtkImageData; class vtkRenderer; +class vtkMatrix4x4; class vvDicomSeriesSelector; +class vvSlicer; -class vvMainWindow : public QMainWindow, private Ui::vvMainWindow +//------------------------------------------------------------------------------ +class vvMainWindow: public vvMainWindowBase, + private Ui::vvMainWindow { - Q_OBJECT - -public: - vvMainWindow(); - ~vvMainWindow(); - void LoadImages(std::vector filenames, LoadedImageType type); - void AddImage(vvImage::Pointer image,std::string filename); - void AddImage(vvSlicerManager * m); - void AddField(QString file,int index); - void AddOverlayImage(int index, QString filename); - ///Adds a mesh to a SlicerManager, with optional warping by vector field - void AddContour(int image_index, vvMesh::Pointer contour, bool propagation); - ///This is used to show an image when opened or computed - void ShowLastImage(); + Q_OBJECT + + public: + vvMainWindow(); + ~vvMainWindow(); + void LoadImages(std::vector filenames, vvImageReader::LoadedImageType type); + vvSlicerManager * AddImage(vvImage::Pointer image,std::string filename); + void AddField(QString file,int index); + void AddOverlayImage(int index, QString filename); + void AddFusionImage(int index, QString filename); + void AddROI(int index, QString filename); + ///Adds a mesh to a SlicerManager, with optional warping by vector field + void AddContour(int image_index, vvMesh::Pointer contour, bool propagation); + ///This is used to show an image when opened or computed + void ShowLastImage(); + + virtual void UpdateCurrentSlicer(); + virtual QTabWidget * GetTab(); + //vvMainWindowToolInfo * GetInfoForTool(); +// void AddRunningTool(vvToolCreatorBase * tool); public slots: - ///Allows the user to open and select various surfaces contained in a dicom-struct file - void OpenDCStructContour(); - ///Computes the MIP of the currently selected image and displays it - void ComputeMIP(); - ///Computes the midposition image of a 4D sequence with a VF and displays it - void ComputeMidPosition(); - void OpenImages(); - ///Slot triggered by the dynamically-generated recent file menu actions - void OpenRecentImage(); - void OpenImageWithTime(); - void MergeImages(); - void MergeImagesWithTime(); - void OpenDicom(); - ///Open a vtkPolyData surface mesh and display it over the current image - void OpenVTKContour(); - void SaveAs(); - void CurrentImageChanged(std::string id); - void ImageInfoChanged(); - void ShowHelpDialog(); - void ShowDocumentation(); - void ComputeDeformableRegistration(); - void WarpImage(); - void ChangeViewMode(); - void DisplayChanged(QTreeWidgetItem *item, int column); - void CloseImage(QTreeWidgetItem* item, int column); - void ReloadImage(QTreeWidgetItem* item, int column); - void MousePositionChanged(int visibility, double x, double y, double z, double X, double Y, double Z , double value); - void VectorChanged(int visibility, double x, double y, double z, double value); - void OverlayChanged(int visibility, double valueOver, double valueRef); - void FusionChanged(int visibility, double value); - void ResampleCurrentImage(); - void SegmentationOnCurrentImage(); - void SurfaceViewerLaunch(); - - void WindowsChanged(int window, int view, int slice); - void WindowLevelChanged(double window, double level,int preset, int colormap); - void UpdateSlice(int slicer, int slice); - void UpdateTSlice(int slicer, int slice); - void UpdateSliceRange(int slicer, int min, int max, int tmin, int tmax); - void WindowLevelEdited(); - void UpdateColorMap(); - void UpdateWindowLevel(); - void SwitchWindowLevel(); - void UpdateLinkManager(std::string id, int slicer, double x, double y, double z, int temps); - void AddLink(QString image1,QString image2); - void RemoveLink(QString image1,QString image2); - - ///Generic method called when any one of the horizontal sliders is moved - void HorizontalSliderMoved(int value,int column, int slicer_index); - void NOHorizontalSliderMoved(); - void NEHorizontalSliderMoved(); - void SOHorizontalSliderMoved(); - void SEHorizontalSliderMoved(); - - void NOVerticalSliderChanged(); - void NEVerticalSliderChanged(); - void SOVerticalSliderChanged(); - void SEVerticalSliderChanged(); - - void SaveNEScreenshot(); - void SaveNOScreenshot(); - void SaveSEScreenshot(); - void SaveSOScreenshot(); - - void ShowContextMenu(QPoint point); - void CropImage(); - void SplitImage(); - void CloseImage(); - void ReloadImage(); - void OpenField(); - void SelectOverlayImage(); - void AddFusionImage(); - - void SetVFProperty(int subsampling,int scale,int lut); - void SetOverlayProperty(int color); - void SetFusionProperty(int opacity,int colormap,double window,double level); - - void GoToCursor(); - void PlayPause(); - void PlayNext(); - void ChangeFrameRate(int rate) { - mFrameRate = rate; - } - - void UpdateRenderWindows(); - + ///Allows the user to open and select various surfaces contained in a dicom-struct file + void OpenDCStructContour(); + ///Computes the midposition image of a 4D sequence with a VF and displays it + void ComputeMidPosition(); + void OpenImages(); + ///Slot triggered by the dynamically-generated recent file menu actions + void OpenRecentImage(); + void OpenImageWithTime(); + void MergeImages(); + void SliceImages(); + void MergeImagesWithTime(); + void OpenDicom(); + ///Open a vtkPolyData surface mesh and display it over the current image + void OpenVTKContour(); + void SaveAs(); + void CurrentImageChanged(std::string id); + void CurrentPickedImageChanged(std::string id); + void ImageInfoChanged(); + void ShowHelpDialog(); + void ShowDocumentation(); + void PopupRegisterForm(bool checkCanPush=false); + void ComputeDeformableRegistration(); + void WarpImage(); + void ChangeViewMode(); + void DisplayChanged(QTreeWidgetItem *item, int column); + void CloseImage(QTreeWidgetItem* item, int column); + void ReloadImage(QTreeWidgetItem* item, int column); + void MousePositionChanged(int visibility, double x, double y, double z, double X, double Y, double Z , double value); + void VectorChanged(int visibility, double x, double y, double z, double value); + void OverlayChanged(int visibility, double valueOver, double valueRef); + void FusionChanged(int visibility, double value); + void SegmentationOnCurrentImage(); + void SurfaceViewerLaunch(); + + void WindowLevelChanged(double window, double level,int preset, int colormap); + void UpdateSlice(int slicer, int slice); + void UpdateTSlice(int slicer, int slice); + void UpdateSliceRange(int slicer, int min, int max, int tmin, int tmax); + void WindowLevelEdited(); + void UpdateColorMap(); + void UpdateWindowLevel(); + void SwitchWindowLevel(); + void ApplyWindowLevelToAllImages(); + void UpdateLinkManager(std::string id, int slicer, double x, double y, double z, int temps); + void UpdateLinkedNavigation(std::string id, vvSlicerManager *sm, vvSlicer* refSlicer); + void AddLink(QString image1,QString image2); + void RemoveLink(QString image1,QString image2); + void ChangeImageWithIndexOffset(vvSlicerManager *sm, int slicer, int offset); + + ///Generic method called when any one of the horizontal sliders is moved + void HorizontalSliderMoved(int value,int column, int slicer_index); + void NOHorizontalSliderMoved(); + void NEHorizontalSliderMoved(); + void SOHorizontalSliderMoved(); + void SEHorizontalSliderMoved(); + + void NOVerticalSliderChanged(); + void NEVerticalSliderChanged(); + void SOVerticalSliderChanged(); + void SEVerticalSliderChanged(); + + void SaveNEScreenshot(); + void SaveNOScreenshot(); + void SaveSEScreenshot(); + void SaveSOScreenshot(); + + void ShowContextMenu(QPoint point); + void CloseImage(); + void ReloadImage(); + void OpenField(); + void SelectOverlayImage(); + void SelectFusionImage(); + + void SetVFProperty(int subsampling,int scale,int lut, int width, double r, double g, double b); + void SetOverlayProperty(int color); + void SetFusionProperty(int opacity, int tresOpacity, int colormap,double window,double level); + + void GoToCursor(); + void PlayPause(); + void PlayNext(); + void ChangeFrameRate(int rate) { + mFrameRate = rate; + } + void UpdateRenderWindows(); + void UpdateMemoryUsage(); + void show(); + +protected: + + void createRecentlyOpenedFilesMenu(); + void updateRecentlyOpenedFilesMenu(const std::list &files); + private: - //variables - std::vector mSlicerManagers; - vvHelpDialog *help_dialog; - vvDocumentation *documentation; - vvDicomSeriesSelector *dicomSeriesSelector; - - QString mInputPathName; - bool viewMode; - bool playMode; - - //functions - void UpdateTree(); - ///Adds a vector field to slicer manager index - void WarpImage(vvSlicerManager* selected_slicer,int reference_phase); - void AddFieldEntry(QString filename,int index,bool from_disk); - void AddField(vvImage::Pointer vf,QString file,int index); - void InitDisplay(); - ///Sets the render window and LUT for the last SlicerManager - void InitSlicers(); - void DisplaySliders(int slicer, int window); - QString GetSizeInBytes(unsigned long size); - QString GetVectorDoubleAsString(std::vector vectorDouble); - QString GetVectorIntAsString(std::vector vectorInt); - int GetSlicerIndexFromItem(QTreeWidgetItem* item); - void SaveScreenshot(vtkImageData* image); - - QMenu contextMenu; - //QMenu *AddSubImageMenu; - std::vector contextActions; - std::vector horizontalSliders; - std::vector verticalSliders; - int mFrameRate; + //variables + // std::vector mSlicerManagers; + vvHelpDialog *help_dialog; + vvDocumentation *documentation; + vvDicomSeriesSelector *dicomSeriesSelector; + + bool viewMode; + bool playMode; + + //functions + void UpdateTree(); + ///Adds a vector field to slicer manager index + void WarpImage(vvSlicerManager* selected_slicer,int reference_phase); + void AddFieldEntry(QString filename,int index,bool from_disk); + void AddField(vvImage::Pointer vf,QString file,int index); + void InitDisplay(); + ///Sets the render window and LUT for the last SlicerManager + void InitSlicers(); + void DisplaySliders(int slicer, int window); + QString GetSizeInBytes(unsigned long size); + QString GetVectorDoubleAsString(std::vector vectorDouble); + QString GetVectorIntAsString(std::vector vectorInt); + QString Get4x4MatrixDoubleAsString(vtkSmartPointer matrix); + int GetSlicerIndexFromItem(QTreeWidgetItem* item); + QTreeWidgetItem* GetItemFromSlicerManager(vvSlicerManager* sm); + void SaveScreenshot(QVTKWidget *widget); + int GetImageDuplicateFilenameNumber(std::string filename); + + QMenu contextMenu; + QMenu* recentlyOpenedFilesMenu; + //QMenu *AddSubImageMenu; + std::vector contextActions; + std::vector horizontalSliders; + std::vector verticalSliders; + int mFrameRate; + + std::string mCurrentSelectedImageId; + std::string mCurrentPickedImageId; + unsigned int mCurrentPickedImageIndex; + + // vvMainWindowToolInfo * mCurrentToolInfo; + // std::vector mListOfRunningTool; + + static vvMainWindow * mSingleton; + + int mCurrentTime; + }; +#include "vvMainWindow.txx" + #endif