]> Creatis software - clitk.git/blob - vv/vvLandmarksPanel.cxx
Debug RTStruct conversion with empty struc
[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 <QFileDialog>
25 #include "QTreePushButton.h"
26 #include "vvLandmarks.h"
27
28 #include <vtksys/SystemTools.hxx>
29 #include <clitkDD.h>
30
31 //====================================================================
32 vvLandmarksPanel::vvLandmarksPanel(QWidget * parent):QWidget(parent)
33
34   setupUi(this);
35
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()));
50 }
51
52 void vvLandmarksPanel::Load()
53
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());
58     LoadFromFile(files);
59   }
60 }
61
62 bool vvLandmarksPanel::LoadFromFile(std::vector<std::string> files)
63
64   if (!mCurrentLandmarks->LoadFile(files))
65     return false;
66   
67   SetCurrentLandmarks(mCurrentLandmarks,0);
68   emit UpdateRenderWindows();
69   return true;
70 }
71
72 void vvLandmarksPanel::Save()
73
74   QString file = QFileDialog::getSaveFileName(this,
75                  tr("Save Landmarks"),
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());
80     filename += ".txt";
81     mCurrentLandmarks->SaveFile(filename.c_str());
82   }
83 }
84
85 void vvLandmarksPanel::UpdateTransform()
86 {
87   emit UpdateLandmarkTransform();
88   SetCurrentLandmarks(mCurrentLandmarks,mCurrentLandmarks->GetTime());
89 }
90
91 void vvLandmarksPanel::SelectPoint()
92
93   if (tableWidget->rowCount() > 0) {
94     QList<QTableWidgetItem *> items = tableWidget->selectedItems();
95     if (!items.empty()) {
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];
102         
103       emit SelectedPointChanged();
104     }
105   }
106
107 }
108
109
110 void vvLandmarksPanel::RemoveSelectedPoints()
111
112   if (tableWidget->rowCount() > 0) {
113     QList<QTableWidgetItem *> items = tableWidget->selectedItems();
114     if (items.empty()) {
115       tableWidget->removeRow(tableWidget->rowCount()-1);
116       mCurrentLandmarks->RemoveLastLandmark();
117     }
118     else {
119       // we're using single-selection mode
120       int row = items[0]->row();
121       mCurrentLandmarks->RemoveLandmark(row);
122       tableWidget->removeRow(row);
123       
124       for (int i = row; i < tableWidget->rowCount(); i++) {
125         QTableWidgetItem* iItem = tableWidget->item(i, 0);
126         iItem->setText(QString::number(i));
127       }
128         
129     }
130     emit UpdateRenderWindows();
131   }
132 }
133
134 void vvLandmarksPanel::RemoveAllPoints()
135
136   mCurrentLandmarks->RemoveAll();
137   tableWidget->clearContents();
138   tableWidget->setRowCount(0);
139   emit UpdateRenderWindows();
140 }
141
142 void vvLandmarksPanel::AddPoint()
143
144   AddPoint(mCurrentLandmarks->GetNumberOfPoints()-1);
145 }
146
147 void vvLandmarksPanel::AddPoint(int landmarksIndex)
148
149   int rowIndex = tableWidget->rowCount();
150 //   DD(rowIndex);
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);
156
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);
161
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);
166
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);
171
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);
176
177
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);
182
183   tableWidget->setItem(rowIndex,6, new QTableWidgetItem(mCurrentLandmarks->GetComments(landmarksIndex).c_str()));
184 }
185
186 void vvLandmarksPanel::SetCurrentLandmarks(vvLandmarks* lm,int time)
187
188   if (time != lm->GetTime())
189     return;
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"))
199         AddPoint(i);
200   }
201   //if (time > 1)
202   //tableWidget->setColumnHidden(4,1);
203   //else
204   //tableWidget->setColumnHidden(4,0);
205   tableWidget->resizeColumnsToContents();
206 }
207
208 void vvLandmarksPanel::SetCurrentImage(std::string filename)
209
210   QString image = "<b>CurrentImage : </b>";
211   image += vtksys::SystemTools::GetFilenameWithoutLastExtension(filename).c_str();
212   nameLabel->setText(image);
213 }
214
215 void vvLandmarksPanel::CommentsChanged(int row, int column)
216
217   if (column == 6) {
218     mCurrentLandmarks->ChangeComments(row,std::string(tableWidget->item(row,column)->text().toStdString()));
219     tableWidget->resizeColumnsToContents();
220   }
221 }
222
223 #endif /* end #define _vvLandmarksPanel_CXX */
224