Improvements this week
We’ve made some significant improvements this week. I had encountered some problems updating the screen displays when some data was altered. We have been passing callback functions to update screens. The problem is that sometimes we have to update one screen, sometimes we have to update multiple screens. The callback scheme did not handle this properly, and sometimes screens were not updated properly. In GRAMPS 1.0.X, this was incovenient. With GRAMPS 2.0, this inconsistency causes GTK to start acting strangely.
After thinking about this for a while, I came up with a scheme of having interfaces that need to know when something changed to register with the database, and they would then receive a notification. My scheme used functions that had to be registered. The scheme worked much better than the previous scheme.
But, in true Open Source form, Richard Taylor looked at my implementation and came up with an even cleaner implementation using the Python signaling mechanism. Now, the interested objects ‘connect’ to the emitted signal from the database. Data can be passed along with the signal, and the data can be type checked.
Merging has also been improved. My original attempt was to use a GNOME Assistant to help collect information and perform the merge. Julio Sanchez challenged me on the implementation, and we had a good discussion about the process. Julio’s position was that little interaction was required, and choices should not be given to drop data. And, he convinced me that he was correct.
The new implementation is actually two implementations. The “Compare and Merge” function presents a window showing the data about the two people, allowing the user to visually compare the people to see if a merge should occur. The second implementation is a “Fast Merge”, requiring little user interaction. With the new merge, all data of both people is preserved.