1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
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
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.
13 It is distributed under dual licence
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>
23 //------------------------------------------------------------------------------
24 vvToolWidgetBase::vvToolWidgetBase(vvMainWindowBase * parent, Qt::WindowFlags f)
26 Ui::vvToolWidgetBase() {
28 // Set Modality : dialog is not modal but stay always on top because
29 // parent is set at construction
30 mIsInitialized = false;
32 mMainWindowBase = parent;
34 setAttribute(Qt::WA_DeleteOnClose);
35 mCurrentSlicerManager = 0;
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()));
48 // Disable main widget while input image is not selected
49 mToolWidget->setEnabled(false);
51 //------------------------------------------------------------------------------
54 //------------------------------------------------------------------------------
55 vvToolWidgetBase::~vvToolWidgetBase() {
58 //------------------------------------------------------------------------------
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;
67 //------------------------------------------------------------------------------
70 //------------------------------------------------------------------------------
71 void vvToolWidgetBase::AddInputSelector(QString s, clitk::ImageToImageGenericFilterBase * f, bool allowSkip) {
72 // DD("AddInputSelector with filter");
73 // DD(mMainWindowBase->GetSlicerManagers().size());
76 mSlicerManagersCompatible.clear();
77 mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
78 for(unsigned int i=0; i<mMainWindowBase->GetSlicerManagers().size(); 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;
90 if (mSlicerManagersCompatible.size() == 0) {
91 QMessageBox::information(this, "No image","Sorry, could not perform operation. No (compatible) opened image type.");
95 mToolInputSelectionWidget->AddInputSelector(s, mSlicerManagersCompatible, mCurrentCompatibleIndex, allowSkip);
97 //------------------------------------------------------------------------------
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]);
108 if (mMainWindowBase->GetSlicerManagers().size() == 0) {
109 QMessageBox::information(this, "No image","Sorry, could not perform operation. No opened image type.");
113 mToolInputSelectionWidget->AddInputSelector(s, mMainWindowBase->GetSlicerManagers(),
114 mMainWindowBase->GetSlicerManagerCurrentIndex(), allowSkip);
116 //------------------------------------------------------------------------------
119 //------------------------------------------------------------------------------
120 void vvToolWidgetBase::show() {
121 if (!mIsInitialized) {
122 // DD("show -> init");
123 mToolInputSelectionWidget->Initialize();
124 mIsInitialized = true;
128 //------------------------------------------------------------------------------
131 //------------------------------------------------------------------------------
132 bool vvToolWidgetBase::close() {
133 // DD("vvToolWidgetBase::close()");
134 return QDialog::close();
136 //------------------------------------------------------------------------------
139 //------------------------------------------------------------------------------
140 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m) {
141 mToolInputSelectionWidget->AnImageIsBeingClosed(m);
142 if (m == mCurrentSlicerManager) {
146 //------------------------------------------------------------------------------
149 //------------------------------------------------------------------------------
150 void vvToolWidgetBase::InitializeInputs() {
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;
167 mSlicerManagersCompatible = mMainWindowBase->GetSlicerManagers();
168 mCurrentCompatibleIndex = mMainWindowBase->GetSlicerManagerCurrentIndex();
170 mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible,
171 mCurrentCompatibleIndex);
172 mIsInitialized = true;
175 //------------------------------------------------------------------------------
178 //------------------------------------------------------------------------------
179 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
180 // DD("SetNumberOfNeededInputs");
183 //------------------------------------------------------------------------------
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);
198 //------------------------------------------------------------------------------
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;
206 //------------------------------------------------------------------------------
209 //------------------------------------------------------------------------------
210 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l) {
211 buttonBox->setEnabled(true);
212 // DD("InputIsSelected(vector)");
214 if (l.size() == 1) InputIsSelected(l[0]);
216 std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
220 //------------------------------------------------------------------------------