00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "NamedValuesVectorModel.h"
00025 #include <QtDebug>
00026 #include <QtGui>
00027
00028 #include <NamedValuesVectorModel.moc>
00029
00030 namespace Aseba
00031 {
00034
00035 NamedValuesVectorModel::NamedValuesVectorModel(NamedValuesVector* namedValues, const QString &tooltipText, QObject *parent) :
00036 QAbstractTableModel(parent),
00037 namedValues(namedValues),
00038 tooltipText(tooltipText),
00039 wasModified(false)
00040 {
00041 Q_ASSERT(namedValues);
00042 }
00043
00044 NamedValuesVectorModel::NamedValuesVectorModel(NamedValuesVector* namedValues, QObject *parent) :
00045 QAbstractTableModel(parent),
00046 namedValues(namedValues),
00047 wasModified(false)
00048 {
00049 Q_ASSERT(namedValues);
00050 }
00051
00052 int NamedValuesVectorModel::rowCount(const QModelIndex & parent) const
00053 {
00054 Q_UNUSED(parent)
00055 return namedValues->size();
00056 }
00057
00058 int NamedValuesVectorModel::columnCount(const QModelIndex & parent) const
00059 {
00060 Q_UNUSED(parent)
00061 return 2;
00062 }
00063
00064 QVariant NamedValuesVectorModel::data(const QModelIndex &index, int role) const
00065 {
00066 if (!index.isValid())
00067 return QVariant();
00068
00069 if (role == Qt::DisplayRole)
00070 {
00071 if (index.column() == 0)
00072 return QString::fromStdString(namedValues->at(index.row()).name);
00073 else
00074 return namedValues->at(index.row()).value;
00075 }
00076 else if (role == Qt::ToolTipRole && !tooltipText.isEmpty())
00077 {
00078 return tooltipText.arg(index.row());
00079 }
00080 else
00081 return QVariant();
00082 }
00083
00084 QVariant NamedValuesVectorModel::headerData(int section, Qt::Orientation orientation, int role) const
00085 {
00086 Q_UNUSED(section)
00087 Q_UNUSED(orientation)
00088 Q_UNUSED(role)
00089 return QVariant();
00090 }
00091
00092 Qt::ItemFlags NamedValuesVectorModel::flags(const QModelIndex & index) const
00093 {
00094 if (index.column() == 0)
00095 return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled;
00096 else
00097 return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
00098 }
00099
00100 QStringList NamedValuesVectorModel::mimeTypes () const
00101 {
00102 QStringList types;
00103 types << "text/plain";
00104 return types;
00105 }
00106
00107 QMimeData * NamedValuesVectorModel::mimeData ( const QModelIndexList & indexes ) const
00108 {
00109 QString texts;
00110 foreach (QModelIndex index, indexes)
00111 {
00112 if (index.isValid() && (index.column() == 0))
00113 {
00114 QString text = data(index, Qt::DisplayRole).toString();
00115 texts += text;
00116 }
00117 }
00118
00119 QMimeData *mimeData = new QMimeData();
00120 mimeData->setText(texts);
00121 return mimeData;
00122 }
00123
00124 bool NamedValuesVectorModel::setData(const QModelIndex &index, const QVariant &value, int role)
00125 {
00126 Q_ASSERT(namedValues);
00127 if (index.isValid() && role == Qt::EditRole)
00128 {
00129 if (index.column() == 1)
00130 {
00131 namedValues->at(index.row()).value = value.toInt();
00132 emit dataChanged(index, index);
00133 wasModified = true;
00134 return true;
00135 }
00136 }
00137 return false;
00138 }
00139
00140 void NamedValuesVectorModel::addNamedValue(const NamedValue& namedValue)
00141 {
00142 Q_ASSERT(namedValues);
00143
00144 unsigned position = namedValues->size();
00145
00146 beginInsertRows(QModelIndex(), position, position);
00147
00148 namedValues->push_back(namedValue);
00149 wasModified = true;
00150
00151 endInsertRows();
00152 }
00153
00154 void NamedValuesVectorModel::delNamedValue(int index)
00155 {
00156 Q_ASSERT(namedValues);
00157 Q_ASSERT(index < (int)namedValues->size());
00158
00159 beginRemoveRows(QModelIndex(), index, index);
00160
00161 namedValues->erase(namedValues->begin() + index);
00162 wasModified = true;
00163
00164 endRemoveRows();
00165 }
00166
00167 void NamedValuesVectorModel::clear()
00168 {
00169 Q_ASSERT(namedValues);
00170
00171 if (namedValues->size() == 0)
00172 return;
00173
00174 beginRemoveRows(QModelIndex(), 0, namedValues->size()-1);
00175
00176 namedValues->clear();
00177 wasModified = true;
00178
00179 endRemoveRows();
00180 }
00181
00183 };