+ * 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 GUI::onLoad(FXObject *sender, FXSelector selector, void *data)
+{
+ FXString loadFilename = FXFileDialog::getOpenFilename(this, "Load file...", ".");
+
+ if (!loadFilename.empty())
+ {
+ // load from disk
+ loadLSystem(loadFilename.text());
+ }
+}
+
+
+
+/**
+ * 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 GUI::onSave(FXObject *sender, FXSelector selector, void *data)
+{
+ FXString saveFilename = FXFileDialog::getSaveFilename(this, "Save file...", ".");
+
+ if (FXStat::exists(saveFilename))
+ {
+ // the file already exists
+
+ if (MBOX_CLICKED_YES == FXMessageBox::question(this, MBOX_YES_NO, "Overwrite file", "Overwrite existing file?"))
+ {
+ // overwrite file
+ _lsystemParameters.save(_lsystem, saveFilename.text());
+ }
+ }
+ else
+ {
+ // save to file
+ _lsystemParameters.save(_lsystem, saveFilename.text());
+ }
+}
+
+
+
+/**
+ * Called by the system when the close button or the File->Quit command item is selected
+ * @param sender the sender object
+ * @param selector message type and id
+ * @param data event related data
+ * @return
+ */
+long GUI::onQuit(FXObject *sender, FXSelector selector, void *data)
+{
+ getApp()->exit(0);
+
+ return 1;
+}
+
+
+
+/**
+ * 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 GUI::onHelpUsage(FXObject *sender, FXSelector selector, void *data)
+{
+ _helpUsageMessageBox->show(PLACEMENT_OWNER);
+}
+
+
+
+/**
+ * Called by the system when the Help->Rules menu command is selected