1 /*=========================================================================
4 Module: $RCSfile: vvToolWidgetBase.cxx,v $
6 Date: $Date: 2010/03/24 20:35:13 $
7 Version: $Revision: 1.5 $
8 Author : David Sarrut (david.sarrut@creatis.insa-lyon.fr)
11 Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
12 CREATIS-LRMN http://www.creatis.insa-lyon.fr
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.
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.
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/>.
26 =========================================================================*/
28 #include "vvToolWidgetBase.h"
29 #include "vvMainWindowBase.h"
30 #include "vvSlicerManager.h"
31 #include <QMessageBox>
33 //------------------------------------------------------------------------------
34 vvToolWidgetBase::vvToolWidgetBase(vvMainWindowBase * parent, Qt::WindowFlags f)
36 Ui::vvToolWidgetBase() {
38 // Set Modality : dialog is not modal but stay always on top because
39 // parent is set at construction
40 mIsInitialized = false;
42 mMainWindowBase = parent;
44 setAttribute(Qt::WA_DeleteOnClose);
45 mCurrentSlicerManager = 0;
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()));
58 // Disable main widget while input image is not selected
59 mToolWidget->setEnabled(false);
61 //------------------------------------------------------------------------------
64 //------------------------------------------------------------------------------
65 vvToolWidgetBase::~vvToolWidgetBase() {
68 //------------------------------------------------------------------------------
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;
77 //------------------------------------------------------------------------------
80 //------------------------------------------------------------------------------
81 void vvToolWidgetBase::AddInputSelector(QString s, clitk::ImageToImageGenericFilterBase * f, bool allowSkip) {
82 // DD("AddInputSelector with filter");
83 // DD(mMainWindowBase->GetSlicerManagers().size());
86 mSlicerManagersCompatible.clear();
87 mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
88 for(unsigned int i=0; i<mMainWindowBase->GetSlicerManagers().size(); 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;
100 if (mSlicerManagersCompatible.size() == 0) {
101 QMessageBox::information(this, "No image","Sorry, could not perform operation. No (compatible) opened image type.");
105 mToolInputSelectionWidget->AddInputSelector(s, mSlicerManagersCompatible, mCurrentCompatibleIndex, allowSkip);
107 //------------------------------------------------------------------------------
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]);
118 if (mMainWindowBase->GetSlicerManagers().size() == 0) {
119 QMessageBox::information(this, "No image","Sorry, could not perform operation. No opened image type.");
123 mToolInputSelectionWidget->AddInputSelector(s, mMainWindowBase->GetSlicerManagers(),
124 mMainWindowBase->GetSlicerManagerCurrentIndex(), allowSkip);
126 //------------------------------------------------------------------------------
129 //------------------------------------------------------------------------------
130 void vvToolWidgetBase::show() {
131 if (!mIsInitialized) {
132 // DD("show -> init");
133 mToolInputSelectionWidget->Initialize();
134 mIsInitialized = true;
138 //------------------------------------------------------------------------------
141 //------------------------------------------------------------------------------
142 bool vvToolWidgetBase::close() {
143 // DD("vvToolWidgetBase::close()");
144 return QDialog::close();
146 //------------------------------------------------------------------------------
149 //------------------------------------------------------------------------------
150 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m) {
151 mToolInputSelectionWidget->AnImageIsBeingClosed(m);
152 if (m == mCurrentSlicerManager) {
156 //------------------------------------------------------------------------------
159 //------------------------------------------------------------------------------
160 void vvToolWidgetBase::InitializeInputs() {
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;
177 mSlicerManagersCompatible = mMainWindowBase->GetSlicerManagers();
178 mCurrentCompatibleIndex = mMainWindowBase->GetSlicerManagerCurrentIndex();
180 mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible,
181 mCurrentCompatibleIndex);
182 mIsInitialized = true;
185 //------------------------------------------------------------------------------
188 //------------------------------------------------------------------------------
189 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
190 // DD("SetNumberOfNeededInputs");
193 //------------------------------------------------------------------------------
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);
208 //------------------------------------------------------------------------------
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;
216 //------------------------------------------------------------------------------
219 //------------------------------------------------------------------------------
220 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l) {
221 buttonBox->setEnabled(true);
222 // DD("InputIsSelected(vector)");
224 if (l.size() == 1) InputIsSelected(l[0]);
226 std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
230 //------------------------------------------------------------------------------