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