--- /dev/null
+// Copyright (C) 2006 Erik Dahlberg
+//
+// This file is part of LSystem3d.
+//
+// LSystem3D 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 2
+// of the License, or (at your option) any later version.
+//
+// LSystem3D 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 LSystem3D; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+
+
+#ifndef OPENGLWINDOW_H
+#define OPENGLWINDOW_H
+
+#include <string>
+#include <vector>
+
+#include <glui.h>
+
+#include "lindenmayersystem.h"
+#include "lsystemparameters.h"
+#include "model.h"
+
+using namespace std;
+
+
+
+/**
+ * OpenGL drawing context
+ */
+class OpenGLWindow
+{
+public:
+ /**
+ * Constructor
+ */
+ OpenGLWindow();
+
+ /**
+ * Destructor
+ */
+ ~OpenGLWindow();
+
+ /**
+ * Start generation of l-system data
+ */
+ void generate();
+
+ /**
+ * Move camera left
+ */
+ void left();
+
+ /**
+ * Move camera right
+ */
+ void right();
+
+ /**
+ * Move camera up
+ */
+ void up();
+
+ /**
+ * Move camera down
+ */
+ void down();
+
+ /**
+ * Move camera forth
+ */
+ void forth();
+
+ /**
+ * Move camera back
+ */
+ void back();
+
+ /**
+ * Zoom in
+ */
+ void zoomIn();
+
+ /**
+ * Zoom out
+ */
+ void zoomOut();
+
+ /**
+ * Rotate around y-axis
+ */
+ void rotateY();
+
+ /**
+ * Draw l-system model to screen
+ */
+ void draw();
+
+ /**
+ * Reset to default view
+ */
+ void defaultView();
+
+ /**
+ * Check if live mode is activated
+ * @return true, if activated
+ */
+ bool liveActivated();
+
+protected:
+
+ // Model view
+ double _xModel, // model coordinate (starting point)
+ _yModel,
+ _zModel;
+ double _scaleModel; // model scale factor
+ double _yRotationModel; // model rotation
+
+ // L-system
+ LindenmayerSystem *_lsystem; // l-system generator
+ Model *_model; // the generated l-system model
+ LSystemParameters _lsystemParameters; // saves/loads l-system parameters from file
+ string lsystemParametersPath; // where to find the l-system rules
+
+ // Rendering window
+ int _window; // the rendering window
+ bool _busyGenerating; // currently generating?
+
+ // GUI window
+ GLUI *_glui; // the GUI window
+ GLUI_EditText *_axiomEditText; // axiom textbox
+ vector<GLUI_EditText *> _ruleEditTexts; // rule textboxes
+ GLUI_Spinner *_angleSpinner; // angle spinner
+ GLUI_Spinner *_iterationsSpinner; // iteration spinner
+ GLUI_Checkbox *_liveCheckbox; // live checkbox
+ int _liveUpdates; // status of live checkbox
+};
+
+
+
+#endif