Milán Major

netscape-revival

1 branch
Code

cmd/xfe/outline/outlinetest.c

/* outlinetest.c: Demo for the Outline widget class. */
/* Copyright © 1994 Torgeir Veimo. */
/* See the README file for copyright details. */

#include <Xm/Xm.h>
#include <Xm/ArrowB.h>
#include <Xm/Label.h>
#include <Xm/PushB.h>
#include <Xm/PushBG.h> 
#include <Xm/ScrolledW.h>
#include <X11/Xmu/Editres.h>
#include "Outline.h"
#include "Handle.h"

static void  GrowCB(Widget, XtPointer, XtPointer); 
static void  ToggleButtonHandleCB(Widget, XtPointer, XtPointer); 
static void  UnmanageCB(Widget, XtPointer, XtPointer); 
static void  ManageCB(Widget, XtPointer, XtPointer); 

void main (int argc, char **argv)
{
  Widget shell, scroller, outline, suboutline;
  Widget button1, button2, button3, button4;
  Widget left, right, handle, subhandle;

  XtAppContext app;

  void _XEditResCheckMessages();
  
  /* Initialize Xt. */
  
  shell = XtAppInitialize(&app, "RowTest", NULL, 0, 
			  &argc, argv, NULL, NULL, 0);    
  
  /* Initialize editres protocol */
  XtAddEventHandler(shell, (EventMask) 0, True, _XEditResCheckMessages, NULL);
  
  
  scroller = XtVaCreateManagedWidget("scroller", xmScrolledWindowWidgetClass,
				     shell,
				     XmNscrollingPolicy, XmAUTOMATIC,
				     NULL);
				     
  
  handle = XtVaCreateManagedWidget("roothandle", xmHandleWidgetClass,
				   scroller,
				   NULL);

  left = XtVaCreateManagedWidget("left", xmArrowButtonWidgetClass,
				 handle,
				 XmNarrowDirection, XmARROW_DOWN,
				 XmNshadowThickness, 0,
				 NULL);
  right = XtVaCreateManagedWidget("right", xmLabelWidgetClass,
				  handle,
				  NULL);

  right = XtVaCreateManagedWidget("2", xmLabelWidgetClass,
				  handle,
				  NULL);

  right = XtVaCreateManagedWidget("3", xmLabelWidgetClass,
				  handle,
				  NULL);

  right = XtVaCreateManagedWidget("4", xmLabelWidgetClass,
				  handle,
				  NULL);

  outline = XtVaCreateManagedWidget("outline", xmOutlineWidgetClass,
				    handle,
				    XmNindentation, 20,
				    XmNoutline, TRUE,
				    NULL);
  XtAddCallback(left, 
		XmNactivateCallback, ToggleButtonHandleCB, 
		(XtPointer) outline);
  
  XtVaSetValues(handle, 
		XmNsubWidget, outline,
		NULL);

  /* Add children to the Outline widget. */
  
  button1 = XtCreateManagedWidget("gadgetbutton",
				   xmPushButtonWidgetClass,
				   outline, NULL, 0);

  button2 = XtCreateManagedWidget("unmanage",
				   xmPushButtonWidgetClass,
				   outline, NULL, 0);
  
  button3 = XtCreateManagedWidget("manage",
				   xmPushButtonWidgetClass,
				   outline, NULL, 0);
  
  button4 = XtCreateManagedWidget("growbutton",
				  xmPushButtonWidgetClass,
				  outline, NULL, 0);

  XtAddCallback(button1, XmNactivateCallback, GrowCB, NULL);
  XtAddCallback(button2, XmNactivateCallback, UnmanageCB, (XtPointer) button2);
  XtAddCallback(button3, XmNactivateCallback, ManageCB, (XtPointer) button2);
  XtAddCallback(button4, XmNactivateCallback, GrowCB, NULL);

  subhandle = XtVaCreateManagedWidget("subhandle",
				      xmHandleWidgetClass,
				      outline,
				      NULL);
  left = XtVaCreateManagedWidget("left", xmArrowButtonWidgetClass,
				 subhandle,
				 XmNarrowDirection, XmARROW_DOWN,
				 XmNshadowThickness, 0,
				 NULL);
  right = XtVaCreateManagedWidget("right", xmLabelWidgetClass,
				  subhandle,
				  NULL);


  suboutline = XtVaCreateManagedWidget("suboutline",
				       xmOutlineWidgetClass,
				       subhandle, 
				       XmNindentation, 20, 
				       XmNoutline, TRUE,
				       NULL);
  XtAddCallback(left, 
		XmNactivateCallback, ToggleButtonHandleCB, 
		(XtPointer) suboutline);

  XtVaSetValues(subhandle, 
		XmNsubWidget, suboutline, 
		NULL);

  button1 = XtCreateManagedWidget("subbutton1",
				   xmPushButtonWidgetClass,
				   suboutline, NULL, 0);

  button2 = XtCreateManagedWidget("subbutton2",
				   xmPushButtonWidgetClass,
				   suboutline, NULL, 0);
  
  button3 = XtCreateManagedWidget("subbutton3",
				   xmPushButtonWidgetClass,
				   suboutline, NULL, 0);
  
  button4 = XtCreateManagedWidget("subbutton4",
				  xmPushButtonWidgetClass,
				  suboutline, NULL, 0);

  XtAddCallback(button1, XmNactivateCallback, GrowCB, NULL);
  XtAddCallback(button2, XmNactivateCallback, UnmanageCB, (XtPointer) button2);
  XtAddCallback(button3, XmNactivateCallback, ManageCB, (XtPointer) button2);
  XtAddCallback(button4, XmNactivateCallback, GrowCB, NULL);
  
  subhandle = XtVaCreateManagedWidget("subhandle",
				      xmHandleWidgetClass,
				      outline,
				      NULL);
  left = XtVaCreateManagedWidget("left", xmArrowButtonWidgetClass,
				 subhandle,
				 XmNarrowDirection, XmARROW_DOWN,
				 XmNshadowThickness, 0,
				 NULL);
  right = XtVaCreateManagedWidget("right", xmLabelWidgetClass,
				  subhandle,
				  NULL);


  suboutline = XtVaCreateManagedWidget("suboutline",
				       xmOutlineWidgetClass,
				       subhandle, 
				       XmNindentation, 20, 
				       XmNoutline, TRUE,
				       NULL);
  XtAddCallback(left, 
		XmNactivateCallback, ToggleButtonHandleCB, 
		(XtPointer) suboutline);

  XtVaSetValues(subhandle, XmNsubWidget, suboutline, NULL);

  button1 = XtCreateManagedWidget("even",
				   xmPushButtonGadgetClass,
				   suboutline, NULL, 0);

  button2 = XtCreateManagedWidget("more",
				   xmPushButtonWidgetClass,
				   suboutline, NULL, 0);
  
  button3 = XtCreateManagedWidget("widgets",
				   xmPushButtonWidgetClass,
				   suboutline, NULL, 0);
  
  button4 = XtCreateManagedWidget("here",
				  xmPushButtonWidgetClass,
				  suboutline, NULL, 0);

  XtRealizeWidget(shell);
  
  XtAppMainLoop(app); 
}

