|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <Xm/ColumnP.h>
|
|
Packit |
b099d7 |
#include <Xm/RowColumn.h>
|
|
Packit |
b099d7 |
#include <Xm/Label.h>
|
|
Packit |
b099d7 |
#include <Xm/VaSimpleP.h>
|
|
Packit |
b099d7 |
#include "XmI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define XK_LATIN1
|
|
Packit |
b099d7 |
#include <X11/keysymdef.h>
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void ClassInitialize(void);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void Initialize(Widget, Widget, ArgList, Cardinal*);
|
|
Packit |
b099d7 |
static void ClassPartInitialize(WidgetClass w_class);
|
|
Packit |
b099d7 |
static Boolean SetValues(Widget, Widget, Widget, ArgList, Cardinal*);
|
|
Packit |
b099d7 |
static void Destroy(Widget);
|
|
Packit |
b099d7 |
static void Resize(Widget);
|
|
Packit |
b099d7 |
static XtGeometryResult QueryGeometry(Widget,
|
|
Packit |
b099d7 |
XtWidgetGeometry*, XtWidgetGeometry*);
|
|
Packit |
b099d7 |
static XtGeometryResult GeometryManager(Widget,
|
|
Packit |
b099d7 |
XtWidgetGeometry*, XtWidgetGeometry*);
|
|
Packit |
b099d7 |
static void ChangeManaged(Widget);
|
|
Packit |
b099d7 |
static void ConstraintInitialize(Widget, Widget, ArgList, Cardinal*);
|
|
Packit |
b099d7 |
static Boolean ConstraintSetValues(Widget, Widget, Widget, ArgList, Cardinal*);
|
|
Packit |
b099d7 |
static void ConstraintDestroy(Widget);
|
|
Packit |
b099d7 |
static void ConstraintGetValues(Widget, ArgList, Cardinal*);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Boolean CvtStringToXiAlignment(
|
|
Packit |
b099d7 |
Display*, XrmValue*, Cardinal*, XrmValue*, XrmValue*, XtPointer
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static Boolean CvtStringToFillStyle(
|
|
Packit |
b099d7 |
Display*, XrmValue*, Cardinal*, XrmValue*, XrmValue*, XtPointer
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static Boolean CvtStringToDistribution(
|
|
Packit |
b099d7 |
Display*, XrmValue*, Cardinal*, XrmValue*, XrmValue*, XtPointer
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void Layout(
|
|
Packit |
b099d7 |
XmColumnWidget, Widget, XtWidgetGeometry*, int, int
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static void HorizontalLayout(
|
|
Packit |
b099d7 |
XmColumnWidget, Widget, XtWidgetGeometry*, int, int
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static void VerticalLayout(
|
|
Packit |
b099d7 |
XmColumnWidget, Widget, XtWidgetGeometry*, int, int
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static void VerifyResources(
|
|
Packit |
b099d7 |
XmColumnWidget, XmColumnWidget, XmColumnWidget
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static void VerifyConstraints(
|
|
Packit |
b099d7 |
Widget, Widget, Widget
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static void CalcSize(
|
|
Packit |
b099d7 |
XmColumnWidget, Widget, XtWidgetGeometry*, Boolean, Dimension*, Dimension*
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static Boolean CompareGeometry(
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtWidgetGeometry*, XtWidgetGeometry*
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static Boolean CompareGeometryToWidget(
|
|
Packit |
b099d7 |
XtWidgetGeometry*, Widget
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
static void CheckSetEntryLabelRenderTable(Widget wid, int offs, XrmValue *value);
|
|
Packit |
b099d7 |
static void CheckSetDefaultEntryLabelRenderTable(Widget wid, int offs, XrmValue *value);
|
|
Packit |
b099d7 |
static void XmColumnLabelDestroyedCallback(
|
|
Packit |
b099d7 |
Widget, XtPointer, XtPointer
|
|
Packit |
b099d7 |
);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
Note: this code was never finished and has been pulled out. The
|
|
Packit |
b099d7 |
public and semi-public traces have been pulled out of the header files.
|
|
Packit |
b099d7 |
Everything is marked with the #if used above.
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define BBPart(w) ((XmBulletinBoardPart*)(&(((XmBulletinBoardWidget)(w))->bulletin_board)))
|
|
Packit |
b099d7 |
#define XiC(w) ((XmColumnConstraintPart*)(&((XmColumnConstraintPtr)((w)->core.constraints))->column))
|
|
Packit |
b099d7 |
#define XiValidChild(c) (((c)) != NULL && XtIsManaged((c)) && \
|
|
Packit |
b099d7 |
!(c)->core.being_destroyed && \
|
|
Packit |
b099d7 |
XiC(c)->label_widget != NULL)
|
|
Packit |
b099d7 |
#define XmColumn(c) ((XmColumnWidget) XtParent((c)))
|
|
Packit |
b099d7 |
#define XiAlignment(c) ((XiC((c))->label_alignment == XmALIGNMENT_UNSPECIFIED) \
|
|
Packit |
b099d7 |
? XmColumn_default_label_alignment(XmColumn((c))) \
|
|
Packit |
b099d7 |
: XiC(c)->label_alignment)
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
#define XiPosition(c) ((XiC(c)->label_position == XiLABEL_POSITION_UNSPECIFIED)\
|
|
Packit |
b099d7 |
? XmColumn_default_label_position(XmColumn(c)) \
|
|
Packit |
b099d7 |
: XiC(c)->label_position)
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#define XiFill(c) ((XiC(c)->fill_style == XmFILL_UNSPECIFIED)\
|
|
Packit |
b099d7 |
? XmColumn_default_fill_style(XmColumn(c)) \
|
|
Packit |
b099d7 |
: XiC(c)->fill_style)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define XiWidth(c) (XtWidth(c) + 2 * XtBorderWidth(c))
|
|
Packit |
b099d7 |
#define XiHeight(c) (XtHeight(c) + 2 * XtBorderWidth(c))
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* from public .h file */
|
|
Packit |
b099d7 |
#define XiLABEL_POSITION_UNSPECIFIED 0
|
|
Packit |
b099d7 |
#define XiLABEL_POSITION_CENTER (1L<<0)
|
|
Packit |
b099d7 |
#define XiLABEL_POSITION_LEFT (1L<<1)
|
|
Packit |
b099d7 |
#define XiLABEL_POSITION_RIGHT (1L<<2)
|
|
Packit |
b099d7 |
#define XiLABEL_POSITION_TOP (1L<<3)
|
|
Packit |
b099d7 |
#define XiLABEL_POSITION_BOTTOM (1L<<4)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* structure member elements from private P.h file */
|
|
Packit |
b099d7 |
unsigned char default_label_position;
|
|
Packit |
b099d7 |
unsigned char label_position;
|
|
Packit |
b099d7 |
#define XmColumnC_label_position(w) XmColCField(w, label_position, unsigned char)
|
|
Packit |
b099d7 |
#define XmColumn_default_label_position(w) XmColField(w, default_label_position, unsigned char)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define DEFAULT_ALIGNMENT XmALIGNMENT_BEGINNING
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
#define DEFAULT_POSITION XiLABEL_POSITION_LEFT
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#define DEFAULT_ORIENTATION XmVERTICAL
|
|
Packit |
b099d7 |
#define DEFAULT_FILL_STYLE XmFILL_RAGGED
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
"pri.vate", "Pri.vate", XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmColumnRec, column.check_set_render_table),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) False
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultEntryLabelFontList, XmCFontList, XmRFontList,
|
|
Packit |
b099d7 |
sizeof(XmFontList), XtOffsetOf(XmBulletinBoardRec, bulletin_board.label_font_list),
|
|
Packit |
b099d7 |
XmRCallProc, (XtPointer) CheckSetDefaultEntryLabelRenderTable
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultEntryLabelRenderTable, XmCRenderTable, XmRRenderTable,
|
|
Packit |
b099d7 |
sizeof(XmRenderTable), XtOffsetOf(XmBulletinBoardRec, bulletin_board.label_font_list),
|
|
Packit |
b099d7 |
XmRCallProc, (XtPointer) CheckSetDefaultEntryLabelRenderTable
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultEntryLabelAlignment, XmCAlignment, XmRXmAlignment,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnRec, column.default_label_alignment),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) DEFAULT_ALIGNMENT
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultEntryLabelPosition, XmCEntryLabelPosition, XmRLabelPosition,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnRec, column.default_label_position),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) DEFAULT_POSITION
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdefaultFillStyle, XmCFillStyle, XmRFillStyle,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnRec, column.default_fill_style),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) DEFAULT_FILL_STYLE
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNitemSpacing, XmCItemSpacing, XmRVerticalDimension,
|
|
Packit |
b099d7 |
sizeof(Dimension), XtOffsetOf(XmColumnRec, column.item_spacing),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 2
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNlabelSpacing, XmCLabelSpacing, XmRHorizontalDimension,
|
|
Packit |
b099d7 |
sizeof(Dimension), XtOffsetOf(XmColumnRec, column.label_spacing),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) 10
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNorientation, XmCOrientation, XmROrientation,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnRec, column.orientation),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) DEFAULT_ORIENTATION
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNdistribution, XmCDistribution, XmRDistribution,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnRec, column.distribution),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmDISTRIBUTE_TIGHT
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XmSyntheticResource get_resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNlabelSpacing, sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmColumnRec, column.label_spacing),
|
|
Packit |
b099d7 |
XmeFromHorizontalPixels, (XmImportProc) XmeToHorizontalPixels
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNitemSpacing, sizeof(Dimension),
|
|
Packit |
b099d7 |
XtOffsetOf(XmColumnRec, column.item_spacing),
|
|
Packit |
b099d7 |
XmeFromVerticalPixels, (XmImportProc) XmeToVerticalPixels
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static XtResource constraint_resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
"pri.vate", "Pri.vate", XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmColumnConstraintRec, column.check_set_render_table),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) False
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelFontList, XmCFontList, XmRFontList,
|
|
Packit |
b099d7 |
sizeof(XmFontList), XtOffsetOf(XmColumnConstraintRec, column.label_font_list),
|
|
Packit |
b099d7 |
XmRCallProc, (XtPointer) CheckSetEntryLabelRenderTable
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelRenderTable, XmCRenderTable, XmRRenderTable,
|
|
Packit |
b099d7 |
sizeof(XmRenderTable), XtOffsetOf(XmColumnConstraintRec, column.label_font_list),
|
|
Packit |
b099d7 |
XmRCallProc, (XtPointer) CheckSetEntryLabelRenderTable
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelAlignment, XmCAlignment, XmRXmAlignment,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnConstraintRec, column.label_alignment),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmALIGNMENT_UNSPECIFIED
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelPosition, XmCEntryLabelPosition, XmRLabelPosition,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnConstraintRec, column.label_position),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XiLABEL_POSITION_UNSPECIFIED
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNfillStyle, XmCFillStyle, XmRFillStyle,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnConstraintRec, column.fill_style),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmFILL_UNSPECIFIED
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelType, XmCLabelType, XmRLabelType,
|
|
Packit |
b099d7 |
sizeof(unsigned char), XtOffsetOf(XmColumnConstraintRec, column.label_type),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmSTRING
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelString, XmCLabelString, XmRXmString,
|
|
Packit |
b099d7 |
sizeof(XmString), XtOffsetOf(XmColumnConstraintRec, column.label_string),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) NULL
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelPixmap, XmCLabelPixmap, XmRPrimForegroundPixmap,
|
|
Packit |
b099d7 |
sizeof(Pixmap), XtOffsetOf(XmColumnConstraintRec, column.label_pixmap),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) XmUNSPECIFIED_PIXMAP
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNshowEntryLabel, XmCShowLabel, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmColumnConstraintRec, column.show_label),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) True
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNstretchable, XmCStretchable, XmRBoolean,
|
|
Packit |
b099d7 |
sizeof(Boolean), XtOffsetOf(XmColumnConstraintRec, column.stretchable),
|
|
Packit |
b099d7 |
XmRImmediate, (XtPointer) False
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Synthetic constraints. Note that these are NOT currently used,
|
|
Packit |
b099d7 |
* as the constraint get_values_hook method below seems to work where
|
|
Packit |
b099d7 |
* synthetic resources don't. Dunno.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void Get_entryLabelString(Widget, int, XtArgVal *);
|
|
Packit |
b099d7 |
static XmSyntheticResource cont_get_resources[] =
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmNentryLabelString, sizeof(XmString),
|
|
Packit |
b099d7 |
XtOffsetOf(XmColumnConstraintRec, column.label_string),
|
|
Packit |
b099d7 |
Get_entryLabelString, (XmImportProc) NULL
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ConstraintClassExtensionRec xiColumnConstraintExtension = {
|
|
Packit |
b099d7 |
NULL, /* next_extension */
|
|
Packit |
b099d7 |
NULLQUARK, /* record_type */
|
|
Packit |
b099d7 |
XtConstraintExtensionVersion, /* version */
|
|
Packit |
b099d7 |
sizeof(ConstraintClassExtensionRec), /* record_size */
|
|
Packit |
b099d7 |
ConstraintGetValues /* get_values_hook */
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmColumnClassRec xmColumnClassRec = {
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* core_class members */
|
|
Packit |
b099d7 |
/* superclass */ (WidgetClass) &xmBulletinBoardClassRec,
|
|
Packit |
b099d7 |
/* class_name */ "XmColumn",
|
|
Packit |
b099d7 |
/* widget_size */ sizeof(XmColumnRec),
|
|
Packit |
b099d7 |
/* class_initialize */ ClassInitialize,
|
|
Packit |
b099d7 |
/* class_part_init */ ClassPartInitialize,
|
|
Packit |
b099d7 |
/* class_inited */ False,
|
|
Packit |
b099d7 |
/* initialize */ Initialize,
|
|
Packit |
b099d7 |
/* initialize_hook */ NULL,
|
|
Packit |
b099d7 |
/* realize */ XtInheritRealize,
|
|
Packit |
b099d7 |
/* actions */ NULL,
|
|
Packit |
b099d7 |
/* num_actions */ 0,
|
|
Packit |
b099d7 |
/* resources */ (XtResource*)resources,
|
|
Packit |
b099d7 |
/* num_resources */ XtNumber(resources),
|
|
Packit |
b099d7 |
/* xrm_class */ NULLQUARK,
|
|
Packit |
b099d7 |
/* compress_motion */ True,
|
|
Packit |
b099d7 |
/* compress_exposure */ True,
|
|
Packit |
b099d7 |
/* compress_enterleave*/ True,
|
|
Packit |
b099d7 |
/* visible_interest */ False,
|
|
Packit |
b099d7 |
/* destroy */ Destroy,
|
|
Packit |
b099d7 |
/* resize */ Resize,
|
|
Packit |
b099d7 |
/* expose */ XtInheritExpose,
|
|
Packit |
b099d7 |
/* set_values */ SetValues,
|
|
Packit |
b099d7 |
/* set_values_hook */ NULL,
|
|
Packit |
b099d7 |
/* set_values_almost */ XtInheritSetValuesAlmost,
|
|
Packit |
b099d7 |
/* get_values_hook */ NULL,
|
|
Packit |
b099d7 |
/* accept_focus */ NULL,
|
|
Packit |
b099d7 |
/* version */ XtVersion,
|
|
Packit |
b099d7 |
/* callback_private */ NULL,
|
|
Packit |
b099d7 |
/* tm_table */ XtInheritTranslations,
|
|
Packit |
b099d7 |
/* query_geometry */ (XtGeometryHandler) QueryGeometry,
|
|
Packit |
b099d7 |
/* display_accelerator*/ NULL,
|
|
Packit |
b099d7 |
/* extension */ NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* composite_class members */
|
|
Packit |
b099d7 |
/* geometry_manager */ GeometryManager,
|
|
Packit |
b099d7 |
/* change_managed */ ChangeManaged,
|
|
Packit |
b099d7 |
/* insert_child */ XtInheritInsertChild,
|
|
Packit |
b099d7 |
/* delete_child */ XtInheritDeleteChild,
|
|
Packit |
b099d7 |
/* extension */ NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* constraint_class fields */
|
|
Packit |
b099d7 |
/* resource list */ (XtResource*)constraint_resources,
|
|
Packit |
b099d7 |
/* num resources */ XtNumber(constraint_resources),
|
|
Packit |
b099d7 |
/* constraint size */ sizeof(XmColumnConstraintRec),
|
|
Packit |
b099d7 |
/* init proc */ ConstraintInitialize,
|
|
Packit |
b099d7 |
/* destroy proc */ ConstraintDestroy,
|
|
Packit |
b099d7 |
/* set values proc */ ConstraintSetValues,
|
|
Packit |
b099d7 |
/* extension */ &xiColumnConstraintExtension,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* manager_class fields */
|
|
Packit |
b099d7 |
/* default translations */ XtInheritTranslations,
|
|
Packit |
b099d7 |
/* syn_resources */ get_resources,
|
|
Packit |
b099d7 |
/* num_syn_resources */ XtNumber(get_resources),
|
|
Packit |
b099d7 |
/* syn_cont_resources */ NULL, /* cont_get_resources, */
|
|
Packit |
b099d7 |
/* num_syn_cont_resources */ 0, /* XtNumber(cont_get_resources),*/
|
|
Packit |
b099d7 |
/* parent_process */ XmInheritParentProcess,
|
|
Packit |
b099d7 |
/* extension */ NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{ /* bulletin board members */
|
|
Packit |
b099d7 |
/* always_install_accel */ False,
|
|
Packit |
b099d7 |
/* geo_matrix_create */ NULL,
|
|
Packit |
b099d7 |
/* focus_moved_proc */ XmInheritFocusMovedProc,
|
|
Packit |
b099d7 |
/* extension */ NULL,
|
|
Packit |
b099d7 |
},
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* column class members */
|
|
Packit |
b099d7 |
/* extension */ NULL,
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
WidgetClass xmColumnWidgetClass = (WidgetClass) &xmColumnClassRec;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* ClassInitialize(void)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called the first time XmColumn or subclass is
|
|
Packit |
b099d7 |
* created. This function is used to install all need type
|
|
Packit |
b099d7 |
* converters for this widget class.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ClassInitialize(void)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumnClassRec* wc = &xmColumnClassRec;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
XtSetTypeConverter(XmRString, XmRLabelPosition,
|
|
Packit |
b099d7 |
(XtTypeConverter) CvtStringToLabelPosition,
|
|
Packit |
b099d7 |
NULL, 0, XtCacheAll, NULL);
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
XtSetTypeConverter(XmRString, XmRXmAlignment,
|
|
Packit |
b099d7 |
(XtTypeConverter) CvtStringToXiAlignment,
|
|
Packit |
b099d7 |
NULL, 0, XtCacheAll, NULL);
|
|
Packit |
b099d7 |
XtSetTypeConverter(XmRString, XmRFillStyle,
|
|
Packit |
b099d7 |
(XtTypeConverter) CvtStringToFillStyle,
|
|
Packit |
b099d7 |
NULL, 0, XtCacheAll, NULL);
|
|
Packit |
b099d7 |
XtSetTypeConverter(XmRString, XmRDistribution,
|
|
Packit |
b099d7 |
(XtTypeConverter) CvtStringToDistribution,
|
|
Packit |
b099d7 |
NULL, 0, XtCacheAll, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* ClassPartInitialize sets up the fast subclassing for the widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
#ifdef _NO_PROTO
|
|
Packit |
b099d7 |
ClassPartInitialize(w_class)
|
|
Packit |
b099d7 |
WidgetClass w_class ;
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
ClassPartInitialize(WidgetClass w_class)
|
|
Packit |
b099d7 |
#endif /* _NO_PROTO */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_XmFastSubclassInit (w_class, XmCOLUMN_BIT);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* Initialize(request, set, arg_list, arg_cnt)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called to initialize the resource values for each
|
|
Packit |
b099d7 |
* new widget instance. This function verifies the resource values
|
|
Packit |
b099d7 |
* and takes the needed actions to initialize the new instance.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* request : Widget - user resource requests
|
|
Packit |
b099d7 |
* set : Widget - the resource values for the new widget
|
|
Packit |
b099d7 |
* arg_list : ArgList - the argument list used to set the resource
|
|
Packit |
b099d7 |
* ang_cnt : Cardinal - the number of arguments in the list
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Initialize(Widget request, Widget set, ArgList arg_list, Cardinal *arg_cnt)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumnWidget rc = (XmColumnWidget) request,
|
|
Packit |
b099d7 |
sc = (XmColumnWidget) set;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
VerifyResources(rc, (XmColumnWidget) NULL, sc);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( rc->core.width == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sc->core.width = 2 * (rc->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(rc)->margin_width);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( rc->core.height == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
sc->core.height = 2 * (rc->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(rc)->margin_height);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* Destroy(widget)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called when an instance of the Column is being
|
|
Packit |
b099d7 |
* destroyed. This function deallocates any memory allocated by the
|
|
Packit |
b099d7 |
* instance.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* widget : Widget - the widget being destroyed
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Destroy(Widget widget)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* This space intentionally left blank */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* Resize(widget)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called when an instance changes size. This
|
|
Packit |
b099d7 |
* function needs to adjust the childrens sizes and positions
|
|
Packit |
b099d7 |
* appropriately for the new size.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* widget : Widget - the widget that changed size.
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Resize(Widget widget)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
WidgetClass sc = XtSuperclass(widget);
|
|
Packit |
b099d7 |
XmColumnWidget cw = (XmColumnWidget) widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtWidgetProc resize;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_XmProcessLock();
|
|
Packit |
b099d7 |
resize = *sc->core_class.resize;
|
|
Packit |
b099d7 |
_XmProcessUnlock();
|
|
Packit |
b099d7 |
(* resize) (widget);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Layout(cw, NULL, NULL, -1, -1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmColumn_resize_done(cw) = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* SetValues(current, request, set, arg_list, arg_cnt)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called when the user changes the resource
|
|
Packit |
b099d7 |
* values for the column. This function adjusts the columns
|
|
Packit |
b099d7 |
* appearance and behavior based on the new resource settings.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* current : Widget - the current resource values for the widget
|
|
Packit |
b099d7 |
* request : Widget - the requested resource values for the widget
|
|
Packit |
b099d7 |
* set : Widget - the new resource values for the widget
|
|
Packit |
b099d7 |
* arg_list : ArgList - the argument list used to change the resource
|
|
Packit |
b099d7 |
* values
|
|
Packit |
b099d7 |
* arg_cnt :Cardinal - the number of arguments
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the Column needs redisplayed, else False.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
SetValues(Widget current, Widget request, Widget set, ArgList arg_list,
|
|
Packit |
b099d7 |
Cardinal *arg_cnt)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumnWidget cc = (XmColumnWidget) current,
|
|
Packit |
b099d7 |
cs = (XmColumnWidget) set;
|
|
Packit |
b099d7 |
Boolean request_size = False,
|
|
Packit |
b099d7 |
relayout = False;
|
|
Packit |
b099d7 |
WidgetList kid, kids = cs->composite.children;
|
|
Packit |
b099d7 |
Cardinal n, i, kidCnt = cs->composite.num_children;
|
|
Packit |
b099d7 |
Arg args[10];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
VerifyResources((XmColumnWidget) request, cc, cs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XmColumn_item_spacing(cc) != XmColumn_item_spacing(cs) ||
|
|
Packit |
b099d7 |
XmColumn_label_spacing(cc) != XmColumn_label_spacing(cs) ||
|
|
Packit |
b099d7 |
XmColumn_distribution(cc) != XmColumn_distribution(cs) ||
|
|
Packit |
b099d7 |
XmColumn_orientation(cc) != XmColumn_orientation(cs) ||
|
|
Packit |
b099d7 |
cc->manager.shadow_thickness != cs->manager.shadow_thickness ||
|
|
Packit |
b099d7 |
BBPart(cc)->margin_width != BBPart(cs)->margin_width ||
|
|
Packit |
b099d7 |
BBPart(cc)->margin_height != BBPart(cs)->margin_height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
request_size = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XmColumn_default_fill_style(cc) != XmColumn_default_fill_style(cs)
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
|| XmColumn_default_label_position(cc) != XmColumn_default_label_position(cs)
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
relayout = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
if( cc->core.background_pixel != cs->core.background_pixel )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNbackground, cs->core.background_pixel); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( cc->manager.foreground != cs->manager.foreground )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNforeground, cs->manager.foreground); n++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for( i = 0, kid = kids; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (*kid) == NULL || (*kid)->core.being_destroyed ||
|
|
Packit |
b099d7 |
XiC(*kid)->label_widget == NULL ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetValues(XiC(*kid)->label_widget, args, n);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( BBPart(cc)->label_font_list !=
|
|
Packit |
b099d7 |
BBPart(cs)->label_font_list )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for( i = 0, kid = kids; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (*kid) == NULL || (*kid)->core.being_destroyed ||
|
|
Packit |
b099d7 |
XiC(*kid)->label_widget == NULL ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(*kid)->label_font_list == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtVaSetValues(XiC(*kid)->label_widget,
|
|
Packit |
b099d7 |
XmNrenderTable,
|
|
Packit |
b099d7 |
BBPart(cs)->label_font_list,
|
|
Packit |
b099d7 |
NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XmColumn_default_label_alignment(cc) !=
|
|
Packit |
b099d7 |
XmColumn_default_label_alignment(cs) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for( i = 0, kid = kids; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (*kid) == NULL || (*kid)->core.being_destroyed ||
|
|
Packit |
b099d7 |
XiC(*kid)->label_widget == NULL ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(*kid)->label_alignment == XmALIGNMENT_UNSPECIFIED )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtVaSetValues(XiC(*kid)->label_widget,
|
|
Packit |
b099d7 |
XmNalignment,
|
|
Packit |
b099d7 |
XmColumn_default_label_alignment(cs),
|
|
Packit |
b099d7 |
NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( request_size )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Dimension width, height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmColumn_resize_done(cs) = False;
|
|
Packit |
b099d7 |
CalcSize(cs, NULL, NULL, False, &width, &height);
|
|
Packit |
b099d7 |
if( XtMakeResizeRequest((Widget) cs, width, height, &width,
|
|
Packit |
b099d7 |
&height) == XtGeometryAlmost )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumn_resize_done(cs) = False;
|
|
Packit |
b099d7 |
XtMakeResizeRequest((Widget) cs, width, height, NULL, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
relayout = !XmColumn_resize_done(cs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( relayout )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Resize((Widget) cs);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( False );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* QueryGeometry(widget, request, allowed)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called when someone wants to know how the Column
|
|
Packit |
b099d7 |
* would react to a specific geometry or when someone wants to know
|
|
Packit |
b099d7 |
* what size the Column wants to be.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* widget : Widget - the column widget
|
|
Packit |
b099d7 |
* request : XtWidgetGeometry* - the requested widget geometry
|
|
Packit |
b099d7 |
* allowed : XtWidgetGeometry* - the geometry column is will to accept
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* XtWidgetResult - the columns response to the geometry request
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static XtGeometryResult
|
|
Packit |
b099d7 |
QueryGeometry(Widget widget, XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *wanted)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumnWidget cw = (XmColumnWidget) widget;
|
|
Packit |
b099d7 |
XtGeometryResult result;
|
|
Packit |
b099d7 |
Dimension width, height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Lets start by calling this handly dandy function to calculate
|
|
Packit |
b099d7 |
* the geometry we want to be.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
CalcSize(cw, NULL, NULL, False, &width, &height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now lets see if the caller requested anything and if not
|
|
Packit |
b099d7 |
* lets give him our prefered geometry.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( request->request_mode == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
wanted->request_mode = CWWidth | CWHeight;
|
|
Packit |
b099d7 |
wanted->width = width;
|
|
Packit |
b099d7 |
wanted->height = height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( width == XtWidth(cw) && height == XtHeight(cw) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return( XtGeometryNo );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return( XtGeometryAlmost );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*wanted = *request;
|
|
Packit |
b099d7 |
if( request->request_mode & CWWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( request->width < width )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
wanted->width = width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( request->request_mode & CWHeight )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( request->height < height )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
wanted->height = height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now we have set everything in our return structure to what we
|
|
Packit |
b099d7 |
* want it to be. Now all that is left is to come up with the
|
|
Packit |
b099d7 |
* correct return result. The return result is something like.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* o request == wanted and wanted != real -> XtGeometryYes
|
|
Packit |
b099d7 |
* o request == wanted and wanted == real -> XtGeometryNo
|
|
Packit |
b099d7 |
* o request != wanted and wanted != real -> XtGeometryAlmost
|
|
Packit |
b099d7 |
* o request != wanted and wanted == real -> XtGeometryNo
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Lets first see if request == wanted
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( CompareGeometryToWidget(wanted, (Widget) cw) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XtGeometryNo;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( CompareGeometry(request, wanted) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XtGeometryYes;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XtGeometryNo;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( result );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* GeometryManager(widget, request, allowed)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called when a child of the Column would like
|
|
Packit |
b099d7 |
* to change size. This function reacts to the child's request.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* widget : Widget - the child requesting the change
|
|
Packit |
b099d7 |
* request : XtWidgetGeometry* - the requested widget geometry
|
|
Packit |
b099d7 |
* allowed : XtWidgetGeometry* - the geometry column is will to accept
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* XtWidgetResult - the columns response to the geometry request
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static XtGeometryResult
|
|
Packit |
b099d7 |
GeometryManager(Widget widget, XtWidgetGeometry *request,
|
|
Packit |
b099d7 |
XtWidgetGeometry *allowed)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumnWidget cw = (XmColumnWidget) XtParent(widget);
|
|
Packit |
b099d7 |
Dimension width, height, width_return, height_return;
|
|
Packit |
b099d7 |
XtGeometryResult result;
|
|
Packit |
b099d7 |
Boolean equal;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now being the mean manager that we are, we are only going to
|
|
Packit |
b099d7 |
* allow our children to change geometry parts the affect their
|
|
Packit |
b099d7 |
* size. i.e. we will not even discuss with them their position,
|
|
Packit |
b099d7 |
* this is mainly because we do not want to deal with it.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*allowed = *request;
|
|
Packit |
b099d7 |
allowed->request_mode = request->request_mode =
|
|
Packit |
b099d7 |
(request->request_mode & ~(CWX | CWY));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now lets see what this child wants to change.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( request->request_mode & CWWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
allowed->width = request->width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
allowed->width = XiC(widget)->request_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( request->request_mode & CWHeight )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
allowed->height = request->height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
allowed->height = XiC(widget)->request_height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( request->request_mode & CWBorderWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
allowed->border_width = request->border_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
allowed->border_width = XtBorderWidth(widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now that we know what size our child want to be lets see
|
|
Packit |
b099d7 |
* how that effects the geometry we want to be.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
CalcSize(cw, widget, allowed, False, &width, &height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now that we know that size that we want to be, lets ask our
|
|
Packit |
b099d7 |
* parent and see what they have to say.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( request->request_mode & XtCWQueryOnly )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtWidgetGeometry req, alw;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
req.request_mode = CWWidth | CWHeight | XtCWQueryOnly;
|
|
Packit |
b099d7 |
req.width = width;
|
|
Packit |
b099d7 |
req.height = height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
width = XtWidth(cw);
|
|
Packit |
b099d7 |
height = XtHeight(cw);
|
|
Packit |
b099d7 |
switch( XtMakeGeometryRequest((Widget) cw, &req, &alw) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XtGeometryYes:
|
|
Packit |
b099d7 |
return( XtGeometryYes );
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XtGeometryAlmost:
|
|
Packit |
b099d7 |
if( alw.request_mode & CWWidth ) width = alw.width;
|
|
Packit |
b099d7 |
if( alw.request_mode & CWHeight ) height = alw.height;
|
|
Packit |
b099d7 |
case XtGeometryNo:
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
Layout(cw, widget, allowed, width, height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
allowed->width = XiC(widget)->position.width;
|
|
Packit |
b099d7 |
allowed->height = XiC(widget)->position.height;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Dimension cur_width, cur_height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XiC(widget)->request_width = allowed->width;
|
|
Packit |
b099d7 |
XiC(widget)->request_height = allowed->height;
|
|
Packit |
b099d7 |
XmColumn_resize_done(cw) = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cur_width = XtWidth(cw);
|
|
Packit |
b099d7 |
cur_height = XtHeight(cw);
|
|
Packit |
b099d7 |
switch( XtMakeResizeRequest((Widget) cw, width, height,
|
|
Packit |
b099d7 |
&width_return, &height_return) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XtGeometryYes:
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* It appears that our parent will has let us change to
|
|
Packit |
b099d7 |
* the size that we want to be, so lets see if we need to
|
|
Packit |
b099d7 |
* call our resize procedure.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( !XmColumn_resize_done(cw) ) Resize((Widget) cw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Layout(cw, widget, allowed, width, height);
|
|
Packit |
b099d7 |
allowed->width = XiC(widget)->position.width;
|
|
Packit |
b099d7 |
allowed->height = XiC(widget)->position.height;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XtGeometryAlmost:
|
|
Packit |
b099d7 |
cur_width = width_return;
|
|
Packit |
b099d7 |
cur_height = height_return;
|
|
Packit |
b099d7 |
case XtGeometryNo:
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
Layout(cw, widget, allowed, cur_width, cur_height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
allowed->width = XiC(widget)->position.width;
|
|
Packit |
b099d7 |
allowed->height = XiC(widget)->position.height;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
width = XtWidth(widget);
|
|
Packit |
b099d7 |
height = XtHeight(widget);
|
|
Packit |
b099d7 |
equal = CompareGeometryToWidget(allowed, widget);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( equal )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XtGeometryNo;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( CompareGeometry(request, allowed) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XtGeometryYes;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XtGeometryAlmost;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( result == XtGeometryYes )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Layout(cw, NULL, NULL, -1, -1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( result );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* ChangeManaged(widget)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This is called when one of the children of the column changes
|
|
Packit |
b099d7 |
* managed state. This routine just takes care of this situation.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* widget : Widget - the column widget
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ChangeManaged(Widget widget)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
static Boolean in = False;
|
|
Packit |
b099d7 |
XmColumnWidget cw = (XmColumnWidget) widget;
|
|
Packit |
b099d7 |
WidgetList kid = cw->composite.children;
|
|
Packit |
b099d7 |
Widget label;
|
|
Packit |
b099d7 |
Cardinal i;
|
|
Packit |
b099d7 |
Dimension width, height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( in ) return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
in = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for( i = 0; i < cw->composite.num_children; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (*kid) != NULL && !XtIsManaged(*kid) )
|
|
Packit |
b099d7 |
{ /* CR03731 */
|
|
Packit |
b099d7 |
if (XiC(*kid)->label_widget) {
|
|
Packit |
b099d7 |
XtUnmanageChild(XiC(*kid)->label_widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
XiC(*kid)->request_width = 0;
|
|
Packit |
b099d7 |
XiC(*kid)->request_height = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
continue;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
if( !XiC(*kid)->show_label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( XtIsManaged(*kid) ) XtUnmanageChild(label);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( XtIsManaged(*kid) != XtIsManaged(label) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( XtIsManaged(*kid) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtManageChild(label);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtUnmanageChild(label);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(*kid)->request_width == 0 && XtIsManaged(*kid) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->request_width = XtWidth(*kid);
|
|
Packit |
b099d7 |
XiC(*kid)->request_height = XtHeight(*kid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( XtIsManaged(label) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( XiC(label)->request_width == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#if 0
|
|
Packit |
b099d7 |
XiC(label)->request_width = XtWidth(label);
|
|
Packit |
b099d7 |
XiC(label)->request_height = XtHeight(label);
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Unfortunately, XtWidth() and XtHeight() may not be valid in
|
|
Packit |
b099d7 |
** this case. The request_width and request_height values are
|
|
Packit |
b099d7 |
** used both to indicate real requested size and also, when 0,
|
|
Packit |
b099d7 |
** to indicate a label with particular geometry needs.
|
|
Packit |
b099d7 |
** However, if the code goes through ConstraintSetValues (in
|
|
Packit |
b099d7 |
** code generated by the Xcessory tools, constraint resources
|
|
Packit |
b099d7 |
** are set via set-values after widget creation) first, the
|
|
Packit |
b099d7 |
** sizes are 0 and are then set to 1 in VerticalLayout; then
|
|
Packit |
b099d7 |
** the code comes through here and updates the request values
|
|
Packit |
b099d7 |
** from the real widths -- 1 -- which are then set back on the
|
|
Packit |
b099d7 |
** widget as the geometry. The net result is that the labels
|
|
Packit |
b099d7 |
** appear with width 1 (and correct height).
|
|
Packit |
b099d7 |
**
|
|
Packit |
b099d7 |
** Ideally we would cache the real initial requested value and
|
|
Packit |
b099d7 |
** update from that value.
|
|
Packit |
b099d7 |
**
|
|
Packit |
b099d7 |
** For now, rather than storing those values, query the
|
|
Packit |
b099d7 |
** label locally for its preferences and use those; the result
|
|
Packit |
b099d7 |
** should be that the size is set correctly (going through
|
|
Packit |
b099d7 |
** CalcSize and then VerticalLayout).
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtWidgetGeometry wants;
|
|
Packit |
b099d7 |
XtQueryGeometry(label, NULL, &wants);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( wants.request_mode & CWWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(label)->request_width = wants.width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(label)->request_width = XtWidth(label);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( wants.request_mode & CWHeight )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(label)->request_height = wants.height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(label)->request_height = XtHeight(label);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(label)->request_width = 0;
|
|
Packit |
b099d7 |
XiC(label)->request_height = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CalcSize(cw, NULL, NULL, False, &width, &height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XtMakeResizeRequest(widget, width, height, &width, &height) ==
|
|
Packit |
b099d7 |
XtGeometryAlmost )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtMakeResizeRequest(widget, width, height, NULL, NULL);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Layout(cw, NULL, NULL, -1, -1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
in = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* ConstraintInitialize(request, new_w, arg_list, arg_cnt)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function initializes the constraint record for a new child,
|
|
Packit |
b099d7 |
* this includes adding a label for each child.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* request : Widget - the requested resource values
|
|
Packit |
b099d7 |
* new_w : Widget - the new_w resource values (the new widget)
|
|
Packit |
b099d7 |
* arg_list : ArgList - the argument used to create the widget
|
|
Packit |
b099d7 |
* arg_cnt : Cardinal - the number of arguments
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ConstraintInitialize(Widget request, Widget new_w, ArgList arg_list,
|
|
Packit |
b099d7 |
Cardinal *arg_cnt)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
static Boolean label_widget = False; /* STATIC DATA */
|
|
Packit |
b099d7 |
XmColumnWidget cw = (XmColumnWidget) XtParent(new_w);
|
|
Packit |
b099d7 |
XmBulletinBoardPart *bbpart;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* CR03562 CR02961 When ChangeManaged is bypassed, request width and height
|
|
Packit |
b099d7 |
are not set. The 2 line will prevent this assumption which sometimes
|
|
Packit |
b099d7 |
will case the widget size to have zero width/height */
|
|
Packit |
b099d7 |
#if 1
|
|
Packit |
b099d7 |
/* Note! below fix problematic w.r.t. ChangeManaged code, and needs
|
|
Packit |
b099d7 |
** revisiting; back out temporarily
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** It is possible that the widget will have a constraint resource set
|
|
Packit |
b099d7 |
** on it before the XmColumn itself is realized (ChangeManaged is
|
|
Packit |
b099d7 |
** bypassed in that case), so that we enter the Layout code without
|
|
Packit |
b099d7 |
** having the values request_width and request_height set from the
|
|
Packit |
b099d7 |
** code in ChangeManaged. Rather than use 0 here, which gives poor
|
|
Packit |
b099d7 |
** results when those values are used in XtConfigureWidget to set
|
|
Packit |
b099d7 |
** the size, initialize them to reasonable default values.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
XiC(new_w)->request_width = XtWidth(new_w);
|
|
Packit |
b099d7 |
XiC(new_w)->request_height = XtHeight(new_w);
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
XiC(new_w)->request_width = 0;
|
|
Packit |
b099d7 |
XiC(new_w)->request_height = 0;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XiC(new_w)->label_string = XmStringCopy(XiC(new_w)->label_string);
|
|
Packit |
b099d7 |
if( label_widget )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(new_w)->label_alignment = XmALIGNMENT_UNSPECIFIED;
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
XiC(new_w)->label_position = XiLABEL_POSITION_UNSPECIFIED;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
XiC(new_w)->label_type = XmSTRING;
|
|
Packit |
b099d7 |
XiC(new_w)->label_pixmap = XmUNSPECIFIED_PIXMAP;
|
|
Packit |
b099d7 |
XiC(new_w)->label_string = (XmString) NULL;
|
|
Packit |
b099d7 |
XiC(new_w)->label_widget = (Widget) NULL;
|
|
Packit |
b099d7 |
XiC(new_w)->show_label = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[64];
|
|
Packit |
b099d7 |
int nargs;
|
|
Packit |
b099d7 |
char buf[256];
|
|
Packit |
b099d7 |
Widget label;
|
|
Packit |
b099d7 |
XmFontList lfont;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
VerifyConstraints(request, NULL, new_w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( strlen(XtName(new_w)) > 240 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
strncpy(buf, XtName(new_w), 240);
|
|
Packit |
b099d7 |
buf[240] = '\0';
|
|
Packit |
b099d7 |
strcat(buf, "_label");
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
strcpy(buf, XtName(new_w));
|
|
Packit |
b099d7 |
strcat(buf, "_label");
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label_widget = True;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
lfont = XmColumnC_label_font_list(new_w);
|
|
Packit |
b099d7 |
bbpart = BBPart(XtParent(new_w));
|
|
Packit |
b099d7 |
if(lfont == NULL)
|
|
Packit |
b099d7 |
lfont = bbpart->label_font_list;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
nargs = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNmarginWidth, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNmarginHeight, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNmarginTop, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNmarginBottom, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNmarginLeft, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNmarginRight, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNshadowThickness, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNhighlightThickness, 0); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNtraversalOn, False); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNlabelType, XiC(new_w)->label_type); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs],
|
|
Packit |
b099d7 |
XmNlabelString, XiC(new_w)->label_string); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs],
|
|
Packit |
b099d7 |
XmNlabelPixmap, XiC(new_w)->label_pixmap); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNalignment, XiAlignment(new_w)); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNrenderTable, lfont); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNrecomputeSize, True); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs], XmNforeground, cw->manager.foreground); nargs++;
|
|
Packit |
b099d7 |
XtSetArg(args[nargs],
|
|
Packit |
b099d7 |
XmNbackground, cw->core.background_pixel); nargs++;
|
|
Packit |
b099d7 |
label = XtCreateWidget(buf, xmLabelWidgetClass, (Widget) cw,
|
|
Packit |
b099d7 |
args, nargs);
|
|
Packit |
b099d7 |
XiC(new_w)->label_widget = label;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAddCallback(label, XmNdestroyCallback,
|
|
Packit |
b099d7 |
XmColumnLabelDestroyedCallback, (XtPointer) new_w);
|
|
Packit |
b099d7 |
XiC(label)->label_alignment = XmALIGNMENT_UNSPECIFIED;
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
XiC(label)->label_position = XiLABEL_POSITION_UNSPECIFIED;
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
XiC(label)->label_type = XmSTRING;
|
|
Packit |
b099d7 |
XiC(label)->label_pixmap = XmUNSPECIFIED_PIXMAP;
|
|
Packit |
b099d7 |
XiC(label)->label_string = (XmString) NULL;
|
|
Packit |
b099d7 |
XiC(label)->label_widget = (Widget) NULL;
|
|
Packit |
b099d7 |
XiC(label)->show_label = False;
|
|
Packit |
b099d7 |
label_widget = False;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* ConstraintSetValues(current, request, new_w, arg_list, arg_cnt)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called when the user changes an attribute of
|
|
Packit |
b099d7 |
* one of the columns children. This routine reacts to the change.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* current : Widget - the current state of the child
|
|
Packit |
b099d7 |
* request : Widget - the request state of the child
|
|
Packit |
b099d7 |
* new_w : Widget - the child with the requested changes
|
|
Packit |
b099d7 |
* arg_list : ArgList - the argument that modified the child
|
|
Packit |
b099d7 |
* arg_cnt : Cardinal - the number of argument
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the child needs to be redisplayed, else False.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
ConstraintSetValues(Widget current, Widget request, Widget new_w,
|
|
Packit |
b099d7 |
ArgList arg_list, Cardinal *arg_cnt)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumnWidget cw = (XmColumnWidget) XtParent(new_w);
|
|
Packit |
b099d7 |
XmColumnConstraintPart *cc = XiC(current),
|
|
Packit |
b099d7 |
*sc = XiC(new_w);
|
|
Packit |
b099d7 |
Boolean relayout = False;
|
|
Packit |
b099d7 |
Arg args[10];
|
|
Packit |
b099d7 |
Cardinal i = 0;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(new_w)->label_widget == NULL ) return( False );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
VerifyConstraints(request, current, new_w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if(
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
cc->label_position != sc->label_position ||
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
cc->fill_style != sc->fill_style ||
|
|
Packit |
b099d7 |
cc->show_label != sc->show_label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
relayout = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cc->label_font_list != sc->label_font_list )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmFontList lfont = XmColumnC_label_font_list(new_w);
|
|
Packit |
b099d7 |
if(lfont == NULL)
|
|
Packit |
b099d7 |
lfont = BBPart(XtParent(new_w))->label_font_list;
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNrenderTable, lfont); ++i;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cc->label_alignment != sc->label_alignment )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNalignment, XiAlignment(new_w)); ++i;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cc->label_string != sc->label_string )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmStringFree(cc->label_string);
|
|
Packit |
b099d7 |
sc->label_string = XmStringCopy(sc->label_string);
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNlabelString, sc->label_string); ++i;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cc->label_pixmap != sc->label_pixmap )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNlabelPixmap, sc->label_pixmap); ++i;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cc->label_type != sc->label_type )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtSetArg(args[i], XmNlabelType, sc->label_type); ++i;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( i > 0 ) XtSetValues(sc->label_widget, args, i);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmColumn_resize_done(cw) = False;
|
|
Packit |
b099d7 |
if( cc->show_label != sc->show_label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( sc->show_label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtManageChild(sc->label_widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtUnmanageChild(sc->label_widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( relayout && !XmColumn_resize_done(cw) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Layout(cw, NULL, NULL, -1, -1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( False );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* ConstraintDestroy(widget)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function is called to deallocate any resources allocated by
|
|
Packit |
b099d7 |
* the constraint record.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* widget : Widget - the widget being destroyed.
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ConstraintDestroy(Widget widget)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmStringFree(XiC(widget)->label_string);
|
|
Packit |
b099d7 |
if( XiC(widget)->label_widget != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtRemoveCallback(XiC(widget)->label_widget, XmNdestroyCallback,
|
|
Packit |
b099d7 |
XmColumnLabelDestroyedCallback, (XtPointer) widget);
|
|
Packit |
b099d7 |
XtDestroyWidget(XiC(widget)->label_widget);
|
|
Packit |
b099d7 |
XiC(widget)->label_widget = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* ConstraintGetValues
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* The constraint get_values_hook method. It makes copies of the
|
|
Packit |
b099d7 |
* XmNentryLabelString values to prevent returning internal
|
|
Packit |
b099d7 |
* XmString data.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* w - The child widget
|
|
Packit |
b099d7 |
* args - Array of Arg structures
|
|
Packit |
b099d7 |
* num_args - Number of entries in args
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* none (other than the silently copies XmString value)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
ConstraintGetValues(Widget w, ArgList args, Cardinal *num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XrmQuark quark;
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
quark = XrmStringToQuark(XmNentryLabelString);
|
|
Packit |
b099d7 |
for (i = 0; i < ((int) *num_args); i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (quark == XrmStringToQuark(args[i].name))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
args[i].value =
|
|
Packit |
b099d7 |
(XtArgVal) XmStringCopy(XmColumnC_label_string(w));
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int
|
|
Packit |
b099d7 |
CompareISOLatin1 (char *first, char *second)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register unsigned char *ap, *bp;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (ap = (unsigned char *) first, bp = (unsigned char *) second;
|
|
Packit |
b099d7 |
*ap && *bp; ap++, bp++) {
|
|
Packit |
b099d7 |
register unsigned char a, b;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((a = *ap) != (b = *bp)) {
|
|
Packit |
b099d7 |
/* try lowercasing and try again */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((a >= XK_A) && (a <= XK_Z))
|
|
Packit |
b099d7 |
a += (XK_a - XK_A);
|
|
Packit |
b099d7 |
else if ((a >= XK_Agrave) && (a <= XK_Odiaeresis))
|
|
Packit |
b099d7 |
a += (XK_agrave - XK_Agrave);
|
|
Packit |
b099d7 |
else if ((a >= XK_Ooblique) && (a <= XK_Thorn))
|
|
Packit |
b099d7 |
a += (XK_oslash - XK_Ooblique);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((b >= XK_A) && (b <= XK_Z))
|
|
Packit |
b099d7 |
b += (XK_a - XK_A);
|
|
Packit |
b099d7 |
else if ((b >= XK_Agrave) && (b <= XK_Odiaeresis))
|
|
Packit |
b099d7 |
b += (XK_agrave - XK_Agrave);
|
|
Packit |
b099d7 |
else if ((b >= XK_Ooblique) && (b <= XK_Thorn))
|
|
Packit |
b099d7 |
b += (XK_oslash - XK_Ooblique);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (a != b) break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
return (((int) *bp) - ((int) *ap));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* done
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This macro is used by the resource conversion routines and
|
|
Packit |
b099d7 |
* simply assigns the value and returns the correct result.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#define done(type, value) \
|
|
Packit |
b099d7 |
{ \
|
|
Packit |
b099d7 |
if( to->addr != NULL ) \
|
|
Packit |
b099d7 |
{ \
|
|
Packit |
b099d7 |
if( to->size < sizeof(type) ) \
|
|
Packit |
b099d7 |
{ \
|
|
Packit |
b099d7 |
to->size = sizeof(type); \
|
|
Packit |
b099d7 |
return( False ); \
|
|
Packit |
b099d7 |
} \
|
|
Packit |
b099d7 |
*(type*)(to->addr) = (value); \
|
|
Packit |
b099d7 |
} \
|
|
Packit |
b099d7 |
else \
|
|
Packit |
b099d7 |
{ \
|
|
Packit |
b099d7 |
static type static_val; \
|
|
Packit |
b099d7 |
static_val = (value); \
|
|
Packit |
b099d7 |
to->addr = (XtPointer) &static_val; \
|
|
Packit |
b099d7 |
} \
|
|
Packit |
b099d7 |
to->size = sizeof(type); \
|
|
Packit |
b099d7 |
return( True ); \
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* CvtStringToLabelPosition(dpy, args, arg_cnt, from, to, data)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function converts a string representation of the representation
|
|
Packit |
b099d7 |
* type XmRLabelPosition to an actual value.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* dpy : Display - unused
|
|
Packit |
b099d7 |
* args : XrmValue* - unused
|
|
Packit |
b099d7 |
* arg_cnt : Cardinal - unused
|
|
Packit |
b099d7 |
* from : XrmValue* - contains the string representation of the value
|
|
Packit |
b099d7 |
* to : XrmValue* - returns the actual value
|
|
Packit |
b099d7 |
* data : XtPointer - unused
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the conversion was successful else False.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CvtStringToLabelPosition(Display *dpy, XrmValue *args, Cardinal *arg_cnt,
|
|
Packit |
b099d7 |
XrmValue *from, XrmValue *to, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
unsigned char result = XiLABEL_POSITION_LEFT;
|
|
Packit |
b099d7 |
String str = (String) (from->addr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( CompareISOLatin1(str, "label_position_unspecified") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "unspecified") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XiLABEL_POSITION_UNSPECIFIED;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "label_position_left") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "left") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XiLABEL_POSITION_LEFT;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "label_position_right") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "right") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XiLABEL_POSITION_RIGHT;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "label_position_top") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "top") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XiLABEL_POSITION_TOP;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "label_position_bottom") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "bottom") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XiLABEL_POSITION_BOTTOM;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "label_position_center") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "CENTER") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XiLABEL_POSITION_CENTER;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtDisplayStringConversionWarning(dpy, from->addr, XmRLabelPosition);
|
|
Packit |
b099d7 |
return( False );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
done(unsigned char, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* CvtStringToXiAlignment(dpy, args, arg_cnt, from, to, data)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function converts a string representation of the representation
|
|
Packit |
b099d7 |
* type XmRXnAlignment to an actual value.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* dpy : Display - unused
|
|
Packit |
b099d7 |
* args : XrmValue* - unused
|
|
Packit |
b099d7 |
* arg_cnt : Cardinal - unused
|
|
Packit |
b099d7 |
* from : XrmValue* - contains the string representation of the value
|
|
Packit |
b099d7 |
* to : XrmValue* - returns the actual value
|
|
Packit |
b099d7 |
* data : XtPointer - unused
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the conversion was successful else False.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CvtStringToXiAlignment(Display *dpy, XrmValue *args, Cardinal *arg_cnt,
|
|
Packit |
b099d7 |
XrmValue *from, XrmValue *to, XtPointer data)
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
unsigned char result = XmALIGNMENT_CENTER;
|
|
Packit |
b099d7 |
String str = (String) (from->addr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( CompareISOLatin1(str, "alignment_unspecified") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "unspecified") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmALIGNMENT_UNSPECIFIED;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "alignment_beginning") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "beginning") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmALIGNMENT_BEGINNING;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "alignment_center") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "center") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmALIGNMENT_CENTER;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "alignment_end") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "end") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmALIGNMENT_END;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtDisplayStringConversionWarning(dpy, from->addr, XmRXmAlignment);
|
|
Packit |
b099d7 |
return( False );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
done(unsigned char, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* CvtStringToFillStyle(dpy, args, arg_cnt, from, to, data)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function converts a string representation of the representation
|
|
Packit |
b099d7 |
* type XmRFillStyle to an actual value.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* dpy : Display - unused
|
|
Packit |
b099d7 |
* args : XrmValue* - unused
|
|
Packit |
b099d7 |
* arg_cnt : Cardinal - unused
|
|
Packit |
b099d7 |
* from : XrmValue* - contains the string representation of the value
|
|
Packit |
b099d7 |
* to : XrmValue* - returns the actual value
|
|
Packit |
b099d7 |
* data : XtPointer - unused
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the conversion was successful else False.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CvtStringToFillStyle(Display *dpy, XrmValue *args, Cardinal *arg_cnt,
|
|
Packit |
b099d7 |
XrmValue *from, XrmValue *to, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
unsigned char result = XmFILL_UNSPECIFIED;
|
|
Packit |
b099d7 |
String str = (String) (from->addr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( CompareISOLatin1(str, "fill_unspecified") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "unspecified") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmFILL_UNSPECIFIED;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "fill_flush") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "flush") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmFILL_FLUSH;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "fill_ragged") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "ragged") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmFILL_RAGGED;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtDisplayStringConversionWarning(dpy, from->addr, XmRFillStyle);
|
|
Packit |
b099d7 |
return( False );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
done(unsigned char, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* CvtStringToDistribution(dpy, args, arg_cnt, from, to, data)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function converts a string representation of the representation
|
|
Packit |
b099d7 |
* type XmRDistribution to an actual value.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* dpy : Display - unused
|
|
Packit |
b099d7 |
* args : XrmValue* - unused
|
|
Packit |
b099d7 |
* arg_cnt : Cardinal - unused
|
|
Packit |
b099d7 |
* from : XrmValue* - contains the string representation of the value
|
|
Packit |
b099d7 |
* to : XrmValue* - returns the actual value
|
|
Packit |
b099d7 |
* data : XtPointer - unused
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the conversion was successful else False.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CvtStringToDistribution(Display *dpy, XrmValue *args, Cardinal *arg_cnt,
|
|
Packit |
b099d7 |
XrmValue *from, XrmValue *to, XtPointer data)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
unsigned char result = XmDISTRIBUTE_TIGHT;
|
|
Packit |
b099d7 |
String str = (String) (from->addr);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( CompareISOLatin1(str, "distribute_tight") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "tight") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmDISTRIBUTE_TIGHT;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( CompareISOLatin1(str, "distribute_spread") == 0 ||
|
|
Packit |
b099d7 |
CompareISOLatin1(str, "spread") == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = XmDISTRIBUTE_SPREAD;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtDisplayStringConversionWarning(dpy, from->addr, XmRDistribution);
|
|
Packit |
b099d7 |
return( False );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
done(unsigned char, result);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* VerifyResources(request, current, new_w)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function verifies the values for the Column's resource in
|
|
Packit |
b099d7 |
* "new_w" resetting them to the previous or default values if an
|
|
Packit |
b099d7 |
* invalid resource value was set.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* request : XmColumnWidget - the requested setting for the widget
|
|
Packit |
b099d7 |
* current : XmColumnWidget - the current setting for the widget
|
|
Packit |
b099d7 |
* new_w : XmColumnWidget - the setting for the widget
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
VerifyResources(XmColumnWidget request, XmColumnWidget current,
|
|
Packit |
b099d7 |
XmColumnWidget new_w)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean reset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( BBPart(new_w)->label_font_list == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
BBPart(new_w)->label_font_list =
|
|
Packit |
b099d7 |
XmeGetDefaultRenderTable((Widget) new_w, XmLABEL_FONTLIST);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
reset = False;
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
switch( XmColumn_default_label_position(new_w) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_CENTER:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_LEFT:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_RIGHT:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_TOP:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_BOTTOM:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_UNSPECIFIED:
|
|
Packit |
b099d7 |
XmeWarning((Widget) new_w),
|
|
Packit |
b099d7 |
"The illegal resource value \"XiLABEL_POSITION_UNSPECIFIED\" was assigned to the resource XmNDefaultLabelPosition");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning((Widget) new_w,
|
|
Packit |
b099d7 |
"An illegal resource value was assigned to the resource XmNDefaultLabelPosition");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( reset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumn_default_label_position(new_w) =
|
|
Packit |
b099d7 |
(current != NULL
|
|
Packit |
b099d7 |
? XmColumn_default_label_position(current)
|
|
Packit |
b099d7 |
: DEFAULT_POSITION);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
reset = False;
|
|
Packit |
b099d7 |
switch( XmColumn_default_label_alignment(new_w) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmALIGNMENT_BEGINNING:
|
|
Packit |
b099d7 |
case XmALIGNMENT_CENTER:
|
|
Packit |
b099d7 |
case XmALIGNMENT_END:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case XmALIGNMENT_UNSPECIFIED:
|
|
Packit |
b099d7 |
XmeWarning((Widget) new_w,
|
|
Packit |
b099d7 |
"The illegal resource value \"XmALIGNMENT_UNSPECIFIED\" was assigned to the resource XmNdefaultEntryLabelAlignment");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning((Widget) new_w,
|
|
Packit |
b099d7 |
"An illegal resource value was assigned to the resource XmNdefaultEntryLabelAlignment");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( reset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumn_default_label_alignment(new_w) =
|
|
Packit |
b099d7 |
(current != NULL
|
|
Packit |
b099d7 |
? XmColumn_default_label_alignment(current)
|
|
Packit |
b099d7 |
: DEFAULT_ALIGNMENT);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
reset = False;
|
|
Packit |
b099d7 |
switch( XmColumn_orientation(new_w) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmHORIZONTAL:
|
|
Packit |
b099d7 |
case XmVERTICAL:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning((Widget) new_w,
|
|
Packit |
b099d7 |
"An illegal resource value was assigned to the resource XmNorientation");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( reset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumn_orientation(new_w) =
|
|
Packit |
b099d7 |
(current != NULL
|
|
Packit |
b099d7 |
? XmColumn_orientation(current)
|
|
Packit |
b099d7 |
: DEFAULT_ORIENTATION);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* Layout(cw, child, child_size, col_width, col_height)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This is simply a launcher routine. This routine passes control
|
|
Packit |
b099d7 |
* to the appropriate layout routine depending on the orientation
|
|
Packit |
b099d7 |
* of the column.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* cw : XmColumnWidget - the column to layout
|
|
Packit |
b099d7 |
* child : Widget - A childs whose geometry is specified
|
|
Packit |
b099d7 |
* child_size : XtWidgetGeometry* - the specified child geometry
|
|
Packit |
b099d7 |
* col_width : int - a specified width for the column
|
|
Packit |
b099d7 |
* col_height : int - a specified height for the column
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
Layout(XmColumnWidget cw, Widget child, XtWidgetGeometry *child_size,
|
|
Packit |
b099d7 |
int col_width, int col_height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (XmColumn_orientation(cw) == XmHORIZONTAL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
HorizontalLayout(cw, child, child_size, col_width, col_height);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
VerticalLayout(cw, child, child_size, col_width, col_height);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* HorizontalLayout(cw, child, child_size, col_witdh, col_height)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This routine handles the horizontal layout for the column widget
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* cw : XmColumnWidget - the column to layout
|
|
Packit |
b099d7 |
* child : Widget - A childs whose geometry is specified
|
|
Packit |
b099d7 |
* child_size : XtWidgetGeometry* - the specified child geometry
|
|
Packit |
b099d7 |
* col_width : int - a specified width for the column
|
|
Packit |
b099d7 |
* col_height : int - a specified height for the column
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
HorizontalLayout(XmColumnWidget cw, Widget child,
|
|
Packit |
b099d7 |
XtWidgetGeometry *child_size, int col_width, int col_height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Do the Horizontal Layout, Baby! */
|
|
Packit |
b099d7 |
WidgetList kids = cw->composite.children, kid;
|
|
Packit |
b099d7 |
Widget label;
|
|
Packit |
b099d7 |
Cardinal i, kidCnt = cw->composite.num_children;
|
|
Packit |
b099d7 |
Position x, y;
|
|
Packit |
b099d7 |
int cWidth, cBorder, cbWidth, lWidth, valid, space;
|
|
Packit |
b099d7 |
Dimension fillHeight;
|
|
Packit |
b099d7 |
int ispace = (int)XmColumn_item_spacing(cw);
|
|
Packit |
b099d7 |
int kidSpace;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( col_width < 0 ) col_width = XtWidth(cw);
|
|
Packit |
b099d7 |
if( col_height < 0 ) col_height = XtHeight(cw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fillHeight = col_height - 2 * (cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(cw)->margin_height);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for( i = 0, kid = kids, lWidth = 0, cbWidth = 0, valid = 0,
|
|
Packit |
b099d7 |
space = 0, kidSpace = 0; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->position.x = XiC(*kid)->position.y = 0;
|
|
Packit |
b099d7 |
if( *kid == child )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->position.width = child_size->width;
|
|
Packit |
b099d7 |
XiC(*kid)->position.height = child_size->height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->position.width = XiC(*kid)->request_width;
|
|
Packit |
b099d7 |
XiC(*kid)->position.height = XiC(*kid)->request_height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
valid++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( *kid == child )
|
|
Packit |
b099d7 |
cbWidth += child_size->width + 2*child_size->border_width;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
cbWidth += XiC(*kid)->request_width + 2*XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !XiC(*kid)->show_label ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
space += XmColumn_label_spacing(cw);
|
|
Packit |
b099d7 |
kidSpace++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
if( label == child )
|
|
Packit |
b099d7 |
lWidth += child_size->width;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
lWidth += XiC(label)->request_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
x = cw->manager.shadow_thickness + BBPart(cw)->margin_width;
|
|
Packit |
b099d7 |
if( valid > 0 && (x + lWidth + space + cbWidth + ispace*(valid-1) + x > col_width ) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* First try to shrink labelSpacing, then itemSpacing, otherwise clip.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int have = (col_width - 2 * x),
|
|
Packit |
b099d7 |
want = lWidth + space + ispace*(valid-1) + cbWidth,
|
|
Packit |
b099d7 |
diff = want - have;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( space - diff > 1)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
space -= diff;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (0 != space)
|
|
Packit |
b099d7 |
space = kidSpace;
|
|
Packit |
b099d7 |
want = lWidth + space + ispace*(valid-1) + cbWidth;
|
|
Packit |
b099d7 |
diff = want - have;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (ispace*(valid-1) - diff > 1)
|
|
Packit |
b099d7 |
ispace = (ispace*(valid-1)-diff)/(valid-1);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (0 != ispace)
|
|
Packit |
b099d7 |
ispace = 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (0==kidSpace) kidSpace = 1;
|
|
Packit |
b099d7 |
space /= kidSpace;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Calculating the widths for the various kids is a one shot, so lets
|
|
Packit |
b099d7 |
* first walk through the kids and calculate all the width.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
for( kid = kids, i = 0; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int mySpace;
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
XiC(label)->position.width = XtWidth(label);
|
|
Packit |
b099d7 |
if( XiC(*kid)->show_label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = XtWidth(label);
|
|
Packit |
b099d7 |
mySpace = space;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = 0;
|
|
Packit |
b099d7 |
mySpace = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if (LayoutIsRtoLM(cw))
|
|
Packit |
b099d7 |
XiC(label)->position.x = col_width - x - lWidth;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XiC(label)->position.x = x;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* First, let's calculate the kid's X-position */
|
|
Packit |
b099d7 |
if( *kid == child )
|
|
Packit |
b099d7 |
cWidth = XiC(*kid)->position.width = child_size->width;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
cWidth = XiC(*kid)->position.width = XiC(*kid)->request_width;
|
|
Packit |
b099d7 |
if (LayoutIsRtoLM(cw))
|
|
Packit |
b099d7 |
XiC(*kid)->position.x = col_width - (x + lWidth + space) - cWidth;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XiC(*kid)->position.x = x + lWidth + space;
|
|
Packit |
b099d7 |
if( child == *kid )
|
|
Packit |
b099d7 |
cBorder = child_size->border_width;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
cBorder = XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
x += lWidth + mySpace + cWidth + ispace + 2*cBorder;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Now, let's calculate the kid's Y-position */
|
|
Packit |
b099d7 |
y = cw->manager.shadow_thickness + BBPart(cw)->margin_height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XiC(label)->position.y += y;
|
|
Packit |
b099d7 |
XiC(*kid)->position.y += y;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* If XmNfillStyle == XmFILL_FLUSH, adjust height to same as column */
|
|
Packit |
b099d7 |
if (XiFill(*kid) == XmFILL_FLUSH)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(label)->position.height = fillHeight;
|
|
Packit |
b099d7 |
XiC(*kid)->position.height = fillHeight;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( child == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for( i = 0, kid = kids; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(*kid)->show_label ) {
|
|
Packit |
b099d7 |
XtConfigureWidget(label, XiC(label)->position.x,
|
|
Packit |
b099d7 |
XiC(label)->position.y,
|
|
Packit |
b099d7 |
XiC(label)->position.width,
|
|
Packit |
b099d7 |
XiC(*kid)->position.height, 0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtConfigureWidget(*kid, XiC(*kid)->position.x,
|
|
Packit |
b099d7 |
XiC(*kid)->position.y,
|
|
Packit |
b099d7 |
XiC(*kid)->position.width,
|
|
Packit |
b099d7 |
XiC(*kid)->position.height,
|
|
Packit |
b099d7 |
XtBorderWidth(*kid));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* VerticalLayout(cw, child, child_size, col_witdh, col_height)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This routine handles the vertical layout for the column widget
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* cw : XmColumnWidget - the column to layout
|
|
Packit |
b099d7 |
* child : Widget - A childs whose geometry is specified
|
|
Packit |
b099d7 |
* child_size : XtWidgetGeometry* - the specified child geometry
|
|
Packit |
b099d7 |
* col_width : int - a specified width for the column
|
|
Packit |
b099d7 |
* col_height : int - a specified height for the column
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
VerticalLayout(XmColumnWidget cw, Widget child, XtWidgetGeometry *child_size,
|
|
Packit |
b099d7 |
int col_width, int col_height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
WidgetList kids = cw->composite.children, kid;
|
|
Packit |
b099d7 |
Widget label;
|
|
Packit |
b099d7 |
Cardinal i, kidCnt = cw->composite.num_children, j;
|
|
Packit |
b099d7 |
Position x, y;
|
|
Packit |
b099d7 |
int cWidth, cMaxWidth, cMinWidth, cHeight, cBorder, cbWidth, cbHeight,
|
|
Packit |
b099d7 |
lWidth, lHeight, cnt, hExtra, hEach =0 , hLeft = 0, valid, space;
|
|
Packit |
b099d7 |
Dimension width, height;
|
|
Packit |
b099d7 |
Boolean change, stretch;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( col_width < 0 ) col_width = XtWidth(cw);
|
|
Packit |
b099d7 |
if( col_height < 0 ) col_height = XtHeight(cw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CalcSize(cw, NULL, NULL, False, &width, &height);
|
|
Packit |
b099d7 |
for( i = 0, kid = kids, lWidth = 0, cMinWidth = 0, cMaxWidth = 0, cnt = 0, valid = 0,
|
|
Packit |
b099d7 |
space = 0; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->position.x = XiC(*kid)->position.y = 0;
|
|
Packit |
b099d7 |
if( *kid == child )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->position.width = child_size->width;
|
|
Packit |
b099d7 |
XiC(*kid)->position.height = child_size->height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->position.width = XiC(*kid)->request_width;
|
|
Packit |
b099d7 |
XiC(*kid)->position.height = XiC(*kid)->request_height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
valid++;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( *kid == child )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cbWidth = child_size->width + 2*child_size->border_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cbWidth = XiC(*kid)->request_width + 2*XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( cMinWidth == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cMinWidth = cbWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( cbWidth < cMinWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cMinWidth = cbWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( cMaxWidth == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cMaxWidth = cbWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( cbWidth > cMaxWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cMaxWidth = cbWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(*kid)->stretchable ) ++cnt;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( !XiC(*kid)->show_label ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
space = XmColumn_label_spacing(cw);
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( child == label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (int)child_size->width > lWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = child_size->width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (int)XiC(label)->request_width > lWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = XiC(label)->request_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
x = cw->manager.shadow_thickness + BBPart(cw)->margin_width;
|
|
Packit |
b099d7 |
if( valid > 0 && (x + lWidth + space + cMaxWidth + x > col_width ) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int have = (col_width - 2 * x),
|
|
Packit |
b099d7 |
want = lWidth + space + cMaxWidth,
|
|
Packit |
b099d7 |
diff = want - have;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Try to subtract from the label space first; if we can't do it (it
|
|
Packit |
b099d7 |
** may be 0 right now),
|
|
Packit |
b099d7 |
** then the data fields will shrink until they are the size of the
|
|
Packit |
b099d7 |
** smallest field, and after that the labels will shrink.
|
|
Packit |
b099d7 |
** The shadow and margin aren't affected.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( space - diff > 1)
|
|
Packit |
b099d7 |
space -= diff;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (0 != space)
|
|
Packit |
b099d7 |
space = 1;
|
|
Packit |
b099d7 |
want = lWidth + space + cMinWidth;
|
|
Packit |
b099d7 |
diff = want - have;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (diff > 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( lWidth - diff > 1 )
|
|
Packit |
b099d7 |
lWidth -= diff;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
lWidth = 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Calculating the widths for the various kids is a one shot, so lets
|
|
Packit |
b099d7 |
* first walk through the kids and calculate all the width.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
for( kid = kids, i = 0; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
cBorder = XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
if (LayoutIsRtoLM(cw))
|
|
Packit |
b099d7 |
XiC(label)->position.x = col_width - x - lWidth;
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XiC(label)->position.x = x;
|
|
Packit |
b099d7 |
XiC(label)->position.width = lWidth;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* cbWidth is whatever is left over */
|
|
Packit |
b099d7 |
cbWidth = col_width -
|
|
Packit |
b099d7 |
((int)cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
(int)BBPart(cw)->margin_width +
|
|
Packit |
b099d7 |
x + lWidth + space);
|
|
Packit |
b099d7 |
if( cbWidth < 1 ) cbWidth = 1;
|
|
Packit |
b099d7 |
cWidth = cbWidth - 2*cBorder;
|
|
Packit |
b099d7 |
if( cWidth < 1 ) cWidth = 1;
|
|
Packit |
b099d7 |
/* cWidth is now the value to use for XmFILL_FLUSH */
|
|
Packit |
b099d7 |
if( XiFill(*kid) == XmFILL_RAGGED )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( child == *kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (int) child_size->width < cWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cWidth = child_size->width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( (int) XiC(*kid)->request_width < cWidth )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cWidth = XiC(*kid)->request_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (LayoutIsRtoLM(cw))
|
|
Packit |
b099d7 |
XiC(*kid)->position.x = col_width - (x + lWidth + space + cWidth);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
XiC(*kid)->position.x = x + lWidth + space;
|
|
Packit |
b099d7 |
XiC(*kid)->position.width = cWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Now that we have calculated the x position and the width of
|
|
Packit |
b099d7 |
* each of the children lets now try to calculate the y position
|
|
Packit |
b099d7 |
* and the height.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
space = XmColumn_item_spacing(cw);
|
|
Packit |
b099d7 |
hExtra = col_height - height;
|
|
Packit |
b099d7 |
/* but first make a quick check on reducing the itemSpacing */
|
|
Packit |
b099d7 |
if (hExtra < 0)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (valid)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int totalItemSpacing = (valid - 1) * space;
|
|
Packit |
b099d7 |
if (totalItemSpacing + hExtra > 0)
|
|
Packit |
b099d7 |
space = (totalItemSpacing + hExtra)/(valid-1);
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
space = 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
hExtra = 0; /* or very close to it */
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
for( j = 0; j < 2; ++j )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
do {
|
|
Packit |
b099d7 |
y = cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(cw)->margin_height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( j != 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cnt = valid;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cnt > 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
hEach = hExtra / cnt;
|
|
Packit |
b099d7 |
hLeft = hExtra % cnt;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( cnt == 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
hEach = 0;
|
|
Packit |
b099d7 |
hLeft = hExtra;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
change = False;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for( kid = kids, i = 0; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
cHeight = XiC(*kid)->position.height;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( j == 0 || hExtra > 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
stretch = XiC(*kid)->stretchable;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
stretch = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( stretch )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( hExtra < 0 && cHeight > 1 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( hEach != 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int tmp = -hEach;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
change = True;
|
|
Packit |
b099d7 |
if( tmp < cHeight )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
hExtra += tmp;
|
|
Packit |
b099d7 |
cHeight -= tmp;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
tmp = cHeight - 1;
|
|
Packit |
b099d7 |
hExtra += tmp;
|
|
Packit |
b099d7 |
cHeight = 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( hLeft != 0 && cHeight > 1 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
change = True;
|
|
Packit |
b099d7 |
hLeft++;
|
|
Packit |
b099d7 |
hExtra++;
|
|
Packit |
b099d7 |
cHeight--;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if( hExtra > 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
change = True;
|
|
Packit |
b099d7 |
cHeight += hEach;
|
|
Packit |
b099d7 |
hExtra -= hEach;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( hLeft > 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cHeight++;
|
|
Packit |
b099d7 |
hLeft--;
|
|
Packit |
b099d7 |
hExtra--;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cHeight < 1 ) cHeight = 1;
|
|
Packit |
b099d7 |
if( child == *kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = child_size->border_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(*kid)->show_label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( child == label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lHeight = child_size->height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lHeight = XiC(label)->request_height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lHeight = 1;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
cbHeight = cHeight + 2 * cBorder;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( cbHeight > lHeight || stretch )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lHeight = cbHeight;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cHeight = lHeight - 2*cBorder;
|
|
Packit |
b099d7 |
if( cHeight < 1 ) cHeight = 1;
|
|
Packit |
b099d7 |
cbHeight = cHeight + 2*cBorder;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XiC(label)->position.y = y;
|
|
Packit |
b099d7 |
XiC(label)->position.height = lHeight;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XiC(*kid)->position.y = y;
|
|
Packit |
b099d7 |
XiC(*kid)->position.height = cHeight;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( child == *kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = child_size->border_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
y += XiC(*kid)->position.height + (2 * cBorder) + space;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
} while( hExtra != 0 && change );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* If we get here and we still have some extra space we want to see
|
|
Packit |
b099d7 |
* if the user wants to distribute the space between children or
|
|
Packit |
b099d7 |
* not.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if( XmColumn_distribution(cw) == XmDISTRIBUTE_SPREAD &&
|
|
Packit |
b099d7 |
hExtra > 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( valid == 1 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
hEach = hExtra / 2;
|
|
Packit |
b099d7 |
XiC(*kids)->position.y += hEach;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( valid > 1 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
valid--;
|
|
Packit |
b099d7 |
hEach = hExtra / valid;
|
|
Packit |
b099d7 |
hLeft = hExtra % valid;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
hEach = 0;
|
|
Packit |
b099d7 |
hLeft = hExtra;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
y = cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(cw)->margin_height;
|
|
Packit |
b099d7 |
for( i = 0, kid = kids; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( i > 0 )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(*kid)->position.y = y;
|
|
Packit |
b099d7 |
XiC(XiC(*kid)->label_widget)->position.y = y;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
space = XmColumn_item_spacing(cw) + hEach;
|
|
Packit |
b099d7 |
if( hLeft > 0 ) {
|
|
Packit |
b099d7 |
space++;
|
|
Packit |
b099d7 |
hLeft--;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( child == *kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = child_size->border_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
y += XiC(*kid)->position.height + (2 * cBorder) +
|
|
Packit |
b099d7 |
space;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( child == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for( i = 0, kid = kids; i < kidCnt; ++i, ++kid )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if( !XiValidChild(*kid) ) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
label = XiC(*kid)->label_widget;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if( XiC(*kid)->show_label )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtConfigureWidget(label, XiC(label)->position.x,
|
|
Packit |
b099d7 |
XiC(label)->position.y,
|
|
Packit |
b099d7 |
XiC(label)->position.width,
|
|
Packit |
b099d7 |
XiC(*kid)->position.height, 0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtConfigureWidget(*kid, XiC(*kid)->position.x,
|
|
Packit |
b099d7 |
XiC(*kid)->position.y,
|
|
Packit |
b099d7 |
XiC(*kid)->position.width,
|
|
Packit |
b099d7 |
XiC(*kid)->position.height,
|
|
Packit |
b099d7 |
XtBorderWidth(*kid));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* VerifyConstraint(request, current, set)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function verifies the values for the Column child's constraint
|
|
Packit |
b099d7 |
* resources in "set" resetting them to the previous or default
|
|
Packit |
b099d7 |
* values if an invalid resource value was set.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* request : Widget - the requested setting for the widget
|
|
Packit |
b099d7 |
* current : Widget - the current setting for the widget
|
|
Packit |
b099d7 |
* set : Widget - the setting for the widget
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
VerifyConstraints(Widget request, Widget current, Widget set)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean reset;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#if 0 /* POSITION HANDLING */
|
|
Packit |
b099d7 |
reset = False;
|
|
Packit |
b099d7 |
switch( XiC(set)->label_position )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_CENTER:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_LEFT:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_RIGHT:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_TOP:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_BOTTOM:
|
|
Packit |
b099d7 |
case XiLABEL_POSITION_UNSPECIFIED:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning(set,
|
|
Packit |
b099d7 |
"An illegal resource value was assigned to the resource XmNentryLabelPosition");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( reset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(set)->label_position = (current != NULL
|
|
Packit |
b099d7 |
? XiC(current)->label_position
|
|
Packit |
b099d7 |
: XiLABEL_POSITION_UNSPECIFIED);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
reset = False;
|
|
Packit |
b099d7 |
switch( XiC(set)->label_alignment )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmALIGNMENT_BEGINNING:
|
|
Packit |
b099d7 |
case XmALIGNMENT_CENTER:
|
|
Packit |
b099d7 |
case XmALIGNMENT_END:
|
|
Packit |
b099d7 |
case XmALIGNMENT_UNSPECIFIED:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning(set,
|
|
Packit |
b099d7 |
"An illegal resource value was assigned to the resource XmNentryLabelAlignment");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( reset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(set)->label_alignment = (current != NULL
|
|
Packit |
b099d7 |
? XiC(current)->label_alignment
|
|
Packit |
b099d7 |
: XmALIGNMENT_UNSPECIFIED);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
reset = False;
|
|
Packit |
b099d7 |
switch( XiC(set)->fill_style )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case XmFILL_UNSPECIFIED:
|
|
Packit |
b099d7 |
case XmFILL_FLUSH:
|
|
Packit |
b099d7 |
case XmFILL_RAGGED:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
XmeWarning(set,
|
|
Packit |
b099d7 |
"An illegal resource value was assigned to the resource XmNfillStyle");
|
|
Packit |
b099d7 |
reset = True;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
if( reset )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XiC(set)->fill_style = (current != NULL
|
|
Packit |
b099d7 |
? XiC(current)->fill_style
|
|
Packit |
b099d7 |
: XmFILL_UNSPECIFIED);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* CalcSize(cw, child, child_size, query, width, height)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function calculates and returns the prefered size for the
|
|
Packit |
b099d7 |
* column.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* cw : XmColumnWidget - the column widget
|
|
Packit |
b099d7 |
* child : Widget - a widget whose geometry is specified
|
|
Packit |
b099d7 |
* child_size : XtWidgetGeometry* - the specified child's geometry
|
|
Packit |
b099d7 |
* query : Boolean - query the kids?
|
|
Packit |
b099d7 |
* width : Dimension* - return the desired width
|
|
Packit |
b099d7 |
* height : Dimension* - return the desired height
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CalcSize(XmColumnWidget cw, Widget child, XtWidgetGeometry *child_size,
|
|
Packit |
b099d7 |
Boolean query, Dimension *width, Dimension *height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int _width = 0, _height = 0, cnt = 0;
|
|
Packit |
b099d7 |
Cardinal i, kidCnt = cw->composite.num_children;
|
|
Packit |
b099d7 |
WidgetList kid, kids = cw->composite.children;
|
|
Packit |
b099d7 |
Widget label;
|
|
Packit |
b099d7 |
Dimension cWidth, cHeight, cBorder, cSum = 0, lWidth, lHeight;
|
|
Packit |
b099d7 |
Dimension lSum = 0, space = 0, hSumSpace = 0;
|
|
Packit |
b099d7 |
XtWidgetGeometry wants;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for (i = 0, kid = kids; i < kidCnt; ++i, ++kid)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (!XiValidChild(*kid)) continue;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XiC(*kid)->show_label)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
space = XmColumn_label_spacing(cw);
|
|
Packit |
b099d7 |
hSumSpace += XmColumn_label_spacing(cw);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Check for the child widgets preferred geometry.
|
|
Packit |
b099d7 |
* if the prefered geometry is greater than the requested
|
|
Packit |
b099d7 |
* geometry, then set the query geometry to "True".
|
|
Packit |
b099d7 |
* Doing this, column widget will take care of improper
|
|
Packit |
b099d7 |
* size settings on the compound children widgets (CR03821)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
query = False;
|
|
Packit |
b099d7 |
XtQueryGeometry(*kid, NULL, &wants);
|
|
Packit |
b099d7 |
if (wants.width > XiC(*kid)->request_width || \
|
|
Packit |
b099d7 |
wants.height > XiC(*kid)->request_height)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
query = True;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (*kid == child && child_size != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cWidth = child_size->width;
|
|
Packit |
b099d7 |
cHeight = child_size->height;
|
|
Packit |
b099d7 |
cBorder = child_size->border_width;
|
|
Packit |
b099d7 |
} else if (query)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtQueryGeometry(*kid, NULL, &wants);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wants.request_mode & CWWidth)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cWidth = wants.width;
|
|
Packit |
b099d7 |
XiC(*kid)->request_width = wants.width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cWidth = XiC(*kid)->request_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wants.request_mode & CWHeight)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cHeight = wants.height;
|
|
Packit |
b099d7 |
XiC(*kid)->request_height = wants.height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cHeight = XiC(*kid)->request_height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wants.request_mode & CWBorderWidth)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = wants.border_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cBorder = XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
cWidth = XiC(*kid)->request_width;
|
|
Packit |
b099d7 |
cHeight = XiC(*kid)->request_height;
|
|
Packit |
b099d7 |
cBorder = XtBorderWidth(*kid);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cWidth += (2 * cBorder);
|
|
Packit |
b099d7 |
cHeight += (2 * cBorder);
|
|
Packit |
b099d7 |
if (XtIsManaged((label = XiC(*kid)->label_widget)))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (label == child && child_size != NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = child_size->width;
|
|
Packit |
b099d7 |
lHeight = child_size->height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else if (query)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XtQueryGeometry(label, NULL, &wants);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wants.request_mode & CWWidth)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = wants.width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = XiC(label)->request_width;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (wants.request_mode & CWHeight)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lHeight = wants.height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lHeight = XiC(label)->request_height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = XiC(label)->request_width;
|
|
Packit |
b099d7 |
lHeight = XiC(label)->request_height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
lWidth = lHeight = 0;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmColumn_orientation(cw) == XmVERTICAL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (lWidth > lSum) lSum = lWidth;
|
|
Packit |
b099d7 |
if (cWidth > cSum) cSum = cWidth;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_height += (lHeight > cHeight ? lHeight : cHeight);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else /* XmHORIZONTAL Layout */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/* Choose the maximum height */
|
|
Packit |
b099d7 |
if (_height < (int)cHeight) _height = cHeight;
|
|
Packit |
b099d7 |
if (_height < (int)lHeight) _height = lHeight;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_width += lWidth + cWidth;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
cnt++;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (cnt > 1) --cnt;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (XmColumn_orientation(cw) == XmVERTICAL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_width = lSum + cSum + space +
|
|
Packit |
b099d7 |
2 * (cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(cw)->margin_width);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_height += (cnt * XmColumn_item_spacing(cw) +
|
|
Packit |
b099d7 |
2 * (cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(cw)->margin_height));
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
else /* XmHORIZONTAL Layout */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_width += (hSumSpace +
|
|
Packit |
b099d7 |
2 * (cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(cw)->margin_width)) + cnt*XmColumn_item_spacing(cw);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_height += 2 * (cw->manager.shadow_thickness +
|
|
Packit |
b099d7 |
BBPart(cw)->margin_height);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (_width < 1) _width = 1;
|
|
Packit |
b099d7 |
if (_height < 1) _height = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (width != NULL) *width = _width;
|
|
Packit |
b099d7 |
if (height != NULL) *height = _height;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* CompareGeometry(geom1, geom2)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This function compares to XtWidgetGeometry structure to see if
|
|
Packit |
b099d7 |
* the are equal.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* geom1 : XtWidgetGeometry* - a geometry spec
|
|
Packit |
b099d7 |
* geom2 : XtWidgetGeometry* - another geometry spec
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the geometry structures are equal, else False
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CompareGeometry(XtWidgetGeometry *geom1, XtWidgetGeometry *geom2)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = (geom1 == NULL || geom2 == NULL) ||
|
|
Packit |
b099d7 |
(geom1->request_mode != geom2->request_mode) ||
|
|
Packit |
b099d7 |
(geom1->request_mode & CWX && geom1->x != geom2->x) ||
|
|
Packit |
b099d7 |
(geom1->request_mode & CWY && geom1->y != geom2->y) ||
|
|
Packit |
b099d7 |
(geom1->request_mode & CWWidth && geom1->width != geom2->width) ||
|
|
Packit |
b099d7 |
(geom1->request_mode & CWHeight && geom1->height != geom2->height) ||
|
|
Packit |
b099d7 |
(geom1->request_mode & CWBorderWidth &&
|
|
Packit |
b099d7 |
geom1->border_width != geom2->border_width);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( !result );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* CompareGeometryToWidget(geom, widget)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* Compares a geometry spec to a widget's actual geometry.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* geom : XtWidgetGeometry* - the geometry
|
|
Packit |
b099d7 |
* widget : Widget - the widget
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Boolean - True if the widget equals the geom spec, else False.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
static Boolean
|
|
Packit |
b099d7 |
CompareGeometryToWidget(XtWidgetGeometry *geom, Widget widget)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Boolean result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = (geom == NULL || widget == NULL) ||
|
|
Packit |
b099d7 |
(geom->request_mode == 0) ||
|
|
Packit |
b099d7 |
(geom->request_mode & CWX && geom->x != XtX(widget)) ||
|
|
Packit |
b099d7 |
(geom->request_mode & CWY && geom->y != XtY(widget)) ||
|
|
Packit |
b099d7 |
(geom->request_mode & CWWidth && geom->width != XtWidth(widget)) ||
|
|
Packit |
b099d7 |
(geom->request_mode & CWHeight &&
|
|
Packit |
b099d7 |
geom->height != XtHeight(widget)) ||
|
|
Packit |
b099d7 |
(geom->request_mode & CWBorderWidth &&
|
|
Packit |
b099d7 |
geom->border_width != XtBorderWidth(widget));
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return( !result );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* XmRCallProc routine for checking label_font_list before setting it to NULL
|
|
Packit |
b099d7 |
* If constrainit's "check_set_render_table" is True, then function has
|
|
Packit |
b099d7 |
* been called twice on same widget, thus resource needs to be set NULL,
|
|
Packit |
b099d7 |
* otherwise leave it alone.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CheckSetEntryLabelRenderTable(Widget wid, int offs, XrmValue *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmColumnConstraintPart* cc = XiC(wid);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Check if been here before */
|
|
Packit |
b099d7 |
if (cc->check_set_render_table)
|
|
Packit |
b099d7 |
value->addr = NULL;
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
cc->check_set_render_table = True;
|
|
Packit |
b099d7 |
value->addr = (char*)&(cc->label_font_list);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* XmRCallProc routine for checking label_font_list before setting it to NULL
|
|
Packit |
b099d7 |
* If column's "check_set_render_table" is True, then function has
|
|
Packit |
b099d7 |
* been called twice on same widget, thus resource needs to be set NULL,
|
|
Packit |
b099d7 |
* otherwise leave it alone.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
CheckSetDefaultEntryLabelRenderTable(Widget wid, int offs, XrmValue *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XmBulletinBoardPart* bb = BBPart(wid);
|
|
Packit |
b099d7 |
XmColumnWidget c = (XmColumnWidget)wid;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* Check if been here before */
|
|
Packit |
b099d7 |
if (c->column.check_set_render_table)
|
|
Packit |
b099d7 |
value->addr = NULL;
|
|
Packit |
b099d7 |
else {
|
|
Packit |
b099d7 |
c->column.check_set_render_table = True;
|
|
Packit |
b099d7 |
value->addr = (char*)&(bb->label_font_list);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* XmColumnLabelDestroyedCallback(widget, client, cbdata)
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* This callback is called when a label that is associated with a field
|
|
Packit |
b099d7 |
* is destoyed. The purpose of this callback is to inform the column
|
|
Packit |
b099d7 |
* when this happens to it does not try to do bad things.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* widget : Widget - the widget being destroyed
|
|
Packit |
b099d7 |
* client : XtPointer - the widget that this label is associated with
|
|
Packit |
b099d7 |
* cbdata : XtPointer - unused.
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* None.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void
|
|
Packit |
b099d7 |
XmColumnLabelDestroyedCallback(Widget widget, XtPointer client,
|
|
Packit |
b099d7 |
XtPointer cbdata)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget field = (Widget) client;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XiC(field)->label_widget = NULL;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* ARGSUSED */
|
|
Packit |
b099d7 |
static void Get_entryLabelString (Widget widget, int offset, XtArgVal *value)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
(*value) = (XtArgVal) XmStringCopy(XiC(widget)->label_string);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function:
|
|
Packit |
b099d7 |
* XmCreateColumn(parent, name, arg_list, arg_cnt);
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* Creates an unmanaged instance of an XmColumn and returns its
|
|
Packit |
b099d7 |
* widget id.
|
|
Packit |
b099d7 |
* Input:
|
|
Packit |
b099d7 |
* parent : Widget - the parent of the new instance.
|
|
Packit |
b099d7 |
* name : String - the name of the new instance.
|
|
Packit |
b099d7 |
* arg_list : ArgList - the arguments to create the instance with.
|
|
Packit |
b099d7 |
* arg_cnt : Cardinal - the number of arguments in the list
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Output:
|
|
Packit |
b099d7 |
* Widget - the widget id of the new instance.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmCreateColumn(Widget parent, String name, ArgList arg_list, Cardinal arg_cnt)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
return( XtCreateWidget(name, xmColumnWidgetClass, parent, arg_list,
|
|
Packit |
b099d7 |
arg_cnt) );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmVaCreateColumn(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
char *name,
|
|
Packit |
b099d7 |
...)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
register Widget w;
|
|
Packit |
b099d7 |
va_list var;
|
|
Packit |
b099d7 |
int count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var,name);
|
|
Packit |
b099d7 |
count = XmeCountVaListSimple(var);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
w = XmeVLCreateWidget(name,
|
|
Packit |
b099d7 |
xmColumnWidgetClass,
|
|
Packit |
b099d7 |
parent, False,
|
|
Packit |
b099d7 |
var, count);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
return w;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Widget
|
|
Packit |
b099d7 |
XmVaCreateManagedColumn(
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
char *name,
|
|
Packit |
b099d7 |
...)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget w = NULL;
|
|
Packit |
b099d7 |
va_list var;
|
|
Packit |
b099d7 |
int count;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
count = XmeCountVaListSimple(var);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Va_start(var, name);
|
|
Packit |
b099d7 |
w = XmeVLCreateWidget(name,
|
|
Packit |
b099d7 |
xmColumnWidgetClass,
|
|
Packit |
b099d7 |
parent, True,
|
|
Packit |
b099d7 |
var, count);
|
|
Packit |
b099d7 |
va_end(var);
|
|
Packit |
b099d7 |
return w;
|
|
Packit |
b099d7 |
}
|