Source/Interface/Editors

= Editors = What we normally call "editors" are a ScrArea struct containing the data needed for an editor including type, data, position, size, callbacks, and more. Each editor is in a list of them in a Screen (areabase), which is in a Window. It is the data, regions, and callbacks that make each editor unique.

Editor Unique Data
Since each editor is different, they all store data in a struct that derives (implicitly) from `SpaceLink`. ScrArea has a list of these called `spacedata` and it is the first of these that is used by the active editor. It is a list so that it can contain the data of every editor that has occupied the same space, allowing quick switching between them.

Editor Callbacks
The ScrArea struct contains a `type` member that is a pointer to a `SpaceType`. This mostly contains callbacks for when the editor is created, freed, activated, refreshed, saved, etc. It also contains the area's name, icons, keymaps, dropboxes, and much more.

Other ScrArea Contents
Some other parts of the ScrArea are the ScrVerts, which define each outer corner and can be shared with immediate neighbors. `totrct` defines the interior visible part of the editor in window space. There is also a `winx`, `winy` containing the width and height respectively.

It contains both a `butspacetype` and `spacetype` members that contains an indicator of the type of editor, from `eSpace_Type`. These two are used in slightly different ways that are not entirely apparent to this writer (Harley). `butspacetype_subtype` contains the "subtype" for editors that have alternate views.

Editor Source Files
The source files for each editor are kept together in a folder with a name like `source/blender/editors/space_xxx` where "xxx" is the name of the editor. The main file is one named like "space_xxx.cc". `ED_spacetypes_init` calls a function like "ED_spacetype_xxx" that defines all the editors regions, sizes, handlers, and callbacks, etc.

API
For more specific information, look at these files: