Grace *grace_from_gproject(const GProject *gp) { if (gp) { return grace_from_quark(gp->q); } else { return NULL; } }
GraceApp *gapp_from_quark(const Quark *q) { GraceApp *gapp = NULL; if (q) { Grace *grace = grace_from_quark(q); gapp = grace_get_udata(grace); } return gapp; }
static GVarType get_proc(const void *obj, const char *name, GVarData *prop, void *udata) { Quark *q = (Quark *) obj; Grace *grace = grace_from_quark(q); DataColumn col; int column; if (!q) { return GVarNil; } if (strings_are_equal(name, "idstr")) { prop->str = copy_string(NULL, QIDSTR(q)); return GVarStr; } else if (strings_are_equal(name, "active")) { prop->boolval = quark_is_active(q); return GVarBool; } switch (quark_fid_get(q)) { case QFlavorSSD: if (strings_are_equal(name, "nrows")) { prop->num = ssd_get_nrows(q); return GVarNum; } else if (strings_are_equal(name, "ncols")) { prop->num = ssd_get_ncols(q); return GVarNum; } else if ((column = ssd_get_column_by_name(q, name)) >= 0) { prop->arr = ssd_get_darray(q, column); return GVarArr; } else { return GVarNil; } break; case QFlavorSet: if (strings_are_equal(name, "length")) { prop->num = set_get_length(q); return GVarNum; } else if ((col = get_dataset_col_by_name(grace, name)) != DATA_BAD) { prop->arr = set_get_darray(q, col); return GVarArr; } else { return GVarNil; } break; default: return GVarNil; break; } }
static int set_proc(void *obj, const char *name, GVarType type, GVarData prop, void *udata) { Quark *q = (Quark *) obj; Grace *grace = grace_from_quark(q); DataColumn col; int column; if (!q) { return RETURN_FAILURE; } if (strings_are_equal(name, "idstr") && type == GVarStr) { return quark_idstr_set(q, prop.str); } else if (strings_are_equal(name, "active") && type == GVarBool) { return quark_set_active(q, prop.boolval); } switch (quark_fid_get(q)) { case QFlavorSSD: if ((column = ssd_get_column_by_name(q, name)) >= 0) { return ssd_set_darray(q, column, prop.arr); } else { return RETURN_FAILURE; } break; case QFlavorSet: if ((col = get_dataset_col_by_name(grace, name)) != DATA_BAD) { if (set_set_length(q, prop.arr->size) != RETURN_SUCCESS) { return RETURN_FAILURE; } else { return set_set_darray(q, col, prop.arr); } } else { return RETURN_FAILURE; } break; default: return RETURN_FAILURE; break; } }
void set_type_cb(OptionStructure *opt, int type, void *data) { int i, nmrows, nscols; char *rowlabels[MAX_SET_COLS]; Leval_ui *ui = (Leval_ui *) data; nmrows = TableGetNrows(ui->mw); nscols = settype_cols(type); if (nmrows > nscols) { TableDeleteRows(ui->mw, nmrows - nscols); } else if (nmrows < nscols) { if (ui->gr) { Grace *grace = grace_from_quark(ui->gr); for (i = 0; i < nscols; i++) { rowlabels[i] = copy_string(NULL, dataset_col_name(grace, i)); rowlabels[i] = concat_strings(rowlabels[i], " = "); } } TableAddRows(ui->mw, nscols - nmrows); TableSetRowLabels(ui->mw, rowlabels); } TableUpdateVisibleRowsCols(ui->mw); }
static int leval_aac_cb(void *data) { int i, nscols, type; double start, stop; int npts; char *formula[MAX_SET_COLS]; Quark *pset, *gr; GVar *t; Leval_ui *ui = (Leval_ui *) data; Grace *grace; gr = ui->gr; type = GetOptionChoice(ui->set_type); nscols = settype_cols(type); if (xv_evalexpr(ui->start, &start) != RETURN_SUCCESS) { errmsg("Start item undefined"); return RETURN_FAILURE; } if (xv_evalexpr(ui->stop, &stop) != RETURN_SUCCESS) { errmsg("Stop item undefined"); return RETURN_FAILURE; } if (xv_evalexpri(ui->npts, &npts) != RETURN_SUCCESS) { errmsg("Number of points undefined"); return RETURN_FAILURE; } TableCommitEdit(ui->mw, FALSE); for (i = 0; i < nscols; i++) { formula[i] = TableGetCell(ui->mw, i, 0); } pset = gapp_set_new(gr); set_set_type(pset, type); grace = grace_from_quark(pset); t = graal_get_var(grace_get_graal(grace), "$t", TRUE); if (t == NULL) { errmsg("Internal error"); return RETURN_FAILURE; } #if 0 if (t->length != 0) { xfree(t->data); t->length = 0; } t->data = allocate_mesh(start, stop, npts); if (t->data == NULL) { return RETURN_FAILURE; } t->length = npts; if (set_set_length(pset, npts) != RETURN_SUCCESS) { quark_free(pset); XCFREE(t->data); t->length = 0; return RETURN_FAILURE; } #endif for (i = 0; i < nscols; i++) { char buf[32], *expr; int res; /* preparing the expression */ sprintf(buf, "%s = ", dataset_col_name(grace, i)); expr = copy_string(NULL, buf); expr = concat_strings(expr, formula[i]); /* evaluate the expression */ res = graal_parse_line(grace_get_graal(grace), expr, NULL); xfree(expr); if (res != RETURN_SUCCESS) { quark_free(pset); return RETURN_FAILURE; } } #if 0 XCFREE(t->data); t->length = 0; #endif update_set_lists(gr); return RETURN_SUCCESS; }
void create_leval_frame(Widget but, void *data) { Quark *gr = (Quark *) data; if (!gr) { return; } set_wait_cursor(); levalui.gr = gr; if (levalui.top == NULL) { int i; Widget fr, rc1; int nscols; char *rows[MAX_SET_COLS][1]; char **cells[MAX_SET_COLS]; char *rowlabels[MAX_SET_COLS]; int column_widths[1] = {50}; int column_maxlengths[1] = {256}; Grace *grace = grace_from_quark(gr); levalui.top = CreateDialogForm(app_shell, "Load & evaluate"); fr = CreateFrame(levalui.top, "Parameter mesh ($t)"); AddDialogFormChild(levalui.top, fr); rc1 = CreateHContainer(fr); levalui.start = CreateTextItem(rc1, 10, "Start at:"); levalui.stop = CreateTextItem(rc1, 10, "Stop at:"); levalui.npts = CreateTextItem(rc1, 6, "Length:"); levalui.set_type = CreateSetTypeChoice(levalui.top, "Set type:"); AddDialogFormChild(levalui.top, levalui.set_type->menu); AddOptionChoiceCB(levalui.set_type, set_type_cb, (void *) &levalui); nscols = 2; for (i = 0; i < nscols; i++) { rowlabels[i] = copy_string(NULL, dataset_col_name(grace, i)); rowlabels[i] = concat_strings(rowlabels[i], " = "); if (i == 0) { rows[i][0] = "$t"; } else { rows[i][0] = ""; } cells[i] = &rows[i][0]; } levalui.mw = CreateTable("mw", levalui.top, nscols, 1, MAX_SET_COLS, 1); TableLevalInit(levalui.mw); TableSetColWidths(levalui.mw, column_widths); TableSetColMaxlengths(levalui.mw, column_maxlengths); TableSetRowLabels(levalui.mw, rowlabels); TableSetDefaultRowLabelWidth(levalui.mw, 6); TableSetDefaultRowLabelAlignment(levalui.mw, ALIGN_CENTER); TableSetCells(levalui.mw, cells); TableUpdateVisibleRowsCols(levalui.mw); AddTableLeaveCellCB(levalui.mw, leaveCB, &levalui); CreateAACDialog(levalui.top, levalui.mw, leval_aac_cb, &levalui); } RaiseWindow(GetParent(levalui.top)); unset_wait_cursor(); }
char *q_labeling(Quark *q) { Grace *grace = grace_from_quark(q); char *buf; tickmarks *t; DObject *o; region *r; if (!q) { return NULL; } buf = xmalloc(strlen(QIDSTR(q)) + 128); if (!buf) { return NULL; } switch (quark_fid_get(q)) { case QFlavorProject: sprintf(buf, "Project \"%s%s\"", QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; case QFlavorSSD: sprintf(buf, "SpreadSheet \"%s%s\"", QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; case QFlavorFrame: sprintf(buf, "Frame \"%s%s\"", QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; case QFlavorGraph: sprintf(buf, "Graph \"%s%s\" (type: %s)", QIDSTR(q), quark_dirtystate_get(q) ? "*":"", graph_types(grace, graph_get_type(q))); break; case QFlavorSet: sprintf(buf, "Set \"%s%s\" (%s)", QIDSTR(q), quark_dirtystate_get(q) ? "*":"", set_types(grace, set_get_type(q))); break; case QFlavorAGrid: t = axisgrid_get_data(q); sprintf(buf, "%c AGrid \"%s%s\"", t->type == AXIS_TYPE_X ? 'X':'Y', QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; case QFlavorAxis: t = axisgrid_get_data(q); sprintf(buf, "Axis \"%s%s\"", QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; case QFlavorDObject: o = object_get_data(q); sprintf(buf, "%s \"%s%s\"", object_type_descr(grace, o->type), QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; case QFlavorAText: sprintf(buf, "AText \"%s%s\"", QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; case QFlavorRegion: r = region_get_data(q); sprintf(buf, "Region \"%s%s\" (%d pts)", QIDSTR(q), quark_dirtystate_get(q) ? "*":"", r->n); break; default: sprintf(buf, "??? \"%s%s\"", QIDSTR(q), quark_dirtystate_get(q) ? "*":""); break; } return buf; }