]> Creatis software - clitk.git/blob - vv/vvLinkPanel.cxx
removed headers
[clitk.git] / vv / vvLinkPanel.cxx
1 #ifndef _vvLinkPanel_CXX
2 #define _vvLinkPanel_CXX
3 #include "vvLinkPanel.h"
4 #include "clitkCommon.h"
5
6 #include <QtGui>
7 #include <Qt>
8 #include "QTreePushButton.h"
9
10 //====================================================================
11 vvLinkPanel::vvLinkPanel(QWidget * parent):QWidget(parent)
12 {
13     setupUi(this);
14     imageNames.resize(0);
15     image1Ids.resize(0);
16     image2Ids.resize(0);
17
18     linkTableWidget->resizeColumnsToContents();
19     linkTableWidget->verticalHeader()->hide();
20     linkTableWidget->horizontalHeader()->hide();
21     linkTableWidget->hideColumn(4);
22     linkTableWidget->hideColumn(5);
23
24     connect(image1ComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(UpdateComboBox2(int)));
25     connect(linkButton,SIGNAL(clicked()),this,SLOT(addLink()));
26     connect(linkAllButton,SIGNAL(clicked()),this,SLOT(linkAll()));
27 }
28
29 void vvLinkPanel::addImage(std::string name, std::string id)
30 {
31     imageNames.push_back(name);
32     image1Ids.push_back(id);
33     UpdateComboBox1();
34 }
35
36 void vvLinkPanel::removeImage(int index)
37 {
38     std::string idRemoved = image1Ids[index];
39     std::vector<std::string>::iterator Nameiter = imageNames.begin();
40     std::vector<std::string>::iterator Iditer = image1Ids.begin();
41     for (int i = 0; i < index; i++)
42     {
43         Nameiter++;
44         Iditer++;
45     }
46     imageNames.erase(Nameiter);
47     image1Ids.erase(Iditer);
48     UpdateComboBox1();
49     for (int i = linkTableWidget->rowCount() - 1; i >= 0 ;i--)
50     {
51         if (linkTableWidget->item(i,4)->text().toStdString() == idRemoved ||
52                 linkTableWidget->item(i,5)->text().toStdString() == idRemoved)
53         {
54             emit removeLink(linkTableWidget->item(i,4)->text(),linkTableWidget->item(i,5)->text());
55             linkTableWidget->removeRow(i);
56             UpdateComboBox2(image1ComboBox->currentIndex());
57         }
58     }
59 }
60
61 void vvLinkPanel::UpdateComboBox1()
62 {
63     image1ComboBox->clear();
64     for (unsigned int i = 0; i < imageNames.size();i++)
65     {
66         image1ComboBox->addItem(imageNames[i].c_str());
67     }
68 }
69
70 void vvLinkPanel::UpdateComboBox2(int index)
71 {
72     image2ComboBox->clear();
73     image2Ids.resize(0);
74     if (imageNames.size() > 1 && index >= 0)
75     {
76         for (unsigned int i = 0; i < imageNames.size();i++)
77         {
78             if ((int)i != index)
79             {
80                 bool AlreadyLinked = false;
81                 for (int row = 0; row < linkTableWidget->rowCount();row++)
82                 {
83                     if ((linkTableWidget->item(row,1)->text().toStdString() == imageNames[index] &&
84                             linkTableWidget->item(row,3)->text().toStdString() == imageNames[i]) ||
85                             (linkTableWidget->item(row,3)->text().toStdString() == imageNames[index] &&
86                              linkTableWidget->item(row,1)->text().toStdString() == imageNames[i]))
87                     {
88                         AlreadyLinked = true;
89                         break;
90                     }
91                 }
92                 if (!AlreadyLinked)
93                 {
94                     image2ComboBox->addItem(imageNames[i].c_str());
95                     image2Ids.push_back(image1Ids[i]);
96                 }
97             }
98         }
99     }
100     if (image2ComboBox->count() == 0)
101         linkButton->setEnabled(0);
102     else
103         linkButton->setEnabled(1);
104 }
105
106 void vvLinkPanel::linkAll()
107 {
108     //First remove all links
109     while (linkTableWidget->rowCount())
110         removeLink(1,1);
111     //Now create all possible links
112     int count=image2ComboBox->count();
113     for (int j=0;j<count;j++)
114     {
115         image1ComboBox->setCurrentIndex(j);
116         image2ComboBox->setCurrentIndex(0);
117         for (int i=0;i< count-j;i++)
118             addLink();
119     }
120 }
121
122 void vvLinkPanel::addLink()
123 {
124     if (!image1ComboBox->currentText().isEmpty()
125             && !image2ComboBox->currentText().isEmpty())
126     {
127         int row = linkTableWidget->rowCount();
128         linkTableWidget->insertRow(row);
129
130         linkTableWidget->setItem(row,1,new QTableWidgetItem(image1ComboBox->currentText()));
131         linkTableWidget->setItem(row,2,new QTableWidgetItem("&"));
132         linkTableWidget->setItem(row,3,new QTableWidgetItem(image2ComboBox->currentText()));
133         linkTableWidget->setItem(row,4,new QTableWidgetItem(image1Ids[image1ComboBox->currentIndex()].c_str()));
134         linkTableWidget->setItem(row,5,new QTableWidgetItem(image2Ids[image2ComboBox->currentIndex()].c_str()));
135         QTreePushButton* cButton = new QTreePushButton;
136         cButton->setIndex(linkTableWidget->rowCount());
137         cButton->setColumn(0);
138         cButton->setIcon(QIcon(QString::fromUtf8(":/new/prefix1/icons/exit.png")));
139         connect(cButton,SIGNAL(clickedInto(int, int)),
140                 this,SLOT(removeLink(int, int)));
141         cButton->setToolTip(tr("remove link"));
142         linkTableWidget->setCellWidget(row,0,cButton);
143
144         linkTableWidget->resizeColumnToContents(0);
145         linkTableWidget->resizeColumnToContents(1);
146         linkTableWidget->resizeColumnToContents(2);
147         linkTableWidget->resizeColumnToContents(3);
148         linkTableWidget->setRowHeight(row,17);
149
150         emit addLink(image1Ids[image1ComboBox->currentIndex()].c_str(),
151                      image2Ids[image2ComboBox->currentIndex()].c_str());
152         UpdateComboBox2(image1ComboBox->currentIndex());
153     }
154
155 }
156
157 void vvLinkPanel::removeLink(int row, int column)
158 {
159     emit removeLink(linkTableWidget->item(row-1,4)->text(),linkTableWidget->item(row-1,5)->text());
160     linkTableWidget->removeRow(row-1);
161     UpdateComboBox2(image1ComboBox->currentIndex());
162 }
163
164 #endif /* end #define _vvLinkPanel_CXX */
165