Onscreen IDE & dynamic instant update [_v0.5.4_]

UPDATE :
[X] bugfix : 1 more vanishing line bug is gone
[X] to avoid halt, globalClock will be reset to normal mode if there is an exception and after rebinding main module upon save
[X] arguments count/type mismatch error tracking now works at messenger level too, as demonstrated in the test scene by adding 3 more events to trigger the errors.
[X] the main module and the currently running module are correctly distinguished to be able to catch the errors, which are obviously belong to the running one.
[X] I guess I forgot to mention that you’re not necessarily have a World class to instantiate, in case you just need to try something very simple. It’s good I forgot about mentioning it afterall, since I just got the crusher work too for crushing main module’s global namespace. The needed framework components are not destroyed of course : base, bboard,directNotify, eventMgr, giveNotify, ivalMgr, jobMgr, loader, messenger, onScreenDebug, taskMgr. To demonstrate this, I created a DirectObject instance outside World class in dyn1.py, which accepts an event. Upon update, the event hook remains only 1, or if you comment it out, it will be gone. The consequence is the cleanup procedure is a bit longer, but it’s good for ensuring environment cleanliness.
Warning: this module global namespace cleanup doesn’t happen yet for the imported modules though, especially if those stuff in the imported modules are not meant to be exported, so they don’t exist in the importer module’s global namespace.
[X] updated PauseResume module to pause tasks which aren’t bound to any class
[X] the IDE now uses independent button thrower, so you can freely use the default button throwers. You can also create some more as you need, and the custom ones will be removed upon update. I only remove the ones parented under the default data root node, though. The default and custom ones are disabled when you’re in IDE workspace, and enabled when you jump to scene.