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://oncora1.lyon.fnclcc.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 ======================================================================-====*/
19 #ifndef _vvLinkPanel_CXX
20 #define _vvLinkPanel_CXX
22 #include "vvLinkPanel.h"
23 #include "clitkCommon.h"
27 #include "QTreePushButton.h"
29 //------------------------------------------------------------------------------
30 vvLinkPanel::vvLinkPanel(QWidget * parent):QWidget(parent)
37 linkTableWidget->resizeColumnsToContents();
38 linkTableWidget->verticalHeader()->hide();
39 linkTableWidget->horizontalHeader()->hide();
40 linkTableWidget->hideColumn(4);
41 linkTableWidget->hideColumn(5);
43 connect(image1ComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(UpdateComboBox2(int)));
44 connect(linkButton,SIGNAL(clicked()),this,SLOT(addLink()));
45 connect(linkAllButton,SIGNAL(clicked()),this,SLOT(linkAll()));
47 //------------------------------------------------------------------------------
50 //------------------------------------------------------------------------------
51 void vvLinkPanel::addImage(std::string name, std::string id)
53 imageNames.push_back(name);
54 image1Ids.push_back(id);
57 //------------------------------------------------------------------------------
60 //------------------------------------------------------------------------------
61 void vvLinkPanel::removeImage(int index)
63 std::string idRemoved = image1Ids[index];
64 std::vector<std::string>::iterator Nameiter = imageNames.begin();
65 std::vector<std::string>::iterator Iditer = image1Ids.begin();
66 for (int i = 0; i < index; i++) {
70 imageNames.erase(Nameiter);
71 image1Ids.erase(Iditer);
73 for (int i = linkTableWidget->rowCount() - 1; i >= 0 ; i--) {
74 if (linkTableWidget->item(i,4)->text().toStdString() == idRemoved ||
75 linkTableWidget->item(i,5)->text().toStdString() == idRemoved) {
76 emit removeLink(linkTableWidget->item(i,4)->text(),linkTableWidget->item(i,5)->text());
77 linkTableWidget->removeRow(i);
78 UpdateComboBox2(image1ComboBox->currentIndex());
82 //------------------------------------------------------------------------------
85 //------------------------------------------------------------------------------
86 void vvLinkPanel::UpdateComboBox1()
88 image1ComboBox->clear();
89 for (unsigned int i = 0; i < imageNames.size(); i++) {
90 image1ComboBox->addItem(imageNames[i].c_str());
93 //------------------------------------------------------------------------------
96 //------------------------------------------------------------------------------
97 void vvLinkPanel::UpdateComboBox2(int index)
99 image2ComboBox->clear();
101 if (imageNames.size() > 1 && index >= 0) {
102 for (unsigned int i = 0; i < imageNames.size(); i++) {
103 if ((int)i != index) {
104 bool AlreadyLinked = false;
105 for (int row = 0; row < linkTableWidget->rowCount(); row++) {
106 if ((linkTableWidget->item(row,1)->text().toStdString() == imageNames[index] &&
107 linkTableWidget->item(row,3)->text().toStdString() == imageNames[i]) ||
108 (linkTableWidget->item(row,3)->text().toStdString() == imageNames[index] &&
109 linkTableWidget->item(row,1)->text().toStdString() == imageNames[i])) {
110 AlreadyLinked = true;
114 if (!AlreadyLinked) {
115 image2ComboBox->addItem(imageNames[i].c_str());
116 image2Ids.push_back(image1Ids[i]);
121 if (image2ComboBox->count() == 0)
122 linkButton->setEnabled(0);
124 linkButton->setEnabled(1);
126 //------------------------------------------------------------------------------
129 //------------------------------------------------------------------------------
130 void vvLinkPanel::linkAll()
132 //First remove all links
133 while (linkTableWidget->rowCount())
135 //Now create all possible links
136 int count=image2ComboBox->count();
137 for (int j=0; j<count; j++) {
138 image1ComboBox->setCurrentIndex(j);
139 image2ComboBox->setCurrentIndex(0);
140 for (int i=0; i< count-j; i++)
144 //------------------------------------------------------------------------------
147 //------------------------------------------------------------------------------
148 void vvLinkPanel::addLink()
150 if (!image1ComboBox->currentText().isEmpty()
151 && !image2ComboBox->currentText().isEmpty()) {
152 int row = linkTableWidget->rowCount();
153 linkTableWidget->insertRow(row);
155 linkTableWidget->setItem(row,1,new QTableWidgetItem(image1ComboBox->currentText()));
156 linkTableWidget->setItem(row,2,new QTableWidgetItem("&"));
157 linkTableWidget->setItem(row,3,new QTableWidgetItem(image2ComboBox->currentText()));
158 linkTableWidget->setItem(row,4,new QTableWidgetItem(image1Ids[image1ComboBox->currentIndex()].c_str()));
159 linkTableWidget->setItem(row,5,new QTableWidgetItem(image2Ids[image2ComboBox->currentIndex()].c_str()));
160 QTreePushButton* cButton = new QTreePushButton;
161 cButton->setIndex(linkTableWidget->rowCount());
162 cButton->setColumn(0);
163 cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png")));
164 connect(cButton,SIGNAL(clickedInto(int, int)),
165 this,SLOT(removeLink(int, int)));
166 cButton->setToolTip(tr("remove link"));
167 linkTableWidget->setCellWidget(row,0,cButton);
169 linkTableWidget->resizeColumnToContents(0);
170 linkTableWidget->resizeColumnToContents(1);
171 linkTableWidget->resizeColumnToContents(2);
172 linkTableWidget->resizeColumnToContents(3);
173 linkTableWidget->setRowHeight(row,17);
175 emit addLink(image1Ids[image1ComboBox->currentIndex()].c_str(),
176 image2Ids[image2ComboBox->currentIndex()].c_str());
177 UpdateComboBox2(image1ComboBox->currentIndex());
181 //------------------------------------------------------------------------------
184 //------------------------------------------------------------------------------
185 void vvLinkPanel::removeLink(int row, int column)
189 while (linkTableWidget->item(row-1,4) == NULL) {
191 // DD(linkTableWidget->rowCount());
195 if (linkTableWidget->item(row-1,5) == NULL) {
196 return; // should not happend ...
199 emit removeLink(linkTableWidget->item(row-1,4)->text(),linkTableWidget->item(row-1,5)->text());
201 linkTableWidget->removeRow(row-1);
202 // DD("after removeRow");
203 UpdateComboBox2(image1ComboBox->currentIndex());
206 //------------------------------------------------------------------------------
208 #endif /* end #define _vvLinkPanel_CXX */