1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://www.centreleonberard.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
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.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18 #ifndef _vvLandmarksPanel_CXX
19 #define _vvLandmarksPanel_CXX
20 #include "vvLandmarksPanel.h"
24 #include <QFileDialog>
25 #include "QTreePushButton.h"
26 #include "vvLandmarks.h"
28 #include <vtksys/SystemTools.hxx>
31 //====================================================================
32 vvLandmarksPanel::vvLandmarksPanel(QWidget * parent):QWidget(parent)
36 tableWidget->verticalHeader()->hide();
37 tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
38 tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
39 loadButton->setEnabled(0);
40 saveButton->setEnabled(0);
41 updateTransformButton->setEnabled(0);
42 removeButton->setEnabled(0);
43 connect(loadButton, SIGNAL(clicked()),this,SLOT(Load()));
44 connect(saveButton, SIGNAL(clicked()),this,SLOT(Save()));
45 connect(updateTransformButton, SIGNAL(clicked()),this,SLOT(UpdateTransform()));
46 connect(removeButton, SIGNAL(clicked()),this,SLOT(RemoveSelectedPoints()));
47 connect(removeAllButton, SIGNAL(clicked()),this,SLOT(RemoveAllPoints()));
48 connect(tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(CommentsChanged(int,int)));
49 connect(tableWidget,SIGNAL(doubleClicked(const QModelIndex &)),this,SLOT(SelectPoint()));
52 void vvLandmarksPanel::Load()
54 QString file = QFileDialog::getOpenFileName(this,tr("Load Landmarks"),
55 mCurrentPath.c_str(),tr("Landmarks ( *.txt *.pts)"));
56 if (!file.isEmpty()) {
57 std::vector<std::string> files(1, file.toStdString());
62 bool vvLandmarksPanel::LoadFromFile(std::vector<std::string> files)
64 if (!mCurrentLandmarks->LoadFile(files))
67 SetCurrentLandmarks(mCurrentLandmarks,0);
68 emit UpdateRenderWindows();
72 void vvLandmarksPanel::Save()
74 QString file = QFileDialog::getSaveFileName(this,
76 mCurrentPath.c_str(),tr("Landmarks ( *.txt)"));
77 if (!file.isEmpty()) {
78 std::string filename = vtksys::SystemTools::GetFilenamePath(file.toStdString());
79 filename += "/" + vtksys::SystemTools::GetFilenameWithoutLastExtension(file.toStdString());
81 mCurrentLandmarks->SaveFile(filename.c_str());
85 void vvLandmarksPanel::UpdateTransform()
87 emit UpdateLandmarkTransform();
88 SetCurrentLandmarks(mCurrentLandmarks,mCurrentLandmarks->GetTime());
91 void vvLandmarksPanel::SelectPoint()
93 if (tableWidget->rowCount() > 0) {
94 QList<QTableWidgetItem *> items = tableWidget->selectedItems();
96 // we're using single-selection mode
97 int row = items[0]->row();
98 mSelectedPoint[0] = mCurrentLandmarks->GetCoordinates(row)[0];
99 mSelectedPoint[1] = mCurrentLandmarks->GetCoordinates(row)[1];
100 mSelectedPoint[2] = mCurrentLandmarks->GetCoordinates(row)[2];
101 mSelectedPoint[3] = mCurrentLandmarks->GetCoordinates(row)[3];
103 emit SelectedPointChanged();
110 void vvLandmarksPanel::RemoveSelectedPoints()
112 if (tableWidget->rowCount() > 0) {
113 QList<QTableWidgetItem *> items = tableWidget->selectedItems();
115 tableWidget->removeRow(tableWidget->rowCount()-1);
116 mCurrentLandmarks->RemoveLastLandmark();
119 // we're using single-selection mode
120 int row = items[0]->row();
121 mCurrentLandmarks->RemoveLandmark(row);
122 tableWidget->removeRow(row);
124 for (int i = row; i < tableWidget->rowCount(); i++) {
125 QTableWidgetItem* iItem = tableWidget->item(i, 0);
126 iItem->setText(QString::number(i));
130 emit UpdateRenderWindows();
134 void vvLandmarksPanel::RemoveAllPoints()
136 mCurrentLandmarks->RemoveAll();
137 tableWidget->clearContents();
138 tableWidget->setRowCount(0);
139 emit UpdateRenderWindows();
142 void vvLandmarksPanel::AddPoint()
144 AddPoint(mCurrentLandmarks->GetNumberOfPoints()-1);
147 void vvLandmarksPanel::AddPoint(int landmarksIndex)
149 int rowIndex = tableWidget->rowCount();
151 tableWidget->setRowCount(rowIndex+1);
152 tableWidget->setRowHeight(rowIndex,20);
153 QTableWidgetItem* iItem = new QTableWidgetItem(QString::number(rowIndex));
154 iItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
155 tableWidget->setItem(rowIndex,0,iItem);
157 QTableWidgetItem* xItem = new QTableWidgetItem(
158 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[0],'f',1));
159 xItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
160 tableWidget->setItem(rowIndex,1,xItem);
162 QTableWidgetItem* yItem = new QTableWidgetItem(
163 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[1],'f',1));
164 yItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
165 tableWidget->setItem(rowIndex,2,yItem);
167 QTableWidgetItem* zItem = new QTableWidgetItem(
168 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[2],'f',1));
169 zItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
170 tableWidget->setItem(rowIndex,3,zItem);
172 QTableWidgetItem* tItem = new QTableWidgetItem(
173 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[3],'f',1));
174 tItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
175 tableWidget->setItem(rowIndex,4,tItem);
178 QTableWidgetItem* vItem = new QTableWidgetItem(
179 QString::number(mCurrentLandmarks->GetPixelValue(landmarksIndex),'f',1));
180 vItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
181 tableWidget->setItem(rowIndex,5,vItem);
183 tableWidget->setItem(rowIndex,6, new QTableWidgetItem(mCurrentLandmarks->GetComments(landmarksIndex).c_str()));
186 void vvLandmarksPanel::SetCurrentLandmarks(vvLandmarks* lm,int time)
188 if (time != lm->GetTime())
190 loadButton->setEnabled(1);
191 saveButton->setEnabled(1);
192 updateTransformButton->setEnabled(1);
193 removeButton->setEnabled(1);
194 mCurrentLandmarks = lm;
195 tableWidget->clearContents();
196 tableWidget->setRowCount(0);
197 for (unsigned int i = 0; i < mCurrentLandmarks->GetNumberOfPoints(); i++) {
198 if ((mCurrentLandmarks->GetLabels()->GetValue(i) != "P1") && (mCurrentLandmarks->GetLabels()->GetValue(i) != "P2"))
202 //tableWidget->setColumnHidden(4,1);
204 //tableWidget->setColumnHidden(4,0);
205 tableWidget->resizeColumnsToContents();
208 void vvLandmarksPanel::SetCurrentImage(std::string filename)
210 QString image = "<b>CurrentImage : </b>";
211 image += vtksys::SystemTools::GetFilenameWithoutLastExtension(filename).c_str();
212 nameLabel->setText(image);
215 void vvLandmarksPanel::CommentsChanged(int row, int column)
218 mCurrentLandmarks->ChangeComments(row,std::string(tableWidget->item(row,column)->text().toStdString()));
219 tableWidget->resizeColumnsToContents();
223 #endif /* end #define _vvLandmarksPanel_CXX */