QGIS API Documentation  2.8.6-Wien
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& val )
134 {
135  QString v;
136  if ( val.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 = val.toString();
143 
144  if ( mTextEdit )
145  {
146  if ( val != value() )
147  {
148  if ( config( "UseHtml" ).toBool() )
149  mTextEdit->setHtml( v );
150  else
151  mTextEdit->setPlainText( v );
152  }
153  }
154 
155  if ( mPlainTextEdit )
156  {
157  if ( val != value() )
158  mPlainTextEdit->setPlainText( v );
159  }
160 
161  if ( mLineEdit )
162  mLineEdit->setText( v );
163 }
164 
165 void QgsTextEditWrapper::setEnabled( bool enabled )
166 {
167  if ( mTextEdit )
168  mTextEdit->setReadOnly( !enabled );
169 
170  if ( mPlainTextEdit )
171  mPlainTextEdit->setReadOnly( !enabled );
172 
173  if ( mLineEdit )
174  {
175  mLineEdit->setReadOnly( !enabled );
176  if ( enabled )
177  mLineEdit->setPalette( mWritablePalette );
178  else
179  mLineEdit->setPalette( mReadOnlyPalette );
180  }
181 }
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&#39;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:65