// Copyright (C) 2006 Erik Dahlberg
//
-// This file is part of LSystem3d.
+// 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
#ifndef GUI_H
#define GUI_H
+#include <string>
+
#include "fx.h"
#include "lindenmayersystem.h"
#include "lsystemparameters.h"
#include "renderingsurface.h"
+using namespace std;
+
/**
enum
{
ID_GENERATE = FXMainWindow::ID_LAST,
+ ID_LOAD,
+ ID_SAVE,
+ ID_QUIT,
+ ID_HELP_USAGE,
+ ID_HELP_RULES,
ID_LAST
};
-
+
+
/**
* Constructor
- * @param application the FOX application object
+ * @param application the application object
* @param renderingSurface the rendering surface
- * @param lsystem the Lindenmayer-system
+ * @param lsystem the Lindenmayer system generator
*/
GUI(FXApp *application, RenderingSurface *renderingSurface, LindenmayerSystem *lsystem);
-
+
+ /**
+ * Destructor
+ */
+ virtual ~GUI();
+
+
/**
* Create and initialize the window
*/
- void create();
-
+ virtual void create();
+
+
/**
- * Called by the system when the "generate"-button is pressed
+ * Called by the system when the "Generate" button is pressed
* @param sender the sender object
* @param selector message type and id
* @param data event related data
* @return
*/
- long onGenerateButtonPressed(FXObject *sender, FXSelector selector, void *data);
-
+ long onGenerate(FXObject *sender, FXSelector selector, void *data);
+
+ /**
+ * Called by the system when the File->Load menu command is selected
+ * @param sender the sender object
+ * @param selector message type and id
+ * @param data event related data
+ * @return
+ */
+ long onLoad(FXObject *sender, FXSelector selector, void *data);
+
+ /**
+ * Called by the system when the File->Save menu command is selected
+ * @param sender the sender object
+ * @param selector message type and id
+ * @param data event related data
+ * @return
+ */
+ long onSave(FXObject *sender, FXSelector selector, void *data);
+
+ /**
+ * Called by the system when the close button or the File->Quit menu command is selected
+ * @param sender the sender object
+ * @param selector message type and id
+ * @param data event related data
+ * @return
+ */
+ long onQuit(FXObject *sender, FXSelector selector, void *data);
+
+ /**
+ * Called by the system when the Help->Usage menu command is selected
+ * @param sender the sender object
+ * @param selector message type and id
+ * @param data event related data
+ * @return
+ */
+ long onHelpUsage(FXObject *sender, FXSelector selector, void *data);
+
+ /**
+ * Called by the system when the Help->Rules menu command is selected
+ * @param sender the sender object
+ * @param selector message type and id
+ * @param data event related data
+ * @return
+ */
+ long onHelpRules(FXObject *sender, FXSelector selector, void *data);
+
protected:
/**
* Constructor
*/
GUI() {}
+
+
+ /**
+ * Put content of widgets into the L-system
+ */
+ void widgetsToLsystem();
+
+ /**
+ * Put content of the L-system into widgets
+ */
+ void lsystemToWidgets();
-private:
// GUI widgets
+ FXMenuPane *_fileMenuPane; // File menu
+ FXMenuPane *_helpMenuPane; // Help menu
+
FXTextField *_axiomTextField; // Axiom
FXText *_rulesText; // Rules
FXRealSpinner *_angleRealSpinner; // Angle
- FXSpinner *_iterationsSpinner; // Iterations
+ FXSpinner *_depthSpinner; // Depth
FXRealSpinner *_diameterRealSpinner; // Diameter
- FXRealSpinner *_diameterFactorRealSpinner; // Diameter factor //TODO: "diameter factor"?
+ FXRealSpinner *_diameterFactorRealSpinner; // Diameter factor
+
+ FXMessageBox *_helpUsageMessageBox; // Usage help dialog
+ FXMessageBox *_helpRulesMessageBox; // Rules help dialog
- LindenmayerSystem *_lsystem; // The Lindenmayer-system
- LSystemParameters _lsystemParameters; // Saves/loads l-system parameters from file
+ LindenmayerSystem *_lsystem; // The Lindenmayer system generator
+ LSystemParameters _lsystemParameters; // Saver and loader for L-system parameters
RenderingSurface *_renderingSurface; // The rendering surface
};