My proposal is to create a GUI editor for visualizing a PySoy project. Projects made with the editor will be displayed as a collection of scene nodes, usually connected to each other through some mechanism, e.g. a portal. The connections between scene nodes will be displayed as lines, using collision to determine where the scene nodes are placed relative to each other.

The interface itself is geared at being modern, intuitive, explorative, and of course useful. Modern because it will reduce wasted space as much as possible, much like modern web browsers do. Intuitive because when a new user attempts to use it they should be able to pick it up relatively easily. Explorative because the user should be able to create a body within the editor without knowing what they will need before hand.

User Interface

The windows within will work like a tiling window manager, using hBoxes and vBoxes to manage where windows go. This way, maximum space will always be used and will not take away time from the developer having to arrange windows. Hiding a window will cause the other windows in it's group to occupy the rest of the space. There will always be a main window, by default set to be the Editor Window. This functionality will also be used for making a window take up the entire screen. (Just 'hide' the other windows, and make the window you want full to take up the entire editor be the main window.) The interface should also adhere well to good  principles of user interface design.

Having things use hBoxes and vBoxes will also make switching and resizing windows and areas relative to each other possible. Windows should be able to switch each other inside their hBox or vBox scope shown in the mockup below.

Window Definitions

  • Workspace Bar: While not technically a window, it will function as such for the purposes of the program. This will be a listing of all the workspaces (Window states associated with each other.) Also there will be a drop down menu icon to the right or left with things like "Map, Options, Workspaces".
  • Editor Window: Window used to place, move and rotate objects. The camera should work like a body which floats outside of the realm of collision, using using the scroll wheel will serve as primary way of zooming in and out. (Although there should be a way to do it just with the keyboard.) As for how to logically attach rooms in such a way that it's intuitive to the user, that will take some more thought. This could simply be done with lines which attach rooms to each other like nodes.
  • Scenes Window: Window used to select placed scenes or create new ones, with a sublist attached to each with the bodies in that scene.
  • Bodies Window: Window with an ordered list of groups of all placeable bodies. To add a new body, the user can right click on a group and add a new body with which the type of body, material, textures, etc that they want attached to the body.
  • Preview Window: Window which will preview the body selected in the Body window.
  • Python Console: A python console associated with the current workspace.


A workspace will be a collection of window states associated with each other. Meaning that inside the editor, you could work on different scenes at the same time, or even the same scene from different perspectives. They will be handled with tabs, displayed at the top of the user interface much like in Google Chrome. These workspaces should be stored somehow, so that if a user closes the program, when they re-open it their workspaces are in the same state. The user should also have the option to 'bookmark' specific workspaces, so that they can be recalled at any time. To open a workspace will simply require using a '+' icon to the right of the current workspaces.

Editor Window

The editor window will display rooms as nodes connected to each other. Displaying them using something like the projector, projecting into the individual nodes. (Perhaps at their last used camera angle?) When a user double clicks on a node, the editor will take them into that specific room for editing. To jump back out the node view should be simple as a keyboard shortcut. (Or clicking on a Maps in the Room View.) Larger rooms could be implemented as either bubbling out, or being displayed at zoomed out camera so that all the nodes are the same size.

It will be resizable and switchable with the python console.

Python Console

The python console is pretty straight forward. It will always be associated with whatever node you are in. Perhaps at some point the option to open up multiple python windows should be added. (All vBoxed and hBoxed inside the python console area.

It will be resizable and switchable with the editor window.