X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vv%2FvvLinkPanel.cxx;h=5b890d1057de1c5d55bde8edfdd0a1ead29bd9af;hb=b50c4ae3e2850ad593d2c991b56e04ed22748f99;hp=5cfd853b57c9f7a63bf894476add8787b776e20d;hpb=30659c9eea7c95c04002cb3de18d6e584f8d1296;p=clitk.git diff --git a/vv/vvLinkPanel.cxx b/vv/vvLinkPanel.cxx index 5cfd853..5b890d1 100644 --- a/vv/vvLinkPanel.cxx +++ b/vv/vvLinkPanel.cxx @@ -1,9 +1,9 @@ /*========================================================================= Program: vv http://www.creatis.insa-lyon.fr/rio/vv - Authors belong to: + Authors belong to: - University of LYON http://www.universite-lyon.fr/ - - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr + - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even @@ -14,7 +14,7 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html - ======================================================================-====*/ + ===========================================================================**/ #ifndef _vvLinkPanel_CXX #define _vvLinkPanel_CXX @@ -57,30 +57,34 @@ void vvLinkPanel::addImage(std::string name, std::string id) //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +bool vvLinkPanel::isLinkAll() +{ + return mLinkAll; +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvLinkPanel::removeImage(int index) { std::string idRemoved = image1Ids[index]; std::vector::iterator Nameiter = imageNames.begin(); std::vector::iterator Iditer = image1Ids.begin(); - for (int i = 0; i < index; i++) - { - Nameiter++; - Iditer++; - } + for (int i = 0; i < index; i++) { + Nameiter++; + Iditer++; + } imageNames.erase(Nameiter); image1Ids.erase(Iditer); UpdateComboBox1(); - for (int i = linkTableWidget->rowCount() - 1; i >= 0 ;i--) - { - if (linkTableWidget->item(i,4)->text().toStdString() == idRemoved || - linkTableWidget->item(i,5)->text().toStdString() == idRemoved) - { - emit removeLink(linkTableWidget->item(i,4)->text(),linkTableWidget->item(i,5)->text()); - linkTableWidget->removeRow(i); - UpdateComboBox2(image1ComboBox->currentIndex()); - } + for (int i = linkTableWidget->rowCount() - 1; i >= 0 ; i--) { + if (linkTableWidget->item(i,4)->text().toStdString() == idRemoved || + linkTableWidget->item(i,5)->text().toStdString() == idRemoved) { + emit removeLink(linkTableWidget->item(i,4)->text(),linkTableWidget->item(i,5)->text()); + linkTableWidget->removeRow(i); + UpdateComboBox2(image1ComboBox->currentIndex()); } + } } //------------------------------------------------------------------------------ @@ -89,10 +93,9 @@ void vvLinkPanel::removeImage(int index) void vvLinkPanel::UpdateComboBox1() { image1ComboBox->clear(); - for (unsigned int i = 0; i < imageNames.size();i++) - { - image1ComboBox->addItem(imageNames[i].c_str()); - } + for (unsigned int i = 0; i < imageNames.size(); i++) { + image1ComboBox->addItem(imageNames[i].c_str()); + } } //------------------------------------------------------------------------------ @@ -102,32 +105,26 @@ void vvLinkPanel::UpdateComboBox2(int index) { image2ComboBox->clear(); image2Ids.resize(0); - if (imageNames.size() > 1 && index >= 0) - { - for (unsigned int i = 0; i < imageNames.size();i++) - { - if ((int)i != index) - { - bool AlreadyLinked = false; - for (int row = 0; row < linkTableWidget->rowCount();row++) - { - if ((linkTableWidget->item(row,1)->text().toStdString() == imageNames[index] && - linkTableWidget->item(row,3)->text().toStdString() == imageNames[i]) || - (linkTableWidget->item(row,3)->text().toStdString() == imageNames[index] && - linkTableWidget->item(row,1)->text().toStdString() == imageNames[i])) - { - AlreadyLinked = true; - break; - } - } - if (!AlreadyLinked) - { - image2ComboBox->addItem(imageNames[i].c_str()); - image2Ids.push_back(image1Ids[i]); - } - } + if (imageNames.size() > 1 && index >= 0) { + for (unsigned int i = 0; i < imageNames.size(); i++) { + if ((int)i != index) { + bool AlreadyLinked = false; + for (int row = 0; row < linkTableWidget->rowCount(); row++) { + if ((linkTableWidget->item(row,1)->text().toStdString() == imageNames[index] && + linkTableWidget->item(row,3)->text().toStdString() == imageNames[i]) || + (linkTableWidget->item(row,3)->text().toStdString() == imageNames[index] && + linkTableWidget->item(row,1)->text().toStdString() == imageNames[i])) { + AlreadyLinked = true; + break; + } + } + if (!AlreadyLinked) { + image2ComboBox->addItem(imageNames[i].c_str()); + image2Ids.push_back(image1Ids[i]); } + } } + } if (image2ComboBox->count() == 0) linkButton->setEnabled(0); else @@ -139,55 +136,80 @@ void vvLinkPanel::UpdateComboBox2(int index) //------------------------------------------------------------------------------ void vvLinkPanel::linkAll() { + mLinkAll = true; //First remove all links while (linkTableWidget->rowCount()) removeLink(1,1); //Now create all possible links int count=image2ComboBox->count(); - for (int j=0;jsetCurrentIndex(j); - image2ComboBox->setCurrentIndex(0); - for (int i=0;i< count-j;i++) - addLink(); - } + for (int j=0; jsetCurrentIndex(j); + image2ComboBox->setCurrentIndex(0); + for (int i=0; i< count-j; i++) + addLink(); + } + mLinkAll = false; } //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +void vvLinkPanel::addLinkFromIds(QString id1, QString id2) +{ + int index1 = -1, index2 = -1; + size_t s1 = image1Ids.size(); + size_t s2 = image2Ids.size(); + for (size_t i = 0; i < s1 && index1 == -1; i++) + if (image1Ids[i] == id1.toStdString()) + index1 = i; + + if (index1 >= 0) + image1ComboBox->setCurrentIndex(index1); + + for (size_t i = 0; i < s2 && index2 == -1; i++) + if (image2Ids[i] == id2.toStdString()) + index2 = i; + + if (index1 >= 0 && index2 >= 0) { + image2ComboBox->setCurrentIndex(index2); + addLink(); + } +} +//------------------------------------------------------------------------------ //------------------------------------------------------------------------------ void vvLinkPanel::addLink() { if (!image1ComboBox->currentText().isEmpty() - && !image2ComboBox->currentText().isEmpty()) - { - int row = linkTableWidget->rowCount(); - linkTableWidget->insertRow(row); - - linkTableWidget->setItem(row,1,new QTableWidgetItem(image1ComboBox->currentText())); - linkTableWidget->setItem(row,2,new QTableWidgetItem("&")); - linkTableWidget->setItem(row,3,new QTableWidgetItem(image2ComboBox->currentText())); - linkTableWidget->setItem(row,4,new QTableWidgetItem(image1Ids[image1ComboBox->currentIndex()].c_str())); - linkTableWidget->setItem(row,5,new QTableWidgetItem(image2Ids[image2ComboBox->currentIndex()].c_str())); - QTreePushButton* cButton = new QTreePushButton; - cButton->setIndex(linkTableWidget->rowCount()); - cButton->setColumn(0); - cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); - connect(cButton,SIGNAL(clickedInto(int, int)), - this,SLOT(removeLink(int, int))); - cButton->setToolTip(tr("remove link")); - linkTableWidget->setCellWidget(row,0,cButton); - - linkTableWidget->resizeColumnToContents(0); - linkTableWidget->resizeColumnToContents(1); - linkTableWidget->resizeColumnToContents(2); - linkTableWidget->resizeColumnToContents(3); - linkTableWidget->setRowHeight(row,17); - - emit addLink(image1Ids[image1ComboBox->currentIndex()].c_str(), - image2Ids[image2ComboBox->currentIndex()].c_str()); - UpdateComboBox2(image1ComboBox->currentIndex()); - } + && !image2ComboBox->currentText().isEmpty()) { + int row = linkTableWidget->rowCount(); + linkTableWidget->insertRow(row); + + linkTableWidget->setItem(row,1,new QTableWidgetItem(image1ComboBox->currentText())); + linkTableWidget->setItem(row,2,new QTableWidgetItem("&")); + linkTableWidget->setItem(row,3,new QTableWidgetItem(image2ComboBox->currentText())); + linkTableWidget->setItem(row,4,new QTableWidgetItem(image1Ids[image1ComboBox->currentIndex()].c_str())); + linkTableWidget->setItem(row,5,new QTableWidgetItem(image2Ids[image2ComboBox->currentIndex()].c_str())); + QTreePushButton* cButton = new QTreePushButton; + cButton->setIndex(linkTableWidget->rowCount()); + cButton->setColumn(0); + cButton->setIcon(QIcon(QString::fromUtf8(":/common/icons/exit.png"))); + connect(cButton,SIGNAL(clickedInto(int, int)), + this,SLOT(removeLink(int, int))); + cButton->setToolTip(tr("remove link")); + linkTableWidget->setCellWidget(row,0,cButton); + + linkTableWidget->resizeColumnToContents(0); + linkTableWidget->resizeColumnToContents(1); + linkTableWidget->resizeColumnToContents(2); + linkTableWidget->resizeColumnToContents(3); + linkTableWidget->setRowHeight(row,17); + + emit addLink(image1Ids[image1ComboBox->currentIndex()].c_str(), + image2Ids[image2ComboBox->currentIndex()].c_str(), + true + ); + UpdateComboBox2(image1ComboBox->currentIndex()); + } } //------------------------------------------------------------------------------ @@ -196,18 +218,18 @@ void vvLinkPanel::addLink() //------------------------------------------------------------------------------ void vvLinkPanel::removeLink(int row, int column) { - // DD(row); +// DD(row); // DD(column); while (linkTableWidget->item(row-1,4) == NULL) { --row; - // DD(linkTableWidget->rowCount()); + // DD(linkTableWidget->rowCount()); // DD(row); // return; } if (linkTableWidget->item(row-1,5) == NULL) { return; // should not happend ... } - + emit removeLink(linkTableWidget->item(row-1,4)->text(),linkTableWidget->item(row-1,5)->text()); // DD("after emit"); linkTableWidget->removeRow(row-1);