gecko-dev/cmd/xfe/XfeWidgets/tests/Xfe/CascadeTest.c

277 строки
6.6 KiB
C
Исходник Обычный вид История

1998-03-28 05:44:41 +03:00
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
/*-----------------------------------------*/
/* */
/* Name: CascadeTest.c */
/* Description: Test for XfeCascade widget. */
/* Author: Ramiro Estrugo <ramiro@netscape.com> */
/* */
/*----------------------------------------------------------------------*/
#include <Xfe/XfeTest.h>
1998-03-28 05:44:41 +03:00
static String names[] =
{
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
};
static Cardinal delays[] =
{
0,
200,
0,
0,
300,
1000,
500,
5000,
400,
0,
};
static Cardinal counts[] =
{
0,
1,
2,
4,
8,
16,
32,
64,
128,
1,
};
static void activate_callback (Widget,XtPointer,XtPointer);
static void arm_callback (Widget,XtPointer,XtPointer);
static void disarm_callback (Widget,XtPointer,XtPointer);
static void popup_callback (Widget,XtPointer,XtPointer);
static void popdown_callback (Widget,XtPointer,XtPointer);
static void cascading_callback (Widget,XtPointer,XtPointer);
static void populate_callback (Widget,XtPointer,XtPointer);
static Widget create_button (Widget,String,Cardinal,Cardinal);
static void add_items (Widget,Cardinal);
static Widget add_item (Widget,String);
static Widget get_sub_menu_id (Widget);
#define MAX_J 10
/*----------------------------------------------------------------------*/
int
main(int argc,char *argv[])
{
Widget form;
Widget frame;
Widget tool_bar;
Cardinal i;
XfeAppCreateSimple("CascadeTest",&argc,argv,"MainFrame",&frame,&form);
tool_bar = XtVaCreateManagedWidget("ToolBar",
xfeToolBarWidgetClass,
form,
NULL);
for (i = 0; i < XtNumber(names); i++)
{
create_button(tool_bar,names[i],counts[i],delays[i]);
}
XtPopup(frame,XtGrabNone);
XfeAppMainLoop();
return 0;
}
/*----------------------------------------------------------------------*/
static void
activate_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
XfeButtonCallbackStruct * cbs = (XfeButtonCallbackStruct *) call_data;
printf("Activate(%s)\n\n",XtName(w));
}
/*----------------------------------------------------------------------*/
static void
arm_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
XfeButtonCallbackStruct * cbs = (XfeButtonCallbackStruct *) call_data;
printf("Arm(%s)\n\n",XtName(w));
}
/*----------------------------------------------------------------------*/
static void
disarm_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
printf("Disarm(%s)\n\n",XtName(w));
}
/*----------------------------------------------------------------------*/
static void
popup_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
printf("Popup(%s)\n\n",XtName(w));
}
/*----------------------------------------------------------------------*/
static void
popdown_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
printf("Popdown(%s)\n\n",XtName(w));
}
/*----------------------------------------------------------------------*/
static void
populate_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
Widget submenu;
Cardinal num_children;
XtVaGetValues(w,XmNsubMenuId,&submenu,NULL);
assert( XfeIsAlive(submenu) );
XfeChildrenGet(submenu,NULL,&num_children);
printf("Populate(%s) Have %d menu items\n\n",XtName(w),num_children);
if (strcmp(XtName(w),"One") == 0)
{
XfeCascadeDestroyChildren(w);
/*XfeChildrenDestroy(submenu);*/
XSync(XtDisplay(w),True);
XmUpdateDisplay(w);
add_items(w,30);
}
}
/*----------------------------------------------------------------------*/
static void
cascading_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
Widget submenu;
Cardinal num_children;
XtVaGetValues(w,XmNsubMenuId,&submenu,NULL);
assert( XfeIsAlive(submenu) );
XfeChildrenGet(submenu,NULL,&num_children);
printf("Cascading(%s) Have %d menu items\n\n",XtName(w),num_children);
}
/*----------------------------------------------------------------------*/
static Widget
create_button(Widget parent,String name,Cardinal item_count,Cardinal delay)
{
Widget button;
Cardinal i;
char buf[100];
static String items[] =
{
"Item One",
"Item Two",
"Item Three",
"Item Four",
"Item Five",
"Item Six",
"Item Seven",
"Item Eight",
"Item Nine",
"Item Ten",
};
button = XtVaCreateManagedWidget(name,
xfeCascadeWidgetClass,
parent,
XmNmappingDelay, delay,
NULL);
XtAddCallback(button,XmNactivateCallback,activate_callback,NULL);
XtAddCallback(button,XmNarmCallback,arm_callback,NULL);
XtAddCallback(button,XmNcascadingCallback,cascading_callback,NULL);
XtAddCallback(button,XmNdisarmCallback,disarm_callback,NULL);
XtAddCallback(button,XmNpopdownCallback,popdown_callback,NULL);
XtAddCallback(button,XmNcascadingCallback,populate_callback,NULL);
XtAddCallback(button,XmNpopupCallback,popup_callback,NULL);
add_items(button,item_count);
return button;
}
/*----------------------------------------------------------------------*/
static void
add_items(Widget parent,Cardinal item_count)
{
if (item_count > 0)
{
Cardinal i;
char buf[100];
Widget sub_menu_id = get_sub_menu_id(parent);
assert( XfeIsAlive(sub_menu_id) );
for (i = 0; i < item_count; i++)
{
sprintf(buf,"Item %-2d",i);
add_item(sub_menu_id,buf);
}
}
}
/*----------------------------------------------------------------------*/
static Widget
add_item(Widget parent,String name)
{
Widget item;
item = XtVaCreateManagedWidget(name,
/*xmPushButtonGadgetClass,*/
xmPushButtonWidgetClass,
parent,
NULL);
return item;
}
/*----------------------------------------------------------------------*/
static Widget
get_sub_menu_id(Widget w)
{
Widget sub_menu_id;
XtVaGetValues(w,XmNsubMenuId,&sub_menu_id,NULL);
return sub_menu_id;
}
/*----------------------------------------------------------------------*/