]> Creatis software - clitk.git/blob - vv/vvLandmarksPanel.cxx
Remove experimental condition for .gif
[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   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()));
48 }
49
50 void vvLandmarksPanel::Load()
51
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());
56     LoadFromFile(files);
57   }
58 }
59
60 bool vvLandmarksPanel::LoadFromFile(std::vector<std::string> files)
61
62   if (!mCurrentLandmarks->LoadFile(files))
63     return false;
64   
65   SetCurrentLandmarks(mCurrentLandmarks,0);
66   emit UpdateRenderWindows();
67   return true;
68 }
69
70 void vvLandmarksPanel::Save()
71
72   QString file = QFileDialog::getSaveFileName(this,
73                  tr("Save Landmarks"),
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());
78     filename += ".txt";
79     mCurrentLandmarks->SaveFile(filename.c_str());
80   }
81 }
82
83 void vvLandmarksPanel::SelectPoint()
84
85   if (tableWidget->rowCount() > 0) {
86     QList<QTableWidgetItem *> items = tableWidget->selectedItems();
87     if (!items.empty()) {
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];
94         
95       emit SelectedPointChanged();
96     }
97   }
98
99 }
100
101
102 void vvLandmarksPanel::RemoveSelectedPoints()
103
104   if (tableWidget->rowCount() > 0) {
105     QList<QTableWidgetItem *> items = tableWidget->selectedItems();
106     if (items.empty()) {
107       tableWidget->removeRow(tableWidget->rowCount()-1);
108       mCurrentLandmarks->RemoveLastLandmark();
109     }
110     else {
111       // we're using single-selection mode
112       int row = items[0]->row();
113       mCurrentLandmarks->RemoveLandmark(row);
114       tableWidget->removeRow(row);
115       
116       for (int i = row; i < tableWidget->rowCount(); i++) {
117         QTableWidgetItem* iItem = tableWidget->item(i, 0);
118         iItem->setText(QString::number(i));
119       }
120         
121     }
122     emit UpdateRenderWindows();
123   }
124 }
125
126 void vvLandmarksPanel::RemoveAllPoints()
127
128   mCurrentLandmarks->RemoveAll();
129   tableWidget->clearContents();
130   tableWidget->setRowCount(0);
131   emit UpdateRenderWindows();
132 }
133
134 void vvLandmarksPanel::AddPoint()
135
136   AddPoint(mCurrentLandmarks->GetNumberOfPoints()-1);
137 }
138
139 void vvLandmarksPanel::AddPoint(int landmarksIndex)
140
141   int rowIndex = tableWidget->rowCount();
142 //   DD(rowIndex);
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);
148
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);
153
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);
158
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);
163
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);
168
169
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);
174
175   tableWidget->setItem(rowIndex,6, new QTableWidgetItem(mCurrentLandmarks->GetComments(landmarksIndex).c_str()));
176 }
177
178 void vvLandmarksPanel::SetCurrentLandmarks(vvLandmarks* lm,int time)
179
180   if (time != lm->GetTime())
181     return;
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"))
190         AddPoint(i);
191   }
192   //if (time > 1)
193   //tableWidget->setColumnHidden(4,1);
194   //else
195   //tableWidget->setColumnHidden(4,0);
196   tableWidget->resizeColumnsToContents();
197 }
198
199 void vvLandmarksPanel::SetCurrentImage(std::string filename)
200
201   QString image = "<b>CurrentImage : </b>";
202   image += vtksys::SystemTools::GetFilenameWithoutLastExtension(filename).c_str();
203   nameLabel->setText(image);
204 }
205
206 void vvLandmarksPanel::CommentsChanged(int row, int column)
207
208   if (column == 6) {
209     mCurrentLandmarks->ChangeComments(row,std::string(tableWidget->item(row,column)->text().toStdString()));
210     tableWidget->resizeColumnsToContents();
211   }
212 }
213
214 #endif /* end #define _vvLandmarksPanel_CXX */
215