Example #1
0
/* $sb fraction $x $y --
 * 	Returns a real number between 0 and 1 indicating  where  the
 * 	point given by x and y lies in the trough area of the scrollbar. 
 */
static int
ScrollbarFractionCommand(
    Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], void *recordPtr)
{
    Scrollbar *sb = recordPtr;
    Ttk_Box b = sb->scrollbar.troughBox;
    int minSize = sb->scrollbar.minSize;
    double x, y;
    double fraction = 0.0;

    if (objc != 4) {
	Tcl_WrongNumArgs(interp, 2, objv, "x y");
	return TCL_ERROR;
    }

    if (Tcl_GetDoubleFromObj(interp, objv[2], &x) != TCL_OK
	|| Tcl_GetDoubleFromObj(interp, objv[3], &y) != TCL_OK)
    {
	return TCL_ERROR;
    }

    fraction = 0.0;
    if (sb->scrollbar.orient == TTK_ORIENT_VERTICAL) {
	if (b.height > minSize) {
	    fraction = (double)(y - b.y) / (double)(b.height - minSize);
	}
    } else {
	if (b.width > minSize) {
	    fraction = (double)(x - b.x) / (double)(b.width - minSize);
	}
    }

    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(fraction));
    return TCL_OK;
}
Example #2
0
static void PbarElementDraw(
    void *clientData, void *elementRecord, Tk_Window tkwin,
    Drawable d, Ttk_Box b, Ttk_State state)
{
    PbarElement *pbar = elementRecord;
    int orientation = TTK_ORIENT_HORIZONTAL;
    double value = 0, maximum = 100;
    int phase = 0;
    ThemeTrackDrawInfo info;

    Ttk_GetOrientFromObj(NULL, pbar->orientObj, &orientation);
    Tcl_GetDoubleFromObj(NULL, pbar->valueObj, &value);
    Tcl_GetDoubleFromObj(NULL, pbar->maximumObj, &maximum);
    Tcl_GetIntFromObj(NULL, pbar->phaseObj, &phase);

    if (!strcmp("indeterminate", Tcl_GetString(pbar->modeObj)) && value) {
	info.kind = kThemeIndeterminateBar;
    } else {
	info.kind = kThemeProgressBar;
    }
    info.bounds = BoxToRect(d, b);
    info.min = 0;
    info.max = (int) maximum;	/* @@@ See note above */
    info.value = (int) value;
    info.attributes = orientation == TTK_ORIENT_HORIZONTAL
	    ? kThemeTrackHorizontal : 0;
    info.attributes |= kThemeTrackShowThumb;
    info.enableState = Ttk_StateTableLookup(ThemeTrackEnableTable, state);
    info.trackInfo.progress.phase = phase;

    BEGIN_DRAWING(d)
    ChkErr(DrawThemeTrack, &info, NULL, NULL, 0);
    END_DRAWING
}
Example #3
0
File: tcltk.c Project: kmillar/rho
SEXP RTcl_ObjAsDoubleVector(SEXP args)
{
    int count;
    Tcl_Obj **elem, *obj;
    int ret, i;
    double x;
    SEXP ans;

    obj = (Tcl_Obj *) R_ExternalPtrAddr(CADR(args));
    if (!obj) error(_("invalid tclObj -- perhaps saved from another session?"));

    /* First try for single value */
    ret = Tcl_GetDoubleFromObj(RTcl_interp, obj, &x);
    if (ret == TCL_OK) return ScalarReal(x);

    /* Then try as list */
    ret = Tcl_ListObjGetElements(RTcl_interp, obj, &count, &elem);
    if (ret != TCL_OK) /* didn't work, return NULL */
	return R_NilValue;

    ans = allocVector(REALSXP, count);
    for (i = 0 ; i < count ; i++){
	ret = Tcl_GetDoubleFromObj(RTcl_interp, elem[i], &x);
	if (ret != TCL_OK) x = NA_REAL;
	REAL(ans)[i] = x;
    }
    return ans;
}
Example #4
0
/* void draw_text_f (ESContext *esContext, float x1, float y1, float w, float h, char *file, char *text) { */
int tclcmd_draw_text_f (ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) {
    int len = 0;
    if (objc != 7) {
        Tcl_WrongNumArgs (interp, 1, objv, "{ESContext *esContext} { float x1} { float y1} { float w} { float h} { char *file} { char *text}");
        return TCL_ERROR;
    }
    double arg_x1;
    if (Tcl_GetDoubleFromObj(interp, objv[1], (double *)&arg_x1) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_y1;
    if (Tcl_GetDoubleFromObj(interp, objv[2], (double *)&arg_y1) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_w;
    if (Tcl_GetDoubleFromObj(interp, objv[3], (double *)&arg_w) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_h;
    if (Tcl_GetDoubleFromObj(interp, objv[4], (double *)&arg_h) != TCL_OK) {
        return TCL_ERROR;
    }
    char arg_file[1024];
    strncpy(arg_file, Tcl_GetStringFromObj(objv[5], &len), 1024);
    char arg_text[1024];
    strncpy(arg_text, Tcl_GetStringFromObj(objv[6], &len), 1024);
    draw_text_f(GlobalesContext, (float)arg_x1, (float)arg_y1, (float)arg_w, (float)arg_h, arg_file, arg_text);
    return TCL_OK;
}
Example #5
0
static int
rotate(ClientData clientData, Tcl_Interp *interp, int objc,
        Tcl_Obj *const *objv)
{
    WHIRLYGIZMO *Wg;
    Togl   *togl;

    if (objc != 4) {
        Tcl_WrongNumArgs(interp, 1, objv, "pathName yrot xrot");
        return TCL_ERROR;
    }

    if (Togl_GetToglFromObj(interp, objv[1], &togl) != TCL_OK) {
        return TCL_ERROR;
    }

    Wg = (WHIRLYGIZMO *) Togl_GetClientData(togl);

    if (Tcl_GetDoubleFromObj(interp, objv[2], &Wg->Roty) != TCL_OK) {
        return TCL_ERROR;
    }
    if (Tcl_GetDoubleFromObj(interp, objv[3], &Wg->Rotx) != TCL_OK) {
        return TCL_ERROR;
    }
    Togl_PostRedisplay(togl);

    return TCL_OK;
}
Example #6
0
int NLEnergy_add_bondprm(NLEnergy *p, Tcl_Interp *interp,
    int objc, Tcl_Obj *const objv[]) {
  ForcePrm *fprm = &(p->fprm);
  BondPrm a;
  const char *t = NULL;
  int n;
  double d;
  Tcl_Obj **aobjv;
  int aobjc;
  int32 id;

  TEXT("bondprm");
  if (objc != 3) return ERROR(ERR_EXPECT);
  t = Tcl_GetStringFromObj(objv[0], &n);
  if (n >= sizeof(AtomType) || 0==t[0]) return ERROR(ERR_EXPECT);
  strcpy(a.atomType[0], t);
  t = Tcl_GetStringFromObj(objv[1], &n);
  if (n >= sizeof(AtomType) || 0==t[0]) return ERROR(ERR_EXPECT);
  strcpy(a.atomType[1], t);
  if (TCL_ERROR==Tcl_ListObjGetElements(interp, objv[2], &aobjc, &aobjv)
      || aobjc != 2) return ERROR(ERR_EXPECT);
  if (TCL_ERROR==Tcl_GetDoubleFromObj(interp, aobjv[0], &d)
      || d < 0) return ERROR(ERR_EXPECT);
  a.k = d * ENERGY_INTERNAL;
  if (TCL_ERROR==Tcl_GetDoubleFromObj(interp, aobjv[1], &d)
      || d < 0) return ERROR(ERR_EXPECT);
  a.r0 = d;
  if ((id=ForcePrm_add_bondprm(fprm, &a)) < OK) {
    return (id < FAIL ? ERROR(id) : FAIL);
  }
  if ((n=Topology_setprm_bond_array(&(p->topo))) < FAIL) return ERROR(n);
  return OK;
}
Example #7
0
static int findItemAt( Tcl_Interp *interp,
      int objc, Tcl_Obj * const objv[], CanvasParams *params )
{
   double   x, y;
   GnomeCanvasItem *item;
   Gnocl_CanvasItemInfo *info;

   if( objc != 4 )
   {
      Tcl_WrongNumArgs( interp, 2, objv, /* canvas findItemAt */ "x y" );
      return TCL_ERROR;
   }

   if( Tcl_GetDoubleFromObj( interp, objv[2], &x ) != TCL_OK )
      return TCL_ERROR;
   if( Tcl_GetDoubleFromObj( interp, objv[3], &y ) != TCL_OK )
      return TCL_ERROR;
   
   item = gnome_canvas_get_item_at( params->canvas, x, y );
   /* printf( "item: %p %f %f\n", item, x, y ); */
   info = gnoclInfoFromCanvasItem( params, item );
   if( info )
      Tcl_SetObjResult( interp, Tcl_NewIntObj( info->id ) );

   return TCL_OK;
}
Example #8
0
/* $sb delta $dx $dy --
 * 	Returns the percentage change corresponding to a mouse movement
 * 	of $dx, $dy.
 */
static int
ScrollbarDeltaCommand(
    Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], void *recordPtr)
{
    Scrollbar *sb = recordPtr;
    double dx, dy;
    double delta = 0.0;

    if (objc != 4) {
	Tcl_WrongNumArgs(interp, 2, objv, "dx dy");
	return TCL_ERROR;
    }

    if (Tcl_GetDoubleFromObj(interp, objv[2], &dx) != TCL_OK
	|| Tcl_GetDoubleFromObj(interp, objv[3], &dy) != TCL_OK)
    {
	return TCL_ERROR;
    }

    delta = 0.0;
    if (sb->scrollbar.orient == TTK_ORIENT_VERTICAL) {
	int size = sb->scrollbar.troughBox.height - sb->scrollbar.minSize;
	if (size > 0) {
	    delta = (double)dy / (double)size;
	}
    } else {
	int size = sb->scrollbar.troughBox.width - sb->scrollbar.minSize;
	if (size > 0) {
	    delta = (double)dx / (double)size;
	}
    }

    Tcl_SetObjResult(interp, Tcl_NewDoubleObj(delta));
    return TCL_OK;
}
Example #9
0
static int
ScaleCoordsCommand(
    void *recordPtr, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
    Scale *scalePtr = recordPtr;
    double value;
    int r = TCL_OK;

    if (objc < 2 || objc > 3) {
	Tcl_WrongNumArgs(interp, 1, objv, "coords ?value?");
	return TCL_ERROR;
    }

    if (objc == 3) {
	r = Tcl_GetDoubleFromObj(interp, objv[2], &value);
    } else {
	r = Tcl_GetDoubleFromObj(interp, scalePtr->scale.valueObj, &value);
    }

    if (r == TCL_OK) {
	Tcl_Obj *point[2];
	XPoint pt = ValueToPoint(scalePtr, value);
	point[0] = Tcl_NewIntObj(pt.x);
	point[1] = Tcl_NewIntObj(pt.y);
	Tcl_SetObjResult(interp, Tcl_NewListObj(2, point));
    }
    return r;
}
Example #10
0
int tcl_pmepot_add(ClientData nodata, Tcl_Interp *interp,
			int objc, Tcl_Obj *const objv[]) {

  int cell_count, atom_count, sub_count, i, j;
  Tcl_Obj **cell_list, **atom_list, **sub_list;
  float cell[12], *atoms;
  double d;
  pmepot_data *data;
  if ( objc != 4 ) {
    Tcl_SetResult(interp,"args: handle {{o...} {a...} {b...} {c...}} {{x y z q}...}",TCL_VOLATILE);
    return TCL_ERROR;
  }
  data = Tcl_GetAssocData(interp, Tcl_GetString(objv[1]), 0);
  if ( ! data ) {
    Tcl_SetResult(interp,"Pmepot bug: unable to access handle.",TCL_VOLATILE);
    return TCL_ERROR;
  }

  if ( Tcl_ListObjGetElements(interp,objv[2],&cell_count,&cell_list) != TCL_OK ) return TCL_ERROR;
  if ( cell_count != 4 ) {
    Tcl_SetResult(interp,"cell format: {{ox oy oz} {ax ay az} {bx by bz} {cx cy cz}}",TCL_VOLATILE);
    return TCL_ERROR;
  }
  for ( i=0; i<4; ++i ) {
    if ( Tcl_ListObjGetElements(interp,cell_list[i],&sub_count,&sub_list) != TCL_OK ) return TCL_ERROR;
    if ( sub_count != 3 ) {
      Tcl_SetResult(interp,"cell format: {{ox oy oz} {ax ay az} {bx by bz} {cx cy cz}}",TCL_VOLATILE);
      return TCL_ERROR;
    }
    for ( j=0; j<3; ++j ) {
      if ( Tcl_GetDoubleFromObj(interp,sub_list[j],&d) != TCL_OK ) return TCL_ERROR;
      cell[3*i+j] = d;
    }
  }
  if ( Tcl_ListObjGetElements(interp,objv[3],&atom_count,&atom_list) != TCL_OK ) return TCL_ERROR;
  atoms = malloc(atom_count*4*sizeof(float));
  for ( i=0; i<atom_count; ++i ) {
    if ( Tcl_ListObjGetElements(interp,atom_list[i],&sub_count,&sub_list) != TCL_OK ) { free(atoms); return TCL_ERROR; }
    if ( sub_count != 4 ) {
      Tcl_SetResult(interp,"atoms format: {{x y z q}...}",TCL_VOLATILE);
      free(atoms); return TCL_ERROR;
    }
    for ( j=0; j<4; ++j ) {
      if ( Tcl_GetDoubleFromObj(interp,sub_list[j],&d) != TCL_OK ) { free(atoms); return TCL_ERROR; }
      atoms[4*i+j] = d;
    }
  }

  if ( pmepot_add(data,cell,atom_count,atoms) ) {
    Tcl_SetResult(interp,"Pmepot bug: pmepot_add failed.",TCL_VOLATILE);
    free(atoms);
    return TCL_ERROR;
  }

  free(atoms);
  return TCL_OK;
}
Example #11
0
/****
 * implementation of Tcl shape_create routine 
 ****/
int tclShapeCreate(ClientData data,Tcl_Interp* interp,int argc, char *argv[])
{
   int slot, i, j, k, len, shft;
   char expr[2048];
   double a, p;
   Tcl_Obj *tclres;

  if ( (argc < 2) || (argc > 6) )
    return TclError(interp,"usage: shape_create <num of lems> | -ampl <ampl expr> | -phase <phase expr>");
  if (Tcl_GetInt(interp,argv[1],&len) == TCL_ERROR)
    return TclError(interp,"shape_create: argument 1 must be integer <num of elems>");

  /* get a new slot and allocate */
  slot = RFshapes_slot();
  if (slot == -1) {
     return TclError(interp,"shape_create error: no more free slots available, free some shape first!");
  }
  RFshapes[slot] = RFshapes_alloc(len);

  for (i=1; i<=len; i++) {
     RFshapes[slot][i].ampl = 0.0;
     RFshapes[slot][i].phase = 0.0;
  }

  for (i=2; i<argc; i++) {
     if (!strcmp(argv[i],"-ampl")) {
        i++;
        /* evaluate expression in Tcl */
        for (j=1; j<=len; j++) {
           sprintf(expr,"\n set i %d\n expr %s\n", j, argv[i]);
           if ( Tcl_EvalEx(interp, expr, -1,TCL_EVAL_DIRECT) != TCL_OK ) 
              return TclError(interp,"error in shape_create: can not evaluate %s for index %d",argv[i], j);
           tclres = Tcl_GetObjResult(interp);
           if ( Tcl_GetDoubleFromObj(interp,tclres,&a) != TCL_OK )
              return TclError(interp,"error in shape_create: can not get amplitude result for index %d",j);
           RFshapes[slot][j].ampl = a;
        }
     } else if (!strcmp(argv[i],"-phase")) {
        i++;
        /* evaluate expression in Tcl */
        for (j=1; j<=len; j++) {
           sprintf(expr,"\n set i %d\n expr %s\n", j, argv[i]);
           if ( Tcl_EvalEx(interp, expr, -1,TCL_EVAL_DIRECT) != TCL_OK ) 
              return TclError(interp,"error in shape_create: can not evaluate %s for index %d",argv[i], j);
           tclres = Tcl_GetObjResult(interp);
           if ( Tcl_GetDoubleFromObj(interp,tclres,&p) != TCL_OK )
              return TclError(interp,"error in shape_create: can not get amplitude result for index %d",j);
           RFshapes[slot][j].phase = p;
        }
     }
  }   

  sprintf(interp->result,"%d",slot);

  return TCL_OK;
}
Example #12
0
static int windowToCanvas( Tcl_Interp *interp,
      int objc, Tcl_Obj * const objv[], CanvasParams *params, int reverse )
{
   Tcl_Obj *resList;
   int     noCoords, n;
   if( objc != 3 )
   {
      Tcl_WrongNumArgs( interp, 2, objv, 
            /* canvas windowToCanvas */
            "list-of-coordinates ?option val ...?" );
      return TCL_ERROR;
   }
   /* TODO  
         -only [xy]:          only x, y coordinates
         -pairs [true|false]: list of coordinate pairs (lists)
   */
   if( Tcl_ListObjLength( interp, objv[2], &noCoords ) != TCL_OK
         || ( noCoords % 2 ) )
   {
      Tcl_SetResult( interp, 
            "size of list-of-coordinates must be even", 
            TCL_STATIC );
      return TCL_ERROR;
   }
   resList = Tcl_NewListObj( 0, NULL );
   for( n = 0; n < noCoords; n += 2 )
   {
      Tcl_Obj *tp;
      double xw, yw, x, y;
      int ret = Tcl_ListObjIndex( interp, objv[2], n, &tp );
      if( ret == TCL_OK )
         ret = Tcl_GetDoubleFromObj( interp, tp, &xw );
      if( ret == TCL_OK )
         ret = Tcl_ListObjIndex( interp, objv[2], n + 1, &tp );
      if( ret == TCL_OK )
         ret = Tcl_GetDoubleFromObj( interp, tp, &yw );

      if( ret != TCL_OK )
      {
         Tcl_DecrRefCount( resList );  /* FIXME: is this correct? */
         return TCL_ERROR;
      }
      if( reverse )
         gnome_canvas_world_to_window( params->canvas, xw, yw, &x, &y );
      else
         gnome_canvas_window_to_world( params->canvas, xw, yw, &x, &y );
      Tcl_ListObjAppendElement( interp, resList, Tcl_NewDoubleObj( x ) );
      Tcl_ListObjAppendElement( interp, resList, Tcl_NewDoubleObj( y ) );
   }
   Tcl_SetObjResult( interp, resList );

   return TCL_OK;
}
Example #13
0
static void parse_args_obj_set(cli_args *a, char *store, Tcl_Obj *val) {
    if (a->type == ARG_OBJ) {
	*((Tcl_Obj **)&store[a->offset]) = val;
    } else if (a->type == ARG_STR) {
	*((char **)&store[a->offset]) = Tcl_GetStringFromObj(val, NULL);
    } else if (a->type == ARG_IO) {
	GapIO *io = io_from_obj(val);
	*((GapIO **)&store[a->offset]) = io;
    } else if (a->type == ARG_INT) {
	int i;

	if (Tcl_GetIntFromObj(NULL, val, &i) == TCL_OK) {	
	    *((int *)&store[a->offset]) = i;
	} else {
	    *((int *)&store[a->offset]) =
		atoi(Tcl_GetStringFromObj(val, NULL));
	}
    } else if (a->type == ARG_REC) {
	Tcl_WideInt i;

	if (Tcl_GetWideIntFromObj(NULL, val, &i) == TCL_OK) {	
	    *((tg_rec *)&store[a->offset]) = i;
	} else {
	    *((tg_rec *)&store[a->offset]) =
		atorec(Tcl_GetStringFromObj(val, NULL));
	}
    } else if (a->type == ARG_FLOAT) {
	double d;

	if (Tcl_GetDoubleFromObj(NULL, val, &d) == TCL_OK) {
	    *((float *)&store[a->offset]) = d;
	} else {
	    *((float *)&store[a->offset]) =
		atof(Tcl_GetStringFromObj(val, NULL));
	}
    } else if (a->type == ARG_DOUBLE) {
	double d;

	if (Tcl_GetDoubleFromObj(NULL, val, &d) == TCL_OK) {
	    *((double *)&store[a->offset]) = d;
	} else {
	    *((double *)&store[a->offset]) =
		atof(Tcl_GetStringFromObj(val, NULL));
	}
    } else {
	fprintf(stderr, "Unknown argument type %d\n", a->type);
    }

    a->def = ""; /* mark as used */
}
Example #14
0
/*
 * ScaleFraction --
 */
static double ScaleFraction(Scale *scalePtr, double value)
{
    double from = 0, to = 1, fraction;

    Tcl_GetDoubleFromObj(NULL, scalePtr->scale.fromObj, &from);
    Tcl_GetDoubleFromObj(NULL, scalePtr->scale.toObj, &to);

    if (from == to) {
	return 1.0;
    }

    fraction = (value - from) / (to - from);

    return fraction < 0 ? 0 : fraction > 1 ? 1 : fraction;
}
Example #15
0
/* void draw_circleMeter_f3 (ESContext *esContext, float x, float y, float z, float radius, float start1, float start2, float start3, float start4, float value, char *text, char *text2, uint8_t type) { */
int tclcmd_draw_circleMeter_f3 (ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]) {
    int len = 0;
    if (objc != 13) {
        Tcl_WrongNumArgs (interp, 1, objv, "{ESContext *esContext} { float x} { float y} { float z} { float radius} { float start1} { float start2} { float start3} { float start4} { float value} { char *text} { char *text2} { uint8_t type}");
        return TCL_ERROR;
    }
    double arg_x;
    if (Tcl_GetDoubleFromObj(interp, objv[1], (double *)&arg_x) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_y;
    if (Tcl_GetDoubleFromObj(interp, objv[2], (double *)&arg_y) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_z;
    if (Tcl_GetDoubleFromObj(interp, objv[3], (double *)&arg_z) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_radius;
    if (Tcl_GetDoubleFromObj(interp, objv[4], (double *)&arg_radius) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_start1;
    if (Tcl_GetDoubleFromObj(interp, objv[5], (double *)&arg_start1) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_start2;
    if (Tcl_GetDoubleFromObj(interp, objv[6], (double *)&arg_start2) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_start3;
    if (Tcl_GetDoubleFromObj(interp, objv[7], (double *)&arg_start3) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_start4;
    if (Tcl_GetDoubleFromObj(interp, objv[8], (double *)&arg_start4) != TCL_OK) {
        return TCL_ERROR;
    }
    double arg_value;
    if (Tcl_GetDoubleFromObj(interp, objv[9], (double *)&arg_value) != TCL_OK) {
        return TCL_ERROR;
    }
    char arg_text[1024];
    strncpy(arg_text, Tcl_GetStringFromObj(objv[10], &len), 1024);
    char arg_text2[1024];
    strncpy(arg_text2, Tcl_GetStringFromObj(objv[11], &len), 1024);
    uint8_t arg_type;
    if (Tcl_GetIntFromObj(interp, objv[12], (int *)&arg_type) != TCL_OK) {
        return TCL_ERROR;
    }
    draw_circleMeter_f3(GlobalesContext, (float)arg_x, (float)arg_y, (float)arg_z, (float)arg_radius, (float)arg_start1, (float)arg_start2, (float)arg_start3, (float)arg_start4, (float)arg_value, arg_text, arg_text2, arg_type);
    return TCL_OK;
}
Example #16
0
static void ScaleDoLayout(void *clientData)
{
    WidgetCore *corePtr = clientData;
    Ttk_Element slider = Ttk_FindElement(corePtr->layout, "slider");

    Ttk_PlaceLayout(corePtr->layout,corePtr->state,Ttk_WinBox(corePtr->tkwin));

    /* Adjust the slider position:
     */
    if (slider) {
	Scale *scalePtr = clientData;
	Ttk_Box troughBox = TroughBox(scalePtr);
	Ttk_Box sliderBox = Ttk_ElementParcel(slider);
	double value = 0.0;
	double fraction;
	int range;

	Tcl_GetDoubleFromObj(NULL, scalePtr->scale.valueObj, &value);
	fraction = ScaleFraction(scalePtr, value);

	if (scalePtr->scale.orient == TTK_ORIENT_HORIZONTAL) {
	    range = troughBox.width - sliderBox.width;
	    sliderBox.x += (int)(fraction * range);
	} else {
	    range = troughBox.height - sliderBox.height;
	    sliderBox.y += (int)(fraction * range);
	}
	Ttk_PlaceElement(corePtr->layout, slider, sliderBox);
    }
}
Example #17
0
double
TclObject::getDouble () const
{
    double value;
    Tcl_GetDoubleFromObj(0, m_pObj, &value);
    return value;
}
Example #18
0
Tk_PathDash *
TkPathDashNew(Tcl_Interp *interp, Tcl_Obj *dashObjPtr)
{
    Tk_PathDash *dashPtr;
    int objc, i;
    double value;
    Tcl_Obj **objv;
    
    dashPtr = (Tk_PathDash *) ckalloc(sizeof(Tk_PathDash));
    dashPtr->number = 0;
    dashPtr->array = NULL;
    if (Tcl_ListObjGetElements(interp, dashObjPtr, &objc, (Tcl_Obj ***) &objv) != TCL_OK) {
	goto error;
    }
    dashPtr->number = objc;
    dashPtr->array = (float *) ckalloc(objc * sizeof(float));
    for (i = 0; i < objc; i++) {
	if (Tcl_GetDoubleFromObj(interp, objv[i], &value) != TCL_OK) {
	    goto error;
	}
	dashPtr->array[i] = (float) value;
    }
    return dashPtr;
    
error:
    TkPathDashFree(dashPtr);
    return NULL;
}
Example #19
0
static QVariant
getValue(Tcl_Obj* object)
{
    if (object == NULL) return QVariant();
    return QString::fromUtf8(Tcl_GetString(object));

// TODO: should use the type to return a more accurate QVariant
#if 0
    if (object->typePtr == NULL)
	return QString::fromUtf8(Tcl_GetString(object));

    QString type(object->typePtr->name);
    if (type == "int") {
	int val;
	if (Tcl_GetIntFromObj(NULL, object, &val) == TCL_OK)
	    return val;
    } else if (type == "double") {
	double val;
	if (Tcl_GetDoubleFromObj(NULL, object, &val) == TCL_OK)
	    return val;
    }

    return QString::fromUtf8(Tcl_GetString(object));
#endif
}
Example #20
0
int parse_ivector (Tcl_Obj * const obj, std::vector<int> &vec, Tcl_Interp *interp, bool fromDouble)
{
    Tcl_Obj **data;
    int num;
    double d;

    if (Tcl_ListObjGetElements(interp, obj, &num, &data) != TCL_OK) {
        Tcl_SetResult(interp, (char *) "Cgmap: error parsing arguments", TCL_STATIC);
        return -1;
    }

    vec.resize(num);

    if (fromDouble == false) {
        for (int i = 0; i < num; i++) {
            if (Tcl_GetIntFromObj(interp, data[i], &vec[i]) != TCL_OK) {
                Tcl_SetResult(interp, (char *) "Cgmap: error parsing vector element as integer", TCL_STATIC);
                return -1;
            }
        }
    } else {
        // do a double-to-int conversion first
        for (int i = 0; i < num; i++) {
            if (Tcl_GetDoubleFromObj(interp, data[i], &d) != TCL_OK) {
                Tcl_SetResult(interp, (char *) "Cgmap: error parsing vector element as integer", TCL_STATIC);
                return -1;
            }
            vec[i] = int (d);
        }
    }
    return num;
}
Example #21
0
/* $sb set $first $last --
 * 	Set the position of the scrollbar.
 */
static int
ScrollbarSetCommand(
    Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], void *recordPtr)
{
    Scrollbar *scrollbar = recordPtr;
    Tcl_Obj *firstObj, *lastObj;
    double first, last;

    if (objc != 4) {
	Tcl_WrongNumArgs(interp, 2, objv, "first last");
	return TCL_ERROR;
    }

    firstObj = objv[2];
    lastObj = objv[3];
    if (Tcl_GetDoubleFromObj(interp, firstObj, &first) != TCL_OK
	|| Tcl_GetDoubleFromObj(interp, lastObj, &last) != TCL_OK)
	return TCL_ERROR;

    /* Range-checks:
     */
    if (first < 0.0) {
	first = 0.0;
    } else if (first > 1.0) {
	first = 1.0;
    }

    if (last < first) {
	last = first;
    } else if (last > 1.0) {
	last = 1.0;
    }

    /* ASSERT: 0.0 <= first <= last <= 1.0 */

    scrollbar->scrollbar.first = first;
    scrollbar->scrollbar.last = last;
    if (first <= 0.0 && last >= 1.0) {
	scrollbar->core.state |= TTK_STATE_DISABLED;
    } else {
	scrollbar->core.state &= ~TTK_STATE_DISABLED;
    }

    TtkRedisplayWidget(&scrollbar->core);

    return TCL_OK;
}
Example #22
0
static int LinTransitionSet(
    ClientData clientData,
    Tcl_Interp *interp,		/* Current interp; may be used for errors. */
    Tk_Window tkwin,		/* Window for which option is being set. */
    Tcl_Obj **value,		/* Pointer to the pointer to the value object.
				 * We use a pointer to the pointer because
				 * we may need to return a value (NULL). */
    char *recordPtr,		/* Pointer to storage for the widget record. */
    int internalOffset,		/* Offset within *recordPtr at which the
				 * internal value is to be stored. */
    char *oldInternalPtr,	/* Pointer to storage for the old value. */
    int flags)			/* Flags for the option, set Tk_SetOptions. */
{
    char *internalPtr;
    int objEmpty = 0;
    Tcl_Obj *valuePtr;
    double z[4] = {0.0, 0.0, 1.0, 0.0};		/* Defaults according to SVG. */
    PathRect *newrc = NULL;
    
    valuePtr = *value;
    internalPtr = ComputeSlotAddress(recordPtr, internalOffset);
    objEmpty = ObjectIsEmpty(valuePtr);
    
    /*
     * Important: the new value for the transition is not yet 
     * stored into the style! transObj may be NULL!
     * The new value is stored in style *after* we return TCL_OK.
     */
    if ((flags & TK_OPTION_NULL_OK) && objEmpty) {
        valuePtr = NULL;
    } else {
        int i, len;
        Tcl_Obj **objv;
        
        if (Tcl_ListObjGetElements(interp, valuePtr, &len, &objv) != TCL_OK) {
            return TCL_ERROR;
        }
        if (len != 4) {
            Tcl_SetObjResult(interp, Tcl_NewStringObj(
                    "-lineartransition must have four elements", -1));
            return TCL_ERROR;
        }
        for (i = 0; i < 4; i++) {
            if (Tcl_GetDoubleFromObj(interp, objv[i], z+i) != TCL_OK) {
                return TCL_ERROR;
            }
        }
        newrc = (PathRect *) ckalloc(sizeof(PathRect));
        newrc->x1 = z[0];
        newrc->y1 = z[1];
        newrc->x2 = z[2];
        newrc->y2 = z[3];
    }
    if (internalPtr != NULL) {
        *((PathRect **) oldInternalPtr) = *((PathRect **) internalPtr);
        *((PathRect **) internalPtr) = newrc;
    }
    return TCL_OK;
}
Example #23
0
int tcl_pmepot_create(ClientData nodata, Tcl_Interp *interp,
			int objc, Tcl_Obj *const objv[]) {

  int dims_count, dims[3], i;
  Tcl_Obj **dims_list;
  double ewald_factor;
  char namebuf[128];
  int *countptr;
  pmepot_data *data;

  if ( objc != 3 ) {
    Tcl_SetResult(interp,"args: {na nb nc} ewald_factor",TCL_VOLATILE);
    return TCL_ERROR;
  }

  if ( Tcl_ListObjGetElements(interp,objv[1],&dims_count,&dims_list) != TCL_OK ) return TCL_ERROR;
  if ( dims_count != 3 ) {
    Tcl_SetResult(interp,"args: {na nb nc} ewald_factor",TCL_VOLATILE);
    return TCL_ERROR;
  }
  for ( i=0; i<3; ++i ) {
    if ( Tcl_GetIntFromObj(interp,dims_list[i],&dims[i]) != TCL_OK ) return TCL_ERROR;
    if ( dims[i] < 8 ) {
      Tcl_SetResult(interp,"each grid dimension must be at least 8",TCL_VOLATILE);
      return TCL_ERROR;
    }
  }
  if ( dims[2] % 2 ) {
    Tcl_SetResult(interp,"third grid dimension must be even",TCL_VOLATILE);
    return TCL_ERROR;
  }

  if ( Tcl_GetDoubleFromObj(interp,objv[2],&ewald_factor) != TCL_OK ) {
    return TCL_ERROR;
  }
  if ( ewald_factor <= 0. ) {
    Tcl_SetResult(interp,"ewald factor must be positive",TCL_VOLATILE);
    return TCL_ERROR;
  }

  countptr = Tcl_GetAssocData(interp, "Pmepot_count", 0);
  if ( ! countptr ) {
    Tcl_SetResult(interp,"Pmepot bug: Pmepot_count not initialized.",TCL_VOLATILE);
    return TCL_ERROR;
  }

  data = pmepot_create(dims, ewald_factor);
  if ( ! data ) {
    Tcl_SetResult(interp,"Pmepot bug: pmepot_create failed.",TCL_VOLATILE);
    return TCL_ERROR;
  }

  sprintf(namebuf,"Pmepot_%d",*countptr);
  Tcl_SetAssocData(interp,namebuf,pmepot_deleteproc,(ClientData)data);
  *countptr += 1;

  Tcl_SetResult(interp,namebuf,TCL_VOLATILE);
  return TCL_OK;
}
Example #24
0
	double TclUtils::getDouble(Tcl_Interp *interp, Tcl_Obj *objPtr) {
		double ret;

		if (TCL_OK != Tcl_GetDoubleFromObj(interp, objPtr, &ret))
			throw wrong_args_value_exception(error_message::bad_double_argument);

		return ret;
	}
Example #25
0
File: arec.c Project: jbroll/arec
int ARecSetDouble(Tcl_Interp *ip, ARecType *type, Tcl_Obj *obj, void *here, int m, int objc, Tcl_Obj*const* objv, int flags) {
    if ( !obj ) {
	 *((double *)here) = 0.0;
	return TCL_OK;
    }

    return Tcl_GetDoubleFromObj(NULL, obj, (double *) here);
}
Example #26
0
static void TrackElementDraw(
    void *clientData, void *elementRecord, Tk_Window tkwin,
    Drawable d, Ttk_Box b, Ttk_State state)
{
    TrackElementData *data = clientData;
    TrackElement *elem = elementRecord;
    double from = 0, to = 100, value = 0;
    int orientation = TTK_ORIENT_HORIZONTAL;
    ThemeTrackDrawInfo info;

    Tcl_GetDoubleFromObj(NULL, elem->fromObj, &from);
    Tcl_GetDoubleFromObj(NULL, elem->toObj, &to);
    Tcl_GetDoubleFromObj(NULL, elem->valueObj, &value);
    Ttk_GetOrientFromObj(NULL, elem->orientObj, &orientation);

    /* @@@ BUG: min, max, and value should account for resolution:
     * @@@ if finer than 1.0, conversion to int breaks.
     */
    info.kind = data->kind;
    info.bounds = BoxToRect(d, b);
    info.min = (int) from;		/* @@@ */
    info.max = (int) to;		/* @@@ */
    info.value = (int) value;		/* @@@ */

    info.attributes = orientation == TTK_ORIENT_HORIZONTAL
	    ? kThemeTrackHorizontal : 0;
    info.attributes |= kThemeTrackShowThumb;
    info.enableState = Ttk_StateTableLookup(ThemeTrackEnableTable, state);

    switch (data->kind) {
	case kThemeProgressBar:
	    info.trackInfo.progress.phase = 0; /* 1-4: animation phase */
	    break;
	case kThemeSlider:
	    info.trackInfo.slider.pressState = 0; /* @@@ fill this in */
	    info.trackInfo.slider.thumbDir =  kThemeThumbPlain;
		/* kThemeThumbUpward, kThemeThumbDownward, kThemeThumbPlain  */
	    break;
    }

    BEGIN_DRAWING(d)
    ChkErr(DrawThemeTrack, &info, NULL, NULL, 0);
    END_DRAWING
}
Example #27
0
static double
PointToValue(Scale *scalePtr, int x, int y)
{
    Ttk_Box troughBox = TroughRange(scalePtr);
    double from = 0, to = 1, fraction;

    Tcl_GetDoubleFromObj(NULL, scalePtr->scale.fromObj, &from);
    Tcl_GetDoubleFromObj(NULL, scalePtr->scale.toObj, &to);

    if (scalePtr->scale.orient == TTK_ORIENT_HORIZONTAL) {
	fraction = (double)(x - troughBox.x) / (double)troughBox.width;
    } else {
	fraction = (double)(y - troughBox.y) / (double)troughBox.height;
    }

    fraction = fraction < 0 ? 0 : fraction > 1 ? 1 : fraction;

    return from + fraction * (to-from);
}
Example #28
0
static int RadTransitionSet(
    ClientData clientData,
    Tcl_Interp *interp,	    /* Current interp; may be used for errors. */
    Tk_Window tkwin,	    /* Window for which option is being set. */
    Tcl_Obj **value,	    /* Pointer to the pointer to the value object.
                             * We use a pointer to the pointer because
                             * we may need to return a value (NULL). */
    char *recordPtr,	    /* Pointer to storage for the widget record. */
    int internalOffset,	    /* Offset within *recordPtr at which the
                               internal value is to be stored. */
    char *oldInternalPtr,   /* Pointer to storage for the old value. */
    int flags)		    /* Flags for the option, set Tk_SetOptions. */
{
    char *internalPtr;
    int objEmpty = 0;
    Tcl_Obj *valuePtr;
    double z[5] = {0.5, 0.5, 0.5, 0.5, 0.5};
    RadialTransition *newrc = NULL;

    valuePtr = *value;
    internalPtr = ComputeSlotAddress(recordPtr, internalOffset);
    objEmpty = ObjectIsEmpty(valuePtr);
    
    if ((flags & TK_OPTION_NULL_OK) && objEmpty) {
        valuePtr = NULL;
    } else {
        int i, len;
        Tcl_Obj **objv;
        
        if (Tcl_ListObjGetElements(interp, valuePtr, &len, &objv) != TCL_OK) {
            return TCL_ERROR;
        }
        if ((len == 1) || (len == 4) || (len > 5)) {
            Tcl_SetObjResult(interp, Tcl_NewStringObj(
                    "-radialtransition must be a list {cx cy ?r? ?fx fy?}", -1));
            return TCL_ERROR;
        }
        for (i = 0; i < len; i++) {
            if (Tcl_GetDoubleFromObj(interp, objv[i], z+i) != TCL_OK) {
                return TCL_ERROR;
            }
        }
        newrc = (RadialTransition *) ckalloc(sizeof(RadialTransition));
        newrc->centerX = z[0];
        newrc->centerY = z[1];
        newrc->radius = z[2];
        newrc->focalX = z[3];
        newrc->focalY = z[4];
    }
    if (internalPtr != NULL) {
        *((RadialTransition **) oldInternalPtr) = *((RadialTransition **) internalPtr);
        *((RadialTransition **) internalPtr) = newrc;
    }
    return TCL_OK;
}
Example #29
0
static int configure( Tcl_Interp *interp, CanvasParams *para,
      GnoclOption options[] )
{
   if( options[scrollRegionIdx].status == GNOCL_STATUS_CHANGED )
   {
      Tcl_Obj *obj = options[scrollRegionIdx].val.obj;
      int     k, no;
      double  val[4];   /* x, y, w, h */

      if( Tcl_ListObjLength( interp, obj, &no ) != TCL_OK 
         || no != 4 )
      {
         Tcl_SetResult( interp, 
               "scrollRegion must be proper list with four members", 
               TCL_STATIC );
         return TCL_ERROR;
      }
      for( k = 0; k < no; ++k )
      {
         Tcl_Obj *tp;
         if( Tcl_ListObjIndex( interp, obj, k, &tp ) != TCL_OK )
            return TCL_ERROR;
         if( Tcl_GetDoubleFromObj( interp, tp, &val[k] ) )
            return TCL_ERROR;
      }
      gnome_canvas_set_scroll_region( para->canvas, 
            val[0], val[1], val[0] + val[2], val[1] + val[3] ); 
   }

   if( options[pixelPerUnitIdx].status == GNOCL_STATUS_CHANGED )
   {
      gnome_canvas_set_pixels_per_unit( para->canvas, 
            options[pixelPerUnitIdx].val.d );
   }

   if( options[centerScrollIdx].status == GNOCL_STATUS_CHANGED )
   {
      gnome_canvas_set_center_scroll_region( para->canvas, 
            options[centerScrollIdx].val.b );
   }

#if 0
   if( popt->scrollbar.changed )
   {
      GtkPolicyType hor, vert;
      if( gnoclGetScrollbarPolicy( interp, popt->scrollbar.val, 
            &hor, &vert ) != TCL_OK )
         return TCL_ERROR;

      gtk_scrolled_window_set_policy( para->scrollWin, hor, vert );
   }
#endif

   return TCL_OK;
}
Example #30
0
static int
aetolookat(ClientData UNUSED(clientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv)
{
    struct isst_s *isst;
    Togl *togl;
    vect_t vecdfoc;
    double x, y;
    double az, el;
    double mag_vec;

    if (objc < 4) {
	Tcl_WrongNumArgs(interp, 1, objv, "pathName az el");
	return TCL_ERROR;
    }

    if (Togl_GetToglFromObj(interp, objv[1], &togl) != TCL_OK)
	return TCL_ERROR;

    isst = (struct isst_s *) Togl_GetClientData(togl);

    if (Tcl_GetDoubleFromObj(interp, objv[2], &x) != TCL_OK)
	return TCL_ERROR;
    if (Tcl_GetDoubleFromObj(interp, objv[3], &y) != TCL_OK)
	return TCL_ERROR;

    mag_vec = DIST_PT_PT(isst->camera.pos, isst->camera.focus);

    VSUB2(vecdfoc, isst->camera.pos, isst->camera.focus);
    VUNITIZE(vecdfoc);
    AZEL_FROM_V3DIR(az, el, vecdfoc);
    az = az * -DEG2RAD + x;
    el = el * -DEG2RAD + y;
    V3DIR_FROM_AZEL(vecdfoc, az, el);
    VUNITIZE(vecdfoc);
    VSCALE(vecdfoc, vecdfoc, mag_vec);
    VADD2(isst->camera.focus, isst->camera.pos, vecdfoc);

    isst->dirty = 1;
    return TCL_OK;
}