IBM developerWorks: GNOMEnclature: Handling multiple documents - Using the GnomeMDI frameworkSep 09, 2000, 14:40 (1 Talkback[s])
(Other stories by George Lebl)
"In this installment, George Lebl turns away from widgets to look at GnomeMDI, the Multiple Documents Interface from gnome-libs. GnomeMDI makes it easier to handle a variety of different documents at the same time in one program."
"Many end-user applications are document-centric (that is, they are tools for manipulating documents of one type or another). End users of these applications generally consider them merely a convenient way to modify a document. (Applications that are not document-centric focus on things like the program itself; games are a good example of this). From the end user's perspective, it's easier to think of document-centric applications in terms of opening new documents, rather than in terms of running a program. When you look at it this way, the program just happens to start up when you open a document. Taking this perspective one step further, there should be nothing too strange about editing multiple documents at the same time. However, as most programmers know, running multiple instances of one program does not work all that smoothly. The two primary problems are that multiple instances do not cooperate nicely and they take up way too much memory. A Multiple Document Interface such as the GnomeMDI simplifies these problems by handling the user interface. So, let's take a closer look at how the GnomeMDI does this."
"GnomeMDI is actually not a widget but a simple object, because it derives directly from GtkObject, the main object of your application. Most likely, you will create only one of these and store it as a global variable. The document we will create here is the GnomeMDIChild, which is actually a second type of simple object altogether. (If your application were opening files, for example, there would be exactly one GnomeMDIChild for each file.) Each GnomeMDIChild can also have one or more views. Each view is a GtkWidget, which knows how to display the data that GnomeMDIChild stores. Now this is where the tricky part comes in. In order to use GnomeMDI, you must be able to store all data relevant to a file without having any view. You must also be able to update several views simultaneously. You should not therefore store any data in the view widget itself. You should always be able to generate another view, purely from the data stored in the GnomeMDIChild object. This is usually called the Model/View/Controller design."