27 #include "../../../../core/translator/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" 38 #include <QMessageBox> 42 m_ui(new
Ui::DataSourceSelectorWidgetForm),
43 m_addButtonEnabled(true),
44 m_removeButtonEnabled(true),
45 m_editButtonEnabled(true),
46 m_createButtonEnabled(true)
52 m_ui->m_datasourceTypeTitleLabel->clear();
53 m_ui->m_datasourceDescriptionLabel->clear();
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"));
67 QString dsName = QString::fromUtf8(it->second->getName().c_str());
69 QString title = QString::fromUtf8(it->second->getTitle().c_str());
70 QString description = QString::fromUtf8(it->second->getDescription().c_str());
72 QListWidgetItem* item =
new QListWidgetItem(icon, title);
74 item->setToolTip(description);
76 item->setData(Qt::UserRole, QVariant(dsName));
78 m_ui->m_datasourceTypeListWidget->addItem(item);
84 if(
m_ui->m_datasourceTypeListWidget->count() > 0)
86 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(0);
87 m_ui->m_datasourceTypeListWidget->setItemSelected(item,
true);
89 m_ui->m_datasourceTypeListWidget->setCurrentItem(item);
97 connect(
m_ui->m_datasourceTypeListWidget, SIGNAL(itemPressed(QListWidgetItem*)),
this, SLOT(
dataSourceTypePressed(QListWidgetItem*)));
98 connect(
m_ui->m_datasourceListWidget, SIGNAL(itemPressed(QListWidgetItem*)),
this, SLOT(
dataSourcePressed(QListWidgetItem*)));
99 connect(
m_ui->m_datasourceListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
this, SLOT(
dataSourceDoubleClicked(QListWidgetItem*)));
113 m_ui->m_datasourceListWidget->setSelectionMode(mode);
151 std::list<te::da::DataSourceInfoPtr> selecteds;
153 QList<QListWidgetItem*> items =
m_ui->m_datasourceListWidget->selectedItems();
155 for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
157 QListWidgetItem* item = *it;
159 QVariant udata = item->data(Qt::UserRole);
161 QString
id = udata.toString();
164 throw Exception(
TE_TR(
"Selected data source has no identification!"));
168 if(selected.get() ==
nullptr)
171 selecteds.push_back(selected);
179 int count =
m_ui->m_datasourceTypeListWidget->count();
182 for(
int i=0; i<count; i++)
184 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(i);
186 if(item->data(Qt::UserRole).toString() == dsType)
195 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(found);
197 m_ui->m_datasourceTypeListWidget->setCurrentItem(item);
204 int count =
m_ui->m_datasourceTypeListWidget->count();
206 for(
int i=0; i<count; i++)
208 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(i);
210 std::string name = item->data(Qt::UserRole).toString().toUtf8().data();
215 item->setHidden(!visible);
221 int count =
m_ui->m_datasourceTypeListWidget->count();
223 for(
int i=0; i<count; i++)
225 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(i);
227 std::string name = item->data(Qt::UserRole).toString().toUtf8().data();
232 item->setHidden(!visible);
238 int count =
m_ui->m_datasourceTypeListWidget->count();
240 for(
int i=0; i<count; i++)
242 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(i);
244 std::string name = item->data(Qt::UserRole).toString().toUtf8().data();
249 item->setHidden(!visible);
255 int count =
m_ui->m_datasourceTypeListWidget->count();
257 for(
int i=0; i<count; i++)
259 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(i);
261 std::string name = item->data(Qt::UserRole).toString().toUtf8().data();
266 item->setHidden(!visible);
272 int count =
m_ui->m_datasourceTypeListWidget->count();
274 for (
int i = 0; i<count; i++)
276 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->item(i);
278 if (item->data(Qt::UserRole).toString() == dsType)
280 item->setHidden(
false);
282 m_ui->m_datasourceTypeListWidget->setCurrentItem(item);
287 item->setHidden(
true);
294 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->currentItem();
299 QVariant udata = item->data(Qt::UserRole);
301 QString dsTypeId = udata.toString();
303 if(dsTypeId.isEmpty())
310 if(dsType ==
nullptr)
315 if(connectorw.get() ==
nullptr)
316 throw Exception(
TE_TR(
"This type of data source hasn't provide a dialog for adding a new data source"));
320 if(connector ==
nullptr)
321 throw Exception(
TE_TR(
"Wrong type of object for adding a new data source!"));
323 std::list<te::da::DataSourceInfoPtr> datasources;
325 connector->
connect(datasources);
327 for(std::list<te::da::DataSourceInfoPtr>::iterator it = datasources.begin(); it != datasources.end(); ++it)
329 if(it->get() ==
nullptr)
332 QListWidgetItem* item =
new QListWidgetItem(QString::fromUtf8((*it)->getTitle().c_str()));
333 item->setData(Qt::UserRole, QVariant(QString::fromUtf8((*it)->getId().c_str())));
334 m_ui->m_datasourceListWidget->addItem(item);
335 m_ui->m_datasourceListWidget->setCurrentItem(item);
339 catch(
const std::exception& e)
341 QMessageBox::warning(
this,
342 tr(
"TerraLib Qt Components"),
347 QMessageBox::warning(
this,
348 tr(
"TerraLib Qt Components"),
349 tr(
"Unknown error while adding a new data source!"));
355 std::list<te::da::DataSourceInfoPtr> selecteds =
getSelecteds();
357 if(selecteds.empty())
362 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->currentItem();
364 QVariant udata = item->data(Qt::UserRole);
366 QString dsTypeName = udata.toString();
368 if(dsTypeName.isEmpty())
373 if(dsType ==
nullptr)
378 if(connectorw.get() ==
nullptr)
379 throw Exception(
TE_TR(
"This type of data source hasn't provide a dialog for removing data sources"));
383 if(connector ==
nullptr)
384 throw Exception(
TE_TR(
"Wrong type of object for removing a data source!"));
386 connector->
remove(selecteds);
388 QList<QListWidgetItem*> items =
m_ui->m_datasourceListWidget->selectedItems();
390 for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
394 int itemRow =
m_ui->m_datasourceListWidget->row(item);
396 item =
m_ui->m_datasourceListWidget->takeItem(itemRow);
401 if(
m_ui->m_datasourceListWidget->count() == 0)
403 m_ui->m_removeDataSourceToolButton->setEnabled(
false);
404 m_ui->m_editDataSourceToolButton->setEnabled(
false);
405 m_ui->m_datasourceDescriptionLabel->clear();
417 m_ui->m_datasourceDescriptionLabel->clear();
422 catch(
const std::exception& e)
424 QMessageBox::warning(
this,
425 tr(
"TerraLib Qt Components"),
430 QMessageBox::warning(
this,
431 tr(
"TerraLib Qt Components"),
432 tr(
"Unknown error while removing a data source!"));
438 std::list<te::da::DataSourceInfoPtr> selecteds =
getSelecteds();
440 if(selecteds.empty())
445 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->currentItem();
447 QVariant udata = item->data(Qt::UserRole);
449 QString dsTypeName = udata.toString();
451 if(dsTypeName.isEmpty())
456 if(dsType ==
nullptr)
461 if(connectorw.get() ==
nullptr)
462 throw Exception(
TE_TR(
"This type of data source hasn't provide a dialog for removing data sources"));
466 if(connector ==
nullptr)
467 throw Exception(
TE_TR(
"Wrong type of object for removing a data source!"));
469 connector->
update(selecteds);
471 QList<QListWidgetItem*> items =
m_ui->m_datasourceListWidget->selectedItems();
473 for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
477 QVariant udata = item->data(Qt::UserRole);
479 QString dsId = udata.toString();
486 item->setText(QString::fromUtf8(ds->getTitle().c_str()));
490 throw Exception(
TE_TR(
"Update should not remove data source selection!"));
493 m_ui->m_datasourceListWidget->update();
495 catch(
const std::exception& e)
497 QMessageBox::warning(
this,
498 tr(
"TerraLib Qt Components"),
503 QMessageBox::warning(
this,
504 tr(
"TerraLib Qt Components"),
505 tr(
"Unknown error while updating data source information!"));
511 QListWidgetItem* item =
m_ui->m_datasourceTypeListWidget->currentItem();
516 QVariant udata = item->data(Qt::UserRole);
518 QString dsTypeId = udata.toString();
520 if(dsTypeId.isEmpty())
527 if(dsType ==
nullptr)
532 if(connectorw.get() ==
nullptr)
533 throw Exception(
TE_TR(
"This type of data source hasn't provide a dialog for adding a new data source"));
537 if(connector ==
nullptr)
538 throw Exception(
TE_TR(
"Wrong type of object for adding a new data source!"));
540 std::list<te::da::DataSourceInfoPtr> datasources;
542 connector->
create(datasources);
544 for(std::list<te::da::DataSourceInfoPtr>::iterator it = datasources.begin(); it != datasources.end(); ++it)
546 if(it->get() ==
nullptr)
549 QListWidgetItem* item =
new QListWidgetItem(QString::fromUtf8((*it)->getTitle().c_str()));
550 item->setData(Qt::UserRole, QVariant(QString::fromUtf8((*it)->getId().c_str())));
551 m_ui->m_datasourceListWidget->addItem(item);
552 m_ui->m_datasourceListWidget->setCurrentItem(item);
556 catch(
const std::exception& e)
558 QMessageBox::warning(
this,
559 tr(
"TerraLib Qt Components"),
564 QMessageBox::warning(
this,
565 tr(
"TerraLib Qt Components"),
566 tr(
"Unknown error while adding a new data source!"));
572 m_ui->m_datasourceTypeTitleLabel->clear();
573 m_ui->m_datasourceListWidget->clear();
574 m_ui->m_datasourceDescriptionLabel->clear();
576 m_ui->m_addDataSourceToolButton->setEnabled(
false);
577 m_ui->m_removeDataSourceToolButton->setEnabled(
false);
578 m_ui->m_editDataSourceToolButton->setEnabled(
false);
579 m_ui->m_createDataSourceToolButton->setEnabled(
false);
586 QVariant udata = item->data(Qt::UserRole);
588 QString dsTypeName = udata.toString();
590 if(dsTypeName.isEmpty())
593 m_ui->m_datasourceTypeTitleLabel->setText(item->text());
595 std::vector<te::da::DataSourceInfoPtr> datasources;
599 for(std::size_t i = 0; i < datasources.size(); ++i)
603 if(datasource.get() ==
nullptr)
606 const std::string& title = datasource->getTitle();
608 const std::string&
id = datasource->getId();
610 QListWidgetItem* item =
new QListWidgetItem(title.c_str());
612 item->setData(Qt::UserRole, QVariant(QString(
id.c_str())));
614 m_ui->m_datasourceListWidget->addItem(item);
630 if(dsType !=
nullptr)
631 m_ui->m_datasourceDescriptionLabel->setText(QString::fromUtf8(dsType->
getDescription().c_str()));
636 m_ui->m_datasourceDescriptionLabel->clear();
641 QVariant udata = item->data(Qt::UserRole);
643 QString
id = udata.toString();
650 if(ds.get() ==
nullptr)
652 QMessageBox::warning(
this,
653 tr(
"TerraLib Qt Components"),
654 tr(
"The selected data source is not registered in the system.\nThis may be an error on the connector implementation!"));
659 m_ui->m_datasourceDescriptionLabel->setText(QString::fromUtf8(ds->getDescription().c_str()));
670 item->setSelected(
true);
Base exception class for plugin module.
static te::dt::Date ds(2010, 01, 01)
#define TE_TR(message)
It marks a string in order to get translated.
static DataSourceTypeManager & getInstance()
It returns a reference to the singleton instance.
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr