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 ======================================================================-====*/
18 #ifndef _vvLinkPanel_CXX
19 #define _vvLinkPanel_CXX
20 #include "vvLinkPanel.h"
21 #include "clitkCommon.h"
25 #include "QTreePushButton.h"
27 //====================================================================
28 vvLinkPanel::vvLinkPanel(QWidget * parent):QWidget(parent)
35 linkTableWidget->resizeColumnsToContents();
36 linkTableWidget->verticalHeader()->hide();
37 linkTableWidget->horizontalHeader()->hide();
38 linkTableWidget->hideColumn(4);
39 linkTableWidget->hideColumn(5);
41 connect(image1ComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(UpdateComboBox2(int)));
42 connect(linkButton,SIGNAL(clicked()),this,SLOT(addLink()));
43 connect(linkAllButton,SIGNAL(clicked()),this,SLOT(linkAll()));
46 void vvLinkPanel::addImage(std::string name, std::string id)
48 imageNames.push_back(name);
49 image1Ids.push_back(id);
53 void vvLinkPanel::removeImage(int index)
55 std::string idRemoved = image1Ids[index];
56 std::vector<std::string>::iterator Nameiter = imageNames.begin();
57 std::vector<std::string>::iterator Iditer = image1Ids.begin();
58 for (int i = 0; i < index; i++)
63 imageNames.erase(Nameiter);
64 image1Ids.erase(Iditer);
66 for (int i = linkTableWidget->rowCount() - 1; i >= 0 ;i--)
68 if (linkTableWidget->item(i,4)->text().toStdString() == idRemoved ||
69 linkTableWidget->item(i,5)->text().toStdString() == idRemoved)
71 emit removeLink(linkTableWidget->item(i,4)->text(),linkTableWidget->item(i,5)->text());
72 linkTableWidget->removeRow(i);
73 UpdateComboBox2(image1ComboBox->currentIndex());
78 void vvLinkPanel::UpdateComboBox1()
80 image1ComboBox->clear();
81 for (unsigned int i = 0; i < imageNames.size();i++)
83 image1ComboBox->addItem(imageNames[i].c_str());
87 void vvLinkPanel::UpdateComboBox2(int index)
89 image2ComboBox->clear();
91 if (imageNames.size() > 1 && index >= 0)
93 for (unsigned int i = 0; i < imageNames.size();i++)
97 bool AlreadyLinked = false;
98 for (int row = 0; row < linkTableWidget->rowCount();row++)
100 if ((linkTableWidget->item(row,1)->text().toStdString() == imageNames[index] &&
101 linkTableWidget->item(row,3)->text().toStdString() == imageNames[i]) ||
102 (linkTableWidget->item(row,3)->text().toStdString() == imageNames[index] &&
103 linkTableWidget->item(row,1)->text().toStdString() == imageNames[i]))
105 AlreadyLinked = true;
111 image2ComboBox->addItem(imageNames[i].c_str());
112 image2Ids.push_back(image1Ids[i]);
117 if (image2ComboBox->count() == 0)
118 linkButton->setEnabled(0);
120 linkButton->setEnabled(1);
123 void vvLinkPanel::linkAll()
125 //First remove all links
126 while (linkTableWidget->rowCount())
128 //Now create all possible links
129 int count=image2ComboBox->count();
130 for (int j=0;j<count;j++)
132 image1ComboBox->setCurrentIndex(j);
133 image2ComboBox->setCurrentIndex(0);
134 for (int i=0;i< count-j;i++)
139 void vvLinkPanel::addLink()
141 if (!image1ComboBox->currentText().isEmpty()
142 && !image2ComboBox->currentText().isEmpty())
144 int row = linkTableWidget->rowCount();
145 linkTableWidget->insertRow(row);
147 linkTableWidget->setItem(row,1,new QTableWidgetItem(image1ComboBox->currentText()));
148 linkTableWidget->setItem(row,2,new QTableWidgetItem("&"));
149 linkTableWidget->setItem(row,3,new QTableWidgetItem(image2ComboBox->currentText()));
150 linkTableWidget->setItem(row,4,new QTableWidgetItem(image1Ids[image1ComboBox->currentIndex()].c_str()));
151 linkTableWidget->setItem(row,5,new QTableWidgetItem(image2Ids[image2ComboBox->currentIndex()].c_str()));
152 QTreePushButton* cButton = new QTreePushButton;
153 cButton->setIndex(linkTableWidget->rowCount());
154 cButton->setColumn(0);
155 cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png")));
156 connect(cButton,SIGNAL(clickedInto(int, int)),
157 this,SLOT(removeLink(int, int)));
158 cButton->setToolTip(tr("remove link"));
159 linkTableWidget->setCellWidget(row,0,cButton);
161 linkTableWidget->resizeColumnToContents(0);
162 linkTableWidget->resizeColumnToContents(1);
163 linkTableWidget->resizeColumnToContents(2);
164 linkTableWidget->resizeColumnToContents(3);
165 linkTableWidget->setRowHeight(row,17);
167 emit addLink(image1Ids[image1ComboBox->currentIndex()].c_str(),
168 image2Ids[image2ComboBox->currentIndex()].c_str());
169 UpdateComboBox2(image1ComboBox->currentIndex());
174 void vvLinkPanel::removeLink(int row, int column)
176 emit removeLink(linkTableWidget->item(row-1,4)->text(),linkTableWidget->item(row-1,5)->text());
177 linkTableWidget->removeRow(row-1);
178 UpdateComboBox2(image1ComboBox->currentIndex());
181 #endif /* end #define _vvLinkPanel_CXX */