|
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 |
|