Manual

Main API Multi-Graph/View/Window Modes

# Multi-Graph Mode in the API

uDraw(Graph) is able to visualize more than one graph at a time, called multi-graph mode. Please read about multi-graph basics in the concepts chapter before going on here.

In multi-graph mode, each loaded graph is shown in a different base window. Operations applied to one graph do not affect the other graphs. The notion of contexts have been introduced to deal with more than one concurrent graph at the API level. Each context has its own scope, so it is not necessary to keep identifiers unique between two contexts, but of course all identifiers have to be unique inside a context. Identifiers are used for nodes and edges in a term representation or for menus.

In multi-graph mode, each graph has a context with a unique context ID (string). The context ID is either automatically generated by uDraw(Graph) when a new context is opened with command multi(new_context) or can be chosen by the application itself when the new context is opened with the alternative command multi(open_context(...)). Opening a new context creates a fresh and empty base window. Afterwards, all commands sent to the API are applied to this context until the current context is set to another one. So for example, by sending command menu(file(open_graph(...))) directly after opening a new context, the current context will first switch to the new context automatically and afterwards the graph will be displayed in the new window. If the application wants to apply an API command to another graph that has been previously opened, then first of all it has to set the current context to the one that belongs to the other graph. So a context is used to specify one of the currently loaded graphs that should be affected by subsequent API commands. The context can be set using API command multi(set_context(...)).

## Principle of two Answers in Multi-Graph Mode

By default, uDraw(Graph) operates in single-graph mode where setting a context is not necessary. After entering the multi-graph mode (i.e. after sending the first multi(new_context) or multi(open_context(...)) command to the API), each answer from the API will have a preluding context(...) answer that is used to specify the context where the event happened. So in multi-graph mode, the application will always get two answers with each event: first the context and then the event itself. Note that the preluding context answer does not switch the current context. This can only be done by the application itself, as described above.

To guarantee full compatibility with applications designed for uDraw(Graph) predecessor versions prior to 2.0 (which do not expect a preluding context), the context answer is only used after entering the multi-graph mode. At start-up time, uDraw(Graph) operates in single-graph mode by default. uDraw(Graph) cannot enter the multi-graph mode by itself with user interface operations, so only the application can decide to do so.

## Entering the Multi-Graph Mode at Initialization Time

If the application intends to enter the multi-graph mode later in a session, it should open the first context at initialization time, because for consistency reasons, uDraw(Graph) has to remove a loaded graph as soon as the first context is opened (i.e. when the single-graph mode is left).

The application is able to close an opened context by sending command menu(file(close)). This is the equivalent operation of menu File/Close. After closing a context, all of the windows of the particular graph will be removed, and the corresponding context ID cannot be used any further. Afterwards, the application has to open a new context or specify one of the remaining contexts to be the new current context. Sending any other command without changing the context will be answered with an error message, because the current context is undefined after closing as long as a new one is not specified. It is even possible to close the last context without quitting uDraw(Graph). After closing the last context, no window will be visible any longer, but the uDraw(Graph) process is still running in the background. In this situation, the application can open a new first context and a new base window will come back.

Note: the user can also close a context at any time by using menu File/Close or the equivalent generic window function of the operating system respective window manager. The application will receive the answer close from the API after the user or the application has decided to close a context. If closing a context is not appropriate for the user, then the application should redefine the user interface or at least take control of the "File" menu in order to catch these events.

# Multi-View Mode in the API

The multi-view mode is used to have different base windows where the same graph is visualized. In opposition to multi-graph, here the base windows show the same graph, so working with one view manipulates all the other views of the graph, too. Please refer to multi-view basics in the concepts chapter. Multi-graph and multi-view can be mixed at the same time, e.g. several graphs can be loaded and each may have different views. Multi-view is a feature of the user interface level and cannot be controlled on the API level, except for opening a new view using command menu(view(open_new_view)). So it is not possible for an application to close a particular view, but you have the option to use the multi-window mode where all base windows can be controlled. All views (base windows) of a context (graph) are removed when the corresponding context is closed with command menu(file(close)).

## Master View

The user is able to open and close new views of a graph at any time. The first (i.e. oldest) view of a context is called master view. The master view can be closed by the user without closing the whole context as long as there is one other view of the same graph which will become the new master view. For example, if the user opens one additional view with menu View/Open New View after starting the system and loading a graph, then he can work with the same graph in two different base windows. Now, the user is able to close the first view (master view) with menu File/Close without closing the whole context/graph. The second remaining view will serve as the new master view in this situation.

Most of the commands dealing with one base window rather than the whole graph (e.g. setting the scale, focusing nodes or setting window position/extension, etc.) are applied only to the master view window of a context and not to all of the other views. The master view is always the oldest view of a context. The other views cannot be manipulated with API commands, because multi-view is a feature of the user interface rather than the API. But the multi-window mode can be used to have access to all individual base windows, read below.

# Multi-Window Mode in the API

Usually, the application has no access to individual base windows (views) of a context (graph). But this is possible in the alternative multi-window mode where an application can access all base windows, whether they belong to multiple graphs or views. The idea is to add an additional window ID (beside the context ID) to the relevant API commands and answers.

The multi-window mode is not compatible with previous versions of the API (where window IDs are not expected), so the application must be designed to operate in this mode by accepting the special kind of answers mentioned below. To avoid compatibility problems, the multi-window mode has to be explicitly activated using command-line option -window_api. After this activation, the multi-window is entered as soon as the first command multi(new_context) or multi(open_context(...)) is sent to the API, similar to the multi-graph mode described above.

Instead of answer context(...) known from the multi-graph mode, the answer context_window(...) is used after the multi-window mode has been entered. Here, the application can find a window ID maintained by uDraw(Graph). This window ID can be used in command multi(set_context(...)) to restrict all subsequent commands to that particular base window. In multi-window mode, the application is informed with the answers open_window and close_window(...) about creation and destruction of a base window.

To summarize it, the multi-window mode is an extension of the multi-graph mode where the application has full control over any base window. The multi-view mode is not accessible from the API except of manipulating the master view and opening new views.