Files @ 15d600891648
Branch filter:

Location: EI/VirtualLeaf/src/canvas.h - annotation

Michael Guravage
In DrawCell class (VirtualLeaf.cpp) - iterate over NChem to construct info_string. Additional cleanup.

--
user: Michael Guravage <michael.guravage@cwi.nl>
branch 'default'
changed src/ChangeLog
changed src/Neighbor.cpp
changed src/Neighbor.h
changed src/OptionFileDialog.cpp
changed src/OptionFileDialog.h
changed src/UniqueMessage.cpp
changed src/UniqueMessage.h
changed src/VirtualLeaf.cpp
changed src/VirtualLeaf.pro
changed src/build_models/plugin_auxingrowth.pro
changed src/build_models/plugin_meinhardt.pro
changed src/build_models/plugin_test.pro
changed src/canvas.cpp
changed src/canvas.h
changed src/cell.cpp
changed src/cell.h
changed src/cellbase.cpp
changed src/cellbase.h
changed src/cellitem.cpp
changed src/cellitem.h
changed src/forwardeuler.cpp
changed src/forwardeuler.h
changed src/infobar.h
changed src/libplugin.pro
changed src/mainbase.cpp
changed src/mainbase.h
changed src/matrix.cpp
changed src/matrix.h
changed src/mesh.cpp
changed src/mesh.h
changed src/miscq.cpp
changed src/miscq.h
changed src/modelcatalogue.cpp
changed src/modelcatalogue.h
changed src/node.cpp
changed src/node.h
changed src/nodeitem.cpp
changed src/nodeitem.h
changed src/nodeset.cpp
changed src/nodeset.h
changed src/output.cpp
changed src/output.h
changed src/parameter.cpp
changed src/parameter.h
changed src/pardialog.cpp
changed src/parse.cpp
changed src/parse.h
changed src/pi.h
changed src/qcanvasarrow.h
changed src/random.cpp
changed src/random.h
changed src/rungekutta.cpp
changed src/rungekutta.h
changed src/simitembase.cpp
changed src/simitembase.h
changed src/simplugin.h
changed src/sqr.h
changed src/tiny.h
changed src/transporterdialog.cpp
changed src/transporterdialog.h
changed src/vector.cpp
changed src/vector.h
changed src/wall.cpp
changed src/wall.h
changed src/wallbase.cpp
changed src/wallbase.h
changed src/wallitem.cpp
changed src/wallitem.h
changed src/warning.cpp
changed src/warning.h
changed src/xmlwrite.cpp
changed src/xmlwrite.h
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
15d600891648
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
15d600891648
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
15d600891648
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
782330072e62
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
2c972342206d
c34d1e30d5b4
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
a58b80c85b6f
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
4f82fc35a2b3
4f82fc35a2b3
4f82fc35a2b3
79f94eaa3b9e
782330072e62
79f94eaa3b9e
782330072e62
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
4f82fc35a2b3
4f82fc35a2b3
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
782330072e62
782330072e62
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
15d600891648
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
79f94eaa3b9e
782330072e62
79f94eaa3b9e
782330072e62
/*
 *
 *  $Id$
 *
 *  This file is part of the Virtual Leaf.
 *
 *  VirtualLeaf is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  VirtualLeaf is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with the Virtual Leaf.  If not, see <http://www.gnu.org/licenses/>.
 *
 *  Copyright 2010 Roeland Merks.
 *
 */

#ifndef _CANVAS_H_
#define _CANVAS_H_

#include <q3popupmenu.h>
#include <q3mainwindow.h>
#include <q3intdict.h>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QList>

#include <string>
#include <sstream>

//Added by qt3to4:
#include <QMouseEvent>
#include <vector>
#include "simitembase.h"
#include "mainbase.h"
#include "cellitem.h"
#include "infobar.h"

#include "nodeitem.h"
#include "cell.h"

#ifdef HAVE_QWT
#include "data_plot.h"
#endif

#include <libxml/xpath.h>
#include <libxml/xmlreader.h>

#if defined(Q_OS_MAC)
#define PREFIX "cmd"
#else
#define PREFIX "crtl"
#endif


class QFile;
class QDir;
class ModelCatalogue;
class InfoBar;

class FigureEditor : public QGraphicsView {
  Q_OBJECT

    friend class Main;
 public:
  FigureEditor(QGraphicsScene&, Mesh&, QWidget* parent=0, const char* name=0, Qt::WFlags f=0);
  void clear();
  void Save(const char *fname, const char *format, int sizex=640, int sizey=480);
  void FullRedraw(void);

 protected:
  void mousePressEvent(QMouseEvent*);
  void mouseMoveEvent(QMouseEvent*);
  void mouseReleaseEvent(QMouseEvent*);
  void wheelEvent(QWheelEvent *event);
  void scaleView(qreal scaleFactor);

  vector <CellItem *> getIntersectedCells(void);
  void insertNode(QPointF p);
  NodeItem *selectedNodeItem(QList<QGraphicsItem *> l) const;  

 signals:
  void status(const QString&);
  void MousePressed(void);
  void MouseReleased(void);
 protected:
  Mesh &mesh;

 private:
  //NodeItem* moving;
  SimItemBase *moving;
  QPointF moving_start;

  QGraphicsLineItem *intersection_line;
  bool rotation_mode;
  bool insert_mode;
  double rot_angle;
};

