11 #ifdef COPASI_BANDED_GRAPH
13 #endif // COPASI_BANDED_GRAPH
27 #include <QtGui/QListWidgetItem>
28 #include <QtCore/QList>
29 #include <QtCore/QMap>
30 #include <QtGui/QMessageBox>
41 #ifdef COPASI_BANDED_GRAPH
42 , mpBandedGraphWidget(NULL)
54 #ifdef COPASI_BANDED_GRAPH
57 QToolButton * buttonBandedGraph =
new QToolButton(
this);
58 buttonBandedGraph->setText(
"New Banded Graph");
59 layoutCurves->addWidget(buttonBandedGraph);
60 connect(buttonBandedGraph, SIGNAL(clicked()),
this, SLOT(addBandedGraphSlot()));
63 mpStack->addWidget(mpBandedGraphWidget);
65 #endif // COPASI_BANDED_GRAPH
71 if (item == NULL || !mpStack->isEnabled())
return NULL;
73 QWidget *widget = mpStack->currentWidget();
99 if (item == NULL)
return;
103 if (oldName != newName)
105 mList.remove(oldName);
107 mList.insert(newName, item);
124 #if COPASI_BANDED_GRAPH
125 else if (mpStack->currentWidget() == mpBandedGraphWidget)
141 QList<QListWidgetItem*>::const_iterator it;
150 std::vector<CPlotDataChannelSpec> channels = current->
getChannels();
158 mList[(*it)->text()] = newItem;
184 #ifdef COPASI_BANDED_GRAPH
185 void CQPlotSubwidget::addBandedGraphSlot()
190 #endif // COPASI_BANDED_GRAPH
200 return mpListPlotItems->currentRow();
207 for (
int i = mpListPlotItems->count(); i >= 0; --i)
213 mpListPlotItems->clear();
219 for (
int i = 0; i < mpListPlotItems->count(); ++i)
221 if (mpListPlotItems->item(i)->text() == item->text())
232 delete mList[item->text()];
233 mList.remove(item->text());
236 delete mpListPlotItems->takeItem(
getRow(item));
241 QListWidgetItem *item = mpListPlotItems->item(index);
249 mpListPlotItems->clearSelection();
253 if (mpListPlotItems->count() == 0)
256 if (index < 0 && mpListPlotItems->count() > 0)
259 if (index >= mpListPlotItems->count())
260 index = mpListPlotItems->count() - 1;
262 mpListPlotItems->setCurrentRow(index, QItemSelectionModel::Select);
269 mpListPlotItems->clearSelection();
271 while (
mList.contains(title))
279 mpListPlotItems->addItem(listItem);
281 mpListPlotItems->setCurrentRow(mpListPlotItems->count() - 1);
289 #ifdef COPASI_BANDED_GRAPH
293 mpStack->setCurrentIndex(2);
294 return mpBandedGraphWidget;
301 mpStack->setCurrentIndex(1);
307 mpStack->setCurrentIndex(0);
327 mpStack->setEnabled(
false);
353 std::vector< const CCopasiObject * > vector1;
354 std::vector< const CCopasiObject * > vector2;
358 assert(pDataModel != NULL);
361 if (pBrowser->exec() == QDialog::Rejected)
367 if (vector1.size() == 0 || vector2.size() == 0)
372 std::vector<CCopasiObjectName> objects1, objects2;
374 std::vector<CCopasiObjectName>::const_iterator sit;
383 for (i = 0; i < vector1.size(); i++)
388 if ((pArray = dynamic_cast< const CArrayAnnotation * >(vector1[i])))
394 if (!pObject)
continue;
396 cn = pObject->
getCN();
399 cn = vector1[i]->getCN();
402 for (sit = objects1.begin(); sit != objects1.end(); ++sit)
404 if (*sit == cn)
break;
408 if (sit == objects1.end())
410 objects1.push_back(cn);
415 for (i = 0; i < vector2.size(); i++)
420 if ((pArray = dynamic_cast< const CArrayAnnotation * >(vector2[i])))
424 std::vector<const CCopasiObject*>::const_iterator it;
426 for (it = vvv.begin(); it != vvv.end(); ++it)
433 for (sit = objects2.begin(); sit != objects2.end(); ++sit)
434 if (*sit == cn)
break;
436 if (sit == objects2.end())
437 objects2.push_back(cn);
442 cn = vector2[i]->getCN();
445 for (sit = objects2.begin(); sit != objects2.end(); ++sit)
446 if (*sit == cn)
break;
448 if (sit == objects2.end())
449 objects2.push_back(cn);
454 if (objects1.size() == 1)
456 for (i = 0; i < objects2.size(); ++i)
461 objects1[0], objects2[i]);
464 else if (objects2.size() == 1)
466 for (i = 0; i < objects1.size(); ++i)
471 objects1[i], objects2[0]);
478 if (objects1.size() > objects2.size())
479 imax = objects2.size();
481 imax = objects1.size();
483 for (i = 0; i < imax; ++i)
488 objects1[i], objects2[i]);
493 #ifdef COPASI_BANDED_GRAPH
494 void CQPlotSubwidget::addBandedGraphTab(
const std::string & title,
507 void CQPlotSubwidget::addBandedGraph()
510 std::vector< const CCopasiObject * > vector1;
511 std::vector< const CCopasiObject * > vector2;
515 assert(pDataModel != NULL);
518 if (pBrowser->exec() == QDialog::Rejected)
524 if (vector1.size() == 0 || vector2.size() == 0)
529 std::vector<CCopasiObjectName> objects1, objects2;
531 std::vector<CCopasiObjectName>::const_iterator sit;
540 for (i = 0; i < vector1.size(); i++)
545 if ((pArray = dynamic_cast< const CArrayAnnotation * >(vector1[i])))
551 if (!pObject)
continue;
553 cn = pObject->
getCN();
556 cn = vector1[i]->getCN();
559 for (sit = objects1.begin(); sit != objects1.end(); ++sit)
561 if (*sit == cn)
break;
565 if (sit == objects1.end())
567 objects1.push_back(cn);
572 for (i = 0; i < vector2.size(); i++)
577 if ((pArray = dynamic_cast< const CArrayAnnotation * >(vector2[i])))
581 std::vector<const CCopasiObject*>::const_iterator it;
583 for (it = vvv.begin(); it != vvv.end(); ++it)
590 for (sit = objects2.begin(); sit != objects2.end(); ++sit)
591 if (*sit == cn)
break;
593 if (sit == objects2.end())
594 objects2.push_back(cn);
599 cn = vector2[i]->getCN();
602 for (sit = objects2.begin(); sit != objects2.end(); ++sit)
603 if (*sit == cn)
break;
605 if (sit == objects2.end())
606 objects2.push_back(cn);
611 if (objects1.size() == 1)
613 for (i = 0; i < objects2.size(); ++i)
618 objects1[0], objects2[i]);
621 else if (objects2.size() == 1)
623 for (i = 0; i < objects1.size(); ++i)
628 objects1[i], objects2[0]);
635 if (objects1.size() > objects2.size())
636 imax = objects2.size();
638 imax = objects1.size();
640 for (i = 0; i < imax; ++i)
645 objects1[i], objects2[i]);
649 #endif // COPASI_BANDED_GRAPH
672 for (i = 1; i < objects.size(); ++i)
675 addHisto1DTab(
"Histogram: " + objects[i]->getObjectDisplayName(),
688 QList<QListWidgetItem*> selection = mpListPlotItems->selectedItems();
690 if (selection.size() == 0)
693 if (QMessageBox::question(
this,
"Delete Curves", QString(
"Do you really want to delete the %1 selected curve(s)?").arg(selection.size()), QMessageBox::Yes, QMessageBox::No | QMessageBox::Default) == QMessageBox::Yes)
696 for (
int index = selection.size() - 1; index >= 0; --index)
722 assert(pDataModel != NULL);
734 std::string deletedKey =
mKey;
754 if (pDataModel == NULL)
return;
759 std::string name = baseName;
766 name = baseName +
TO_UTF8(QString::number(i));
773 std::string key = pPl->CCopasiParameter::getKey();
786 if (pDataModel == NULL)
return;
788 std::string name =
"plot_";
791 name +=
TO_UTF8(QString::number(i));
797 name +=
TO_UTF8(QString::number(i));
800 std::string key = pPl->CCopasiParameter::getKey();
817 if (!pspec)
return false;
822 titleLineEdit->setText(pspec->
getTitle().c_str());
825 activeCheckBox->setChecked(pspec->
isActive());
832 #ifdef COPASI_BANDED_GRAPH
835 #endif // COPASI_BANDED_GRAPH
837 checkLogX->setChecked(pspec->
isLogX());
838 checkLogY->setChecked(pspec->
isLogY());
849 mpListPlotItems->clearSelection();
855 QStringList PlotItems;
857 for (; it != end; ++it)
859 QString title =
FROM_UTF8((*it)->getTitle());
860 PlotItems.append(title);
865 mpListPlotItems->addItems(PlotItems);
869 mpListPlotItems->setCurrentRow(0, QItemSelectionModel::Select);
884 if (!pspec)
return true;
896 pspec->
setActive(activeCheckBox->isChecked());
899 pspec->
setLogX(checkLogX->isChecked());
900 pspec->
setLogY(checkLogY->isChecked());
907 QMap<QString, CPlotItem*>::iterator it;
909 for (it =
mList.begin(); it !=
mList.end(); ++it)
913 if (currentItem == NULL)
continue;
956 if (items.size() <= 1)
return true;
958 QList<CPlotItem::Type> listOfUniqueTypes;
960 QList<QListWidgetItem*>::const_iterator it = items.begin();
962 while (it != items.end())
964 QString currentText = (*it)->text();
967 if (!listOfUniqueTypes.contains(item->
getType()))
968 listOfUniqueTypes.append(item->
getType());
973 return listOfUniqueTypes.size() == 1;
979 QList<QListWidgetItem*> current = mpListPlotItems->selectedItems();
981 if (current.size() == 0)
983 mpStack->setEnabled(
false);
985 else if (current.size() == 1)
987 mpStack->setEnabled(
true);
989 (
static_cast<CQPlotEditWidget*
>(mpStack->currentWidget()))->setMultipleEditMode(
false);
995 mpStack->setEnabled(
false);
999 mpStack->setEnabled(
true);
1001 (
static_cast<CQPlotEditWidget*
>(mpStack->currentWidget()))->setMultipleEditMode(
true);
CCopasiDataModel * getObjectDataModel()
CCopasiObject * getDataObject(const CCopasiObjectName &CN) const
virtual std::string getObjectDisplayName(bool regular=true, bool richtext=false) const
void switchToOtherWidget(const size_t &id, const std::string &key)
virtual CCopasiObjectName getCN() const
const std::string & getObjectName() const
virtual size_t size() const
CCopasiObject * get(const std::string &key)
void setActive(const bool &active)
void addChannel(const CPlotDataChannelSpec &channel)
std::vector< CPlotDataChannelSpec > & getChannels()
void setActivity(const COutputInterface::Activity &activity)
virtual size_t getIndex(const std::string &name) const
const bool & isActive() const
void changed(const bool &changed=true)
static std::vector< const CCopasiObject * > chooseCellMatrix(const CArrayAnnotation *pArrayAnnotation, bool single, bool value, std::string caption="")
virtual bool add(const CType &src)
void setModel(CModel *model, const CQSimpleSelectionTree::ObjectClasses &classes)
void setType(CPlotItem::Type type)
virtual bool add(const CType &src)
const CPlotItem::Type & getType() const
bool setValue(const std::string &name, const CType &value)
static CCopasiVector< CCopasiDataModel > * getDatamodelList()
bool removePlotSpec(const std::string &key)
CPlotSpecification * createPlotSpec(const std::string &name, CPlotItem::Type type=CPlotItem::plot2d)
const COutputInterface::Activity & getActivity() const
static CKeyFactory * getKeyFactory()
Header file of class CArrayAnnotation.
const COutputDefinitionVector * getPlotDefinitionList() const
const CCopasiVector< CPlotItem > & getItems() const
bool fl(const C_FLOAT64 &d1, const C_FLOAT64 &d2)
const std::string & getTitle() const
bool setObjectName(const std::string &name)
void setOutputVectors(std::vector< const CCopasiObject * > *outputVector1, std::vector< const CCopasiObject * > *outputVector2)
void setTitle(const std::string &title)