Widget / L-system sync functions.
[lsystem3d.git] / src / gui.h
index b5664c89c15fb0ed80060fbd0d3e39eea874d086..ae0e793013e75fa3678920a80ac30a80c89c66e5 100644 (file)
--- a/src/gui.h
+++ b/src/gui.h
@@ -1,6 +1,6 @@
 // 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;
+
 
 
 /**
@@ -44,53 +48,127 @@ public:
     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
 };