class Main : public Q3MainWindow, public MainBase {
  Q_OBJECT
    friend class ModelCatalogue; // needs to populate menu item models
 public:
  Main(QGraphicsScene&, Mesh&, QWidget* parent=0, const char* name=0, Qt::WFlags f=0);
  ~Main();
  virtual bool ShowCentersP(void) {return view->isItemChecked(com_id);}
  virtual bool ShowMeshP(void) {return view->isItemChecked(mesh_id);}
  virtual bool ShowBorderCellsP(void) {return view->isItemChecked(border_id);}
  virtual bool PausedP(void) {return run->isItemChecked(paused_id);}
  virtual bool ShowNodeNumbersP(void) {return view->isItemChecked(node_number_id);}
  virtual bool ShowCellNumbersP(void) {return view->isItemChecked(cell_number_id);}
  virtual bool ShowCellAxesP(void) {return view->isItemChecked(cell_axes_id);}
  virtual bool ShowCellStrainP(void) {return view->isItemChecked(cell_strain_id);}
  virtual bool MovieFramesP(void) {return view->isItemChecked(movie_frames_id);}
  virtual bool ShowBoundaryOnlyP(void) {return view->isItemChecked(only_boundary_id);}
  virtual bool ShowWallsP(void) {return view->isItemChecked(cell_walls_id);}
 // virtual bool ShowApoplastsP(void) { return view->isItemChecked(apoplasts_id);}
  virtual bool ShowFluxesP(void) { return view->isItemChecked(fluxes_id); }
  virtual bool DynamicCellsP(void) { return options->isItemChecked(dyn_cells_id); }
  virtual bool RotationModeP(void) { return options->isItemChecked(rotation_mode_id); }
  virtual bool InsertModeP(void) { return options->isItemChecked(insert_mode_id); }
  virtual bool ShowToolTipsP(void) { return helpmenu->isItemChecked(tooltips_id); }
  virtual bool HideCellsP(void) { return view->isItemChecked(hide_cells_id); }
  void scale(double factor); 
  virtual double getFluxArrowsize(void)
  {
    return flux_arrow_size;
  }

  void FitCanvasToWindow();
  void FitLeafToCanvas(void);


  public slots:

  void about();
  void gpl();
  void TimeStepWrap();
  void togglePaused();
  void setFluxArrowSize(int size);
  void RestartSim(void);
  void toggleShowCellCenters(void);
  void toggleShowNodes(void);
  void toggleShowBorderCells(void);
  void toggleShowFluxes(void);
  void toggleNodeNumbers(void);
  void toggleCellNumbers(void);
  void toggleCellAxes(void);
  void toggleCellStrain(void);
  void toggleShowWalls(void);
  void toggleShowApoplasts(void);
  void toggleDynCells(void);
  void toggleMovieFrames(void);
  void toggleLeafBoundary(void);
  void toggleHideCells(void);
  void print();
  void startSimulation(void);
  void stopSimulation(void);
  void RefreshInfoBar(void);

  void EnterRotationMode(void)
  {

    UserMessage("Rotation mode. Click mouse to exit.");
    if (editor) {
      editor->rot_angle = 0. ; 

      // Exit rotation mode if mouse is clicked
      connect(editor, SIGNAL(MousePressed()), this, SLOT(ExitRotationMode()));
      
      editor->setMouseTracking(true);

    }

  }
  void ExitRotationMode(void)
  { 
    UserMessage("Exited rotation mode.",2000);

    options->setItemChecked(rotation_mode_id, false); 
    if (editor)
      disconnect(editor, SIGNAL(MousePressed()), this, SLOT(ExitRotationMode()));
    editor->setMouseTracking(false);
 
  }

  virtual void UserMessage(QString message, int timeout=0);
  void Refresh(void) { Plot(); }
  void PauseIfRunning(void);
  void ContIfRunning(void);
  virtual void XMLReadSettings(xmlNode *settings);

  private slots:
  void aboutQt();
  void newView();
  void EditParameters();
  void readStateXML();
  int readStateXML(const char *filename, bool geometry = true, bool pars=true, bool simtime = true);
  void readNextStateXML();
  void readPrevStateXML();
  void readFirstStateXML();
  void readLastStateXML();
  void saveStateXML();
  void snapshot();
  void savePars();
  void readPars();
  void clear();
  void init();
  virtual void CutSAM() { MainBase::CutSAM(); Refresh();}

  void enlarge();
  void shrink();
  void zoomIn();
  void zoomOut();

  void CleanMesh();
  void CleanMeshChemicals(void);
  void CleanMeshTransporters(void);

  void RandomizeMesh();

 signals:
  void SimulationDone(void);
  void ParsChanged(void);

 protected:
  Mesh &mesh;

 private:
  NodeSet *node_set;
  FigureEditor *editor;
  Q3PopupMenu* options;
  Q3PopupMenu *view;
  Q3PopupMenu *run;
  QMenu *modelmenu;
  Q3PopupMenu *helpmenu;

  QPrinter* printer;
  const QDir *working_dir;
  QString currentFile;
  //  toggle item states 
  int dbf_id; // options->Double Buffer
  int com_id; // view->Show centers
  int mesh_id; // view->Show mesh
  int node_number_id; // view->Show Node numbers
  int cell_number_id; // view->Show Cell numbers
  int border_id; // view->Show border cells
  int paused_id; // run->Simulation paused
  int cell_axes_id; // view->Show cell axes
  int cell_strain_id; // view->Show cell strain
  int only_boundary_id; // view ->Show only leaf boundary
  int cell_walls_id; // view -> Show transporters
  //int apoplasts_id; // view -> Show apoplasts
  int tooltips_id; // help -> Show Cell Info
  int hide_cells_id; // view->Hide Cells
  double flux_arrow_size;
  int movie_frames_id;
  int fluxes_id;
  int dyn_cells_id;
  int rotation_mode_id;
  int insert_mode_id;
  QTimer *timer;
  QFile *gifanim;
  bool running;
  virtual xmlNode *XMLSettingsTree(void);
  static const QString caption;
  static const QString caption_with_file;
  InfoBar *infobar;
};

#endif

/* finis*/