6 #include <QtGui/QGraphicsItem>
7 #include <QtGui/QGraphicsEffect>
8 #include <QtGui/QDockWidget>
9 #include <QtGui/QFileDialog>
10 #include <QtCore/QDateTime>
11 #include <QtGui/QToolBar>
44 while (it != metabs.
end())
55 virtual void getScales(std::vector<qreal>& scales,
int step)
63 if (moieties.
size() <= (size_t)step)
return;
65 const CMoiety* moiety = moieties[step];
66 const std::vector<std::pair< C_FLOAT64, CMetab * > > &eqn = moiety->
getEquation();
67 std::map<std::string, double> cnValueMap;
68 std::vector<std::pair< C_FLOAT64, CMetab * > >::const_iterator it = eqn.begin();
70 while (it != eqn.end())
72 cnValueMap[(*it).second->getCN()] = (*it).first;
76 for (
size_t i = 0; i <
mEntries.size(); ++i)
77 scales.push_back(cnValueMap[
mEntries[i]->getCN()]);
95 while (it != reactions.
end())
106 if (task == NULL)
return;
110 if (problem == NULL)
return;
112 const std::vector< CFluxMode >& fluxModes = problem->
getFluxModes();
115 virtual void getScales(std::vector<qreal>& scales,
int step)
121 if (task == NULL)
return;
125 if (problem == NULL)
return;
127 const std::vector< CFluxMode >& fluxModes = problem->
getFluxModes();
130 if (fluxModes.size() <= (size_t)step)
return;
135 std::map<std::string, double> cnValueMap;
139 while (modeIt != mode.
end())
141 const size_t reactionIndex = (*modeIt).first;
142 const double coefficient = (*modeIt).second;
143 cnValueMap[reordered[reactionIndex]->getCN()] = qAbs(coefficient);
147 for (
size_t i = 0; i <
mEntries.size(); ++i)
148 scales.push_back(cnValueMap[
mEntries[i]->getCN()]);
171 max = qMax(max, series->
getData(i, index));
181 max = qMax(max, series->
getData(i, j));
191 const std::string& key =
keyMap[cn];
194 if (series->
getKey(i) == key)
205 virtual void getScales(std::vector<qreal>& scales,
int step)
211 if (task == NULL)
return;
215 if (series == NULL)
return;
224 for (
size_t i = 0; i <
mEntries.size(); ++i)
230 scales.push_back(value / max);
241 while (it != metabs.
end())
244 keyMap[(*it)->getCN()] = (*it)->getKey();
251 if (task == NULL)
return;
255 if (series == NULL)
return;
260 std::map<std::string, std::string>
keyMap;
268 , mpLayoutThread(NULL)
280 , mpLayoutThread(NULL)
290 setUnifiedTitleAndToolBarOnMac(
true);
296 QMenu* viewMenu = menuBar()->addMenu(tr(
"&View"));
297 graphicsView->fillZoomMenu(viewMenu);
299 QToolBar* actionToolbar = this->addToolBar(
"Actions");
300 actionToolbar->addAction(actionExport);
301 actionToolbar->addAction(actionAuto_Layout);
302 actionToolbar->addAction(actionRandomize_Layout);
304 QToolBar* selectToolbar = this->addToolBar(
"Select");
305 graphicsView->fillSelectionToolBar(selectToolbar);
307 QToolBar* viewToolBar = this->addToolBar(
"View");
308 graphicsView->fillZoomTooBar(viewToolBar);
317 addDockWidget(Qt::LeftDockWidgetArea, pParameterWindow);
318 viewMenu->addSeparator();
319 viewMenu->addAction(pParameterWindow->toggleViewAction());
325 QString fileName = QFileDialog::getSaveFileName(
this, tr(
"Export Image"),
327 tr(
"PDF files (*.pdf);;Images (*.png *.xpm *.jpg);;All files (*.*)"));
328 graphicsView->slotSaveToFile(fileName);
361 this->graphicsView->setScene(
mpScene);
364 this->graphicsView->invalidateScene();
372 QAction *action =
dynamic_cast<QAction *
>(sender());
374 if (action == NULL)
return;
376 if (action->text() ==
"View Time Course")
380 else if (action->text() ==
"View Elementary Modes")
384 else if (action->text() ==
"View Conserved Species")
409 mpControls->setVisible(
true);
410 mpControls->setNumSteps(numSteps);
415 mpControls->setVisible(
false);
416 statusBar()->showMessage(
"No data for the animation! Run task first, and load data.", 1000);
422 statusBar()->showMessage(QString(
"Displaying step %1").arg(step + 1), 1000);
442 if (editor.exec() == QDialog::Accepted)
459 #include <QtCore/QAbstractEventDispatcher>
460 #include <QtCore/QAbstractEventDispatcher>
462 #include <QtCore/QTimer>
472 actionAuto_Layout->setChecked(
false);
473 actionAuto_Layout->setText(
"Run Auto Layout");
487 actionAuto_Layout->setChecked(
true);
488 actionAuto_Layout->setText(
"Stop Auto Layout");
502 if (sender() != NULL && !actionAuto_Layout->isChecked())
const CLayout * getCurrentLayout() const
void slotAutoLayout()
Slots the auto layout.
const size_t & getRecordedSteps() const
virtual void getScales(std::vector< qreal > &scales, int step)
void createSpringLayout(CLayout *layout, int numIntervals=1000, int updateWait=100)
static void tagLayout(CLayout *layout)
void removeFromMainWindow(CopasiUI3Window *window=NULL)
const size_t & getNumVariables() const
virtual int getNumSteps()
virtual void removeFromScene(CQLayoutScene &scene)
CCopasiProblem * getProblem()
virtual void getScales(std::vector< qreal > &scales, int step)
const CCopasiVector< CMetab > & getMetabolites() const
virtual size_t size() const
void slotRandomizeLayout()
virtual ~CQAnimationWindow()
void toggleUI(bool isPlaying)
double getMax(const CTimeSeries *series, size_t index=C_INVALID_INDEX)
CCopasiDataModel * mpModel
size_t getIndex(const CTimeSeries *series, const std::string &cn)
const std::vector< std::pair< C_FLOAT64, CMetab * > > & getEquation() const
virtual QMenu * getWindowMenu() const
const CCopasiVector< CMoiety > & getMoieties() const
void setScene(CQLayoutScene *scene, CCopasiDataModel *dataModel)
void setAnimation(CQCopasiAnimation *animation, CCopasiDataModel *dataModel)
const std::string & getKey(const size_t &variable) const
std::vector< CType * >::const_iterator const_iterator
const std::vector< CFluxMode > & getFluxModes() const
void slotLayoutStateChanged(QSharedPointer< CLayoutState > state)
virtual void initialize(const CCopasiDataModel &dataModel)
CQLayoutThread * mpLayoutThread
virtual void getScales(std::vector< qreal > &scales, int step)
static const QIcon & icon(const IconID &id)
virtual void initialize(const CCopasiDataModel &model)=0
CCopasiVectorN< CCopasiTask > * getTaskList()
const_iterator begin() const
const std::vector< const CReaction * > & getReorderedReactions() const
std::map< size_t, std::string > indexMap
const CTimeSeries & getTimeSeries() const
const C_FLOAT64 & getData(const size_t &step, const size_t &variable) const
void randomizeLayout(CLayout *layout)
void saveTo(CQCopasiAnimation *target)
void slotSwitchAnimation()
std::vector< CQEffectDescription * > mEntries
QDockWidget * getParameterWindow()
std::map< size_t, C_FLOAT64 >::const_iterator const_iterator
virtual void closeEvent(QCloseEvent *closeEvent)
CCopasiVectorNS< CReaction > & getReactions()
const CCopasiDataModel * mpDataModel
virtual void initialize(const CCopasiDataModel &dataModel)
virtual void applyToScene(CQLayoutScene &scene, int step)
double getValue(const CTimeSeries *series, const std::string &cn, int step)
std::map< std::string, std::string > keyMap
CQCopasiAnimation * mAnimation
void initFrom(CQCopasiAnimation *other)
const_iterator end() const
virtual void initialize(const CCopasiDataModel &dataModel)