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); } }
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); } }
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))); } }
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; } }
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; }