Ejemplo n.º 1
0
void UI2DView::Set (DBRegion region)

	{
	int value, sliderSize;
	double freeLength, dVal;
	DBRegion dataEXT = (UIDataset ())->Extent ();

	SetExtent (region);
	SetActiveExtent (ViewEXT);

	sliderSize = (int) ((ViewEXT.UpperRight.X - ViewEXT.LowerLeft.X) * 100.0 /
							  (dataEXT.UpperRight.X - dataEXT.LowerLeft.X));
	sliderSize = sliderSize < 100 ? sliderSize : 100;
	sliderSize = sliderSize > 	 1 ? sliderSize :   1;
	freeLength = (dataEXT.UpperRight.X - dataEXT.LowerLeft.X) - (ViewEXT.UpperRight.X - ViewEXT.LowerLeft.X);
	if (freeLength == (double) 0.0) value = 0;
	else
		{
		value = (int) ((ViewEXT.LowerLeft.X - dataEXT.LowerLeft.X) * (100.0 - sliderSize) / freeLength);
		value = value < 100 - sliderSize ? value : 100 - sliderSize;
		value = value > 0 ? value : 0;
		}
	XmScrollBarSetValues (HorScrollBarW,value,sliderSize,(int) 0x0L,sliderSize,false);

	sliderSize = (int) ((ViewEXT.UpperRight.Y - ViewEXT.LowerLeft.Y) * 100.0 /
							  (dataEXT.UpperRight.Y - dataEXT.LowerLeft.Y));
	sliderSize = sliderSize < 100 ? sliderSize : 100;
	sliderSize = sliderSize > 	 1 ? sliderSize :   1;

	freeLength = (dataEXT.UpperRight.Y - dataEXT.LowerLeft.Y) - (ViewEXT.UpperRight.Y - ViewEXT.LowerLeft.Y);
	if (freeLength == (double) 0.0) value = 0;
	else
		{
		value = (int) ((dataEXT.UpperRight.Y - ViewEXT.UpperRight.Y) * (100.0 - sliderSize) / freeLength);
		value = value < 100 - sliderSize ? value : 100 - sliderSize;
		value = value > 0 ? value : 0;
		}
	XmScrollBarSetValues (VerScrollBarW,value,sliderSize,(int) 0x0L,sliderSize,false);

	dVal = (ViewEXT.UpperRight.X - ViewEXT.LowerLeft.X) / (dataEXT.UpperRight.X - dataEXT.LowerLeft.X) <
			 (ViewEXT.UpperRight.Y - ViewEXT.LowerLeft.Y) / (dataEXT.UpperRight.Y - dataEXT.LowerLeft.Y) ?
			 (ViewEXT.UpperRight.X - ViewEXT.LowerLeft.X) / (dataEXT.UpperRight.X - dataEXT.LowerLeft.X) :
			 (ViewEXT.UpperRight.Y - ViewEXT.LowerLeft.Y) / (dataEXT.UpperRight.Y - dataEXT.LowerLeft.Y);
	value = (int) (dVal * 100.0);
	value = value < 100 ? value : 100;
	value = value > 0 ? value : 0;

	XmScaleSetValue (ScaleW,value);
	Draw ();
	}
