diff --git a/src/mainbase.h b/src/mainbase.h
new file mode 100644
--- /dev/null
+++ b/src/mainbase.h
@@ -0,0 +1,153 @@
+/*
+ *
+ * $Id$
+ *
+ * This file is part of the Virtual Leaf.
+ *
+ * The Virtual Leaf 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.
+ *
+ * The Virtual Leaf 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 .
+ *
+ * Copyright 2010 Roeland Merks.
+ *
+ */
+
+
+#ifndef _MAINBASE_H_
+#define _MAINBASE_H_
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include "mesh.h"
+#include "warning.h"
+
+using namespace std;
+
+/*! Implement these functions in your main application */
+class MainBase {
+
+ public:
+ MainBase(QGraphicsScene &c, Mesh &m) : mesh(m), canvas(c) {
+
+ // Standard options for batch version
+ showcentersp = false;
+ showmeshp = false;
+ showbordercellp = false;
+ shownodenumbersp = false;
+ showcellnumbersp = false;
+ showcellsaxesp = false;
+ showcellstrainp = false;
+ movieframesp = true;
+ showboundaryonlyp = false;
+ showwallsp = false;
+ showfluxesp = false;
+ dynamicscellsp = true;
+ showtooltipsp = false;
+ hidecellsp = false;
+ }
+ virtual ~MainBase() {};
+
+ virtual double TimeStep();
+ virtual void Init(char *leaffile=0);
+
+ virtual bool ShowCentersP(void) {return showcentersp;}
+ virtual bool ShowMeshP(void) {return showmeshp; }
+ virtual bool ShowBorderCellsP(void) {return showbordercellp; }
+ virtual bool PausedP(void) {return false; }
+ virtual bool ShowNodeNumbersP(void) {return shownodenumbersp; }
+ virtual bool ShowCellNumbersP(void) {return showcellnumbersp;}
+ virtual bool ShowCellAxesP(void) {return showcellsaxesp;}
+ virtual bool ShowCellStrainP(void) {return showcellstrainp;}
+ virtual bool MovieFramesP(void) {return movieframesp;}
+ virtual bool ShowBoundaryOnlyP(void) {return showboundaryonlyp;}
+ virtual bool ShowToolTipsP(void) {return showtooltipsp;}
+ virtual bool ShowWallsP(void) {return showwallsp;}
+ virtual bool ShowApoplastsP(void) { return showapoplastsp;}
+ virtual bool ShowFluxesP(void) { return showfluxesp; }
+ virtual bool DynamicCellsP(void) { return dynamicscellsp; }
+ virtual void FitCanvasToWindow() {};
+ virtual void FitLeafToCanvas() {};
+ virtual bool HideCellsP(void) { return hidecellsp; }
+ virtual void clear(void) {
+ QList list = canvas.items();
+ QList::Iterator it = list.begin();
+ for (; it != list.end(); ++it) {
+ if ( *it )
+ delete *it;
+ }
+ };
+ virtual void XMLReadSettings(xmlNode *settings);
+ virtual double getFluxArrowsize(void) { return 10.;}
+
+ /* void Save(const char *fname, const char *format, int width=640) {
+
+ //cerr << "Initializing Pixmap\n";
+
+ cerr << "Saving to file " << fname << endl;
+ QPixmap *image=new QPixmap(width, (int) (((double)canvas.height()/
+ (double)canvas.width())*((double)width)));
+
+ //QPicture *image = new QPicture();
+
+ //cerr << "Done initializing QPixmap image(640, " << (((double)canvas.height()/(double)canvas.width())*640.) << ")\n";
+ QPainter im(image);
+ //cerr << "Done initializing image\n";
+ im.scale((double)width/canvas.width(),(double)width/canvas.width());
+ canvas.render(&im, QRectF(0,0,canvas.width(),canvas.height()) );
+ //im.end();
+ image->save(QString(fname), format);
+ }*/
+
+
+ void Save(const char *fname, const char *format, int sizex=640, int sizey=480);
+ void CutSAM(void);
+
+ void Plot(int resize_stride=10);
+
+ virtual void UserMessage(QString message, int timeout = 0) {
+ cerr << message.toAscii().constData() << endl;
+ }
+ Mesh &mesh;
+
+ protected:
+ QGraphicsScene &canvas;
+ virtual xmlNode *XMLSettingsTree(void) const;
+
+ protected:
+ bool showcentersp;
+ bool showmeshp;
+ bool showbordercellp;
+ bool shownodenumbersp;
+ bool showcellnumbersp;
+ bool showcellsaxesp;
+ bool showcellstrainp;
+ bool movieframesp;
+ bool showboundaryonlyp;
+ bool showwallsp;
+ bool showapoplastsp;
+ bool showfluxesp;
+ bool dynamicscellsp;
+ bool showtooltipsp;
+ bool hidecellsp;
+};
+
+//#include
+#define TIMESTEP double MainBase::TimeStep(void)
+#define INIT void MainBase::Init(char *leaffile)
+
+#endif