|
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 |
* HISTORY
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: Mrmappl.c /main/17 1996/11/13 13:59:58 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Hewlett-Packard Company *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 International Business Machines Corp. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Sun Microsystems, Inc. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Novell, Inc. *
|
|
Packit |
b099d7 |
* (c) Copyright 1989, 1990, 1996 Digital Equipment Corporation. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 FUJITSU LIMITED. *
|
|
Packit |
b099d7 |
* (c) Copyright 1996 Hitachi. *
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
* FACILITY:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* UIL Resource Manager (URM):
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* ABSTRACT:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These are the top-level routines in URM normally accessible to
|
|
Packit |
b099d7 |
* and used by an application at runtime to access URM facilities.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* INCLUDE FILES
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <Mrm/MrmAppl.h>
|
|
Packit |
b099d7 |
#include <Mrm/Mrm.h>
|
|
Packit |
b099d7 |
#include "MrmMsgI.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* TABLE OF CONTENTS
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmOpenHierarchy Open a hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmOpenHierarchyPerDisplay Open a hierarchy taking display arg
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmOpenHierarchyFromBuffer Open a hierarchy from a memory buffer
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmCloseHierarchy Close an open hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmRegisterClass Register a widget class
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchInterfaceModule Fetch widgets in an interface module
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchWidget Fetch a widget
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchWidgetOverride Fetch a widget, overriding name, args
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchSetValues Do SetValues from UID literals
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine allocates a hierarchy descriptor, and opens
|
|
Packit |
b099d7 |
* all the IDB files in the hierarchy. It initializes the
|
|
Packit |
b099d7 |
* optimized search lists in the hierarchy from the open files.
|
|
Packit |
b099d7 |
* All files are closed if there are any errors.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* num_files The number of files in the name list
|
|
Packit |
b099d7 |
* name_list A list of the file names
|
|
Packit |
b099d7 |
* os_ext_list A list of system-dependent ancillary
|
|
Packit |
b099d7 |
* structures corresponding to the files.
|
|
Packit |
b099d7 |
* This parameter may be NULL.
|
|
Packit |
b099d7 |
* hierarchy_id_return To return the hierarchy id
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
* Others see UrmIdbOpenFileRead
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmOpenHierarchy (
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int num_files,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
MrmCount num_files,
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
String *name_list,
|
|
Packit |
b099d7 |
MrmOsOpenParamPtr *os_ext_list,
|
|
Packit |
b099d7 |
MrmHierarchy *hierarchy_id_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
result = Urm__OpenHierarchy
|
|
Packit |
b099d7 |
(num_files, name_list, os_ext_list, hierarchy_id_return, FALSE, NULL);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine allocates a hierarchy descriptor, and opens
|
|
Packit |
b099d7 |
* all the IDB files in the hierarchy. It initializes the
|
|
Packit |
b099d7 |
* optimized search lists in the hierarchy from the open files.
|
|
Packit |
b099d7 |
* All files are closed if there are any errors.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* display The Display to be passed to XtResolvePathname
|
|
Packit |
b099d7 |
* num_files The number of files in the name list
|
|
Packit |
b099d7 |
* name_list A list of the file names
|
|
Packit |
b099d7 |
* os_ext_list A list of system-dependent ancillary
|
|
Packit |
b099d7 |
* structures corresponding to the files.
|
|
Packit |
b099d7 |
* This parameter may be NULL.
|
|
Packit |
b099d7 |
* hierarchy_id_return To return the hierarchy id
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
* Others see UrmIdbOpenFileRead
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmOpenHierarchyPerDisplay (Display *display,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int num_files,
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
MrmCount num_files,
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
String *name_list,
|
|
Packit |
b099d7 |
MrmOsOpenParamPtr *os_ext_list,
|
|
Packit |
b099d7 |
MrmHierarchy *hierarchy_id_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
MrmOsOpenParam os_data;
|
|
Packit |
b099d7 |
MrmOsOpenParamPtr new_os_ext_list = &os_data;
|
|
Packit |
b099d7 |
Cardinal result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (os_ext_list == NULL)
|
|
Packit |
b099d7 |
os_ext_list = (MrmOsOpenParamPtr *)&new_os_ext_list;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
(*os_ext_list)->display = display;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = Urm__OpenHierarchy(num_files, name_list, os_ext_list,
|
|
Packit |
b099d7 |
hierarchy_id_return, FALSE, NULL);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmOpenHierarcyFromBuffer opens a buffer containing the
|
|
Packit |
b099d7 |
* memory image of a UID file.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id ID of an open URM database hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmOpenHierarchyFromBuffer (unsigned char *uid_buffer,
|
|
Packit |
b099d7 |
MrmHierarchy *hierarchy_id_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
result = Urm__OpenHierarchy((MrmCount) 1, NULL, NULL,
|
|
Packit |
b099d7 |
hierarchy_id_return, TRUE, uid_buffer);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmCloseHierarchy closes a URM search hierarchy.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id ID of an open URM database hierarchy
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmCloseHierarchy (MrmHierarchy hierarchy_id)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
result = Urm__CloseHierarchy (hierarchy_id);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine registers a vector of names and associated values
|
|
Packit |
b099d7 |
* for access in URM. The values may be callback routines, pointers
|
|
Packit |
b099d7 |
* to user-defined data, or any other values. The information provided
|
|
Packit |
b099d7 |
* is used exactly as registered callback information is used.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The names in the list are case-sensitive, as usual. The list may
|
|
Packit |
b099d7 |
* either ordered or unordered; this routine will detect lexicographic
|
|
Packit |
b099d7 |
* ordering if it exists, and exploit it.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* For details on callbacks in URM, consult XmRegisterMRMCallbacks.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* reglist A list of name/value pairs for the names to
|
|
Packit |
b099d7 |
* be registered. Each name is a case-sensitive
|
|
Packit |
b099d7 |
* nul-terminated ASCII string. Each value is
|
|
Packit |
b099d7 |
* a 32-bit quantity, interpreted as a procedure
|
|
Packit |
b099d7 |
* address if the name is a callback routine, and
|
|
Packit |
b099d7 |
* uninterpreted otherwise.
|
|
Packit |
b099d7 |
* num_reg The number of entries in reglist.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmRegisterNames (MrmRegisterArglist reglist,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int num_reg
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
MrmCount num_reg
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function result */
|
|
Packit |
b099d7 |
String *names; /* vector of names */
|
|
Packit |
b099d7 |
XtPointer *values; /* vector of values */
|
|
Packit |
b099d7 |
int ndx; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Construct RegisterNames vectors, and call the WCI routine
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
names = (String *) XtMalloc (num_reg*sizeof(String));
|
|
Packit |
b099d7 |
values = (XtPointer *) XtMalloc (num_reg*sizeof(XtPointer));
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
names[ndx] = reglist[ndx].name;
|
|
Packit |
b099d7 |
values[ndx] = reglist[ndx].value;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = Urm__WCI_RegisterNames (names, values, num_reg);
|
|
Packit |
b099d7 |
XtFree ((char*)names);
|
|
Packit |
b099d7 |
XtFree ((char*)values);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine registers a vector of names and associated values for
|
|
Packit |
b099d7 |
* access in URM within a specific hierarchy. It is similar to
|
|
Packit |
b099d7 |
* MrmRegisterNames, except that the names have scope only over the
|
|
Packit |
b099d7 |
* hierarchy rather than global scope. For information on the names
|
|
Packit |
b099d7 |
* and values, see MrmRegister Names.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id An open hierarchy descriptor.
|
|
Packit |
b099d7 |
* reglist A list of name/value pairs for the names to
|
|
Packit |
b099d7 |
* be registered. Each name is a case-sensitive
|
|
Packit |
b099d7 |
* nul-terminated ASCII string. Each value is
|
|
Packit |
b099d7 |
* a 32-bit quantity, interpreted as a procedure
|
|
Packit |
b099d7 |
* address if the name is a callback routine, and
|
|
Packit |
b099d7 |
* uninterpreted otherwise.
|
|
Packit |
b099d7 |
* num_reg The number of entries in reglist.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmRegisterNamesInHierarchy (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
MrmRegisterArglist reglist,
|
|
Packit |
b099d7 |
#if NeedWidePrototypes
|
|
Packit |
b099d7 |
int num_reg
|
|
Packit |
b099d7 |
#else
|
|
Packit |
b099d7 |
MrmCount num_reg
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function result */
|
|
Packit |
b099d7 |
String *names; /* vector of names */
|
|
Packit |
b099d7 |
XtPointer *values; /* vector of values */
|
|
Packit |
b099d7 |
int ndx; /* loop index */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Construct RegisterNames vectors, and call the hierarchy routine
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
names = (String *) XtMalloc (num_reg*sizeof(String));
|
|
Packit |
b099d7 |
values = (XtPointer *) XtMalloc (num_reg*sizeof(XtPointer));
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
names[ndx] = reglist[ndx].name;
|
|
Packit |
b099d7 |
values[ndx] = reglist[ndx].value;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = Urm__RegisterNamesInHierarchy
|
|
Packit |
b099d7 |
(hierarchy_id, names, values, num_reg);
|
|
Packit |
b099d7 |
XtFree ((char*)names);
|
|
Packit |
b099d7 |
XtFree ((char*)values);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchInterfaceModule fetches all the widgets defined in some
|
|
Packit |
b099d7 |
* interface module in the URM database hierarchy. Typically, each
|
|
Packit |
b099d7 |
* application has one or more modules which define its interface;
|
|
Packit |
b099d7 |
* each must be fetched in order to initialize all the widgets the
|
|
Packit |
b099d7 |
* application requires. Applications are not constrained to have all
|
|
Packit |
b099d7 |
* their widgets defined in a single module.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* If the module defines a main window widget, MrmFetchInterfaceModule
|
|
Packit |
b099d7 |
* returns its id. If no main window widget is contained in the module,
|
|
Packit |
b099d7 |
* NULL is returned. No widgets are realized. The ids of widgets other
|
|
Packit |
b099d7 |
* than the main window may be obtained using creation callbacks.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id Hierarchy containing interface definition
|
|
Packit |
b099d7 |
* module_name Name of interface module defining top level of
|
|
Packit |
b099d7 |
* interface; by convention, this is usually the generic
|
|
Packit |
b099d7 |
* name of the application
|
|
Packit |
b099d7 |
* parent The parent widget for the topmost widgets being
|
|
Packit |
b099d7 |
* fetched from the module. Usually the top-level
|
|
Packit |
b099d7 |
* widget.
|
|
Packit |
b099d7 |
* w_return To return the widget id of the main window widget
|
|
Packit |
b099d7 |
* for the application
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmNOT_FOUND interface module or topmost widget not found
|
|
Packit |
b099d7 |
* MrmFAILURE Couldn't complete initialization
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*ARGSUSED*/
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchInterfaceModule (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
char *module_name,
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
Widget *w_return) /* unused */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
URMResourceContextPtr mod_context; /* context containing module */
|
|
Packit |
b099d7 |
RGMModuleDescPtr modptr; /* Interface module in context */
|
|
Packit |
b099d7 |
int ndx; /* loop index */
|
|
Packit |
b099d7 |
Widget cur_w; /* current widget id */
|
|
Packit |
b099d7 |
MrmType class; /* current widget class */
|
|
Packit |
b099d7 |
IDBFile hfile_id; /* file where module was found */
|
|
Packit |
b099d7 |
_MrmWidgetToAppContext(parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmAppLock(app);
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the hierachy, then attempt to fetch the module.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( hierarchy_id == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchInterfaceModule", _MrmMMsg_0023,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( ! MrmHierarchyValid(hierarchy_id) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchInterfaceModule", _MrmMMsg_0024,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = UrmGetResourceContext (NULL, NULL, 0, &mod_context);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = UrmIFMHGetModule (hierarchy_id, module_name, mod_context, &hfile_id);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
UrmFreeResourceContext (mod_context);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* We have the module. Loop through all the widgets it defines, and fetch
|
|
Packit |
b099d7 |
* each one.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
modptr = (RGMModuleDescPtr) UrmRCBuffer (mod_context);
|
|
Packit |
b099d7 |
if ( ! UrmInterfaceModuleValid(modptr) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
UrmFreeResourceContext (mod_context);
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchInterfaceModule", _MrmMMsg_0025,
|
|
Packit |
b099d7 |
NULL, mod_context, MrmBAD_IF_MODULE);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx<modptr->count ; ndx++ )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = MrmFetchWidget (hierarchy_id, modptr->topmost[ndx].index,
|
|
Packit |
b099d7 |
parent, &cur_w, &class);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
UrmFreeResourceContext (mod_context);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully fetched all widgets
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
UrmFreeResourceContext (mod_context);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchWidget fetchs any indexed application widget. As usual in fetch
|
|
Packit |
b099d7 |
* operations, the fetched widget's subtree is also fetched. There are
|
|
Packit |
b099d7 |
* no constraints on this widget except that it must not also appear
|
|
Packit |
b099d7 |
* as the child of some widget within its own subtree, i.e. there must
|
|
Packit |
b099d7 |
* be no cycles in the subtree graph! MrmFetchWidget does not do a
|
|
Packit |
b099d7 |
* XtManageChild for the newly created widget.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The semantics of the URM database require that any widget which is to
|
|
Packit |
b099d7 |
* be fetched with MrmFetchWidget meet the following requirements:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* o Not be referenced as the child of any widget in the database
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* o Be indexed
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchWidget replaces XmFetchTopmost, and is used to fetch
|
|
Packit |
b099d7 |
* topmost widgets where MrmFetchInterfaceModule is not used. A topmost
|
|
Packit |
b099d7 |
* widget is either the main window or any indexed widget whose parent is
|
|
Packit |
b099d7 |
* the top-level widget. MrmFetchWidget may be called at any time to fetch
|
|
Packit |
b099d7 |
* a widget which was not fetched at application startup. MrmFetchWidget
|
|
Packit |
b099d7 |
* determines if a widget has already been fetched by checking *w_return
|
|
Packit |
b099d7 |
* for a NULL value. Non-NULL values signify that the widget already
|
|
Packit |
b099d7 |
* has been fetched, and MrmFetchWidget no-ops. (If the toolkit ever
|
|
Packit |
b099d7 |
* supplies a validation routine for widgets, this will be used in
|
|
Packit |
b099d7 |
* place of a non-NULL check). Thus MrmFetchWidget may be used to
|
|
Packit |
b099d7 |
* defer fetching popup widgets until they are first referenced
|
|
Packit |
b099d7 |
* (presumably in a callback), and then fetching them once.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmFetchWidget may also be used to make multiple instances of a
|
|
Packit |
b099d7 |
* widget (and its subtree). In this case, the UID definition functions
|
|
Packit |
b099d7 |
* as a skeleton; there are no constraints on how many times a widget
|
|
Packit |
b099d7 |
* definition may be fetched. The only requirement is the *w_return be
|
|
Packit |
b099d7 |
* NULL on each call. This may be used to make multiple copies of
|
|
Packit |
b099d7 |
* a widget in e.g. a dialog box or menu (to construct a uniform form).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The index which identifies the widget must be known to the application
|
|
Packit |
b099d7 |
* via previous agreement.
|
|
Packit |
b099d7 |
* MrmFetchWidget will successfully fetch topmost widgets as long as the
|
|
Packit |
b099d7 |
* parent parameter is correct (the top-level widget), and this
|
|
Packit |
b099d7 |
* replaces XmFetchTopmost (which vanishes).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id Hierarchy containing interface definition
|
|
Packit |
b099d7 |
* index The index of the widget to fetch.
|
|
Packit |
b099d7 |
* parent ID of the parent widget
|
|
Packit |
b099d7 |
* w_return To return the widget id of the created widget.
|
|
Packit |
b099d7 |
* *w_return must be NULL or MrmFetchWidget no-ops.
|
|
Packit |
b099d7 |
* class_return To return the code identifying the widget class.
|
|
Packit |
b099d7 |
* This is principally used to distinguish main window
|
|
Packit |
b099d7 |
* and other toolkit widgets. It will be one of the
|
|
Packit |
b099d7 |
* URMwc... codes defined in MRM.h. The code
|
|
Packit |
b099d7 |
* for a main window is URMwcMainWindow.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmNOT_FOUND widget not found in database
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchWidget (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
Widget *w_return,
|
|
Packit |
b099d7 |
MrmType *class_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return MrmFetchWidgetOverride (hierarchy_id, index, parent,
|
|
Packit |
b099d7 |
NULL, NULL, 0, w_return, class_return);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This procedure is the extended version of MrmFetchWidget. It is
|
|
Packit |
b099d7 |
* identical to MrmFetchWidget in all respsects, except that it allows
|
|
Packit |
b099d7 |
* the caller to override the widget's name and any number of the
|
|
Packit |
b099d7 |
* arguments which would otherwise receive from the UID database or
|
|
Packit |
b099d7 |
* one of the defaulting mechanisms (i.e. the override is not limited
|
|
Packit |
b099d7 |
* to those arguments in the UID file).
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* The override parameters apply only to the widget fetched and returned
|
|
Packit |
b099d7 |
* by this procedure; its children (subtree) do not receive any override
|
|
Packit |
b099d7 |
* parameters.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id Hierarchy containing interface definition
|
|
Packit |
b099d7 |
* index The index of the widget to fetch.
|
|
Packit |
b099d7 |
* parent ID of the parent widget
|
|
Packit |
b099d7 |
* ov_name Name to override widget name (NULL for no override)
|
|
Packit |
b099d7 |
* ov_args Override arglist, exactly as would be given to
|
|
Packit |
b099d7 |
* XtCreateWidget (conversion complete, etc). NULL
|
|
Packit |
b099d7 |
* for no override.
|
|
Packit |
b099d7 |
* ov_num_args # args in ov_args; 0 for no override
|
|
Packit |
b099d7 |
* w_return To return the widget id of the created widget.
|
|
Packit |
b099d7 |
* *w_return must be NULL or MrmFetchWidget no-ops.
|
|
Packit |
b099d7 |
* class_return To return the code identifying the widget class.
|
|
Packit |
b099d7 |
* This is principally used to distinguish main window
|
|
Packit |
b099d7 |
* and other toolkit widgets. It will be one of the
|
|
Packit |
b099d7 |
* URMwc... codes defined in MRM.h. The code
|
|
Packit |
b099d7 |
* for a main window is URMwcMainWindow.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* MrmSUCCESS operation succeeded
|
|
Packit |
b099d7 |
* MrmNOT_FOUND widget not found in database
|
|
Packit |
b099d7 |
* MrmFAILURE operation failed, no further reason
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchWidgetOverride (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
String index,
|
|
Packit |
b099d7 |
Widget parent,
|
|
Packit |
b099d7 |
String ov_name,
|
|
Packit |
b099d7 |
ArgList ov_args,
|
|
Packit |
b099d7 |
Cardinal ov_num_args,
|
|
Packit |
b099d7 |
Widget *w_return,
|
|
Packit |
b099d7 |
MrmType *class_return)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result; /* function results */
|
|
Packit |
b099d7 |
URMResourceContextPtr w_context; /* context containing widget */
|
|
Packit |
b099d7 |
RGMWidgetRecordPtr widgetrec; /* widget record in context */
|
|
Packit |
b099d7 |
IDBFile hfile_id; /* file in widget was found */
|
|
Packit |
b099d7 |
URMResourceContextPtr wref_ctx; /* for widget references */
|
|
Packit |
b099d7 |
URMSetValuesDescPtr svlist = NULL; /* list of SetValues descriptors */
|
|
Packit |
b099d7 |
int ndx ; /* loop index */
|
|
Packit |
b099d7 |
char errmsg[300];
|
|
Packit |
b099d7 |
_MrmWidgetToAppContext(parent);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmAppLock(app);
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the hierachy, then attempt to fetch the widget
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( hierarchy_id == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchWidgetOverride", _MrmMMsg_0023,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( ! MrmHierarchyValid(hierarchy_id) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchWidgetOverride", _MrmMMsg_0024,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = UrmGetResourceContext (NULL, NULL, 300, &w_context);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = UrmHGetWidget (hierarchy_id, index, w_context, &hfile_id);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
UrmFreeResourceContext (w_context);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the widget record, then set the class return. Then instantiate the
|
|
Packit |
b099d7 |
* widget and its subtree.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
widgetrec = (RGMWidgetRecordPtr) UrmRCBuffer (w_context);
|
|
Packit |
b099d7 |
if ( ! UrmWRValid(widgetrec) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
UrmFreeResourceContext (w_context);
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchWidgetOverride", _MrmMMsg_0026,
|
|
Packit |
b099d7 |
NULL, w_context, MrmFAILURE);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* The following test breaks compatibility with the CDE1.0
|
|
Packit |
b099d7 |
* version of Mrm and cannot be done for CDEnext.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* if (widgetrec->access == URMaPrivate)
|
|
Packit |
b099d7 |
* {
|
|
Packit |
b099d7 |
* UrmFreeResourceContext (w_context);
|
|
Packit |
b099d7 |
* sprintf(errmsg, _MrmMMsg_0119, index);
|
|
Packit |
b099d7 |
* result = Urm__UT_Error("MrmFetchWidgetOverride", errmsg,
|
|
Packit |
b099d7 |
* NULL, w_context, MrmFAILURE);
|
|
Packit |
b099d7 |
* _MrmProcessUnlock();
|
|
Packit |
b099d7 |
* _MrmAppUnlock(app);
|
|
Packit |
b099d7 |
* return result;
|
|
Packit |
b099d7 |
* }
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
*class_return = widgetrec->type;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Urm__CW_InitWRef (&wref_ctx);
|
|
Packit |
b099d7 |
result = UrmCreateWidgetTree (w_context, parent, hierarchy_id, hfile_id,
|
|
Packit |
b099d7 |
ov_name, ov_args, ov_num_args,
|
|
Packit |
b099d7 |
URMrIndex, index, 0L, MrmManageDefault,
|
|
Packit |
b099d7 |
(URMPointerListPtr *)&svlist, wref_ctx,
|
|
Packit |
b099d7 |
w_return);
|
|
Packit |
b099d7 |
UrmFreeResourceContext (w_context);
|
|
Packit |
b099d7 |
if ( result != MrmSUCCESS )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Free up resources
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( svlist != NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
for ( ndx=0 ; ndx
|
|
Packit |
b099d7 |
Urm__CW_FreeSetValuesDesc
|
|
Packit |
b099d7 |
((URMSetValuesDescPtr)UrmPlistPtrN((URMPointerListPtr)svlist,ndx));
|
|
Packit |
b099d7 |
UrmPlistFree ((URMPointerListPtr)svlist);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
UrmFreeResourceContext (wref_ctx);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* successfully initialized
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return MrmSUCCESS;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
*++
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PROCEDURE DESCRIPTION:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* This routine does an XtSetValues on a widget, evaluating the values
|
|
Packit |
b099d7 |
* as public literal resource references resolvable from a URM
|
|
Packit |
b099d7 |
* hierarchy. Each literal is fetched from the hierarchy, and
|
|
Packit |
b099d7 |
* its value is fixed up and converted as required. This value is
|
|
Packit |
b099d7 |
* then placed in the arglist, and used as the actual value for
|
|
Packit |
b099d7 |
* an XtSetValues call. This routine allows a widget to be modified
|
|
Packit |
b099d7 |
* after creation using UID file values exactly as is done for creation
|
|
Packit |
b099d7 |
* values in MrmFetchWidget.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* As in FetchWidget, each argument whose value can be evaluated from
|
|
Packit |
b099d7 |
* the UID hierarchy is set in the widget. Values which are not found
|
|
Packit |
b099d7 |
* or for which conversion errors occur are not modified.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Each entry in the arglist identifies an argument to be modified in
|
|
Packit |
b099d7 |
* the widget. The .name part identifies the tag, as usual (XmN...).
|
|
Packit |
b099d7 |
* the .value part must be a String whose values is the index of the
|
|
Packit |
b099d7 |
* literal. Thus
|
|
Packit |
b099d7 |
* args[n].name = "label" (XmNlabel)
|
|
Packit |
b099d7 |
* args[n].value = "OK_button_label"
|
|
Packit |
b099d7 |
* would modify the label resource of the widget to have the value
|
|
Packit |
b099d7 |
* of the literal accessed by index 'OK_button_label' in the
|
|
Packit |
b099d7 |
* hierarchy.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FORMAL PARAMETERS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* hierarchy_id URM hierarchy to be searched for literal definitions
|
|
Packit |
b099d7 |
* w the widget to be modified
|
|
Packit |
b099d7 |
* args An arglist specifying the widget arguments to be
|
|
Packit |
b099d7 |
* modified. The .name part of each argument must be
|
|
Packit |
b099d7 |
* the usual XmN... string identifying the argument
|
|
Packit |
b099d7 |
* (argument tag). The .value part must be a String
|
|
Packit |
b099d7 |
* giveing the index of the literal. All literals must
|
|
Packit |
b099d7 |
* be public literals accessed by index.
|
|
Packit |
b099d7 |
* num_args the number of entries in args.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT INPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* IMPLICIT OUTPUTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* FUNCTION VALUE:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* SIDE EFFECTS:
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*--
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Cardinal
|
|
Packit |
b099d7 |
MrmFetchSetValues (MrmHierarchy hierarchy_id,
|
|
Packit |
b099d7 |
Widget w,
|
|
Packit |
b099d7 |
ArgList args,
|
|
Packit |
b099d7 |
Cardinal num_args)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Local variables
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Cardinal result;
|
|
Packit |
b099d7 |
_MrmWidgetToAppContext(w);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_MrmAppLock(app);
|
|
Packit |
b099d7 |
_MrmProcessLock();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Validate the hierachy, then attempt to modify the widget
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
if ( hierarchy_id == NULL )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchSetValues", _MrmMMsg_0023,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ( ! MrmHierarchyValid(hierarchy_id) )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
result = Urm__UT_Error ("MrmFetchSetValues", _MrmMMsg_0024,
|
|
Packit |
b099d7 |
NULL, NULL, MrmBAD_HIERARCHY);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
result = UrmFetchSetValues (hierarchy_id, w, args, num_args);
|
|
Packit |
b099d7 |
_MrmProcessUnlock();
|
|
Packit |
b099d7 |
_MrmAppUnlock(app);
|
|
Packit |
b099d7 |
return result;
|
|
Packit |
b099d7 |
}
|