]> Creatis software - clitk.git/blob - vv/vvToolWidgetBase.cxx
d5632dca6eaa71ed8099fd8e2e6daade568247a4
[clitk.git] / vv / vvToolWidgetBase.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to: 
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
8
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.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
18
19 #include "vvToolWidgetBase.h"
20 #include "vvMainWindowBase.h"
21 #include "vvSlicerManager.h"
22 #include <QMessageBox>
23
24 //------------------------------------------------------------------------------
25 vvToolWidgetBase::vvToolWidgetBase(vvMainWindowBase * parent, Qt::WindowFlags f)
26   :QDialog(parent, f), 
27    Ui::vvToolWidgetBase() {
28
29   // Set Modality : dialog is not modal but stay always on top because
30   // parent is set at construction
31   mIsInitialized = false;
32   mFilter = 0;
33   mMainWindow = parent;
34   setModal(false);
35   setAttribute(Qt::WA_DeleteOnClose);
36   mCurrentSlicerManager = 0;
37   
38   // GUI Initialization
39   setupUi(this);
40
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()));
48
49   // Disable main widget while input image is not selected
50   mToolWidget->setEnabled(false);
51 }
52 //------------------------------------------------------------------------------
53
54
55 //------------------------------------------------------------------------------
56 vvToolWidgetBase::~vvToolWidgetBase() {
57   
58 }
59 //------------------------------------------------------------------------------
60
61
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;
67 // }
68 //------------------------------------------------------------------------------
69
70
71 //------------------------------------------------------------------------------
72 void vvToolWidgetBase::AddInputSelector(QString s, clitk::ImageToImageGenericFilterBase * f, bool allowSkip) {
73   // DD("AddInputSelector with filter");
74   //   DD(mMainWindowBase->GetSlicerManagers().size());
75   int j=0;
76   mFilter = f;
77   mSlicerManagersCompatible.clear();
78   mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
79   for(unsigned int i=0; i<mMainWindow->GetSlicerManagers().size(); i++) {
80     // DD(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;
88       j++;
89     }
90   }
91   if (mSlicerManagersCompatible.size() == 0) {
92     QMessageBox::information(this, "No image","Sorry, could not perform operation. No (compatible) opened image type.");
93     close();
94     return;
95   }
96   mToolInputSelectionWidget->AddInputSelector(s, mSlicerManagersCompatible, mCurrentCompatibleIndex, allowSkip);
97 }
98 //------------------------------------------------------------------------------
99
100
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]);
108   }
109   if (mMainWindow->GetSlicerManagers().size() == 0) {
110     QMessageBox::information(this, "No image","Sorry, could not perform operation. No opened image type.");
111     close();
112     return;
113   }
114   mToolInputSelectionWidget->AddInputSelector(s, mMainWindow->GetSlicerManagers(),
115                                               mMainWindow->GetSlicerManagerCurrentIndex(), allowSkip);
116 }
117 //------------------------------------------------------------------------------
118
119
120 //------------------------------------------------------------------------------
121 void vvToolWidgetBase::show() {
122   if (!mIsInitialized) {
123     //  DD("show -> init");
124     mToolInputSelectionWidget->Initialize();
125     mIsInitialized = true;
126   }
127   QDialog::show();
128 }
129 //------------------------------------------------------------------------------
130
131
132 //------------------------------------------------------------------------------
133 bool vvToolWidgetBase::close() {
134   // DD("vvToolWidgetBase::close()");
135   return QDialog::close();
136 }
137 //------------------------------------------------------------------------------
138
139
140 //------------------------------------------------------------------------------
141 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m) {
142   mToolInputSelectionWidget->AnImageIsBeingClosed(m);
143   if (m == mCurrentSlicerManager) {
144     close();
145   }
146 }
147 //------------------------------------------------------------------------------
148
149
150 //------------------------------------------------------------------------------
151 void vvToolWidgetBase::InitializeInputs() {
152   /*
153     if (mFilter) {
154     int j=0;
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;
163     j++;
164     }
165     }
166     }
167     else {
168     mSlicerManagersCompatible = mMainWindow->GetSlicerManagers();
169     mCurrentCompatibleIndex = mMainWindow->GetSlicerManagerCurrentIndex();
170     }
171     mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible, 
172     mCurrentCompatibleIndex);
173     mIsInitialized = true;
174   */
175 }
176 //------------------------------------------------------------------------------
177
178
179 //------------------------------------------------------------------------------
180 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
181 //   DD("SetNumberOfNeededInputs");
182 //   DD(i);
183 // }
184 //------------------------------------------------------------------------------
185
186
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);
198 }
199 //------------------------------------------------------------------------------
200
201
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;
205   exit(0);
206 }
207 //------------------------------------------------------------------------------
208
209
210 //------------------------------------------------------------------------------
211 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l) {
212   buttonBox->setEnabled(true);
213   // DD("InputIsSelected(vector)");
214   //   DD(l.size());
215   if (l.size() == 1) InputIsSelected(l[0]);
216   else {
217     std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
218     exit(0);
219   }
220 }
221 //------------------------------------------------------------------------------