Current section
Files
Jump to
Current section
Files
c_src/Autofilter.c
#include "types.h"
#include "common.h"
// int xlAutoFilterGetRef(AutoFilterHandle handle, int* rowFirst, int* rowLast, int* colFirst, int* colLast);
ERL_NIF_TERM c_xlAutoFilterGetRef(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int rowFirst;
int rowLast;
int colFirst;
int colLast;
int ret = xlAutoFilterGetRef(autofilter_resource->handle, &rowFirst, &rowLast, &colFirst, &colLast);
return enif_make_list5(env,
enif_make_int(env, ret),
enif_make_int(env, rowFirst),
enif_make_int(env, rowLast),
enif_make_int(env, colFirst),
enif_make_int(env, colLast)
);
}
// void xlAutoFilterSetRef(AutoFilterHandle handle, int rowFirst, int rowLast, int colFirst, int colLast);
ERL_NIF_TERM c_xlAutoFilterSetRef(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int rowFirst;
if (0 == enif_get_int(env, argv[1], &rowFirst)) {
return enif_make_badarg(env);
}
int rowLast;
if (0 == enif_get_int(env, argv[2], &rowLast)) {
return enif_make_badarg(env);
}
int colFirst;
if (0 == enif_get_int(env, argv[3], &colFirst)) {
return enif_make_badarg(env);
}
int colLast;
if (0 == enif_get_int(env, argv[4], &colLast)) {
return enif_make_badarg(env);
}
xlAutoFilterSetRef(autofilter_resource->handle, rowFirst, rowLast, colFirst, colLast);
return enif_make_atom(env, "nil");
}
// FilterColumnHandle xlAutoFilterColumn(AutoFilterHandle handle, int colId);
ERL_NIF_TERM c_xlAutoFilterColumn(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int colId;
if (0 == enif_get_int(env, argv[1], &colId)) {
return enif_make_badarg(env);
}
FilterColumnHandle autofilter_handle = xlAutoFilterColumn(autofilter_resource->handle, colId);
if(!autofilter_handle) {
return enif_make_atom(env, "nil");
} else {
FilterColumnType *ret = enif_alloc_resource(TypeOfFilterColumn, sizeof(FilterColumnType));
ret->handle = autofilter_handle;
ERL_NIF_TERM handle = enif_make_resource(env, ret);
enif_release_resource(ret);
return handle;
}
}
// int xlAutoFilterColumnSize(AutoFilterHandle handle);
ERL_NIF_TERM c_xlAutoFilterColumnSize(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int ret = xlAutoFilterColumnSize(autofilter_resource->handle);
return enif_make_int(env, ret);
}
// FilterColumnHandle xlAutoFilterColumnByIndex(AutoFilterHandle handle, int index);
ERL_NIF_TERM c_xlAutoFilterColumnByIndex(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int index;
if (0 == enif_get_int(env, argv[1], &index)) {
return enif_make_badarg(env);
}
FilterColumnHandle autofilter_handle = xlAutoFilterColumnByIndex(autofilter_resource->handle, index);
if(!autofilter_handle) {
return enif_make_atom(env, "nil");
} else {
FilterColumnType *ret = enif_alloc_resource(TypeOfFilterColumn, sizeof(FilterColumnType));
ret->handle = autofilter_handle;
ERL_NIF_TERM handle = enif_make_resource(env, ret);
enif_release_resource(ret);
return handle;
}
}
// int xlAutoFilterGetSortRange(AutoFilterHandle handle, int* rowFirst, int* rowLast, int* colFirst, int* colLast);
ERL_NIF_TERM c_xlAutoFilterGetSortRange(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int rowFirst;
int rowLast;
int colFirst;
int colLast;
int ret = xlAutoFilterGetSortRange(autofilter_resource->handle, &rowFirst, &rowLast, &colFirst, &colLast);
return enif_make_list5(env,
enif_make_int(env, ret),
enif_make_int(env, rowFirst),
enif_make_int(env, rowLast),
enif_make_int(env, colFirst),
enif_make_int(env, colLast)
);
}
// int xlAutoFilterGetSort(AutoFilterHandle handle, int* columnIndex, int* descending);
ERL_NIF_TERM c_xlAutoFilterGetSort(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int columnIndex;
int descending;
int ret = xlAutoFilterGetSort(autofilter_resource->handle, &columnIndex, &descending);
return enif_make_list3(env,
enif_make_int(env, ret),
enif_make_int(env, columnIndex),
enif_make_int(env, descending)
);
}
// int xlAutoFilterSetSort(AutoFilterHandle handle, int columnIndex, int descending);
ERL_NIF_TERM c_xlAutoFilterSetSort(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int columnIndex;
if (0 == enif_get_int(env, argv[1], &columnIndex)) {
return enif_make_badarg(env);
}
int descending;
if (0 == enif_get_int(env, argv[2], &descending)) {
return enif_make_badarg(env);
}
int ret = xlAutoFilterSetSort(autofilter_resource->handle, columnIndex, descending);
return enif_make_int(env, ret);
}
// int xlAutoFilterAddSort(AutoFilterHandle handle, int columnIndex, int descending);
ERL_NIF_TERM c_xlAutoFilterAddSort(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
AutofilterType *autofilter_resource = NULL;
if (0 == enif_get_resource(env, argv[0], TypeOfAutofilter, (void**)&autofilter_resource)) {
return enif_make_badarg(env);
}
int columnIndex;
if (0 == enif_get_int(env, argv[1], &columnIndex)) {
return enif_make_badarg(env);
}
int descending;
if (0 == enif_get_int(env, argv[2], &descending)) {
return enif_make_badarg(env);
}
int ret = xlAutoFilterAddSort(autofilter_resource->handle, columnIndex, descending);
return enif_make_int(env, ret);
}