11 #include <QtCore/QString>
67 return Qt::ItemIsEnabled;
74 return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
76 return QAbstractItemModel::flags(index);
82 return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
90 return QAbstractItemModel::flags(index) & ~Qt::ItemIsEnabled;
94 return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsEnabled;
96 return QAbstractItemModel::flags(index) & ~Qt::ItemIsEditable & ~Qt::ItemIsEnabled;
103 return QAbstractItemModel::flags(index) & ~Qt::ItemIsEditable & ~Qt::ItemIsEnabled;
105 return QAbstractItemModel::flags(index) | Qt::ItemIsEditable | Qt::ItemIsEnabled;
108 return QAbstractItemModel::flags(index);
113 if (!index.isValid())
119 if (index.column() > 0 && role == Qt::ForegroundRole && !(
flags(index) & Qt::ItemIsEditable))
120 return QColor(Qt::darkGray);
122 if (role == Qt::DisplayRole || role == Qt::EditRole)
126 switch (index.column())
129 return QVariant(QString(
""));
132 return QVariant(QString(
"New Species"));
139 if (compartments.
size())
140 return QVariant(QString(
FROM_UTF8(compartments[0]->getObjectName())));
142 return QVariant(QString(
""));
151 return QVariant(QString::number(1.0,
'g', 10));
153 return QVariant(QString(
""));
159 return QVariant(QString(
""));
161 return QVariant(QString::number(100.0,
'g', 10));
165 return QVariant(QString(
""));
172 switch (index.column())
175 return QVariant(index.row() + 1);
188 if (role == Qt::EditRole)
196 if (role == Qt::EditRole)
222 if (pExpression != NULL)
226 return QVariant(QString(
""));
233 if (pExpression != NULL)
236 return QVariant(QString(
""));
248 if (role != Qt::DisplayRole)
251 if (orientation == Qt::Horizontal)
255 if (pModel == NULL)
return QVariant();
257 QString ValueUnits, RateUnits, FrequencyUnits, ExpressionUnits;
262 if (!ValueUnits.isEmpty())
263 ValueUnits =
"\n(" + ValueUnits +
")";
268 if (!RateUnits.isEmpty())
269 RateUnits =
"\n(" + RateUnits +
")";
274 if (!FrequencyUnits.isEmpty())
275 FrequencyUnits =
"\n(" + FrequencyUnits +
")";
277 if (!ValueUnits.isEmpty() && !RateUnits.isEmpty())
279 if (ValueUnits == RateUnits)
280 ExpressionUnits = ValueUnits;
285 else if (!ValueUnits.isEmpty())
287 else if (!RateUnits.isEmpty())
293 return QVariant(QString(
"#"));
296 return QVariant(QString(
"Name"));
299 return QVariant(QString(
"Compartment"));
302 return QVariant(QString(
" Type "));
305 return QVariant(
"Initial Concentration" + ValueUnits);
308 return QVariant(QString(
"Initial Number"));
311 return QVariant(
"Concentration" + ValueUnits);
314 return QVariant(QString(
"Number"));
317 return QVariant(
"Rate" + RateUnits);
320 return QVariant(
"Number Rate" + FrequencyUnits);
323 return QVariant(
"Initial Expression" + ValueUnits);
326 return QVariant(
"Expression" + ExpressionUnits);
333 return QString(
"%1").arg(section + 1);
339 if (index.isValid() && role == Qt::EditRole)
354 else if (index.data() == value)
388 std::string Compartment(
TO_UTF8(value.toString()));
399 +
"from compartment '" +
FROM_UTF8(CompartmentToRemove) +
"' to compartment '" +
FROM_UTF8(Compartment) +
"'\n"
400 +
"since a species with that name already exist in the target compartment.";
403 "Unable to move Species",
405 QMessageBox::Ok, QMessageBox::Ok);
464 emit dataChanged(index, index);
489 beginInsertRows(QModelIndex(), position, position + rows - 1);
491 for (
int row = 0; row < rows; ++row)
512 beginRemoveRows(QModelIndex(), position, position + rows - 1);
516 std::vector< std::string > DeletedKeys;
517 DeletedKeys.resize(rows);
519 std::vector< std::string >::iterator itDeletedKey;
520 std::vector< std::string >::iterator endDeletedKey = DeletedKeys.end();
524 for (itDeletedKey = DeletedKeys.begin(); itDeletedKey != endDeletedKey; ++itDeletedKey, ++itRow)
526 *itDeletedKey = (*itRow)->getKey();
529 for (itDeletedKey = DeletedKeys.begin(); itDeletedKey != endDeletedKey; ++itDeletedKey)
548 assert(pDataModel != NULL);
556 QList <CMetab *> pSpecies;
557 QModelIndexList::const_iterator i;
559 for (i = rows.begin(); i != rows.end(); ++i)
565 QList <CMetab *>::const_iterator j;
567 for (j = pSpecies.begin(); j != pSpecies.end(); ++j)
572 pModel->
getMetabolites().CCopasiVector< CMetab >::getIndex(pSpecie);
576 QMessageBox::StandardButton choice =
581 if (choice == QMessageBox::Ok)
const CExpression * getExpressionPtr() const
Header file of class CExpression.
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
void setFlagConc(bool flag)
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
CQSpecieDM(QObject *parent=0)
#define COL_IEXPRESSION_SPECIES
static const std::string StatusName[]
const C_FLOAT64 & getRate() const
const CCopasiVector< CMetab > & getMetabolites() const
#define TOTAL_COLS_SPECIES
void notifyGUI(ListViews::ObjectType objectType, ListViews::Action action, const std::string &key="")
std::string getConcentrationRateUnitsDisplayString() const
const std::string & getObjectName() const
std::string getFrequencyUnitsDisplayString() const
virtual size_t size() const
bool removeMetabolite(const std::string &key, const bool &recursive=true)
Qt::ItemFlags flags(const QModelIndex &index) const
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
virtual void setValue(const C_FLOAT64 &value)
const std::string & getDisplayString() const
static StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=Ok, StandardButton defaultButton=NoButton)
#define COL_CONCENTRATION
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole)
const QStringList & getTypes()
QVariant data(const QModelIndex &index, int role) const
#define COL_EXPRESSION_SPECIES
bool removeRow(int position)
virtual const std::string & getKey() const
const C_FLOAT64 & getInitialValue() const
virtual const std::string & getKey() const
static StandardButton confirmDelete(QWidget *parent, const QString &objectType, const QString &objects, const std::set< const CCopasiObject * > &deletedObjects)
bool insertRows(int position, int rows, const QModelIndex &index=QModelIndex())
std::string getInitialExpression() const
static CCopasiVector< CCopasiDataModel > * getDatamodelList()
QString createNewName(const QString name, const int nameCol)
std::string getConcentrationUnitsDisplayString() const
CCopasiVectorNS< CCompartment > & getCompartments()
bool removeRows(QModelIndexList rows, const QModelIndex &index=QModelIndex())
const C_FLOAT64 & getValue() const
virtual void setInitialValue(const C_FLOAT64 &initialValue)
const CModelEntity::Status & getStatus() const
const std::vector< unsigned C_INT32 > & getItemToType()
virtual bool isDefaultRow(const QModelIndex &i) const
bool setObjectName(const std::string &name)
const CExpression * getInitialExpressionPtr() const
CCompartment * createCompartment(const std::string &name, const C_FLOAT64 &volume=1.0)
#define COL_ICONCENTRATION
CMetab * createMetabolite(const std::string &name, const std::string &compartment, const C_FLOAT64 &iconc=1.0, const CModelEntity::Status &status=CModelEntity::REACTIONS)
std::vector< unsigned C_INT32 > mItemToType