The XsMotifWindow Class

The XsMDICanvas requires that all documents be a subclass of XsMDIWindow or a subclass of a class derived from it. By itself XsMDIWindow does not define any appearance or behavior for the documents. However, XsMotifWindow, derived from XsMDIWindow, defines a MWM-like look-and-feel to a document.

Documents in your application should be derived from XsMotifWindow. This class provides the look-and-feel of Motif window and supports the interaction with the XsMDICanvas. It is up to the application to define the contents of each document.

Constructor and Destructor:

The XsMotifWindow constructor accepts one argument:

XsMotifWindow (const char *name)

The name parameter specifies the name of the document and is used as the widget name for the underlying implementation. The name parameter is also used as the default title and icon-name for the document.

Note: The XsMotifWindow constructor does not create any widgets. Rather it only initializes internal variables. The widgets are not created until the document is added to the canvas. The XsMDICanvas calls the member-function XsMotifWindow::_buildClientArea() when it needs to create the document widgets.

The XsMotifWindow destructor destroys the document widgets (if they have been created) and frees its internal storage. It is up to the application to free all documents. The XsMDICanvas will not destroy the documents for you.

Document Utilities:

Although rarely called from the application, the XsMotifWindow supports a number of utility functions to manipulate the document.

virtual void raise ( )
virtual void lower ( )
virtual void minimize ( )
virtual void maximize ( )
virtual void restore ( )
virtual void close ( )

The close member-function does not destroy the document, it simply hides it from view. You can restore a closed document with XsMotifWindow::show().

The following member-functions are used to change/query the appearance of the document:

void setTitle (const char *name)
const char *title ( ) const
void setIconName (const char *name)
const char *iconName ( ) const
void setPixmap (Pixmap pixmap)
Pixmap pixmap ( ) const
Widget icon ( ) const
Boolean minimized ( ) const
Boolean maximized ( ) const
virtual void setPosition (Position x, Position y)
virtual void setSize (Dimension width, Dimension height)

The setPixmap member-function accepts a pixmap which the document then uses as the decoration on the icon. Because the document does not make a copy of the pixmap, it is important that the application not free the pixmap until all documents that reference it are deleted. The document does, however, make a local copy of the title or icon-name string passed to it, so the application is free to do whatever it wants to the passed-in string. The icon member-function returns the widget that is used to implement the icon.

Creating Window Subclasses:

The application must derive its documents from XsMotifWindow in order to define the contents of the document. The XsMDICanvas calls the protected member-function _buildClientArea when it creates the document. Each class derived from XsMotifWindow must override this pure-virtual member-function.

The member-function _buildClientArea is called with a single argument:

virtual void _buildClientArea (Widget parent)
The parent argument should be used as the parent of the contents of the document. This widget is an unmanaged XmForm widget, and all of the standard resources and constrains apply to it. The XsMDICanvas is responsible for managing the parent widget at the appropriate time.

As an example, consider the following:

// _buildClientArea (called to create document contents)

void MyDocument::_buildClientArea (Widget parent)
{
   assert (parent != 0);
   
// Create a main window with some dummy menus

   Widget mainW = XtVaCreateWidget ("mainWin", xmMainWindowWidgetClass, parent,
      XmNtopAttachment, XmATTACH_FORM, XmNbottomAttachment, XmATTACH_FORM,
      XmNleftAttachment, XmATTACH_FORM, XmNrightAttachment, XmATTACH_FORM,
      NULL);
   ...
   
   XtManageChild (mainW);
}

In this case, an XmMainWindow is created as the child of the parent widget. The XmMainWindow is then attached to the 4 sides of the parent form. Note also that the main window is managed before returning from the function.

Resources:

The XsMotifWindow supports the following resources:

   Name              Class             Type           Default
------------------------------------------------------------------------------
   borderSize        BorderSize        Dimension      6
   buttonSize        ButtonSize        Dimension      23
   title             Title             String         dynamic
   titleFont         TitleFont         String         -*-helvetica-bold-o-normal-*-14-*-*-*-*-*-iso8859-1
   iconSize          IconSize          Dimension      70
   iconName          IconName          String         dynamic
   iconFont          IconFont          String         *-helvetica-bold-r-normal-*-12-*-*-*-*-*-iso8859-1
   XmNiconX          XmCIconX          Position       dynamic
   XmNiconY          XmCIconY          Position       dynamic
   saveUnder         SaveUnder         Boolean        True
   restoreString     RestoreString     String         "Restore"
   moveString        MoveString        String         "Move"
   sizeString        SizeString        String         "Size"
   minimizeString    MinimizeString    String         "Minimize"
   maximizeString    MaximizeString    String         "Maximize"
   raiseString       RaiseString       String         "Raise"
   lowerString       LowerString       String         "Lower"
   closeString       CloseString       String         "Close"
   menuFont          MenuFont          String         -*-helvetica-bold-o-normal-*-14-*-*-*-*-*-iso8859-1
   showBorder        ShowBorder        Boolean        True
   showResize        ShowResize        Boolean        True
   showTitle         ShowTitle         Boolean        True
   showMenu          ShowMenu          Boolean        True
   showMinimize      ShowMinimize      Boolean        True   
   showMaximize      ShowMaximize      Boolean        True
   lowerOnIconify    LowerOnIconify    Boolean        False
   XmNminWidth       XmCMinWidth       Dimension      dynamic
   XmNmaxWidth       XmCMaxWidth       Dimension      dynamic
   XmNminHeight      XmCMinHeight      Dimension      dynamic
   XmNmaxHeight      XmCMaxHeight      Dimension      dynamic
borderSize
Size of the window border.
buttonSize
Size of the window buttons.
title
Title of the window. The default is the name of the window instance.
titleFont
Font used to draw the window title.
iconSize
Size of the icon representation.
iconName
String used on the title. If unspecified, the window title is used.
iconFont
Font used to draw the icon-name.
XmNiconX
X-position of the icon. The default location is the top-left corner of the window when it is iconified.
XmNiconY
Y-position of the icon. The default location is the top-left corner of the window when it is iconified.
saveUnder
Enables/Disables save-unders for the menu.
restoreString
String used as the "restore" menu item.
moveString
String used as the "move" menu item.
sizeString
String used as the "size" menu item.
minimizeString
String used as the "minimize" menu item.
maximizeString
String used as the "maximize" menu item.
raiseString
String used as the "raise" menu item.
lowerString
String used as the the "lower" menu item.
closeString
String used as the "close" menu item.
menuFont
Font used to draw the menu strings.
showBorder
Enables/Disables the window border. If the border is disabled, the resize-handles are automatically disabled.
showResize
Enables/Disables the window resize handles.
showTitle
Enables/Disables the window title. If the title is disabled, all of the window buttons are automatically disabled.
showMenu
Enables/Disables the window menu button.
showMinimize
Enables/Disables the window minimize button.
showMaximize
Enables/Disables the window maximize button.
lowerOnIconify
Automatically lower windows when iconified.
XmNminWidth
Minimium window width. The default is about four times the size of the window button.
XmNmaxWidth
Maximum window width. The default is not to constrain the maximum size.
XmNminHeight
Minimum window height. The default is about four times the size of the window button.
XmNmaxHeight
Maximum window height. The default is not to constrain the maximum size.

XsMotifWindow Implementation:

As a convenience to those who wish to modify the XsMotifWindow code, here is a diagram of the internal class structure:

[Class Structure]