22 #include "customfieldsmodel.h"
28 #include <QtCore/QDateTime>
30 Q_DECLARE_METATYPE( Qt::CheckState )
32 CustomFieldsModel::CustomFieldsModel( QObject *parent )
33 : QAbstractItemModel( parent )
37 CustomFieldsModel::~CustomFieldsModel()
41 void CustomFieldsModel::setCustomFields(
const CustomField::List &customFields )
43 emit layoutAboutToBeChanged();
45 mCustomFields = customFields;
50 CustomField::List CustomFieldsModel::customFields()
const
55 QModelIndex CustomFieldsModel::index(
int row,
int column,
const QModelIndex& )
const
57 return createIndex( row, column, 0 );
60 QModelIndex CustomFieldsModel::parent(
const QModelIndex& )
const
65 QVariant CustomFieldsModel::data(
const QModelIndex &index,
int role )
const
67 if ( !index.isValid() ) {
71 if ( index.row() < 0 || index.row() >= mCustomFields.count() ) {
75 if ( index.column() < 0 || index.column() > 2 ) {
79 const CustomField &customField = mCustomFields[ index.row() ];
81 if ( role == Qt::DisplayRole ) {
82 if ( index.column() == 0 ) {
83 return customField.title();
84 }
else if ( index.column() == 1 ) {
85 switch ( customField.type() ) {
86 case CustomField::TextType:
87 case CustomField::NumericType:
88 return customField.value();
90 case CustomField::BooleanType:
93 case CustomField::DateType:
95 const QDate value = QDate::fromString( customField.value(), Qt::ISODate );
96 return KGlobal::locale()->formatDate( value, KLocale::ShortDate );
99 case CustomField::TimeType:
101 const QTime value = QTime::fromString( customField.value(), Qt::ISODate );
102 return KGlobal::locale()->formatTime( value );
105 case CustomField::DateTimeType:
107 const QDateTime value = QDateTime::fromString( customField.value(), Qt::ISODate );
108 return KGlobal::locale()->formatDateTime( value );
112 return customField.value();
114 return customField.key();
118 if ( role == Qt::CheckStateRole ) {
119 if ( index.column() == 1 ) {
120 if ( customField.type() == CustomField::BooleanType ) {
121 return ( customField.value() == QLatin1String(
"true" ) ? Qt::Checked : Qt::Unchecked );
126 if ( role == Qt::EditRole ) {
127 if ( index.column() == 0 ) {
128 return customField.title();
129 }
else if ( index.column() == 1 ) {
130 return customField.value();
132 return customField.key();
136 if ( role == TypeRole ) {
137 return customField.type();
140 if ( role == ScopeRole ) {
141 return customField.scope();
147 bool CustomFieldsModel::setData(
const QModelIndex &index,
const QVariant &value,
int role )
149 if ( !index.isValid() ) {
153 if ( index.row() < 0 || index.row() >= mCustomFields.count() ) {
157 if ( index.column() < 0 || index.column() > 2 ) {
161 CustomField &customField = mCustomFields[ index.row() ];
163 if ( role == Qt::EditRole ) {
164 if ( index.column() == 0 ) {
165 customField.setTitle( value.toString() );
166 }
else if ( index.column() == 1 ) {
167 customField.setValue( value.toString() );
169 customField.setKey( value.toString() );
172 emit dataChanged( index, index );
176 if ( role == Qt::CheckStateRole ) {
177 if ( index.column() == 1 ) {
178 if ( customField.type() == CustomField::BooleanType ) {
179 customField.setValue( static_cast<Qt::CheckState>( value.toInt() ) == Qt::Checked ?
180 QLatin1String(
"true" ) : QLatin1String(
"false" ) );
181 emit dataChanged( index, index );
187 if ( role == TypeRole ) {
188 customField.setType( (CustomField::Type)value.toInt() );
189 emit dataChanged( index, index );
193 if ( role == ScopeRole ) {
195 emit dataChanged( index, index );
202 QVariant CustomFieldsModel::headerData(
int section, Qt::Orientation orientation,
int role )
const
204 if ( section < 0 || section > 1 ) {
208 if ( orientation != Qt::Horizontal ) {
212 if ( role != Qt::DisplayRole ) {
216 if ( section == 0 ) {
217 return i18nc(
"custom field title",
"Title" );
219 return i18nc(
"custom field value",
"Value" );
223 Qt::ItemFlags CustomFieldsModel::flags(
const QModelIndex &index )
const
225 if ( !index.isValid() || index.row() < 0 || index.row() >= mCustomFields.count() ) {
226 return QAbstractItemModel::flags( index );
229 const CustomField &customField = mCustomFields[ index.row() ];
231 const Qt::ItemFlags parentFlags = QAbstractItemModel::flags( index );
232 if ( ( customField.type() == CustomField::BooleanType ) && ( index.column() == 1 ) ) {
233 return ( parentFlags | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsUserCheckable );
235 return ( parentFlags | Qt::ItemIsEnabled | Qt::ItemIsEditable );
239 int CustomFieldsModel::columnCount(
const QModelIndex &parent )
const
241 if ( !parent.isValid() ) {
248 int CustomFieldsModel::rowCount(
const QModelIndex &parent )
const
250 if ( !parent.isValid() ) {
251 return mCustomFields.count();
257 bool CustomFieldsModel::insertRows(
int row,
int count,
const QModelIndex &parent )
259 if ( parent.isValid() ) {
263 beginInsertRows( parent, row, row + count - 1 );
264 for (
int i = 0; i < count; ++i ) {
272 bool CustomFieldsModel::removeRows(
int row,
int count,
const QModelIndex &parent )
274 if ( parent.isValid() ) {
278 beginRemoveRows( parent, row, row + count - 1 );
279 for (
int i = 0; i < count; ++i ) {
280 mCustomFields.remove( row );