Fixed some warnings.
2001-03-01 Christopher James Lahey <clahey@ximian.com> * e-cell-pixbuf.c: Fixed some warnings. * e-table-subset.c, e-table-subset.h: Added e_table_subset_print_debugging. 2001-02-27 Christopher James Lahey <clahey@ximian.com> * e-table-sorted-variable.c: Moved etsv_compare to etsu_compare in e-table-sorting-utils.c. Moved most of the contents of etsv_add to e_table_sorting_utils_insert in e-table-sorting-utils.c and call the function. * e-table-sorted.c: Rewrote ets_proxy_row_changed, ets_proxy_row_inserted, and ets_proxy_row_deleted. * e-table-sorting-utils.c, e-table-sorting-utils.h (etsu_compare, e_table_sorting_utils_insert): Added e_table_sorting_utils_insert. * e-table-subset-variable.c: Changed this implementation to be slightly more consistent with other code. svn path=/trunk/; revision=8453
This commit is contained in:
committed by
Chris Lahey
parent
90dabbdb22
commit
89ec4e5af6
@ -146,8 +146,6 @@ pixbuf_event (ECellView *ecell_view, GdkEvent *event,
|
||||
int model_col, int view_col, int row,
|
||||
ECellFlags flags, ECellActions *actions)
|
||||
{
|
||||
ECellPixbufView *pixbuf_view = (ECellPixbufView *) ecell_view;
|
||||
|
||||
/* noop */
|
||||
|
||||
return FALSE;
|
||||
@ -156,7 +154,6 @@ pixbuf_event (ECellView *ecell_view, GdkEvent *event,
|
||||
static gint
|
||||
pixbuf_height (ECellView *ecell_view, int model_col, int view_col, int row)
|
||||
{
|
||||
ECellPixbufView *pixbuf_view = (ECellPixbufView *) ecell_view;
|
||||
GdkPixbuf *pixbuf;
|
||||
|
||||
pixbuf = (GdkPixbuf *) e_table_model_value_at (ecell_view->e_table_model, model_col, row);
|
||||
@ -173,7 +170,6 @@ pixbuf_height (ECellView *ecell_view, int model_col, int view_col, int row)
|
||||
static gint
|
||||
pixbuf_max_width (ECellView *ecell_view, int model_col, int view_col)
|
||||
{
|
||||
ECellPixbufView *pixbuf_view = (ECellPixbufView *) ecell_view;
|
||||
gint num_rows, i;
|
||||
gint max_width = -1;
|
||||
|
||||
|
||||
@ -100,39 +100,6 @@ etsv_insert_idle(ETableSortedVariable *etsv)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* This takes source rows. */
|
||||
static int
|
||||
etsv_compare(ETableSortedVariable *etsv, int row1, int row2)
|
||||
{
|
||||
int j;
|
||||
int sort_count = e_table_sort_info_sorting_get_count(etsv->sort_info);
|
||||
int comp_val = 0;
|
||||
int ascending = 1;
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etsv);
|
||||
|
||||
for (j = 0; j < sort_count; j++) {
|
||||
ETableSortColumn column = e_table_sort_info_sorting_get_nth(etsv->sort_info, j);
|
||||
ETableCol *col;
|
||||
col = e_table_header_get_column_by_col_idx(etsv->full_header, column.column);
|
||||
if (col == NULL)
|
||||
col = e_table_header_get_column (etsv->full_header, e_table_header_count (etsv->full_header) - 1);
|
||||
comp_val = (*col->compare)(e_table_model_value_at (etss->source, col->col_idx, row1),
|
||||
e_table_model_value_at (etss->source, col->col_idx, row2));
|
||||
ascending = column.ascending;
|
||||
if (comp_val != 0)
|
||||
break;
|
||||
}
|
||||
if (comp_val == 0) {
|
||||
if (row1 < row2)
|
||||
comp_val = -1;
|
||||
if (row1 > row2)
|
||||
comp_val = 1;
|
||||
}
|
||||
if (!ascending)
|
||||
comp_val = -comp_val;
|
||||
return comp_val;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
etsv_add (ETableSubsetVariable *etssv,
|
||||
@ -160,53 +127,7 @@ etsv_add (ETableSubsetVariable *etssv,
|
||||
if (etsv->insert_idle_id == 0) {
|
||||
etsv->insert_idle_id = g_idle_add_full(40, (GSourceFunc) etsv_insert_idle, etsv, NULL);
|
||||
}
|
||||
i = 0;
|
||||
/* handle insertions when we have a 'sort group' */
|
||||
if (e_table_model_has_sort_group(etss->source)) {
|
||||
/* find the row this row maps to */
|
||||
char *group = g_strdup(e_table_model_row_sort_group(etss->source, row));
|
||||
const char *newgroup;
|
||||
int cmp, grouplen, newgrouplen;
|
||||
|
||||
newgroup = strrchr(group, '/');
|
||||
grouplen = strlen(group);
|
||||
if (newgroup)
|
||||
cmp = newgroup-group;
|
||||
else
|
||||
cmp = grouplen;
|
||||
|
||||
/* find first common parent */
|
||||
while (i<etss->n_map) {
|
||||
newgroup = e_table_model_row_sort_group(etss->source, etss->map_table[i]);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
/* check matching records */
|
||||
while (i<etss->n_map) {
|
||||
newgroup = e_table_model_row_sort_group(etss->source, etss->map_table[i]);
|
||||
newgrouplen = strlen(newgroup);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
/* common parent, check for same level */
|
||||
if (grouplen == newgrouplen) {
|
||||
if (etsv_compare(etsv, etss->map_table[i], row) >= 0)
|
||||
break;
|
||||
} else if (strncmp(newgroup + cmp, group + cmp, grouplen - cmp) == 0)
|
||||
/* Found a child of the inserted node. Insert here. */
|
||||
break;
|
||||
} else {
|
||||
/* ran out of common parents, insert here */
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
g_free(group);
|
||||
} else {
|
||||
while (i < etss->n_map && etsv_compare(etsv, etss->map_table[i], row) < 0)
|
||||
i++;
|
||||
}
|
||||
i = e_table_sorting_utils_insert(etss->source, etsv->sort_info, etsv->full_header, etss->map_table, etss->n_map, row);
|
||||
memmove(etss->map_table + i + 1, etss->map_table + i, (etss->n_map - i) * sizeof(int));
|
||||
}
|
||||
}
|
||||
|
||||
@ -99,7 +99,6 @@ ets_sort_idle(ETableSorted *ets)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static gboolean
|
||||
ets_insert_idle(ETableSorted *ets)
|
||||
{
|
||||
@ -107,125 +106,6 @@ ets_insert_idle(ETableSorted *ets)
|
||||
ets->insert_idle_id = 0;
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/* This takes source rows. */
|
||||
static int
|
||||
ets_compare(ETableSorted *ets, int row1, int row2)
|
||||
{
|
||||
int j;
|
||||
int sort_count = e_table_sort_info_sorting_get_count(ets->sort_info);
|
||||
int comp_val = 0;
|
||||
int ascending = 1;
|
||||
ETableSubset *etss = E_TABLE_SUBSET(ets);
|
||||
|
||||
for (j = 0; j < sort_count; j++) {
|
||||
ETableSortColumn column = e_table_sort_info_sorting_get_nth(ets->sort_info, j);
|
||||
ETableCol *col;
|
||||
col = e_table_header_get_column_by_col_idx(ets->full_header, column.column);
|
||||
if (col == NULL)
|
||||
col = e_table_header_get_column (ets->full_header, e_table_header_count (ets->full_header) - 1);
|
||||
comp_val = (*col->compare)(e_table_model_value_at (etss->source, col->col_idx, row1),
|
||||
e_table_model_value_at (etss->source, col->col_idx, row2));
|
||||
ascending = column.ascending;
|
||||
if (comp_val != 0)
|
||||
break;
|
||||
}
|
||||
if (comp_val == 0) {
|
||||
if (row1 < row2)
|
||||
comp_val = -1;
|
||||
if (row1 > row2)
|
||||
comp_val = 1;
|
||||
}
|
||||
if (!ascending)
|
||||
comp_val = -comp_val;
|
||||
return comp_val;
|
||||
}
|
||||
|
||||
static void
|
||||
ets_add (ETableSorted *ets
|
||||
gint row)
|
||||
{
|
||||
ETableModel *etm = E_TABLE_MODEL(etssv);
|
||||
ETableSubset *etss = E_TABLE_SUBSET(etssv);
|
||||
ETableSorted *ets = E_TABLE_SORTED (etssv);
|
||||
int i;
|
||||
|
||||
if (etss->n_map + 1 > etssv->n_vals_allocated) {
|
||||
etssv->n_vals_allocated += INCREMENT_AMOUNT;
|
||||
etss->map_table = g_realloc (etss->map_table, (etssv->n_vals_allocated) * sizeof(int));
|
||||
}
|
||||
i = etss->n_map;
|
||||
if (ets->sort_idle_id == 0) {
|
||||
/* this is to see if we're inserting a lot of things between idle loops.
|
||||
If we are, we're busy, its faster to just append and perform a full sort later */
|
||||
ets->insert_count++;
|
||||
if (ets->insert_count > ETS_INSERT_MAX) {
|
||||
/* schedule a sort, and append instead */
|
||||
ets->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, ets, NULL);
|
||||
} else {
|
||||
/* make sure we have an idle handler to reset the count every now and then */
|
||||
if (ets->insert_idle_id == 0) {
|
||||
ets->insert_idle_id = g_idle_add_full(40, (GSourceFunc) ets_insert_idle, ets, NULL);
|
||||
}
|
||||
i = 0;
|
||||
/* handle insertions when we have a 'sort group' */
|
||||
if (e_table_model_has_sort_group(etss->source)) {
|
||||
/* find the row this row maps to */
|
||||
char *group = g_strdup(e_table_model_row_sort_group(etss->source, row));
|
||||
const char *newgroup;
|
||||
int cmp, grouplen, newgrouplen;
|
||||
|
||||
newgroup = strrchr(group, '/');
|
||||
grouplen = strlen(group);
|
||||
if (newgroup)
|
||||
cmp = newgroup-group;
|
||||
else
|
||||
cmp = grouplen;
|
||||
|
||||
/* find first common parent */
|
||||
while (i<etss->n_map) {
|
||||
newgroup = e_table_model_row_sort_group(etss->source, etss->map_table[i]);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
/* check matching records */
|
||||
while (i<etss->n_map) {
|
||||
newgroup = e_table_model_row_sort_group(etss->source, etss->map_table[i]);
|
||||
newgrouplen = strlen(newgroup);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
/* common parent, check for same level */
|
||||
if (grouplen == newgrouplen) {
|
||||
if (ets_compare(ets, etss->map_table[i], row) >= 0)
|
||||
break;
|
||||
} else if (strncmp(newgroup + cmp, group + cmp, grouplen - cmp) == 0)
|
||||
/* Found a child of the inserted node. Insert here. */
|
||||
break;
|
||||
} else {
|
||||
/* ran out of common parents, insert here */
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
g_free(group);
|
||||
} else {
|
||||
while (i < etss->n_map && ets_compare(ets, etss->map_table[i], row) < 0)
|
||||
i++;
|
||||
}
|
||||
memmove(etss->map_table + i + 1, etss->map_table + i, (etss->n_map - i) * sizeof(int));
|
||||
}
|
||||
}
|
||||
etss->map_table[i] = row;
|
||||
etss->n_map++;
|
||||
|
||||
e_table_model_row_inserted (etm, i);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
ETableModel *
|
||||
e_table_sorted_new (ETableModel *source, ETableHeader *full_header, ETableSortInfo *sort_info)
|
||||
@ -283,6 +163,9 @@ ets_proxy_model_row_changed (ETableSubset *subset, ETableModel *source, int row)
|
||||
{
|
||||
if (!E_TABLE_SORTED(subset)->sort_idle_id)
|
||||
E_TABLE_SORTED(subset)->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, subset, NULL);
|
||||
|
||||
if (ets_parent_class->proxy_model_row_changed)
|
||||
(ets_parent_class->proxy_model_row_changed) (subset, source, row);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -290,23 +173,81 @@ ets_proxy_model_cell_changed (ETableSubset *subset, ETableModel *source, int col
|
||||
{
|
||||
ETableSorted *ets = E_TABLE_SORTED(subset);
|
||||
if (e_table_sorting_utils_affects_sort(source, ets->sort_info, ets->full_header, col))
|
||||
ets_proxy_model_row_changed(subset, source, row);
|
||||
else if (ets_parent_class->proxy_model_cell_changed) {
|
||||
ets_proxy_model_row_changed(subset, source, row);
|
||||
else if (ets_parent_class->proxy_model_cell_changed)
|
||||
(ets_parent_class->proxy_model_cell_changed) (subset, source, col, row);
|
||||
}
|
||||
|
||||
static void
|
||||
ets_proxy_model_row_inserted (ETableSubset *etss, ETableModel *source, int row)
|
||||
{
|
||||
ETableModel *etm = E_TABLE_MODEL(etss);
|
||||
ETableSorted *ets = E_TABLE_SORTED(etss);
|
||||
int i;
|
||||
|
||||
e_table_model_pre_change (etm);
|
||||
|
||||
for (i = 0; i < etss->n_map; i++) {
|
||||
if (etss->map_table[i] >= row)
|
||||
etss->map_table[i] ++;
|
||||
}
|
||||
|
||||
|
||||
etss->map_table = g_realloc (etss->map_table, (etss->n_map + 1) * sizeof(int));
|
||||
|
||||
i = etss->n_map;
|
||||
if (ets->sort_idle_id == 0) {
|
||||
/* this is to see if we're inserting a lot of things between idle loops.
|
||||
If we are, we're busy, its faster to just append and perform a full sort later */
|
||||
ets->insert_count++;
|
||||
if (ets->insert_count > ETS_INSERT_MAX) {
|
||||
/* schedule a sort, and append instead */
|
||||
ets->sort_idle_id = g_idle_add_full(50, (GSourceFunc) ets_sort_idle, ets, NULL);
|
||||
} else {
|
||||
/* make sure we have an idle handler to reset the count every now and then */
|
||||
if (ets->insert_idle_id == 0) {
|
||||
ets->insert_idle_id = g_idle_add_full(40, (GSourceFunc) ets_insert_idle, ets, NULL);
|
||||
}
|
||||
i = e_table_sorting_utils_insert(etss->source, ets->sort_info, ets->full_header, etss->map_table, etss->n_map, row);
|
||||
memmove(etss->map_table + i + 1, etss->map_table + i, (etss->n_map - i) * sizeof(int));
|
||||
}
|
||||
}
|
||||
etss->map_table[i] = row;
|
||||
etss->n_map++;
|
||||
|
||||
e_table_model_row_inserted (etm, i);
|
||||
d(g_print("inserted row %d", row));
|
||||
d(e_table_subset_print_debugging(etss));
|
||||
}
|
||||
|
||||
static void
|
||||
ets_proxy_model_row_inserted (ETableSubset *subset, ETableModel *source, int row)
|
||||
ets_proxy_model_row_deleted (ETableSubset *etss, ETableModel *source, int row)
|
||||
{
|
||||
ets_proxy_model_changed(subset, source);
|
||||
}
|
||||
ETableModel *etm = E_TABLE_MODEL(etss);
|
||||
int i;
|
||||
gboolean shift;
|
||||
|
||||
static void
|
||||
ets_proxy_model_row_deleted (ETableSubset *subset, ETableModel *source, int row)
|
||||
{
|
||||
ets_proxy_model_changed(subset, source);
|
||||
shift = row == etss->n_map - 1;
|
||||
|
||||
for (i = 0; i < etss->n_map; i++){
|
||||
if (etss->map_table[i] == row) {
|
||||
e_table_model_pre_change (etm);
|
||||
memmove (etss->map_table + i, etss->map_table + i + 1, (etss->n_map - i - 1) * sizeof(int));
|
||||
etss->n_map --;
|
||||
if (shift)
|
||||
e_table_model_row_deleted (etm, i);
|
||||
}
|
||||
}
|
||||
if (!shift) {
|
||||
for (i = 0; i < etss->n_map; i++) {
|
||||
if (etss->map_table[i] >= row)
|
||||
etss->map_table[i] --;
|
||||
}
|
||||
|
||||
e_table_model_changed (etm);
|
||||
}
|
||||
|
||||
d(g_print("deleted row %d", row));
|
||||
d(e_table_subset_print_debugging(etss));
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@ -5,6 +5,38 @@
|
||||
|
||||
#define d(x)
|
||||
|
||||
/* This takes source rows. */
|
||||
static int
|
||||
etsu_compare(ETableModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, int row1, int row2)
|
||||
{
|
||||
int j;
|
||||
int sort_count = e_table_sort_info_sorting_get_count(sort_info);
|
||||
int comp_val = 0;
|
||||
int ascending = 1;
|
||||
|
||||
for (j = 0; j < sort_count; j++) {
|
||||
ETableSortColumn column = e_table_sort_info_sorting_get_nth(sort_info, j);
|
||||
ETableCol *col;
|
||||
col = e_table_header_get_column_by_col_idx(full_header, column.column);
|
||||
if (col == NULL)
|
||||
col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
|
||||
comp_val = (*col->compare)(e_table_model_value_at (source, col->col_idx, row1),
|
||||
e_table_model_value_at (source, col->col_idx, row2));
|
||||
ascending = column.ascending;
|
||||
if (comp_val != 0)
|
||||
break;
|
||||
}
|
||||
if (comp_val == 0) {
|
||||
if (row1 < row2)
|
||||
comp_val = -1;
|
||||
if (row1 > row2)
|
||||
comp_val = 1;
|
||||
}
|
||||
if (!ascending)
|
||||
comp_val = -comp_val;
|
||||
return comp_val;
|
||||
}
|
||||
|
||||
static ETableSortInfo *sort_info_closure;
|
||||
|
||||
static void **vals_closure;
|
||||
@ -319,12 +351,6 @@ e_table_sorting_utils_sort(ETableModel *source, ETableSortInfo *sort_info, ETabl
|
||||
if (col == NULL)
|
||||
col = e_table_header_get_column (full_header, e_table_header_count (full_header) - 1);
|
||||
for (i = 0; i < rows; i++) {
|
||||
#if 0
|
||||
if( !(i & 0xff) ) {
|
||||
while(gtk_events_pending())
|
||||
gtk_main_iteration();
|
||||
}
|
||||
#endif
|
||||
vals_closure[map_table[i] * cols + j] = e_table_model_value_at (source, col->col_idx, map_table[i]);
|
||||
}
|
||||
compare_closure[j] = col->compare;
|
||||
@ -370,3 +396,133 @@ e_table_sorting_utils_affects_sort (ETableModel *source,
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
e_table_sorting_utils_insert(ETableModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, int *map_table, int rows, int row)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
/* handle insertions when we have a 'sort group' */
|
||||
if (e_table_model_has_sort_group(source)) {
|
||||
/* find the row this row maps to */
|
||||
char *group = g_strdup(e_table_model_row_sort_group(source, row));
|
||||
const char *newgroup;
|
||||
int cmp, grouplen, newgrouplen;
|
||||
|
||||
newgroup = strrchr(group, '/');
|
||||
grouplen = strlen(group);
|
||||
if (newgroup)
|
||||
cmp = newgroup-group;
|
||||
else
|
||||
cmp = grouplen;
|
||||
|
||||
/* find first common parent */
|
||||
while (i < rows) {
|
||||
newgroup = e_table_model_row_sort_group(source, map_table[i]);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
/* check matching records */
|
||||
while (i<row) {
|
||||
newgroup = e_table_model_row_sort_group(source, map_table[i]);
|
||||
newgrouplen = strlen(newgroup);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
/* common parent, check for same level */
|
||||
if (grouplen == newgrouplen) {
|
||||
if (etsu_compare(source, sort_info, full_header, map_table[i], row) >= 0)
|
||||
break;
|
||||
} else if (strncmp(newgroup + cmp, group + cmp, grouplen - cmp) == 0)
|
||||
/* Found a child of the inserted node. Insert here. */
|
||||
break;
|
||||
} else {
|
||||
/* ran out of common parents, insert here */
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
g_free(group);
|
||||
} else {
|
||||
while (i < rows && etsu_compare(source, sort_info, full_header, map_table[i], row) < 0)
|
||||
i++;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
#if 0
|
||||
void *bsearch(const void *key, const void *base, size_t nmemb,
|
||||
size_t size, int (*compar)(const void *, const void *, void *), gpointer user_data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
e_table_sorting_utils_check_position (ETableModel *source, ETableSortInfo *sort_info, ETableHeader *full_header, int *map_table, int rows, int view_row)
|
||||
{
|
||||
int i;
|
||||
int row;
|
||||
|
||||
i = view_row;
|
||||
row = map_table[i];
|
||||
/* handle insertions when we have a 'sort group' */
|
||||
if (e_table_model_has_sort_group(source)) {
|
||||
/* find the row this row maps to */
|
||||
char *group = g_strdup(e_table_model_row_sort_group(source, row));
|
||||
const char *newgroup;
|
||||
int cmp, grouplen, newgrouplen;
|
||||
|
||||
newgroup = strrchr(group, '/');
|
||||
grouplen = strlen(group);
|
||||
if (newgroup)
|
||||
cmp = newgroup-group;
|
||||
else
|
||||
cmp = grouplen;
|
||||
|
||||
/* find first common parent */
|
||||
while (i < rows) {
|
||||
newgroup = e_table_model_row_sort_group(source, map_table[i]);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
/* check matching records */
|
||||
while (i < row) {
|
||||
newgroup = e_table_model_row_sort_group(source, map_table[i]);
|
||||
newgrouplen = strlen(newgroup);
|
||||
if (strncmp(newgroup, group, cmp) == 0) {
|
||||
/* common parent, check for same level */
|
||||
if (grouplen == newgrouplen) {
|
||||
if (etsu_compare(source, sort_info, full_header, map_table[i], row) >= 0)
|
||||
break;
|
||||
} else if (strncmp(newgroup + cmp, group + cmp, grouplen - cmp) == 0)
|
||||
/* Found a child of the inserted node. Insert here. */
|
||||
break;
|
||||
} else {
|
||||
/* ran out of common parents, insert here */
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
g_free(group);
|
||||
} else {
|
||||
i = view_row;
|
||||
if (i < rows && etsu_compare(source, sort_info, full_header, map_table[i + 1], row) < 0) {
|
||||
i ++;
|
||||
while (i < rows - 1 && etsu_compare(source, sort_info, full_header, map_table[i], row) < 0)
|
||||
i ++;
|
||||
} else if (i > 0 && etsu_compare(source, sort_info, full_header, map_table[i - 1], row) > 0) {
|
||||
i --;
|
||||
while (i > 0 && etsu_compare(source, sort_info, full_header, map_table[i], row) > 0)
|
||||
i --;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -21,6 +21,12 @@ gboolean e_table_sorting_utils_affects_sort (ETableModel *source,
|
||||
ETableHeader *full_header,
|
||||
int col);
|
||||
|
||||
int e_table_sorting_utils_insert (ETableModel *source,
|
||||
ETableSortInfo *sort_info,
|
||||
ETableHeader *full_header,
|
||||
int *map_table,
|
||||
int rows,
|
||||
int row);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -32,8 +32,8 @@ etssv_add (ETableSubsetVariable *etssv,
|
||||
e_table_model_pre_change(etm);
|
||||
|
||||
if (etss->n_map + 1 > etssv->n_vals_allocated){
|
||||
etss->map_table = g_realloc (etss->map_table, (etssv->n_vals_allocated + INCREMENT_AMOUNT) * sizeof(int));
|
||||
etssv->n_vals_allocated += INCREMENT_AMOUNT;
|
||||
etss->map_table = g_realloc (etss->map_table, etssv->n_vals_allocated * sizeof(int));
|
||||
}
|
||||
|
||||
etss->map_table[etss->n_map++] = row;
|
||||
|
||||
@ -379,3 +379,12 @@ e_table_subset_get_toplevel (ETableSubset *table)
|
||||
else
|
||||
return table->source;
|
||||
}
|
||||
|
||||
void
|
||||
e_table_subset_print_debugging (ETableSubset *table_model)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < table_model->n_map; i++) {
|
||||
g_print("%8d\n", table_model->map_table[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,11 +43,16 @@ typedef struct {
|
||||
void (*proxy_model_row_deleted) (ETableSubset *etss, ETableModel *etm, int row);
|
||||
} ETableSubsetClass;
|
||||
|
||||
GtkType e_table_subset_get_type (void);
|
||||
ETableModel *e_table_subset_new (ETableModel *etm, int n_vals);
|
||||
ETableModel *e_table_subset_construct (ETableSubset *ets, ETableModel *source, int nvals);
|
||||
GtkType e_table_subset_get_type (void);
|
||||
ETableModel *e_table_subset_new (ETableModel *etm,
|
||||
int n_vals);
|
||||
ETableModel *e_table_subset_construct (ETableSubset *ets,
|
||||
ETableModel *source,
|
||||
int nvals);
|
||||
|
||||
ETableModel *e_table_subset_get_toplevel (ETableSubset *table_model);
|
||||
ETableModel *e_table_subset_get_toplevel (ETableSubset *table_model);
|
||||
|
||||
void e_table_subset_print_debugging (ETableSubset *table_model);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user