Sophie

Sophie

distrib > Mandriva > 10.2 > i586 > media > contrib > by-pkgid > a8d1ed0166ead8ba5e3035b537a5722e > files > 7

libXbae4-4.50.99-1mdk.i586.rpm

<!-- Creator     : groff version 1.19 -->
<!-- CreationDate: Fri Oct 29 22:10:29 2004 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<title>XbaeMatrix</title>
</head>
<body>

<h1 align=center>XbaeMatrix</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#Classes">Classes</a><br>
<a href="#New Resources">New Resources</a><br>
<a href="#Inherited Resources">Inherited Resources</a><br>
<a href="#Callback Information">Callback Information</a><br>
<a href="#Translations">Translations</a><br>
<a href="#Action Routines">Action Routines</a><br>
<a href="#Type Converters">Type Converters</a><br>
<a href="#Public Functions">Public Functions</a><br>
<a href="#Additional Behavior">Additional Behavior</a><br>
<a href="#Virtual Bindings">Virtual Bindings</a><br>
<a href="#AUTHOR">AUTHOR</a><br>
<a href="#SPECIAL THANKS">SPECIAL THANKS</a><br>
<a href="#RELEASE">RELEASE</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<a href="#Notice of Limitation">Notice of Limitation</a><br>

<hr>
<a name="NAME"></a>
<h2>NAME</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>XbaeMatrix &minus; The Bellcore Application Environment
(BAE) XbaeMatrix widget class.</p>
</td>
</table>
<a name="SYNOPSIS"></a>
<h2>SYNOPSIS</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>#include &lt;Xbae/Matrix.h&gt;</p>
</td>
</table>
<a name="DESCRIPTION"></a>
<h2>DESCRIPTION</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrix</b> presents an editable array of string
data to the user in a scrollable grid-like format similar to
a spreadsheet. Non editable pixmaps can also be displayed on
the matrix. The rows and columns of the Matrix may
optionally be labeled. Also, a number of fixed leading or
trailing rows or columns may be specified - these behave
similarly to the labels. While <b>XbaeMatrix</b> looks and
acts like a grid of <b>XmText</b> widgets, it actually
contains only one <b>XmText</b>. This means that
<b>XbaeMatrix</b> widgets with hundreds or thousands of rows
have much less overhead than they would if they used an
<b>XmText</b> for each cell.</p>
<!-- INDENTATION -->
<p>Clicking on a cell with <b>Button1</b> will edit the
cell. While a cell is being edited, <b>Tab</b> and
<b>Shift-Tab</b> will edit the cell to the right or left
respectively. The <b>osfUp</b> and <b>osfDown</b> keys will
edit the cell above or below. <b>Ctrl-Tab</b> and
<b>Shift-Ctrl-Tab will traverse out of the Matrix and</b>
into the next or previous tab groups.</p>
<!-- INDENTATION -->
<p>The <b>osfCancel</b> key will cancel any edits made to a
cell. The <b>osfActivate</b> key will commit any edits made
to a cell and store them in the Matrix. When traversing from
another tab group into the Matrix, the focus will go to
whichever cell is currently being edited. If no cells are
being edited, then the upper left most visible non-fixed
cell will be edited.</p>
<!-- INDENTATION -->
<p>The column sizes may be dynamically resized by pressing
the Shift-Button2 combination when over a column boundary,
similar to the behaviour of some popular spreadsheets. After
a column has been resized in this manner, the
<b>XbaeMatrix</b> calls the callbacks on the
<b>XmNresizeColumnCallback</b> callback list for post
processing.</p>
<!-- INDENTATION -->
<p>If the Matrix is resized until it is too small to display
all of the cells in a given dimension, then it will display
a ScrollBar for that dimension. The horizontal ScrollBar
will scroll the cells and column labels, but not the row
labels, fixed columns or trailing fixed columns. The
vertical ScrollBar will scroll the cells and row labels, but
not the column labels, fixed rows or trailing fixed
rows.</p>
<!-- INDENTATION -->
<p>For the application programmer, <b>XbaeMatrix</b>
provides callbacks to assist in data validation. The
callbacks on the <b>XmNmodifyVerifyCallback</b> callback
list are called before text is inserted into, or deleted
from, a cell. This callback list can be used to force user
input to match a certain pattern (e.g. a date format).
Similarly, the <b>XmNvalueChangedCallback</b> is called
after text is inserted or deleted.</p>
<!-- INDENTATION -->
<p>When a cell is edited (by clicking on it or tabbing into
it), the <b>XmNleaveCellCallback</b> callbacks are called
for the previous cell being edited, if any. The application
can verify the data entered in that cell and disallow
editing of the new cell if the data is invalid. If the data
was valid, then the <b>XmNenterCellCallback</b> callbacks
for the new cell are called. These callbacks can be used to
specify the editability of the new cell.</p>
<!-- INDENTATION -->
<p>The <b>XmNtraverseCellCallback</b> callbacks are also
called when the user attempts to edit a new cell. This
allows the application to override the default traversal
behavior of <b>XbaeMatrix</b>.</p>
<!-- INDENTATION -->
<p>The <b>XmNdefaultActionCallback</b> is provided to allow
a double click action in a cell to perform some
function.</p>
<!-- INDENTATION -->
<p>Motif&rsquo;s Drag and Drop functionality can be achieved
via the <b>XmNprocessDragCallback</b>.</p>
<!-- INDENTATION -->
<p>For large amounts of data, the overhead of assigning data
to the widget can be avoided using the
<b>XmNdrawCellCallback</b>. This callback also allows user
defined pixmaps to be placed in a certain cell. When using
this callback, data for string fields can be written back to
the application by using the
<b>XmNwriteCellCallback</b>.</p>
</td>
</table>
<a name="Classes"></a>
<h2>Classes</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrix</b> inherits behavior and resources from
the <b>Core</b>, <b>Composite</b>, <b>Constraint</b>, and
<b>XmManager</b> widget classes.<br>
The class pointer is <b>xbaeMatrixWidgetClass</b>.<br>
The class name is <b>XbaeMatrix</b>.</p>
</td>
</table>
<a name="New Resources"></a>
<h2>New Resources</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>The following table lists the new resources defined by
<b>XbaeMatrix</b>. The codes in the
&lsquo;&lsquo;Access&rsquo;&rsquo; column indicate whether
the given resource can be set at creation time (C), or set
by using XtSetValues (S), or retrieved by using XtGetValues
(G).</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix1.png"></p>


<p align=center><img src="images/grohtml-XbaeMatrix2.png"></p>


<p align=center><img src="images/grohtml-XbaeMatrix3.png"></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>This resource cannot be specified in a resource file</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNallowColumnResize</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If True, allows the columns to be dynamically resized via
the ResizeColumns() action. The default value is to allow
column resizing.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNallowRowResize</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If True, allows the rows to be dynamically resized via
the ResizeRows() action. The default value is to allow row
resizing.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNaltRowCount</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the number of rows to use for each of the
<b>XmNevenRowBackground</b> and <b>XmNoddRowBackround</b>
colors. This resource is ignored if
<b>XmNevenRowBackground</b> and <b>XmNoddRowBackround</b>
are not used.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNboldLabels</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Overstrikes the row and column labels to create a bold
font appearance when True. If False, the labels will appear
the same as the text in the cells. This resource will be
overriden and set to False if <b>XmNlabelFont</b> is
set.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNbuttonLabels</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>When set to True, the labels will be drawn with a shadow
around them similar to an <b>XmPushButton</b> widget. A
ButtonPress event generated on the labels, when
<b>XmNbuttonLabels</b> is True will cause the label to
reverse the shadow and take on a pushed in appearance. A
ButtonRelease event on the same label will invoke callbacks
on the <b>XmNlabelActivateCallback</b>, list. The default
value is False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNbuttonLabelBackground</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a Pixel value in which to draw the
<b>XmNbuttonLabels</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcalcCursorPosition</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If set to True, the insertion position on the text field
is calculated with respect to where the pointer was clicked
in the cell. The default value is False. The insertion
position will be overridden if the <i>position</i> member of
the <b>XbaeEnterCellCallbackStruct</b> is set to a valid
position.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellBackgrounds</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of pointers to rows. Each row is an
array of Pixel values, one for each column in that row. This
data structure is the same as that for <b>XmNcells</b>,
except each entry is a Pixel instead of a String. The
background of a cell will be drawn in the color specified
for that cell. If <b>XmNcellBackgrounds</b> is
<small>NULL,</small> backgrounds will be drawn using the
color specified by <b>XmNbackground</b>. This resource is
copied. <b>XmNcellBackgrounds may be specified in a resource
file but due to the</b> two dimensional nature of the
<b>XbaeMatrix</b> widget, it must be done by terminating
each line with a \n character. If the <b>XbaeMatrix widget
had XmNrows</b> set to 5 and <b>XmNcolumns</b> set to 5,
<b>XmNcellBackgrounds</b> would be specified as:</p>
</td>
</table>


<p align=center><tt><img src="images/grohtml-XbaeMatrix4.png"></tt></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Care must be taken when specifying these values in a
resource file as an incorrect format can produce undesirable
results.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellHighlightThickness</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the <b>XmNhighlightThickness</b> resource of
the <b>XmText</b> cell edit widget. This resource is also
used to compute the size of each cell. See the description
of <b>XmNhighlightThickness</b> in <b>XmText(3X)</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellMarginHeight</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the <b>XmNmarginHeight</b> resource of the
<b>XmText</b> widget. This resource is also used to compute
the size of each cell. See the description of
<b>XmNmarginHeight</b> in <b>XmText(3X)</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellMarginWidth</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the <b>XmNmarginWidth</b> resource of the
<b>XmText</b> cell edit widget. This resource is also used
to compute the size of each cell. See the description of
<b>XmNmarginWidth</b> in <b>XmText(3X)</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellShadowThickness</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the <b>XmNshadowThickness</b> resource of the
<b>XmText</b> cell edit widget. This resource is also used
to compute the size of each cell. See the description of
<b>XmNshadowThickness</b> in <b>XmText(3X)</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellShadowType</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the type of shadow drawn around each cell.
Possible values for this resource are <b>XmSHADOW_OUT</b>,
<b>XmSHADOW_IN</b>, <b>XmSHADOW_ETCHED_OUT</b>, and
<b>XmSHADOW_ETCHED_IN</b>. The default shadow type is
<b>XmSHADOW_OUT</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellShadowTypes</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies on a per cell basis, the
<b>XmNcellShadowType</b>. Values for the resource are the
same as for <b>XmNcellShadowType</b>. This resource is
copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcellUserData</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of pointers to individual user defined
data areas associated with each cell. The data should be set
using <b>XbaeMatrixSetCellUserData()</b> and retrieved using
<b>XbaeMatrixGetCellUserData()</b>. This resource cannot be
specified in a resource file and is copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcells</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of pointers to rows. Each row is an
array of String, one for each column in that row. For
example, the cells for a 2x3 Matrix could be set up as
follows:</p>
</td>
</table>


<p align=center><tt><img src="images/grohtml-XbaeMatrix5.png"></tt></p>


