]> Creatis software - clitk.git/blob - vv/vvLandmarksPanel.cxx
added new cmd line option: --landmarks
[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
29 //====================================================================
30 vvLandmarksPanel::vvLandmarksPanel(QWidget * parent):QWidget(parent)
31 {
32   setupUi(this);
33
34   tableWidget->verticalHeader()->hide();
35   tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
36   tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
37   loadButton->setEnabled(0);
38   saveButton->setEnabled(0);
39   removeButton->setEnabled(0);
40   connect(loadButton, SIGNAL(clicked()),this,SLOT(Load()));
41   connect(saveButton, SIGNAL(clicked()),this,SLOT(Save()));
42   connect(removeButton, SIGNAL(clicked()),this,SLOT(RemoveSelectedPoints()));
43   connect(tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(CommentsChanged(int,int)));
44 }
45
46 void vvLandmarksPanel::Load()
47 {
48   QString file = QFileDialog::getOpenFileName(this,tr("Load Landmarks"),
49                  mCurrentPath.c_str(),tr("Landmarks ( *.txt *.pts)"));
50   if (!file.isEmpty())
51     LoadFromFile(file.toStdString());
52 }
53
54 void vvLandmarksPanel::LoadFromFile(std::string file)
55 {
56   mCurrentLandmarks->LoadFile(file);
57   SetCurrentLandmarks(mCurrentLandmarks,2);
58   emit UpdateRenderWindows();
59 }
60
61 void vvLandmarksPanel::Save()
62 {
63   QString file = QFileDialog::getSaveFileName(this,
64                  tr("Save Landmarks"),
65                  mCurrentPath.c_str(),tr("Landmarks ( *.txt)"));
66   if (!file.isEmpty()) {
67     std::string filename = vtksys::SystemTools::GetFilenamePath(file.toStdString());
68     filename += "/" + vtksys::SystemTools::GetFilenameWithoutLastExtension(file.toStdString());
69     filename += ".txt";
70     mCurrentLandmarks->SaveFile(filename.c_str());
71   }
72 }
73
74 void vvLandmarksPanel::RemoveSelectedPoints()
75 {
76   if (tableWidget->rowCount() > 0) {
77     QList<QTableWidgetItem *> items = tableWidget->selectedItems();
78     if (items.empty()) {
79       tableWidget->removeRow(tableWidget->rowCount()-1);
80       mCurrentLandmarks->RemoveLastLandmark();
81     }
82     else {
83       // we're using single-selection mode
84       int row = items[0]->row();
85       mCurrentLandmarks->RemoveLandmark(row);
86       tableWidget->removeRow(row);
87       
88       for (int i = row; i < tableWidget->rowCount(); i++) {
89         QTableWidgetItem* iItem = tableWidget->item(i, 0);
90         iItem->setText(QString::number(i));
91       }
92         
93     }
94     emit UpdateRenderWindows();
95   }
96 }
97
98 void vvLandmarksPanel::AddPoint()
99 {
100   AddPoint(mCurrentLandmarks->GetNumberOfPoints()-1);
101 }
102
103 void vvLandmarksPanel::AddPoint(int landmarksIndex)
104 {
105   int rowIndex = landmarksIndex; //tableWidget->rowCount();
106   tableWidget->setRowCount(rowIndex+1);
107   tableWidget->setRowHeight(rowIndex,20);
108   QTableWidgetItem* iItem = new QTableWidgetItem(QString::number(landmarksIndex));
109   iItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
110   tableWidget->setItem(rowIndex,0,iItem);
111
112   QTableWidgetItem* xItem = new QTableWidgetItem(
113     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[0],'f',1));
114   xItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
115   tableWidget->setItem(rowIndex,1,xItem);
116
117   QTableWidgetItem* yItem = new QTableWidgetItem(
118     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[1],'f',1));
119   yItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
120   tableWidget->setItem(rowIndex,2,yItem);
121
122   QTableWidgetItem* zItem = new QTableWidgetItem(
123     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[2],'f',1));
124   zItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
125   tableWidget->setItem(rowIndex,3,zItem);
126
127   QTableWidgetItem* tItem = new QTableWidgetItem(
128     QString::number(mCurrentLandmarks->GetCoordinates(landmarksIndex)[3],'f',1));
129   tItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
130   tableWidget->setItem(rowIndex,4,tItem);
131
132
133   QTableWidgetItem* vItem = new QTableWidgetItem(
134     QString::number(mCurrentLandmarks->GetPixelValue(landmarksIndex),'f',1));
135   vItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
136   tableWidget->setItem(rowIndex,5,vItem);
137
138   tableWidget->setItem(rowIndex,6, new QTableWidgetItem(mCurrentLandmarks->GetComments(landmarksIndex).c_str()));
139 }
140
141 void vvLandmarksPanel::SetCurrentLandmarks(vvLandmarks* lm,int time)
142 {
143   loadButton->setEnabled(1);
144   saveButton->setEnabled(1);
145   removeButton->setEnabled(1);
146   mCurrentLandmarks = lm;
147   tableWidget->clearContents();
148   tableWidget->setRowCount(mCurrentLandmarks->GetNumberOfPoints());
149   for (unsigned int i = 0; i < mCurrentLandmarks->GetNumberOfPoints(); i++)
150     AddPoint(i);
151   //if (time > 1)
152   //tableWidget->setColumnHidden(4,1);
153   //else
154   //tableWidget->setColumnHidden(4,0);
155   tableWidget->resizeColumnsToContents();
156 }
157
158 void vvLandmarksPanel::SetCurrentImage(std::string filename)
159 {
160   QString image = "<b>CurrentImage : </b>";
161   image += vtksys::SystemTools::GetFilenameWithoutLastExtension(filename).c_str();
162   nameLabel->setText(image);
163 }
164
165 void vvLandmarksPanel::CommentsChanged(int row, int column)
166 {
167   if (column == 6) {
168     mCurrentLandmarks->ChangeComments(row,std::string(tableWidget->item(row,column)->text().toStdString()));
169     tableWidget->resizeColumnsToContents();
170   }
171 }
172
173 #endif /* end #define _vvLandmarksPanel_CXX */
174