summaryrefslogtreecommitdiff
path: root/src/dic-options/UnusedFieldsListModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dic-options/UnusedFieldsListModel.cpp')
-rw-r--r--src/dic-options/UnusedFieldsListModel.cpp111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/dic-options/UnusedFieldsListModel.cpp b/src/dic-options/UnusedFieldsListModel.cpp
new file mode 100644
index 0000000..3311285
--- /dev/null
+++ b/src/dic-options/UnusedFieldsListModel.cpp
@@ -0,0 +1,111 @@
+#include "UnusedFieldsListModel.h"
+#include "../dictionary/CardPack.h"
+#include "../dictionary/Dictionary.h"
+
+#include <QMimeData>
+
+UnusedFieldsListModel::UnusedFieldsListModel( DictionaryOptionsDialog* aParent ):
+ DraggableListModel( aParent ), m_parentRow( 0 )
+ {
+ updateUnusedFields();
+ }
+
+
+int UnusedFieldsListModel::rowCount(const QModelIndex& /*parent*/) const
+ {
+ return m_unusedFields.size();
+ }
+
+QVariant UnusedFieldsListModel::data( const QModelIndex &index, int role ) const
+ {
+ if (!index.isValid())
+ return QVariant();
+ if (index.row() >= rowCount())
+ return QVariant();
+
+ switch( role )
+ {
+ case Qt::DisplayRole:
+ case Qt::EditRole:
+ return m_unusedFields.value(index.row())->name();
+ default:
+ return QVariant();
+ }
+ }
+
+void UnusedFieldsListModel::updateUnusedFields()
+ {
+ beginResetModel();
+ m_unusedFields.clear();
+ CardPack* pack = m_parent->m_dict.cardPack( m_parentRow );
+ if( !pack )
+ return;
+ QList<const Field*> packFields = pack->getFields();
+ for( int i=0; i < m_parent->m_dict.fieldsNum(); i++ )
+ {
+ const Field* dictField = m_parent->m_dict.field( i );
+ if( !packFields.contains( dictField ) )
+ m_unusedFields << dictField;
+ }
+ endResetModel();
+ }
+
+void UnusedFieldsListModel::changeParentRow( const QModelIndex& aIndex )
+ {
+ m_parentRow = aIndex.row();
+ updateUnusedFields();
+ emit layoutChanged();
+ }
+
+bool UnusedFieldsListModel::setData(const QModelIndex& index, const QVariant& aValue, int role)
+ {
+ if( !index.isValid() || role != Qt::EditRole )
+ return false;
+ const Field* field = m_parent->m_dict.field( aValue.toString() );
+ if( !field )
+ return false;
+ m_unusedFields[index.row()] = field;
+ emit dataChanged(index, index);
+ return true;
+ }
+
+bool UnusedFieldsListModel::insertRows(int position, int rows, const QModelIndex &/*parent*/)
+ {
+ beginInsertRows(QModelIndex(), position, position+rows-1);
+ for (int row = 0; row < rows; ++row)
+ m_unusedFields.insert( position, m_parent->m_emptyField );
+ endInsertRows();
+ updateUnusedFields();
+ return true;
+ }
+
+bool UnusedFieldsListModel::removeRows(int position, int rows, const QModelIndex &/*parent*/)
+ {
+ beginRemoveRows(QModelIndex(), position, position+rows-1);
+ for (int row = 0; row < rows; ++row)
+ m_unusedFields.removeAt( position );
+ endRemoveRows();
+ updateUnusedFields();
+ return true;
+ }
+
+const void* UnusedFieldsListModel::dataPtr( const QModelIndex& aIndex ) const
+ {
+ const Field* field = m_unusedFields.value( aIndex.row() );
+ return static_cast<const void*>( field );
+ }
+
+void UnusedFieldsListModel::insertPointer( int aPos, void* aData )
+ {
+ m_unusedFields.insert( aPos, static_cast<Field*>( aData ) );
+ }
+
+bool UnusedFieldsListModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
+ int /*row*/, int /*column*/, const QModelIndex &/*parent*/)
+ {
+ if (action == Qt::IgnoreAction)
+ return true;
+ if (!data->hasFormat("application/octet-stream"))
+ return false;
+ return true;
+ }