ERTGUI core documentation

   Codebase in C                       Codebase in Python

+--------------------+              +-------------------------+
| ERT                |/------------\| ErtWrapper              |
|  shared C library  |\------------/|  ctypes wrapper         |
+--------------------+              |   (C <-> Python comm.)  |
                                    +-------------------------+
                                                /\
                                                ||
                                                ||
                                                \/
                                    +-------------------------+
                                    | ContentModel            |
                                    |  Class for fetching and |
                                    |  updating data in ERT   |
                                    +-------------------------+
                                                /\
                                                ||
                                                ||
                                                \/
                                    +-------------------------+
                                    | Widgets                 |
                                    |  GUI components that    |
                                    |  enables presentation   |
                                    |  and modification of    |
                                    |  data in ERT            |
                                    +-------------------------+


ERT:
    the base software which the GUI controls.

ErtWrapper:
    this class simplifies the link between Python code and the exposed
    functions of the shared library of ERT.
    All communication between ERT and the GUI is performed through this
    class and type safety of the functions in the shared library are
    provided through a prototyping functionality.

ContentModel:
    This class is a base class for all widgets and algorithms that need
    to communicate with ERT. Several abstract functions are defined that
    must/can be implemented:
        * initialize(model):    typically used for prototyping of functions
        * getter(model):        used to fetch data from ERT
        * setter(model, value): used for updating data values
        * insert(model, value): used for adding data values
        * remove(model, value): used for removing data values

    The program should never call these functions directly but use:
        * getFromModel(): which will call the getter automatically
        * updateContent(value, operation = UPDATE|INSERT|REMOVE):
            which will call setter/insert/remove respectively automatically.

    A final function that must be implemented is fetchContent(). This function
    will automatically be called when the model (ERT) is ready or has been
    changed. This is also safe to be called by the program. Typical use of this
    function is to call getFromModel() which returns the data generated by the
    implemented getter function and then populate the widgets with the data.

    Whenever changes are made to the GUI ERT should be updated by calls
    to updateContent().

Widgets:
    Several widgets have been implemented. Most of these subclass HelpedWidget
    which subclass ContentModel and provide built-in help functionality.


