First an explination of whats what in todays picture - The big squares are the waterfall, the little square on the top is a plug (they all have one these except the root). The little squares on the bottom are sockets (zero to many of these. You can plug multiple plugs into one socket and assign probabilities, eg probability of having a mansard or gabled roof ontop of a particular type of floor layout.
Well, four days in and I've made good progress on the GUI. It feels quite polished now (despite lack of polishing). Today I added the ability to make and break links between components(waterfalls). You can also set the probabilities for each subsequent compent using a nice slider sytem. This updates the colour of the lines to show which of the subsequent components is most likely.
I also had the idea of colouring the plugs to show what could be plugged into what. The idea is that you could have a doorstep profile creator that returns a plug of type line. The door then has a line socket. This means that you cant plug a roof into a door door-step profile(good!). Its quite sucessful, but I'm not sure it will work all the way because the type system is based on hierarchical classes extending one another, so you could put a green plug into a red socket, but not a blue plug into a red socket. I wonder if theres an easy way to show inference through colours
Next step is to create the GUI parameters for each waterfall. Which parameters a waterfall has are coded into it:
public ProbInt VAR_numberSections = new ProbInt(1,Integer.MAX_VALUE, 0, 1);
public String DEF_numberSections = "number of floorspace segments joined together";
public ProbDouble VAR_story = new ProbDouble(0.1,100,0.5,1);
public String DEF_story = "how tall is one story";
Using java's funky reflection i'm gonna extract straight out of the code and create a properties panel for each waterfall without having to code them up in GUI/swing stuff. It'll be neat if it works. As I work on this I also have to figure out a way to save and load the waterfalls so I might do that at the same time.