1 #include "vvToolWidgetBase.h"
2 #include "vvMainWindowBase.h"
3 #include "vvSlicerManager.h"
6 //------------------------------------------------------------------------------
7 vvToolWidgetBase::vvToolWidgetBase(vvMainWindowBase * parent, Qt::WindowFlags f)
9 Ui::vvToolWidgetBase() {
11 // Set Modality : dialog is not modal but stay always on top because
12 // parent is set at construction
13 mIsInitialized = false;
15 mMainWindowBase = parent;
17 setAttribute(Qt::WA_DeleteOnClose);
18 mCurrentSlicerManager = 0;
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()));
31 // Disable main widget while input image is not selected
32 mToolWidget->setEnabled(false);
34 //------------------------------------------------------------------------------
37 //------------------------------------------------------------------------------
38 vvToolWidgetBase::~vvToolWidgetBase() {
41 //------------------------------------------------------------------------------
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;
50 //------------------------------------------------------------------------------
53 //------------------------------------------------------------------------------
54 void vvToolWidgetBase::AddInputSelector(QString s, clitk::ImageToImageGenericFilterBase * f, bool allowSkip) {
55 // DD("AddInputSelector with filter");
56 // DD(mMainWindowBase->GetSlicerManagers().size());
59 mSlicerManagersCompatible.clear();
60 mToolInputSelectionWidget->setToolTip(QString("%1").arg(mFilter->GetAvailableImageTypes().c_str()));
61 for(unsigned int i=0; i<mMainWindowBase->GetSlicerManagers().size(); 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;
73 if (mSlicerManagersCompatible.size() == 0) {
74 QMessageBox::information(this, "No image","Sorry, could not perform operation. No (compatible) opened image type.");
78 mToolInputSelectionWidget->AddInputSelector(s, mSlicerManagersCompatible, mCurrentCompatibleIndex, allowSkip);
80 //------------------------------------------------------------------------------
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]);
91 if (mMainWindowBase->GetSlicerManagers().size() == 0) {
92 QMessageBox::information(this, "No image","Sorry, could not perform operation. No opened image type.");
96 mToolInputSelectionWidget->AddInputSelector(s, mMainWindowBase->GetSlicerManagers(),
97 mMainWindowBase->GetSlicerManagerCurrentIndex(), allowSkip);
99 //------------------------------------------------------------------------------
102 //------------------------------------------------------------------------------
103 void vvToolWidgetBase::show() {
104 if (!mIsInitialized) {
105 // DD("show -> init");
106 mToolInputSelectionWidget->Initialize();
107 mIsInitialized = true;
111 //------------------------------------------------------------------------------
114 //------------------------------------------------------------------------------
115 bool vvToolWidgetBase::close() {
116 // DD("vvToolWidgetBase::close()");
117 return QDialog::close();
119 //------------------------------------------------------------------------------
122 //------------------------------------------------------------------------------
123 void vvToolWidgetBase::AnImageIsBeingClosed(vvSlicerManager * m) {
124 mToolInputSelectionWidget->AnImageIsBeingClosed(m);
125 if (m == mCurrentSlicerManager) {
129 //------------------------------------------------------------------------------
132 //------------------------------------------------------------------------------
133 void vvToolWidgetBase::InitializeInputs() {
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;
150 mSlicerManagersCompatible = mMainWindowBase->GetSlicerManagers();
151 mCurrentCompatibleIndex = mMainWindowBase->GetSlicerManagerCurrentIndex();
153 mToolInputSelectionWidget->Initialize(mSlicerManagersCompatible,
154 mCurrentCompatibleIndex);
155 mIsInitialized = true;
158 //------------------------------------------------------------------------------
161 //------------------------------------------------------------------------------
162 // void vvToolWidgetBase::SetNumberOfNeededInputs(int i) {
163 // DD("SetNumberOfNeededInputs");
166 //------------------------------------------------------------------------------
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);
181 //------------------------------------------------------------------------------
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;
189 //------------------------------------------------------------------------------
192 //------------------------------------------------------------------------------
193 void vvToolWidgetBase::InputIsSelected(std::vector<vvSlicerManager*> & l) {
194 buttonBox->setEnabled(true);
195 // DD("InputIsSelected(vector)");
197 if (l.size() == 1) InputIsSelected(l[0]);
199 std::cerr << "You MUST overwrite this method vvToolWidgetBase::InputIsSelected(vector<vvSlicerManager *> m) if you use several input" << std::endl;
203 //------------------------------------------------------------------------------