Example #1
0
int select_graph(Quark *gr)
{
    if (quark_is_active(gr)) {
        Project *pr = project_get_data(get_parent_project(gr));
        if (pr) {
            pr->cg = gr;

            return RETURN_SUCCESS;
        } else {
            return RETURN_FAILURE;
        }
    } else {
        return RETURN_FAILURE;
    }
}
Example #2
0
int write_ssd(const Quark *ssd, unsigned int ncols, const int *cols, FILE *fp)
{
    char *sep = "\t";
    unsigned int nrows = ssd_get_nrows(ssd), i, j;

    unsigned int prec = project_get_prec(get_parent_project(ssd));

    fputs("# ", fp);
    for (j = 0; j < ncols; j++) {
        char *lab = ssd_get_col_label(ssd, cols[j]);
        if (j != 0) {
            fputs(sep, fp);
        }
        fputs(lab ? lab:"?", fp);
    }
    fputs("\n", fp);

    for (i = 0; i < nrows; i++) {
        for (j = 0; j < ncols; j++) {
            unsigned int col = cols[j];
            ss_column *scol = ssd_get_col(ssd, col);
            if (!scol) {
                return RETURN_FAILURE;
            }
            
            if (j != 0) {
                fputs(sep, fp);
            }
            
            if (scol->format == FFORMAT_STRING) {
                char **s = ((char **) scol->data);
                fprintf(fp, " \"%s\"", escapequotes(s[i]));
            } else {
                double *x = ((double *) scol->data);
                fprintf(fp, "%.*g", prec, x[i]);
            }
        }
        fputs("\n", fp);
    }
    fputs("\n", fp);
    return RETURN_SUCCESS;
}
Example #3
0
GProject *gproject_from_quark(const Quark *q)
{
    unsigned int i;
    GraceApp *gapp;
    GProject *gp;
    Quark *project = get_parent_project(q);

    if (!project) {
        return NULL;
    }

    gapp = gapp_from_quark(project);

    for (i = 0; i < gapp->gpcount; i++) {
        gp = gapp->gplist[i];
        if (gproject_get_top(gp) == project) {
            return gp;
        }
    }

    return NULL;
}
Example #4
0
static char *get_cell_content(SSDataUI *ui, int row, int column, int *format)
{
    static char buf[STACKLEN][32];
    static int stackp = 0;
    
    int nrows = ssd_get_nrows(ui->q);
    ss_column *col = ssd_get_col(ui->q, column);
    char *s;

    if (col && row >= 0 && row < nrows) {
        unsigned int prec;
        *format = col->format;
        switch (col->format) {
        case FFORMAT_STRING:
            s = ((char **) col->data)[row];
            break;
        default:
            prec = project_get_prec(get_parent_project(ui->q));
            sprintf(buf[stackp], "%.*g", prec, ((double *) col->data)[row]);
            s = buf[stackp];
            stackp++;
            stackp %= STACKLEN;
            
            /* get rid of spaces */
            while (s && *s == ' ') {
                s++;
            }
            
            break;
        }
    } else {
        s = "";
    }
    
    return s;
}
Example #5
0
/*
 * read data to the set from a file overriding the current contents
 */
int update_set_from_file(Quark *pset)
{
    int retval;
    Dataset *dsp;
    
    dsp = set_get_dataset(pset);
    
    if (!dsp) {
        retval = RETURN_FAILURE;
    } else {
        FILE *fp;
        RunTime *rt = rt_from_quark(pset);
        
        fp = gapp_openr(gapp_from_quark(pset), dsp->hotfile, dsp->hotsrc);
        
        killsetdata(pset);
        rt->curtype = set_get_type(pset);
        retval = uniread(get_parent_project(pset), fp, LOAD_SINGLE, dsp->hotfile);

        gapp_close(fp);
    }
    
    return retval;
}
Example #6
0
Quark *gapp_set_new(Quark *parent)
{
    Quark *pset, *pr;
    RunTime *rt;
    
    pr = get_parent_project(parent);
    
    pset = set_new(parent);
    
    rt = rt_from_quark(pset);
    
    if (!pset || !rt) {
        return NULL;
    }
    
    rt->setcolor++;
    rt->setcolor %= project_get_ncolors(pr);
    if (rt->setcolor == 0) {
        rt->setcolor = 1;
    }
    set_set_colors(pset, rt->setcolor);

    return pset;
}
Example #7
0
/*
 *  Arrange frames
 */
