What it is :
A package of dynamic scene instant update (so you don’t have to shutdown Panda and reload it again and again everytime you make minor/major changes) and a little attempt to minimize Panda3D - IDE windows switch, if you have 1 small monitor like mine.
It’s a 1 application, 1 window solution.
Full reason why :
[color=red]What’s missing :
[-] line wrap
[-] unicode support
[-] code folding
[-] code browser
[-] and anything not mentioned down below…
[+] create new file, open, save, and save duplicate
[+] error pinpoint
[+] output capture
[+] line:column bookmarks
[+] auto & smart indent
[+] repetitive characters insertion
[+] Python syntax highlight
[+] matching brackets highlight & selection
[+] 2-ways grow & shrink selection
[+] edit history
[+] color chooser
[+] macro recording, replaying, and editing (visually, so you don’t need macro editing manual)  
Works with undo/redo during recording, the recorded actions are popped out/in upon undo/redo. The last recorded action type is displayed at status bar.
[+] find & replace, with Regular Expressions
Able to replace in all opened files, and selectable files under a directory.
[+] 3 mouse selection modes (character, word, line), switched by another mouse click
[+] easy launch of PStats server (on local machine) and auto-establish connection
[+] code completion
[+] save to snippets and its completion   
[+] import completion [Python] [Panda3D] [new Panda3D]
[+] call tips [Python functions] [Panda3D functions] [individual argument insertion]
[+] Preferences GUI       
[+] portable app (can live in removable media)
[+] single instance app, all files passed to IDE_STARTER or using the Welcome Screen will be opened by the running instance of IDE
[+] per-file CWD and arguments
[+] SceneGraph browser and Node Properties panel  
[+] software auto-upgrade    
[size=150]Dependency :[/size] wxPython
Since v0.1, there is C++ extension to speed up text generation.
Source code : Text Drawer extension
Windows binaries : for Panda3D 1.5.3, 1.6.0, 1.6.2, 1.7.0, 1.7.2, 1.8.0.
NOTE : if you up/downgrade your Panda3D version, you should rebuild the extension, or it would be done in python, which is approx. 4x slower.
Read /TD/HOW_TO_USE.txt for further info.
IDE codes : OnscreenIDEdynamic.zip [UPDATED Jun/26/2012]
images : IDEimages.zip [UPDATED Aug/31/2011]
models : IDEmodels.zip [UPDATED 3/2/2010]
slider skins : IDEsliderSkins.zip [NEW 6/3/09]
test scene : testDynScene.zip [UPDATED 5/18/09]
fonts : IDEfonts.zip [UPDATED 12/09/08]
tab skins : IDEtabSkins.zip [NEW 07/27/08]
sounds : IDEsounds.zip [NEW 03/31/08]
Put all the .zip files in the directory of your choice and extract them, so that the fonts, models, sounds, images, and skins directories are at the same level with the IDE codes.
You can put the test scene somewhere else.
[size=150]KNOWN RESTRICTIONS & LIMITATIONS[/size] :
RESTRICTION <1> :
In your main script, you have to protect your World instantiation, because it’s done by the IDE.
This is a sample of it :
if __name__=='__main__': print '\n', '@'*10, "\n I'M PROCESSED !!!\n", '@'*10 if not hasattr(help,'IDE'): World() run()
So you must isolate World instantiation so it won’t be done twice each time you update the scene. The rest of your code will be executed normally.
World instantiation is done by the IDE, to isolate the instance, to ease the pain when searching for the must-be-destroyed class instances.
The run() call is safe and meaningless when you use the IDE, since it’s redirected to a dummy run() function.
The test scene is not already use this blocker, so add it yourself.
But, in case you need to instantiate it yourself, save the instance in global namespace as “winst”, like this :
if __name__=='__main__': winst = World( arg1,arg2,etc. ) run()
RESTRICTION <2> :
If you leave World instantiation to the IDE, you should name the class “World”.
Note that you don’t need to have a World class to instantiate. If you’re trying some very simple modules, you can just do everything in module global namespace.
LIMITATION <1> :
The destructors are still very limited to the commonly used ones, so if you think some destructors need to be added (in myFinder.py), let me know.
[size=150]IDE START-UP INSTRUCTIONS[/size] :
- run IDE_STARTER.pyw
- for testing only :
2a. select dyn1.py and (optional) all other test scene files to be edited
2b. select the main script file : dyn1.py
And the IDE will be opened in a new fresh Python session.
NOTE : the default key to open Preferences window is Shift-Ctrl-P
CRITICAL SITUATION (when it stops responding to any key) : Alt-M : print current mode Shift-Alt-R : restore to correct mode
Once you’re ready to update your scene, press your beloved F9. All edited documents will be saved, and all changes will be instantly updated.
PS. : code donation is always welcome
PPS. : You don’t have to read my rant below this line.
The reason why :
this IDE is generally a pain killer for me, on both Panda and editing sides.
PANDA3D side :
If I use large models or textures, they’re loaded from disk only once at first, and the next scene updates will load them from the pools. So, I don’t have to waste my time waiting for my scene being loaded from disk, each time I want to see some changes. This saves lots of time when debuging or developing shaders.
EDITING side :
Every IDE I’ve tried has some unbelieveably unique ways in hurting me. I can’t do this or that, or have to do it in weird way. At the end I can only sighhhhhhhhh.
To mention some (in contrast with mine) :
 Very small range of recent files, and there is no way to adjust it.
 Some IDE’s don’t save bookmarks, and some forcefully save bookmarks even if I don’t want to save the file.
 I can’t easily stop at the edge when cycling over bookmarks, and some IDE’s simply forbid me to wrap to the other edge.
 So far, no IDE I’ve tried offers me easy macro editing. All of them force me to read the commands reference, since there is no completion for IDE commands itself. It sounds like slouuuuuu hell if I only need to fix my mistakes when recording it, since I’m very aware that I’m just a mistakes factory.
 So far, no IDE I’ve tried adjusts the recorded macro commands upon undo/redo, it just runs 1 way straight forward, blindfold without looking back, so I have to go through point (4) if I made mistakes.
 I don’t know if there is IDE which displays indentation helper line only when needed, i.e. when the alignment notch is off the screen. The worst thing is if it’s offscreen, I can’t even see what it is. So, why don’t I just close my eyes instead ? Opening my eyes wouldn’t change anything.
 I don’t know if there is IDE which shows me other than start-matched completion.
 Any other IDE’s do multiple lines operation only on lines which have at least 1 selected character in it.
Imagine this, I put the cursor at the 1st column, and then select 2 lines downward, the line on which the cursor is now, won’t be included in the process. Now imagine if I do that in a macro, and I don’t put the cursor first at the first column, the result will be different at macro replay time.
Case 1: cursor is at column #1, there will be 2 processed lines
Case 2: cursor is at column #2, there will be 3 processed lines !!!
 I don’t know any IDE which is able to insert the call arguments into the script easily. The worst thing is it’s mostly not even wrapped.