DoubleInputListWidget.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2008 National Institute For Space Research (INPE) - Brazil.
2 
3  This file is part of the TerraLib - a Framework for building GIS enabled applications.
4 
5  TerraLib is free software: you can redistribute it and/or modify
6  it under the terms of the GNU Lesser General Public License as published by
7  the Free Software Foundation, either version 3 of the License,
8  or (at your option) any later version.
9 
10  TerraLib is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU Lesser General Public License for more details.
14 
15  You should have received a copy of the GNU Lesser General Public License
16  along with TerraLib. See COPYING. If not, write to
17  TerraLib Team at <terralib-team@terralib.org>.
18  */
19 
20 /*!
21  \file terralib/qt/widgets/utils/DoubleInputListWidget.cpp
22 
23  \brief ...
24 */
25 
26 // TerraLib
27 #include "ui_DoubleInputListWidgetForm.h"
28 #include "DoubleInputListWidget.h"
29 
30 // Qt
31 #include <QIcon>
32 
34  Qt::WindowFlags f)
35  : QWidget(parent, f), m_ui(new Ui::DoubleInputListWidgetForm)
36 {
37  m_ui->setupUi(this);
38 
39 // set icons
40  m_ui->m_addToolButton->setIcon(QIcon::fromTheme("go-next"));
41  m_ui->m_addAllToolButton->setIcon(QIcon::fromTheme("go-last"));
42  m_ui->m_removeToolButton->setIcon(QIcon::fromTheme("go-previous"));
43  m_ui->m_removeAllToolButton->setIcon(QIcon::fromTheme("go-first"));
44  m_ui->m_upToolButton->setIcon(QIcon::fromTheme("go-up"));
45  m_ui->m_downToolButton->setIcon(QIcon::fromTheme("go-down"));
46 
47 // set selection mode
48  m_ui->m_firstInputListWidget->setSelectionMode(
49  QAbstractItemView::ExtendedSelection);
50  m_ui->m_secondInputListWidget->setSelectionMode(
51  QAbstractItemView::ExtendedSelection);
52  m_ui->m_outputListWidget->setSelectionMode(
53  QAbstractItemView::ExtendedSelection);
54 
55 // connect signals and slots
56  connect(m_ui->m_addToolButton, SIGNAL(pressed()), this,
57  SLOT(onAddToolButtonPressed()));
58  connect(m_ui->m_addAllToolButton, SIGNAL(pressed()), this,
60  connect(m_ui->m_removeToolButton, SIGNAL(pressed()), this,
62  connect(m_ui->m_removeAllToolButton, SIGNAL(pressed()), this,
64  connect(m_ui->m_firstInputListWidget, SIGNAL(itemSelectionChanged()), this,
66  connect(m_ui->m_secondInputListWidget, SIGNAL(itemSelectionChanged()), this,
68  connect(m_ui->m_outputListWidget, SIGNAL(itemSelectionChanged()), this,
70  connect(m_ui->m_upToolButton, SIGNAL(pressed()), this,
71  SLOT(onUpToolButtonPressed()));
72  connect(m_ui->m_downToolButton, SIGNAL(pressed()), this,
73  SLOT(onDownToolButtonPressed()));
74 }
75 
77 
78 Ui::DoubleInputListWidgetForm* te::qt::widgets::DoubleInputListWidget::getForm()
79  const
80 {
81  return m_ui.get();
82 }
83 
85  const QString& value)
86 {
87  m_ui->m_firstItemsLabel->setText(value);
88 }
89 
91  const QString& value)
92 {
93  m_ui->m_secondItemsLabel->setText(value);
94 }
95 
97  const QString& value)
98 {
99  m_ui->m_outputItemsLabel->setText(value);
100 }
101 
103  const std::vector<std::string>& values)
104 {
105  m_ui->m_firstInputListWidget->clear();
106 
107  if(!values.empty())
108  m_ui->m_addAllToolButton->setEnabled(true);
109  else
110  m_ui->m_addAllToolButton->setEnabled(false);
111 
112  for(size_t i = 0; i < values.size(); ++i)
113  {
114  QListWidgetItem* item = new QListWidgetItem(m_ui->m_firstInputListWidget);
115  item->setText(QString::fromUtf8(values[i].c_str()));
116  item->setData(Qt::UserRole, QVariant(0));
117 
118  m_ui->m_outputListWidget->addItem(item);
119  }
120 }
121 
123  const std::vector<std::string>& values)
124 {
125  m_ui->m_secondInputListWidget->clear();
126 
127  if(!values.empty())
128  m_ui->m_addAllToolButton->setEnabled(true);
129  else
130  m_ui->m_addAllToolButton->setEnabled(false);
131 
132  for(size_t i = 0; i < values.size(); ++i)
133  {
134  QListWidgetItem* item = new QListWidgetItem(m_ui->m_secondInputListWidget);
135  item->setText(QString::fromUtf8(values[i].c_str()));
136  item->setData(Qt::UserRole, QVariant(1));
137 
138  m_ui->m_outputListWidget->addItem(item);
139  }
140 }
141 
143  const std::vector<std::string>& values, const int& id)
144 {
145  m_ui->m_outputListWidget->clear();
146 
147  if(!values.empty())
148  m_ui->m_removeAllToolButton->setEnabled(true);
149  else
150  m_ui->m_removeAllToolButton->setEnabled(false);
151 
152  for(size_t i = 0; i < values.size(); ++i)
153  {
154  QListWidgetItem* item = new QListWidgetItem(m_ui->m_outputListWidget);
155  item->setText(QString::fromUtf8(values[i].c_str()));
156  item->setData(Qt::UserRole, QVariant(id));
157 
158  m_ui->m_outputListWidget->addItem(item);
159  }
160 }
161 
162 std::vector<std::string>
164 {
165  std::vector<std::string> vec;
166 
167  int count = m_ui->m_outputListWidget->count();
168 
169  for(int i = 0; i < count; ++i)
170  {
171  vec.push_back(m_ui->m_outputListWidget->item(i)->text().toUtf8().data());
172  }
173 
174  return vec;
175 }
176 
178 {
179  std::vector<int> vec;
180 
181  int count = m_ui->m_outputListWidget->count();
182 
183  for (int i = 0; i < count; ++i)
184  {
185  QVariant v = m_ui->m_outputListWidget->item(i)->data(Qt::UserRole);
186 
187  if (v.isValid())
188  vec.push_back(v.toInt());
189  }
190 
191  return vec;
192 }
193 
195 {
196  m_ui->m_firstInputListWidget->clear();
197  m_ui->m_secondInputListWidget->clear();
198 
199  m_ui->m_addToolButton->setEnabled(false);
200  m_ui->m_addAllToolButton->setEnabled(false);
201 }
202 
204 {
205  m_ui->m_outputListWidget->clear();
206 
207  m_ui->m_removeToolButton->setEnabled(false);
208  m_ui->m_removeAllToolButton->setEnabled(false);
209 }
210 
212 {
213  m_ui->m_upToolButton->setVisible(state);
214  m_ui->m_downToolButton->setVisible(state);
215 }
216 
218 {
219  QList<QListWidgetItem*> firstInputList =
220  m_ui->m_firstInputListWidget->selectedItems();
221 
222  QList<QListWidgetItem*> secondInputList =
223  m_ui->m_secondInputListWidget->selectedItems();
224 
225  if(!firstInputList.empty() || !secondInputList.empty())
226  m_ui->m_removeAllToolButton->setEnabled(true);
227 
228  for(int i = 0; i < firstInputList.size(); ++i)
229  {
230  int row = m_ui->m_firstInputListWidget->row(firstInputList[i]);
231 
232  QListWidgetItem* item = m_ui->m_firstInputListWidget->takeItem(row);
233 
234  m_ui->m_outputListWidget->addItem(item);
235  }
236 
237  for(int i = 0; i < secondInputList.size(); ++i)
238  {
239  int row = m_ui->m_secondInputListWidget->row(secondInputList[i]);
240 
241  QListWidgetItem* item = m_ui->m_secondInputListWidget->takeItem(row);
242 
243  m_ui->m_outputListWidget->addItem(item);
244  }
245 
246  if(m_ui->m_firstInputListWidget->count() == 0 &&
247  m_ui->m_secondInputListWidget->count() == 0)
248  {
249  m_ui->m_addToolButton->setEnabled(false);
250  m_ui->m_addAllToolButton->setEnabled(false);
251  }
252 
253  emit itemChanged();
254 }
255 
257 {
258  m_ui->m_firstInputListWidget->selectAll();
259  m_ui->m_secondInputListWidget->selectAll();
260 
261  QList<QListWidgetItem*> firstList =
262  m_ui->m_firstInputListWidget->selectedItems();
263  QList<QListWidgetItem*> secondList =
264  m_ui->m_secondInputListWidget->selectedItems();
265 
266  if(!firstList.empty() || !secondList.empty())
267  m_ui->m_removeAllToolButton->setEnabled(true);
268 
269  for(int i = 0; i < firstList.size(); ++i)
270  {
271  int row = m_ui->m_firstInputListWidget->row(firstList[i]);
272 
273  QListWidgetItem* item = m_ui->m_firstInputListWidget->takeItem(row);
274 
275  m_ui->m_outputListWidget->addItem(item);
276  }
277 
278  for(int i = 0; i < secondList.size(); ++i)
279  {
280  int row = m_ui->m_secondInputListWidget->row(secondList[i]);
281 
282  QListWidgetItem* item = m_ui->m_secondInputListWidget->takeItem(row);
283 
284  m_ui->m_outputListWidget->addItem(item);
285  }
286 
287  m_ui->m_addToolButton->setEnabled(false);
288  m_ui->m_addAllToolButton->setEnabled(false);
289 
290  emit itemChanged();
291 }
292 
294 {
295  QList<QListWidgetItem*> list = m_ui->m_outputListWidget->selectedItems();
296 
297  if(list.empty() == false)
298  m_ui->m_addAllToolButton->setEnabled(true);
299 
300  for(int i = 0; i < list.size(); ++i)
301  {
302  int row = m_ui->m_outputListWidget->row(list[i]);
303 
304  QListWidgetItem* item = m_ui->m_outputListWidget->takeItem(row);
305 
306  QVariant v = item->data(Qt::UserRole);
307 
308  if(v.isValid())
309  {
310  int id = v.toInt();
311 
312  if(id == 0)
313  m_ui->m_firstInputListWidget->addItem(item);
314  else
315  m_ui->m_secondInputListWidget->addItem(item);
316  }
317  }
318 
319  if(m_ui->m_outputListWidget->count() == 0)
320  {
321  m_ui->m_removeToolButton->setEnabled(false);
322  m_ui->m_removeAllToolButton->setEnabled(false);
323  m_ui->m_upToolButton->setEnabled(false);
324  m_ui->m_downToolButton->setEnabled(false);
325  }
326 
327  emit itemChanged();
328 }
329 
331 {
332  m_ui->m_outputListWidget->selectAll();
333 
334  QList<QListWidgetItem*> list = m_ui->m_outputListWidget->selectedItems();
335 
336  if(list.empty() == false)
337  m_ui->m_addAllToolButton->setEnabled(true);
338 
339  for(int i = 0; i < list.size(); ++i)
340  {
341  int row = m_ui->m_outputListWidget->row(list[i]);
342 
343  QListWidgetItem* item = m_ui->m_outputListWidget->takeItem(row);
344 
345  QVariant v = item->data(Qt::UserRole);
346 
347  if(v.isValid())
348  {
349  int id = v.toInt();
350 
351  if(id == 0)
352  m_ui->m_firstInputListWidget->addItem(item);
353  else
354  m_ui->m_secondInputListWidget->addItem(item);
355  }
356  }
357 
358  m_ui->m_removeToolButton->setEnabled(false);
359  m_ui->m_removeAllToolButton->setEnabled(false);
360  m_ui->m_upToolButton->setEnabled(false);
361  m_ui->m_downToolButton->setEnabled(false);
362 
363  emit itemChanged();
364 }
365 
367 {
368  int count = m_ui->m_outputListWidget->count();
369 
370  if(count == m_ui->m_outputListWidget->selectedItems().size())
371  return;
372 
373  for(int i = count-1; i >= 0; --i)
374  {
375  QListWidgetItem* currentItem = m_ui->m_outputListWidget->item(i);
376 
377  if(i == count-1)
378  continue;
379 
380  if(currentItem->isSelected())
381  {
382  QListWidgetItem* itemAfter = m_ui->m_outputListWidget->item(i+1);
383 
384  bool wasSelected = itemAfter->isSelected();
385 
386  m_ui->m_outputListWidget->takeItem(i);
387  m_ui->m_outputListWidget->takeItem(i);
388 
389  m_ui->m_outputListWidget->insertItem(i, itemAfter);
390  m_ui->m_outputListWidget->insertItem(i+1, currentItem);
391 
392  currentItem->setSelected(true);
393 
394  if(wasSelected)
395  itemAfter->setSelected(true);
396  }
397  }
398 }
399 
401 {
402  int count = m_ui->m_outputListWidget->count();
403 
404  if(count == m_ui->m_outputListWidget->selectedItems().size())
405  return;
406 
407  for(int i = 0; i < count; ++i)
408  {
409  QListWidgetItem* currentItem = m_ui->m_outputListWidget->item(i);
410 
411  if(i == 0)
412  continue;
413 
414  if(currentItem->isSelected())
415  {
416  QListWidgetItem* itemBefore = m_ui->m_outputListWidget->item(i-1);
417 
418  bool wasSelected = itemBefore->isSelected();
419 
420  m_ui->m_outputListWidget->takeItem(i);
421  m_ui->m_outputListWidget->takeItem(i-1);
422 
423  m_ui->m_outputListWidget->insertItem(i-1, currentItem);
424  m_ui->m_outputListWidget->insertItem(i, itemBefore);
425 
426  currentItem->setSelected(true);
427 
428  if(wasSelected)
429  itemBefore->setSelected(true);
430  }
431  }
432 }
433 
436 {
437  if(m_ui->m_firstInputListWidget->selectedItems().size() > 0)
438  {
439  m_ui->m_addToolButton->setEnabled(true);
440  m_ui->m_addAllToolButton->setEnabled(true);
441  }
442  else
443  {
444  m_ui->m_addToolButton->setEnabled(false);
445  }
446 }
447 
450 {
451  if(m_ui->m_secondInputListWidget->selectedItems().size() > 0)
452  {
453  m_ui->m_addToolButton->setEnabled(true);
454  m_ui->m_addAllToolButton->setEnabled(true);
455  }
456  else
457  {
458  m_ui->m_addToolButton->setEnabled(false);
459  }
460 }
461 
463 {
464  if(m_ui->m_outputListWidget->selectedItems().size() > 0)
465  {
466  m_ui->m_removeToolButton->setEnabled(true);
467  m_ui->m_removeAllToolButton->setEnabled(true);
468  m_ui->m_upToolButton->setEnabled(true);
469  m_ui->m_downToolButton->setEnabled(true);
470  }
471  else
472  {
473  m_ui->m_removeToolButton->setEnabled(false);
474  m_ui->m_upToolButton->setEnabled(false);
475  m_ui->m_downToolButton->setEnabled(false);
476  }
477 }
478 
void setSecondLayerLabel(const QString &value)
Ui::DoubleInputListWidgetForm * getForm() const
std::unique_ptr< Ui::DoubleInputListWidgetForm > m_ui
std::vector< std::string > getOutputValues()
void setSecondInputValues(const std::vector< std::string > &values)
void setFirstInputValues(const std::vector< std::string > &values)
DoubleInputListWidget(QWidget *parent=0, Qt::WindowFlags f=0)
void setOutputValues(const std::vector< std::string > &values, const int &id)