/*
* Motif
*
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these librararies and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*
*/
#ifndef _XmHierarchyP_h
#define _XmHierarchyP_h
#if defined(VMS) || defined(__VMS)
#include <X11/apienvset.h>
#endif
/************************************************************
* INCLUDE FILES
*************************************************************/
#include <Xm/ManagerP.h>
#include <Xm/ExtP.h>
#include <Xm/Hierarchy.h>
/************************************************************
* TYPEDEFS AND DEFINES
*************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#define IS_MAPPED (1L << 1)
#define IS_COMPRESSED (1L << 2)
#define PARENT_GONE (1L << 3)
#define IS_SELECTED (1L << 4)
/************************************************************
* MACROS
*************************************************************/
/************************************************************
* GLOBAL DECLARATIONS
*************************************************************/
typedef struct _HierNodeInfo {
/*
* Public (Resource) data.
*/
XmHierarchyNodeState state; /* State of the node. */
Widget parent; /* parent of this child. */
Widget insert_before; /* Sibling to insert this node before;
NULL will place it at the end. */
Pixmap open_folder, close_folder; /* Images for open/close buttons. */
/*
* Private data.
*/
Widget widget; /* Back pointer to this node's widget. */
Widget open_close_button; /* The open or close button. */
struct _HierarchyConstraintRec ** children; /* norm children. */
Cardinal num_children; /* number of each type of children. */
Cardinal alloc_attrs, alloc; /* amount of allocated space for each */
unsigned char status; /* 8 status bits. */
} HierNodeInfo;
typedef struct _HierarchyConstraintRec {
XmManagerConstraintPart manager;
HierNodeInfo hierarchy;
} HierarchyConstraintRec, XmHierarchyConstraintRec, *HierarchyConstraints;
typedef void (*XmHierarchyNodeProc)(HierarchyConstraints);
typedef void (*XmHierarchyExtraNodeProc)(Widget, HierarchyConstraints);
typedef void (*XmHierarchyBuildTableProc)(Widget,
HierarchyConstraints, Cardinal *);
typedef void (*XmHierarchyResetButtonProc)(Widget, HierarchyConstraints);
typedef struct {
/* Class function for changing node state. */
XmHierarchyNodeProc change_node_state;
/* map or unmap a given node. */
XmHierarchyNodeProc map_node;
XmHierarchyNodeProc unmap_node;
/* Unmaps all the extra nodes. */
XmHierarchyExtraNodeProc unmap_all_extra_nodes;
/* Builds the node table. */
XmHierarchyBuildTableProc build_node_table;
/* Correctly sets the state of the open/close button. */
XmHierarchyResetButtonProc reset_open_close_button;
/* Toggles state of a node. */
XtCallbackProc toggle_node_state;
/* Just in case we need it later. */
XtPointer extension;
} HierarchyClassPart;
typedef struct _XmHierarchyClassRec {
CoreClassPart core_class;
CompositeClassPart composite_class;
ConstraintClassPart constraint_class;
XmManagerClassPart manager_class;
HierarchyClassPart hierarchy_class;
} XmHierarchyClassRec;
externalref XmHierarchyClassRec xmHierarchyClassRec;
typedef struct _HierarchyPart {
/* resources */
Boolean auto_close; /* Auto-close children when parent is closed?*/
Boolean refigure_mode; /* Do refigures? */
Dimension h_margin; /* The horizontal margin. */
Dimension v_margin; /* The vertical margin. */
Pixmap open_folder, close_folder; /* Images for open/close buttons. */
XtCallbackList node_state_callback; /* Called when the node button is
clicked */
XtCallbackList node_state_changed_callback; /* Called when the node state
changes */
XtCallbackList node_state_beg_end_callback; /* Called when beginning
or ending a set of node
state changes */
/* private state */
HierarchyConstraintRec ** node_table;
HierarchyConstraints top_node;
Cardinal num_nodes, alloc_nodes;
Pixmap def_open_folder, def_close_folder; /* Default folder button Images*/
XtWorkProcId work_proc_id; /* work proc id for the move nodes wp */
} HierarchyPart;
typedef struct _XmHierarchyRec {
CorePart core;
CompositePart composite;
ConstraintPart constraint;
XmManagerPart manager;
HierarchyPart hierarchy;
} XmHierarchyRec;
/*
* These are necessary because the XmResolvePartOffset macros assume a
* certain naming convention
*/
typedef HierarchyPart XmHierarchyPart;
typedef HierNodeInfo XmHierarchyConstraintPart;
#define XmHierarchy_auto_close(w) (((XmHierarchyWidget)(w))->hierarchy.auto_close)
#define XmHierarchy_refigure_mode(w) (((XmHierarchyWidget)(w))->hierarchy.refigure_mode)
#define XmHierarchy_h_margin(w) (((XmHierarchyWidget)(w))->hierarchy.h_margin)
#define XmHierarchy_v_margin(w) (((XmHierarchyWidget)(w))->hierarchy.v_margin)
#define XmHierarchy_open_folder(w) (((XmHierarchyWidget)(w))->hierarchy.open_folder)
#define XmHierarchy_close_folder(w) (((XmHierarchyWidget)(w))->hierarchy.close_folder)
#define XmHierarchy_node_state_callback(w) (((XmHierarchyWidget)(w))->hierarchy.node_state_callback)
#define XmHierarchy_node_state_changed_callback(w) (((XmHierarchyWidget)(w))->hierarchy.node_state_changed_callback)
#define XmHierarchy_node_state_beg_end_callback(w) (((XmHierarchyWidget)(w))->hierarchy.node_state_beg_end_callback)
#define XmHierarchy_node_table(w) (((XmHierarchyWidget)(w))->hierarchy.node_table)
#define XmHierarchy_top_node(w) (((XmHierarchyWidget)(w))->hierarchy.top_node)
#define XmHierarchy_num_nodes(w) (((XmHierarchyWidget)(w))->hierarchy.num_nodes)
#define XmHierarchy_alloc_nodes(w) (((XmHierarchyWidget)(w))->hierarchy.alloc_nodes)
#define XmHierarchy_def_open_folder(w) (((XmHierarchyWidget)(w))->hierarchy.def_open_folder)
#define XmHierarchy_def_close_folder(w) (((XmHierarchyWidget)(w))->hierarchy.def_close_folder)
#define XmHierarchy_work_proc_id(w) (((XmHierarchyWidget)(w))->hierarchy.work_proc_id)
#define XmHierarchyC_state(constraints) ((constraints)->hierarchy.state)
#define XmHierarchyC_parent(constraints) ((constraints)->hierarchy.parent)
#define XmHierarchyC_insert_before(constraints) ((constraints)->hierarchy.insert_before)
#define XmHierarchyC_open_folder(constraints) ((constraints)->hierarchy.open_folder)
#define XmHierarchyC_close_folder(constraints) ((constraints)->hierarchy.close_folder)
#define XmHierarchyC_widget(constraints) ((constraints)->hierarchy.widget)
#define XmHierarchyC_open_close_button(constraints) ((constraints)->hierarchy.open_close_button)
#define XmHierarchyC_children(constraints) ((constraints)->hierarchy.children)
#define XmHierarchyC_num_children(constraints) ((constraints)->hierarchy.num_children)
#define XmHierarchyC_alloc_attrs(constraints) ((constraints)->hierarchy.alloc_attrs)
#define XmHierarchyC_alloc(constraints) ((constraints)->hierarchy.alloc)
#define XmHierarchyC_status(constraints) ((constraints)->hierarchy.status)
#define XtInheritChangeNodeState ((XmHierarchyNodeProc)_XtInherit)
#define XtInheritUnmapAllExtraNodes ((XmHierarchyExtraNodeProc)_XtInherit)
#define XtInheritUnmapNode ((XmHierarchyNodeProc)_XtInherit)
#define XtInheritMapNode ((XmHierarchyNodeProc)_XtInherit)
#define XtInheritBuildNodeTable ((XmHierarchyBuildTableProc)_XtInherit)
#define XtInheritResetOpenCloseButton ((XmHierarchyResetButtonProc)_XtInherit)
#define XtInheritToggleNodeState ((XtCallbackProc)_XtInherit)
/************************************************************
* EXTERNAL DECLARATIONS
*************************************************************/
/************************************************************
* STATIC DECLARATIONS
*************************************************************/
#ifdef __cplusplus
} /* Closes scope of 'extern "C"' declaration */
#endif
#if defined(VMS) || defined(__VMS)
#include <X11/apienvrst.h>
#endif
#endif /* _HierarchyP_h */