|
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 REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: periodic.c /main/7 1995/07/14 12:00:23 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include <testlib.h>
|
|
Packit |
b099d7 |
#include <Mrm/MrmPublic.h> /* Mrm Toolkit */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define MAX_ARGS 100
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define K_scale_widget 1
|
|
Packit |
b099d7 |
#define K_drawnbutton_widget 2
|
|
Packit |
b099d7 |
#define K_togglebutton_widget 3
|
|
Packit |
b099d7 |
#define K_vtext1_widget 4
|
|
Packit |
b099d7 |
#define K_vtext2_widget 5
|
|
Packit |
b099d7 |
#define K_popup_menu_widget 6
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget Scale_1,Drawnbutton_1,Togglebutton_1,VText_1,VText_2,PopMenu_1,PMenu_1;
|
|
Packit |
b099d7 |
static Widget Label1, Separator1, PushBtn1, ToggleBtn1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static MrmHierarchy s_MrmHierarchy; /* MRM database hierarch id */
|
|
Packit |
b099d7 |
static char *vec[]={"periodic.uid"};
|
|
Packit |
b099d7 |
/* MRM database file list */
|
|
Packit |
b099d7 |
static MrmCode class ;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void quit_button_activate();
|
|
Packit |
b099d7 |
static void foo_activate();
|
|
Packit |
b099d7 |
static void create_callback();
|
|
Packit |
b099d7 |
static void zippy_null();
|
|
Packit |
b099d7 |
static void postmenu ();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static MrmCount regnum = 4 ;
|
|
Packit |
b099d7 |
static MrmRegisterArg regvec[] = {
|
|
Packit |
b099d7 |
{"quit_button_activate",(caddr_t)quit_button_activate},
|
|
Packit |
b099d7 |
{"foo_activate",(caddr_t)foo_activate},
|
|
Packit |
b099d7 |
{"create_callback",(caddr_t)create_callback},
|
|
Packit |
b099d7 |
{"zippy_null",(caddr_t)zippy_null}
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget CreateLabel(label, parent)
|
|
Packit |
b099d7 |
char *label;
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
register int n;
|
|
Packit |
b099d7 |
Arg args[MAX_ARGS];
|
|
Packit |
b099d7 |
XmString tcs;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString, tcs); n++;
|
|
Packit |
b099d7 |
widget = XmCreateLabel(parent, "label", args, n);
|
|
Packit |
b099d7 |
XtManageChild(widget);
|
|
Packit |
b099d7 |
XmStringFree(tcs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget CreatePushButton(label, parent)
|
|
Packit |
b099d7 |
char *label;
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
register int n;
|
|
Packit |
b099d7 |
Arg args[MAX_ARGS];
|
|
Packit |
b099d7 |
XmString tcs;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString, tcs); n++;
|
|
Packit |
b099d7 |
widget = XmCreatePushButton(parent, "pushButton", args, n);
|
|
Packit |
b099d7 |
XtManageChild(widget);
|
|
Packit |
b099d7 |
XmStringFree(tcs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static Widget CreateToggle(label, parent)
|
|
Packit |
b099d7 |
char *label;
|
|
Packit |
b099d7 |
Widget parent;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
register int n;
|
|
Packit |
b099d7 |
Arg args[MAX_ARGS];
|
|
Packit |
b099d7 |
XmString tcs;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
tcs = XmStringLtoRCreate(label, XmSTRING_DEFAULT_CHARSET);
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNlabelString, tcs); n++;
|
|
Packit |
b099d7 |
widget = XmCreateToggleButton(parent, "toggle", args, n);
|
|
Packit |
b099d7 |
XtManageChild(widget);
|
|
Packit |
b099d7 |
XmStringFree(tcs);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return(widget);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Main program
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
int main(argc, argv)
|
|
Packit |
b099d7 |
unsigned int argc;
|
|
Packit |
b099d7 |
char **argv;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Declare the variables to contain the two widget ids
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Widget periodic_table_main;
|
|
Packit |
b099d7 |
Arg args[1] ;
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
int status;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the MRM
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
MrmInitialize ();
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Initialize the toolkit. This call returns the id of the "Shell1"
|
|
Packit |
b099d7 |
* widget. The applications "main" widget must be the only child
|
|
Packit |
b099d7 |
* of this widget.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
CommonTestInit(argc, argv);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg (args[n], XtNallowShellResize, FALSE) ; n++;
|
|
Packit |
b099d7 |
XtSetValues(Shell1, args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Define the Mrm.hierarchy (only 1 file)
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (MrmOpenHierarchy (1, /* number of files */
|
|
Packit |
b099d7 |
vec, /* files */
|
|
Packit |
b099d7 |
NULL, /* os_ext_list (null) */
|
|
Packit |
b099d7 |
&s_MrmHierarchy) /* ptr to returned id */
|
|
Packit |
b099d7 |
!= MrmSUCCESS) {
|
|
Packit |
b099d7 |
printf ("can't open hierarchy\n");
|
|
Packit |
b099d7 |
exit(1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Register our callback routines so that the resource manager can
|
|
Packit |
b099d7 |
* resolve them at widget-creation time.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (MrmRegisterNames (regvec, regnum) != MrmSUCCESS) {
|
|
Packit |
b099d7 |
printf("can't register names\n");
|
|
Packit |
b099d7 |
exit(1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Call MRM to fetch and create the pushbutton and its container
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if (MrmFetchWidget (s_MrmHierarchy, "periodic_table_main",
|
|
Packit |
b099d7 |
Shell1, &periodic_table_main, &class) != MrmSUCCESS) {
|
|
Packit |
b099d7 |
printf("can't fetch interface\n");
|
|
Packit |
b099d7 |
exit(1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Make the Shell1 widget "manage" the main window (or whatever the
|
|
Packit |
b099d7 |
* the uil defines as the topmost widget). This will
|
|
Packit |
b099d7 |
* cause it to be "realized" when the Shell1 widget is "realized"
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtManageChild(periodic_table_main);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Realize the Shell1 widget. This will cause the entire "managed"
|
|
Packit |
b099d7 |
* widget hierarchy to be displayed
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtRealizeWidget(Shell1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** PopupMenu1
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
PMenu_1 = XmCreatePopupMenu(PopMenu_1, "popMenu", NULL, 0);
|
|
Packit |
b099d7 |
XtAddEventHandler(PopMenu_1, ButtonPressMask, False, postmenu, PMenu_1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
** Menu1
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
Label1 = CreateLabel("POPUP MENU", PMenu_1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg(args[n], XmNseparatorType, XmDOUBLE_LINE); n++;
|
|
Packit |
b099d7 |
Separator1 = XmCreateSeparator(PMenu_1, "separator", args, n);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
PushBtn1 = CreatePushButton("pushbutton", PMenu_1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ToggleBtn1 = CreateToggle("togglebutton", PMenu_1);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Loop and process events
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtAppMainLoop(app_context);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* UNREACHABLE */
|
|
Packit |
b099d7 |
return (0);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void zippy_null( widget, tag, callback_data )
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
char *tag;
|
|
Packit |
b099d7 |
XmAnyCallbackStruct *callback_data;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define fatal 1
|
|
Packit |
b099d7 |
static void postmenu (w, popup, event)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
Widget popup;
|
|
Packit |
b099d7 |
XButtonEvent *event;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
int status;
|
|
Packit |
b099d7 |
if (event->button != Button3)
|
|
Packit |
b099d7 |
return;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XmMenuPosition(PMenu_1, event);
|
|
Packit |
b099d7 |
XtManageChild (PMenu_1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* All widgets that are created call back to this procedure.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void create_callback(w, tag, reason)
|
|
Packit |
b099d7 |
Widget w;
|
|
Packit |
b099d7 |
int *tag;
|
|
Packit |
b099d7 |
unsigned long *reason;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/* For internationalization ease, we capture a few strings from the
|
|
Packit |
b099d7 |
* widgets themselves. We could go out and fetch them as needed but
|
|
Packit |
b099d7 |
* since we use these all the time, this method if more efficient.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
switch (*tag) {
|
|
Packit |
b099d7 |
case K_scale_widget:
|
|
Packit |
b099d7 |
Scale_1 = w;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case K_drawnbutton_widget:
|
|
Packit |
b099d7 |
Drawnbutton_1 = w;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case K_togglebutton_widget:
|
|
Packit |
b099d7 |
Togglebutton_1 = w;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case K_vtext1_widget:
|
|
Packit |
b099d7 |
VText_1 = w;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case K_vtext2_widget:
|
|
Packit |
b099d7 |
VText_2 = w;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
case K_popup_menu_widget:
|
|
Packit |
b099d7 |
PopMenu_1 = w;
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
default:
|
|
Packit |
b099d7 |
break;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void foo_activate( widget, tag, callback_data )
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
char *tag;
|
|
Packit |
b099d7 |
XmAnyCallbackStruct *callback_data;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
int scale_value;
|
|
Packit |
b099d7 |
Boolean toggle_state;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg( args[n], XmNvalue, &scale_value); n++;
|
|
Packit |
b099d7 |
XtGetValues( Scale_1, args, n );
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg( args[n], XmNset, &toggle_state); n++;
|
|
Packit |
b099d7 |
XtGetValues( Togglebutton_1, args, n );
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((scale_value == 13) && (toggle_state == True)) {
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg( args[n], XmNvalue, "OSF Motif Credits"); n++;
|
|
Packit |
b099d7 |
XtSetValues( VText_1, args, n );
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
XtSetArg( args[n], XmNvalue,
|
|
Packit |
b099d7 |
"DEV: Vania, Ellis, Mike,\n\
|
|
Packit |
b099d7 |
..Alka, Al, Scott,\n\
|
|
Packit |
b099d7 |
..Daniel, and Paul\n\
|
|
Packit |
b099d7 |
REL: Ron and Martha\n\
|
|
Packit |
b099d7 |
Q/A: Libby, Tom, Ken,\n\
|
|
Packit |
b099d7 |
..Carl, and Dany\n\
|
|
Packit |
b099d7 |
DOC: Ken and Bob\n\
|
|
Packit |
b099d7 |
Moral Support:\n\
|
|
Packit |
b099d7 |
Mary Chung's Restaurant\n"); n++;
|
|
Packit |
b099d7 |
XtSetValues( VText_2, args, n );
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static void quit_button_activate( widget, tag, callback_data )
|
|
Packit |
b099d7 |
Widget widget;
|
|
Packit |
b099d7 |
char *tag;
|
|
Packit |
b099d7 |
XmAnyCallbackStruct *callback_data;
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Arg args[2];
|
|
Packit |
b099d7 |
int n;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static int call_count = 1;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
call_count += 1 ;
|
|
Packit |
b099d7 |
switch ( call_count )
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
case 1:
|
|
Packit |
b099d7 |
n = 0;
|
|
Packit |
b099d7 |
/* XtSetArg( args[n], XmNlabelString,
|
|
Packit |
b099d7 |
XmStringLtoRCreate("Goodbye\nWorld!","")); n++;
|
|
Packit |
b099d7 |
XtSetValues( Text_1, args, n ); */
|
|
Packit |
b099d7 |
break ;
|
|
Packit |
b099d7 |
case 2:
|
|
Packit |
b099d7 |
exit(1);
|
|
Packit |
b099d7 |
break ;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|