GeoGebra Layout Manager Blog
Week 1 : 24/05 - 28/05
The first week. :) I looked through the prototype code and came to the conclusion that the class layout of the "layout" package has to be changed in order to create a consistent programming interface. I'm also investigating possible (maintainable!) solutions for #21 and they also point into the direction of changing the public API of the layout manager -- especially the gui manager is making the whole situation hard to handle (again). I'm currently thinking about an interface for the layout manager included in the non-gui packages in order to create a nice interface without using the gui manager as the glorious method-chainer again.
Week 2 : 31/05 - 04/06
Implemented LayoutBridge, an interface for the layout manager located in the main package to solve the problem mentioned above. The layout class implements this interface, so the instance of LayoutBridge which can be used by the application is actually the layout itself. Works fine so far. Fixed #21 by adding a public method to the layout bridge to check if the event source is possibly an external window.
Week 3 : 07/06 - 11/06
Discussed possible enhancements of the general user interface with a community member. Collected bug reports for my todo list.
Week 4 : 14/06 - 18/06
Collected ideas with the community how the user interface could be simplified to improve accessibility. The basic idea was to create a central dialog for all accessibility related functions, described in #148.
Week 5 : 21/06 - 25/06
Implemented a few minor features for the layout manager, but they are not stable yet. Fixed divider resizing options.
Week 6 / 7 : 28/06 - 09/07
Worked on GeoGebra 3D integration into the layout manager. The basic integration was easy, but the heavyweight nature of Canvas3D still creates some problems. At the beginning it was just possible to enlarge the canvas, but that was a simple bug with minimum size which could be fixed easily. Dividers above the canvas can still not be drawn, looked through the UI classes for JSplitPane and somehow heavyweight components are considered, but I can see no effect nor a place in the OpenJDK implementation where that information is used. The same applies to the preview box, but that's less important. I probably have to use Mathieu's freeze() method to convert the canvas to a lightweight component before the user tries to resize the canvas or before any components are dragged around.
Week 8 / 9: 12/07 - 23/07
Talked with Markus. Instead of using our own jar loading code it's also possible to use jar indexing where the JRE takes care of loading the necessary classes with much greater flexibility than the old solution (no need to specially hide the classes loaded from external jars). We came to the conclusion that the current solution for the DefaultGuiManager should be refactored. I tried to look through and really understand the gui manager, but the interconnections are really complex. Refactored the classes at the end, but I haven't found a good way to resolve the interconnections. Removed the LayoutBrigde as there is no need for that anymore.
Week 10 : 26/07 - 30/07
Collected ideas for further enhancements, especially view-specific tool bars and formatting bars. The ideas still has to be fleshed out a bit, there are still some open points I have to discuss with Markus.
Week 11 : 02/08 - 06/08
Bug fixing. Enhancements to old loading algorithm for files created in previous versions without the layout manager. Almost works now, but there seems to be a bug in the layout manager with divider locations — I hate split panes. ;) Fixed a lot of bugs and prepared the layout manager for styling bars and further enhancements. Last week now before the hard pencil down date and still a lot of things to finish.
Week 12 : 09/08 - 13/08
Finished documentation, added styling bar, fixed bugs.
