BuilderFormsWizardPage.cpp
Go to the documentation of this file.
1 /* Copyright (C) 2011-2012 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 src/terraMobilePlugin/qt/BuilderFormsWizardPage.cpp
22 
23 \brief This interface is used to configure the form json file for GeoPackage Builder wizard operation.
24 */
25 
26 // TerraLib
27 #include "../../../../common/STLUtils.h"
28 #include "../../../../common/StringUtils.h"
29 #include "../../../../dataaccess/dataset/PrimaryKey.h"
30 #include "../core/form/BoolFormItem.h"
31 #include "../core/form/DateFormItem.h"
32 #include "../core/form/DoubleFormItem.h"
33 #include "../core/form/IntFormItem.h"
34 #include "../core/form/LabelFormItem.h"
35 #include "../core/form/PictureFormItem.h"
36 #include "../core/form/Serializer.h"
37 #include "../core/form/StringComboFormItem.h"
38 #include "../core/form/StringFormItem.h"
39 #include "../core/form/TimeFormItem.h"
40 #include "../core/form/Form.h"
41 #include "../core/form/Section.h"
42 #include "BuilderFormsWizardPage.h"
43 #include "ui_BuilderFormsWizardPageForm.h"
44 
45 // Qt
46 #include <QListWidgetItem>
47 #include <QMessageBox>
48 #include <QValidator>
49 
50 #define FORM_TREE_ITEM 0
51 #define PROPERTY_TREE_ITEM 1
52 
54  : QWizardPage(parent),
55  m_ui(new Ui::BuilderFormsWizardPageForm),
56  m_curForm(0),
57  m_curFormItem(0),
58  m_itemTreeType(-1)
59 {
60  // setup controls
61  m_ui->setupUi(this);
62 
63  //configure page
64  this->setTitle(tr("GeoPackage Builder Forms Configurer"));
65  this->setSubTitle(tr("Used to configure Forms for each Gathering Layer selected."));
66 
67  m_ui->m_saveFormItemToolButton->setIcon(QIcon::fromTheme("view-refresh"));
68  m_ui->m_removeFormItemToolButton->setIcon(QIcon::fromTheme("list-remove"));
69 
70  m_ui->m_doubleLineEdit->setValidator(new QDoubleValidator(this));
71  m_ui->m_intLineEdit->setValidator(new QIntValidator(this));
72 
73  //empty page
74  m_ui->m_stackedWidget->setCurrentIndex(9);
75 
76  //connect slots
77  connect(m_ui->m_treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(onTreeItemClicked(QTreeWidgetItem*, int)));
78  connect(m_ui->m_stringComboAddToolButton, SIGNAL(pressed()), this, SLOT(onStringComboAddToolButtonPressed()));
79  connect(m_ui->m_saveFormItemToolButton, SIGNAL(pressed()), this, SLOT(onSaveFormItemToolButton()));
80  connect(m_ui->m_removeFormItemToolButton, SIGNAL(pressed()), this, SLOT(onRemoveFormItemToolButtonPressed()));
81 }
82 
84 {
86  m_sectionsMap.clear();
87 }
88 
90 {
91  return true;
92 }
93 
94 void te::qt::plugins::terramobile::BuilderFormsWizardPage::setLayerList(std::list<te::map::AbstractLayerPtr> list)
95 {
96  m_list = list;
97 
98  //clear current sections
100  m_sectionsMap.clear();
101 
102  //get informations from input layers
103  std::list<te::map::AbstractLayerPtr>::iterator it = m_list.begin();
104 
105  while (it != m_list.end())
106  {
108 
109  std::string layerName = l->getTitle();
110 
111  //get dataset type
112  std::auto_ptr<te::da::DataSetType> dsType = l->getSchema();
113 
114  std::string pkAttrName = "";
115 
116  te::da::PrimaryKey* pk = dsType->getPrimaryKey();
117 
118  if (pk && !pk->getProperties().empty())
119  {
120  pkAttrName = pk->getProperties()[0]->getName();
121  }
122 
123  std::vector<te::dt::Property*> props = dsType->getProperties();
124 
125  //create section
127  section->setName("terramobile");
128  section->setDescription("Data collector for field work");
129 
130  //create form
132  form->setName(layerName);
133 
134  //create items
135  for (std::size_t t = 0; t < props.size(); ++t)
136  {
137  if (props[t]->getName() != pkAttrName && props[t]->getType() != te::dt::GEOMETRY_TYPE)
138  {
140 
141  if (props[t]->getType() == te::dt::INT16_TYPE || props[t]->getType() == te::dt::INT32_TYPE || props[t]->getType() == te::dt::INT64_TYPE)
142  {
144  }
145  else if (props[t]->getType() == te::dt::DOUBLE_TYPE || props[t]->getType() == te::dt::FLOAT_TYPE)
146  {
148  }
149  else if (props[t]->getType() == te::dt::BOOLEAN_TYPE)
150  {
152  }
153  else if (props[t]->getType() == te::dt::STRING_TYPE)
154  {
156  }
157 
158  bool aux;
159  std::string newName = te::common::ReplaceSpecialChars(props[t]->getName(), aux);
160 
161  item->setKey(newName);
162  item->setLabel(newName);
163 
164  if ((newName != LAYER_GATHERING_STATUS_COLUMN) && (newName != LAYER_GATHERING_OBJID_COLUMN))
165  form->getItems().push_back(item);
166  }
167  }
168 
169  //add picture property
171 
172  pic->setKey("picture");
173  pic->setLabel("picture");
174 
175  form->getItems().push_back(pic);
176 
177  //add form to section
178  section->getForms().push_back(form);
179 
180  //add section to section map
181  m_sectionsMap.insert(std::map<std::string, Section*>::value_type(layerName, section));
182 
183  ++it;
184  }
185 
186  listSectionMap();
187 }
188 
189 std::map<std::string, te::qt::plugins::terramobile::Section*>& te::qt::plugins::terramobile::BuilderFormsWizardPage::getSections()
190 {
191  return m_sectionsMap;
192 }
193 
195 {
196  m_curForm = 0;
197  m_curFormItem = 0;
198 
199  if (!item)
200  return;
201 
202  if (item->type() == PROPERTY_TREE_ITEM)
203  {
204  std::string propertyName = item->text(0).toUtf8().data();
205 
206  QTreeWidgetItem* parent = item->parent();
207 
208  std::string formName = parent->text(0).toUtf8().data();
209 
210  //get form
212 
213  if (!form)
214  return;
215 
216  //get property
217  te::qt::plugins::terramobile::AbstractFormItem* formItem = form->getItem(propertyName);
218 
219  if (!formItem)
220  return;
221 
222  //set the right stacked widget
223  std::string propType = formItem->getType();
224 
225  if (propType == BOOLFORMITEMTYPE)
226  {
228 
229  m_ui->m_defaultValueBoolCheckBox->setChecked(fi->hasDefaultValue());
230 
231  if (fi->hasDefaultValue())
232  {
233  m_ui->m_boolComboBox->setCurrentText(te::common::Convert2UCase(fi->getStrDefaultValue()).c_str());
234  }
235 
236  m_ui->m_stackedWidget->setCurrentIndex(0);
237  }
238  else if (propType == DATEFORMITEMTYPE)
239  {
241 
242  m_ui->m_stackedWidget->setCurrentIndex(1);
243  }
244  else if (propType == DOUBLEFORMITEMTYPE)
245  {
247 
248  m_ui->m_defaultValueDoubleCheckBox->setChecked(fi->hasDefaultValue());
249 
250  if (fi->hasDefaultValue())
251  {
252  m_ui->m_doubleLineEdit->setText(fi->getStrDefaultValue().c_str());
253  }
254  else
255  {
256  m_ui->m_doubleLineEdit->clear();
257  }
258 
259  m_ui->m_stackedWidget->setCurrentIndex(2);
260  }
261  else if (propType == INTFORMITEMTYPE)
262  {
264 
265  m_ui->m_defaultValueIntCheckBox->setChecked(fi->hasDefaultValue());
266 
267  if (fi->hasDefaultValue())
268  {
269  m_ui->m_intLineEdit->setText(fi->getStrDefaultValue().c_str());
270  }
271  else
272  {
273  m_ui->m_intLineEdit->clear();
274  }
275 
276  m_ui->m_stackedWidget->setCurrentIndex(3);
277  }
278  else if (propType == LABELFORMITEMTYPE)
279  {
281 
282  m_ui->m_defaultValueLabelCheckBox->setChecked(fi->hasDefaultValue());
283 
284  if (fi->hasDefaultValue())
285  {
286  m_ui->m_labelLineEdit->setText(fi->getStrDefaultValue().c_str());
287  }
288  else
289  {
290  m_ui->m_labelLineEdit->clear();
291  }
292 
293  m_ui->m_stackedWidget->setCurrentIndex(4);
294  }
295  else if (propType == PICTUREFORMITEMTYPE)
296  {
298 
299  m_ui->m_stackedWidget->setCurrentIndex(9);
300  }
301  else if (propType == STRINGCOMBOFORMITEMTYPE)
302  {
304 
305  m_ui->m_defaultValueStringComboCheckBox->setChecked(fi->hasDefaultValue());
306 
307  if (fi->hasDefaultValue())
308  {
309  m_ui->m_stringComboLineEdit->setText(fi->getStrDefaultValue().c_str());
310  }
311  else
312  {
313  m_ui->m_stringComboLineEdit->clear();
314  }
315 
316  m_ui->m_listWidget->clear();
317 
318  for (std::size_t t = 0; t < fi->getValues().size(); ++t)
319  {
320  m_ui->m_listWidget->addItem(fi->getValues()[t].c_str());
321  }
322 
323  m_ui->m_stackedWidget->setCurrentIndex(5);
324  }
325  else if (propType == STRINGFORMITEMTYPE)
326  {
328 
329  m_ui->m_defaultValueStringCheckBox->setChecked(fi->hasDefaultValue());
330 
331  if (fi->hasDefaultValue())
332  {
333  m_ui->m_stringLineEdit->setText(fi->getStrDefaultValue().c_str());
334  }
335  else
336  {
337  m_ui->m_stringLineEdit->clear();
338  }
339 
340  m_ui->m_stackedWidget->setCurrentIndex(6);
341  }
342  else if (propType == TIMEFORMITEMTYPE)
343  {
345 
346  m_ui->m_stackedWidget->setCurrentIndex(7);
347  }
348 
349  m_ui->m_formItemLineEdit->setText(propertyName.c_str());
350 
351  m_ui->m_descLineEdit->setText(formItem->getLabel().c_str());
352 
353  m_ui->m_descLineEdit->setEnabled(true);
354 
355  m_curForm = form;
356  m_curFormItem = formItem;
357 
358  m_ui->m_saveFormItemToolButton->setEnabled(true);
359  m_ui->m_removeFormItemToolButton->setEnabled(true);
360  }
361  else if (item->type() == FORM_TREE_ITEM)
362  {
363  m_ui->m_stackedWidget->setCurrentIndex(8);
364 
365  std::string formName = item->text(0).toUtf8().data();
366 
367  //get form
369 
370  //set properties
371  m_ui->m_formItemsListWidget->clear();
372 
373  for (std::size_t t = 0; t < form->getItems().size(); ++t)
374  {
375  m_ui->m_formItemsListWidget->addItem(form->getItems()[t]->getKey().c_str());
376  }
377 
378  m_ui->m_formItemLineEdit->setText(formName.c_str());
379 
380  m_ui->m_descLineEdit->clear();
381 
382  m_ui->m_descLineEdit->setEnabled(false);
383 
384  m_curForm = form;
385  m_curFormItem = 0;
386 
387  m_ui->m_saveFormItemToolButton->setEnabled(true);
388  m_ui->m_removeFormItemToolButton->setEnabled(false);
389  }
390 
391  m_itemTreeType = item->type();
392 }
393 
395 {
396  if (m_ui->m_stringComboValueLineEdit->text().isEmpty())
397  {
398  QMessageBox::warning(this, tr("Warning"), tr("Value not defined."));
399  return;
400  }
401 
402  m_ui->m_listWidget->addItem(m_ui->m_stringComboValueLineEdit->text());
403 }
404 
406 {
408  {
409  std::string propType = m_curFormItem->getType();
410 
411  if (propType == BOOLFORMITEMTYPE)
412  {
414 
415  if (m_ui->m_defaultValueBoolCheckBox->isChecked())
416  {
417  std::string value = m_ui->m_boolComboBox->currentText().toUtf8().data();
418 
419  if (value == "TRUE")
420  fi->setValue(true);
421  else
422  fi->setValue(false);
423  }
424  }
425  else if (propType == DATEFORMITEMTYPE)
426  {
428  }
429  else if (propType == DOUBLEFORMITEMTYPE)
430  {
432 
433  if (m_ui->m_defaultValueDoubleCheckBox->isChecked())
434  {
435  fi->setValue(m_ui->m_doubleLineEdit->text().toDouble());
436  }
437  }
438  else if (propType == INTFORMITEMTYPE)
439  {
441 
442  if (m_ui->m_defaultValueIntCheckBox->isChecked())
443  {
444  fi->setValue(m_ui->m_intLineEdit->text().toInt());
445  }
446  }
447  else if (propType == LABELFORMITEMTYPE)
448  {
450 
451  if (m_ui->m_defaultValueLabelCheckBox->isChecked())
452  {
453  fi->setValue(m_ui->m_labelLineEdit->text().toUtf8().data());
454  }
455  }
456  else if (propType == PICTUREFORMITEMTYPE)
457  {
459  }
460  else if (propType == STRINGCOMBOFORMITEMTYPE)
461  {
463 
464  if (m_ui->m_defaultValueStringComboCheckBox->isChecked())
465  {
466  fi->setValue(m_ui->m_stringComboLineEdit->text().toUtf8().data());
467  }
468 
469  std::vector<std::string> values;
470 
471  for (int i = 0; i < m_ui->m_listWidget->count(); ++i)
472  {
473  values.push_back(m_ui->m_listWidget->item(i)->text().toUtf8().data());
474  }
475 
476  fi->setValues(values);
477  }
478  else if (propType == STRINGFORMITEMTYPE)
479  {
481 
482  if (m_ui->m_defaultValueStringCheckBox->isChecked())
483  {
484  fi->setValue(m_ui->m_stringLineEdit->text().toUtf8().data());
485  }
486  }
487  else if (propType == TIMEFORMITEMTYPE)
488  {
490  }
491 
492  std::string desc = "";
493 
494  if (!m_ui->m_descLineEdit->text().isEmpty())
495  {
496  desc = m_ui->m_descLineEdit->text().toUtf8().data();
497  }
498 
499  m_curFormItem->setLabel(desc);
500 
501  QMessageBox::information(this, tr("Information"), tr("Form Item updated."));
502  }
503  else if (m_itemTreeType == FORM_TREE_ITEM)
504  {
505  std::vector<std::string> values;
506 
507  for (int i = 0; i < m_ui->m_formItemsListWidget->count(); ++i)
508  {
509  values.push_back(m_ui->m_formItemsListWidget->item(i)->text().toUtf8().data());
510  }
511 
512  std::vector<AbstractFormItem*> backupItems;
513 
514  for (std::size_t t = 0; t < m_curForm->getItems().size(); ++t)
515  {
516  backupItems.push_back(m_curForm->getItems()[t]);
517  }
518 
519  m_curForm->getItems().clear();
520 
521  for (std::size_t t = 0; t < values.size(); ++t)
522  {
523  for (std::size_t p = 0; p < backupItems.size(); ++p)
524  {
525  if (values[t] == backupItems[p]->getKey())
526  {
527  m_curForm->getItems().push_back(backupItems[p]);
528  }
529  }
530  }
531 
532  backupItems.clear();
533 
534  QMessageBox::information(this, tr("Information"), tr("Form updated."));
535  }
536 
537  listSectionMap();
538 }
539 
541 {
542  if (!m_curForm || !m_curFormItem)
543  return;
544 
545  std::vector<AbstractFormItem*>::iterator it = m_curForm->getItems().begin();
546 
547  while (it != m_curForm->getItems().end())
548  {
549  if ((*it)->getKey() == m_curFormItem->getKey())
550  {
551  delete (*it);
552  m_curForm->getItems().erase(it);
553 
554  listSectionMap();
555 
556  QMessageBox::information(this, tr("Information"), tr("Form item removed."));
557 
558  return;
559  }
560 
561  ++it;
562  }
563 
564  QMessageBox::warning(this, tr("Warning"), tr("Form item not removed."));
565 }
566 
568 {
569  QComboBox* cmbBox = dynamic_cast<QComboBox*>(sender());
570 
571  if (!cmbBox)
572  return;
573 
574  //find form and item
576 
578 
579  QTreeWidgetItemIterator it(m_ui->m_treeWidget);
580 
581  while(*it)
582  {
583  QTreeWidgetItem* item = *it;
584 
585  QWidget* widget = m_ui->m_treeWidget->itemWidget(item, 1);
586 
587  if (widget && widget == cmbBox)
588  {
589  std::string propertyName = item->text(0).toUtf8().data();
590 
591  QTreeWidgetItem* parent = item->parent();
592 
593  std::string formName = parent->text(0).toUtf8().data();
594 
595  //get form
596  form = getForm(formName);
597 
598  //get property
599  if (form)
600  formItem = form->getItem(propertyName);
601 
602  break;
603  }
604  ++it;
605  }
606 
607  if (!form || !formItem)
608  {
609  return;
610  }
611 
612  //create new item
613  std::string propType = cmbBox->itemText(index).toUtf8().data();
614 
616 
617  if (propType == BOOLFORMITEMTYPE)
618  {
620  }
621  else if (propType == DATEFORMITEMTYPE)
622  {
624  }
625  else if (propType == DOUBLEFORMITEMTYPE)
626  {
628  }
629  else if (propType == INTFORMITEMTYPE)
630  {
632  }
633  else if (propType == LABELFORMITEMTYPE)
634  {
636  }
637  else if (propType == PICTUREFORMITEMTYPE)
638  {
640  }
641  else if (propType == STRINGCOMBOFORMITEMTYPE)
642  {
644  }
645  else if (propType == STRINGFORMITEMTYPE)
646  {
648  }
649  else if (propType == TIMEFORMITEMTYPE)
650  {
652  }
653 
654  item->setKey(formItem->getKey());
655  item->setLabel(formItem->getLabel());
656 
657  //replace item
658  for (std::size_t t = 0; t < form->getItems().size(); ++t)
659  {
660  if (form->getItems()[t]->getKey() == formItem->getKey())
661  {
662  delete form->getItems()[t];
663 
664  form->getItems()[t] = item;
665 
666  break;
667  }
668  }
669 
670  listSectionMap();
671 }
672 
674 {
675  std::map<std::string, Section*>::iterator it = m_sectionsMap.begin();
676 
677  while (it != m_sectionsMap.end())
678  {
679  te::qt::plugins::terramobile::Form* f = it->second->getForm(formName);
680 
681  if (f)
682  {
683  return f;
684  }
685 
686  ++it;
687  }
688 
689  return 0;
690 }
691 
693 {
694  m_ui->m_treeWidget->clear();
695 
696  std::map<std::string, Section*>::iterator it = m_sectionsMap.begin();
697 
698  while (it != m_sectionsMap.end())
699  {
700  te::qt::plugins::terramobile::Section* section = it->second;
701 
702  for (std::size_t t = 0; t < section->getForms().size(); ++t)
703  {
704  te::qt::plugins::terramobile::Form* form = section->getForms()[t];
705 
706  QTreeWidgetItem* item = new QTreeWidgetItem(m_ui->m_treeWidget, FORM_TREE_ITEM);
707  item->setText(0, form->getName().c_str());
708  item->setIcon(0, QIcon::fromTheme("document-info"));
709 
710  m_ui->m_treeWidget->addTopLevelItem(item);
711 
712  for (std::size_t p = 0; p < form->getItems().size(); ++p)
713  {
715 
716  QTreeWidgetItem* subItem = new QTreeWidgetItem(item, PROPERTY_TREE_ITEM);
717  subItem->setText(0, formItem->getKey().c_str());
718  subItem->setIcon(0, QIcon::fromTheme("layer-info"));
719  item->addChild(subItem);
720  item->setExpanded(true);
721 
722  std::string curType = formItem->getType().c_str();
723 
724  QComboBox* cmbProperty = new QComboBox(m_ui->m_treeWidget);
725 
726  cmbProperty->addItem(BOOLFORMITEMTYPE);
727  cmbProperty->addItem(DATEFORMITEMTYPE);
728  cmbProperty->addItem(DOUBLEFORMITEMTYPE);
729  cmbProperty->addItem(INTFORMITEMTYPE);
730  cmbProperty->addItem(LABELFORMITEMTYPE);
731  cmbProperty->addItem(PICTUREFORMITEMTYPE);
732  cmbProperty->addItem(STRINGCOMBOFORMITEMTYPE);
733  cmbProperty->addItem(STRINGFORMITEMTYPE);
734  cmbProperty->addItem(TIMEFORMITEMTYPE);
735 
736  cmbProperty->setCurrentText(curType.c_str());
737 
738  connect(cmbProperty, SIGNAL(activated(int)), this, SLOT(onItemTypeChanged(int)));
739 
740  m_ui->m_treeWidget->setItemWidget(subItem, 1, cmbProperty);
741  }
742  }
743 
744  ++it;
745  }
746 
747  m_ui->m_treeWidget->resizeColumnToContents(0);
748  m_ui->m_treeWidget->resizeColumnToContents(1);
749 
750  //empty page
751  m_ui->m_stackedWidget->setCurrentIndex(9);
752  m_ui->m_formItemLineEdit->clear();
753  m_ui->m_descLineEdit->clear();
754 
755  m_curForm = 0;
756  m_curFormItem = 0;
757 
758  m_ui->m_saveFormItemToolButton->setEnabled(false);
759  m_ui->m_removeFormItemToolButton->setEnabled(false);
760 
761  //build sections descriptions
762  m_ui->m_plainTextEdit->clear();
763 
764  it = m_sectionsMap.begin();
765 
766  while (it != m_sectionsMap.end())
767  {
769 
770  std::string jsonStr = te::qt::plugins::terramobile::Write(s);
771 
772  m_ui->m_plainTextEdit->appendPlainText(jsonStr.c_str());
773 
774  ++it;
775  }
776 }
void onTreeItemClicked(QTreeWidgetItem *item, int column)
std::vector< AbstractFormItem * > & getItems()
Definition: Form.h:71
This class defines the Section object.
Definition: Section.h:53
#define DATEFORMITEMTYPE
AbstractFormItem * getItem(std::string itemName)
Definition: Form.cpp:42
void setValues(std::vector< std::string > values)
This file defines the class for a time form item.
Definition: TimeFormItem.h:49
This file defines the class for a date form item.
Definition: DateFormItem.h:49
void setName(std::string name)
Definition: Form.h:69
std::string Convert2UCase(const std::string &value)
It converts a string to upper case.
Definition: StringUtils.h:168
This file defines the class for a label form item.
Definition: LabelFormItem.h:48
#define PICTUREFORMITEMTYPE
#define DOUBLEFORMITEMTYPE
std::string ReplaceSpecialChars(const std::string &str, bool &changed)
It replace special characters of a string.
Definition: StringUtils.h:376
const std::vector< te::dt::Property * > & getProperties() const
It returns the properties that take part of the primary key.
Definition: PrimaryKey.h:109
void setLayerList(std::list< te::map::AbstractLayerPtr > list)
This file defines the abstract class for a form item.
Form
It specifies the form for the attribute.
#define BOOLFORMITEMTYPE
This file defines the class for a bool form item.
Definition: BoolFormItem.h:48
This file defines the class for a string form item.
#define LABELFORMITEMTYPE
te::gm::Polygon * p
This class defines the Form object.
Definition: Form.h:55
#define LAYER_GATHERING_STATUS_COLUMN
#define STRINGCOMBOFORMITEMTYPE
It describes a primary key (pk) constraint.
Definition: PrimaryKey.h:52
te::qt::plugins::terramobile::AbstractFormItem * m_curFormItem
std::string Write(te::qt::plugins::terramobile::Section *section)
#define LAYER_GATHERING_OBJID_COLUMN
#define TIMEFORMITEMTYPE
void setName(std::string name)
Definition: Section.h:67
This file defines the class for a string combo form item.
std::auto_ptr< Ui::BuilderFormsWizardPageForm > m_ui
std::vector< Form * > & getForms()
Definition: Section.h:73
#define STRINGFORMITEMTYPE
void setDescription(std::string desc)
Definition: Section.h:71
This file defines the class for a picture form item.
boost::intrusive_ptr< AbstractLayer > AbstractLayerPtr
void FreeContents(boost::unordered_map< K, V * > &m)
This function can be applied to a map of pointers. It will delete each pointer in the map...
Definition: BoostUtils.h:55
#define INTFORMITEMTYPE
#define PROPERTY_TREE_ITEM
This file defines the class for a double form item.
#define FORM_TREE_ITEM