Blame tests/Toolkit/PanedWin/PanedWin14.c

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: PanedWin14.c /main/4 1995/07/13 19:06:46 drk $"
Packit b099d7
#endif
Packit b099d7
#endif
Packit b099d7
/*
Packit b099d7
*  (c) Copyright 1987, 1988, 1989 HEWLETT-PACKARD COMPANY */
Packit b099d7
Packit b099d7
#include <testlib.h>
Packit b099d7
#include <X11/StringDefs.h>
Packit b099d7
#include <Xm/XmP.h>
Packit b099d7
Packit b099d7
/*  Global  */
Packit b099d7
Packit b099d7
Widget  XmVPanedWindow1 = NULL;
Packit b099d7
Widget  PushButton1 = NULL;
Packit b099d7
Widget  PushButton2 = NULL;
Packit b099d7
Widget  PushButton3 = NULL;
Packit b099d7
Widget  Manager1 = NULL;
Packit b099d7
Widget  Manager2 = NULL;
Packit b099d7
Widget  Manager3 = NULL;
Packit b099d7
Packit b099d7
char *string1 = "\
Packit b099d7
Buttons 1 and 2 are 150 in height, Button 3 is 80.  Pane minimum\n\
Packit b099d7
is 100.  Try to resize panes smaller than their minimum. \n\
Packit b099d7
Press Alt-F8 (or pull down Size from the client's window menu)\n\
Packit b099d7
and take note fo the current height of the client.";
Packit b099d7
Packit b099d7
char *string2 = "\
Packit b099d7
 Minimums for each pane now set at their current size. You should\n\
Packit b099d7
 not be able to make any pane smaller.\n\
Packit b099d7
 Because the Paned Window's top and bottom margins were increased,\n\
Packit b099d7
 the Pane and Shell should grow by about 100 pixels to\n\
Packit b099d7
 accomodate the mimimums and margins. \n\
Packit b099d7
 Again take note of the current height of the client.";
Packit b099d7
Packit b099d7
void MakeChildUnresizable();
Packit b099d7
void PrintProcessInfo();
Packit b099d7
Packit b099d7
void  main (argc, argv)
Packit b099d7
int     argc;
Packit b099d7
char  **argv;
Packit b099d7
{
Packit b099d7
    int                delay = 0;
Packit b099d7
    register int       n;
Packit b099d7
    Arg                args[MAX_ARGS];
Packit b099d7
    XmString           tcs = NULL;
Packit b099d7
    XWindowAttributes  info;
Packit b099d7
    XEvent             DummyEvent;
Packit b099d7
    Dimension          currentHeight, currentWidth;
Packit b099d7
    Widget             ManagerKids[10];
Packit b099d7
    static int         kidCount = 0;
Packit b099d7
Packit b099d7
    /*  initialize toolkit  */
Packit b099d7
    CommonTestInit(argc, argv);
Packit b099d7
    
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XtNgeometry, "+0+0");  n++;
Packit b099d7
    XtSetValues(Shell1, args, n);
Packit b099d7
  
Packit b099d7
    XmRegisterConverters();
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XmVPanedWindow1 = XmCreatePanedWindow(Shell1, "XmVPanedWindow1",
Packit b099d7
                    args, n);
Packit b099d7
    XtManageChild(XmVPanedWindow1);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight,  150); n++;
Packit b099d7
    XtSetArg(args[n], XmNpaneMinimum, 100); n++;
Packit b099d7
    PushButton1 = XmCreatePushButton(XmVPanedWindow1, "PushButton1",
Packit b099d7
                    args, n);
Packit b099d7
    XtManageChild(PushButton1);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight,  150); n++;
Packit b099d7
    XtSetArg(args[n], XmNpaneMinimum, 100); n++;
Packit b099d7
    PushButton2 = XmCreatePushButton(XmVPanedWindow1, "PushButton2",
Packit b099d7
                    args, n);
Packit b099d7
    XtManageChild(PushButton2);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight,  80); n++;
Packit b099d7
    XtSetArg(args[n], XmNpaneMinimum, 100); n++;
Packit b099d7
    PushButton3 = XmCreatePushButton(XmVPanedWindow1, "PushButton3",
Packit b099d7
                    args, n);
Packit b099d7
    XtManageChild(PushButton3);
Packit b099d7
    XmStringFree(tcs);
Packit b099d7
Packit b099d7
    XtRealizeWidget(Shell1);
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* set the minimumSize of each button to its current height */
Packit b099d7
Packit b099d7
    MakeChildUnresizable(PushButton1);
