/*========================================================================= Program: vv Module: $RCSfile: vvToolBase.h,v $ Language: C++ Date: $Date: 2010/02/09 14:19:32 $ Version: $Revision: 1.2 $ Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr) Copyright (C) 2008 Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr CREATIS http://www.creatis.insa-lyon.fr 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. 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. You should have received a copy of the GNU General Public License along with this program. If not, see . =========================================================================*/ #ifndef VVTOOLBASE_H #define VVTOOLBASE_H #include "vvToolCreatorBase.h" #include "vvToolInputSelectorWidget.h" #include "clitkImageToImageGenericFilter.h" //------------------------------------------------------------------------------ template class vvToolBase { public: static void Initialize(); // can't be virtual, must be overwritten void UpdateInfoFromMainWindow(); vvMainWindowToolInfo * mMainWindowToolInfo; static void SetToolName(QString n) { vvToolCreator::mSingleton->mToolName = n; } static void SetToolMenuName(QString n) { vvToolCreator::mSingleton->mToolMenuName = n; } static void SetToolIconFilename(QString n) { vvToolCreator::mSingleton->mToolIconFilename = n; } static void SetToolTip(QString n) { vvToolCreator::mSingleton->mToolTip = n; } void InitializeListOfInputImages(); void InitializeListOfInputImages(vvToolInputSelectorWidget * w, clitk::ImageToImageGenericFilterBase * f); std::vector mSlicerManagersCompatible; unsigned int mCurrentIndex; vvImage::Pointer mCurrentImage; vvSlicerManager * mCurrentSliceManager; clitk::ImageToImageGenericFilterBase * mFilter; }; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ template void vvToolBase::UpdateInfoFromMainWindow() { mMainWindowToolInfo = vvToolCreator::mSingleton->mMainWindow->GetInfoForTool(); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ template void vvToolBase::Initialize() { SetToolName("Unnamed tool"); SetToolMenuName("Unnamed tool"); SetToolIconFilename(""); SetToolTip("Unamed tool."); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ template void vvToolBase::InitializeListOfInputImages(vvToolInputSelectorWidget * w, clitk::ImageToImageGenericFilterBase * f) { mFilter = f; InitializeListOfInputImages(); w->Initialize(mSlicerManagersCompatible, mCurrentIndex); w->SetToolTip(mFilter->GetAvailableImageTypes().c_str()); } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ template void vvToolBase::InitializeListOfInputImages() { UpdateInfoFromMainWindow(); std::vector & mSlicerManagers = *mMainWindowToolInfo->mSlicerManagers; mCurrentIndex = mMainWindowToolInfo->mSlicerManagerCurrentIndex; DD("InputUpdate"); DD(mCurrentIndex); // HERE : Check if image is ok (dimension, type etc ...) if (mFilter) { mFilter->PrintAvailableImageTypes(); } else { /// if not set, do not check filter type std::cerr << "*** ERROR, set mFilter member in the vvTool class before calling InitializeListOfInputImages" << std::endl; exit(0); } //unsigned int previousIndex = mInputSequenceBox->mCurrentIndex(); mSlicerManagersCompatible.clear(); // mInputSequenceBox->clear(); for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { vvImage * image = mSlicerManagers[i]->GetImage(); if (mFilter->CheckImageType(image->GetNumberOfDimensions(), image->GetNumberOfScalarComponents(), image->GetScalarTypeAsString())) { mSlicerManagersCompatible.push_back(mSlicerManagers[i]); if (mCurrentIndex == i) { mCurrentIndex = mSlicerManagersCompatible.size()-1; } } else { std::cerr << mSlicerManagers[i]->GetFileName().c_str() << " not compatible image" << std::endl; if (mCurrentIndex == i) { mCurrentIndex = 0; } } } } //------------------------------------------------------------------------------ #endif