<p align=center><img src="images/grohtml-XbaeMatrix6.png"></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Now cells could be used as the <b>XmNcells</b> resource.
If <b>XmNcells</b> is <small>NULL,</small> <b>XbaeMatrix</b>
will <b>not</b> generate an internal table of empty Strings.
This implies that if <b>XmNcells</b> is <b>NULL</b>, no
cells have been set. This resource is copied. See the
discussion in <b>XmNcellBackgrounds</b> for how to specify
<b>XmNcells</b> in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNclipWindow</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The widget ID of the clip window. The clip window is the
widget that contains the non-fixed region of cells. This
resource can not be set to a new value.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolors</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of pointers to rows. Each row is an
array of Pixel values, one for each column in that row. This
data structure is the same as that for <b>XmNcells</b>,
except each entry is a Pixel instead of a String. The text
in a cell will be drawn in the color specified for that
cell. If <b>XmNcolors</b> is <small>NULL,</small> text will
be drawn using the color specified by <b>XmNforeground</b>.
This resource is copied. See the discussion in
<b>XmNcellBackgrounds</b> for how to specify
<b>XmNcolors</b> in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnAlignments</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of alignments (unsigned char), one for
each column. Each element can be one of
<b>XmALIGNMENT_BEGINNING</b>, <b>XmALIGNMENT_CENTER</b> or
<b>XmALIGNMENT_END</b>. This specifies the alignment of the
text or pixmap in each cell of that column. See the
description of <b>XmNalignment</b> for <b>XmLabel(3X)</b>.
If <b>XmNcolumnAlignments</b> is <small>NULL,</small> each
column will default to <b>XmALIGNMENT_BEGINNING</b>. This
resource is copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnButtonLabels</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>An array of Booleans that tells the <b>XbaeMatrix</b>
which column labels should be drawn as a button. Each
Boolean can be specified as a Boolean string or integer. In
order to use this resource, <b>XmNbuttonLabels</b> should be
set to False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnLabelAlignments</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of alignments (unsigned char), one for
each column label. Each element can be one of
<b>XmALIGNMENT_BEGINNING, XmALIGNMENT_CENTER</b> or
<b>XmALIGNMENT_END</b>. This specifies the alignment of the
text of each column label. See the description of
<b>XmNalignment</b> for <b>XmLabel(3X)</b>. If
<b>XmNcolumnLabelAlignments</b> is <small>NULL,</small> each
column label will default to <b>XmALIGNMENT_BEGINNING</b>.
This resource is copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnLabelColor</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a Pixel value in which to draw the
<b>XmNcolumnLabels</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnLabels</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of Strings to be drawn above each
column. Each String may have embedded newline characters, in
which case the label will be drawn on multiple lines. If
<b>XmNcolumnLabels</b> is <small>NULL,</small> no labels
will be drawn. This resource is copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnMaxLengths</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of int, one for each column. These
specify the maximum length of a String which can be entered
in the cells in that column. See the description of the
<b>XmText(3X) XmNmaxLength</b> resource. If
<b>XmNcolumnMaxLengths</b> is <small>NULL,</small> then the
corresponding width from <b>XmNcolumnWidths</b> is used.
This resource is copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnShadowTypes</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies on a per column basis, the
<b>XmNcellShadowType</b>. Values for the resource are the
same as for <b>XmNcellShadowType</b>. This resource is
copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnUserData</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to a user defined data area associated with a
particular column. The data should be set using
<b>XbaeMatrixSetColumnUserData()</b> and retrieved using
<b>XbaeMatrixGetColumnUserData()</b>. This resource cannot
be specified in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumnWidths</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of short, one for each column. These
specify the visible width the cells in each column. See the
description of the <b>XmText(3X) XmNcolumns</b> resource.
<b>XmNcolumnWidths</b> must not be <small>NULL.</small> This
resource is copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNcolumns</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the total number of columns of cells.
<b>XmNcolumns</b> must be at least one. If the number of
columns is changed via XtSetValues, then
<b>XmNcolumnWidths</b> must change,
<b>XmNcolumnMaxLengths</b> must change or be
<small>NULL,</small> <b>XmNcolumnLabels</b> must change or
be <small>NULL,</small> <b>XmNcolumnAlignments</b> must
change or be <small>NULL</small> and
<b>XmNcolumnLabelAlignments</b> must change or be
<small>NULL.</small> The preferred way to dynamically change
the number of columns is to use
<b>XbaeMatrixAddColumns()</b> or
<b>XbaeMatrixDeleteColumns()</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNdefaultActionCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called when a double
click occurs in a cell. A pointer to an
<b>XbaeMatrixDefaultActionCallbackStruct</b> is passed to
the callbacks. Events are reported to the cell in which the
double click occurs regardless of whether or not a callback
exists. This callback is called by the DefaultAction()
action and is NULL by default. The
<b>XmNdefaultActionCallback</b> is ideal for popping up a
dialog or other window when a double click occurs.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNdoubleClickInterval</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the amount of time between mouse clicks before
it is considered a double click. A double click is defined
to be the time between the realease of the mouse button and
subsequent press in the same cell. The default value is
inherited from the display.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNdrawCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called when a cell
needs to be drawn. A pointer to an
<b>XbaeMatrixDrawCellCallbackStruct</b> is passed to the
callbacks. The application can specify what to put in a cell
by modifying the callback struct&rsquo;s data fields. When
the application callback returns to the widget code, the
type field will determine what the widget draws on the
screen. If the value is <b>XbaeString</b>, then the regular
string drawing function for the widget will be called with
the value the applicaton assigned to the string field in the
struct. Else, if the value is <b>XbaePixmap</b>, the widget
will do an <b>XCopyPlane()</b>, in the case of a single
plane bitmap, or <b>XCopyArea()</b>, in the case of a color
pixmap. The width and height of cell is passed in the struct
so the application can know how big to make the pixmap. In
neither case will a copy of the string or the pixmap value
be made. The widget also uses the <b>XmNcolumnAlignments</b>
resource to determine the horizontal alignment of the
Pixmap. To have an editable array of data when the
<b>XmNdrawCellCallback</b> is used and the cell is of type
XbaeString, use the <b>XmNwriteCellCallback</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNenterCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called immediately
before a cell is to be edited. This callback list is called
by the EditCell() action. A pointer to an
<b>XbaeMatrixEnterCellCallbackStruct</b> is passed to the
callbacks. The application can specify the editability of
specific cells using this callback list as well as
specifying configuration options for the <b>XmText</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNevenRowBackground</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a background cell Pixel value to use on even
rows. This allows the matrix to look like computer paper.
For wider bands of color, increase the size of
<b>XmNaltRowCount</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNfill</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If True, controls whether the matrix should fill all of
its available space when additional space if available, or
if it should simply size itself as large as necessary,
regardless of any additonal available space.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNhorzFill</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If True, controls whether the matrix should highlight
available space on the right of the selected cell(s) when
the selected cell(s) are in the last column of the
matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNvertFill</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If True, controls whether the matrix should highlight
available space below the selected cell(s) when the selected
cell(s) are in the last row of the Matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNfixedColumns</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the number of leading columns (starting from
the left column) which should not be horizontally
scrollable. <b>XmNfixedColumns</b> must be less than
<b>XmNcolumns</b>-<b>XmNtrailingFixedColumns</b>. Cells in
fixed columns are not editable unless
<b>XmNtraverseFixedCells</b> is set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNfixedRows</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the number of leading rows (starting from the
top row) which should not be vertically scrollable.
<b>XmNfixedRows</b> must be less than
<b>XmNrows</b>-<b>XmNtrailingFixedRows</b>. Cells in fixed
rows are not editable unless <b>XmNtraverseFixedCells</b> is
set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNfontList</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the font list to be used for the text displayed
in the cells and the <b>XmText</b> cell edit widget. See
<b>XmFontListCreate(3X)</b> to create a font list. This
resource is copied. The preferred way of specifying a font
for the table is in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNgridLineColor</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the color in which the grid line should be
drawn if <b>XmNgridType</b> is set to
<b>XmGRID_CELL_LINE</b>, <b>XmGRID_ROW_LINE</b> or
<b>XmGRID_COLUMN_LINE</b>. The default is that of
<b>XmNforeground</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNgridType</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Sets the way the matrix grid is drawn. The grid types
available include <b>XmGRID_NONE</b>,
<b>XmGRID_CELL_LINE</b>, <b>XmGRID_CELL_SHADOW</b>,
<b>XmGRID_ROW_LINE</b>, <b>XmGRID_ROW_SHADOW</b>,
<b>XmGRID_COLUMN_LINE</b> and <b>XmGRID_COLUMN_SHADOW</b>.
All of the grid types vary the way the shadow or line is
drawn around the cell. <b>XmGRID_ROW_LINE</b>,
<b>XmGRID_ROW_SHADOW</b>, <b>XmGRID_COLUMN_LINE</b>, and
<b>XmGRID_COLUMN_SHADOW</b> only draw a border around the
rows and columns, giving a more tabular rather than
spreadsheet appearance. The default is
<b>XmGRID_CELL_LINE</b> which draws a solid line around the
cells.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNhighlightedCells</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of pointers to rows. Each row is an
array of unsigned char values, one for each column in that
row. This data structure is the same as that for
<b>XmNcells</b>, except each entry is an unsigned char
instead of a String. Each entry in the array will have a
value that is either <b>HighlightNone</b>,
<b>HighlightCell</b>, <b>HighlightRow</b>,
<b>HighlightColumn</b>, <b>HighlightOther</b> or the bitwise
OR of those values, depending on the value of
<b>XmNgridType</b> and which call was used to highlight the
cell. A cell will be drawn as highlighted if the
corresponding unsigned char does not have the value
<b>HighlightNone</b>. If <b>XmNhighlightedCells</b> is
<small>NULL,</small> <b>XbaeMatrix</b> then no cells have
been highlighted. This resource is copied, and cannot be
specified in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNhorizontalScrollBar</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The widget ID of the horizontal <b>XmScrollBar</b>. This
resource exists only for those applications that need to tie
another scrollbar to the matrix&rsquo;s for synchronized
scrolling. This resource can not be set to a new value.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNhorizontalScrollBarDisplayPolicy</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Determines when to display a horizontal scrollbar in the
matrix. Possible values are <b>XmDISPLAY_NONE</b>, which
makes the matrix never display the scrollbar,
<b>XmDISPLAY_AS_NEEDED</b>, which makes the matrix display
the scrollbar when the list is too large, and
<b>XmDISPLAY_STATIC</b>, which makes the matrix always
display the scrollbar.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNlabelFont</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the font list to be used for the text displayed
in the row and column labels. If <b>XmNlabelFont</b> is not
specified, the value of <b>XmNfontList</b> is copied and
used for the label fonts. If <b>XmNboldLabels</b> is set,
this resource will override the value and set it to False.
See <b>XmFontListCreate(3X)</b> to create a font list. This
resource is copied. The preferred way of specifying a font
for the labels is in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNlabelActivateCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called after a button
label has been pressed. A pointer to an
<b>XbaeMatrixLabelActivateCallbackStruct</b> is passed to
the callbacks on this list.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNleaveCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called immediately
after a cell has been edited. This callback list is called
by the EditCell() and CommitEdit() actions. A pointer to an
<b>XbaeMatrixLeaveCellCallbackStruct</b> is passed to the
callbacks. The application can perform cell specific data
checks using this callback list.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNleftColumn</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Allows the programmer to specify the first non fixed
column to appear on the leftmost side of the matrix. This
resource compliments the <b>XmNtopRow</b> resource. See the
discussion of <b>XmNtopRow</b> for more details.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNmodifyVerifyCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called before text is
deleted from or inserted into the <b>XmText</b> cell edit
widget. A pointer to an
<b>XbaeMatrixModifyVerifyCallbackStruct</b> is passed to the
callbacks. See the description of the <b>XmText(3X)
XmNmodifyVerifyCallback</b> resource.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNmultiLineCell</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>is a boolean (default False) which specifies whether the
matrix displays more than one line of text in a cell, when
appropriate.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNoddRowBackground</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a background cell color to use on odd rows.
This allows the matrix to look like computer paper. For
wider bands of color, increase the size of
<b>XmNaltRowCount</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNprocessDragCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called from the
ProcessDrag() action A pointer to an
<b>XbaeMatrixProcessDragCallbackStruct</b> will be passed to
the callbacks. The application can use this callback list to
perform particular processing during a drag.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNresizeCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called when the
matrix is resized.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNresizeColumnCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called when a column
is dynamically resized by the user.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNreverseSelect</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Overrides the default <b>XmNselectedForeground</b> and
<b>XmNselectedBackground</b> and draws a selected cell in
the colours specified by <b>XmNcellBackgrounds</b> and
<b>XmNcolors</b> for the particular cell. If these values
are not set then the default colours will be used.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrowButtonLabels</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>An array of Booleans that tells the <b>XbaeMatrix</b>
which row labels should be drawn as a button. Each Boolean
can be specified as a Boolean string or integer. In order to
use this resource, <b>XmNbuttonLabels</b> should be set to
False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrowLabelAlignment</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the alignment of the row labels. It can be one
of <b>XmALIGNMENT_BEGINNING</b>, <b>XmALIGNMENT_CENTER</b>
or <b>XmALIGNMENT_END</b>. See the description of
<b>XmNalignment</b> for <b>XmLabel(3X)</b>.
<b>XmNrowLabelAlignment</b> defaults to
<b>XmALIGNMENT_END</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrowLabelColor</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a Pixel value in which to draw the
<b>XmNrowLabels</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrowLabelWidth</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the width of the row labels.
<b>XmNrowLabelWidth</b> defaults to the width of the longest
row label.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrowLabels</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of Strings to be drawn to the left of
each row. If <b>XmNrowLabels</b> is <small>NULL,</small> no
labels will be drawn. This resource is copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrowShadowTypes</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies on a per row basis, the
<b>XmNcellShadowType</b>. Values for the resource are the
same as for <b>XmNcellShadowType</b>. This resource is
copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrowUserData</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to a user defined data area associated with a
particular row. The data should be set using
<b>XbaeMatrixSetRowUserData()</b> and retrieved using
<b>XbaeMatrixGetRowUserData()</b>. This resource cannot be
specified in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNrows</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the total number of rows of cells.
<b>XmNrows</b> must be at least one. If the number of rows
is changed via XtSetValues, then <b>XmNrowLabels</b> must
change or be <small>NULL.</small> The preferred way to
dynamically change the number of rows is to use
<b>XbaeMatrixAddRows()</b> or
<b>XbaeMatrixDeleteRows()</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNscrollBarPlacement</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Determines where the scrollbars will be drawn. See the
discussion of <b>XmNscrollBarPlacement</b> in
<b>XmScrolledWindow(3)</b> for a complete discussion on this
resource.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNselectCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called from the
SelectCell() action. A pointer to an
<b>XbaeMatrixSelectCellCallbackStruct</b> will be passed to
the callbacks. The application can use this callback list to
perform selection/deselection of cells using the provided
widget methods.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNselectScrollVisible</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies whether the matrix will scroll to make the
selected cell visible. This flag is only checked when cells
are selected programmatically, as when the user selects a
cell with the mouse, it will already be visible.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNselectedBackground</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Allows the background of selected cells in
<b>XmNselectedCells</b> to be specified.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNselectedCells</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Points to an array of pointers to rows. Each row is an
array of Boolean values, one for each column in that row.
This data structure is the same as that for <b>XmNcells</b>,
except each entry is a Boolean instead of a String. A cell
will be drawn as selected if the corresponding Boolean is
True. If <b>XmNselectedCells</b> is <small>NULL,</small>
then no cells have been selected. This resource is copied.
It cannot be specified in a resource file.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNselectedForeground</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Allows the foreground of selected cells in
<b>XmNselectedCells</b> to be specified.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNshadowType</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the type of shadow drawn around the border of
the matrix. Possible values for this resource are
<b>XmSHADOW_OUT</b>, <b>XmSHADOW_IN</b>,
<b>XmSHADOW_ETCHED_OUT</b>, and <b>XmSHADOW_ETCHED_IN</b>.
The default shadow type is XmSHADOW_OUT.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNshowArrows</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies whether arrows should be drawn when data in a
cell has been obscured due to the value of
<b>XmNcolumnWidths</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNspace</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the distance that separates the ScrollBars from
the cell grid. The default value is 4 pixels.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtextBackground</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the background of the <b>XmText</b> cell edit
widget. This can be used to make the <b>XmText</b> stand out
against a uniformly colored matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtextField</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The widget ID of the <b>XmText</b>. This resource cannot
be set to a new value.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtextShadowThickness</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the <b>XmNshadowThickness</b> of the
<b>XmText</b>. Interesting effects can be achieved by
setting the <b>XmNcellHighlightThickness</b> to 0 and
replacing the highlight with an indented shadow.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtextTranslations</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the <b>XmNtranslations</b> resource of the
<b>XmText</b> cell edit widget. See the description of
<b>XmNtranslations</b> in <b>XmText(3X)</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtopRow</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the row which should be displayed at the top of
the non-fixed rows. <b>XmNtopRow</b> is specified relative
to the first non-fixed row, so (XmNfixedRows + XmNtopRow) is
the actual row number which will be moved to the top. If
(XmNtopRow &gt; (XmNrows - (&lt;number of rows visible&gt; +
XmNfixedRows), then the actual row which will be moved to
the top is (XmNrows - (&lt;number of rows visible&gt; +
XmNfixedRows).</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtrackCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>specifies a list of callbacks to be called when the mouse
pointer is being moved.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtrailingAttachedBottom</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Indicated that any trailing fixed rows should be attached
to the bottom of the matrix. This resource only has effect
when <b>XmNfill</b> is true and <b>XmNtrailingFixedRows</b>
is greater than zero.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtrailingFixedColumns</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the number of trailing columns (starting from
the right column) which should not be horizontally
scrollable. <b>XmNtrailingFixedColumns</b> must be less than
<b>XmNcolumns</b>-<b>XmNfixedColumns</b>. Cells in trailing
fixed columns are not editable unless
<b>XmNtraverseFixedCells</b> is set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtrailingFixedRows</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the number of trailing rows (starting from the
bottom row) which should not be vertically scrollable.
<b>XmNtrailingFixedRows</b> must be less than
<b>XmNrows</b>-<b>XmNfixedRows</b>. Cells in trailing fixed
rows are not editable unless <b>XmNtraverseFixedCells</b> is
set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtraverseCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called before a new
cell is edited. These callbacks are called by the EditCell()
action, they are also called when <b>XbaeMatrix</b> receives
the focus while the <b>XmText</b> edit widget is unmapped. A
pointer to an <b>XbaeMatrixTraverseCellCallbackStruct</b> is
passed to the callbacks. The application can specify the
next cell which should be edited via this callback list,
thereby performing custom traversal.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtraverseFixedCells</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If True, this resource allows fixed cells and columns to
be edited. The default is to not allow fixed rows or columns
to be edited.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNuseXbaeInput</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>This boolean value determines whether to use XbaeInput or
XmTextField as the widget used for editing cells. Default is
not to use XbaeInput.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNvalueChangedCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called after text is
deleted from or inserted into the <b>XmText</b> cell edit
widget. A pointer to an
<b>XbaeMatrixValueChangedCallbackStruct</b> is passed to the
callbacks. See the description of the <b>XmText(3X)
XmNvalueChangedCallback</b> resource.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNverticalScrollBar</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The widget ID of the vertical <b>XmScrollBar</b>. This
resource exists only for those applications that need to tie
another scrollbar to the matrix&rsquo;s for synchronized
scrolling. This resource can not be set to a new value.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNverticalScrollBarDisplayPolicy</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Determines when to display a horizontal scrollbar in the
matrix. Possible values and their effects are listed under
<b>XmNhorizontalScrollBarDisplayPolicy</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNvisibleColumns</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the number of non-fixed columns which should be
visible. The widget will request a size which will allow
<b>XmNvisibleColumns</b> columns to be displayed. The
programmer should take into allowance any
<b>XmNfixedColumns</b> that are specified. This feature
becomes even more apparent if the number of
<b>XmNfixedColumns</b> changes at runtime as the value may
need to be adjusted to avoid a warning.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNvisibleRows</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies the number of rows which should be visible at
any one time. The widget will request a size which will
allow <b>XmNvisibleRows</b> rows to be displayed.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNwriteCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Specifies a list of callbacks to be called when a cell
value changes and an <b>XmNdrawCellCallback</b> is defined.
A pointer to an <b>XbaeMatrixWriteCellCallbackStruct</b> is
passed to the callbacks. The <b>XmNwriteCellCallback</b>
allows data to be written back into the application&rsquo;s
data structure and must be defined for an editable
<b>XbaeMatrix</b> with an <b>XmNdrawCellCallback</b>.</p>
</td>
</table>
<a name="Inherited Resources"></a>
<h2>Inherited Resources</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>The following table lists the resources which
<b>XbaeMatrix</b> inherits from it&rsquo;s superclasses
<b>XmManager</b>, <b>Compositeand Core</b>. For a complete
description of each resource, refer to the man page for that
superclass. The codes in the
&lsquo;&lsquo;Access&rsquo;&rsquo; column indicate whether
the given resource can be set at creation time (C), or set
by using XtSetValues (S), or retrieved by using XtGetValues
(G).</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix7.png"></p>


<p align=center><img src="images/grohtml-XbaeMatrix8.png"></p>


<p align=center><img src="images/grohtml-XbaeMatrix9.png"></p>
<a name="Callback Information"></a>
<h2>Callback Information</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixAnyCallbackStruct</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>A callback struct that is suitable for all callbacks that
require the <i>reason</i>, <i>event</i>, <i>row</i> and
<i>column</i> to be available. Any callback called may
therefore cast the third parameter to the following struct
in <b>XbaeMatrix</b> and can rest assured that evrything in
it will be available.</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix10.png"></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Each of the members are set to the appropriate struct for
the callback.</p>
<!-- INDENTATION -->
<p>If this idea is a little foreign to you, recommended
reading is K&amp;R II page 213.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNdefaultActionCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNdefaultActionCallback</b> list are
called when the DefaultAction() action occurs. The
application can bind the DefaultAction() action to any
pointer based event. When a double click occurs on this
pointer event, DefaultAction() will call the callbacks on
the <b>XmNdefaultActionCallback</b> list. A pointer to the
following structure is passed to each callback on the
<b>XmNdefaultActionCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix11.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeDefaultActionReason .</b></p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The event that invoked this callback.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The row number of the cell in which the double click
occurred.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The column number of the cell in which the double click
occurred.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If an application has an <b>XmNdefaultActionCallback</b>,
then the callbacks on the list will be called when the user
clicks twice in a cell within <b>XmNdoubleClickInterval</b>,
enabling some action to occur for the particular
cell.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNdrawCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNdrawCellCallback</b> list are
called when the widget needs to draw a cell. A pointer to
the following structure is passed to each callback on the
<b>XmNdrawCellCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix12.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeDrawCellReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Always set to <small>NULL</small></p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The row number of the cell that needs to be drawn.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The column number of the cell that needs to be
drawn.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>width</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The width of the cell that needs to be drawn.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>height</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The height of the cell that needs to be drawn.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>type</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The type of &lsquo;&lsquo;data&rsquo;&rsquo; the
programmer wants drawn in the cell, or which field should be
looked at for data to draw: string or pixmap.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>string</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The string to draw if <i>type</i> is set to
<b>XbaeString</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>pixmap</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The pixmap to copy if <i>type</i> is set to
<b>XbaePixmap</b>. It will be clipped to width by height if
necessary.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>mask</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>A mask for the pixmap as obtained from the XPM library.
<i>mask</i> is only necessary when <i>pixmap</i> has a depth
greater than one.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>foreground</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The foreground color of the cell.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>background</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The background color of the cell.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="8%">

<p><i>depth</i></p>
</td>
<td width="8%"></td>
<td width="66%">

<p>The depth of the pixmap image (in bits per pixel).</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If the application adds this callback, when the
<b>XbaeMatrix</b> determines that a cell at (row, column)
needs to be redrawn, the normal cell drawing mechanism will
be skipped and this callback called so the application can
tell the widget what to put in the cell.</p>
<!-- INDENTATION -->
<p>The <i>type</i> field is defaulted to <b>XbaeString</b>
and no cacheing or saving of the string or pixmap is
done.</p>
<!-- INDENTATION -->
<p>If the application sets <i>type</i> to XbaePixmap, the
width, height and depth of the returned pixmap will be
calculated with a call to <b>XGetGeometry()</b>. If the
programmer wishes to supply the width, height and depth
there is a marked improvement as a round trip to the X
server is avoided. Note that all geometry parameters must be
supplied to ensure successful display of the pixmap.</p>
<!-- INDENTATION -->
<p>If a <i>mask</i> is also provided, it will be used to
display the pixmap transparently. Pixmaps drawn in cells
also respect the value of <b>XmNcolumnAlignments</b>.</p>
<!-- INDENTATION -->
<p>By defining an <b>XmNdrawCellCallback</b> the need for
the storage of the <b>XbaeMatrix</b> data within the matrix
is eliminated and can prove to be advantageous for memory
usage.</p>
<!-- INDENTATION -->
<p>To write the data back to the application, use the
<b>XmNwriteCellCallback</b> described below.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNenterCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNenterCellCallback</b> list are
called from the EditCell() action just before a cell is
edited to determine it&rsquo;s editability. A pointer to the
following structure is passed to each callback on the
<b>XmNenterCellCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix13.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>reason</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>Set to <b>XbaeEnterCellReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>event</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The event that invoked the callback.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>row</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The row number of the cell about to be edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>column</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The column number of the cell about to be edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>position</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The location of the cursor in the text field. The
default is to place the cursor at the end of the string in
the cell.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>pattern</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>A pattern for the <b>XbaeInput</b> widget (see
<tt>XbaeInput(3)</tt>). The default is to not specify a
<i>pattern</i>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>auto_fill</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>Used in conjunction with the setting of the
<i>pattern</i> to allow literals in the <i>pattern</i> to be
automatically inserted.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>convert_case</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>If the <i>pattern</i> specifies an upper or lower case
letter, the character typed in the position can
automatically be converted to the appropriate case when set
to True. The default is to not convert the case of the typed
letter.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>overwrite_mode</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>Normally, the cursor appears as the familiar I caret. By
setting <i>overwrite_mode</i> to True, the text field will
go into overwrite mode where keystrokes replace the
character underneath the block cursor.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>select_text</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>Indicates whether the text in the cell should be
highlighted (only valid if <i>doit</i> is set to True
also.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="5%">

<p><i>map</i></p>
</td>
<td width="11%"></td>
<td width="66%">

<p>Tells the matrix if the <b>XmText</b> should be mapped
onto the cell. Only makes sense if <i>doit</i> is set to
False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>num_params</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The number of String parameters passed to the EditCell()
action.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>params</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>An array containing the num_params String parameters
passed to the EditCell() action.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>doit</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Indicates whether or not this cell is editable. Setting
doit to False will make this cell not editable. The default
value is True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If the application determines that the cell at
(<i>row</i>, <i>column</i>) is not editable, it should set
the doit flag to False. If the <i>map</i> flag is also set
to False, <b>XbaeMatrix</b> will not place the <b>XmText</b>
cell editor on the cell. If <i>map</i> is left as True, the
<b>XmText</b> will be placed on the cell but the user will
not be able to add or delete characters from it. If the
application leaves <i>doit</i> as True, then the TextField
will be editable. In addition, if <i>select_text</i> is set
to True, the text in the cell will be selected via
<b>XmTextSetSelection</b>. Assuming <b>XmNpendingDelete</b>
for the <b>XmText</b> is also True, the selected text will
be deleted as soon as the next text insertion
occurs.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNlabelActivateCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNlabelActivateCallback</b> list are
called after a button label has been activated via a mouse
click. A pointer to the following structure is passed to
each callback on the <b>XmNlabelActivateCallback</b>
list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix14.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>reason</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>Set to <b>XbaeLabelActivateReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>event</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The event that invoked this callback.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>row</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The row number of the button label or -1 if the button
was a column label.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>column</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The column number of the button label or -1 if the
button was a row label.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>row_label</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>If the button label that invoked the callback is a row
label, then this value is set to True. If it was a column
label then it is set to False.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>label</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The label on the button that was pressed.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>When the <b>XbaeMatrix</b> receives a ButtonRelease event
on the same button label that it received a ButtonPress
event, the <b>XmNlabelActivateCallback</b> is called to
allow the programmer to respond to the event. The callback
has been provided to emulate some popular spreadsheets on
the market.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNleaveCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNleaveCellCallback</b> list are
called from the EditCell() and CommitEdit() actions just
before the edit to the current cell is committed. The
application can validate the changes made to the cell, and
allow or disallow them. A pointer to the following structure
is passed to each callback on the
<b>XmNleaveCellCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix15.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeLeaveCellReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The event that invoked this callback.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The row number of the cell being edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The column number of the cell being edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>value</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Contains the new data which will be stored in this cell
if doit is True. The memory pointed to by value may be
modified, or if the new contents are larger than the current
contents, then value should be set to point to a larger
piece of allocated memory.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>doit</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Indicates whether the edits applied to this cell should
actually be stored into <b>XbaeMatrix</b>. Setting doit to
False will cause the changes to be discarded and the cell
will retain its original value. The default value is
True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If the application determines that the value entered in
the cell at (row, column) is not valid, it should set the
doit flag to False. This will prevent the changes from being
stored in the cell. The TextField edit widget will remain on
the current cell. If the application leaves doit as True,
then the changes made to the cell will be committed and the
TextField will move to the next cell or be unmapped. The
application can also modify the String in value, e.g. to
force a String to be all upper case.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNmodifyVerifyCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNmodifyVerifyCallback</b> list are
called while a cell is being edited. The callbacks are
called before text is inserted into or deleted from the
TextField edit widget. A pointer to the following structure
is passed to each callback on the
<b>XmNmodifyVerifyCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix16.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>reason</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>Set to <b>XbaeModifyVerifyReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>event</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>Always set to NULL.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>row</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The row number of the cell being edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>column</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The column number of the cell being edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>verify</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The contents of this structure and its use are
documented in the <b>XmText(3X)</b> man page.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>prev_text</i></p>
</td>
<td width="2%"></td>
<td width="66%">

<p>The contents of the cell as seen by this user before the
new text. If other text has already been entered, this value
will not match the official <b>XbaeMatrix</b> value of the
cell. This pointer and the string should not be
modified.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNprocessDragCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNprocessDragCallback</b> list are
called from the ProcessDrag() action. The application can
bind the ProcessDrag() action to any pointer based event,
though by default it is bound to the Button2Down event. When
this event occurs, ProcessDrag() will call the callbacks on
the <b>XmNprocessDragCallback</b> list. A pointer to the
following structure is passed to each callback on the
<b>XmNprocessDragCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix17.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeProcessDragReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The XEvent which invoked the ProcessDrag() action.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The row number of the cell where the drag was
initiated..</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The column number of the cell where the drag was
initiated..</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>string</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The string in the cell where the drag was initiated if
<i>type</i> is <b>XbaeString</b>. This is provided as a
convenience to the application.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>type</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The type of the cell in which the drag was
initiated.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>pixmap</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The pixmap in the cell where the drag was initiated if
<i>type</i> is <b>XbaePixmap</b>. This is provided as a
convenience to the application.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>mask</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>A mask for the pixmap as obtained from the XPM library.
<i>mask</i> is only necessary when <i>pixmap</i> has a depth
greater than one. Also provided as a convenience to the
application.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>num_params</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The number of String parameters passed to the
ProcessDrag() action.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>params</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>An array containing the num_params String parameters
passed to the ProcessDrag() action.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The application can use the <b>XmNprocessDragCallback</b>
list to implement particular processing for Motif&rsquo;s
drag-and-drop.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNresizeCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNresizeCallback</b> list are called
when the <b>XbaeMatrix</b> widget is resized. A pointer to
the following structure is passed to each callback on the
<b>XmNresizeCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix18.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeResizeReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Always set to <small>NULL</small></p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to the number of rows in the matrix (provided for
convenience).</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to the number of colums in the matrix (provided for
convenience).</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>width</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The new width of the <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>height</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The new height of the <b>XbaeMatrix</b> widget.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The application can use the <b>XmNresizeCallback</b> to
adjust such resources as <b>XmNcolumnWidths</b>,
<b>XmNvisibleColumns</b> and <b>XmNvisibleRows</b> when the
widget containing an <b>XbaeMatrix</b> widget is
resized.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNresizeColumnCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNresizeColumnCallback</b> list are
called when a column of the <b>XbaeMatrix</b> widget is
dynamically resized by the user. A pointer to the following
structure is passed to each callback on the
<b>XmNresizeColumnCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix19.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>reason</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>Set to <b>XbaeResizeColumnReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>event</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>The XEvent that ended the resize. The event will be of
type <b>XButtonReleasedEvent</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>row</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>The row in which the <b>ResizeColumn()</b> action
began.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>column</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>The column in which the <b>ResizeColumn()</b> action
began (and ended).</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>which</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>The column that was resized in the <b>ResizeColumn()</b>
action.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>columns</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>The number of columns in the <b>XbaeMatrix</b>
widget.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>column_widths</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The widths of each column as they stand <i>after</i> the
<b>ResizeColumn()</b> action.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The application can use the
<b>XmNresizeColumnCallback</b> to perform post processing
after a column has been resized. By adjusting the values
contained in <i>column_widths</i> the <b>XbaeMatrix</b>
widget will use the values upon return from the callback.
Changing the number of columns in the matrix in the
<b>XmNresizeColumnCallback</b> should be used carefully as
it may cause unexpected results.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNselectCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNselectCellCallback</b> list are
called from the SelectCell() action. The application can
bind the SelectCell() action to any pointer based event.
When this event occurs, SelectCell() will call the callbacks
on the <b>XmNselectCellCallback</b> list. A pointer to the
following structure is passed to each callback on the
<b>XmNselectCellCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix20.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeSelectCellReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The XEvent which invoked the SelectCell() action.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The row number of the cell which was selected.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The column number of the cell which was selected.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>selected_cells</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The value of the <b>XmNselectedCells</b> resource. This
is provided as a convenience to the application and will be
<small>NULL</small> if no cells have yet been selected.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="8%">

<p><i>cells</i></p>
</td>
<td width="8%"></td>
<td width="66%">

<p>The value of the <b>XmNcells</b> resource. This is
provided as a convenience to the application and will be
<small>NULL</small> if no cells have been specified or the
<b>XmNdrawCellCallback</b> is being used.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>num_params</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The number of String parameters passed to the
SelectCell() action.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>params</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>An array containing the num_params String parameters
passed to the SelectCell() action.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The application can use the <b>XmNselectCellCallback</b>
list to implement it&rsquo;s own selection model. The
<b>XbaeMatrixSelectCellCallbackStruct</b> contains the array
of String parameters passed to the SelectCell() action which
invoked this callback. By binding the SelectCell() action to
various events via the translation manager, and using String
action parameters to distinguish them, the application can
implement various selection models. For example, the
following translations could be used to implement a model in
which a modifier key indicates whether a single cell or an
entire row should be selected. The callbacks on the
<b>XmNselectCellCallback</b> list would examine the
parameter and take the appropriate action.</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix21.png"></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The callbacks on the <b>XmNselectCellCallback</b> list
can also be used in other ways, e.g. to pop up a cell
specific menu.</p>
<!-- INDENTATION -->
<p><b>NOTE:</b> If no cells have been selected, the value of
<i>selected_cells</i> will be <small>NULL.</small> The same
applies for <i>cells</i>. Care must be taken so as not to
dereference these members of the callback struct.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtrackCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNtrackCellCallback</b> list are
being called by the HandleTracking() action, which is
triggered by pointer motion. One of the purposes of this
callback list is to figure out from which cell to which cell
the pointer is being moved. A pointer to the
<b>XbaeMatrixTrackCellCallbackStruct</b> structure is being
passed. Its fields are defined as :</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix22.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>reason</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>Set to <b>XbaeSelectCellReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>event</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>The XEvent which invoked the HandleTracking()
action.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>row</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>This is the row number that the pointer is currently
in.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>column</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>This is the column number that the pointer is currently
in.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>prev_row</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>The row that the pointer was previously in.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>prev_column</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The column that the pointer was previously in.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>pointer_x</i></p>
</td>
<td width="2%"></td>
<td width="46%">

<p>The x position of the pointer.</p>
</td>
<td width="20%">
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="14%">

<p><i>pointer_y</i></p>
</td>
<td width="2%"></td>
<td width="46%">

<p>The y position of the pointer.</p>
</td>
<td width="20%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNtraverseCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNtraverseCellCallback</b> list are
called from the EditCell() action, they are also called when
<b>XbaeMatrix</b> receives the focus while the TextField
edit widget is unmapped. The application can customize cell
traversal using these callbacks. <b>XbaeMatrix</b> has a
default traversal order, outlined below, which the
application can override. A pointer to the following
structure is passed to each callback on the
<b>XmNtraverseCellCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix23.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>reason</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>Set to <b>XbaeTraverseCellReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>event</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>The event that invoked this callback.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>row</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>The row number of the cell currently being edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>column</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>The column number of the cell currently being
edited.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>next_row</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>The row number of the next cell to be edited, this can
be changed by the application.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>next_column</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The column number of the next cell to be edited, this can
be changed by the application.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>fixed_rows</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The value of the <b>XmNfixedRows</b> resource. This is
provided as a convenience for the application in calculating
the next_row and next_column fields.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>fixed_columns</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The value of the <b>XmNfixedColumns</b> resource. This is
provided as a convenience for the application in calculating
the next_row and next_column fields.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>trailing_fixed_rows</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The value of the <b>XmNtrailingFixedRows</b> resource.
This is provided as a convenience for the application in
calculating the next_row and next_column fields.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>trailing_fixed_columns</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The value of the <b>XmNtrailingFixedColumns</b> resource.
This is provided as a convenience for the application in
calculating the next_row and next_column fields.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="13%">

<p><i>num_rows</i></p>
</td>
<td width="3%"></td>
<td width="66%">

<p>The value of the <b>XmNrows</b> resource. This is
provided as a convenience for the application in calculating
the next_row and next_column fields.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p><i>num_columns</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="34%"></td>
<td width="66%">
<p>The value of the <b>XmNcolumns</b> resource. This is
provided as a convenience for the application in calculating
the next_row and next_column fields.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>param</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The String value of the parameter passed to the
EditCell() action.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>qparam</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The XrmQuark value of the parameter passed to the
EditCell() action.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>The EditCell() action takes an arbitrary parameter which
it passes through to the callbacks on the
<b>XmNtraverseCellCallback</b> list in both String and
XrmQuark forms. The EditCell() action recognizes five
special parameters which it uses to implement it&rsquo;s
default cell traversal. These parameters and their
corresponding traversal results are:</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>Pointer</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>Set next_row and next_column to the cell underneath the
mouse pointer.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>Left</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>If we are currently editing cell (XmNfixedRows,
XmNfixedColumns), then do not move. Otherwise move one
column to the left, if that column is less than
<b>XmNfixedColumns</b> , then move up to the last column of
the row above.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>Right</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>If we are currently editing cell (XmNrows - 1,
XmNcolumns - 1), then do not move. Otherwise move one column
to the right, if that column is greater than or equal to
<b>XmNcolumns</b> , then move down to column
<b>XmNfixedColumns</b> of the row below.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>Up</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>Move up one row. If that row is less than
<b>XmNfixedRows</b> , then move to the last row.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="11%">

<p><i>Down</i></p>
</td>
<td width="5%"></td>
<td width="66%">

<p>Move down one row. If that row is greater than or equal
to <b>XmNrows</b> , then move to row
<b>XmNfixedRows</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If the EditCell() action recognizes one of these special
parameters, it calculates the new cell to be edited
accordingly and stores the results in the next_row and
next_column fields of the
<b>XbaeMatrixTraverseCellCallbackStruct</b>. If EditCell()
does not recognize it&rsquo;s parameter, it sets next_row
and next_column to the current row and column. It also
stores a String and XrmQuark version of it&rsquo;s parameter
in the param and qparam fields. EditCell() then calls the
callbacks on the <b>XmNtraverseCellCallback</b> list. These
callbacks can examine the parameter and recalculate the
next_row and next_column fields appropriately. The
application can override the default calculation for the
special parameters, or it can define an entirely new
parameter with a corresponding new calculation. It would do
this by binding EditCell() with a new application specific
parameter to an event in a translation table. It is expected
that application callbacks will use the XrmQuark version of
the parameter for efficiency reasons (by statically creating
the new XrmQuarks and comparing them against the incoming
qparam).</p>
<!-- INDENTATION -->
<p>When <b>XbaeMatrix</b> receives the focus and the
TextField edit widget is unmapped, it will call the
<b>XmNtraverseCellCallback</b> callbacks before attempting
to automatically edit the upper left most visible cell. The
<b>XbaeMatrixTraverseCellCallbackStruct</b> will have a
param of <small>NULL,</small> a qparam of
<small>NULLQUARK</small> and a row and column of 0.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNvalueChangedCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks on the <b>XmNvalueChangedCallback</b> list are
called while a cell is being edited. The callbacks are
called after text is inserted into or deleted from the
TextField edit widget. A pointer to the following structure
is passed to each callback on the
<b>XmNvalueChangedCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix24.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeValueChangedReason</b>.</p>
</td>
<td width="0%">
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The event that triggered this callback.</p>
</td>
<td width="0%">
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The row number of the cell being edited.</p>
</td>
<td width="0%">
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The column number of the cell being edited.</p>
</td>
<td width="0%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XmNwriteCellCallback</b></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>Callbacks (although it probably only makes sense to have
one) on the <b>XmNwriteCellCallback</b> list are called when
the widget needs to write data to a cell, but only when
<b>XmNdrawCellCallback</b> is defined. A pointer to the
following structure is passed to each callback on the
<b>XmNwriteCellCallback</b> list:</p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix25.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>reason</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Set to <b>XbaeWriteCellReason</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>Always set to <small>NULL</small></p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The row number of the cell that needs to be written.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The column number of the cell that needs to be
written.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>type</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The type of &lsquo;&lsquo;data&rsquo;&rsquo; contained
in the cell, either <b>XbaeString</b> or
<b>XbaePixmap</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>string</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The string to store if <i>type</i> is set to
<b>XbaeString</b>.</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>pixmap</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>The pixmap to store if <i>type</i> is set to
<b>XbaePixmap</b>. (maybe a little meaningless unless you
can edit a pixmap in a cell)</p>
</td>
<tr valign="top" align="left">
<td width="18%"></td>
<td width="10%">

<p><i>mask</i></p>
</td>
<td width="6%"></td>
<td width="66%">

<p>A mask for the pixmap as obtained from the XPM library.
<i>mask</i> is only necessary when <i>pixmap</i> has a depth
greater than one.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="18%"></td>
<td width="82%">
<p>If the application adds this callback, when the
<b>XbaeMatrix</b> is editable and has been assigned an
<b>XmNdrawCellCallback</b>, data on the widget can be edited
and stored back in the application&rsquo;s data structure.
Only if an <b>XmNdrawCellCallback</b> has been assigned to
the <b>XbaeMatrix</b> widget, will the
<b>XmNwriteCellCallback</b> be called.</p>
<!-- INDENTATION -->
<p>At the moment, <i>pixmap</i> and <i>mask</i> will be sent
to the <b>XmNwriteCellCallback</b> as
<small>NULL.</small></p>
</td>
</table>
<a name="Translations"></a>
<h2>Translations</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrix</b> inherits translations from
<b>XmManager</b>. In addition, <b>XbaeMatrix</b> uses the
following translation:</p>
</td>
</table>


<p align=center><tt><img src="images/grohtml-XbaeMatrix26.png"></tt></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrix</b> installs the following default
<b>XmNtextTranslations</b> on the <b>TextField</b> edit
widget:</p>
</td>
</table>


<p align=center><tt><img src="images/grohtml-XbaeMatrix27.png"></tt></p>
<a name="Action Routines"></a>
<h2>Action Routines</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>CancelEdit()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>If the single parameter to CancelEdit() is the String
True, then it unmaps the edit TextField, discarding any
changes which were made to the cell being edited. If the
parameter is False, then CancelEdit() restores the edit
TextField to the original contents of the cell, discarding
any changes made to the cell being edited. The TextField is
not unmapped.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>CommitEdit()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>CommitEdit() first calls any callbacks on the
<b>XmNleaveCellCallback</b> list to determine if the changes
made to the current cell are valid. If they are, it then
saves any changes made to the cell into the cell. If the
callbacks on the <b>XmNleaveCellCallback</b> list return
that the changes are not valid, CommitEdit() does
nothing.</p>
<!-- INDENTATION -->
<p>If the changes are valid, CommitEdit() examines
it&rsquo;s one parameter, which must be the string True or
False. If the parameter is True, then the edit TextField is
unmapped. If it is False, then the TextField is not
unmapped.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>DefaultAction()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>DefaultAction() sets up a mechanism for determining
whether two successive mouse clicks form a double click. The
DefaultAction() should normally be used in conjunction with
other pointer based events and provides a mechanism for
acting on double clicks in a cell.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>EditCell()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>EditCell() edits a new cell. EditCell() first calculates
the new cell to edit based on it&rsquo;s single parameter.
It then calls the callbacks on the
<b>XmNtraverseCellCallback</b> list to allow them to specify
a different cell to edit (see the discussion of
<b>XmNtraverseCellCallback</b> above). EditCell() then calls
the callbacks on the <b>XmNleaveCellCallback</b> list to
determine if the changes made to the current cell are valid.
If they are, it then saves any changes made to the cell into
the cell. If the changes are not valid, EditCell() does
nothing further.</p>
<!-- INDENTATION -->
<p>If the changes are valid, EditCell() attempts to scroll
the new cell to be edited so that it is fully visible. If
the new cell is in a fixed row or column, EditCell() returns
and does nothing further (these cells are not editable).
Otherwise, EditCell() calls the callbacks on the
<b>XmNenterCellCallback</b> list to determine if the new
cell is editable. It then moves the <b>XmText</b> edit
widget to the new cell, setting it&rsquo;s editability based
on the return from the <b>XmNenterCellCallback</b>
callbacks.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>ProcessDrag()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>ProcessDrag() calls the callbacks on the
<b>XmNprocessDragCallback</b> list, passing them a pointer
to a <b>XbaeMatrixProcessDragCallbackStruct</b>.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>ResizeColumns()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Allows the user to dynamically resize the column widths,
provided that <b>XmNallowColumnResize</b> is True.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>SelectCell()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>SelectCell() calls the callbacks on the
<b>XmNselectCellCallback</b> list, passing them a pointer to
a <b>XbaeMatrixSelectCellCallbackStruct</b>. This structure
will contain the String parameters passed to the
SelectCell() action, among other things (see the discussion
of <b>XmNselectCellCallback</b> above).</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>TraverseNext()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>TraverseNext() will traverse out of the Matrix and into
the next tab group.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>TraversePrev()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>TraversePrev() will traverse out of the Matrix and into
the previous tab group.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>PageDown()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>PageDown() causes the Matrix to scroll down a full page.
The text widget is placed on the first non fixed row of the
new page.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>PageUp()</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>PageUp() causes the Matrix to scroll up a full page. The
text widget is placed on the first non fixed row of the new
page.</p>
</td>
</table>
<a name="Type Converters"></a>
<h2>Type Converters</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>In addition to the standard type converters registered by
Xt and Motif, <b>XbaeMatrix</b> registers the following
additional type converters:</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToStringArray()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a comma separated list of Strings to an array of
String pointers, one for each substring. Commas in the list
may be escaped with the character &lsquo;\&rsquo;. This
converter allows the <b>XmNrowLabels</b> and
<b>XmNcolumnLabels</b> resources to be specified in resource
files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToWidthArray()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a comma separated list of numeric Strings to an
array of short integers. This converter allows the
<b>XmNcolumnWidths</b> resource to be specified in resource
files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToMaxLengthArray()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a comma separated list of numeric Strings to an
array of integers. This converter allows the
<b>XmNcolumnMaxLengths</b> resource to be specified in
resource files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToAlignmentArray()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a comma separated list of alignments to an array
of unsigned chars. This converter allows the
<b>XmNcolumnLabelAlignments</b> and
<b>XmNcolumnAlignments</b> resources to be specified in
resource files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToGridType()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a single string as discussed in
<b>XmNgridType</b> to a grid type value. This converter
allows <b>XmNgridType</b> to be specified in resource
files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">

<p><tt>CvtStringToMatrixScrollBarDisplayPolicy()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a single string as discussed in
<b>XmNhorizontalScrollBarDisplayPolicy</b> and
<b>XmNverticalScrollBarDisplayPolicy</b> to a display policy
value. This converter allows
<b>XmNhorizontalScrollBarDisplayPolicy</b> and
<b>XmNverticalScrollBarDisplayPolicy</b> to be specified in
resource files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToCellTable()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a comma separated list of Strings with \n
delimited rows to a two dimensional array of String
pointers. This converter allows the <b>XmNcells</b> resource
to be specified in resource files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToPixelTable()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a comma separated list of color names with \n
delimited rows to a two dimensional array of Pixel values.
This converter allows the
<b>XmNcellBackgrounds</b>and<b>XmNcolors</b> resources to be
specified in resource files.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><tt>CvtStringToBooleanArray()</tt></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Converts a comma separated list of string or numeric
values to an array of Booleans. The converter recongnises a
comma separated list of values. Each value is parsed such
that if the first character is This converter allows the
<b>XmNcolumnButtonLabels</b> and <b>XmNrowButtonLabels</b>
resources to be specified in resource files.</p>
</td>
</table>
<a name="Public Functions"></a>
<h2>Public Functions</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>The following external entry points to <b>XbaeMatrix</b>
class methods are defined:</p>
<!-- INDENTATION -->
<p><b>XbaeCreateMatrix()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix28.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>parent</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Specifies the parent widget ID.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>name</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Specifies the name of the created widget</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>arglist</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Specifies the argument list</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>argcount</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Specifies the number of attribute/value pairs in the
argument list (arglist)</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeCreateMatrix()</b> creates an unmanaged instance
of an XbaeMatrix widget and returns the associated widget
ID.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixAddColumns()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix29.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The column position before which to add the new columns.
Must be greater than or equal to zero, and less than or
equal to <b>XmNcolumns</b>.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>columns</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an ordinary two dimensional array of String,
or <small>NULL.</small> These Strings will be used to modify
the <b>XmNcells</b> resource to populate the new columns.
Each row in the array must have <b>XmNrows</b> elements and
represents one of the new columns. columns must have
num_columns rows. If columns is <small>NULL,</small> empty
columns will be added.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>labels</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of String, or <small>NULL.</small>
These Strings will be used as the <b>XmNcolumnLabels</b> for
the new columns. The labels array must have num_columns
elements. If <b>XmNcolumnLabels</b> is not set, then this
argument will be ignored. If labels is <small>NULL,</small>
and <b>XmNcolumnLabels</b> is set, then blank column labels
will be used.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>widths</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of short. These values will be used
as the <b>XmNcolumnWidths</b> for the new columns. The
widths array must have num_columns elements. This argument
must not be <small>NULL.</small></p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>max_lengths</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>Points to an array of int, or <small>NULL.</small> These
values will be used as the <b>XmNcolumnMaxLengths</b> for
the new columns. The max_lengths array must have num_columns
elements. If max_lengths is <small>NULL,</small> then the
corresponding value from widths will be used.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>alignments</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>Points to an array of unsigned char, or
<small>NULL.</small> These values will be used as the
<b>XmNcolumnAlignments</b> for the new columns. If
<b>XmNcolumnAlignments</b> is not set, then this argument
will be ignored. The alignments array must have num_columns
elements. If alignments is <small>NULL,</small> then
<b>XmALIGNMENT_BEGINNING</b> will be used.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>label_alignments</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>Points to an array of unsigned char, or
<small>NULL.</small> These values will be used as the
<b>XmNcolumnLabelAlignments</b> for the new column labels.
If <b>XmNcolumnLabelAlignments</b> is not set, then this
argument will be ignored. The label_alignments array must
have num_columns elements. If label_alignments is
<small>NULL,</small> then <b>XmALIGNMENT_BEGINNING</b> will
be used.</p>
</td>
</table>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>colors</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>Points to an array of Pixel, or <small>NULL.</small>
These values will be used to set the corresponding columns
in the <b>XmNcolors</b> table for the new columns. If
<b>XmNcolors</b> is <small>NULL,</small> then this argument
will be ignored. The colors array must have num_columns
elements. If colors is <small>NULL,</small> then
<b>XmNforeground</b> will be used.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>num_columns</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The number of columns which are being added to the
widget.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixAddColumns()</b> allows the application
developer to dynamically add new columns anywhere in the
Matrix. The columns will be added before the column
specified in position. Columns are numbered starting at
zero. To append new columns onto the end of the Matrix,
specify position as the total number of columns. Most of the
arguments to <b>XbaeMatrixAddColumns()</b> may be specified
as <small>NULL.</small> Default values will be used by the
widget.</p>
<!-- INDENTATION -->
<p>If the programmer attempts to add columns using
<b>XbaeMatrixAddColumns()</b> when there are no rows, it
will result in a warning message. There must be at least one
row in the <b>XbaeMatrix</b> widget to add columns.</p>
<!-- INDENTATION -->
<p>To maintain backward compatability, the cell backgrounds
cannot be set in a call to <b>XbaeMatrixAddColumns()</b> and
must be set (if so desired) in a separate call to
<b>XtVaSetValues()</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixAddRows()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix30.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The row position before which to add the new rows. Must
be greater than or equal to zero, and less than or equal to
<b>XmNrows</b>.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>rows</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an ordinary two dimensional array of String,
or <small>NULL.</small> These Strings will be used to modify
the <b>XmNcells</b> resource to populate the new rows. Each
row in the array must have <b>XmNcolumns</b> elements and
represents one of the new rows. rows must have num_rows
rows. If rows is <small>NULL,</small> empty rows will be
added.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>labels</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of String, or <small>NULL.</small>
These Strings will be used as the <b>XmNrowLabels</b> for
the new rows. The labels array must have num_rows elements.
If <b>XmNrowLabels</b> is not set, then this argument will
be ignored. If labels is <small>NULL,</small> and
<b>XmNrowLabels</b> is set, then blank row labels will be
used</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>colors</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of Pixel, or <small>NULL.</small>
These values will be used to set the corresponding rows in
the <b>XmNcolors</b> table for the new rows. If
<b>XmNcolors</b> is <small>NULL,</small> then this argument
will be ignored. The colors array must have num_rows
elements. If colors is <small>NULL,</small> then
<b>XmNforeground</b> will be used.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>num_rows</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The number of rows which are being added to the
widget.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixAddRows()</b> allows the application
developer to dynamically add new rows anywhere in the
Matrix. The rows will be added before the row specified in
position. Rows are numbered starting at zero. To append new
rows onto the end of the Matrix, specify position as the
total number of rows.</p>
<!-- INDENTATION -->
<p>To maintain backward compatability, the cell backgrounds
cannot be set in a call to <b>XbaeMatrixAddRows()</b> and
must be set (if so desired) in a separate call to
<b>XtVaSetValues()</b>.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixCancelEdit()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix31.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>w</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>unmap</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>Specifies whether the TextField cell edit widget should
be unmapped after the edit is canceled.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixCancelEdit()</b> allows the application
developer to programmatically cancel a cell edit in
progress, discarding any changes made by the user. This
function unmaps the TextField edit widget if the unmap flag
is True. If unmap is False, the contents of the TextField
are restored to their original value, and the TextField is
not unmapped.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixCommitEdit()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix32.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>w</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>An XbaeMatrix widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>unmap</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>Specifies whether the TextField cell edit widget should
be unmapped after an edit is successfully committed.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixCommitEdit()</b> can be used by the
application developer to programmatically commit an edit,
saving any changes made by the user. This will cause the
callbacks on the <b>XmNleaveCellCallback</b> list to be
called to verify that the changes the user made are valid.
If the changes are valid, then they are saved into the cell
and if the unmap flag is True, the TextField widget will be
unmapped.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixDeleteColumns()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix33.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The column position at which to begin deleting columns.
Must be greater than or equal to zero, and (position +
num_columns) must be less than or equal to
<b>XmNcolumns</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>num_columns</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The number of columns to delete from the widget.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDeleteColumns()</b> allows the application
developer to dynamically delete columns from anywhere in the
Matrix. Columns will be deleted starting at the column
specified by position.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixDeleteRows()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix34.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An XbaeMatrix widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The row position at which to begin deleting rows. Must
be greater than or equal to zero, and (position + num_rows)
must be less than or equal to <b>XmNrows</b>.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>num_rows</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The number of rows to delete from the widget.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDeleteRows()</b> allows the application
developer to dynamically delete rows from anywhere in the
Matrix. Rows will be deleted starting at the row specified
by position.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixDeselectAll()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix35.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDeselectAll()</b> allows the application
developer to programmatically deselect all cells.
<b>XbaeMatrixDeselectAll()</b> redraws the cells in normal
video. All Booleans in the <b>XmNselectedCells</b> array
will be set to False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixDeselectCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix36.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="54%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="9%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="54%">

<p>The row of the cell to deselect.</p>
</td>
<td width="9%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="54%">

<p>The column of the cell to deselect.</p>
</td>
<td width="9%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDeselectCell()</b> allows the application
developer to programmatically deselect a cell.
<b>XbaeMatrixDeselectCell()</b> redraws the cell in normal
video. The corresponding Boolean in the
<b>XmNselectedCells</b> array will be set to False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixDeselectColumn()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix37.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="35%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="28%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="35%">

<p>The column to deselect.</p>
</td>
<td width="28%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDeselectColumn()</b> allows the application
developer to programmatically deselect a column.
<b>XbaeMatrixDeselectColumn()</b> draws the column in normal
video. The corresponding Booleans in the
<b>XmNselectedCells</b> array will be set to False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixDeselectRow()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix38.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="32%">

<p>The row to deselect.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDeselectRow()</b> allows the application
developer to programmatically deselect a row.
<b>XbaeMatrixDeselectRow()</b> draws the row in reverse
video (or selectedForeground / selectedBackground if set).
The corresponding Booleans in the <b>XmNselectedCells</b>
array will be set to False.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixDisableRedisplay()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix39.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDisableRedisplay()</b> and
<b>XbaeMatrixEnableRedisplay()</b> allow an application to
make multiple changes to a matrix without immediate visual
updates. When multiple changes are made with redisplay
enabled, visual flashing often occurs. These routines help
eliminate this problem.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixEditCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix40.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="55%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="8%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="55%">

<p>The row of the cell to be edited.</p>
</td>
<td width="8%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="55%">

<p>The column of the cell to be edited.</p>
</td>
<td width="8%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixEditCell()</b></p>
<!-- INDENTATION -->
<p>allows the application developer to programmatically
force a specific cell to be edited. This function will first
attempt to commit the edit in the current cell. If the
<b>XmNleaveCellCallback</b> callbacks disallow this commit,
then <b>XbaeMatrixEditCell()</b> will return. Otherwise the
specified cell is scrolled until it is visible. If the
specified cell is in a fixed row or column, it cannot be
edited and <b>XbaeMatrixEditCell()</b> will return. Next,
the callbacks on the <b>XmNenterCellCallback</b> callback
list are called for the specified cell to determine
it&rsquo;s editability. Then the TextField edit widget is
mapped on top of the specified cell.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixEnableRedisplay()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix41.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="13%">

<p><i>w</i></p>
</td>
<td width="2%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="13%">

<p><i>redisplay</i></p>
</td>
<td width="2%"></td>
<td width="63%">

<p>Force the matrix to redisplay if True and no other calls
to <b>XbaeMatrixDisableRedisplay()</b> have been made.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixDisableRedisplay()</b> and
<b>XbaeMatrixEnableRedisplay()</b> allow an application to
make multiple changes to a matrix without immediate visual
updates. When multiple changes are made with redisplay
enabled, visual flashing often occurs. These routines help
eliminate this problem.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixEventToXY()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix42.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>w</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>event</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>An X event structure pointer, usually from an
XEventHandler function.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>x</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>The translated x coordinate.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>y</i></p>
</td>
<td width="8%"></td>
<td width="63%">

<p>The translated y coordinate.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixEventToXY</b> enables the programmer to
determine the x and y values of a given event with respect
to the <b>XbaeMatrix</b> widget. The returned values are
also adjusted to allow for the <b>XbaeClip</b> widget.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixFirstSelectedCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix43.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="40%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="23%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="40%">

<p>The first selected row.</p>
</td>
<td width="23%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="40%">

<p>The first selected column.</p>
</td>
<td width="23%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixFirstSelectedCell()</b> allows the
application developer to find out which cell is the first
selected. The function traverses the <b>XbaeMatrix</b>
widget in a left to right, top to bottom manner to determine
this value. If no cell is selected, row and column are set
to -1.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixFirstSelectedColumn()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix44.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixFirstSelectedColumn()</b> returns the column
number of the first selected column in the <b>XbaeMatrix</b>
widget. The function traverses the matrix from column 0. A
column must be entirely selected for the column to be
considered selected. If no column is selected then -1 is
returned.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixFirstSelectedRow()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix45.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixFirstSelectedRow()</b> returns the row
number of the first selected row in the <b>XbaeMatrix</b>
widget. The function traverses the matrix from row 0. A row
must be entirely selected for the row to be considered
selected. If no row is selected then -1 is returned.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix46.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose value should be retrieved.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose value should be
retrieved.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetCell()</b> returns the String value
stored in the specified cell. This String should not be
freed. To examine many cells, it is more efficient to do an
XtGetValues() on <b>XmNcells</b> and examine the values in
that array.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetCellPixmap()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix47.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>A <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose pixmap and mask should be
retrieved.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose pixmap and mask should be
retrieved.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>pixmap</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>A pointer to a Pixmap variable, in which the function
will store the cell&rsquo;s pixmap.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>mask</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>A pointer to a Pixmap variable, in which the function
will store the cell&rsquo;s pixmap mask.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetCellPixmap</b> will return the pixmap and
the associated mask of the indicated cell. If the row or
column are out of bounds, or the widget is not an
<b>XbaeMatrix</b> widget, then nothing is retrieved and a
value of -1 is returned. On success, the return value is
0.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetCellUserData()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix48.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose data should be retrieved.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose data should be
retrieved.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetCellUserData()</b> returns a pointer to
the data assigned to the cell in the given coordinates. The
data should be set using <b>XbaeMatrixSetCellUserData()</b>.
If no data is found to be associated with the particular
cell, <small>NULL</small> is returned.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetColumnWidth()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix49.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="5%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>The column whose width we&rsquo;re querying.</p>
</td>
<td width="5%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetColumnWidth()</b> is a convenient way to
query a column width.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetColumnLabel()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix50.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the label that should be retrieved.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetColumnLabel()</b> returns a pointer to
the label of the given column. If no column labels exist or
the given column is not a valid column <small>NULL</small>
is returned. If no data is found to be associated with the
particular column, <small>NULL</small> is returned.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetColumnUserData()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix51.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose data should be
retrieved.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetColumnUserData()</b> returns a pointer to
the data assigned to the given column. The data should be
set using <b>XbaeMatrixSetColumnUserData()</b>. If no data
is found to be associated with the particular column,
<small>NULL</small> is returned.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetCurrentCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix52.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell the
&lsquo;&lsquo;cursor&rsquo;&rsquo; or TextField is in.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell the
&lsquo;&lsquo;cursor&rsquo;&rsquo; or TextField is in.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetCurrentCell()</b> allows the application
developer to determine what cell is being edited or has
focus.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetEventRowColumn()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix53.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>event</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An X event structure pointer. This is usually from an
XEventHandler function. It can be either a button or a key
event.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell the
&lsquo;&lsquo;cursor&rsquo;&rsquo; or TextField is in.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell the
&lsquo;&lsquo;cursor&rsquo;&rsquo; or TextField is in.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetEventRowColumn()</b> allows the
application developer to determine what cell corresponds to
an (x, y) in an event. If the (x, y) of the event is a legal
cell, row and column are set and True is returned. However,
if the (x, y) is not over a cell, False is returned, and row
and column will have undefined values.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetNumSelected()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix54.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetNumSelected()</b> returns the number of
cells that are currently selected in the given matrix. The
widget maintains an internal variable as cells are selected
and deselected so a complete traversal of the widget is
avoided.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetRowHeight()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix55.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="46%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="17%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="46%">

<p>The row whose height we query.</p>
</td>
<td width="17%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetRowHeight()</b> is a convenient way to
query a row height.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetRowLabel()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix56.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="63%">

<p>The row of the label that should be retrieved.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetRowLabel()</b> returns a pointer to the
label of the given row. If no row labels exist or the given
row is not a valid row <small>NULL</small> is returned.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixGetRowUserData()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix57.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="63%">

<p>The row of the cell whose data should be retrieved.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixGetRowUserData()</b> returns a pointer to
the data assigned to the given row. The data should be set
using <b>XbaeMatrixSetRowUserData()</b>. If no data is found
to be associated with the particular row,
<small>NULL</small> is returned.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixHighlightCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix58.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="55%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="8%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="55%">

<p>The row of the cell to highlight.</p>
</td>
<td width="8%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="55%">

<p>The column of the cell to highlight.</p>
</td>
<td width="8%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixHighlightCell()</b> allows the application
developer to programmatically highlight a cell.
<b>XbaeMatrixHighlightCell()</b> draws the highlight around
the cell. The corresponding unsigned char in the
<b>XmNhighlightedCells</b> array will be have its
<b>HighlightCell</b> bit set.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixHighlightColumn()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix59.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="37%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="26%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="37%">

<p>The column to highlight.</p>
</td>
<td width="26%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixHighlightColumn()</b> allows the application
developer to programmatically highlight a column.
<b>XbaeMatrixHighlightColumn()</b> draws the highlight
around the column if <b>XmNgridType</b> is
<b>XmGRID_COLUMN_SHADOW</b> or from around each cell in the
column otherwise. The corresponding unsigned chars in the
<b>XmNhighlightedCells</b> array will be have its
<b>HighlightColumn</b> or <b>HighlightOther</b> bit set,
depending on whether <b>XmNgridType</b> is set to
<b>XmGRID_COLUMN_SHADOW</b> or not.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixHighlightRow()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix60.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="32%">

<p>The row to highlight.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixHighlightRow()</b> allows the application
developer to programmatically highlight a row.
<b>XbaeMatrixHighlightRow()</b> draws the highlight around
the row if <b>XmNgridType</b> is <b>XmGRID_ROW_SHADOW</b> or
from around each cell in the row otherwise. The
corresponding unsigned chars in the
<b>XmNhighlightedCells</b> array will be have its
<b>HighlightRow</b> or <b>HighlightOther</b> bit set,
depending on whether <b>XmNgridType</b> is set to
<b>XmGRID_ROW_SHADOW</b> or not.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixIsCellSelected()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix61.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="49%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="14%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="49%">

<p>The row of the cell to check.</p>
</td>
<td width="14%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="49%">

<p>The column of the cell to check.</p>
</td>
<td width="14%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixIsCellSelected()</b> allows the application
developer to determine whether or not a particular cell is
selected. The function returns True if the cell is selected
and False otherwise.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixIsCellVisible()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix62.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="49%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="14%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="49%">

<p>The row of the cell to check.</p>
</td>
<td width="14%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="49%">

<p>The column of the cell to check.</p>
</td>
<td width="14%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixIsCellVisible()</b> allows the application
developer to determine whether or not a particular cell is
in the visible area of the <b>XbaeMatrix</b> widget. The
function returns True if the cell is visible and False
otherwise.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixIsColumnSelected()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix63.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="52%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="11%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="52%">

<p>The column of the matrix to check.</p>
</td>
<td width="11%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixIsColumnSelected()</b> allows the
application developer to determine whether or not a
particular column is selected. The function returns True if
the column is selected and False otherwise. A column must be
selected in its entirety for
<b>XbaeMatrixIsColumnSelected()</b> to return True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixIsColumnVisible()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix64.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="52%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="11%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="52%">

<p>The column of the matrix to check.</p>
</td>
<td width="11%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixIsColumnVisible()</b> allows the application
developer to determine whether or not a particular column is
in the visible area of the <b>XbaeMatrix</b> widget. The
function returns True if the column is visible and False
otherwise.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixIsRowSelected()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix65.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="48%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="15%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="48%">

<p>The row of the matrix to check.</p>
</td>
<td width="15%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixIsRowSelected()</b> allows the application
developer to determine whether or not a particular row is
selected. The function returns True if the row is selected
and False otherwise. A row must be selected in its entirety
for <b>XbaeMatrixIsRowSelected()</b> to return True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixIsRowVisible()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix66.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="48%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="15%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="48%">

<p>The row of the matrix to check.</p>
</td>
<td width="15%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixIsRowVisible()</b> allows the application
developer to determine whether or not a particular row is in
the visible area of the <b>XbaeMatrix</b> widget. The
function returns True if the row is visible and False
otherwise.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixMakeCellVisible()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix67.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row to scroll into the visible area of the
matrix.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column to scroll into the visible area of the
matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixMakeCellVisible()</b> allows a cell to be
programatically scrolled into the visible area of the
<b>XbaeMatrix</b> widget. By calling this function, the
<b>XmNselectScrollVisible</b> resource is ignored. For a
more accurate cell location after scrolling, the programmer
should use the <b>XmNleftColumn</b>and<b>XmNtopRow</b>
resources.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixNumRows()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix68.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixNumRows()</b> returns the number of rows in
the given matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixNumColumns()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix69.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixNumColumns()</b> returns the number of
columns in the given matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixNumRows()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix70.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixNumRows()</b> returns the number of rows in
the given matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixRefresh()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix71.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixRefresh()</b> allows the application
developer to force the widget to redraw itself. This might
be used when the programmer knows the widget&rsquo;s values
have changed, but the widget has not detected the change.
For example, the quickest way to swap the values of 2 rows
would be to do an XtGetValues on <b>XmNcells</b>, swap the
values of the 2 rows, and then do an XtSetValues on
<b>XmNcells</b> with the same StringTable variable. Because
of the way the Intrinsics work, the widget will not see this
change and will display the old values until a redraw is
preformed because of a resize or scroll event (assuming no
other change in the XtSetValues caused a redraw). Calling
<b>XbaeMatrixRefresh()</b> will cause the correct values to
be drawn and overcome this limitation in the Intrinsics.
While this function should rarely be needed, it is provided
&lsquo;&lsquo;just in case&rsquo;&rsquo;.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixRefreshCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix72.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="51%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="12%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="51%">

<p>The row of the cell to redraw.</p>
</td>
<td width="12%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="51%">

<p>The column of the cell to redraw.</p>
</td>
<td width="12%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixRefreshCell()</b> allows the application
developer to redraw a specific cell of the matrix. This
function is particularly useful when used with the
<b>XbaeMatrixDrawCellCallback</b> as it allows updates of
the data without an explicit expose event.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixRefreshColumn()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix73.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="54%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="9%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="54%">

<p>The column of the matrix to redraw.</p>
</td>
<td width="9%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixRefreshColumn()</b> allows the application
developer to efficiently redraw a specific column of the
matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixRefreshRow()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix74.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="49%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="14%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="49%">

<p>The row of the matrix to redraw.</p>
</td>
<td width="14%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixRefreshRow()</b> allows the application
developer to efficiently redraw a specific row of the
matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixRowColToXY()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix75.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row the of the cell in question.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column the of the cell in question.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>x</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The x coordinate returned that represents the left
coordinates of the given cell.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>y</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The y coordinate returned that represents the upper
coordinates of the given cell.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixRowColToXY()</b> allows the application
developer to determine the coordinates of the upper left
corner of a given cell. If the given widget is not an
<b>XbaeMatrix</b> widget, False will be returned and the
values of x and y will be undefined. This function is useful
for drag and drop calculations.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSelectAll()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix76.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSelectAll()</b> allows the application
developer to programmatically select all cells.
<b>XbaeMatrixSelectAll()</b> redraws the cells in reverse
video. All Booleans in the <b>XmNselectedCells</b> array
will be set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSelectCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix77.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="51%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="12%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="51%">

<p>The row of the cell to select.</p>
</td>
<td width="12%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="51%">

<p>The column of the cell to select.</p>
</td>
<td width="12%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSelectCell()</b> allows the application
developer to programmatically select a cell.
<b>XbaeMatrixSelectCell()</b> first scrolls the specified
cell until it is visible, and then draws the cell in reverse
video (or selectedForeground / selectedBackground if set).
The corresponding Boolean in the <b>XmNselectedCells</b>
array will be set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSelectColumn()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix78.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="32%">

<p>The column to select.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSelectColumn()</b> allows the application
developer to programmatically select a column.
<b>XbaeMatrixSelectColumn()</b> first scrolls the specified
column until it is visible, and then draws the column in
reverse video (or selectedForeground / selectedBackground if
set). The corresponding Booleans in the
<b>XmNselectedCells</b> array will be set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSelectRow()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix79.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="32%">

<p>The row to select.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSelectRow()</b> allows the application
developer to programmatically select a row.
<b>XbaeMatrixSelectRow()</b> first scrolls the specified row
until it is visible, and then draws the row in reverse video
(or selectedForeground / selectedBackground if set). The
corresponding Booleans in the <b>XmNselectedCells</b> array
will be set to True.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix80.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose value should be set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose value should be set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>value</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The new value to set this cell to.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetCell()</b> allows the application
developer to programmatically set the value of the specified
cell. To set the values of many cells, it may be more
efficient to do an XtSetValues() on the <b>XmNcells</b>
resource.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetCellBackground()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix81.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose backgroundshould be set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose background should be
set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>color</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The new color to which to set this cell&rsquo;s
background.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetCellBackground()</b> is a convenient way
to specify and modify the <b>XmNcellBackgrounds</b> resource
when changing the background of a single cell. If
<b>XmNcellBackgrounds</b> is <small>NULL,</small> then
<b>XbaeMatrixSetCellBackground()</b> will create a Pixel
table initialized to <b>XmNforeground</b> except for the
cell specified in it&rsquo;s arguments. If
<b>XmNcellBackgrounds</b> is not <small>NULL,</small> then
<b>XbaeMatrixSetCellBackground()</b> will changed the
specified cell in that resource to the specified color.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetCellColor()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix82.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose color should be set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose color should be set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>color</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The new color to which to set this cell.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetCellColor()</b> is a convenient way to
specify and modify the <b>XmNcolors</b> resource when
changing the color of a single cell. If <b>XmNcolors</b> is
<small>NULL,</small> then <b>XbaeMatrixSetCellColor()</b>
will create a Pixel table initialized to
<b>XmNforeground</b> except for the cell specified in
it&rsquo;s arguments. If <b>XmNcolors</b> is not
<small>NULL,</small> then <b>XbaeMatrixSetCellColor()</b>
will changed the specified cell in that resource to the
specified color.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetCellPixmap()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix83.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>A <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose pixmap and mask should be
set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose pixmap and mask should be
set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>pixmap</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>the function will store the contents of this Pixmap
variable</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>mask</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>the function will store the contents of this variable as
the pixmap mask</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetCellPixmap</b> will set the pixmap and
the associated mask of the indicated cell. If the row or
column are out of bounds, or the widget is not an
<b>XbaeMatrix</b> widget, then nothing is changed; this
erroneous condition is silently ignored.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetCellUserData()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix84.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row of the cell whose value should be set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column of the cell whose value should be set.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>data</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>A pointer to a user defined data area.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetCellUserData()</b> allows the application
developer to programmatically set the user data of a
specified cell. To set the data value of many cells, it may
be more efficient to do an XtSetValues() on the
<b>XmNcellUserData</b> resource. This resource is
copied.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetCellWidget()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix85.png"></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p><b>XbaeMatrixSetCellWidget()</b> is a function to attach
a widget to a matrix cell. The cell is selected by
specifying its <b>row</b> and <b>column , widget</b> is the
cell widget to be associated with that cell. XbaeMatrix will
manage the cell widget&rsquo;s position and size so it is
displayed inside the cell at all times, including when
scrolling.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p>Using a NULL <b>widget</b> removes the link between a
widget and its cell. Only one widget can be in a cell, a
widget should also be in only one cell at a time.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetColumnBackgrounds()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix86.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The column position at which to begin applying the new
backgrounds. Must be greater than or equal to zero, and
(position + num_colors) must be less than or equal to
<b>XmNcolumns</b>.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>colors</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of Pixel. These specify the
backgrounds for the cells in the specified columns. The
colors array must have num_colors elements.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>num_colors</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The number of colors in the colors array.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetColumnBackgrounds()</b> is a convenient
way to specify and modify the <b>XmNcellBackgrounds</b>
resource when setting the background of an entire column or
columns. If <b>XmNcellBackgrounds</b> is
<small>NULL,</small> then
<b>XbaeMatrixSetColumnBackgrounds()</b> will create a Pixel
table initialized to <b>XmNforeground</b> except for the
columns specified in it&rsquo;s arguments. If
<b>XmNcellBackgrounds</b> is not <small>NULL,</small> then
<b>XbaeMatrixSetColumnBackgrounds()</b> will changed the
specified columns in that resource to the specified
colors.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetColumnColors()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix87.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The column position at which to begin applying the new
colors. Must be greater than or equal to zero, and (position
+ num_colors) must be less than or equal to
<b>XmNcolumns</b>.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>colors</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of Pixel. These specify the colors
for the cells in the specified columns. The colors array
must have num_colors elements.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>num_colors</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The number of colors in the colors array.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetColumnColors()</b> is a convenient way to
specify and modify the <b>XmNcolors</b> resource when
setting the color of an entire column or columns. If
<b>XmNcolors</b> is <small>NULL,</small> then
<b>XbaeMatrixSetColumnColors()</b> will create a Pixel table
initialized to <b>XmNforeground</b> except for the columns
specified in it&rsquo;s arguments. If <b>XmNcolors</b> is
not <small>NULL,</small> then
<b>XbaeMatrixSetColumnColors()</b> will changed the
specified columns in that resource to the specified
colors.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetColumnWidth()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix88.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The column whose width we&rsquo;ll be changing.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>width</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The new width of this column. A column width can be 0 to
hide a column.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetColumnWidth()</b> is a convenient way to
change the width of a column without the need to allocate an
array with column width numbers. Passing -1 as the new width
will reset the column width to the default value.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetColumnLabel()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix89.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="57%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="6%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="57%">

<p>The column of the label is to be set.</p>
</td>
<td width="6%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>value</i></p>
</td>
<td width="6%"></td>
<td width="57%">

<p>The new value of the label.</p>
</td>
<td width="6%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetColumnLabel()</b> allows the application
developer to programmatically change the label of a
specified column. The resource <b>XmNcolumnLabels</b> must
be set before using <b>XbaeMatrixSetColumnLabel()</b> and
the number of lines in the column label being set cannot be
different to the existing label.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetColumnUserData()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix90.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="5%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>The column whose value should be set.</p>
</td>
<td width="5%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>data</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>A pointer to a user defined data area.</p>
</td>
<td width="5%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetColumnUserData()</b> allows the
application developer to programmatically associate user
data for the specified column.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetRowBackgrounds()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix91.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The row position at which to begin applying the new
colors. Must be greater than or equal to zero, and (position
+ num_colors) must be less than or equal to
<b>XmNrows</b>.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>colors</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of Pixel. These specify the
backgrounds for the cells in the specified rows. The colors
array must have num_colors elements.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>num_colors</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The number of colors in the colors array.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetRowBackgrounds()</b> is a convenient way
to specify and modify the <b>XmNcellBackgrounds</b> resource
when setting the background of an entire row or rows. If
<b>XmNcellBackgrounds</b> is <small>NULL,</small> then
<b>XbaeMatrixSetRowBackgrounds()</b> will create a Pixel
table initialized to <b>XmNforeground</b> except for the
rows specified in it&rsquo;s arguments. If
<b>XmNcellBackgrounds</b> is not <small>NULL,</small> then
<b>XbaeMatrixSetRowBackgrounds()</b> will changed the
specified rows in that resource to the specified
colors.</p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetRowColors()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix92.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>w</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>position</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>The row position at which to begin applying the new
colors. Must be greater than or equal to zero, and (position
+ num_colors) must be less than or equal to
<b>XmNrows</b>.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="12%">

<p><i>colors</i></p>
</td>
<td width="3%"></td>
<td width="63%">

<p>Points to an array of Pixel. These specify the colors
for the cells in the specified rows. The colors array must
have num_colors elements.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>num_colors</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The number of colors in the colors array.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetRowColors()</b> is a convenient way to
specify and modify the <b>XmNcolors</b> resource when
setting the color of an entire row or rows. If
<b>XmNcolors</b> is <small>NULL,</small> then
<b>XbaeMatrixSetRowColors()</b> will create a Pixel table
initialized to <b>XmNforeground</b> except for the rows
specified in it&rsquo;s arguments. If <b>XmNcolors</b> is
not <small>NULL,</small> then
<b>XbaeMatrixSetRowColors()</b> will changed the specified
rows in that resource to the specified colors.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetRowHeight()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix93.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The row whose height we&rsquo;ll be changing.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>height</i></p>
</td>
<td width="6%"></td>
<td width="63%">

<p>The new height of this row. A row height can be 0 to
hide a row.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetRowHeight()</b> is a convenient way to
change the height of a row without the need to allocate an
array with row height numbers. Passing -1 as the new height
will reset the row&rsquo;s height to the default value.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetRowLabel()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix94.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>w</i></p>
</td>
<td width="8%"></td>
<td width="52%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="11%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>row</i></p>
</td>
<td width="8%"></td>
<td width="52%">

<p>The row of the label is to be set.</p>
</td>
<td width="11%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="7%">

<p><i>value</i></p>
</td>
<td width="8%"></td>
<td width="52%">

<p>The new value of the label.</p>
</td>
<td width="11%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetRowLabel()</b> allows the application
developer to programmatically change the label of the
specified row. The resource <b>XmNrowLabels</b> must be set
before using <b>XbaeMatrixSetRowLabel()</b> .</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSetRowUserData()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix95.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="6%">

<p><i>w</i></p>
</td>
<td width="9%"></td>
<td width="58%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="5%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="6%">

<p><i>row</i></p>
</td>
<td width="9%"></td>
<td width="58%">

<p>The row whose value should be set.</p>
</td>
<td width="5%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="6%">

<p><i>data</i></p>
</td>
<td width="9%"></td>
<td width="58%">

<p>A pointer to a user defined data area.</p>
</td>
<td width="5%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSetRowUserData()</b> allows the application
developer to programmatically associate user data for the
specified row.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSort()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix96.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="6%">

<p><i>w</i></p>
</td>
<td width="9%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="6%">

<p><i>proc</i></p>
</td>
<td width="9%"></td>
<td width="63%">

<p>a pointer to a function that can compare rows.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSort</b> allows you to sort the rows in the
<b>XbaeMatrix</b> widget according to criteria determined by
the <b>proc</b> function. The <b>proc</b> function should
have the same signature and functionality as demanded by the
<b>qsort(3)</b> function. It will be called with two rows as
arguments, and should return -1, 0, or 1 as appropriate.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixSortRows()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix97.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="6%">

<p><i>w</i></p>
</td>
<td width="9%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="6%">

<p><i>proc</i></p>
</td>
<td width="9%"></td>
<td width="63%">

<p>a pointer to a function that can compare rows.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixSortRows</b> allows you to sort the rows in
the <b>XbaeMatrix</b> widget according to criteria
determined by the <b>proc</b> function. It is identical to
<b>XbaeMatrixSort.</b> The <b>proc</b> function should have
the same signature and functionality as demanded by the
<b>qsort(3)</b> function. It will be called with two rows as
arguments, and should return -1, 0, or 1 as appropriate.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixUnhighlightAll()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix98.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixUnhighlightAll()</b> allows the application
developer to programmatically unhighlight all cells.
<b>XbaeMatrixUnhighlightAll()</b> erases the highlight from
all cells. All unsigned chars in the
<b>XmNhighlightedCells</b> array will be set to
<b>HighlightNone</b>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixUnhighlightCell()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix99.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="5%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>row</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>The row of the cell to unhighlight.</p>
</td>
<td width="5%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="58%">

<p>The column of the cell to unhighlight.</p>
</td>
<td width="5%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixUnhighlightCell()</b> allows the application
developer to programmatically unhighlight a cell.
<b>XbaeMatrixUnhighlightCell()</b> erases the highlight from
the cell. The corresponding unsigned char in the
<b>XmNhighlightedCells</b> array will be have its
<b>HighlightCell</b> bit cleared.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixUnhighlightColumn()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix100.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>w</i></p>
</td>
<td width="6%"></td>
<td width="40%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="23%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="9%">

<p><i>column</i></p>
</td>
<td width="6%"></td>
<td width="40%">

<p>The column to unhighlight.</p>
</td>
<td width="23%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixUnhighlightColumn()</b> allows the
application developer to programmatically unhighlight a
column. <b>XbaeMatrixUnhighlightColumn()</b> erases the
highlight from around the column if <b>XmNgridType</b> is
<b>XmGRID_COLUMN_SHADOW</b> or from around each cell in the
column otherwise. The corresponding unsigned chars in the
<b>XmNhighlightedCells</b> array will be have its
<b>HighlightColumn</b> or <b>HighlightOther</b> bit cleared,
depending on whether <b>XmNgridType</b> is set to
<b>XmGRID_COLUMN_SHADOW</b> or not.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixUnhighlightRow()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix101.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>w</i></p>
</td>
<td width="11%"></td>
<td width="35%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="28%">
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="4%">

<p><i>row</i></p>
</td>
<td width="11%"></td>
<td width="35%">

<p>The row to unhighlight.</p>
</td>
<td width="28%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixUnhighlightRow()</b> allows the application
developer to programmatically unhighlight a row.
<b>XbaeMatrixUnhighlightRow()</b> erases the highlight from
around the row if <b>XmNgridType</b> is
<b>XmGRID_ROW_SHADOW</b> or from around each cell in the row
otherwise. The corresponding unsigned chars in the
<b>XmNhighlightedCells</b> array will be have its
<b>HighlightRow</b> or <b>HighlightOther</b> bit cleared,
depending on whether <b>XmNgridType</b> is set to
<b>XmGRID_ROW_SHADOW</b> or not.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixVisibleCells()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix102.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="4" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="10%">

<p><i>w</i></p>
</td>
<td width="5%"></td>
<td width="63%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<tr valign="top" align="left">
<td width="22%"></td>
<td width="10%">

<p><i>top_row</i></p>
</td>
<td width="5%"></td>
<td width="63%">

<p>The first row that is currently visible in the
matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>bottom_row</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The last row that is currently visible in the matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>left_column</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The leftmost column that is currently visible in the
matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><i>right_column</i></p></td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="37%"></td>
<td width="63%">
<p>The rightmost column that is currently visible in the
matrix.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixVisibleCells()</b> allows the the
application developer to obtain the currently visible
portion of the <b>XbaeMatrix</b> <i>w</i>.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixVisibleColumns()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix103.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixVisibleColumns()</b> allows the the
application developer to programmatically check how many
columns are currently displayed in the <b>XbaeMatrix</b>
<i>w</i>. A partially visible column will be declared an
entire column.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeMatrixVisibleRows()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix104.png"></p>
<!-- TABS -->
<table width="100%" border=0 rules="none" frame="void"
       cols="5" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="1%">

<p><i>w</i></p>
</td>
<td width="14%"></td>
<td width="32%">

<p>An <b>XbaeMatrix</b> widget.</p>
</td>
<td width="31%">
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeMatrixVisibleRows()</b> allows the the application
developer to programmatically check how many rows are
currently displayed in the <b>XbaeMatrix</b> <i>w</i>. A
partially visible row will be declared an entire row.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeGetVersionNum()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix105.png"></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeGetVersionNum()</b> is a function that returns the
numeric representation of the version of the Xbae library
that your program is working with. This is the run-time
version of the Xbae widgets, where <b>XbaeVersion</b> is a
macro that represents the compile-time version.</p>
<!-- INDENTATION -->
<p>The numeric representation is a simple calculation based
on the major, minor, and pico numbers representing an Xbae
widget release. E.g. version 4.8.1 would be represented as
40801.</p>
<!-- INDENTATION -->
<p>Releases prior to 4.8.0 didn&rsquo;t have this
functionality.</p>
</td>
</table>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>XbaeGetVersionText()</b></p>
</td>
</table>


<p align=center><img src="images/grohtml-XbaeMatrix106.png"></p>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="22%"></td>
<td width="78%">
<p><b>XbaeGetVersionText()</b> is a function that returns
the textual representation of the version of the Xbae
library that your program is working with. This is the
run-time version of the Xbae widgets, where
<b>XbaeVersionTxt</b> is a macro that represents the
compile-time version.</p>
</td>
</table>
<a name="Additional Behavior"></a>
<h2>Additional Behavior</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>Using XtSetValues to set the Matrix&rsquo;s
<b>XmNwidth</b> resource to 0 will cause it to recompute
it&rsquo;s horizontal size. It will request a new size which
results in <b>XmNvisibleColumns</b> columns being displayed.
If <b>XmNvisibleColumns</b> is 0, then it will request a new
size such that it does not need a horizontal ScrollBar (full
horizontal size).</p>
<!-- INDENTATION -->
<p>Using XtSetValues to set the Matrix&rsquo;s
<b>XmNheight</b> resource to 0 will cause it to recompute
it&rsquo;s vertical size. It will request a new size which
results in <b>XmNvisibleRows</b> rows being displayed. If
<b>XmNvisibleRows</b> is 0, then it will request a new size
such that it does not need a vertical ScrollBar (full
vertical size).</p>
<!-- INDENTATION -->
<p>An XtSetValues on <b>XmNvisibleRows</b> will cause the
Matrix to request a new size which results in
<b>XmNvisibleRows</b> non-fixed rows being displayed, only
if the new value is different than the old one.</p>
<!-- INDENTATION -->
<p>An XtSetValues on <b>XmNvisibleColumns</b> will cause the
Matrix to request a new size which results in the first
<b>XmNvisibleColumns</b> non-fixed columns being displayed,
only if the new value is different than the old one.</p>
<!-- INDENTATION -->
<p>An XtSetValues on any other resource will not result in a
request for a new size. Setting other resources in
conjunction with setting <b>XmNwidth</b> and/or
<b>XmNheight</b> to 0 allows for more control of the
Matrix&rsquo;s geometry.</p>
<!-- INDENTATION -->
<p>An XtSetValues setting <b>XmNrowLabelWidth</b> to 0 will
cause <b>XmNrowLabelWidth</b> to be set to the width of the
longest row label.</p>
</td>
</table>
<a name="Virtual Bindings"></a>
<h2>Virtual Bindings</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>The bindings for virtual keys are vendor specific. For
information about bindings for virtual buttons and keys, see
<b>VirtualBindings(3X)</b>.</p>
</td>
</table>
<a name="AUTHOR"></a>
<h2>AUTHOR</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>Andrew Wason</b> <tt>(aw@bae.bellcore.com)</tt> of
Bellcore, Piscataway NJ, wrote the original version of the
Xbae widgets. His final release of the widgets was version
3.8.</p>
<!-- INDENTATION -->
<p><b>Kevin Brannen</b> <tt>(kbrannen@metronet.com)</tt>
took over maintainership following Andrew Wason&rsquo;s
departure and released version 4.0.</p>
<!-- INDENTATION -->
<p><b>Andrew Lister</b> <tt>(lister@db.com)</tt> maintained
from 1995 to 1999.</p>
</td>
</table>
<a name="SPECIAL THANKS"></a>
<h2>SPECIAL THANKS</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>Andrew Wason for the original idea and source code.<br>
Jay Schmidgall for his contributions.<br>
Nick Banyard for providing the multibyte extensions.<br>
Callum Gibson for the pattern parsing in the XbaeInput
widget.<br>
Sascha Goebel for debugging the scroll-per-pixel code.<br>
Tobias Oed for lots of code cleanup and debugging.<br>
The people from Arcad Systemhaus for code submission for
XbaeMatrixSort and a couple of related functionalities, and
easier pixmap support.</p>
</td>
</table>
<a name="RELEASE"></a>
<h2>RELEASE</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>This document describes XbaeMatrix, version 4.50.99.</p>
</td>
</table>
<a name="SEE ALSO"></a>
<h2>SEE ALSO</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p><b>Core(3X), Composite(3X), XmManager(3X),
XmScrollBar(3X), XbaeInput(3X),</b> XmText(3X)</p>
</td>
</table>
<a name="Notice of Limitation"></a>
<h2>Notice of Limitation</h2>
<!-- INDENTATION -->
<table width="100%" border=0 rules="none" frame="void"
       cols="2" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="89%">
<p>Bellcore, previous and current maintainers of the Xbae
widgets (collectively &rsquo;authors&rsquo;) provide this
information solely to professionals who have the appropriate
degree of experience to understand and interpret its
contents in accordance with generally accepted engineering
or other professional standards and applicable regulations.
No recommendations as to products or vendors is made or
should be implied.</p>
<!-- INDENTATION -->
<p>While the information contained herein has been prepared
from sources deemed to be reliable, the authors reserve the
right to revise the information without notice, but has no
obligation to do so. Unless the recipient has been expressly
granted a license by Bellcore under separate applicable
written agreement with Bellcore, no license, expressed or
implied, is granted under any patents, copyrights or other
intellectual property rights. Use of the information is at
your discretion and shall not be deemed an inducement by
Bellcore to infringe any existing or later-issued patent,
copyrights or other intellectual property right.</p>
<!-- INDENTATION -->
<p>THE AUTHORS MAKE NO REPRESENTATIONS AND EXTENDS NO
WARRANTIES, EXPRESS OR IMPLIED, WITH RESPECT TO THE
INFORMATION, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ANY PARTICULAR
PURPOSE, AND THE WARRANTY AGAINST INFRINGEMENT OF PATENTS OR
OTHER INTELLECTUAL PROPERTY RIGHTS. THE INFORMATION IS
PROVIDED &lsquo;&lsquo;AS IS&rsquo;&rsquo;, AND IN NO EVENT
SHALL THE AUTHORS OR ANY OF ITS AFFILIATES BE LIABLE FOR ANY
DAMAGES, INCLUDING ANY LOST PROFITS OR OTHER INCIDENTAL OR
CONSEQUENTIAL DAMAGES RELATING TO THE INFORMATION.</p>
<!-- INDENTATION -->
<p>Copyright 1991, 1992 Bellcore.<br>
Copyright 1995-99 Andrew Lister All Rights Reserved.<br>
Copyright 1999-2002 LessTif Developers</p>
<!-- INDENTATION -->
<p>The above no warranty extends to all additions and
contributions. No contributor shall be held liable; this
work is provided &lsquo;&lsquo;as is&rsquo;&rsquo;. If this
is a problem for you, then don&rsquo;t use this
software.</p>
</td>
</table>
<hr>
</body>
</html>