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() )
70 if ( index.row() < 0 || index.row() >= mCustomFields.count() )
73 if ( index.column() < 0 || index.column() > 2 )
76 const CustomField &customField = mCustomFields[ index.row() ];
78 if ( role == Qt::DisplayRole ) {
79 if ( index.column() == 0 )
80 return customField.title();
81 else if ( index.column() == 1 ) {
82 switch ( customField.type() ) {
83 case CustomField::TextType:
84 case CustomField::NumericType:
85 return customField.value();
87 case CustomField::BooleanType:
90 case CustomField::DateType:
92 const QDate value = QDate::fromString( customField.value(), Qt::ISODate );
93 return KGlobal::locale()->formatDate( value, KLocale::ShortDate );
96 case CustomField::TimeType:
98 const QTime value = QTime::fromString( customField.value(), Qt::ISODate );
99 return KGlobal::locale()->formatTime( value );
102 case CustomField::DateTimeType:
104 const QDateTime value = QDateTime::fromString( customField.value(), Qt::ISODate );
105 return KGlobal::locale()->formatDateTime( value );
109 return customField.value();
111 return customField.key();
114 if ( role == Qt::CheckStateRole ) {
115 if ( index.column() == 1 ) {
116 if ( customField.type() == CustomField::BooleanType ) {
117 return (customField.value() == QLatin1String(
"true" ) ? Qt::Checked : Qt::Unchecked);
122 if ( role == Qt::EditRole ) {
123 if ( index.column() == 0 )
124 return customField.title();
125 else if ( index.column() == 1 )
126 return customField.value();
128 return customField.key();
131 if ( role == TypeRole )
132 return customField.type();
134 if ( role == ScopeRole )
135 return customField.scope();
140 bool CustomFieldsModel::setData(
const QModelIndex &index,
const QVariant &value,
int role )
142 if ( !index.isValid() )
145 if ( index.row() < 0 || index.row() >= mCustomFields.count() )
148 if ( index.column() < 0 || index.column() > 2 )
151 CustomField &customField = mCustomFields[ index.row() ];
153 if ( role == Qt::EditRole ) {
154 if ( index.column() == 0 )
155 customField.setTitle( value.toString() );
156 else if ( index.column() == 1 )
157 customField.setValue( value.toString() );
159 customField.setKey( value.toString() );
161 emit dataChanged( index, index );
165 if ( role == Qt::CheckStateRole ) {
166 if ( index.column() == 1 ) {
167 if ( customField.type() == CustomField::BooleanType ) {
168 customField.setValue( static_cast<Qt::CheckState>( value.toInt() ) == Qt::Checked ?
169 QLatin1String(
"true" ) : QLatin1String(
"false" ) );
170 emit dataChanged( index, index );
176 if ( role == TypeRole ) {
177 customField.setType( (CustomField::Type)value.toInt() );
178 emit dataChanged( index, index );
182 if ( role == ScopeRole ) {
184 emit dataChanged( index, index );
191 QVariant CustomFieldsModel::headerData(
int section, Qt::Orientation orientation,
int role )
const
193 if ( section < 0 || section > 1 )
196 if ( orientation != Qt::Horizontal )
199 if ( role != Qt::DisplayRole )
203 return i18nc(
"custom field title",
"Title" );
205 return i18nc(
"custom field value",
"Value" );
208 Qt::ItemFlags CustomFieldsModel::flags(
const QModelIndex &index )
const
210 if ( !index.isValid() || index.row() < 0 || index.row() >= mCustomFields.count() )
211 return QAbstractItemModel::flags( index );
213 const CustomField &customField = mCustomFields[ index.row() ];
215 const Qt::ItemFlags parentFlags = QAbstractItemModel::flags( index );
216 if ( (customField.type() == CustomField::BooleanType) && (index.column() == 1) )
217 return (parentFlags | Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsUserCheckable);
219 return (parentFlags | Qt::ItemIsEnabled | Qt::ItemIsEditable);
222 int CustomFieldsModel::columnCount(
const QModelIndex &parent )
const
224 if ( !parent.isValid() )
230 int CustomFieldsModel::rowCount(
const QModelIndex &parent )
const
232 if ( !parent.isValid() )
233 return mCustomFields.count();
238 bool CustomFieldsModel::insertRows(
int row,
int count,
const QModelIndex &parent )
240 if ( parent.isValid() )
243 beginInsertRows( parent, row, row + count - 1 );
244 for (
int i = 0; i < count; ++i )
251 bool CustomFieldsModel::removeRows(
int row,
int count,
const QModelIndex &parent )
253 if ( parent.isValid() )
256 beginRemoveRows( parent, row, row + count - 1 );
257 for (
int i = 0; i < count; ++i )
258 mCustomFields.remove( row );