]> Creatis software - clitk.git/blob - vv/vvToolWidgetBase.cxx
- correct bug: string pixeltype is different in ITK and VTK
[clitk.git] / vv / vvToolWidgetBase.cxx
1 /*=========================================================================
2
3   Program:   vv
4   Module:    $RCSfile: vvToolWidgetBase.cxx,v $
5   Language:  C++
6   Date:      $Date: 2010/03/24 20:35:13 $
7   Version:   $Revision: 1.5 $
8   Author :   David Sarrut (david.sarrut@creatis.insa-lyon.fr)
9
10   Copyright (C) 2008
11   Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
12   CREATIS-LRMN http://www.creatis.insa-lyon.fr
13
14   This program is free software: you can redistribute it and/or modify
15   it under the terms of the GNU General Public License as published by
16   the Free Software Foundation, version 3 of the License.
17
18   This program is distributed in the hope that it will be useful,
19   but WITHOUT ANY WARRANTY; without even the implied warranty of
20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21   GNU General Public License for more details.
22
23   You should have received a copy of the GNU General Public License
24   along with this program.  If not, see <http://www.gnu.org/licenses/>.
25
26   =========================================================================*/
27
28 #include "vvToolWidgetBase.h"
29 #include "vvMainWindowBase.h"
30 #include "vvSlicerManager.h"
31 #include <QMessageBox>
32
33 //------------------------------------------------------------------------------
34 vvToolWidgetBase::vvToolWidgetBase(vvMainWindowBase * parent, Qt::WindowFlags f)
35   :QDialog(parent, f), 
36    Ui::vvToolWidgetBase() {
37
38   // Set Modality : dialog is not modal but stay always on top because
39   // parent is set at construction
40   mIsInitialized = false;
41   mFilter = 0;
42   mMainWindowBase = parent;
43   setModal(false);
44   setAttribute(Qt::WA_DeleteOnClose);
45   mCurrentSlicerManager = 0;
46   
47   // GUI Initialization
48   setupUi(this);
49
50   // Connect signals & slots  
51   connect(mMainWindowBase, SIGNAL(AnImageIsBeingClosed(vvSlicerManager*)), 
52           this, SLOT(AnImageIsBeingClosed(vvSlicerManager*)));
53   connect(mToolInputSelectionWidget, SIGNAL(accepted()), this, SLOT(InputIsSelected()));
54   connect(mToolInputSelectionWidget, SIGNAL(rejected()), this, SLOT(close()));
55   connect(buttonBox, SIGNAL(accepted()), this, SLOT(apply()));
56   connect(buttonBox, SIGNAL(rejected()), this, SLOT(close()));
57
58   // Disable main widget while input image is not selected
59   mToolWidget->setEnabled(false);
60 }
61 //------------------------------------------------------------------------------
62
63
64 //------------------------------------------------------------------------------
65 vvToolWidgetBase::~vvToolWidgetBase() {
66   
67 }
68 //------------------------------------------------------------------------------
69
70
71 //------------------------------------------------------------------------------
72 // void vvToolWidgetBase::SetNumberOfNeededInputs(int nb) {
73 //   mNumberOfInputs = nb;
74 //   mListOfFilters.resize(nb);
75 //   for(int i=0; i<mNumberOfInputs; i++) mListOfFilters[i] = 0;
76 // }
77 //------------------------------------------------------------------------------
78
79
80 //------------------------------------------------------------------------------
81 void vvToolWidgetBase::AddInputSelector(QString s, clitk::ImageToImageGenericFilterBase * f, bool allowSkip) {
82   // DD("AddInputSelector with filter");
83   //   DD(mMainWindowBase->GetSlicerManagers().size());
84   int j=0;
85   mFilter = f;
86   mSlicerManagersCompatible.clear();
87   mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
88   for(unsigned int i=0; i<mMainWindowBase->GetSlicerManagers().size(); i++) {
89     // DD(i);
90     vvImage * s = mMainWindowBase->GetSlicerManagers()[i]->GetImage();
91     // DD(s->GetScalarTypeAsString());
92     if (mFilter->CheckImageType(s->GetNumberOfDimensions(), 
93                                 s->GetNumberOfScalarComponents(), 
94                                 s->GetScalarTypeAsString())) {
95       mSlicerManagersCompatible.push_back(mMainWindowBase->GetSlicerManagers()[i]);
96       if ((int)i == mMainWindowBase->GetSlicerManagerCurrentIndex()) mCurrentCompatibleIndex = j;
97       j++;
98     }
99   }
100   if (mSlicerManagersCompatible.size() == 0) {
101     QMessageBox::information(this, "No image","Sorry, could not perform operation. No (compatible) opened image type.");
102     close();
103     return;
104   }
105   mToolInputSelectionWidget->AddInputSelector(s, mSlicerManagersCompatible, mCurrentCompatibleIndex, allowSkip);
106 }
107 //------------------------------------------------------------------------------
108
109
110 //------------------------------------------------------------------------------
111 void vvToolWidgetBase::AddInputSelector(QString s, bool allowSkip) {
112   // DD("AddInput without filter");
113   //   DD(mMainWindowBase->GetSlicerManagers().size());
114   mSlicerManagersCompatible.clear();
115   for(unsigned int i=0; i<mMainWindowBase->GetSlicerManagers().size(); i++) {
116     mSlicerManagersCompatible.push_back(mMainWindowBase->GetSlicerManagers()[i]);
117   }
118   if (mMainWindowBase->GetSlicerManagers().size() == 0) {
119     QMessageBox::information(this, "No image","Sorry, could not perform operation. No opened image type.");
120     close();
121     return;
122   }
123   mToolInputSelectionWidget->AddInputSelector(s, mMainWindowBase->GetSlicerManagers(),
124                                               mMainWindowBase->GetSlicerManagerCurrentIndex(), allowSkip);
125 }
126 //------------------------------------------------------------------------------
127
128
129 //------------------------------------------------------------------------------
130 void vvToolWidgetBase::show() {
131   if (!mIsInitialized) {
132     //  DD("show -> init");
133     mToolInputSelectionWidget->Initialize();
134     mIsInitialized = true;
135   }
136   QDialog::show();
137 }
138 //------------------------------------------------------------------------------
139
140
141 //------------------------------------------------------------------------------
142 bool vvToolWidgetBase::close() {
143   // DD("vvToolWidgetBase::close()");
144   return QDialog::close();
145 }
146 //------------------------------------------------------------------------------
147
148
149 //------------------------------------------------------------------------------
150 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m) {
151   mToolInputSelectionWidget->AnImageIsBeingClosed(m);
152   if (m == mCurrentSlicerManager) {
153     close();
154   }
155 }
156 //------------------------------------------------------------------------------
157
158
159 //------------------------------------------------------------------------------
160 void vvToolWidgetBase::InitializeInputs() {
161   /*
162     if (mFilter) {
163     int j=0;
164     mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
165     for(unsigned int i=0; i<mMainWindowBase->GetSlicerManagers().size(); i++) {
166     vvImage * s = mMainWindowBase->GetSlicerManagers()[i]->GetImage();
167     if (mFilter->CheckImageType(s->GetNumberOfDimensions(), 
168     s->GetNumberOfScalarComponents(), 
169     s->GetScalarTypeAsString())) {
170     mSlicerManagersCompatible.push_back(mMainWindowBase->GetSlicerManagers()[i]);
171     if ((int)i == mMainWindowBase->GetSlicerManagerCurrentIndex()) mCurrentCompatibleIndex = j;
172     j++;
173     }
174     }
175     }
176     else {
177     mSlicerManagersCompatible = mMainWindowBase->GetSlicerManagers();
178     mCurrentCompatibleIndex = mMainWindowBase->GetSlicerManagerCurrentIndex();
179     }
180     mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible, 
181     mCurrentCompatibleIndex);
182     mIsInitialized = true;
183   */
184 }
185 //------------------------------------------------------------------------------
186
187
188 //------------------------------------------------------------------------------
189 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
190 //   DD("SetNumberOfNeededInputs");
191 //   DD(i);
192 // }
193 //------------------------------------------------------------------------------
194
195
196 //------------------------------------------------------------------------------
197 void vvToolWidgetBase::InputIsSelected() {
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   std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vvSlicerManager * m) if you use one single input" << std::endl;
214   exit(0);
215 }
216 //------------------------------------------------------------------------------
217
218
219 //------------------------------------------------------------------------------
220 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l) {
221   buttonBox->setEnabled(true);
222   // DD("InputIsSelected(vector)");
223   //   DD(l.size());
224   if (l.size() == 1) InputIsSelected(l[0]);
225   else {
226     std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
227     exit(0);
228   }
229 }
230 //------------------------------------------------------------------------------