From 79aed0f7f042554d54c1504f7401624163499c36 Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Tue, 20 Mar 2001 04:51:11 +0000 Subject: Upped the version number to 0.5.99.4. 2001-03-19 Christopher James Lahey * configure.in: Upped the version number to 0.5.99.4. * Merged branch: 2001-03-18 Christopher James Lahey * gal/widgets/e-selection-model.c, gal/widgets/e-selection-model.h: Added another semi-private function (e_selection_model_change_cursor.) 2001-03-18 Christopher James Lahey * gal/widgets/e-selection-model.c, gal/widgets/e-selection-model.h: Added a couple of semi-private functions (e_selection_model_change_one_row and e_selection_model_confirm_row_count.) 2001-03-18 Christopher James Lahey * tests/test-tree-1.c, tests/test-tree-3.c: Added arguments for e_tree_memory_callbacks_new of get_save_id and has_save_id to NULL. 2001-03-17 Christopher James Lahey * gal/util/e-util.c (e_sort): Switched to just using qsort directly here. 2001-03-17 Christopher James Lahey * gal/util/e-util.c, gal/util/e-util.h (e_bsearch, e_sort): Added e_sort and e_bsearch. They both take a closure. e_sort guarantees a stable sort. e_bsearch returns the range of matching elements including the position where an object would be if there are no matching elements. 2001-03-16 Christopher James Lahey * gal/Makefile.am (libgal_la_LIBADD): Added e-tree-sorted.lo. 2001-03-14 Christopher James Lahey * gal/widgets/e-selection-model-simple.c, gal/widgets/e-selection-model-simple.h: Replaced the methods insert_row and delete_row with insert_rows and delete_rows. * gal/widgets/e-selection-model.c, gal/widgets/e-selection-model.h: Replaced the methods insert_row and delete_row with insert_rows and delete_rows. 2001-03-08 Christopher James Lahey * Makefile.am: Added e-table/e-table-utils.lo, e-table/e-tree-memory-callbacks.lo, e-table/e-tree-memory.lo, e-table/e-tree-scrolled.lo, e-table/e-tree-table-adapter.lo, and e-table/e-tree.lo. Removed e-table/e-tree-simple.lo. * gal/util/e-util.c, gal/util/e-util.h: Added a whole bunch of e_marshal functions for ETree. * tests/test-tree-1.c, tests/test-tree-3.c: Reworked these to use the new tree stuff. End of branch svn path=/trunk/; revision=8840 --- widgets/misc/e-selection-model-simple.c | 18 ++++---- widgets/misc/e-selection-model-simple.h | 10 ++-- widgets/misc/e-selection-model.c | 82 ++++++++++++++++++++------------- widgets/misc/e-selection-model.h | 17 +++++-- 4 files changed, 78 insertions(+), 49 deletions(-) (limited to 'widgets/misc') diff --git a/widgets/misc/e-selection-model-simple.c b/widgets/misc/e-selection-model-simple.c index 9a9c1e0d79..8b8329b7bb 100644 --- a/widgets/misc/e-selection-model-simple.c +++ b/widgets/misc/e-selection-model-simple.c @@ -74,19 +74,21 @@ esms_get_row_count (ESelectionModel *esm) return esms->row_count; } -void e_selection_model_simple_insert_row (ESelectionModelSimple *esms, - int row) +void e_selection_model_simple_insert_rows (ESelectionModelSimple *esms, + int row, + int count) { - esms->row_count ++; - e_selection_model_insert_row (E_SELECTION_MODEL(esms), row); + esms->row_count += count; + e_selection_model_insert_rows (E_SELECTION_MODEL(esms), row, count); } void -e_selection_model_simple_delete_row (ESelectionModelSimple *esms, - int row) +e_selection_model_simple_delete_rows (ESelectionModelSimple *esms, + int row, + int count) { - esms->row_count --; - e_selection_model_delete_row (E_SELECTION_MODEL(esms), row); + esms->row_count -= count; + e_selection_model_delete_rows (E_SELECTION_MODEL(esms), row, count); } void diff --git a/widgets/misc/e-selection-model-simple.h b/widgets/misc/e-selection-model-simple.h index 52e785880c..65d69d0143 100644 --- a/widgets/misc/e-selection-model-simple.h +++ b/widgets/misc/e-selection-model-simple.h @@ -27,10 +27,12 @@ typedef struct { GtkType e_selection_model_simple_get_type (void); ESelectionModelSimple *e_selection_model_simple_new (void); -void e_selection_model_simple_insert_row (ESelectionModelSimple *esms, - int row); -void e_selection_model_simple_delete_row (ESelectionModelSimple *esms, - int row); +void e_selection_model_simple_insert_rows (ESelectionModelSimple *esms, + int row, + int count); +void e_selection_model_simple_delete_rows (ESelectionModelSimple *esms, + int row, + int count); void e_selection_model_simple_move_row (ESelectionModelSimple *esms, int old_row, int new_row); diff --git a/widgets/misc/e-selection-model.c b/widgets/misc/e-selection-model.c index de48bc3952..c52397ca37 100644 --- a/widgets/misc/e-selection-model.c +++ b/widgets/misc/e-selection-model.c @@ -27,7 +27,6 @@ static GtkObjectClass *e_selection_model_parent_class; -static void change_one_row(ESelectionModel *selection, int row, gboolean grow); static void esm_select_single_row (ESelectionModel *selection, int row); enum { @@ -48,6 +47,19 @@ enum { ARG_CURSOR_MODE, }; +gboolean +e_selection_model_confirm_row_count(ESelectionModel *esm) +{ + if (esm->row_count < 0) { + esm->row_count = e_selection_model_get_row_count(esm); + if (esm->row_count < 0) + return FALSE; + g_free(esm->selection); + esm->selection = g_new0(gint, (esm->row_count + 31) / 32); + } + return TRUE; +} + static void e_selection_model_insert_row_real(ESelectionModel *esm, int row) { @@ -116,20 +128,26 @@ e_selection_model_delete_row_real(ESelectionModel *esm, int row) esm->cursor_row --; } +/* FIXME : Improve efficiency here. */ void -e_selection_model_delete_row(ESelectionModel *esm, int row) +e_selection_model_delete_rows(ESelectionModel *esm, int row, int count) { - e_selection_model_delete_row_real(esm, row); + int i; + for (i = 0; i < count; i++) + e_selection_model_delete_row_real(esm, row); gtk_signal_emit(GTK_OBJECT(esm), e_selection_model_signals [SELECTION_CHANGED]); gtk_signal_emit(GTK_OBJECT(esm), e_selection_model_signals [CURSOR_CHANGED], esm->cursor_row, esm->cursor_col); } +/* FIXME : Improve efficiency here. */ void -e_selection_model_insert_row(ESelectionModel *esm, int row) +e_selection_model_insert_rows(ESelectionModel *esm, int row, int count) { - e_selection_model_insert_row_real(esm, row); + int i; + for (i = 0; i < count; i++) + e_selection_model_insert_row_real(esm, row); gtk_signal_emit(GTK_OBJECT(esm), e_selection_model_signals [SELECTION_CHANGED]); gtk_signal_emit(GTK_OBJECT(esm), @@ -150,7 +168,7 @@ e_selection_model_move_row(ESelectionModel *esm, int old_row, int new_row) if (esm->mode == GTK_SELECTION_SINGLE) esm_select_single_row (esm, new_row); else - change_one_row(esm, new_row, TRUE); + e_selection_model_change_one_row(esm, new_row, TRUE); } if (cursor) { esm->cursor_row = new_row; @@ -372,8 +390,8 @@ e_selection_model_foreach (ESelectionModel *selection, #define OPERATE(object, i,mask,grow) ((grow) ? (((object)->selection[(i)]) |= ((guint32) ~(mask))) : (((object)->selection[(i)]) &= (mask))) -static void -change_one_row(ESelectionModel *selection, int row, gboolean grow) +void +e_selection_model_change_one_row(ESelectionModel *selection, int row, gboolean grow) { int i; i = BOX(row); @@ -388,7 +406,7 @@ change_selection(ESelectionModel *selection, int start, int end, gboolean grow) if (start != end) { if (selection->sorter && e_sorter_needs_sorting(selection->sorter)) { for ( i = start; i < end; i++) { - change_one_row(selection, e_sorter_sorted_to_model(selection->sorter, i), grow); + e_selection_model_change_one_row(selection, e_sorter_sorted_to_model(selection->sorter, i), grow); } } else { i = BOX(start); @@ -509,13 +527,8 @@ e_selection_model_do_something (ESelectionModel *selection, if (col == -1 && row != -1) col = 0; - if (selection->row_count < 0) { - selection->row_count = e_selection_model_get_row_count(selection); - if (selection->row_count < 0) - return; - g_free(selection->selection); - selection->selection = g_new0(gint, (selection->row_count + 31) / 32); - } + if (!e_selection_model_confirm_row_count(selection)) + return; if (selection->row_count >= 0 && row < selection->row_count) { switch (selection->mode) { case GTK_SELECTION_SINGLE: @@ -635,7 +648,7 @@ move_selection (ESelectionModel *selection, */ gint e_selection_model_key_press (ESelectionModel *selection, - GdkEventKey *key) + GdkEventKey *key) { switch (key->keyval) { case GDK_Up: @@ -766,14 +779,9 @@ void e_selection_model_select_all (ESelectionModel *selection) { int i; - - if (selection->row_count < 0) { - selection->row_count = e_selection_model_get_row_count(selection); - if (selection->row_count < 0) - return; - g_free (selection->selection); - selection->selection = g_new0 (gint, (selection->row_count + 31) / 32); - } + + if (!e_selection_model_confirm_row_count(selection)) + return; if (!selection->selection) selection->selection = g_new0 (gint, (selection->row_count + 31) / 32); @@ -814,14 +822,9 @@ void e_selection_model_invert_selection (ESelectionModel *selection) { int i; - - if (selection->row_count < 0) { - selection->row_count = e_selection_model_get_row_count (selection); - if (selection->row_count < 0) + + if (!e_selection_model_confirm_row_count(selection)) return; - g_free (selection->selection); - selection->selection = g_new0 (gint, (selection->row_count + 31) / 32); - } if (!selection->selection) selection->selection = g_new0 (gint, (selection->row_count + 31) / 32); @@ -850,3 +853,18 @@ e_selection_model_get_row_count (ESelectionModel *selection) else return 0; } + +void +e_selection_model_change_cursor (ESelectionModel *selection, int row) +{ + g_return_if_fail(selection != NULL); + g_return_if_fail(E_IS_SELECTION_MODEL(selection)); + + selection->cursor_row = row; + if (row == -1) + selection->cursor_col = -1; + else if (selection->cursor_col == -1) + selection->cursor_col = 0; + gtk_signal_emit(GTK_OBJECT(selection), + e_selection_model_signals[CURSOR_CHANGED], selection->cursor_row, selection->cursor_col); +} diff --git a/widgets/misc/e-selection-model.h b/widgets/misc/e-selection-model.h index 74cbcb50d2..5ba0411587 100644 --- a/widgets/misc/e-selection-model.h +++ b/widgets/misc/e-selection-model.h @@ -65,7 +65,6 @@ typedef struct { } ESelectionModelClass; GtkType e_selection_model_get_type (void); - gboolean e_selection_model_is_row_selected (ESelectionModel *selection, gint n); void e_selection_model_foreach (ESelectionModel *selection, @@ -87,13 +86,21 @@ void e_selection_model_select_all (ESelectionModel *selection); void e_selection_model_invert_selection (ESelectionModel *selection); /* Private Functions */ -void e_selection_model_insert_row (ESelectionModel *esm, - int row); -void e_selection_model_delete_row (ESelectionModel *esm, - int row); +void e_selection_model_insert_rows (ESelectionModel *esm, + int row, + int count); +void e_selection_model_delete_rows (ESelectionModel *esm, + int row, + int count); void e_selection_model_move_row (ESelectionModel *esm, int old_row, int new_row); +void e_selection_model_change_one_row (ESelectionModel *esm, + int row, + gboolean on); +void e_selection_model_change_cursor (ESelectionModel *esm, + int row); +gboolean e_selection_model_confirm_row_count (ESelectionModel *esm); /* Virtual Function */ gint e_selection_model_get_row_count (ESelectionModel *esm); -- cgit