]> Creatis software - clitk.git/blob - vv/vvToolSimpleInputSelectorWidget.cxx
Rounding errors in display extent of overlay, fusion and vf.
[clitk.git] / vv / vvToolSimpleInputSelectorWidget.cxx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
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
8
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.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
18 #ifndef VVTOOLINPUTSELECTORWIDGET_CXX
19 #define VVTOOLINPUTSELECTORWIDGET_CXX
20
21 // vv
22 #include "vvToolSimpleInputSelectorWidget.h"
23 #include "vvSlicerManager.h"
24
25 // qt
26 #include <QAbstractButton>
27
28 //------------------------------------------------------------------------------
29 vvToolSimpleInputSelectorWidget::vvToolSimpleInputSelectorWidget(QWidget * parent, Qt::WindowFlags f):
30   QWidget(parent, f)
31 {
32   setupUi(this);
33   setEnabled(true);
34   mSlicerManagerList.clear();
35 }
36 //------------------------------------------------------------------------------
37
38
39 //------------------------------------------------------------------------------
40 void vvToolSimpleInputSelectorWidget::Initialize()
41 {
42   // Connect signals & slots
43   connect(mInputSelectionButtonBox, SIGNAL(accepted()), this, SLOT(accept()));
44   connect(mInputSelectionButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
45   connect(mInputSequenceBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changeInput(int)));
46   if (mSlicerManagerList.size() == 1) {
47     if (!mAllowSkip) accept();
48   }
49   if (mSlicerManagerList.size() == 0) {
50     reject();
51   }
52 }
53 //------------------------------------------------------------------------------
54
55
56 //------------------------------------------------------------------------------
57 void vvToolSimpleInputSelectorWidget::SetText(QString & s)
58 {
59   mGroupBox->setTitle(s);
60 }
61 //------------------------------------------------------------------------------
62
63
64 //------------------------------------------------------------------------------
65 void vvToolSimpleInputSelectorWidget::EnableAllowSkip(bool b)
66 {
67   mAllowSkip = b;
68   if (mAllowSkip) {
69     mInputSelectionButtonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Discard);
70     connect(mInputSelectionButtonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(skip(QAbstractButton*)));
71   } else
72     mInputSelectionButtonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
73 }
74 //------------------------------------------------------------------------------
75
76
77 //------------------------------------------------------------------------------
78 void vvToolSimpleInputSelectorWidget::SetInputList(const std::vector<vvSlicerManager*> & l, int index)
79 {
80   if (l.size() == 0) {
81     // TODO !!!
82     DD("no input > error message");
83     reject();
84   }
85   mInputSequenceBox->clear();
86   for(unsigned int i=0; i<l.size(); i++)
87     mSlicerManagerList.push_back(l[i]);
88   mCurrentIndex = index;
89   for (unsigned int i = 0; i < mSlicerManagerList.size(); i++) {
90     mInputSequenceBox->addItem(mSlicerManagerList[i]->GetFileName().c_str());
91   }
92   mInputSequenceBox->setCurrentIndex(mCurrentIndex);
93   changeInput(mCurrentIndex);
94 }
95 //------------------------------------------------------------------------------
96
97
98 //------------------------------------------------------------------------------
99 void vvToolSimpleInputSelectorWidget::setEnabled(bool b)
100 {
101   QWidget::setEnabled(b);
102   mInputSelectionButtonBox->setEnabled(b);
103   mInputSequenceBox->setEnabled(b);
104   
105 }
106 //------------------------------------------------------------------------------
107
108
109 //------------------------------------------------------------------------------
110 void vvToolSimpleInputSelectorWidget::accept()
111 {
112   mInputSelectionButtonBox->setEnabled(false);
113   mInputSequenceBox->setEnabled(false);
114   emit accepted();
115 }
116 //------------------------------------------------------------------------------
117
118
119
120 //------------------------------------------------------------------------------
121 void vvToolSimpleInputSelectorWidget::reject()
122 {
123   emit rejected();
124 }
125 //------------------------------------------------------------------------------
126
127
128 //------------------------------------------------------------------------------
129 void vvToolSimpleInputSelectorWidget::skip(QAbstractButton* b)
130 {
131   if (b->text() == "Discard") emit sigskip();
132 }
133 //------------------------------------------------------------------------------
134
135
136 //------------------------------------------------------------------------------
137 void vvToolSimpleInputSelectorWidget::changeInput(int index)
138 {
139   if (index<0) return;
140   if (index>=(int)mSlicerManagerList.size()) return;
141   mCurrentIndex = index;
142   vvImage * mCurrentImage = mSlicerManagerList[index]->GetImage();
143   if (mCurrentImage == NULL) return;
144   unsigned int d = mCurrentImage->GetNumberOfDimensions();
145   QString size;
146   QString spacing;
147   for(unsigned int i=0; i<d-1; i++) {
148     size.append(QString("%1").arg(mCurrentImage->GetSize()[i]));
149     size.append("x");
150     spacing.append(QString("%1").arg(mCurrentImage->GetSpacing()[i]));
151     spacing.append("x");
152   }
153   size.append(QString("%1").arg(mCurrentImage->GetSize()[d-1]));
154   spacing.append(QString("%1").arg(mCurrentImage->GetSpacing()[d-1]));
155   mLabelInputInfo->setText(QString("%1D %2\n%3\n%4")
156                            .arg(d)
157                            .arg(mCurrentImage->GetScalarTypeAsITKString().c_str())
158                            .arg(size)
159                            .arg(spacing));
160 }
161 //------------------------------------------------------------------------------
162
163
164 //------------------------------------------------------------------------------
165 vvSlicerManager * vvToolSimpleInputSelectorWidget::GetSelectedInput()
166 {
167   return mSlicerManagerList[GetSelectedInputIndex()];
168 }
169 //------------------------------------------------------------------------------
170
171 #endif
172