All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DataSourceSelectorWidget.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/connector/DataSourceSelectorWidget.cpp
22 
23  \brief A dialog for connecting to a data source.
24 */
25 
26 // TerraLib
27 #include "../../../../common/Translator.h"
28 #include "../../../../dataaccess/datasource/DataSourceInfoManager.h"
29 #include "../../Exception.h"
30 #include "../connector/AbstractDataSourceConnector.h"
31 #include "../core/DataSourceType.h"
32 #include "../core/DataSourceTypeManager.h"
34 #include "ui_DataSourceSelectorWidgetForm.h"
35 
36 // Qt
37 #include <QIcon>
38 #include <QMessageBox>
39 
41  : QWidget(parent, f),
42  m_ui(new Ui::DataSourceSelectorWidgetForm),
43  m_addButtonEnabled(true),
44  m_removeButtonEnabled(true),
45  m_editButtonEnabled(true),
46  m_createButtonEnabled(true)
47 {
48 // add controls
49  m_ui->setupUi(this);
50 
51 // clear some widgets
52  m_ui->m_datasourceTypeTitleLabel->clear();
53  m_ui->m_datasourceDescriptionLabel->clear();
54 
55 // add button icons
56  m_ui->m_addDataSourceToolButton->setIcon(QIcon::fromTheme("list-add"));
57  m_ui->m_removeDataSourceToolButton->setIcon(QIcon::fromTheme("list-remove"));
58  m_ui->m_editDataSourceToolButton->setIcon(QIcon::fromTheme("preferences-system"));
59  m_ui->m_createDataSourceToolButton->setIcon(QIcon::fromTheme("datasource-new"));
60 
61 // add the list of data sources available in the system
62  std::map<std::string, DataSourceType*>::const_iterator it = DataSourceTypeManager::getInstance().begin();
63  std::map<std::string, DataSourceType*>::const_iterator itend = DataSourceTypeManager::getInstance().end();
64 
65  while(it != itend)
66  {
67  QString dsName = QString::fromStdString(it->second->getName());
68  QIcon icon = it->second->getIcon(DataSourceType::ICON_DATASOURCE_SMALL);
69  QString title = QString::fromStdString(it->second->getTitle());
70  QString description = QString::fromStdString(it->second->getDescription());
71 
72  QListWidgetItem* item = new QListWidgetItem(icon, title);
73 
74  item->setToolTip(description);
75 
76  item->setData(Qt::UserRole, QVariant(dsName));
77 
78  m_ui->m_datasourceTypeListWidget->addItem(item);
79 
80  ++it;
81  }
82 
83 //verify if datasourceTypeListWidget has any item and set the first one as selected equals true.
84  if(m_ui->m_datasourceTypeListWidget->count() > 0)
85  {
86  m_ui->m_datasourceTypeListWidget->setItemSelected(m_ui->m_datasourceTypeListWidget->item(0), true);
87  dataSourceTypePressed(m_ui->m_datasourceTypeListWidget->item(0));
88  }
89 
90 // connect signal and slots
91  connect(m_ui->m_addDataSourceToolButton, SIGNAL(pressed()), this, SLOT(addDataSourcePushButtonPressed()));
92  connect(m_ui->m_removeDataSourceToolButton, SIGNAL(pressed()), this, SLOT(removeDataSourcePushButtonPressed()));
93  connect(m_ui->m_editDataSourceToolButton, SIGNAL(pressed()), this, SLOT(editDataSourcePushButtonPressed()));
94  connect(m_ui->m_createDataSourceToolButton, SIGNAL(pressed()), this, SLOT(createDataSourcePushButtonPressed()));
95  connect(m_ui->m_datasourceTypeListWidget, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(dataSourceTypePressed(QListWidgetItem*)));
96  connect(m_ui->m_datasourceListWidget, SIGNAL(itemPressed(QListWidgetItem*)), this, SLOT(dataSourcePressed(QListWidgetItem*)));
97  connect(m_ui->m_datasourceListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(dataSourceDoubleClicked(QListWidgetItem*)));
98 
99 }
100 
102 {
103 }
104 
105 Ui::DataSourceSelectorWidgetForm* te::qt::widgets::DataSourceSelectorWidget::getForm() const
106 {
107  return m_ui.get();
108 }
109 
110 void te::qt::widgets::DataSourceSelectorWidget::setSelectionMode(QAbstractItemView::SelectionMode mode)
111 {
112  m_ui->m_datasourceListWidget->setSelectionMode(mode);
113 }
114 
116 {
117  m_addButtonEnabled = enabled;
118  m_editButtonEnabled = enabled;
119  m_removeButtonEnabled = enabled;
120  m_createButtonEnabled = enabled;
121 }
122 
124 {
125  if(button == BUTTON_ADD_DATASOURCE)
126  m_addButtonEnabled = enabled;
127  else if(button == BUTTON_EDIT_DATASOURCE)
128  m_editButtonEnabled = enabled;
129  else if(button == BUTTON_REMOVE_DATASOURCE)
130  m_removeButtonEnabled = enabled;
131  else if(button == BUTTON_CREATE_DATASOURCE)
132  m_createButtonEnabled = enabled;
133 }
134 
135 //void te::qt::widgets::DataSourceSelectorWidget::selectDataSourceType(int row)
136 //{
137 // if((row < 0) || (row >= m_ui->m_datasourceTypeListWidget->count()))
138 // return;
139 //
140 // QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(row);
141 //
142 // if(item == 0)
143 // return;
144 //
145 // //m_ui->m_datasourceTypeListWidget->setSele
146 //}
147 
148 std::list<te::da::DataSourceInfoPtr> te::qt::widgets::DataSourceSelectorWidget::getSelecteds() const
149 {
150  std::list<te::da::DataSourceInfoPtr> selecteds;
151 
152  QList<QListWidgetItem*> items = m_ui->m_datasourceListWidget->selectedItems();
153 
154  for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
155  {
156  QListWidgetItem* item = *it;
157 
158  QVariant udata = item->data(Qt::UserRole);
159 
160  QString id = udata.toString();
161 
162  if(id.isEmpty())
163  throw Exception(TE_TR("Selected data source has no identification!"));
164 
166 
167  if(selected.get() == 0)
168  throw Exception(TE_TR("Could not find selected data source!"));
169 
170  selecteds.push_back(selected);
171  }
172 
173  return selecteds;
174 }
175 
177 {
178  int count = m_ui->m_datasourceTypeListWidget->count();
179  int found = -1;
180 
181  for(int i=0; i<count; i++)
182  {
183  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
184 
185  if(item->data(Qt::UserRole).toString() == dsType)
186  {
187  found = i;
188  break;
189  }
190  }
191 
192  if (found != -1)
193  {
194  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(found);
195 
196  m_ui->m_datasourceTypeListWidget->setCurrentItem(item);
197  dataSourceTypePressed(item);
198  }
199 }
200 
202 {
203  int count = m_ui->m_datasourceTypeListWidget->count();
204 
205  for(int i=0; i<count; i++)
206  {
207  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
208 
209  std::string name = item->data(Qt::UserRole).toString().toStdString();
210 
212 
213  if(type->hasDatabaseSupport())
214  item->setHidden(!visible);
215  }
216 }
217 
219 {
220  int count = m_ui->m_datasourceTypeListWidget->count();
221 
222  for(int i=0; i<count; i++)
223  {
224  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
225 
226  std::string name = item->data(Qt::UserRole).toString().toStdString();
227 
229 
230  if(type->hasFileSupport())
231  item->setHidden(!visible);
232  }
233 }
234 
236 {
237  int count = m_ui->m_datasourceTypeListWidget->count();
238 
239  for(int i=0; i<count; i++)
240  {
241  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
242 
243  std::string name = item->data(Qt::UserRole).toString().toStdString();
244 
246 
247  if(type->hasRasterSupport())
248  item->setHidden(!visible);
249  }
250 }
251 
253 {
254  int count = m_ui->m_datasourceTypeListWidget->count();
255 
256  for(int i=0; i<count; i++)
257  {
258  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
259 
260  std::string name = item->data(Qt::UserRole).toString().toStdString();
261 
263 
264  if(type->hasVectorialSupport())
265  item->setHidden(!visible);
266  }
267 }
268 
270 {
271  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
272 
273  if(item == 0)
274  return;
275 
276  QVariant udata = item->data(Qt::UserRole);
277 
278  QString dsTypeId = udata.toString();
279 
280  if(dsTypeId.isEmpty())
281  return;
282 
283  try
284  {
285  const DataSourceType* dsType = DataSourceTypeManager::getInstance().get(dsTypeId.toStdString());
286 
287  if(dsType == 0)
288  throw Exception(TE_TR("Unknown data source type!"));
289 
290  std::auto_ptr<QWidget> connectorw(dsType->getWidget(DataSourceType::WIDGET_DATASOURCE_CONNECTOR, this));
291 
292  if(connectorw.get() == 0)
293  throw Exception(TE_TR("This type of data source hasn't provide a dialog for adding a new data source"));
294 
295  AbstractDataSourceConnector* connector = dynamic_cast<AbstractDataSourceConnector*>(connectorw.get());
296 
297  if(connector == 0)
298  throw Exception(TE_TR("Wrong type of object for adding a new data source!"));
299 
300  std::list<te::da::DataSourceInfoPtr> datasources;
301 
302  connector->connect(datasources);
303 
304  for(std::list<te::da::DataSourceInfoPtr>::iterator it = datasources.begin(); it != datasources.end(); ++it)
305  {
306  if(it->get() == 0)
307  return;
308 
309  QListWidgetItem* item = new QListWidgetItem(QString::fromStdString((*it)->getTitle()));
310  item->setData(Qt::UserRole, QVariant(QString::fromStdString((*it)->getId())));
311  m_ui->m_datasourceListWidget->addItem(item);
312  m_ui->m_datasourceListWidget->setCurrentItem(item);
313  dataSourcePressed(item);
314  }
315  }
316  catch(const std::exception& e)
317  {
318  QMessageBox::warning(this,
319  tr("TerraLib Qt Components"),
320  tr(e.what()));
321  }
322  catch(...)
323  {
324  QMessageBox::warning(this,
325  tr("TerraLib Qt Components"),
326  tr("Unknown error while adding a new data source!"));
327  }
328 }
329 
331 {
332  std::list<te::da::DataSourceInfoPtr> selecteds = getSelecteds();
333 
334  if(selecteds.empty())
335  return;
336 
337  try
338  {
339  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
340 
341  QVariant udata = item->data(Qt::UserRole);
342 
343  QString dsTypeName = udata.toString();
344 
345  if(dsTypeName.isEmpty())
346  throw Exception(TE_TR("Unknown data source type!"));
347 
348  const DataSourceType* dsType = DataSourceTypeManager::getInstance().get(dsTypeName.toStdString());
349 
350  if(dsType == 0)
351  throw Exception(TE_TR("Could not find data source type!"));
352 
353  std::auto_ptr<QWidget> connectorw(dsType->getWidget(DataSourceType::WIDGET_DATASOURCE_CONNECTOR, this));
354 
355  if(connectorw.get() == 0)
356  throw Exception(TE_TR("This type of data source hasn't provide a dialog for removing data sources"));
357 
358  AbstractDataSourceConnector* connector = dynamic_cast<AbstractDataSourceConnector*>(connectorw.get());
359 
360  if(connector == 0)
361  throw Exception(TE_TR("Wrong type of object for removing a data source!"));
362 
363  connector->remove(selecteds);
364 
365  QList<QListWidgetItem*> items = m_ui->m_datasourceListWidget->selectedItems();
366 
367  for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
368  {
369  item = *it;
370 
371  int itemRow = m_ui->m_datasourceListWidget->row(item);
372 
373  item = m_ui->m_datasourceListWidget->takeItem(itemRow);
374 
375  delete item;
376  }
377 
378  if(m_ui->m_datasourceListWidget->count() == 0)
379  {
380  m_ui->m_removeDataSourceToolButton->setEnabled(false);
381  m_ui->m_editDataSourceToolButton->setEnabled(false);
382  m_ui->m_datasourceDescriptionLabel->clear();
383  //emit hasSelectedDataSource(false);
384  }
385  else
386  {
387  //item = m_ui->m_datasourceListWidget->item(0);
388 
389  //if(item == 0)
390  // throw Exception(TE_TR("Could not automatically select the first data source item!"));
391 
392  //m_ui->m_datasourceListWidget->setCurrentItem(item, QItemSelectionModel::Select);
393  //dataSourcePressed(item);
394  m_ui->m_datasourceDescriptionLabel->clear();
395 
396  //emit hasSelectedDataSource(!m_ui->m_datasourceListWidget->selectedItems().empty());
397  }
398  }
399  catch(const std::exception& e)
400  {
401  QMessageBox::warning(this,
402  tr("TerraLib Qt Components"),
403  tr(e.what()));
404  }
405  catch(...)
406  {
407  QMessageBox::warning(this,
408  tr("TerraLib Qt Components"),
409  tr("Unknown error while removing a data source!"));
410  }
411 }
412 
414 {
415  std::list<te::da::DataSourceInfoPtr> selecteds = getSelecteds();
416 
417  if(selecteds.empty())
418  return;
419 
420  try
421  {
422  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
423 
424  QVariant udata = item->data(Qt::UserRole);
425 
426  QString dsTypeName = udata.toString();
427 
428  if(dsTypeName.isEmpty())
429  throw Exception(TE_TR("Unknown data source type!"));
430 
431  const DataSourceType* dsType = DataSourceTypeManager::getInstance().get(dsTypeName.toStdString());
432 
433  if(dsType == 0)
434  throw Exception(TE_TR("Could not find data source type!"));
435 
436  std::auto_ptr<QWidget> connectorw(dsType->getWidget(DataSourceType::WIDGET_DATASOURCE_CONNECTOR, this));
437 
438  if(connectorw.get() == 0)
439  throw Exception(TE_TR("This type of data source hasn't provide a dialog for removing data sources"));
440 
441  AbstractDataSourceConnector* connector = dynamic_cast<AbstractDataSourceConnector*>(connectorw.get());
442 
443  if(connector == 0)
444  throw Exception(TE_TR("Wrong type of object for removing a data source!"));
445 
446  connector->update(selecteds);
447 
448  QList<QListWidgetItem*> items = m_ui->m_datasourceListWidget->selectedItems();
449 
450  for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
451  {
452  item = *it;
453 
454  QVariant udata = item->data(Qt::UserRole);
455 
456  QString dsId = udata.toString();
457 
458  if(dsId.isEmpty())
459  throw Exception(TE_TR("Invalid data source id!"));
460 
462 
463  item->setText(QString::fromStdString(ds->getTitle()));
464  }
465 
466  if(items.isEmpty())
467  throw Exception(TE_TR("Update should not remove data source selection!"));
468 
469  dataSourcePressed(*(items.begin()));
470  m_ui->m_datasourceListWidget->update();
471  }
472  catch(const std::exception& e)
473  {
474  QMessageBox::warning(this,
475  tr("TerraLib Qt Components"),
476  tr(e.what()));
477  }
478  catch(...)
479  {
480  QMessageBox::warning(this,
481  tr("TerraLib Qt Components"),
482  tr("Unknown error while updating data source information!"));
483  }
484 }
485 
487 {
488  QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
489 
490  if(item == 0)
491  return;
492 
493  QVariant udata = item->data(Qt::UserRole);
494 
495  QString dsTypeId = udata.toString();
496 
497  if(dsTypeId.isEmpty())
498  return;
499 
500  try
501  {
502  const DataSourceType* dsType = DataSourceTypeManager::getInstance().get(dsTypeId.toStdString());
503 
504  if(dsType == 0)
505  throw Exception(TE_TR("Unknown data source type!"));
506 
507  std::auto_ptr<QWidget> connectorw(dsType->getWidget(DataSourceType::WIDGET_DATASOURCE_CONNECTOR, this));
508 
509  if(connectorw.get() == 0)
510  throw Exception(TE_TR("This type of data source hasn't provide a dialog for adding a new data source"));
511 
512  AbstractDataSourceConnector* connector = dynamic_cast<AbstractDataSourceConnector*>(connectorw.get());
513 
514  if(connector == 0)
515  throw Exception(TE_TR("Wrong type of object for adding a new data source!"));
516 
517  std::list<te::da::DataSourceInfoPtr> datasources;
518 
519  connector->create(datasources);
520 
521  for(std::list<te::da::DataSourceInfoPtr>::iterator it = datasources.begin(); it != datasources.end(); ++it)
522  {
523  if(it->get() == 0)
524  return;
525 
526  QListWidgetItem* item = new QListWidgetItem(QString::fromStdString((*it)->getTitle()));
527  item->setData(Qt::UserRole, QVariant(QString::fromStdString((*it)->getId())));
528  m_ui->m_datasourceListWidget->addItem(item);
529  m_ui->m_datasourceListWidget->setCurrentItem(item);
530  dataSourcePressed(item);
531  }
532  }
533  catch(const std::exception& e)
534  {
535  QMessageBox::warning(this,
536  tr("TerraLib Qt Components"),
537  tr(e.what()));
538  }
539  catch(...)
540  {
541  QMessageBox::warning(this,
542  tr("TerraLib Qt Components"),
543  tr("Unknown error while adding a new data source!"));
544  }
545 }
546 
548 {
549  m_ui->m_datasourceTypeTitleLabel->clear();
550  m_ui->m_datasourceListWidget->clear();
551  m_ui->m_datasourceDescriptionLabel->clear();
552  //m_ui->m_selectPushButton->setEnabled(false);
553  m_ui->m_addDataSourceToolButton->setEnabled(false);
554  m_ui->m_removeDataSourceToolButton->setEnabled(false);
555  m_ui->m_editDataSourceToolButton->setEnabled(false);
556  m_ui->m_createDataSourceToolButton->setEnabled(false);
557 
558  //emit hasSelectedDataSource(false);
559 
560  if(item == 0)
561  return;
562 
563  QVariant udata = item->data(Qt::UserRole);
564 
565  QString dsTypeName = udata.toString();
566 
567  if(dsTypeName.isEmpty())
568  return;
569 
570  m_ui->m_datasourceTypeTitleLabel->setText(item->text());
571 
572  std::vector<te::da::DataSourceInfoPtr> datasources;
573 
574  te::da::DataSourceInfoManager::getInstance().getByType(dsTypeName.toStdString(), datasources);
575 
576  for(std::size_t i = 0; i < datasources.size(); ++i)
577  {
578  const te::da::DataSourceInfoPtr& datasource = datasources[i];
579 
580  if(datasource.get() == 0)
581  continue;
582 
583  const std::string& title = datasource->getTitle();
584 
585  const std::string& id = datasource->getId();
586 
587  QListWidgetItem* item = new QListWidgetItem(title.c_str());
588 
589  item->setData(Qt::UserRole, QVariant(QString(id.c_str())));
590 
591  m_ui->m_datasourceListWidget->addItem(item);
592  }
593 
594  //if(m_ui->m_datasourceListWidget->count() != 0)
595  //{
596  // QListWidgetItem* selected = m_ui->m_datasourceListWidget->item(0);
597 
598  // m_ui->m_datasourceListWidget->setCurrentItem(selected, QItemSelectionModel::Select);
599  // dataSourcePressed(selected);
600  //}
601 
602  m_ui->m_addDataSourceToolButton->setEnabled(m_addButtonEnabled);
603  m_ui->m_createDataSourceToolButton->setEnabled(m_createButtonEnabled);
604 
605  const DataSourceType* dsType = DataSourceTypeManager::getInstance().get(dsTypeName.toStdString());
606 
607  if(dsType != 0)
608  m_ui->m_datasourceDescriptionLabel->setText(QString::fromStdString(dsType->getDescription()));
609 }
610 
612 {
613  m_ui->m_datasourceDescriptionLabel->clear();
614 
615  if(item == 0)
616  return;
617 
618  QVariant udata = item->data(Qt::UserRole);
619 
620  QString id = udata.toString();
621 
622  if(id.isEmpty())
623  return;
624 
626 
627  if(ds.get() == 0)
628  {
629  QMessageBox::warning(this,
630  tr("TerraLib Qt Components"),
631  tr("The selected data source is not registered in the system.\nThis may be an error on the connector implementation!"));
632 
633  return;
634  }
635 
636  m_ui->m_datasourceDescriptionLabel->setText(QString::fromStdString(ds->getDescription()));
637 
638  m_ui->m_removeDataSourceToolButton->setEnabled(m_removeButtonEnabled);
639  m_ui->m_editDataSourceToolButton->setEnabled(m_editButtonEnabled);
640  //m_ui->m_createDataSourceToolButton->setEnabled(m_createButtonEnabled);
641 
642  //emit hasSelectedDataSource(true);
643 }
644 
646 {
647  item->setSelected(true);
648 }
649 
650 //void te::qt::widgets::DataSourceSelectorDialog::add(DataSourcePtr ds)
651 //{
652 // if(ds.get() == 0)
653 // return;
654 //
655 // DataSourceManager::getInstance().add(ds);
656 //
657 // const std::string& title = ds->getTitle();
658 //
659 // const std::string& id = ds->getId();
660 //
661 // QListWidgetItem* item = new QListWidgetItem(title.c_str());
662 //
663 // item->setData(Qt::UserRole, QVariant(QString(id.c_str())));
664 //
665 // m_ui->m_datasourceListWidget->addItem(item);
666 //
667 // dataSourcePressed(item);
668 //}
669 //
670 //void te::qt::widgets::DataSourceSelectorDialog::update(DataSourcePtr ds)
671 //{
672 // if(ds.get() == 0)
673 // return;
674 //
675 // QListWidgetItem* item = m_ui->m_datasourceListWidget->currentItem();
676 //
677 // if(item == 0)
678 // return; // should be an exception!
679 //
680 // item->setData(Qt::UserRole, QVariant(QString::fromStdString(ds->getId())));
681 //
682 // item->setText(QString::fromStdString(ds->getTitle()));
683 //
684 // m_ui->m_datasourceListWidget->update();
685 //
686 // dataSourcePressed(item);
687 //}
688 
689 
#define TE_TR(message)
It marks a string in order to get translated.
Definition: Translator.h:347
virtual bool hasVectorialSupport() const =0
virtual void create(std::list< te::da::DataSourceInfoPtr > &datasources)=0
virtual bool hasRasterSupport() const =0
A dialog for selecting a data source.
virtual void update(std::list< te::da::DataSourceInfoPtr > &datasources)=0
virtual bool hasFileSupport() const =0
static DataSourceTypeManager & getInstance()
It returns a reference to the singleton instance.
virtual void remove(std::list< te::da::DataSourceInfoPtr > &datasources)=0
void setSelectionMode(QAbstractItemView::SelectionMode mode)
Ui::DataSourceSelectorWidgetForm * getForm() const
virtual std::string getDescription() const =0
std::list< te::da::DataSourceInfoPtr > getSelecteds() const
A base class for widgets that allows application to create, edit or remove data sources.
const DataSourceType * get(const std::string &name) const
virtual bool hasDatabaseSupport() const =0
std::auto_ptr< Ui::DataSourceSelectorWidgetForm > m_ui
virtual void connect(std::list< te::da::DataSourceInfoPtr > &datasources)=0
virtual QWidget * getWidget(int widgetType, QWidget *parent=0, Qt::WindowFlags f=0) const =0
DataSourceSelectorWidget(QWidget *parent=0, Qt::WindowFlags f=0)
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
A base class for the suppported types of data source.