In the Behold Forum, I have had some reports of Behold locking up. First Max reported it, and then Mala did. I worked with both of them, and despite both of their best efforts, I was not able to reproduce the problems they were reporting.
But I did a fair bit of work to research what might be happening here, and there is something about Behold (something about Mary?) that could be what they are seeing.
I have done my best to make Behold as “non-modal” as possible. That means if one window or form is open, then you can still access any window and all the functions of Behold without closing it. The window does not take over and force you to click an OK button before you can do anything else. Most programs are modal. They let you do one thing at a time. You have to close the active window to do anything else. As far as I am concerned, that is poor implementation. Often, I want to see my windows next to each other and like to see one updated when I execute a function in another.
One excellent example of this is your browser, be it Internet Explorer, Netscape, Mozilla, or whatever. When you are downloading a large webpage, it lets you keep doing anything else you want: you can view the page as it is loading, search the page, view your favorites, click on a link before it’s loaded, or even stop the loading with the Stop button on the toolbar. (I think I’ll add a stop button to Behold as well, maybe in Version 1.1, so you can interrupt loads of large GEDCOMs if you change your mind).
In Behold, allowing this flexibility does seem to cause one major problem right now. When Behold is processing a file, i.e. reading it, generating the internal data structure, and building the Everything Report, it continues to allow you to access all of its commands. This is desireable, but when you press a command that starts off a new set of processing such as AutoOrganize, or Related through Marriage, it interrupts the current process to do it. Depending on exactly when the interruption happened, some data structures may be left in a broken state and continuing on with other processing could possibly cause error or lockups. Maybe these were what Max and Mala were encountering - I don’t know. But this is something that needs a solution.
How to fix it? There are three possible ways that I looked at.
1. The simplest is to make a dialog box that tells you that Behold is processing (maybe with the progress bar) and it doesn’t let you do anything else until its finished. Most programs do this. It is the lazy programmers way to do it, but if you have a file that takes say 20 seconds to load, it would be very annoying to the user. I definitely don’t want to do this.
2. The next idea is that once processing has started, make all the menu and toolbar items that would conflict with the processing inactive. They will be greyed out and you will not be able to click on them with the cursor (that has turned into an hourglass to remind you that the program is busy). The thing I don’t like about this is that those icons changing from active to inactive and back is not pleasant to look at - especially for fast processes where the icons will seem to flash.
3. I finally settled on this idea: If you try to click on a menu or toolbar item that will conflict with the current process, then a window will pop up and ask you to wait until processing is completed. You can close that window and continue to view or do other things until Behold finishes. But if you leave the window open, it will change and let you know when processing has finished. If you don’t click on any items that conflict, then there will be no annoyances - other than Behold maybe taking a little longer than you want (Sorry: I’ll work on optimizing during alpha testing).
So that seems to be what’s necessary, and hopefully it will help to prevent many types of errors and lockups in the future.