38 #include <QtGui/QComboBox>
39 #include <QtGui/QToolTip>
53 mIgnoreFcnDescriptionChange(false),
77 mpExpressionEMSW->mpExpressionWidget->setFunction(
"");
78 connect(mpExpressionEMSW->mpExpressionWidget->getValidator(), SIGNAL(stateChanged(
bool)),
this, SLOT(
slotFcnDescriptionChanged(
bool)));
81 mpExpressionEMSW->mpBtnExpressionObject->hide();
85 mpExpressionEMSW->mpBtnSaveExpression->setToolTip(tr(
"save formula"));
86 mpExpressionEMSW->mpBtnEditExpression->setToolTip(tr(
"edit formula"));
93 QColor subsColor(255, 210, 210);
94 QColor prodColor(210, 255, 210);
95 QColor modiColor(250, 250, 190);
96 QColor paraColor(210, 210, 255);
97 QColor volColor(210, 210, 255);
98 QColor timeColor(210, 210, 210);
109 if (dynamic_cast<CKinFunction *>(
mpFunction) &&
116 QStringList functionType;
124 assert(pDataModel != NULL);
126 assert(pModel != NULL);
136 std::vector<std::string> units = ddd.findDimensionsBoth(pModel);
142 Table1->setRowCount((
int) params.
size());
144 for (j = 0; j < params.
size(); j++)
146 usage = params[j]->getUsage();
152 params[j]->setUsage(usage);
184 color = QColor(250, 250, 250);
189 color = QColor(255, 20, 20);
194 QString Name =
FROM_UTF8(params[j]->getObjectName());
196 if (!params[j]->isUsed())
199 if (Table1->item((
int) j,
COL_NAME) == NULL)
201 QTableWidgetItem *newItem =
new QTableWidgetItem(Name);
202 newItem->setFlags(Qt::ItemIsDragEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
203 Table1->setItem((
int) j,
COL_NAME, newItem);
206 Table1->item((
int) j,
COL_NAME)->setText(Name);
208 Table1->item((
int) j,
COL_NAME)->setBackground(QBrush(color));
211 QTableWidgetItem *newItem2 =
new QTableWidgetItem();
212 newItem2->setFlags(Qt::ItemIsDragEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
213 Table1->setItem((
int) j,
COL_USAGE, newItem2);
214 Table1->item((
int) j,
COL_USAGE)->setBackground(QBrush(color));
216 QComboBox *comboItem =
new QComboBox(Table1);
217 comboItem->addItems(Usages);
218 comboItem->setCurrentIndex(comboItem->findText(qUsage));
221 Table1->setCellWidget((
int) j,
COL_USAGE, comboItem);
224 connect(comboItem, SIGNAL(activated(
const QString &)),
this, SLOT(
slotTableValueChanged(
const QString &)));
225 comboItem->setObjectName(QString::number(j));
230 if (Table1->item((
int) j,
COL_UNIT) == NULL)
232 QTableWidgetItem *newItem =
new QTableWidgetItem(strUnit);
233 newItem->setFlags(Qt::ItemIsDragEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
234 Table1->setItem((
int) j,
COL_UNIT, newItem);
237 Table1->item((
int) j,
COL_UNIT)->setText(strUnit);
239 Table1->item((
int) j,
COL_UNIT)->setBackground(QBrush(color));
242 Table1->horizontalHeader()->setStretchLastSection(
true);
243 Table1->resizeColumnsToContents();
244 Table1->resizeRowsToContents();
257 std::vector<std::string> stringlist;
258 bool checkSubstrates =
false;
259 bool checkProducts =
false;
261 if (RadioButton1->isChecked() ==
true)
263 stringlist.push_back(
"Only reversible reactions");
264 checkSubstrates =
true;
265 checkProducts =
true;
267 else if (RadioButton2->isChecked() ==
true)
269 stringlist.push_back(
"Only irreversible reactions");
270 checkSubstrates =
true;
278 stringlist.push_back(
"At least one substrate");
283 std::stringstream ss;
287 ss <<
"No substrate";
299 stringlist.push_back(ss.str());
308 stringlist.push_back(
"At least one product");
312 std::stringstream ss;
329 stringlist.push_back(ss.str());
333 if (stringlist.size() == 0)
334 stringlist.push_back(
"None");
338 QString Restrictions(
"");
339 QString Separator(
"");
341 for (row = 0; row < stringlist.size(); ++row)
343 Restrictions += Separator +
FROM_UTF8(stringlist[row]);
347 mpEditApplicationRestrictions->setText(Restrictions);
357 RadioButton3->setEnabled(
true);
358 RadioButton3->setChecked(
true);
362 RadioButton2->setEnabled(
true);
363 RadioButton2->setChecked(
true);
367 RadioButton1->setEnabled(
true);
368 RadioButton1->setChecked(
true);
392 size_t len = desc.length();
401 char ch = desc.at(l);
403 if ((ch ==
'+') || (ch ==
'-') || (ch ==
'*') || (ch ==
'/') || (ch ==
',') || (ch ==
' '))
412 desc.insert(l, 1,
'\n');
422 mpExpressionEMSW->setReadOnly(
mReadOnly);
429 mpExpressionEMSW->updateWidget();
459 for (i = 0; i < pfunctParam.
size(); i++)
466 if (functParam[index]->getUsage() != pfunctParam[i]->getUsage())
470 functParam[index]->setUsage(pfunctParam[i]->getUsage());
474 if (functParam[index]->getType() != pfunctParam[i]->getType())
478 functParam[index]->setType(pfunctParam[i]->getType());
485 functParam.
add(*pfunctParam[i]);
490 if (pfunctParam.
size() != functParam.
size())
492 for (j = 0; j < functParam.
size(); j++)
500 functParam.
remove(functParam[j]->getObjectName());
512 if (!func)
return false;
521 if (!func)
return false;
526 if (RadioButton1->isChecked() ==
true)
530 else if (RadioButton2->isChecked() ==
true)
611 QMessageBox::Ok | QMessageBox::Default,
612 QMessageBox::NoButton);
621 int curRow = sender()->objectName().toInt();
623 QComboBox *comboItem = (QComboBox *) sender();
631 functParam[curRow]->setUsage(usage);
649 std::string name =
"function_1";
659 name +=
TO_UTF8(QString::number(i));
664 std::string key = pFunc->
getKey();
680 if (pFunctionDB == NULL)
685 if (pFunction == NULL)
688 QMessageBox::StandardButton choice =
696 case QMessageBox::Ok:
764 if (pFunctionDB == NULL)
769 if (pFunction == NULL)
779 std::set< const CCopasiObject * > Functions;
780 std::set< const CCopasiObject * > Reactions;
781 std::set< const CCopasiObject * > Metabolites;
782 std::set< const CCopasiObject * > Values;
783 std::set< const CCopasiObject * > Compartments;
784 std::set< const CCopasiObject * > Events;
786 std::set< const CCopasiObject * > DeletedObjects = pFunction->
getDeletedObjects();
790 if (Functions.size() > 0)
792 msg.append(
"Following functions(s) reference above:\n ");
794 std::set< const CCopasiObject * >::const_iterator it = Functions.begin();
795 std::set< const CCopasiObject * >::const_iterator end = Functions.end();
797 for (; it != end; ++it)
799 msg.append(
FROM_UTF8((*it)->getObjectName()));
803 msg.remove(msg.length() - 2, 2);
807 Compartments, Values, Events);
809 if (Reactions.size() > 0)
811 msg.append(
"Following reactions(s) reference above:\n ");
813 std::set< const CCopasiObject * >::const_iterator it = Reactions.begin();
814 std::set< const CCopasiObject * >::const_iterator end = Reactions.end();
816 for (; it != end; ++it)
818 msg.append(
FROM_UTF8((*it)->getObjectName()));
822 msg.remove(msg.length() - 2, 2);
825 if (Metabolites.size() > 0)
827 msg.append(
"Following species reference above:\n ");
829 std::set< const CCopasiObject * >::const_iterator it = Metabolites.begin();
830 std::set< const CCopasiObject * >::const_iterator end = Metabolites.end();
832 for (; it != end; ++it)
834 msg.append(
FROM_UTF8((*it)->getObjectName()));
838 msg.remove(msg.length() - 2, 2);
841 if (Values.size() > 0)
843 msg.append(
"Following global quantities reference above:\n ");
845 std::set< const CCopasiObject * >::const_iterator it = Values.begin();
846 std::set< const CCopasiObject * >::const_iterator end = Values.end();
848 for (; it != end; ++it)
850 msg.append(
FROM_UTF8((*it)->getObjectName()));
854 msg.remove(msg.length() - 2, 2);
857 if (Compartments.size() > 0)
859 msg.append(
"Following compartment(s) reference above:\n ");
861 std::set< const CCopasiObject * >::const_iterator it = Compartments.begin();
862 std::set< const CCopasiObject * >::const_iterator end = Compartments.end();
864 for (; it != end; ++it)
866 msg.append(
FROM_UTF8((*it)->getObjectName()));
870 msg.remove(msg.length() - 2, 2);
873 if (Events.size() > 0)
875 msg.append(
"Following event(s) reference above:\n ");
877 std::set< const CCopasiObject * >::const_iterator it = Events.begin();
878 std::set< const CCopasiObject * >::const_iterator end = Events.end();
880 for (; it != end; ++it)
882 msg.append(
FROM_UTF8((*it)->getObjectName()));
886 msg.remove(msg.length() - 2, 2);
892 msg, QMessageBox::Ok, QMessageBox::Ok);
901 mpExpressionEMSW->updateWidget();
CModel::AreaUnit getAreaUnitEnum() const
static const CCopasiMessage & peekLastMessage()
CCopasiVectorN< CFunction > & loadedFunctions()
static const std::string DataTypeName[]
void switchToOtherWidget(const size_t &id, const std::string &key)
const std::string & getObjectName() const
CModel::QuantityUnit getQuantityUnitEnum() const
CCopasiObject * get(const std::string &key)
bool isVector(CFunctionParameter::Role role) const
size_t findParameterByName(const std::string &name, CFunctionParameter::DataType &dataType) const
size_t getNumberOfParametersByUsage(CFunctionParameter::Role usage) const
const CEvaluationTree::Type & getType() const
static StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=Ok, StandardButton defaultButton=NoButton)
virtual size_t getIndex(const std::string &name) const
void changed(const bool &changed=true)
virtual bool setInfix(const std::string &infix)
const std::string & getKey() const
void setUseHeuristics(bool flag)
void setReversible(const TriLogic &reversible)
void add(const CFunctionParameter ¶meter)
bool appendDependentModelObjects(const std::set< const CCopasiObject * > &candidates, std::set< const CCopasiObject * > &dependentReactions, std::set< const CCopasiObject * > &dependentMetabolites, std::set< const CCopasiObject * > &dependentCompartments, std::set< const CCopasiObject * > &dependentModelValues, std::set< const CCopasiObject * > &dependentEvents) const
const TriLogic & isReversible() const
static StandardButton confirmDelete(QWidget *parent, const QString &objectType, const QString &objects, const std::set< const CCopasiObject * > &deletedObjects)
static CEvaluationTree * copy(const CEvaluationTree &src)
void remove(const std::string &name)
static CCopasiVector< CCopasiDataModel > * getDatamodelList()
CModel::LengthUnit getLengthUnitEnum() const
bool appendDependentFunctions(std::set< const CCopasiObject * > candidates, std::set< const CCopasiObject * > &dependentFunctions) const
CCopasiObject::DataObjectSet getDeletedObjects() const
static CFunctionDB * getFunctionList()
CModel::TimeUnit getTimeUnitEnum() const
static CKeyFactory * getKeyFactory()
bool removeFunction(size_t index)
static StandardButton critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons=Ok, StandardButton defaultButton=NoButton)
static const std::string RoleNameDisplay[]
bool fl(const C_FLOAT64 &d1, const C_FLOAT64 &d2)
static CCopasiMessage getLastMessage()
The class for handling a chemical kinetic function.
CModel::VolumeUnit getVolumeUnitEnum() const
const std::string & getInfix() const
CFunctionParameters & getVariables()
bool add(CFunction *pFunction, const bool &adopt)