28 #include <QPushButton>
31 #include <QFileDialog>
36 #include <QHBoxLayout>
37 #include <QPlainTextEdit>
39 #include <QCalendarWidget>
40 #include <QDialogButtonBox>
46 QPushButton *pb = qobject_cast<QPushButton *>( sender() );
50 QWidget *hbox = qobject_cast<QWidget *>( pb->parent() );
54 QLineEdit *le = hbox->findChild<QLineEdit *>();
58 QString fileName = QFileDialog::getOpenFileName( 0 , tr(
"Select a file" ) );
59 if ( fileName.isNull() )
63 le->setText( QDir::toNativeSeparators( fileName ) );
68 QPushButton *pb = qobject_cast<QPushButton *>( sender() );
72 QWidget *hbox = qobject_cast<QWidget *>( pb->parent() );
76 QLineEdit *le = hbox->findChild<QLineEdit *>();
80 QDialog *dlg =
new QDialog();
81 dlg->setWindowTitle( tr(
"Select a date" ) );
82 QVBoxLayout *vl =
new QVBoxLayout( dlg );
84 QCalendarWidget *cw =
new QCalendarWidget( dlg );
85 cw->setSelectedDate( QDate::fromString( le->text(), Qt::ISODate ) );
88 QDialogButtonBox *buttonBox =
new QDialogButtonBox( dlg );
89 buttonBox->addButton( QDialogButtonBox::Ok );
90 buttonBox->addButton( QDialogButtonBox::Cancel );
91 vl->addWidget( buttonBox );
93 connect( buttonBox, SIGNAL( accepted() ), dlg, SLOT( accept() ) );
94 connect( buttonBox, SIGNAL( rejected() ), dlg, SLOT( reject() ) );
96 if ( dlg->exec() == QDialog::Accepted )
98 le->setText( cw->selectedDate().toString( Qt::ISODate ) );
104 QComboBox *cb = NULL;
106 cb = qobject_cast<QComboBox *>( editor );
108 cb =
new QComboBox( parent );
118 QWidget *myWidget = NULL;
121 QVariant::Type myFieldType = field.
type();
127 QList<QVariant> values;
130 QComboBox *cb =
comboBox( editor, parent );
133 cb->setEditable(
false );
135 for ( QList<QVariant>::iterator it = values.begin(); it != values.end(); it++ )
136 cb->addItem( it->toString(), it->toString() );
145 QStringList enumValues;
148 QComboBox *cb =
comboBox( editor, parent );
151 QStringList::const_iterator s_it = enumValues.constBegin();
152 for ( ; s_it != enumValues.constEnd(); ++s_it )
154 cb->addItem( *s_it, *s_it );
164 const QMap<QString, QVariant> &map = vl->
valueMap( idx );
166 QComboBox *cb =
comboBox( editor, parent );
169 for ( QMap<QString, QVariant>::const_iterator it = map.begin(); it != map.end(); it++ )
171 cb->addItem( it.key(), it.value() );
181 QMap<QString, QString> classes;
186 const QList<QgsSymbol *> symbols = uvr->
symbols();
188 for (
int i = 0; i < symbols.size(); i++ )
190 QString label = symbols[i]->label();
191 QString name = symbols[i]->lowerValue();
196 classes.insert( name, label );
204 for (
int i = 0; i < categories.size(); i++ )
206 QString label = categories[i].label();
207 QString value = categories[i].value().toString();
208 if ( label.isEmpty() )
210 classes.insert( value, label );
214 QComboBox *cb =
comboBox( editor, parent );
217 for ( QMap<QString, QString>::const_iterator it = classes.begin(); it != classes.end(); it++ )
219 cb->addItem( it.value(), it.key() );
232 if ( myFieldType == QVariant::Int )
243 sb = qobject_cast<QSpinBox *>( editor );
245 sb =
new QSpinBox( parent );
249 sb->setRange( min, max );
250 sb->setSingleStep( step );
257 QAbstractSlider *sl = NULL;
261 sl = qobject_cast<QAbstractSlider*>( editor );
265 sl =
new QDial( parent );
269 sl =
new QSlider( Qt::Horizontal, parent );
274 sl->setRange( min, max );
275 sl->setSingleStep( step );
282 else if ( myFieldType == QVariant::Double )
284 QDoubleSpinBox *dsb = NULL;
286 dsb = qobject_cast<QDoubleSpinBox*>( editor );
288 dsb =
new QDoubleSpinBox( parent );
294 double step = vl->
range( idx ).
mStep.toDouble();
296 dsb->setRange( min, max );
297 dsb->setSingleStep( step );
307 QCheckBox *cb = NULL;
309 cb = qobject_cast<QCheckBox*>( editor );
311 cb =
new QCheckBox( parent );
327 QLineEdit *le = NULL;
328 QTextEdit *te = NULL;
329 QPlainTextEdit *pte = NULL;
333 le = qobject_cast<QLineEdit *>( editor );
334 te = qobject_cast<QTextEdit *>( editor );
335 pte = qobject_cast<QPlainTextEdit *>( editor );
339 pte =
new QPlainTextEdit( parent );
343 le =
new QLineEdit( parent );
351 QList<QVariant> values;
355 for ( QList<QVariant>::const_iterator it = values.begin(); it != values.end(); it++ )
356 svalues << it->toString();
358 QCompleter *c =
new QCompleter( svalues );
359 c->setCompletionMode( QCompleter::PopupCompletion );
360 le->setCompleter( c );
369 te->setAcceptRichText(
true );
392 QPushButton *pb = NULL;
393 QLineEdit *le = qobject_cast<QLineEdit *>( editor );
399 if ( editor->parent() )
401 pb = editor->parent()->findChild<QPushButton *>();
406 le =
new QLineEdit();
408 pb =
new QPushButton( tr(
"..." ) );
410 QHBoxLayout *hbl =
new QHBoxLayout();
411 hbl->addWidget( le );
412 hbl->addWidget( pb );
414 myWidget =
new QWidget( parent );
415 myWidget->setBackgroundRole( QPalette::Window );
416 myWidget->setAutoFillBackground(
true );
417 myWidget->setLayout( hbl );
431 setValue( myWidget, vl, idx, value );
443 bool modified =
false;
447 QString nullValue = settings.value(
"qgis/nullValue",
"NULL" ).toString();
449 QLineEdit *le = qobject_cast<QLineEdit *>( widget );
453 modified = le->isModified();
454 if ( text == nullValue )
456 text = QString::null;
460 QTextEdit *te = qobject_cast<QTextEdit *>( widget );
464 modified = te->document()->isModified();
465 if ( text == nullValue )
467 text = QString::null;
471 QPlainTextEdit *pte = qobject_cast<QPlainTextEdit *>( widget );
474 text = pte->toPlainText();
475 modified = pte->document()->isModified();
476 if ( text == nullValue )
478 text = QString::null;
482 QComboBox *cb = qobject_cast<QComboBox *>( widget );
489 text = cb->itemData( cb->currentIndex() ).toString();
490 if ( text == nullValue )
492 text = QString::null;
497 text = cb->currentText();
502 QSpinBox *sb = qobject_cast<QSpinBox *>( widget );
505 text = QString::number( sb->value() );
508 QAbstractSlider *slider = qobject_cast<QAbstractSlider *>( widget );
511 text = QString::number( slider->value() );
514 QDoubleSpinBox *dsb = qobject_cast<QDoubleSpinBox *>( widget );
517 text = QString::number( dsb->value() );
520 QCheckBox *ckb = qobject_cast<QCheckBox *>( widget );
523 QPair<QString, QString> states = vl->
checkedState( idx );
524 text = ckb->isChecked() ? states.first : states.second;
527 QCalendarWidget *cw = qobject_cast<QCalendarWidget *>( widget );
530 text = cw->selectedDate().toString();
533 le = widget->findChild<QLineEdit *>();
539 switch ( theField.
type() )
544 int myIntValue = text.toInt( &ok );
545 if ( ok && !text.isEmpty() )
547 value = QVariant( myIntValue );
556 case QVariant::LongLong:
559 qlonglong myLongValue = text.toLong( &ok );
560 if ( ok && !text.isEmpty() )
562 value = QVariant( myLongValue );
570 case QVariant::Double:
573 double myDblValue = text.toDouble( &ok );
574 if ( ok && !text.isEmpty() )
576 value = QVariant( myDblValue );
587 QDate myDateValue = QDate::fromString( text, Qt::ISODate );
588 if ( myDateValue.isValid() && !text.isEmpty() )
601 value = QVariant( text );
615 QVariant::Type myFieldType = field.
type();
618 QString nullValue = settings.value(
"qgis/nullValue",
"NULL" ).toString();
628 QComboBox *cb = qobject_cast<QComboBox *>( editor );
637 int idx = cb->findData( v );
641 cb->setCurrentIndex( idx );
649 if ( myFieldType == QVariant::Int )
653 QSpinBox *sb = qobject_cast<QSpinBox *>( editor );
656 sb->setValue( value.toInt() );
660 QAbstractSlider *sl = qobject_cast<QAbstractSlider *>( editor );
663 sl->setValue( value.toInt() );
667 else if ( myFieldType == QVariant::Double )
669 QDoubleSpinBox *dsb = qobject_cast<QDoubleSpinBox *>( editor );
672 dsb->setValue( value.toDouble() );
678 QCheckBox *cb = qobject_cast<QCheckBox *>( editor );
681 QPair<QString, QString> states = vl->
checkedState( idx );
682 cb->setChecked( value == states.first );
694 QLineEdit *le = qobject_cast<QLineEdit *>( editor );
695 QTextEdit *te = qobject_cast<QTextEdit *>( editor );
696 QPlainTextEdit *pte = qobject_cast<QPlainTextEdit *>( editor );
697 if ( !le && !te && !pte )
701 if ( value.isNull() )
702 if ( myFieldType == QVariant::Int || myFieldType == QVariant::Double || myFieldType == QVariant::LongLong )
707 text = value.toString();
714 pte->setPlainText( text );
721 QLineEdit* le = qobject_cast<QLineEdit*>( editor );
724 le = editor->findChild<QLineEdit *>();
730 le->setText( value.toString() );