Packit b099d7
    MakeChildUnresizable(PushButton2);
Packit b099d7
    MakeChildUnresizable(PushButton3);
Packit b099d7
Packit b099d7
    /* now increase the margin on the Paned Window */
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNmarginHeight, 50);   n++;
Packit b099d7
    XtSetValues(XmVPanedWindow1, args, n);
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* let's try other geometric deprivations and see if the paned window */
Packit b099d7
    /* can get its act together */
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg (args[n], XmNsashWidth, 20); n++;           
Packit b099d7
    XtSetArg (args[n], XmNsashHeight, 20); n++;          
Packit b099d7
    XtSetArg (args[n], XmNsashShadowThickness, 5); n++; 
Packit b099d7
    XtSetArg (args[n], XmNspacing, 20); n++;             
Packit b099d7
    XtSetValues (XmVPanedWindow1, args, n);
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* the desired effect is the same as in panedWin.uil */
Packit b099d7
    /* the separators are OFF and the sash extends across the width of the */
Packit b099d7
    /* paned window. Gives a nice sort of bar to grab and move the sash */
Packit b099d7
  
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg (args[n], XmNwidth, &currentWidth); n++;
Packit b099d7
    XtGetValues (XmVPanedWindow1, args, n); 
Packit b099d7
      
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg (args[n], XmNsashWidth, currentWidth); n++;
Packit b099d7
    XtSetArg (args[n], XmNseparatorOn, False); n++;
Packit b099d7
    XtSetValues (XmVPanedWindow1, args, n);
Packit b099d7
Packit b099d7
    /* also, reduce minimum of buttons so we can move sashes a bit */
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight, &currentHeight); n++;
Packit b099d7
    XtGetValues(PushButton1, args, n);
Packit b099d7
    printf ("Current height of PushButton1 is %d\n", currentHeight);
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNallowResize, True); n++;
Packit b099d7
    XtSetArg(args[n], XmNpaneMinimum, currentHeight - 50); n++;
Packit b099d7
    printf ("   Setting paneMimimum to %d\n", currentHeight);
Packit b099d7
    XtSetValues(PushButton1, args, n);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight, &currentHeight); n++;
Packit b099d7
    XtGetValues(PushButton2, args, n);
Packit b099d7
    printf ("Current height of PushButton2 is %d\n", currentHeight);
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNallowResize, True); n++;
Packit b099d7
    XtSetArg(args[n], XmNpaneMinimum, currentHeight - 50); n++;
Packit b099d7
    printf ("   Setting paneMimimum to %d\n", currentHeight);
Packit b099d7
    XtSetValues(PushButton2, args, n);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight, &currentHeight); n++;
Packit b099d7
    XtGetValues(PushButton3, args, n);
Packit b099d7
    printf ("Current height of PushButton3 is %d\n", currentHeight);
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNallowResize, True); n++;
Packit b099d7
    XtSetArg(args[n], XmNpaneMinimum, currentHeight - 50); n++;
Packit b099d7
    printf ("   Setting paneMimimum to %d\n", currentHeight);
Packit b099d7
    XtSetValues(PushButton3, args, n);
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    /* as discussed on motif-talk, try same stuff with manager children */
Packit b099d7
    /* First, we need to make the managers and put some stuff in 'em */
Packit b099d7
    /* Then destroy the existing children and replace them with these guys */
Packit b099d7
Packit b099d7
    /* turn separators back on  default-style*/
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg (args[n], XmNseparatorOn, True); n++;
Packit b099d7
    XtSetArg (args[n], XmNsashWidth, 10); n++;
Packit b099d7
    XtSetArg (args[n], XmNsashHeight, 10); n++;
Packit b099d7
    XtSetValues (XmVPanedWindow1, args, n);
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    /*    XtSetArg (args[n], XmNborderWidth, 50); n++; */
Packit b099d7
    Manager1 = XmCreateBulletinBoard (XmVPanedWindow1, "Manager1", args, n);
Packit b099d7
    
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg (args[n], XmNlabelString, 
Packit b099d7
	      XmStringCreateSimple ("A refreshing alternative")); n++;
Packit b099d7
    ManagerKids[kidCount] = XmCreateLabel (Manager1, "Label1", args, n);
Packit b099d7
    XtManageChild(ManagerKids[kidCount]);
Packit b099d7
    kidCount++; 
Packit b099d7
    
