dwight@geohub.enet.dec.com (Dwight D. Moore) (01/03/91)
I am writing a piece of code that uses several scale widgets with range
min...max.
The problem seems to be that I cannot resize this widget and therefore, I
cannot get scale
the scale to increment by single units (it incre/decre by units of 4 right
now).
........................................................................
.......................................................................
#include <stdio.h>
#include <Xt/Intrinsic.h>
#include <Xt/Shell.h>
#include <Xm/Xm.h>
#include <Xm/MainW.h>
#include <Xm/Form.h>
#include <Xm/Frame.h>
#include <Xm/Label.h>
#include <Xm/PushB.h>
#include <Xm/PushBG.h>
#include <Xm/RowColumn.h>
#include <Xm/Scale.h>
typedef struct cscale_struct {
int min;
int max;
char *title;
int width;
int height;
int decimalpts;
} CScale;
CScale *scaleptr;
CScale rgb_scales[] = {
{0, 255, "Red", 350, SCALE_HEIGHT, 0},
{0, 255, "Green", 350, SCALE_HEIGHT, 0},
{0, 255, "Blue", 350, SCALE_HEIGHT, 0},
};
#define RGB_SCALE_CNT sizeof (rgb_scales) / sizeof (CScale)
#define MAX_SCALES 3
#define MAX_ARGS 20
Arg XmArgv[MAX_ARGS]; /* Widget arg list */
Cardinal XmArgc; /* arg list counter */
Widget toplevel; /* toplevel widget */
Widget mainwindow; /* Main window */
Widget mainform; /* Form dialog widget..a container */
Widget scaleform; /* Form dialog widget for scales */
Widget frame, rc; /* Frame widget and RowColumn widget */
Widget menubar; /* Menu bar */
Widget filepulldown, /* Pulldown menu...File control/quit */
filecascade,
QuitBtn;
Widget ColorBtns [MAX_COLOR_BTNS];
Widget scales [MAX_SCALES];
Display *dpy;
int screen_num;
Screen screen;
void Create_MainWindow ()
{
...
.......
.......
** Create another form widget for the scales
*/
XmArgc = 0;
XtSetArg (XmArgv[XmArgc], XmNtopAttachment, XmATTACH_WIDGET); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNtopWidget, frame); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNleftAttachment, XmATTACH_POSITION); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNleftPosition, FRAME_LEFT_POSITION); XmArgc++;
scaleform = XmCreateForm (mainform, "form", XmArgv, XmArgc);
XtManageChild (scaleform);
n_scales = RGB_SCALE_CNT;
scaleptr = (CScale *) itm_scales;
XtSetArg (XmArgv[XmArgc], XmNshowValue, True); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNvalue, 10); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNorientation, XmHORIZONTAL); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNprocessingDirection, XmMAX_ON_RIGHT);
XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNtopAttachment, XmATTACH_FORM); XmArgc++;
for (i=0, tmp=XmArgc; i < n_scales; i++, scaleptr++)
{
XmArgc = tmp;
XtSetArg (XmArgv[XmArgc], XmNminimum, scaleptr->min); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNmaximum, scaleptr->max); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNtitleString,
XmStringCreate (scaleptr->title, XmSTRING_DEFAULT_CHARSET));
XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNscaleWidth, scaleptr->width); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNwidth, 200);
XtSetArg (XmArgv[XmArgc], XmNdecimalPoints, scaleptr->decimalpts);
XmArgc++;
if (i == 0)
{
XtSetArg (XmArgv[XmArgc], XmNleftAttachment, XmATTACH_FORM);
XmArgc++;
}
else
{
XtSetArg (XmArgv[XmArgc], XmNleftAttachment, XmATTACH_WIDGET);
XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNleftWidget, scales[i-1]); XmArgc++;
XtSetArg (XmArgv[XmArgc], XmNleftOffset, SCALE_OFFSET); XmArgc++;
}
scales[i] = XmCreateScale (scaleform, "cscale", XmArgv, XmArgc);
XtManageChild (scales[i]);
}
Any ideas?
------------------------------------------------------------------------
---------
Dwight D. Moore
Geosciences Computing Network
University of Oklahoma
dwight@geohub.gcn.uoknor.edu (129.15.40.10)
------------------------------------------------------------------------
---------
Insert your standard disclaimer using a No. 2 pencil or Black/Blue pen:
--------------------------------------------------------------------------------