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"
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::fromStdString(it->second->getName());
69 QString title = QString::fromStdString(it->second->getTitle());
70 QString description = QString::fromStdString(it->second->getDescription());
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 m_ui->m_datasourceTypeListWidget->setItemSelected(
m_ui->m_datasourceTypeListWidget->item(0),
true);
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*)));
112 m_ui->m_datasourceListWidget->setSelectionMode(mode);
117 m_addButtonEnabled = enabled;
118 m_editButtonEnabled = enabled;
119 m_removeButtonEnabled = enabled;
120 m_createButtonEnabled = enabled;
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;
150 std::list<te::da::DataSourceInfoPtr> selecteds;
152 QList<QListWidgetItem*> items = m_ui->m_datasourceListWidget->selectedItems();
154 for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
156 QListWidgetItem* item = *it;
158 QVariant udata = item->data(Qt::UserRole);
160 QString
id = udata.toString();
163 throw Exception(
TE_TR(
"Selected data source has no identification!"));
167 if(selected.get() == 0)
168 throw Exception(
TE_TR(
"Could not find selected data source!"));
170 selecteds.push_back(selected);
178 int count = m_ui->m_datasourceTypeListWidget->count();
181 for(
int i=0; i<count; i++)
183 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
185 if(item->data(Qt::UserRole).toString() == dsType)
194 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(found);
196 m_ui->m_datasourceTypeListWidget->setCurrentItem(item);
197 dataSourceTypePressed(item);
203 int count = m_ui->m_datasourceTypeListWidget->count();
205 for(
int i=0; i<count; i++)
207 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
209 std::string name = item->data(Qt::UserRole).toString().toStdString();
214 item->setHidden(!visible);
220 int count = m_ui->m_datasourceTypeListWidget->count();
222 for(
int i=0; i<count; i++)
224 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
226 std::string name = item->data(Qt::UserRole).toString().toStdString();
231 item->setHidden(!visible);
237 int count = m_ui->m_datasourceTypeListWidget->count();
239 for(
int i=0; i<count; i++)
241 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
243 std::string name = item->data(Qt::UserRole).toString().toStdString();
248 item->setHidden(!visible);
254 int count = m_ui->m_datasourceTypeListWidget->count();
256 for(
int i=0; i<count; i++)
258 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->item(i);
260 std::string name = item->data(Qt::UserRole).toString().toStdString();
265 item->setHidden(!visible);
271 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
276 QVariant udata = item->data(Qt::UserRole);
278 QString dsTypeId = udata.toString();
280 if(dsTypeId.isEmpty())
288 throw Exception(
TE_TR(
"Unknown data source type!"));
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"));
298 throw Exception(
TE_TR(
"Wrong type of object for adding a new data source!"));
300 std::list<te::da::DataSourceInfoPtr> datasources;
302 connector->
connect(datasources);
304 for(std::list<te::da::DataSourceInfoPtr>::iterator it = datasources.begin(); it != datasources.end(); ++it)
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);
316 catch(
const std::exception& e)
318 QMessageBox::warning(
this,
319 tr(
"TerraLib Qt Components"),
324 QMessageBox::warning(
this,
325 tr(
"TerraLib Qt Components"),
326 tr(
"Unknown error while adding a new data source!"));
332 std::list<te::da::DataSourceInfoPtr> selecteds = getSelecteds();
334 if(selecteds.empty())
339 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
341 QVariant udata = item->data(Qt::UserRole);
343 QString dsTypeName = udata.toString();
345 if(dsTypeName.isEmpty())
346 throw Exception(
TE_TR(
"Unknown data source type!"));
351 throw Exception(
TE_TR(
"Could not find data source type!"));
355 if(connectorw.get() == 0)
356 throw Exception(
TE_TR(
"This type of data source hasn't provide a dialog for removing data sources"));
361 throw Exception(
TE_TR(
"Wrong type of object for removing a data source!"));
363 connector->
remove(selecteds);
365 QList<QListWidgetItem*> items = m_ui->m_datasourceListWidget->selectedItems();
367 for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
371 int itemRow = m_ui->m_datasourceListWidget->row(item);
373 item = m_ui->m_datasourceListWidget->takeItem(itemRow);
378 if(m_ui->m_datasourceListWidget->count() == 0)
380 m_ui->m_removeDataSourceToolButton->setEnabled(
false);
381 m_ui->m_editDataSourceToolButton->setEnabled(
false);
382 m_ui->m_datasourceDescriptionLabel->clear();
394 m_ui->m_datasourceDescriptionLabel->clear();
399 catch(
const std::exception& e)
401 QMessageBox::warning(
this,
402 tr(
"TerraLib Qt Components"),
407 QMessageBox::warning(
this,
408 tr(
"TerraLib Qt Components"),
409 tr(
"Unknown error while removing a data source!"));
415 std::list<te::da::DataSourceInfoPtr> selecteds = getSelecteds();
417 if(selecteds.empty())
422 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
424 QVariant udata = item->data(Qt::UserRole);
426 QString dsTypeName = udata.toString();
428 if(dsTypeName.isEmpty())
429 throw Exception(
TE_TR(
"Unknown data source type!"));
434 throw Exception(
TE_TR(
"Could not find data source type!"));
438 if(connectorw.get() == 0)
439 throw Exception(
TE_TR(
"This type of data source hasn't provide a dialog for removing data sources"));
444 throw Exception(
TE_TR(
"Wrong type of object for removing a data source!"));
446 connector->
update(selecteds);
448 QList<QListWidgetItem*> items = m_ui->m_datasourceListWidget->selectedItems();
450 for(QList<QListWidgetItem*>::Iterator it = items.begin(); it != items.end(); ++it)
454 QVariant udata = item->data(Qt::UserRole);
456 QString dsId = udata.toString();
459 throw Exception(
TE_TR(
"Invalid data source id!"));
463 item->setText(QString::fromStdString(ds->getTitle()));
467 throw Exception(
TE_TR(
"Update should not remove data source selection!"));
469 dataSourcePressed(*(items.begin()));
470 m_ui->m_datasourceListWidget->update();
472 catch(
const std::exception& e)
474 QMessageBox::warning(
this,
475 tr(
"TerraLib Qt Components"),
480 QMessageBox::warning(
this,
481 tr(
"TerraLib Qt Components"),
482 tr(
"Unknown error while updating data source information!"));
488 QListWidgetItem* item = m_ui->m_datasourceTypeListWidget->currentItem();
493 QVariant udata = item->data(Qt::UserRole);
495 QString dsTypeId = udata.toString();
497 if(dsTypeId.isEmpty())
505 throw Exception(
TE_TR(
"Unknown data source type!"));
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"));
515 throw Exception(
TE_TR(
"Wrong type of object for adding a new data source!"));
517 std::list<te::da::DataSourceInfoPtr> datasources;
519 connector->
create(datasources);
521 for(std::list<te::da::DataSourceInfoPtr>::iterator it = datasources.begin(); it != datasources.end(); ++it)
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);
533 catch(
const std::exception& e)
535 QMessageBox::warning(
this,
536 tr(
"TerraLib Qt Components"),
541 QMessageBox::warning(
this,
542 tr(
"TerraLib Qt Components"),
543 tr(
"Unknown error while adding a new data source!"));
549 m_ui->m_datasourceTypeTitleLabel->clear();
550 m_ui->m_datasourceListWidget->clear();
551 m_ui->m_datasourceDescriptionLabel->clear();
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);
563 QVariant udata = item->data(Qt::UserRole);
565 QString dsTypeName = udata.toString();
567 if(dsTypeName.isEmpty())
570 m_ui->m_datasourceTypeTitleLabel->setText(item->text());
572 std::vector<te::da::DataSourceInfoPtr> datasources;
576 for(std::size_t i = 0; i < datasources.size(); ++i)
580 if(datasource.get() == 0)
583 const std::string& title = datasource->getTitle();
585 const std::string&
id = datasource->getId();
587 QListWidgetItem* item =
new QListWidgetItem(title.c_str());
589 item->setData(Qt::UserRole, QVariant(QString(
id.c_str())));
591 m_ui->m_datasourceListWidget->addItem(item);
602 m_ui->m_addDataSourceToolButton->setEnabled(m_addButtonEnabled);
603 m_ui->m_createDataSourceToolButton->setEnabled(m_createButtonEnabled);
608 m_ui->m_datasourceDescriptionLabel->setText(QString::fromStdString(dsType->
getDescription()));
613 m_ui->m_datasourceDescriptionLabel->clear();
618 QVariant udata = item->data(Qt::UserRole);
620 QString
id = udata.toString();
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!"));
636 m_ui->m_datasourceDescriptionLabel->setText(QString::fromStdString(ds->getDescription()));
638 m_ui->m_removeDataSourceToolButton->setEnabled(m_removeButtonEnabled);
639 m_ui->m_editDataSourceToolButton->setEnabled(m_editButtonEnabled);
647 item->setSelected(
true);
#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