This tutorial covers how to save/load static parameters in your projects.
In a newRGG project, add a new file called “paramfile”. (in the file explorer click “new>file>”, enter paramfile - no extensions).
In the Model.rgg file copy:
import java.io.Writer; import java.io.Reader; import de.grogra.pf.ui.registry.RunAfterSave; import de.grogra.pf.ui.registry.RunAfterLoad; import de.grogra.pf.registry.RegistryContext; global float myFloat = 1f; public static int myInt = 3; public static String myString = "initValue"; public class LoadParam implements RunAfterLoad{ public void load(RegistryContext ctx){ Object f = getFileFromProject("paramfile"); Reader r = ctx.getRegistry().getFileSystem().getReader(f); char[] buf = new char[2048]; r.read(buf); String alltext = new String (buf); String[] lines = alltext.split("\n"); for (String line : lines){ String[] param = line.split("="); if ("myInt".contentEquals(param[0])) { myInt = Integer.valueOf(param[1]); } else if ("myString".contentEquals(param[0])){ myString = param[1]; } } } } public class SaveParam implements RunAfterSave{ public void save(RegistryContext ctx){ Object f = getFileFromProject("paramfile"); Writer w = ctx.getRegistry().getFileSystem().getWriter(f, false); w.append("myInt="+myInt+"\n"); w.append("myString="+myString+"\n"); w.close(); } } protected void init () [ Axiom ==> ; ] public void r(){ myInt ++; myString = "anotherValue"; myFloat++; } public void p () { println(myInt); println(myString); println(myFloat); }
Note:
myFloat is not included in the save and load methods. As a global it is automatically included in GroIMP serialization.paramfile is). recompiled or reset.
You can run the r() command to change the value of the variables. Save the project, close it, re open it, and run p() to print their current value.
The PropFile plugin includes some methods to:
Example with the previous file:
import de.grogra.pf.ui.registry.RunAfterSave; import de.grogra.pf.ui.registry.RunAfterLoad; import de.grogra.pf.registry.RegistryContext; import de.grogra.propFile.TypedTextPropertyFile; public static int myInt = 3; public static String myString = "initValue"; public class LoadParam implements RunAfterLoad{ public void load(RegistryContext ctx){ TypedTextPropertyFile props = TypedTextPropertyFile.fromProjectFile("paramfile", ctx); props.load(); myInt = props.get("myInt", myInt); myString = props.get("myString", myString); } } public class SaveParam implements RunAfterSave{ public void save(RegistryContext ctx){ TypedTextPropertyFile props = TypedTextPropertyFile.fromProjectFile("paramfile", ctx); props.clear(); props.set("myInt", myInt); props.set("myString", myString); props.save(); } }