]> Creatis software - clitk.git/blob - vv/vvLandmarksPanel.cxx
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
[clitk.git] / vv / vvLandmarksPanel.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://www.centreleonberard.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 _vvLandmarksPanel_CXX
19 #define _vvLandmarksPanel_CXX
20 #include "vvLandmarksPanel.h"
21
22 #include <QtGui>
23 #include <Qt>
24 #include "QTreePushButton.h"
25 #include "vvLandmarks.h"
26
27 #include <vtksys/SystemTools.hxx>
28 #include <clitkDD.h>
29
30 //====================================================================
31 vvLandmarksPanel::vvLandmarksPanel(QWidget * parent):QWidget(parent)
32 {
33   setupUi(this);
34
35   tableWidget->verticalHeader()->hide();
36   tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
37   tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
38   loadButton->setEnabled(0);
39   saveButton->setEnabled(0);
40   removeButton->setEnabled(0);
41   connect(loadButton, SIGNAL(clicked()),this,SLOT(Load()));
42   connect(saveButton, SIGNAL(clicked()),this,SLOT(Save()));
43   connect(removeButton, SIGNAL(clicked()),this,SLOT(RemoveSelectedPoints()));
44   connect(removeAllButton, SIGNAL(clicked()),this,SLOT(RemoveAllPoints()));
45   connect(tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(CommentsChanged(int,int)));
46   connect(tableWidget,SIGNAL(doubleClicked(const QModelIndex &)),this,SLOT(SelectPoint()));
47 }
48
49 void vvLandmarksPanel::Load()
50 {
51   QString file = QFileDialog::getOpenFileName(this,tr("Load Landmarks"),
52                  mCurrentPath.c_str(),tr("Landmarks ( *.txt *.pts)"));
53   if (!file.isEmpty()) {
54     std::vector<std::string> files(1, file.toStdString());
55     LoadFromFile(files);
56   }
57 }
58
59 bool vvLandmarksPanel::LoadFromFile(std::vector<std::string> files)
60 {
61   if (!mCurrentLandmarks->LoadFile(files))
62     return false;
63   
64   SetCurrentLandmarks(mCurrentLandmarks,2);
65   emit UpdateRenderWindows();
66   return true;
67 }
68
69 void vvLandmarksPanel::Save()
70 {
71   QString file = QFileDialog::getSaveFileName(this,
72                  tr("Save Landmarks"),
73                  mCurrentPath.c_str(),tr("Landmarks ( *.txt)"));
74   if (!file.isEmpty()) {
75     std::string filename = vtksys::SystemTools::GetFilenamePath(file.toStdString());
76     filename += "/" + vtksys::SystemTools::GetFilenameWithoutLastExtension(file.toStdString());
77     filename += ".txt";
78     mCurrentLandmarks->SaveFile(filename.c_str());
79   }
80 }
81
82 void vvLandmarksPanel::SelectPoint()
83 {
84   if (tableWidget->rowCount() > 0) {
85     QList<QTableWidgetItem *> items = tableWidget->selectedItems();
86     if (!items.empty()) {
87       // we're using single-selection mode
88       int row = items[0]->row();
89       mSelectedPoint[0] = mCurrentLandmarks->GetCoordinates(row)[0];
90       mSelectedPoint[1] = mCurrentLandmarks->GetCoordinates(row)[1];
91       mSelectedPoint[2] = mCurrentLandmarks->GetCoordinates(row)[2];
92       mSelectedPoint[3] = mCurrentLandmarks->GetCoordinates(row)[3];
93         
94       emit SelectedPointChanged();
95     }
96   }
97
98 }
99
100
101 void vvLandmarksPanel::RemoveSelectedPoints()
102 {
103   if (tableWidget->rowCount() > 0) {
104     QList<QTableWidgetItem *> items = tableWidget->selectedItems();
105     if (items.empty()) {
106       tableWidget->removeRow(tableWidget->rowCount()-1);
107       mCurrentLandmarks->RemoveLastLandmark();
108     }
109     else {
110       // we're using single-selection mode
111       int row = items[0]->row();
112       mCurrentLandmarks->RemoveLandmark(row);
113       tableWidget->removeRow(row);
114       
115       for (int i = row; i < tableWidget->rowCount(); i++) {
116         QTableWidgetItem* iItem = tableWidget->item(i, 0);
117         iItem->setText(QString::number(i));
118       }
119         
120     }
121     emit UpdateRenderWindows();
122   }
123 }
124
125 void vvLandmarksPanel::RemoveAllPoints()
126 {
127   mCurrentLandmarks->RemoveAll();
128   tableWidget->clearContents();
129   tableWidget->setRowCount(0);
130   emit UpdateRenderWindows();
131 }
132
133 void vvLandmarksPanel::AddPoint()
134 {
135   AddPoint(mCurrentLandmarks->GetNumberOfPoints()-1);
136 }
137
138 void vvLandmarksPanel::AddPoint(int landmarksIndex)
139 {
140   int rowIndex = tableWidget->rowCount();
141 //   DD(rowIndex);
142   tableWidget->setRowCount(rowIndex+1);
143   tableWidget->setRowHeight(rowIndex,20);
144   QTableWidgetItem* iItem = new QTableWidgetItem(QString::number(rowIndex));
145   iItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
146   tableWidget->setItem(rowIndex,0,iItem);
147
148   QTableWidgetItem* xItem = new QTableWidgetItem(
149     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[0],'f',1));
150   xItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
151   tableWidget->setItem(rowIndex,1,xItem);
152
153   QTableWidgetItem* yItem = new QTableWidgetItem(
154     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[1],'f',1));
155   yItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
156   tableWidget->setItem(rowIndex,2,yItem);
157
158   QTableWidgetItem* zItem = new QTableWidgetItem(
159     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[2],'f',1));
160   zItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
161   tableWidget->setItem(rowIndex,3,zItem);
162
163   QTableWidgetItem* tItem = new QTableWidgetItem(
164     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[3],'f',1));
165   tItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
166   tableWidget->setItem(rowIndex,4,tItem);
167
168
169   QTableWidgetItem* vItem = new QTableWidgetItem(
170     QString::number(mCurrentLandmarks->GetPixelValue(landmarksIndex),'f',1));
171   vItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
172   tableWidget->setItem(rowIndex,5,vItem);
173
174   tableWidget->setItem(rowIndex,6, new QTableWidgetItem(mCurrentLandmarks->GetComments(landmarksIndex).c_str()));
175 }
176
177 void vvLandmarksPanel::SetCurrentLandmarks(vvLandmarks* lm,int time)
178 {
179   if (time != lm->GetTime())
180     return;
181   
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       AddPoint(i);
190   }
191   //if (time > 1)
192   //tableWidget->setColumnHidden(4,1);
193   //else
194   //tableWidget->setColumnHidden(4,0);
195   tableWidget->resizeColumnsToContents();
196 }
197
198 void vvLandmarksPanel::SetCurrentImage(std::string filename)
199 {
200   QString image = "<b>CurrentImage : </b>";
201   image += vtksys::SystemTools::GetFilenameWithoutLastExtension(filename).c_str();
202   nameLabel->setText(image);
203 }
204
205 void vvLandmarksPanel::CommentsChanged(int row, int column)
206 {
207   if (column == 6) {
208     mCurrentLandmarks->ChangeComments(row,std::string(tableWidget->item(row,column)->text().toStdString()));
209     tableWidget->resizeColumnsToContents();
210   }
211 }
212
213 #endif /* end #define _vvLandmarksPanel_CXX */
214