27 #include "../../../../common/Translator.h" 
   28 #include "../../Exception.h" 
   29 #include "../connector/AbstractDataSourceConnector.h" 
   30 #include "../../../dataaccess/datasource/DataSourceInfoManager.h" 
   31 #include "../core/DataSourceType.h" 
   32 #include "../core/DataSourceTypeManager.h" 
   33 #include "ui_DataSourceSelectorWidgetForm.h" 
   37 #include <QtGui/QIcon> 
   38 #include <QtGui/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::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(
TR_QT_WIDGETS(
"Selected data source has no identification!"));
 
  167     if(selected.get() == 0)
 
  168       throw Exception(
TR_QT_WIDGETS(
"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())
 
  292     if(connectorw.get() == 0)
 
  293       throw Exception(
TR_QT_WIDGETS(
"This type of data source hasn't provide a dialog for adding a new data source"));
 
  298       throw Exception(
TR_QT_WIDGETS(
"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())
 
  351       throw Exception(
TR_QT_WIDGETS(
"Could not find data source type!"));
 
  355     if(connectorw.get() == 0)
 
  356       throw Exception(
TR_QT_WIDGETS(
"This type of data source hasn't provide a dialog for removing data sources"));
 
  361       throw Exception(
TR_QT_WIDGETS(
"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())
 
  434       throw Exception(
TR_QT_WIDGETS(
"Could not find data source type!"));
 
  438     if(connectorw.get() == 0)
 
  439       throw Exception(
TR_QT_WIDGETS(
"This type of data source hasn't provide a dialog for removing data sources"));
 
  444       throw Exception(
TR_QT_WIDGETS(
"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();
 
  463       item->setText(QString::fromStdString(ds->getTitle()));
 
  467       throw Exception(
TR_QT_WIDGETS(
"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())
 
  509     if(connectorw.get() == 0)
 
  510       throw Exception(
TR_QT_WIDGETS(
"This type of data source hasn't provide a dialog for adding a new data source"));
 
  515       throw Exception(
TR_QT_WIDGETS(
"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);
 
virtual bool hasFileSupport() const =0
 
void addDataSourcePushButtonPressed()
 
void setButtonEnabled(int button, bool enabled)
 
const DataSourceType * get(const std::string &name) const 
 
void dataSourceDoubleClicked(QListWidgetItem *item)
 
void showDataSourceWithDatabaseSupport(bool visible)
 
void showDataSourceWithRasterSupport(bool visible)
 
virtual void connect(std::list< te::da::DataSourceInfoPtr > &datasources)=0
 
virtual void remove(std::list< te::da::DataSourceInfoPtr > &datasources)=0
 
virtual std::string getDescription() const =0
 
A base class for the suppported types of data source. 
 
virtual bool hasDatabaseSupport() const =0
 
virtual void create(std::list< te::da::DataSourceInfoPtr > &datasources)=0
 
DataSourceSelectorWidget(QWidget *parent=0, Qt::WindowFlags f=0)
 
virtual bool hasVectorialSupport() const =0
 
virtual bool hasRasterSupport() const =0
 
void removeDataSourcePushButtonPressed()
 
virtual void update(std::list< te::da::DataSourceInfoPtr > &datasources)=0
 
A base class for widgets that allows application to create, edit or remove data sources. 
 
void showDataSourceWithFileSupport(bool visible)
 
std::auto_ptr< Ui::DataSourceSelectorWidgetForm > m_ui
 
~DataSourceSelectorWidget()
 
void showDataSourceWithVectorialSupport(bool visible)
 
void dataSourceTypePressed(QListWidgetItem *item)
 
#define TR_QT_WIDGETS(message)
It marks a string in order to get translated. This is a special mark used in the TerraLib Qt Widgets ...
 
virtual QWidget * getWidget(int widgetType, QWidget *parent=0, Qt::WindowFlags f=0) const =0
 
std::list< te::da::DataSourceInfoPtr > getSelecteds() const 
 
void setSelectionMode(QAbstractItemView::SelectionMode mode)
 
void setDataSource(const QString &dsType)
 
static DataSourceTypeManager & getInstance()
It returns a reference to the singleton instance. 
 
void setButtonsEnabled(bool enabled)
 
A dialog for selecting a data source. 
 
void createDataSourcePushButtonPressed()
 
boost::shared_ptr< DataSourceInfo > DataSourceInfoPtr
 
void editDataSourcePushButtonPressed()
 
void dataSourcePressed(QListWidgetItem *item)
 
Ui::DataSourceSelectorWidgetForm * getForm() const