Blame lib/Xm/ScalTics.c

Packit b099d7
/* $XConsortium: ScalTics.c /main/7 1995/12/06 21:39:58 cde-sun $ */
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
/*
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
Packit b099d7
#include <Xm/Xm.h>
Packit b099d7
#include <Xm/XmosP.h>  /* for allocate local */
Packit b099d7
#include <Xm/Scale.h>
Packit b099d7
#include <Xm/SeparatoG.h>
Packit b099d7
#include "XmI.h"
Packit b099d7
Packit b099d7
/************************************************************************
Packit b099d7
 *
Packit b099d7
 *  XmScaleSetTicks
Packit b099d7
 *
Packit b099d7
 ************************************************************************/
Packit b099d7
void
Packit b099d7
XmScaleSetTicks(
Packit b099d7
        Widget scale,
Packit b099d7
        int big_every,
Packit b099d7
        Cardinal num_med,
Packit b099d7
        Cardinal num_small, 
Packit b099d7
	Dimension  size_big,
Packit b099d7
	Dimension  size_med,
Packit b099d7
	Dimension  size_small)
Packit b099d7
{
Packit b099d7
    Widget *sep ;
Packit b099d7
    Cardinal n, i, j, k, sep_num;
Packit b099d7
    int real_num_big, real_num_med, real_num_small;
Packit b099d7
    Arg args[5];
Packit b099d7
    int max, min ;
Packit b099d7
    unsigned char orient ;
Packit b099d7
    char * dim_res ;
Packit b099d7
Packit b099d7
    _XmWidgetToAppContext(scale);
Packit b099d7
Packit b099d7
    _XmAppLock(app);
Packit b099d7
Packit b099d7
    /* Some checking first */
Packit b099d7
    if (size_big == 0) { _XmAppUnlock(app); return ; }
Packit b099d7
    if (size_med == 0) num_med = 0 ;
Packit b099d7
    if (size_small == 0) num_small = 0 ;
Packit b099d7
Packit b099d7
    /* big_every is the number of values between big tics, while
Packit b099d7
       num_med and num_small are the number of tics between resp.
Packit b099d7
       big and med values */
Packit b099d7
Packit b099d7
    /* compute num_big first */
Packit b099d7
    n = 0 ;
Packit b099d7
    XtSetArg(args[n], XmNmaximum, &max;; n++;
Packit b099d7
    XtSetArg(args[n], XmNminimum, &min); n++;
Packit b099d7
    XtSetArg(args[n], XmNorientation, &orient); n++;
Packit b099d7
    XtGetValues(scale, args, n);
Packit b099d7
    
Packit b099d7
    real_num_big = ((max - min) / big_every) + 1 ;
Packit b099d7
    if (real_num_big < 2) { _XmAppUnlock(app); return ; }
Packit b099d7
Packit b099d7
    real_num_med = (real_num_big - 1) * num_med;
Packit b099d7
    real_num_small = (real_num_big + real_num_med - 1) * num_small;
Packit b099d7
    sep_num = real_num_big + real_num_med + real_num_small;
Packit b099d7
Packit b099d7
    sep = (Widget*) ALLOCATE_LOCAL(sep_num * sizeof(Widget));
Packit b099d7
Packit b099d7
    if (orient == XmHORIZONTAL) {
Packit b099d7
	dim_res = XmNheight;
Packit b099d7
	orient = XmVERTICAL;
Packit b099d7
    } else {
Packit b099d7
	dim_res = XmNwidth ;
Packit b099d7
	orient = XmHORIZONTAL;
Packit b099d7
    }
Packit b099d7
    XtSetArg(args[0], XmNmargin, 0); 
Packit b099d7
    XtSetArg(args[1], XmNorientation, orient); 
Packit b099d7
Packit b099d7
    sep_num = 0 ;
Packit b099d7
    for (i=0; i < real_num_big; i++) {
Packit b099d7
	n = 2 ;
Packit b099d7
	XtSetArg(args[n], dim_res, size_big); n++ ;
Packit b099d7
	sep[sep_num] = XmCreateSeparatorGadget(scale, "BigTic", args, n); 
Packit b099d7
	sep_num++;
Packit b099d7
Packit b099d7
	if (i == real_num_big - 1) break ;
Packit b099d7
Packit b099d7
	for (k=0; k < num_small; k++) {
Packit b099d7
	    n = 2 ;
Packit b099d7
	    XtSetArg(args[n], dim_res, size_small); n++;
Packit b099d7
	    XtSetArg(args[n], XmNseparatorType, XmSINGLE_LINE); n++;
Packit b099d7
	    sep[sep_num] = XmCreateSeparatorGadget(scale, "SmallTic", 
Packit b099d7
						   args, n); 
Packit b099d7
	    sep_num++;
Packit b099d7
	}
Packit b099d7
Packit b099d7
	for (j=0; j < num_med; j++) {
Packit b099d7
	    n = 2 ;
Packit b099d7
	    XtSetArg(args[n], dim_res, size_med); n++;
Packit b099d7
	    sep[sep_num] = XmCreateSeparatorGadget(scale, "MedTic", args, n); 
Packit b099d7
	    sep_num++;
Packit b099d7
	    for (k=0; k < num_small; k++) {
Packit b099d7
		n = 2 ;
Packit b099d7
		XtSetArg(args[n], dim_res, size_small); n++;
Packit b099d7
		XtSetArg(args[n], XmNseparatorType, XmSINGLE_LINE); n++;
Packit b099d7
		sep[sep_num] = XmCreateSeparatorGadget(scale, "SmallTic", 
Packit b099d7
						       args, n); 
Packit b099d7
		sep_num++;
Packit b099d7
	    }
Packit b099d7
	    
Packit b099d7
	}
Packit b099d7
    }
Packit b099d7
Packit b099d7
    XtManageChildren(sep, sep_num);			
Packit b099d7
    DEALLOCATE_LOCAL((char*)sep);
Packit b099d7
Packit b099d7
    _XmAppUnlock(app);
Packit b099d7
}
Packit b099d7
Packit b099d7