4 <TITLE>XsMDICanvas Class
</TITLE>
5 <LINK REV=
"made" HREF=
"mailto:ssadler@cisco.com">
13 This section describes how to build and manipulate an MDI using the
14 <I>XsMDICanvas
</I> class. Minimally, you must perform the following actions
15 to build and display an MDI canvas:
18 <LI>Create the
<I>XsMDICanvas
</I> object.
</LI>
19 <LI>Create the documents as instances of subclasses of
<I>XsMDIWindow
</I>.
</LI>
20 <LI>Add the documents to the canvas
</LI>
21 <LI>Show the canvas
</LI>
25 <B>Constructor and Destructor:
</B>
28 The
<I>XsMDICanvas
</I> accepts two arguments:
31 <DD>XsMDICanvas (const char *name, Widget parent)
</DD>
35 The
<I>name
</I> parameter specifies the name of the canvas and is used
36 as the widget name for the underlying implementation. The
<I>parent
</I>
37 parameter specifies the widget that is to be used as the parent of the
41 The
<I>XsMDICanvas
</I> destructor destroys the canvas, but it
<B>does not
</B>
42 destroy any of the underlying documents. It is up to the application to
46 <B>Adding and removing documents:
</B>
49 After the documents are created, they must be added to the canvas. The
50 <I>XsMDICanvas::add()
</I> member-function adds documents to the canvas:
53 <DD>virtual void add (XsMDIWindow *window)
</DD>
57 The behavior of adding the same document to the canvas more than once
58 is undefined. Documents can be removed from the canvas by using:
61 <DD>virtual void remove (XsMDIWindow *window)
</DD>
65 Additionally, all documents can be removed from the canvas with:
68 <DD>void removeAll ( )
</DD>
72 The number of documents currently installed in the canvas can be
76 <DD>int numWindows ( ) const
</DD>
80 <B>Showing the canvas:
</B>
83 In order to show (manage) the canvas call the
<I>show
</I> member function:
86 <DD>virtual void show ( )
</DD>
89 This member-function is responsible for cycling all of the installed documents
90 and calling their respective
<I>XsMDIWindow::_buildClientArea()
</I>
91 member-functions. After each document has been created,
<I>show
</I> will then
92 manage each document and, finally, itself.
95 <B>Window Placement:
</B>
98 The current implementation of
<I>XsMDICanvas
</I> uses a very simple algorithm
99 to place the documents on the canvas. In order to implement a more specific
100 placement algorithm, derive a class from
<I>XsMDICanvas
</I> and override
104 <DD>virtual void _placeWindow (XsMDIWindow *win)
</DD>
108 This member-function is called for each document in the canvas to compute
109 the location of the document. Please refer to the code (
<I>XsMDICanvas.C
</I>)
113 <B>Canvas Behavior:
</B>
116 The
<I>XsMDICanvas
</I> is implemented as an
<I>XmScrolledWindow
</I> with an
117 <I>XmDrawingArea
</I> work-window. The instance name for the work-window
118 is
<I>canvas
</I>. Internal callbacks in the canvas class force the work-window
119 to be at-least the size of the clip-window. This prevents documents from
120 being clipped as they are moved around.
123 By default, the
<I>XmDrawingArea
</I> work-window has its
<I>XmNresizePolicy
</I>
124 set to
<I>XmRESIZE_GROW
</I>. This will allow the work-area to grow to
125 whatever size necessary, but it will not automatically shrink as windows
126 are manipulated. If different behavior is desired, the
<I>XmNresizePolicy
</I>
127 resource on the work-area can be set to
<I>XmRESIZE_ANY
</I>. This will
128 force the work-window to recompute its size as windows are manipulated, and
129 it will grow and shrink as necessary. However, the
<I>XsMDICanvas
</I> will
130 still force the work-area to be at-least the size of the clip-window.
132 <P>To change the default behavior, add the following resource:
135 <DD><XsMDICanvas name>*canvas.resizePolicy: XmRESIZE_ANY
</DD>