Ejemplo n.º 2
0
void Browser::adjustScrollBar(Boolean top)
{
    int min;
    int max;
    int value;
    int slider_size;
    int inc;
    int page_inc;

    //
    // The idea is to place the slide bar 1/2 a "slider_size" away from the end.
    //
    XtVaGetValues(this->vsb, 
		  XmNminimum, &min,
		  XmNmaximum, &max,
		  NULL);
    XmScrollBarGetValues(this->vsb, &value, &slider_size, &inc, &page_inc);

    if(top)
    {
	value = min + slider_size/2;
	    if(this->page_start == 0) value = min;
	if(value > max - slider_size) value = max - slider_size;
    }
    else
    {
	value = max - slider_size/2 - slider_size;
	if(value > max - slider_size) value = max - slider_size;
	if(this->page_start == this->file_size - this->page_size) 
	    value = max - slider_size;
	if(value < min) value = min;
    }
	
    XmScrollBarSetValues(this->vsb, value, slider_size, inc, page_inc, True);
}
Ejemplo n.º 3
0
void Browser::lastPage()
{
    unsigned long offset;

    if(this->page_size > this->file_size)
	offset = 0;
    else
	offset = this->file_size - this->page_size;
    this->loadBuffer(offset);

    //
    // Put the slider at the end.
    //
    int max;
    int value;
    int slider_size;
    int inc;
    int page_inc;

    XtVaGetValues(this->vsb, 
		  XmNmaximum, &max,
		  NULL);

    XmScrollBarGetValues(this->vsb, &value, &slider_size, &inc, &page_inc);
    XmScrollBarSetValues(this->vsb, max-slider_size, 
			 slider_size, inc, page_inc, True);
    this->updateOffsets(0);
}
Ejemplo n.º 4
0
void SetDisplay (ImageDisplay* IDdata) 
/*  sets size and position of the Image display window */
{
     int iXHalf, iYHalf, inXZoom, inYZoom, iScrWid, iScrHei;
     int iZoom, ch1;
     Dimension cwid, chei;
     char *ZP;
     Display     *dpy = XtDisplay (IDdata->display);
     unsigned int unx, uny;
     unsigned long pasize, ilong;
     int value, slider_size, increment, page_increment;
     int sbar_width = SBAR_WIDTH; 

/* update info in control pixel info area*/
     UpdateInfo(IDdata);  

/* don't bother if there's no valid image yet */
     if (!IDdata) return; /* shouldn't happen */
     if (!image[CurImag].valid) { /* set display for no image */
      /* no scroll bars */
      if (XtIsRealized (IDdata->hscroll)) XtUnmapWidget (IDdata->hscroll);
      IDdata->hscr_vis = 0;
      if (XtIsRealized (IDdata->vscroll)) XtUnmapWidget (IDdata->vscroll);
      IDdata->vscr_vis = 0;
      /* no image - give default label */
      XtVaSetValues(IDdata->shell, XmNtitle, "XFITSview", NULL);
/* hide display */
      if (XtIsRealized (IDdata->canvas)) XtUnmapWidget (IDdata->canvas);
      return;}

/*                    maximum display size */
     XtVaGetValues (IDdata->display,
		    XmNwidth, &cwid,
		    XmNheight, &chei,
		    NULL);
/*     cwid = cwid - CONTROLWIDTH;  leave room for control panel */
     IDdata->disp_wid = cwid;
     IDdata->disp_hei = chei;

     iZoom = IDdata->zoom; /* for convinence */

/*         display should be an integral multiple of image pixels */
     if (iZoom>1)
        {IDdata->disp_wid =
            ((IDdata->disp_wid/iZoom)*iZoom);
         IDdata->disp_hei =
            ((IDdata->disp_hei/iZoom)*iZoom);}
/*                    zoomed image size */
     inXZoom = image[CurImag].iImageNx;
     if (iZoom>1) inXZoom =  inXZoom * iZoom;
     if (iZoom<0) inXZoom = -inXZoom / iZoom;
     inYZoom = image[CurImag].iImageNy;
     if (iZoom>1) inYZoom =  inYZoom * iZoom;
     if (iZoom<0) inYZoom = -inYZoom / iZoom;
/*                     scroll bar size */
     iScrWid = sbar_width;
     iScrHei = sbar_width;
/*                      scroll bars needed? (iterate to get it right) */
     if ((IDdata->disp_wid-iScrWid)>=inXZoom) iScrHei = 0;
     if ((IDdata->disp_hei-iScrHei)>=inYZoom) iScrWid = 0;
     if ((IDdata->disp_wid-iScrWid)>=inXZoom) iScrHei = 0;
     if ((IDdata->disp_hei-iScrHei)>=inYZoom) iScrWid = 0;
     if (image[CurImag].valid) /* something in display? */
              /* Display needn't be larger than display+scrollbars */
              /* This sets the image size for no & negative zooms */
       {IDdata->disp_wid=min(IDdata->disp_wid, inXZoom+iScrWid);
        IDdata->disp_hei=min(IDdata->disp_hei,inYZoom+iScrHei);}
/*                      correct for size of scroll bars */
     IDdata->disp_wid -= iScrWid; 
     if (IDdata->disp_wid<0) IDdata->disp_wid = iScrWid;
     IDdata->disp_hei -= iScrHei; 
     if (IDdata->disp_hei<0) IDdata->disp_hei = iScrHei;
/*   Display may still be too big */
     if (image[CurImag].valid) /* something in display? */
       {IDdata->disp_wid = min (IDdata->disp_wid, inXZoom);
        IDdata->disp_hei = min (IDdata->disp_hei, inYZoom);}
     else
       {IDdata->disp_wid += iScrWid;  /* no scroll bars if no image */
        IDdata->disp_hei += iScrHei;} 
/* leave at least the width of the scroll bars (SBAR_WIDTH) around the edge */
     IDdata->disp_wid = min (IDdata->disp_wid, (int)cwid-sbar_width);
     IDdata->disp_hei = min (IDdata->disp_hei, (int)chei-sbar_width);
/*                    display should have an even number  of rows */
/*     IDdata->disp_hei = 2 * ((IDdata->disp_hei+1)/2); */

/* resize window */
     if (XtIsRealized (IDdata->canvas)) XtMapWidget (IDdata->canvas);
     XtResizeWidget(IDdata->canvas, 
		    (Dimension)IDdata->disp_wid,
		    (Dimension)IDdata->disp_hei, 
		    (Dimension)0);

/*                      Half Size of display in image pixels */
     iXHalf = IDdata->disp_wid/2;
     if (iZoom>1) iXHalf =  iXHalf / iZoom;
     if (iZoom<0) iXHalf = -iXHalf * iZoom;
     iYHalf = IDdata->disp_hei/2;
     if (iZoom>1) iYHalf =  iYHalf / iZoom;
     if (iZoom<0) iYHalf = -iYHalf * iZoom;
     iXHalf = min (iXHalf, image[CurImag].iImageNx/2);
     iYHalf = min (iYHalf, image[CurImag].iImageNy/2);

/* setup and center scroll */
/*     IDdata->scrollx = image[CurImag].iImageNx / 2; */
/*     IDdata->scrolly = image[CurImag].iImageNy / 2; */
     IDdata->hscr_max = image[CurImag].iImageNx-2*iXHalf;
     IDdata->hscr_min = 1;
     if (IDdata->hscr_max<=IDdata->hscr_min) 
       IDdata->hscr_max = IDdata->hscr_min + 1;
     IDdata->hscr_half = iXHalf;
     value = IDdata->scrollx - iXHalf;
     slider_size = 2 * iXHalf;
     increment = iXHalf / 5; if (increment<1) increment = 1;
     page_increment = 3 * iXHalf / 2; if (page_increment<1) page_increment = 1;
     if (value>IDdata->hscr_max) value = IDdata->hscr_max;
     if (value<IDdata->hscr_min) value = IDdata->hscr_min;
     if (iScrHei)
       {
         /* keep X-Windows from blowing it's tiny mind */
         XmScrollBarSetValues (IDdata->hscroll, 1, 1, 1, 1, False);
	 XtVaSetValues(IDdata->hscroll, 
		     XmNheight,    iScrHei,
		     XmNvalue,     value,
		     XmNmaximum,   (Dimension)(IDdata->hscr_max+2*iXHalf),
		     XmNminimum,   (Dimension)(IDdata->hscr_min),
		     NULL);
	XmScrollBarSetValues (IDdata->hscroll, value, slider_size, increment, 
			      page_increment, False);}
     IDdata->vscr_max = image[CurImag].iImageNy-2*iYHalf;
     IDdata->vscr_min = 1;
     if (IDdata->vscr_max<=IDdata->vscr_min) 
       IDdata->vscr_max = IDdata->vscr_min + 1;
     IDdata->vscr_half = iYHalf;
     value = IDdata->scrolly - iYHalf;
     slider_size = 2 * iYHalf;
     increment = iYHalf / 5; if (increment<1) increment = 1;
     page_increment = 3 * iYHalf / 2; if (page_increment<1) page_increment = 1;
     if (value>IDdata->vscr_max) value = IDdata->vscr_max;
     if (value<IDdata->vscr_min) value = IDdata->vscr_min;
     if (iScrWid)
       {
         /* keep X-Windows from blowing it's tiny mind */
         XmScrollBarSetValues (IDdata->vscroll, 1, 1, 1, 1, False);
	 XtVaSetValues(IDdata->vscroll, 
		     XmNwidth,     iScrWid,
		     XmNvalue,     value,
		     XmNmaximum,   (Dimension)(IDdata->vscr_max+2*iYHalf),
		     XmNminimum,   (Dimension)(IDdata->vscr_min),
		     NULL);
	XmScrollBarSetValues (IDdata->vscroll, value, slider_size, increment, 
			      page_increment, False);}

/*     make horizonal scroll bar visible or invisible as necessary */
/*  iScrHei = 0 => no horizontal scroll */
     if (iScrHei) /* visible */
       {XtMapWidget (IDdata->hscroll);
	IDdata->hscr_vis = 1;}
     else /* invisible */
       {XtUnmapWidget (IDdata->hscroll);
	IDdata->hscr_vis = 0;}

/*     make vertical scroll bar visible or invisible as necessary */
/*  iScrWid = 0 => no vertical scroll */
     if (iScrWid) /* visible */
       {XtMapWidget (IDdata->vscroll);
	IDdata->vscr_vis = 1;}
     else /* invisible */
       {XtUnmapWidget (IDdata->vscroll);
	IDdata->vscr_vis = 0;}

/* make work ZPixmap for zooming display */
     if (iZoom!=1) 
       {
/* delete old if necessary*/
	 unx = IDdata->disp_wid;
	 uny = IDdata->disp_hei;
	 if ( !IDdata->work || 
	     (unx>IDdata->work->width) || (uny>IDdata->work->height)) 
	   {
	     if (IDdata->work) 
	       {if (IDdata->work->data) XtFree(IDdata->work->data);
		XtFree((XtPointer)IDdata->work);}

/* create new pix map */
	     pasize = unx * uny * ((IDdata->depth+1)/8);
	     ZP = (char*) XtMalloc (pasize);
	     IDdata->work = 
	       XCreateImage (dpy, 
			     DefaultVisual(dpy, DefaultScreen(dpy)), 
			     IDdata->depth, ZPixmap, 0, 
			     ZP, unx, uny, 8, 0); 
/* blank it out */
	     for (ilong=0; ilong<pasize; ilong++) 
	       IDdata->work->data[ilong] = 0;
  
	   }} /* end of create new ZPixmap */

} /* end SetDisplay */