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