1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
19 #include "vvToolWidgetBase.h"
20 #include "vvMainWindowBase.h"
21 #include "vvSlicerManager.h"
22 #include <QMessageBox>
24 //------------------------------------------------------------------------------
25 vvToolWidgetBase::vvToolWidgetBase(vvMainWindowBase * parent, Qt::WindowFlags f)
27 Ui::vvToolWidgetBase() {
29 // Set Modality : dialog is not modal but stay always on top because
30 // parent is set at construction
31 mIsInitialized = false;
35 setAttribute(Qt::WA_DeleteOnClose);
36 mCurrentSlicerManager = 0;
41 // Connect signals & slots
42 connect(mMainWindow, SIGNAL(AnImageIsBeingClosed(vvSlicerManager*)),
43 this, SLOT(AnImageIsBeingClosed(vvSlicerManager*)));
44 connect(mToolInputSelectionWidget, SIGNAL(accepted()), this, SLOT(InputIsSelected()));
45 connect(mToolInputSelectionWidget, SIGNAL(rejected()), this, SLOT(close()));
46 connect(buttonBox, SIGNAL(accepted()), this, SLOT(apply()));
47 connect(buttonBox, SIGNAL(rejected()), this, SLOT(close()));
49 // Disable main widget while input image is not selected
50 mToolWidget->setEnabled(false);
52 //------------------------------------------------------------------------------
55 //------------------------------------------------------------------------------
56 vvToolWidgetBase::~vvToolWidgetBase() {
59 //------------------------------------------------------------------------------
62 //------------------------------------------------------------------------------
63 // void vvToolWidgetBase::SetNumberOfNeededInputs(int nb) {
64 // mNumberOfInputs = nb;
65 // mListOfFilters.resize(nb);
66 // for(int i=0; i<mNumberOfInputs; i++) mListOfFilters[i] = 0;
68 //------------------------------------------------------------------------------
71 //------------------------------------------------------------------------------
72 void vvToolWidgetBase::AddInputSelector(QString s, clitk::ImageToImageGenericFilterBase * f, bool allowSkip) {
73 // DD("AddInputSelector with filter");
74 // DD(mMainWindowBase->GetSlicerManagers().size());
77 mSlicerManagersCompatible.clear();
78 mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
79 for(unsigned int i=0; i<mMainWindow->GetSlicerManagers().size(); i++) {
81 vvImage * s = mMainWindow->GetSlicerManagers()[i]->GetImage();
82 // DD(s->GetScalarTypeAsString());
83 if (mFilter->CheckImageType(s->GetNumberOfDimensions(),
84 s->GetNumberOfScalarComponents(),
85 s->GetScalarTypeAsString())) {
86 mSlicerManagersCompatible.push_back(mMainWindow->GetSlicerManagers()[i]);
87 if ((int)i == mMainWindow->GetSlicerManagerCurrentIndex()) mCurrentCompatibleIndex = j;
91 if (mSlicerManagersCompatible.size() == 0) {
92 QMessageBox::information(this, "No image","Sorry, could not perform operation. No (compatible) opened image type.");
96 mToolInputSelectionWidget->AddInputSelector(s, mSlicerManagersCompatible, mCurrentCompatibleIndex, allowSkip);
98 //------------------------------------------------------------------------------
101 //------------------------------------------------------------------------------
102 void vvToolWidgetBase::AddInputSelector(QString s, bool allowSkip) {
103 // DD("AddInput without filter");
104 // DD(mMainWindow->GetSlicerManagers().size());
105 mSlicerManagersCompatible.clear();
106 for(unsigned int i=0; i<mMainWindow->GetSlicerManagers().size(); i++) {
107 mSlicerManagersCompatible.push_back(mMainWindow->GetSlicerManagers()[i]);
109 if (mMainWindow->GetSlicerManagers().size() == 0) {
110 QMessageBox::information(this, "No image","Sorry, could not perform operation. No opened image type.");
114 mToolInputSelectionWidget->AddInputSelector(s, mMainWindow->GetSlicerManagers(),
115 mMainWindow->GetSlicerManagerCurrentIndex(), allowSkip);
117 //------------------------------------------------------------------------------
120 //------------------------------------------------------------------------------
121 void vvToolWidgetBase::show() {
122 if (!mIsInitialized) {
123 // DD("show -> init");
124 mToolInputSelectionWidget->Initialize();
125 mIsInitialized = true;
129 //------------------------------------------------------------------------------
132 //------------------------------------------------------------------------------
133 bool vvToolWidgetBase::close() {
134 // DD("vvToolWidgetBase::close()");
135 return QDialog::close();
137 //------------------------------------------------------------------------------
140 //------------------------------------------------------------------------------
141 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m) {
142 mToolInputSelectionWidget->AnImageIsBeingClosed(m);
143 if (m == mCurrentSlicerManager) {
147 //------------------------------------------------------------------------------
150 //------------------------------------------------------------------------------
151 void vvToolWidgetBase::InitializeInputs() {
155 mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
156 for(unsigned int i=0; i<mMainWindow->GetSlicerManagers().size(); i++) {
157 vvImage * s = mMainWindow->GetSlicerManagers()[i]->GetImage();
158 if (mFilter->CheckImageType(s->GetNumberOfDimensions(),
159 s->GetNumberOfScalarComponents(),
160 s->GetScalarTypeAsString())) {
161 mSlicerManagersCompatible.push_back(mMainWindow->GetSlicerManagers()[i]);
162 if ((int)i == mMainWindow->GetSlicerManagerCurrentIndex()) mCurrentCompatibleIndex = j;
168 mSlicerManagersCompatible = mMainWindow->GetSlicerManagers();
169 mCurrentCompatibleIndex = mMainWindow->GetSlicerManagerCurrentIndex();
171 mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible,
172 mCurrentCompatibleIndex);
173 mIsInitialized = true;
176 //------------------------------------------------------------------------------
179 //------------------------------------------------------------------------------
180 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
181 // DD("SetNumberOfNeededInputs");
184 //------------------------------------------------------------------------------
187 //------------------------------------------------------------------------------
188 void vvToolWidgetBase::InputIsSelected() {
189 // DD("InputIsSelected");
190 buttonBox->setEnabled(true);
191 std::vector<vvSlicerManager*> & l = mToolInputSelectionWidget->GetSelectedInputs();
192 mCurrentSlicerManager = l[0];
193 mCurrentImage = mCurrentSlicerManager->GetImage();
194 mToolWidget->setEnabled(true);
195 if (!mCurrentSlicerManager) close();
196 if (l.size() == 1) InputIsSelected(mCurrentSlicerManager);
197 else InputIsSelected(l);
199 //------------------------------------------------------------------------------
202 //------------------------------------------------------------------------------
203 void vvToolWidgetBase::InputIsSelected(vvSlicerManager * m) {
204 std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vvSlicerManager * m) if you use one single input" << std::endl;
207 //------------------------------------------------------------------------------
210 //------------------------------------------------------------------------------
211 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l) {
212 buttonBox->setEnabled(true);
213 // DD("InputIsSelected(vector)");
215 if (l.size() == 1) InputIsSelected(l[0]);
217 std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
221 //------------------------------------------------------------------------------