QGIS API Documentation  2.12.0-Lyon
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 at opengis 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 
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 ( !defaultValue().isNull() && 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 
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 
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 
134 {
135  return mLineEdit || mTextEdit || mPlainTextEdit;
136 }
137 
139 {
140  QString v;
141  if ( val.isNull() )
142  {
143  if ( !( field().type() == QVariant::Int || field().type() == QVariant::Double || field().type() == QVariant::LongLong || field().type() == QVariant::Date ) )
144  v = QSettings().value( "qgis/nullValue", "NULL" ).toString();
145  }
146  else
147  v = val.toString();
148 
149  if ( mTextEdit )
150  {
151  if ( val != value() )
152  {
153  if ( config( "UseHtml" ).toBool() )
154  mTextEdit->setHtml( v );
155  else
156  mTextEdit->setPlainText( v );
157  }
158  }
159 
160  if ( mPlainTextEdit )
161  {
162  if ( val != value() )
163  mPlainTextEdit->setPlainText( v );
164  }
165 
166  if ( mLineEdit )
167  mLineEdit->setText( v );
168 }
169 
170 void QgsTextEditWrapper::setEnabled( bool enabled )
171 {
172  if ( mTextEdit )
173  mTextEdit->setReadOnly( !enabled );
174 
175  if ( mPlainTextEdit )
176  mPlainTextEdit->setReadOnly( !enabled );
177 
178  if ( mLineEdit )
179  {
180  mLineEdit->setReadOnly( !enabled );
181  if ( enabled )
182  mLineEdit->setPalette( mWritablePalette );
183  else
184  mLineEdit->setPalette( mReadOnlyPalette );
185  }
186 }
void setEnabled(bool enabled) override
void setPalette(const QPalette &)
void valueChanged()
Will call the value() method to determine the emitted value.
void setColor(ColorGroup group, ColorRole role, const QColor &color)
Manages an editor widget Widget and wrapper share the same parent.
QString toHtml() const
const QColor & color(ColorGroup group, ColorRole role) const
QString toPlainText() const
QgsField field()
Access the field.
QVariant defaultValue()
Access the default value of the field.
void setReadOnly(bool)
void initWidget(QWidget *editor) override
This method should initialize the editor widget with runtime data.
bool isNull() const
const QgsEditorWidgetConfig config()
Returns the whole config.
bool isEmpty() const
Lineedit with builtin clear button.
void setPlaceholderText(const QString &)
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.
QVariant value(const QString &key, const QVariant &defaultValue) const
void setReadOnly(bool ro)
void setValue(const QVariant &value) override
bool valid() override
Return true if the widget has been properly initialized.
QgsTextEditWrapper(QgsVectorLayer *vl, int fieldIdx, QWidget *editor=0, QWidget *parent=0)
void setReadOnly(bool ro)
void setNullValue(const QString &nullValue)
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString toPlainText() const
Represents a vector layer which manages a vector based data sets.
QString toString() const
QVariant::Type type() const
Gets variant type of the field as it will be retrieved from data source.
Definition: qgsfield.cpp:77