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