static void GrowCB(Widget w, 
		   XtPointer clientData, 
		   XtPointer callData)
{
  Dimension  width, height;
  
  XtVaGetValues(w, XmNwidth, &width, XmNheight, &height, NULL);
  
  width +=10; height +=10;
  
  XtVaSetValues(w, XmNwidth, width, XmNheight, height, NULL);
}
       
void ToggleButtonHandleCB(Widget w,
			  XtPointer closure,
			  XtPointer call_data)
{
  XmOutlineWidget outline = (XmOutlineWidget) closure;
  int direction;
  
  XtVaGetValues(w, XmNarrowDirection, &direction, NULL);
  
  switch (direction){
  case XmARROW_DOWN:
    XtUnmanageChild((Widget) outline);
    XtVaSetValues(w, XmNarrowDirection, XmARROW_RIGHT, NULL);
    break;
  case XmARROW_RIGHT:
    XtManageChild((Widget) outline);
    XtVaSetValues(w, XmNarrowDirection, XmARROW_DOWN, NULL);
    break;
  default:
    break;
  }
}
   
void UnmanageCB(Widget w,
		XtPointer closure,
		XtPointer call_data)
{
  Widget button = (Widget) closure;

  XtUnmanageChild(button);
}

void ManageCB(Widget w,
	      XtPointer closure,
	      XtPointer call_data )
{
  Widget button = (Widget) closure;

  XtManageChild(button);
}