This milestone required a graphical user interface for our project, and in my opinion was probably the most challenging of all the milestones. We were kind of thrown into the deep end on this milestone with very little prior information on GUIs in Squeak. The only information taught was just a couple of lectures on MVC.
Here is a picture of our finished GUI.
Not the best quality picture, but you get the idea.
Some would argue that this design is not very intuitive, but with some use, it
is actually quite handy.
All information about a person is done via FillInTheBlankMorphs that appear when a button along the top. Once a person has been entered, function can be performed on individual persons and the whole family tree of a person can be viewed via the buttons along the bottom of the screen. The big green area is where the family tree is displayed. The Text Area on the bottom right gives information on the last action performed. The Text Area on the bottom left gives information on the currently active person. More information on how to use the GUI can be found in the Scenario list.
When a person is visualized, the family tree representation is shown in the big green area.
Above the family tree, a legend of the color codes for each person is given, helping you to identify people. The person the tree is centered around is in red, and the colors of the other people identify them as the red person's grandmother, uncle, niece, etc.
Because all things change over time, the UML changed from Milestone 3 to Milestone 4. Here is the updated UML.
The UML underwent quite a few changes. GenealogyMap acquired quite a few new methods.
After learning how things are supposed to work, and how GUIs could be implemented in Squeak, the creation of the GUI moved along at a good pace. An attempt to design of the GUI with the familiarity of a Windows application was made. I was told that our GUI was very different from some of the others people had seen. A few people also said that the GUI was a little confusing, but I feel with a little use it becomes much easier as many things were designed to be the logical way to do things based on previous experience with applications.
Again, this milestone came with a large learning curve in learning how GUIs work in Squeak. A lot of trial-and-error methods were used to become familiar with the interface. Also, we had significant problems with instances of objects on the backend. We had a collection of Persons that represented everyone entered into the system, but in editing and forming relationships, we had problems with Persons pointing to temporary instances and such. This caused many problems with visualization, i.e., someone had a father, but it was not showing up because the “father” was actually a temporary object, not the actual object we wanted as the father. Also, this caused problems in entering and changing information of a Person as changing the information of a temporary Person changed the information of the actual Person object, which was undesired. However, some serious thought on this proved to be useful in that we determined to only pass around information about a Person, rather than the Persons themselves. This proved to be very successful in preserving the integrity of the instances of the objects.