I added a new keywidget, which shows the current mapping between keys and views. The widgets are now adapters, adapting a TerminalView. That will allow to move the run method out of the view definition, which currently holds duplicated code.
The we want to dynamically assign keys to views through the configuration. This is now possible.
The script is now generated by zc.recipe.egg. I should have looked into this recipe before. Most of the "bootstrap" functionality is moved to it's own module and registered as an entry_point.
Changed name from Dashboard to buglist, because that's what it's supposed to do (although it's currently showing projects). The NewProjectForm is actually more an editproject form. The new (newprojectform) will adapt the application as the context object.
Because I like to add more widgets, I need to distinguish the one from the others.
I now use zope.container for the folder like structure, after finding out, that I can't use or inherit from BTrees directly - stupid me. The database is now used by the application object, which acts like a dictionary type object. Keys and Values set to the application will be stored in the database, acting as a root-object in the database.
The usage of render and run methods were not consistent due to earlier tries of moving them entirely into a different component. Still glued together with the views, I needed to make them at least consistent with the rest of the views.
I'm now sending almost all key events to the top widget itself (except the button). The button needs to be improved, so it's easier to distinguis if it's clicked what to do. I tried a signal connect, but can't stop the event loop in the view. That somehow needs a better solution.