QGIS API Documentation  2.9.0-Master
qgstexteditwrapper.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgstexteditwrapper.cpp
3  --------------------------------------
4  Date : 5.1.2014
5  Copyright : (C) 2014 Matthias Kuhn
6  Email : matthias dot kuhn at gmx dot ch
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #include "qgstexteditwrapper.h"
17 
18 #include "qgsfield.h"
19 #include "qgsfieldvalidator.h"
20 #include "qgsfilterlineedit.h"
21 
22 #include <QSettings>
23 
24 QgsTextEditWrapper::QgsTextEditWrapper( QgsVectorLayer* vl, int fieldIdx, QWidget* editor, QWidget* parent )
25  : QgsEditorWidgetWrapper( vl, fieldIdx, editor, parent )
26  , mTextEdit( NULL )
27  , mPlainTextEdit( NULL )
28  , mLineEdit( NULL )
29 {
30 }
31 
33 {
34  QString v;
35 
36  if ( mTextEdit )
37  {
38  if ( config( "UseHtml" ).toBool() )
39  {
40  v = mTextEdit->toHtml();
41  }
42  else
43  {
44  v = mTextEdit->toPlainText();
45  }
46  }
47 
48  if ( mPlainTextEdit )
49  {
50  v = mPlainTextEdit->toPlainText();
51  }
52 
53  if ( mLineEdit )
54  {
55  v = mLineEdit->text();
56  }
57 
58  if (( v.isEmpty() && ( field().type() == QVariant::Int || field().type() == QVariant::Double || field().type() == QVariant::LongLong || field().type() == QVariant::Date ) ) ||
59  v == QSettings().value( "qgis/nullValue", "NULL" ).toString() )
60  return QVariant( field().type() );
61 
62  if ( v == defaultValue().toString() )
63  {
64  return defaultValue();
65  }
66 
67  QVariant res( v );
68  if ( field().convertCompatible( res ) )
69  return res;
70  else
71  return QVariant( field().type() );
72 }
73 
74 QWidget* QgsTextEditWrapper::createWidget( QWidget* parent )
75 {
76  if ( config( "IsMultiline" ).toBool() )
77  {
78  if ( config( "UseHtml" ).toBool() )
79  {
80  return new QTextEdit( parent );
81  }
82  else
83  {
84  return new QPlainTextEdit( parent );
85  }
86  }
87  else
88  {
89  return new QgsFilterLineEdit( parent );
90  }
91 }
92 
93 void QgsTextEditWrapper::initWidget( QWidget* editor )
94 {
95  mTextEdit = qobject_cast<QTextEdit*>( editor );
96  mPlainTextEdit = qobject_cast<QPlainTextEdit*>( editor );
97  mLineEdit = qobject_cast<QLineEdit*>( editor );
98 
99  if ( mTextEdit )
100  connect( mTextEdit, SIGNAL( textChanged() ), this, SLOT( valueChanged() ) );
101 
102  if ( mPlainTextEdit )
103  connect( mPlainTextEdit, SIGNAL( textChanged() ), this, SLOT( valueChanged() ) );
104 
105  if ( mLineEdit )
106  {
107  mLineEdit->setValidator( new QgsFieldValidator( mLineEdit, field(), defaultValue().toString() ) );
108 
109  QVariant defVal = defaultValue();
110  if ( defVal.isNull() )
111  {
112  defVal = QSettings().value( "qgis/nullValue", "NULL" );
113  }
114 
115  QgsFilterLineEdit *fle = qobject_cast<QgsFilterLineEdit*>( mLineEdit );
116  if ( field().type() == QVariant::Int || field().type() == QVariant::Double || field().type() == QVariant::LongLong || field().type() == QVariant::Date )
117  {
118  mLineEdit->setPlaceholderText( defVal.toString() );
119  }
120  else if ( fle )
121  {
122  fle->setNullValue( defVal.toString() );
123  }
124 
125  connect( mLineEdit, SIGNAL( textChanged( QString ) ), this, SLOT( valueChanged( QString ) ) );
126 
127  mWritablePalette = mLineEdit->palette();
128  mReadOnlyPalette = mLineEdit->palette();
129  mReadOnlyPalette.setColor( QPalette::Text, mWritablePalette.color( QPalette::Disabled, QPalette::Text ) );
130  }
131 }
132 
133 void QgsTextEditWrapper::setValue( const QVariant& value )
134 {
135  QString v;
136  if ( value.isNull() )
137  {
138  if ( !( field().type() == QVariant::Int || field().type() == QVariant::Double || field().type() == QVariant::LongLong || field().type() == QVariant::Date ) )
139  v = QSettings().value( "qgis/nullValue", "NULL" ).toString();
140  }
141  else
142  v = value.toString();
143 
144  if ( mTextEdit )
145  {
146  if ( config( "UseHtml" ).toBool() )
147  mTextEdit->setHtml( v );
148  else
149  mTextEdit->setPlainText( v );
150  }
151 
152  if ( mPlainTextEdit )
153  mPlainTextEdit->setPlainText( v );
154 
155  if ( mLineEdit )
156  mLineEdit->setText( v );
157 }
158 
159 void QgsTextEditWrapper::setEnabled( bool enabled )
160 {
161  if ( mTextEdit )
162  mTextEdit->setReadOnly( !enabled );
163 
164  if ( mPlainTextEdit )
165  mPlainTextEdit->setReadOnly( !enabled );
166 
167  if ( mLineEdit )
168  {
169  mLineEdit->setReadOnly( !enabled );
170  if ( enabled )
171  mLineEdit->setPalette( mWritablePalette );
172  else
173  mLineEdit->setPalette( mReadOnlyPalette );
174  }
175 }
void setEnabled(bool enabled) override
void valueChanged()
Will call the value() method to determine the emitted value.
Manages an editor widget Widget and wrapper share the same parent.
QgsField field()
Access the field.
QVariant defaultValue()
Access the default value of the field.
void initWidget(QWidget *editor) override
This method should initialize the editor widget with runtime data.
const QgsEditorWidgetConfig config()
Returns the whole config.
Lineedit with builtin clear button.
void setNullValue(QString nullValue)
QVariant value() override
Will be used to access the widget's value.
QWidget * createWidget(QWidget *parent) override
This method should create a new widget with the provided parent.
void setValue(const QVariant &value) override
QgsTextEditWrapper(QgsVectorLayer *vl, int fieldIdx, QWidget *editor=0, QWidget *parent=0)
Represents a vector layer which manages a vector based data sets.
QVariant::Type type() const
Gets variant type of the field as it will be retrieved from data source.
Definition: qgsfield.cpp:74