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 removeButton->setEnabled(0);
42 connect(loadButton, SIGNAL(clicked()),this,SLOT(Load()));
43 connect(saveButton, SIGNAL(clicked()),this,SLOT(Save()));
44 connect(removeButton, SIGNAL(clicked()),this,SLOT(RemoveSelectedPoints()));
45 connect(removeAllButton, SIGNAL(clicked()),this,SLOT(RemoveAllPoints()));
46 connect(tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(CommentsChanged(int,int)));
47 connect(tableWidget,SIGNAL(doubleClicked(const QModelIndex &)),this,SLOT(SelectPoint()));
50 void vvLandmarksPanel::Load()
52 QString file = QFileDialog::getOpenFileName(this,tr("Load Landmarks"),
53 mCurrentPath.c_str(),tr("Landmarks ( *.txt *.pts)"));
54 if (!file.isEmpty()) {
55 std::vector<std::string> files(1, file.toStdString());
60 bool vvLandmarksPanel::LoadFromFile(std::vector<std::string> files)
62 if (!mCurrentLandmarks->LoadFile(files))
65 SetCurrentLandmarks(mCurrentLandmarks,0);
66 emit UpdateRenderWindows();
70 void vvLandmarksPanel::Save()
72 QString file = QFileDialog::getSaveFileName(this,
74 mCurrentPath.c_str(),tr("Landmarks ( *.txt)"));
75 if (!file.isEmpty()) {
76 std::string filename = vtksys::SystemTools::GetFilenamePath(file.toStdString());
77 filename += "/" + vtksys::SystemTools::GetFilenameWithoutLastExtension(file.toStdString());
79 mCurrentLandmarks->SaveFile(filename.c_str());
83 void vvLandmarksPanel::SelectPoint()
85 if (tableWidget->rowCount() > 0) {
86 QList<QTableWidgetItem *> items = tableWidget->selectedItems();
88 // we're using single-selection mode
89 int row = items[0]->row();
90 mSelectedPoint[0] = mCurrentLandmarks->GetCoordinates(row)[0];
91 mSelectedPoint[1] = mCurrentLandmarks->GetCoordinates(row)[1];
92 mSelectedPoint[2] = mCurrentLandmarks->GetCoordinates(row)[2];
93 mSelectedPoint[3] = mCurrentLandmarks->GetCoordinates(row)[3];
95 emit SelectedPointChanged();
102 void vvLandmarksPanel::RemoveSelectedPoints()
104 if (tableWidget->rowCount() > 0) {
105 QList<QTableWidgetItem *> items = tableWidget->selectedItems();
107 tableWidget->removeRow(tableWidget->rowCount()-1);
108 mCurrentLandmarks->RemoveLastLandmark();
111 // we're using single-selection mode
112 int row = items[0]->row();
113 mCurrentLandmarks->RemoveLandmark(row);
114 tableWidget->removeRow(row);
116 for (int i = row; i < tableWidget->rowCount(); i++) {
117 QTableWidgetItem* iItem = tableWidget->item(i, 0);
118 iItem->setText(QString::number(i));
122 emit UpdateRenderWindows();
126 void vvLandmarksPanel::RemoveAllPoints()
128 mCurrentLandmarks->RemoveAll();
129 tableWidget->clearContents();
130 tableWidget->setRowCount(0);
131 emit UpdateRenderWindows();
134 void vvLandmarksPanel::AddPoint()
136 AddPoint(mCurrentLandmarks->GetNumberOfPoints()-1);
139 void vvLandmarksPanel::AddPoint(int landmarksIndex)
141 int rowIndex = tableWidget->rowCount();
143 tableWidget->setRowCount(rowIndex+1);
144 tableWidget->setRowHeight(rowIndex,20);
145 QTableWidgetItem* iItem = new QTableWidgetItem(QString::number(rowIndex));
146 iItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
147 tableWidget->setItem(rowIndex,0,iItem);
149 QTableWidgetItem* xItem = new QTableWidgetItem(
150 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[0],'f',1));
151 xItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
152 tableWidget->setItem(rowIndex,1,xItem);
154 QTableWidgetItem* yItem = new QTableWidgetItem(
155 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[1],'f',1));
156 yItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
157 tableWidget->setItem(rowIndex,2,yItem);
159 QTableWidgetItem* zItem = new QTableWidgetItem(
160 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[2],'f',1));
161 zItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
162 tableWidget->setItem(rowIndex,3,zItem);
164 QTableWidgetItem* tItem = new QTableWidgetItem(
165 QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[3],'f',1));
166 tItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
167 tableWidget->setItem(rowIndex,4,tItem);
170 QTableWidgetItem* vItem = new QTableWidgetItem(
171 QString::number(mCurrentLandmarks->GetPixelValue(landmarksIndex),'f',1));
172 vItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
173 tableWidget->setItem(rowIndex,5,vItem);
175 tableWidget->setItem(rowIndex,6, new QTableWidgetItem(mCurrentLandmarks->GetComments(landmarksIndex).c_str()));
178 void vvLandmarksPanel::SetCurrentLandmarks(vvLandmarks* lm,int time)
180 if (time != lm->GetTime())
182 loadButton->setEnabled(1);
183 saveButton->setEnabled(1);
184 removeButton->setEnabled(1);
185 mCurrentLandmarks = lm;
186 tableWidget->clearContents();
187 tableWidget->setRowCount(0);
188 for (unsigned int i = 0; i < mCurrentLandmarks->GetNumberOfPoints(); i++) {
189 if ((mCurrentLandmarks->GetLabels()->GetValue(i) != "P1") && (mCurrentLandmarks->GetLabels()->GetValue(i) != "P2"))
193 //tableWidget->setColumnHidden(4,1);
195 //tableWidget->setColumnHidden(4,0);
196 tableWidget->resizeColumnsToContents();
199 void vvLandmarksPanel::SetCurrentImage(std::string filename)
201 QString image = "<b>CurrentImage : </b>";
202 image += vtksys::SystemTools::GetFilenameWithoutLastExtension(filename).c_str();
203 nameLabel->setText(image);
206 void vvLandmarksPanel::CommentsChanged(int row, int column)
209 mCurrentLandmarks->ChangeComments(row,std::string(tableWidget->item(row,column)->text().toStdString()));
210 tableWidget->resizeColumnsToContents();
214 #endif /* end #define _vvLandmarksPanel_CXX */