1 /*=========================================================================
4 Module: $RCSfile: vvToolWidgetBase.cxx,v $
6 Date: $Date: 2010/03/17 11:22:18 $
7 Version: $Revision: 1.3 $
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"
32 //------------------------------------------------------------------------------
33 vvToolWidgetBase::vvToolWidgetBase(vvMainWindowBase * parent, Qt::WindowFlags f)
35 Ui::vvToolWidgetBase() {
37 // Set Modality : dialog is not modal but stay always on top because
38 // parent is set at construction
39 mIsInitialized = false;
41 mMainWindowBase = parent;
43 setAttribute(Qt::WA_DeleteOnClose);
44 mCurrentSlicerManager = 0;
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()));
57 // Disable main widget while input image is not selected
58 mToolWidget->setEnabled(false);
60 //------------------------------------------------------------------------------
63 //------------------------------------------------------------------------------
64 vvToolWidgetBase::~vvToolWidgetBase() {
67 //------------------------------------------------------------------------------
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;
76 //------------------------------------------------------------------------------
79 //------------------------------------------------------------------------------
80 void vvToolWidgetBase::AddInputSelector(clitk::ImageToImageGenericFilterBase * f) {
81 DD("AddInputSelector with filter");
82 DD(mMainWindowBase->GetSlicerManagers().size());
85 mSlicerManagersCompatible.clear();
86 // mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
87 for(unsigned int i=0; i<mMainWindowBase->GetSlicerManagers().size(); 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;
98 mToolInputSelectionWidget->AddInputSelector(mSlicerManagersCompatible, mCurrentCompatibleIndex);
100 //------------------------------------------------------------------------------
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]);
111 mToolInputSelectionWidget->AddInputSelector(mMainWindowBase->GetSlicerManagers(),
112 mMainWindowBase->GetSlicerManagerCurrentIndex());
114 //------------------------------------------------------------------------------
117 //------------------------------------------------------------------------------
118 void vvToolWidgetBase::show() {
119 if (!mIsInitialized) {
121 mToolInputSelectionWidget->Initialize();
122 mIsInitialized = true;
126 //------------------------------------------------------------------------------
129 //------------------------------------------------------------------------------
130 bool vvToolWidgetBase::close() {
131 DD("vvToolWidgetBase::close()");
132 return QDialog::close();
134 //------------------------------------------------------------------------------
137 //------------------------------------------------------------------------------
138 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m) {
139 mToolInputSelectionWidget->AnImageIsBeingClosed(m);
140 if (m == mCurrentSlicerManager) {
144 //------------------------------------------------------------------------------
147 //------------------------------------------------------------------------------
148 void vvToolWidgetBase::InitializeInputs() {
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;
165 mSlicerManagersCompatible = mMainWindowBase->GetSlicerManagers();
166 mCurrentCompatibleIndex = mMainWindowBase->GetSlicerManagerCurrentIndex();
168 mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible,
169 mCurrentCompatibleIndex);
170 mIsInitialized = true;
173 //------------------------------------------------------------------------------
176 //------------------------------------------------------------------------------
177 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
178 // DD("SetNumberOfNeededInputs");
181 //------------------------------------------------------------------------------
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);
196 //------------------------------------------------------------------------------
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;
204 //------------------------------------------------------------------------------
207 //------------------------------------------------------------------------------
208 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l) {
209 buttonBox->setEnabled(true);
210 DD("InputIsSelected(vector)");
212 if (l.size() == 1) InputIsSelected(l[0]);
214 std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
218 //------------------------------------------------------------------------------