Its been about a month since I last posted so naturally there are a plethora of updates. As far as the interface goes, it is nearly at the point where it can be pushed aside to worry about other parts of the project. You can view a screen shot of it here. All of the tabs are plugins and the home interface is completely dynamic. The file menu and tray menu also allows plugins to have their own entries meaning the gui interface API is nearly feature complete. Remaining issues as far as that goes include allow plugins to have their own translation files (and subsequently implementing the re-translation API for the plugins) and figuring out how dynamic plugins will link their own platform independent resources.
As far as the API goes, we've had a number of significant design decisions we didn't originally know we were going to have to. Plugins as they stand are hubs for functionality. The home plugin for example includes a panel for viewing the home plugin with the tabbed interface, tray and file menus for quick access to functionality as well the catching and sending of a number of signals to and from the plugin manager. This requires for example the home panel object to be seperate from the home plugin object. Thus, when the home panel wants to send a torStart signal to the Plugin Manager (who handles such requests), the panel calls a function in the home plugin, who calls a function in the plugin manager. Even more awkward, since we want to seperate all of the plugin logic from the main vidalia logic (since we intend on shipping a plugin library to allow for dynamic plugin creation), the plugin manager can't send any messages to MainWindow since they are seperate. However, MainWindow can send messages to the plugin manager. Thus, in order to send a message to MainWindow, the plugin manager needs to emit a Qt signal which MainWindow catches. Any response from MainWindow is done by MainWindow calling a plugin manager function. At first I thought this reeked of terrible design, but then I realized its not too different from the system used by OS's for system calls.
At this point going forward myself and the Vidalia Project will be working on the plugin API and the HerdictWeb plugin simultaneously. There are enough pieces in place that this is easily doable. Hopefully within the next two weeks the HerdictWeb plugin will be nearly complete. Check back in to find out!