QGIS API Documentation  2.11.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 
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 
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  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 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 setNullValue(QString nullValue)
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
QgsTextEditWrapper(QgsVectorLayer *vl, int fieldIdx, QWidget *editor=0, QWidget *parent=0)
void setReadOnly(bool ro)
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:74