Packit b099d7
    XtDestroyWidget(PushButton1);
Packit b099d7
    XtManageChild (Manager1); 
Packit b099d7
Packit b099d7
    MakeChildUnresizable(Manager1);
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNresizeHeight, True); n++;
Packit b099d7
    XtSetArg(args[n], XmNvalue, string1); n++;
Packit b099d7
    Manager2 = XmCreateScrolledText(XmVPanedWindow1, "Manager2", args, n);
Packit b099d7
    
Packit b099d7
    XtDestroyWidget(PushButton2);
Packit b099d7
    XtManageChild (Manager2); 
Packit b099d7
Packit b099d7
    MakeChildUnresizable(Manager2);    
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNresizeHeight, False); n++;
Packit b099d7
    XtSetArg(args[n], XmNvalue, string2); n++;
Packit b099d7
    Manager3 = XmCreateScrolledText(XmVPanedWindow1, "Manager2", args, n);
Packit b099d7
    
Packit b099d7
    XtDestroyWidget(PushButton3);
Packit b099d7
    XtManageChild (Manager3); 
Packit b099d7
Packit b099d7
    MakeChildUnresizable(Manager3);    
Packit b099d7
Packit b099d7
    CommonPause();
Packit b099d7
  
Packit b099d7
    XtAppMainLoop(app_context);
Packit b099d7
}
Packit b099d7
Packit b099d7
void MakeChildUnresizable (child)
Packit b099d7
Widget child;
Packit b099d7
{
Packit b099d7
  Dimension currentHeight;
Packit b099d7
  int n;
Packit b099d7
  Arg args[10];
Packit b099d7
  XtGeometryResult result;
Packit b099d7
  XtWidgetGeometry preferred;
Packit b099d7
  Boolean setValuesMethod;
Packit b099d7
  Dimension one_pixel = (Dimension) 1;
Packit b099d7
Packit b099d7
  if ((!XmIsManager(child)) && !(XmIsScrolledWindow(XtParent(child)))) {
Packit b099d7
    setValuesMethod = True;
Packit b099d7
    n = 0;
Packit b099d7
    XtSetArg(args[n], XmNheight, &currentHeight); n++;
Packit b099d7
    XtGetValues(child, args, n);
Packit b099d7
Packit b099d7
  }
Packit b099d7
  else {
Packit b099d7
    setValuesMethod = False;
Packit b099d7
    result = XtQueryGeometry(child, NULL, &preferred);
Packit b099d7
    currentHeight = preferred.height;
Packit b099d7
  }
Packit b099d7
Packit b099d7
  printf ("Current height of child is %d\n", currentHeight);
Packit b099d7
  n = 0;
Packit b099d7
  XtSetArg(args[n], XmNallowResize, True); n++;
Packit b099d7
  XtSetArg(args[n], XmNpaneMinimum, currentHeight); n++;
Packit b099d7
  XtSetArg(args[n], XmNpaneMaximum, currentHeight); n++;
Packit b099d7
  XtSetValues(child, args, n);
Packit b099d7
Packit b099d7
  printf ("Using the %s method...\n", 
Packit b099d7
	  (setValuesMethod == True ? "setValues" : "queryGeometry"));
Packit b099d7
Packit b099d7
  n = 0;
Packit b099d7
  XtSetArg(args[n], XmNpaneMinimum, &currentHeight); n++;
Packit b099d7
  XtGetValues(child, args, n);
Packit b099d7
  printf ("Have set paneMinimum to %d ", currentHeight);
Packit b099d7
Packit b099d7
  n = 0;
Packit b099d7
  XtSetArg(args[n], XmNpaneMaximum, &currentHeight); n++;
Packit b099d7
  XtGetValues(child, args, n);
Packit b099d7
  printf ("and paneMaximum to %d\n\n", currentHeight);
Packit b099d7
Packit b099d7
}
Packit b099d7
Packit b099d7
void PrintProcessInfo ()
Packit b099d7
{
Packit b099d7
Packit b099d7
char thingie[15];
Packit b099d7
Packit b099d7
sprintf (thingie, "-v#%d", getpid());
Packit b099d7
Packit b099d7
if (fork () != 0) /* parent */
Packit b099d7
  wait ((int *) 0);
Packit b099d7
else
Packit b099d7
  {  execl ("/bin/ps", "ps", thingie, (char *) 0);
Packit b099d7
     exit (0);
Packit b099d7
   }
Packit b099d7
Packit b099d7
}