Exemplo n.º 1
0
static void unindex_cb(Widget but, void *udata)
{
    SSDataUI *ui = (SSDataUI *) udata;
    if (ssd_set_indexed(ui->q, FALSE) == RETURN_SUCCESS) {
        snapshot_and_update(gapp->gp, TRUE);
    }
}
Exemplo n.º 2
0
static void index_cb(Widget but, void *udata)
{
    SSDataUI *ui = (SSDataUI *) udata;
    if (ssd_set_index(ui->q, ui->cb_column) == RETURN_SUCCESS) {
        snapshot_and_update(gapp->gp, TRUE);
    }
}
Exemplo n.º 3
0
static void explorer_snapshot(GraceApp *gapp, GProject *gp, int all)
{
    if (gp == gapp->gp) {
        snapshot_and_update(gp, all);
    } else {
        amem_snapshot(quark_get_amem(gproject_get_top(gp)));
    }
}
Exemplo n.º 4
0
static int datasetop_aac_cb(void *data)
{
    int n, i;
    int startno, endno;
    dataSetOpType optype;
    Quark *ss, **selssd;
       
    n = GetStorageChoices(datasetopui.sel, &selssd);
    if (n < 1) {
        errmsg("No SSD selected");
        return RETURN_FAILURE;
    } else {
        optype = GetOptionChoice(datasetopui.optype_item);
 
        switch (optype) {
        case DATASETOP_REVERSE:
            for (i = 0; i < n; i++) {
                ss = selssd[i];
                ssd_reverse(ss);
            }
            break;
        case DATASETOP_TRANSPOSE:
            for (i = 0; i < n; i++) {
                ss = selssd[i];
                if (ssd_transpose(ss) != RETURN_SUCCESS) {
                    errmsg("Transpose failed");
                    break;
                }
            }
            break;
        case DATASETOP_COALESCE:
            if (n > 1) {
                Quark *ss0 = selssd[0];
                for (i = 1; i < n; i++) {
                    ss = selssd[i];
                    if (ssd_coalesce(ss0, ss) != RETURN_SUCCESS) {
                        errmsg("Coalescing failed");
                        break;
                    }
                }
            }
            break;
#if 0
        case DATASETOP_SORT:
            stype = GetOptionChoice(datasetopui.up_down_item);

            for (i = 0; i < n; i++) {
                ss = selssd[i];
                ssd_sort(ss, stype);
            }
            break;
        case DATASETOP_JOIN:
            ssd_join(selssd, n);
            break;
        case DATASETOP_SPLIT:
            xv_evalexpri(datasetopui.length_item, &lpart);
            for (i = 0; i < n; i++) {
                ss = selssd[i];
                ssd_split(ss, lpart);
            }
            break;
#endif
        case DATASETOP_DROP:
            xv_evalexpri(datasetopui.start_item, &startno);
            xv_evalexpri(datasetopui.stop_item, &endno);
            for (i = 0; i < n; i++) {
                ss = selssd[i];
                ssd_delete_rows(ss, startno, endno);
            }
            break;
        default:
            xfree(selssd);
            return RETURN_FAILURE;
        }
        
        snapshot_and_update(gapp->gp, TRUE);
        
        xfree(selssd);

        return RETURN_SUCCESS;
    }
}
Exemplo n.º 5
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;
}