Appendix III: pgModeler's anatomy
The image below shows a little about pgModeler's modular construction and how all the pieces are tied together to make the whole application as we know it. The pgModeler project is composed of eleven subprojects, each with well-defined purposes. Four of them generate the executables (pgmodeler, pgmodeler-cli, pgmodeler-ch, and pgmodeler-se) and the rest yield the modules or libraries that the executables depend on, namely: utils, parsers, core, connector, canvas, gui, and cli. In the diagram below, the black arrows indicate the direct dependencies between the libraries (the dependencies that are reachable through another library are omitted, e.g., every executable depends on all libraries). Note that, except for the libxml2 and libpq libraries, all modules are dependent on the Qt framework, which offers exceptional features to code multiplatform software. Besides the subprojects, the features of the tool can be extended by plug-ins, which are libraries loaded at startup (see Chapter 8).