README.api: A high-level overview of the KStars code architecture. This document briefly describes the main classes and functions of KStars. Since this is supplemental information to our API dox, this file will probably eventually become our Mainpage.dox. === Description of the program === KStars is a simulation of the night sky. The whole program is essentially a (very complicated) model/view implementation. The "model" is all of the data regarding objects in the night sky, and how they change with time, and the "view" is the graphical display of this model on your screen. The "model" is encapsulated in the KStarsData class, and the "view" is encapsulated in the KStars class. Here is a diagram showing the hierarchy of classes: KStars (main window; master class for the frontend "view") + SkyMap (sky widget) - KSPopupMenu (right-click menu) - Infoboxes (on-screen information on time, position, and focused object) KStarsData (master class for the backend "model") + SimClock (controls passage of time in the simulation) + SkyMapComposite (top of hierarchy for plottable objects) - Stars, planets, comets, asteroids, deep-sky objects, constellations, guide lines, the Milky Way, etc. each have their own Component (see skycomponents/README) SkyComponents are lists of objects of the same type that are drawn in the sky map. Individual objects are represented as an instance of SkyPoint, or one of its children. Only imaginary positions in the sky use SkyPoint directly. Most real objects use the derived class SkyObject, which adds names and other data. SkyObject itself has many derivatives for different kinds of objects, like StarObject, DeepSkyObject, KSPlanetBase, KSAsteroid, KSComet, etc. Other important infrastructure classes include dms (which encapsulates an angle value), GeoLocation (which encapsulates a location on Earth), and TimeZoneRule (which encapsulates a daylight savings time rule).