int arrange_frames(Quark **frames, int nframes,
                   int nrows, int ncols, int order, int snake,
                   double loff, double roff, double toff, double boff,
                   double vgap, double hgap,
                   int hpack, int vpack)
{
    int i, imax, j, jmax, iw, ih, nf;
    double pw, ph, w, h;
    view v;
    Quark *f, *pr;

    if (!frames) {
        return RETURN_FAILURE;
    }
    f = frames[0];
    
    pr = get_parent_project(f);
    if (!pr) {
        return RETURN_FAILURE;
    }
    
    if (hpack) {
        hgap = 0.0;
    }
    if (vpack) {
        vgap = 0.0;
    }
    if (ncols < 1 || nrows < 1) {
	errmsg("# of rows and columns must be > 0");
        return RETURN_FAILURE;
    }
    if (hgap < 0.0 || vgap < 0.0) {
	errmsg("hgap and vgap must be >= 0");
        return RETURN_FAILURE;
    }
    
    project_get_viewport(pr, &pw, &ph);
    w = (pw - loff - roff)/(ncols + (ncols - 1)*hgap);
    h = (ph - toff - boff)/(nrows + (nrows - 1)*vgap);
    if (h <= 0.0 || w <= 0.0) {
	errmsg("Page offsets are too large");
        return RETURN_FAILURE;
    }
    
    nf = 0;
    if (order & GA_ORDER_HV_INV) {
        imax = ncols;
        jmax = nrows;
    } else {
        imax = nrows;
        jmax = ncols;
    }
    for (i = 0; i < imax && nf < nframes; i++) {
        for (j = 0; j < jmax && nf < nframes; j++) {
            f = frames[nf];
            
            if (order & GA_ORDER_HV_INV) {
                iw = i;
                ih = j;
                if (snake && (iw % 2)) {
                    ih = nrows - ih - 1;
                }
            } else {
                iw = j;
                ih = i;
                if (snake && (ih % 2)) {
                    iw = ncols - iw - 1;
                }
            }
            if (order & GA_ORDER_H_INV) {
                iw = ncols - iw - 1;
            }
            /* viewport y coord goes bottom -> top ! */
            if (!(order & GA_ORDER_V_INV)) {
                ih = nrows - ih - 1;
            }
            
            v.xv1 = loff + iw*w*(1.0 + hgap);
            v.xv2 = v.xv1 + w;
            v.yv1 = boff + ih*h*(1.0 + vgap);
            v.yv2 = v.yv1 + h;
            frame_set_view(f, &v);
            
            nf++;
        }
    }
    return RETURN_SUCCESS;
}
Example #8
0
static int leaveCB(TableEvent *event)
{
    SSDataUI *ui = (SSDataUI *) event->anydata;

    int nrows = ssd_get_nrows(ui->q);
    int ncols = ssd_get_ncols(ui->q);
    int format;
    double value;
    
    int changed = FALSE;
    
    GraceApp *gapp = gapp_from_quark(ui->q);
    
    if (event->row < 0 || event->col < 0 || event->col > ncols) {
        return TRUE;
    }
    
    if (event->row >= nrows && !string_is_empty(event->value)) {
        if (ssd_set_nrows(ui->q, event->row + 1) == RETURN_SUCCESS) {
            changed = TRUE;
        }
    }
    
    if (event->col == ncols && !string_is_empty(event->value)) {
        if (parse_date_or_number(get_parent_project(ui->q),
            event->value, FALSE, get_date_hint(gapp), &value) == RETURN_SUCCESS) {
            format = FFORMAT_NUMBER;
        } else {
            format = FFORMAT_STRING;
        }
        if (ssd_add_col(ui->q, format)) {
            ncols++;
            changed = TRUE;
        }
    }
    
    if (event->col < ncols) {
        char *old_value = get_cell_content(ui, event->row, event->col, &format);
        if (!strings_are_equal(old_value, event->value)) {
            switch (format) {
            case FFORMAT_STRING:
                if (ssd_set_string(ui->q, event->row, event->col, event->value) ==
                    RETURN_SUCCESS) {
                    quark_dirtystate_set(ui->q, TRUE);
                    changed = TRUE;
                }
                break;    
            default:
                if (graal_eval_expr(grace_get_graal(gapp->grace),
                    event->value, &value, gproject_get_top(gapp->gp)) == RETURN_SUCCESS) {

                    unsigned int prec;
                    char buf[32];
                    double val;

                    prec = project_get_prec(get_parent_project(ui->q));
                    sprintf(buf, "%.*g", prec, value);

                    if (parse_date_or_number(get_parent_project(ui->q),
                        buf, FALSE, get_date_hint(gapp), &val) == RETURN_SUCCESS) {

                        if (ssd_set_value(ui->q, event->row, event->col, val) == RETURN_SUCCESS) {
                            quark_dirtystate_set(ui->q, TRUE);
                            changed = TRUE;
                        }
                    }
                } else {
                    errmsg("Can't parse input value");
                    return FALSE;
                }
                break;
            }
        }
    }
    
    if (changed) {
        snapshot_and_update(gapp->gp, FALSE);
    }

    return TRUE;
}