]> Creatis software - clitk.git/blob - vv/vvToolWidgetBase.cxx
Reformatted using new coding style
[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
30   // Set Modality : dialog is not modal but stay always on top because
31   // parent is set at construction
32   mIsInitialized = false;
33   mFilter = 0;
34   mMainWindow = parent;
35   setModal(false);
36   setAttribute(Qt::WA_DeleteOnClose);
37   mCurrentSlicerManager = 0;
38
39   // GUI Initialization
40   setupUi(this);
41
42   // Connect signals & slots
43   connect(mMainWindow, SIGNAL(AnImageIsBeingClosed(vvSlicerManager*)),
44           this, SLOT(AnImageIsBeingClosed(vvSlicerManager*)));
45   connect(mToolInputSelectionWidget, SIGNAL(accepted()), this, SLOT(InputIsSelected()));
46   connect(mToolInputSelectionWidget, SIGNAL(rejected()), this, SLOT(close()));
47   connect(buttonBox, SIGNAL(accepted()), this, SLOT(apply()));
48   connect(buttonBox, SIGNAL(rejected()), this, SLOT(close()));
49
50   // Disable main widget while input image is not selected
51   mToolWidget->setEnabled(false);
52 }
53 //------------------------------------------------------------------------------
54
55
56 //------------------------------------------------------------------------------
57 vvToolWidgetBase::~vvToolWidgetBase()
58 {
59
60 }
61 //------------------------------------------------------------------------------
62
63
64 //------------------------------------------------------------------------------
65 // void vvToolWidgetBase::SetNumberOfNeededInputs(int nb) {
66 //   mNumberOfInputs = nb;
67 //   mListOfFilters.resize(nb);
68 //   for(int i=0; i<mNumberOfInputs; i++) mListOfFilters[i] = 0;
69 // }
70 //------------------------------------------------------------------------------
71
72
73 //------------------------------------------------------------------------------
74 void vvToolWidgetBase::AddInputSelector(QString s, clitk::ImageToImageGenericFilterBase * f, bool allowSkip)
75 {
76   // DD("AddInputSelector with filter");
77   //   DD(mMainWindowBase->GetSlicerManagers().size());
78   int j=0;
79   mFilter = f;
80   mSlicerManagersCompatible.clear();
81   mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
82   for(unsigned int i=0; i<mMainWindow->GetSlicerManagers().size(); i++) {
83     // DD(i);
84     vvImage * s = mMainWindow->GetSlicerManagers()[i]->GetImage();
85     // DD(s->GetScalarTypeAsString());
86     if (mFilter->CheckImageType(s->GetNumberOfDimensions(),
87                                 s->GetNumberOfScalarComponents(),
88                                 s->GetScalarTypeAsString())) {
89       mSlicerManagersCompatible.push_back(mMainWindow->GetSlicerManagers()[i]);
90       if ((int)i == mMainWindow->GetSlicerManagerCurrentIndex()) mCurrentCompatibleIndex = j;
91       j++;
92     }
93   }
94   if (mSlicerManagersCompatible.size() == 0) {
95     QMessageBox::information(this, "No image","Sorry, could not perform operation. No (compatible) opened image type.");
96     close();
97     return;
98   }
99   mToolInputSelectionWidget->AddInputSelector(s, mSlicerManagersCompatible, mCurrentCompatibleIndex, allowSkip);
100 }
101 //------------------------------------------------------------------------------
102
103
104 //------------------------------------------------------------------------------
105 void vvToolWidgetBase::AddInputSelector(QString s, bool allowSkip)
106 {
107   // DD("AddInput without filter");
108   //   DD(mMainWindow->GetSlicerManagers().size());
109   mSlicerManagersCompatible.clear();
110   for(unsigned int i=0; i<mMainWindow->GetSlicerManagers().size(); i++) {
111     mSlicerManagersCompatible.push_back(mMainWindow->GetSlicerManagers()[i]);
112   }
113   if (mMainWindow->GetSlicerManagers().size() == 0) {
114     QMessageBox::information(this, "No image","Sorry, could not perform operation. No opened image type.");
115     close();
116     return;
117   }
118   mToolInputSelectionWidget->AddInputSelector(s, mMainWindow->GetSlicerManagers(),
119       mMainWindow->GetSlicerManagerCurrentIndex(), allowSkip);
120 }
121 //------------------------------------------------------------------------------
122
123
124 //------------------------------------------------------------------------------
125 void vvToolWidgetBase::show()
126 {
127   if (!mIsInitialized) {
128     //  DD("show -> init");
129     mToolInputSelectionWidget->Initialize();
130     mIsInitialized = true;
131   }
132   QDialog::show();
133 }
134 //------------------------------------------------------------------------------
135
136
137 //------------------------------------------------------------------------------
138 bool vvToolWidgetBase::close()
139 {
140   // DD("vvToolWidgetBase::close()");
141   return QDialog::close();
142 }
143 //------------------------------------------------------------------------------
144
145
146 //------------------------------------------------------------------------------
147 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m)
148 {
149   mToolInputSelectionWidget->AnImageIsBeingClosed(m);
150   if (m == mCurrentSlicerManager) {
151     close();
152   }
153 }
154 //------------------------------------------------------------------------------
155
156
157 //------------------------------------------------------------------------------
158 void vvToolWidgetBase::InitializeInputs()
159 {
160   /*
161     if (mFilter) {
162     int j=0;
163     mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
164     for(unsigned int i=0; i<mMainWindow->GetSlicerManagers().size(); i++) {
165     vvImage * s = mMainWindow->GetSlicerManagers()[i]->GetImage();
166     if (mFilter->CheckImageType(s->GetNumberOfDimensions(),
167     s->GetNumberOfScalarComponents(),
168     s->GetScalarTypeAsString())) {
169     mSlicerManagersCompatible.push_back(mMainWindow->GetSlicerManagers()[i]);
170     if ((int)i == mMainWindow->GetSlicerManagerCurrentIndex()) mCurrentCompatibleIndex = j;
171     j++;
172     }
173     }
174     }
175     else {
176     mSlicerManagersCompatible = mMainWindow->GetSlicerManagers();
177     mCurrentCompatibleIndex = mMainWindow->GetSlicerManagerCurrentIndex();
178     }
179     mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible,
180     mCurrentCompatibleIndex);
181     mIsInitialized = true;
182   */
183 }
184 //------------------------------------------------------------------------------
185
186
187 //------------------------------------------------------------------------------
188 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
189 //   DD("SetNumberOfNeededInputs");
190 //   DD(i);
191 // }
192 //------------------------------------------------------------------------------
193
194
195 //------------------------------------------------------------------------------
196 void vvToolWidgetBase::InputIsSelected()
197 {
198   // DD("InputIsSelected");
199   buttonBox->setEnabled(true);
200   std::vector<vvSlicerManager*> & l = mToolInputSelectionWidget->GetSelectedInputs();
201   mCurrentSlicerManager = l[0];
202   mCurrentImage = mCurrentSlicerManager->GetImage();
203   mToolWidget->setEnabled(true);
204   if (!mCurrentSlicerManager) close();
205   if (l.size() == 1) InputIsSelected(mCurrentSlicerManager);
206   else InputIsSelected(l);
207 }
208 //------------------------------------------------------------------------------
209
210
211 //------------------------------------------------------------------------------
212 void vvToolWidgetBase::InputIsSelected(vvSlicerManager * m)
213 {
214   std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vvSlicerManager * m) if you use one single input" << std::endl;
215   exit(0);
216 }
217 //------------------------------------------------------------------------------
218
219
220 //------------------------------------------------------------------------------
221 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l)
222 {
223   buttonBox->setEnabled(true);
224   // DD("InputIsSelected(vector)");
225   //   DD(l.size());
226   if (l.size() == 1) InputIsSelected(l[0]);
227   else {
228     std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
229     exit(0);
230   }
231 }
232 //------------------------------------------------------------------------------