The code of MlVIew, though in C, is heavily object oriented. One of the key classes is the MlViewEditor class. It's basically the abstraction of the views and documents container. This class can instanciate and destroy of views (instances of MlViewIView) and documents (instances of MlViewXMLDocument).
MlViewEditor. This is what abstracts the editor. it's basically a container of views and documents. It provides methods to manage documents and views, namely: open documents, save documents close views etc ...
MlViewIView. This is the abstract interface implemented by all the editing views. It defines methods to connect/disconnect the view to/from a document model, set the name of the view, get the document the view is related to, execute an editing action. One should keep in mind that an editing view is generally not a single widget. In our terminology, and editing view is a set of widgets that lets the user edit a document.
MlViewAppContext. I hate global variables. Especially variables which scope si wider than a class. In MlView, a class takes one source file. Again, I hate variables which scopes are wider than a file. That being said, all the classes of MlView need to share some data and behaviour. MlViewAppContext is there for that purpose: share data and behaviour across the different classes of MlView. This class contains methods to display error/warning messages (in an unified way), access application wide settings, set/query key/value pairs etc ... Generally, all the classes of MlView have methods to set/get an instance of MlViewAppContext so that they can have access to all the needed application wide data and behaviour. A single instance of MlViewAppContext is created at the MlView launch time and is "passed" to all the classes that are further created.
MlViewApp. This is an abstraction of the MlView application. Its duty is to build the main window, the main toolbar, the application wide instance of MlViewAppContext and the instance of MlViewEditor.
MlViewViewAdapter. This is a minimal implementation of MlViewIView. It aimes at providing a class that editing views can derive from. It implements all the interfaces of MlViewIView and does basically nothing. All the editing views can then inherit from MlViewViewAdapter
MlViewTreeView. This is the editing view available in MlView today. It's made of 3 main widgets: A tree editing widget:
A tree editing widget: MlViewTreeEditor
A node editing widget: MlViewNodeEditor
A node/attribute name completion widget: MlViewCompletionTable