New files for doing a selection model. Not finished yet and thus not in
2000-07-25 Christopher James Lahey <clahey@helixcode.com> * e-table-selection-model.c, e-table-selection-model.h: New files for doing a selection model. Not finished yet and thus not in Makefile.am. * e-table.c, e-table.h: Renamed the new dnd signals so that they won't conflict with the widget signals. svn path=/trunk/; revision=4326
This commit is contained in:
committed by
Chris Lahey
parent
1f1872ec3c
commit
384b3e38f2
@ -1,3 +1,12 @@
|
||||
2000-07-25 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
* e-table-selection-model.c, e-table-selection-model.h: New files
|
||||
for doing a selection model. Not finished yet and thus not in
|
||||
Makefile.am.
|
||||
|
||||
* e-table.c, e-table.h: Renamed the new dnd signals so that they
|
||||
won't conflict with the widget signals.
|
||||
|
||||
2000-07-25 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
* e-table.c, e-table.h: Implemented some of the drag & drop code.
|
||||
|
||||
274
widgets/e-table/e-table-selection-model.c
Normal file
274
widgets/e-table/e-table-selection-model.c
Normal file
@ -0,0 +1,274 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
/*
|
||||
* e-table-selection-model.c: a Table Selection Model
|
||||
*
|
||||
* Author:
|
||||
* Miguel de Icaza (miguel@gnu.org)
|
||||
*
|
||||
* (C) 1999 Helix Code, Inc.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <gtk/gtksignal.h>
|
||||
#include "e-table-selection-model.h"
|
||||
#include "e-util/e-util.h"
|
||||
|
||||
#define ETSM_CLASS(e) ((ETableSelectionModelClass *)((GtkObject *)e)->klass)
|
||||
|
||||
#define PARENT_TYPE gtk_object_get_type ()
|
||||
|
||||
|
||||
static GtkObjectClass *e_table_selection_model_parent_class;
|
||||
|
||||
enum {
|
||||
SELECTION_MODEL_CHANGED,
|
||||
GROUP_SELECTION_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint e_table_selection_model_signals [LAST_SIGNAL] = { 0, };
|
||||
|
||||
static void
|
||||
model_changed(ETableModel *etm, ETableSelectionModel *etsm)
|
||||
{
|
||||
g_free(etsm->selection);
|
||||
etsm->selection = NULL;
|
||||
etsm->row_count = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
model_row_inserted(ETableModel *etm, int row, ETableSelectionModel *etsm)
|
||||
{
|
||||
int box;
|
||||
int i;
|
||||
int offset;
|
||||
if(etsm->row_count >= 0) {
|
||||
if ((etsm->row_count & 0x1f /*%32*/) == 0) {
|
||||
etsm->selection = e_realloc(etsm->selection, (etsm->row_count >> 5/* /32 */) + 1);
|
||||
etsm->selection[etsm->row_count >> 5] = 0;
|
||||
}
|
||||
box = row >> 5;
|
||||
for (i = etsm->row_count >> 5; i > box; i--) {
|
||||
etsm->selection[i] = (etsm->selection[i] >> 1) & (etsm->selection[i - 1] << 31)
|
||||
}
|
||||
offset = row & 0x1f;
|
||||
etsm->selection[i] = ((etsm->selection[i] >> (32 - offset)) << (31 - offset)) & ((etsm->selection[i] << offset) >> offset);
|
||||
}
|
||||
}
|
||||
|
||||
inline static void
|
||||
add_model(ETableSelectionModel *etsm, ETableModel *model)
|
||||
{
|
||||
etsm->model = model;
|
||||
if (model)
|
||||
gtk_object_ref(GTK_OBJECT(model));
|
||||
}
|
||||
|
||||
inline static void
|
||||
drop_model(ETableSelectionModel *etsm)
|
||||
{
|
||||
if (etsm->model)
|
||||
gtk_object_unref(GTK_OBJECT(etsm->model));
|
||||
etsm->model = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
etsm_destroy (GtkObject *object)
|
||||
{
|
||||
ETableSelectionModel *etsm;
|
||||
|
||||
etsm = E_TABLE_SELECTION_MODEL (object);
|
||||
|
||||
g_free(etsm->selction);
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_init (ETableSelectionModel *selection)
|
||||
{
|
||||
selection->selection = NULL;
|
||||
selection->row_count = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_class_init (ETableSelectionModelClass *klass)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
e_table_selection_model_parent_class = gtk_type_class (gtk_object_get_type ());
|
||||
|
||||
object_class = GTK_OBJECT_CLASS(klass);
|
||||
|
||||
object_class->destroy = etsm_destroy;
|
||||
|
||||
e_table_selection_model_signals [SELECTION_MODEL_CHANGED] =
|
||||
gtk_signal_new ("selection_model_changed",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableSelectionModelClass, selection_model_changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
e_table_selection_model_signals [GROUP_SELECTION_CHANGED] =
|
||||
gtk_signal_new ("group_selection_changed",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableSelectionModelClass, group_selection_changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
klass->selection_model_changed = NULL;
|
||||
klass->group_selection_changed = NULL;
|
||||
|
||||
gtk_object_class_add_signals (object_class, e_table_selection_model_signals, LAST_SIGNAL);
|
||||
}
|
||||
|
||||
E_MAKE_TYPE(e_table_selection_model, "ETableSelectionModel", ETableSelectionModel,
|
||||
e_table_selection_model_class_init, e_table_selection_model_init, PARENT_TYPE);
|
||||
|
||||
static void
|
||||
e_table_selection_model_selection_model_changed (ETableSelectionModel *selection)
|
||||
{
|
||||
g_return_if_fail (selection != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_SELECTION_MODEL (selection));
|
||||
|
||||
if (selection->frozen) {
|
||||
selection->selection_model_changed = 1;
|
||||
} else {
|
||||
gtk_signal_emit (GTK_OBJECT (selection),
|
||||
e_table_selection_model_signals [SELECTION_MODEL_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_group_selection_changed (ETableSelectionModel *selection)
|
||||
{
|
||||
g_return_if_fail (selection != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_SELECTION_MODEL (selection));
|
||||
|
||||
if (selection->frozen) {
|
||||
selection->group_selection_changed = 1;
|
||||
} else {
|
||||
gtk_signal_emit (GTK_OBJECT (selection),
|
||||
e_table_selection_model_signals [GROUP_SELECTION_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_freeze (ETableSelectionModel *selection)
|
||||
{
|
||||
selection->frozen = 1;
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_thaw (ETableSelectionModel *selection)
|
||||
{
|
||||
selection->frozen = 0;
|
||||
if (selection->selection_model_changed) {
|
||||
selection->selection_model_changed = 0;
|
||||
e_table_selection_model_selection_model_changed(selection);
|
||||
}
|
||||
if (selection->group_selection_changed) {
|
||||
selection->group_selection_changed = 0;
|
||||
e_table_selection_model_group_selection_changed(selection);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
guint
|
||||
e_table_selection_model_grouping_get_count (ETableSelectionModel *selection)
|
||||
{
|
||||
return selection->group_count;
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_grouping_real_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
if (length < selection->group_count) {
|
||||
selection->group_count = length;
|
||||
}
|
||||
if (length > selection->group_count) {
|
||||
selection->groupings = g_realloc(selection->groupings, length * sizeof(ETableSortColumn));
|
||||
selection->group_count = length;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_grouping_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
e_table_selection_model_grouping_real_truncate(selection, length);
|
||||
e_table_selection_model_group_selection_changed(selection);
|
||||
}
|
||||
|
||||
ETableSortColumn
|
||||
e_table_selection_model_grouping_get_nth (ETableSelectionModel *selection, int n)
|
||||
{
|
||||
if (n < selection->group_count) {
|
||||
return selection->groupings[n];
|
||||
} else {
|
||||
ETableSortColumn fake = {0, 0};
|
||||
return fake;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_grouping_set_nth (ETableSelectionModel *selection, int n, ETableSortColumn column)
|
||||
{
|
||||
if (n >= selection->group_count) {
|
||||
e_table_selection_model_grouping_real_truncate(selection, n + 1);
|
||||
}
|
||||
selection->groupings[n] = column;
|
||||
e_table_selection_model_group_selection_changed(selection);
|
||||
}
|
||||
|
||||
|
||||
guint
|
||||
e_table_selection_model_sorting_get_count (ETableSelectionModel *selection)
|
||||
{
|
||||
return selection->sort_count;
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_sorting_real_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
if (length < selection->sort_count) {
|
||||
selection->sort_count = length;
|
||||
}
|
||||
if (length > selection->sort_count) {
|
||||
selection->sortings = g_realloc(selection->sortings, length * sizeof(ETableSortColumn));
|
||||
selection->sort_count = length;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_sorting_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
e_table_selection_model_sorting_real_truncate (selection, length);
|
||||
e_table_selection_model_selection_model_changed(selection);
|
||||
}
|
||||
|
||||
ETableSortColumn
|
||||
e_table_selection_model_sorting_get_nth (ETableSelectionModel *selection, int n)
|
||||
{
|
||||
if (n < selection->sort_count) {
|
||||
return selection->sortings[n];
|
||||
} else {
|
||||
ETableSortColumn fake = {0, 0};
|
||||
return fake;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_sorting_set_nth (ETableSelectionModel *selection, int n, ETableSortColumn column)
|
||||
{
|
||||
if (n >= selection->sort_count) {
|
||||
e_table_selection_model_sorting_real_truncate(selection, n + 1);
|
||||
}
|
||||
selection->sortings[n] = column;
|
||||
e_table_selection_model_selection_model_changed(selection);
|
||||
}
|
||||
|
||||
|
||||
ETableSelectionModel *
|
||||
e_table_selection_model_new (void)
|
||||
{
|
||||
return gtk_type_new (e_table_selection_model_get_type ());
|
||||
}
|
||||
57
widgets/e-table/e-table-selection-model.h
Normal file
57
widgets/e-table/e-table-selection-model.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
#ifndef _E_TABLE_SELECTION_MODEL_H_
|
||||
#define _E_TABLE_SELECTION_MODEL_H_
|
||||
|
||||
#include <gtk/gtkobject.h>
|
||||
|
||||
#define E_TABLE_SELECTION_MODEL_TYPE (e_table_selection_model_get_type ())
|
||||
#define E_TABLE_SELECTION_MODEL(o) (GTK_CHECK_CAST ((o), E_TABLE_SELECTION_MODEL_TYPE, ETableSelectionModel))
|
||||
#define E_TABLE_SELECTION_MODEL_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_TABLE_SELECTION_MODEL_TYPE, ETableSelectionModelClass))
|
||||
#define E_IS_TABLE_SELECTION_MODEL(o) (GTK_CHECK_TYPE ((o), E_TABLE_SELECTION_MODEL_TYPE))
|
||||
#define E_IS_TABLE_SELECTION_MODEL_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_TABLE_SELECTION_MODEL_TYPE))
|
||||
|
||||
typedef struct _ETableSortColumn ETableSortColumn;
|
||||
|
||||
struct _ETableSortColumn {
|
||||
guint column : 31;
|
||||
guint ascending : 1;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
GtkObject base;
|
||||
|
||||
ETableModel *model;
|
||||
|
||||
gint row_count;
|
||||
guint *selection;
|
||||
|
||||
gint cursor_row;
|
||||
gint cursor_col;
|
||||
|
||||
guint model_changed_id;
|
||||
guint model_row_inserted_id, model_row_deleted_id;
|
||||
|
||||
guint frozen : 1;
|
||||
guint selection_model_changed : 1;
|
||||
guint group_info_changed : 1;
|
||||
} ETableSelectionModel;
|
||||
|
||||
typedef struct {
|
||||
GtkObjectClass parent_class;
|
||||
|
||||
/*
|
||||
* Signals
|
||||
*/
|
||||
void (*selection_model_changed) (ETableSelectionModel *selection);
|
||||
void (*group_model_changed) (ETableSelectionModel *selection);
|
||||
} ETableSelectionModelClass;
|
||||
|
||||
GtkType e_table_selection_model_get_type (void);
|
||||
|
||||
gboolean e_table_selection_model_is_row_selected (ETableSelectionModel *selection,
|
||||
int n);
|
||||
GList *e_table_selection_model_get_selection_list (ETableSelectionModel *selection);
|
||||
|
||||
ETableSelectionModel *e_table_selection_model_new (void);
|
||||
|
||||
#endif /* _E_TABLE_SELECTION_MODEL_H_ */
|
||||
@ -46,15 +46,15 @@ enum {
|
||||
RIGHT_CLICK,
|
||||
KEY_PRESS,
|
||||
|
||||
DRAG_BEGIN,
|
||||
DRAG_END,
|
||||
DRAG_DATA_GET,
|
||||
DRAG_DATA_DELETE,
|
||||
TABLE_DRAG_BEGIN,
|
||||
TABLE_DRAG_END,
|
||||
TABLE_DRAG_DATA_GET,
|
||||
TABLE_DRAG_DATA_DELETE,
|
||||
|
||||
DRAG_LEAVE,
|
||||
DRAG_MOTION,
|
||||
DRAG_DROP,
|
||||
DRAG_DATA_RECEIVED,
|
||||
TABLE_DRAG_LEAVE,
|
||||
TABLE_DRAG_MOTION,
|
||||
TABLE_DRAG_DROP,
|
||||
TABLE_DRAG_DATA_RECEIVED,
|
||||
|
||||
LAST_SIGNAL
|
||||
};
|
||||
@ -1046,7 +1046,7 @@ et_drag_begin (GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_BEGIN],
|
||||
et_signals [TABLE_DRAG_BEGIN],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context);
|
||||
@ -1058,7 +1058,7 @@ et_drag_end (GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_END],
|
||||
et_signals [TABLE_DRAG_END],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context);
|
||||
@ -1073,7 +1073,7 @@ et_drag_data_get(GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_DATA_GET],
|
||||
et_signals [TABLE_DRAG_DATA_GET],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context,
|
||||
@ -1088,7 +1088,7 @@ et_drag_data_delete(GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_DATA_DELETE],
|
||||
et_signals [TABLE_DRAG_DATA_DELETE],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context);
|
||||
@ -1101,7 +1101,7 @@ et_drag_leave(GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_LEAVE],
|
||||
et_signals [TABLE_DRAG_LEAVE],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1129,7 +1129,7 @@ et_drag_motion(GtkWidget *widget,
|
||||
if (et->drop_row >= 0 && et->drop_col >= 0 &&
|
||||
row != et->drop_row && col != et->drop_row) {
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_LEAVE],
|
||||
et_signals [TABLE_DRAG_LEAVE],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1138,7 +1138,7 @@ et_drag_motion(GtkWidget *widget,
|
||||
et->drop_row = row;
|
||||
et->drop_col = col;
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_MOTION],
|
||||
et_signals [TABLE_DRAG_MOTION],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1168,13 +1168,13 @@ et_drag_drop(GtkWidget *widget,
|
||||
if (et->drop_row >= 0 && et->drop_col >= 0 &&
|
||||
row != et->drop_row && col != et->drop_row) {
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_LEAVE],
|
||||
et_signals [TABLE_DRAG_LEAVE],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
time);
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_MOTION],
|
||||
et_signals [TABLE_DRAG_MOTION],
|
||||
row,
|
||||
col,
|
||||
context,
|
||||
@ -1186,7 +1186,7 @@ et_drag_drop(GtkWidget *widget,
|
||||
et->drop_row = row;
|
||||
et->drop_col = col;
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_DROP],
|
||||
et_signals [TABLE_DRAG_DROP],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1217,7 +1217,7 @@ et_drag_data_received(GtkWidget *widget,
|
||||
&row,
|
||||
&col);
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_MOTION],
|
||||
et_signals [TABLE_DRAG_MOTION],
|
||||
row,
|
||||
col,
|
||||
context,
|
||||
@ -1246,15 +1246,15 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
klass->right_click = NULL;
|
||||
klass->key_press = NULL;
|
||||
|
||||
klass->drag_begin = NULL;
|
||||
klass->drag_end = NULL;
|
||||
klass->drag_data_get = NULL;
|
||||
klass->drag_data_delete = NULL;
|
||||
klass->table_drag_begin = NULL;
|
||||
klass->table_drag_end = NULL;
|
||||
klass->table_drag_data_get = NULL;
|
||||
klass->table_drag_data_delete = NULL;
|
||||
|
||||
klass->drag_leave = NULL;
|
||||
klass->drag_motion = NULL;
|
||||
klass->drag_drop = NULL;
|
||||
klass->drag_data_received = NULL;
|
||||
klass->table_drag_leave = NULL;
|
||||
klass->table_drag_motion = NULL;
|
||||
klass->table_drag_drop = NULL;
|
||||
klass->table_drag_data_received = NULL;
|
||||
|
||||
et_signals [ROW_SELECTION] =
|
||||
gtk_signal_new ("row_selection",
|
||||
@ -1296,31 +1296,31 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
e_marshal_INT__INT_INT_POINTER,
|
||||
GTK_TYPE_INT, 3, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_POINTER);
|
||||
|
||||
et_signals[DRAG_BEGIN] =
|
||||
gtk_signal_new ("drag_begin",
|
||||
et_signals[TABLE_DRAG_BEGIN] =
|
||||
gtk_signal_new ("table_drag_begin",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_begin),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_begin),
|
||||
gtk_marshal_NONE__INT_INT_POINTER,
|
||||
GTK_TYPE_NONE, 3,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT);
|
||||
et_signals[DRAG_END] =
|
||||
gtk_signal_new ("drag_end",
|
||||
et_signals[TABLE_DRAG_END] =
|
||||
gtk_signal_new ("table_drag_end",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_end),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_end),
|
||||
gtk_marshal_NONE__INT_INT_POINTER,
|
||||
GTK_TYPE_NONE, 3,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT);
|
||||
et_signals[DRAG_DATA_GET] =
|
||||
gtk_signal_new ("drag_data_get",
|
||||
et_signals[TABLE_DRAG_DATA_GET] =
|
||||
gtk_signal_new ("table_drag_data_get",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_data_get),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_data_get),
|
||||
e_marshal_NONE__INT_INT_POINTER_POINTER_UINT_UINT,
|
||||
GTK_TYPE_NONE, 6,
|
||||
GTK_TYPE_INT,
|
||||
@ -1329,33 +1329,33 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
GTK_TYPE_SELECTION_DATA,
|
||||
GTK_TYPE_UINT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_DATA_DELETE] =
|
||||
gtk_signal_new ("drag_data_delete",
|
||||
et_signals[TABLE_DRAG_DATA_DELETE] =
|
||||
gtk_signal_new ("table_drag_data_delete",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_data_delete),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_data_delete),
|
||||
gtk_marshal_NONE__INT_INT_POINTER,
|
||||
GTK_TYPE_NONE, 3,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT);
|
||||
|
||||
et_signals[DRAG_LEAVE] =
|
||||
gtk_signal_new ("drag_leave",
|
||||
et_signals[TABLE_DRAG_LEAVE] =
|
||||
gtk_signal_new ("table_drag_leave",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_leave),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_leave),
|
||||
e_marshal_NONE__INT_INT_POINTER_UINT,
|
||||
GTK_TYPE_NONE, 4,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_MOTION] =
|
||||
gtk_signal_new ("drag_motion",
|
||||
et_signals[TABLE_DRAG_MOTION] =
|
||||
gtk_signal_new ("table_drag_motion",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_motion),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_motion),
|
||||
e_marshal_BOOL__INT_INT_POINTER_INT_INT_UINT,
|
||||
GTK_TYPE_BOOL, 6,
|
||||
GTK_TYPE_INT,
|
||||
@ -1364,11 +1364,11 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_DROP] =
|
||||
gtk_signal_new ("drag_drop",
|
||||
et_signals[TABLE_DRAG_DROP] =
|
||||
gtk_signal_new ("table_drag_drop",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_drop),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_drop),
|
||||
e_marshal_BOOL__INT_INT_POINTER_INT_INT_UINT,
|
||||
GTK_TYPE_BOOL, 6,
|
||||
GTK_TYPE_INT,
|
||||
@ -1377,11 +1377,11 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_DATA_RECEIVED] =
|
||||
gtk_signal_new ("drag_data_received",
|
||||
et_signals[TABLE_DRAG_DATA_RECEIVED] =
|
||||
gtk_signal_new ("table_drag_data_received",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_data_received),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_data_received),
|
||||
e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_UINT_UINT,
|
||||
GTK_TYPE_NONE, 8,
|
||||
GTK_TYPE_INT,
|
||||
|
||||
@ -88,55 +88,55 @@ typedef struct {
|
||||
GtkAdjustment *vadjustment);
|
||||
|
||||
/* Source side drag signals */
|
||||
void (* drag_begin) (ETable *table,
|
||||
void (* table_drag_begin) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
void (* table_drag_end) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
void (* drag_end) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
void (* drag_data_get) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
void (* drag_data_delete) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
|
||||
void (* table_drag_data_get) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
void (* table_drag_data_delete) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
|
||||
/* Target side drag signals */
|
||||
void (* drag_leave) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
guint time);
|
||||
gboolean (* drag_motion) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
gboolean (* drag_drop) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
void (* drag_data_received) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
void (* table_drag_leave) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
guint time);
|
||||
gboolean (* table_drag_motion) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
gboolean (* table_drag_drop) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
void (* table_drag_data_received) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
} ETableClass;
|
||||
|
||||
GtkType e_table_get_type (void);
|
||||
|
||||
274
widgets/table/e-table-selection-model.c
Normal file
274
widgets/table/e-table-selection-model.c
Normal file
@ -0,0 +1,274 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
/*
|
||||
* e-table-selection-model.c: a Table Selection Model
|
||||
*
|
||||
* Author:
|
||||
* Miguel de Icaza (miguel@gnu.org)
|
||||
*
|
||||
* (C) 1999 Helix Code, Inc.
|
||||
*/
|
||||
#include <config.h>
|
||||
#include <gtk/gtksignal.h>
|
||||
#include "e-table-selection-model.h"
|
||||
#include "e-util/e-util.h"
|
||||
|
||||
#define ETSM_CLASS(e) ((ETableSelectionModelClass *)((GtkObject *)e)->klass)
|
||||
|
||||
#define PARENT_TYPE gtk_object_get_type ()
|
||||
|
||||
|
||||
static GtkObjectClass *e_table_selection_model_parent_class;
|
||||
|
||||
enum {
|
||||
SELECTION_MODEL_CHANGED,
|
||||
GROUP_SELECTION_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint e_table_selection_model_signals [LAST_SIGNAL] = { 0, };
|
||||
|
||||
static void
|
||||
model_changed(ETableModel *etm, ETableSelectionModel *etsm)
|
||||
{
|
||||
g_free(etsm->selection);
|
||||
etsm->selection = NULL;
|
||||
etsm->row_count = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
model_row_inserted(ETableModel *etm, int row, ETableSelectionModel *etsm)
|
||||
{
|
||||
int box;
|
||||
int i;
|
||||
int offset;
|
||||
if(etsm->row_count >= 0) {
|
||||
if ((etsm->row_count & 0x1f /*%32*/) == 0) {
|
||||
etsm->selection = e_realloc(etsm->selection, (etsm->row_count >> 5/* /32 */) + 1);
|
||||
etsm->selection[etsm->row_count >> 5] = 0;
|
||||
}
|
||||
box = row >> 5;
|
||||
for (i = etsm->row_count >> 5; i > box; i--) {
|
||||
etsm->selection[i] = (etsm->selection[i] >> 1) & (etsm->selection[i - 1] << 31)
|
||||
}
|
||||
offset = row & 0x1f;
|
||||
etsm->selection[i] = ((etsm->selection[i] >> (32 - offset)) << (31 - offset)) & ((etsm->selection[i] << offset) >> offset);
|
||||
}
|
||||
}
|
||||
|
||||
inline static void
|
||||
add_model(ETableSelectionModel *etsm, ETableModel *model)
|
||||
{
|
||||
etsm->model = model;
|
||||
if (model)
|
||||
gtk_object_ref(GTK_OBJECT(model));
|
||||
}
|
||||
|
||||
inline static void
|
||||
drop_model(ETableSelectionModel *etsm)
|
||||
{
|
||||
if (etsm->model)
|
||||
gtk_object_unref(GTK_OBJECT(etsm->model));
|
||||
etsm->model = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
etsm_destroy (GtkObject *object)
|
||||
{
|
||||
ETableSelectionModel *etsm;
|
||||
|
||||
etsm = E_TABLE_SELECTION_MODEL (object);
|
||||
|
||||
g_free(etsm->selction);
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_init (ETableSelectionModel *selection)
|
||||
{
|
||||
selection->selection = NULL;
|
||||
selection->row_count = -1;
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_class_init (ETableSelectionModelClass *klass)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
e_table_selection_model_parent_class = gtk_type_class (gtk_object_get_type ());
|
||||
|
||||
object_class = GTK_OBJECT_CLASS(klass);
|
||||
|
||||
object_class->destroy = etsm_destroy;
|
||||
|
||||
e_table_selection_model_signals [SELECTION_MODEL_CHANGED] =
|
||||
gtk_signal_new ("selection_model_changed",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableSelectionModelClass, selection_model_changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
e_table_selection_model_signals [GROUP_SELECTION_CHANGED] =
|
||||
gtk_signal_new ("group_selection_changed",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableSelectionModelClass, group_selection_changed),
|
||||
gtk_marshal_NONE__NONE,
|
||||
GTK_TYPE_NONE, 0);
|
||||
|
||||
klass->selection_model_changed = NULL;
|
||||
klass->group_selection_changed = NULL;
|
||||
|
||||
gtk_object_class_add_signals (object_class, e_table_selection_model_signals, LAST_SIGNAL);
|
||||
}
|
||||
|
||||
E_MAKE_TYPE(e_table_selection_model, "ETableSelectionModel", ETableSelectionModel,
|
||||
e_table_selection_model_class_init, e_table_selection_model_init, PARENT_TYPE);
|
||||
|
||||
static void
|
||||
e_table_selection_model_selection_model_changed (ETableSelectionModel *selection)
|
||||
{
|
||||
g_return_if_fail (selection != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_SELECTION_MODEL (selection));
|
||||
|
||||
if (selection->frozen) {
|
||||
selection->selection_model_changed = 1;
|
||||
} else {
|
||||
gtk_signal_emit (GTK_OBJECT (selection),
|
||||
e_table_selection_model_signals [SELECTION_MODEL_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_group_selection_changed (ETableSelectionModel *selection)
|
||||
{
|
||||
g_return_if_fail (selection != NULL);
|
||||
g_return_if_fail (E_IS_TABLE_SELECTION_MODEL (selection));
|
||||
|
||||
if (selection->frozen) {
|
||||
selection->group_selection_changed = 1;
|
||||
} else {
|
||||
gtk_signal_emit (GTK_OBJECT (selection),
|
||||
e_table_selection_model_signals [GROUP_SELECTION_CHANGED]);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_freeze (ETableSelectionModel *selection)
|
||||
{
|
||||
selection->frozen = 1;
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_thaw (ETableSelectionModel *selection)
|
||||
{
|
||||
selection->frozen = 0;
|
||||
if (selection->selection_model_changed) {
|
||||
selection->selection_model_changed = 0;
|
||||
e_table_selection_model_selection_model_changed(selection);
|
||||
}
|
||||
if (selection->group_selection_changed) {
|
||||
selection->group_selection_changed = 0;
|
||||
e_table_selection_model_group_selection_changed(selection);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
guint
|
||||
e_table_selection_model_grouping_get_count (ETableSelectionModel *selection)
|
||||
{
|
||||
return selection->group_count;
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_grouping_real_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
if (length < selection->group_count) {
|
||||
selection->group_count = length;
|
||||
}
|
||||
if (length > selection->group_count) {
|
||||
selection->groupings = g_realloc(selection->groupings, length * sizeof(ETableSortColumn));
|
||||
selection->group_count = length;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_grouping_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
e_table_selection_model_grouping_real_truncate(selection, length);
|
||||
e_table_selection_model_group_selection_changed(selection);
|
||||
}
|
||||
|
||||
ETableSortColumn
|
||||
e_table_selection_model_grouping_get_nth (ETableSelectionModel *selection, int n)
|
||||
{
|
||||
if (n < selection->group_count) {
|
||||
return selection->groupings[n];
|
||||
} else {
|
||||
ETableSortColumn fake = {0, 0};
|
||||
return fake;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_grouping_set_nth (ETableSelectionModel *selection, int n, ETableSortColumn column)
|
||||
{
|
||||
if (n >= selection->group_count) {
|
||||
e_table_selection_model_grouping_real_truncate(selection, n + 1);
|
||||
}
|
||||
selection->groupings[n] = column;
|
||||
e_table_selection_model_group_selection_changed(selection);
|
||||
}
|
||||
|
||||
|
||||
guint
|
||||
e_table_selection_model_sorting_get_count (ETableSelectionModel *selection)
|
||||
{
|
||||
return selection->sort_count;
|
||||
}
|
||||
|
||||
static void
|
||||
e_table_selection_model_sorting_real_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
if (length < selection->sort_count) {
|
||||
selection->sort_count = length;
|
||||
}
|
||||
if (length > selection->sort_count) {
|
||||
selection->sortings = g_realloc(selection->sortings, length * sizeof(ETableSortColumn));
|
||||
selection->sort_count = length;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_sorting_truncate (ETableSelectionModel *selection, int length)
|
||||
{
|
||||
e_table_selection_model_sorting_real_truncate (selection, length);
|
||||
e_table_selection_model_selection_model_changed(selection);
|
||||
}
|
||||
|
||||
ETableSortColumn
|
||||
e_table_selection_model_sorting_get_nth (ETableSelectionModel *selection, int n)
|
||||
{
|
||||
if (n < selection->sort_count) {
|
||||
return selection->sortings[n];
|
||||
} else {
|
||||
ETableSortColumn fake = {0, 0};
|
||||
return fake;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_table_selection_model_sorting_set_nth (ETableSelectionModel *selection, int n, ETableSortColumn column)
|
||||
{
|
||||
if (n >= selection->sort_count) {
|
||||
e_table_selection_model_sorting_real_truncate(selection, n + 1);
|
||||
}
|
||||
selection->sortings[n] = column;
|
||||
e_table_selection_model_selection_model_changed(selection);
|
||||
}
|
||||
|
||||
|
||||
ETableSelectionModel *
|
||||
e_table_selection_model_new (void)
|
||||
{
|
||||
return gtk_type_new (e_table_selection_model_get_type ());
|
||||
}
|
||||
57
widgets/table/e-table-selection-model.h
Normal file
57
widgets/table/e-table-selection-model.h
Normal file
@ -0,0 +1,57 @@
|
||||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
||||
#ifndef _E_TABLE_SELECTION_MODEL_H_
|
||||
#define _E_TABLE_SELECTION_MODEL_H_
|
||||
|
||||
#include <gtk/gtkobject.h>
|
||||
|
||||
#define E_TABLE_SELECTION_MODEL_TYPE (e_table_selection_model_get_type ())
|
||||
#define E_TABLE_SELECTION_MODEL(o) (GTK_CHECK_CAST ((o), E_TABLE_SELECTION_MODEL_TYPE, ETableSelectionModel))
|
||||
#define E_TABLE_SELECTION_MODEL_CLASS(k) (GTK_CHECK_CLASS_CAST((k), E_TABLE_SELECTION_MODEL_TYPE, ETableSelectionModelClass))
|
||||
#define E_IS_TABLE_SELECTION_MODEL(o) (GTK_CHECK_TYPE ((o), E_TABLE_SELECTION_MODEL_TYPE))
|
||||
#define E_IS_TABLE_SELECTION_MODEL_CLASS(k) (GTK_CHECK_CLASS_TYPE ((k), E_TABLE_SELECTION_MODEL_TYPE))
|
||||
|
||||
typedef struct _ETableSortColumn ETableSortColumn;
|
||||
|
||||
struct _ETableSortColumn {
|
||||
guint column : 31;
|
||||
guint ascending : 1;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
GtkObject base;
|
||||
|
||||
ETableModel *model;
|
||||
|
||||
gint row_count;
|
||||
guint *selection;
|
||||
|
||||
gint cursor_row;
|
||||
gint cursor_col;
|
||||
|
||||
guint model_changed_id;
|
||||
guint model_row_inserted_id, model_row_deleted_id;
|
||||
|
||||
guint frozen : 1;
|
||||
guint selection_model_changed : 1;
|
||||
guint group_info_changed : 1;
|
||||
} ETableSelectionModel;
|
||||
|
||||
typedef struct {
|
||||
GtkObjectClass parent_class;
|
||||
|
||||
/*
|
||||
* Signals
|
||||
*/
|
||||
void (*selection_model_changed) (ETableSelectionModel *selection);
|
||||
void (*group_model_changed) (ETableSelectionModel *selection);
|
||||
} ETableSelectionModelClass;
|
||||
|
||||
GtkType e_table_selection_model_get_type (void);
|
||||
|
||||
gboolean e_table_selection_model_is_row_selected (ETableSelectionModel *selection,
|
||||
int n);
|
||||
GList *e_table_selection_model_get_selection_list (ETableSelectionModel *selection);
|
||||
|
||||
ETableSelectionModel *e_table_selection_model_new (void);
|
||||
|
||||
#endif /* _E_TABLE_SELECTION_MODEL_H_ */
|
||||
@ -46,15 +46,15 @@ enum {
|
||||
RIGHT_CLICK,
|
||||
KEY_PRESS,
|
||||
|
||||
DRAG_BEGIN,
|
||||
DRAG_END,
|
||||
DRAG_DATA_GET,
|
||||
DRAG_DATA_DELETE,
|
||||
TABLE_DRAG_BEGIN,
|
||||
TABLE_DRAG_END,
|
||||
TABLE_DRAG_DATA_GET,
|
||||
TABLE_DRAG_DATA_DELETE,
|
||||
|
||||
DRAG_LEAVE,
|
||||
DRAG_MOTION,
|
||||
DRAG_DROP,
|
||||
DRAG_DATA_RECEIVED,
|
||||
TABLE_DRAG_LEAVE,
|
||||
TABLE_DRAG_MOTION,
|
||||
TABLE_DRAG_DROP,
|
||||
TABLE_DRAG_DATA_RECEIVED,
|
||||
|
||||
LAST_SIGNAL
|
||||
};
|
||||
@ -1046,7 +1046,7 @@ et_drag_begin (GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_BEGIN],
|
||||
et_signals [TABLE_DRAG_BEGIN],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context);
|
||||
@ -1058,7 +1058,7 @@ et_drag_end (GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_END],
|
||||
et_signals [TABLE_DRAG_END],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context);
|
||||
@ -1073,7 +1073,7 @@ et_drag_data_get(GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_DATA_GET],
|
||||
et_signals [TABLE_DRAG_DATA_GET],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context,
|
||||
@ -1088,7 +1088,7 @@ et_drag_data_delete(GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_DATA_DELETE],
|
||||
et_signals [TABLE_DRAG_DATA_DELETE],
|
||||
et->drag_row,
|
||||
et->drag_col,
|
||||
context);
|
||||
@ -1101,7 +1101,7 @@ et_drag_leave(GtkWidget *widget,
|
||||
ETable *et)
|
||||
{
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_LEAVE],
|
||||
et_signals [TABLE_DRAG_LEAVE],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1129,7 +1129,7 @@ et_drag_motion(GtkWidget *widget,
|
||||
if (et->drop_row >= 0 && et->drop_col >= 0 &&
|
||||
row != et->drop_row && col != et->drop_row) {
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_LEAVE],
|
||||
et_signals [TABLE_DRAG_LEAVE],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1138,7 +1138,7 @@ et_drag_motion(GtkWidget *widget,
|
||||
et->drop_row = row;
|
||||
et->drop_col = col;
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_MOTION],
|
||||
et_signals [TABLE_DRAG_MOTION],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1168,13 +1168,13 @@ et_drag_drop(GtkWidget *widget,
|
||||
if (et->drop_row >= 0 && et->drop_col >= 0 &&
|
||||
row != et->drop_row && col != et->drop_row) {
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_LEAVE],
|
||||
et_signals [TABLE_DRAG_LEAVE],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
time);
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_MOTION],
|
||||
et_signals [TABLE_DRAG_MOTION],
|
||||
row,
|
||||
col,
|
||||
context,
|
||||
@ -1186,7 +1186,7 @@ et_drag_drop(GtkWidget *widget,
|
||||
et->drop_row = row;
|
||||
et->drop_col = col;
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_DROP],
|
||||
et_signals [TABLE_DRAG_DROP],
|
||||
et->drop_row,
|
||||
et->drop_col,
|
||||
context,
|
||||
@ -1217,7 +1217,7 @@ et_drag_data_received(GtkWidget *widget,
|
||||
&row,
|
||||
&col);
|
||||
gtk_signal_emit (GTK_OBJECT (et),
|
||||
et_signals [DRAG_MOTION],
|
||||
et_signals [TABLE_DRAG_MOTION],
|
||||
row,
|
||||
col,
|
||||
context,
|
||||
@ -1246,15 +1246,15 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
klass->right_click = NULL;
|
||||
klass->key_press = NULL;
|
||||
|
||||
klass->drag_begin = NULL;
|
||||
klass->drag_end = NULL;
|
||||
klass->drag_data_get = NULL;
|
||||
klass->drag_data_delete = NULL;
|
||||
klass->table_drag_begin = NULL;
|
||||
klass->table_drag_end = NULL;
|
||||
klass->table_drag_data_get = NULL;
|
||||
klass->table_drag_data_delete = NULL;
|
||||
|
||||
klass->drag_leave = NULL;
|
||||
klass->drag_motion = NULL;
|
||||
klass->drag_drop = NULL;
|
||||
klass->drag_data_received = NULL;
|
||||
klass->table_drag_leave = NULL;
|
||||
klass->table_drag_motion = NULL;
|
||||
klass->table_drag_drop = NULL;
|
||||
klass->table_drag_data_received = NULL;
|
||||
|
||||
et_signals [ROW_SELECTION] =
|
||||
gtk_signal_new ("row_selection",
|
||||
@ -1296,31 +1296,31 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
e_marshal_INT__INT_INT_POINTER,
|
||||
GTK_TYPE_INT, 3, GTK_TYPE_INT, GTK_TYPE_INT, GTK_TYPE_POINTER);
|
||||
|
||||
et_signals[DRAG_BEGIN] =
|
||||
gtk_signal_new ("drag_begin",
|
||||
et_signals[TABLE_DRAG_BEGIN] =
|
||||
gtk_signal_new ("table_drag_begin",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_begin),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_begin),
|
||||
gtk_marshal_NONE__INT_INT_POINTER,
|
||||
GTK_TYPE_NONE, 3,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT);
|
||||
et_signals[DRAG_END] =
|
||||
gtk_signal_new ("drag_end",
|
||||
et_signals[TABLE_DRAG_END] =
|
||||
gtk_signal_new ("table_drag_end",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_end),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_end),
|
||||
gtk_marshal_NONE__INT_INT_POINTER,
|
||||
GTK_TYPE_NONE, 3,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT);
|
||||
et_signals[DRAG_DATA_GET] =
|
||||
gtk_signal_new ("drag_data_get",
|
||||
et_signals[TABLE_DRAG_DATA_GET] =
|
||||
gtk_signal_new ("table_drag_data_get",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_data_get),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_data_get),
|
||||
e_marshal_NONE__INT_INT_POINTER_POINTER_UINT_UINT,
|
||||
GTK_TYPE_NONE, 6,
|
||||
GTK_TYPE_INT,
|
||||
@ -1329,33 +1329,33 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
GTK_TYPE_SELECTION_DATA,
|
||||
GTK_TYPE_UINT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_DATA_DELETE] =
|
||||
gtk_signal_new ("drag_data_delete",
|
||||
et_signals[TABLE_DRAG_DATA_DELETE] =
|
||||
gtk_signal_new ("table_drag_data_delete",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_data_delete),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_data_delete),
|
||||
gtk_marshal_NONE__INT_INT_POINTER,
|
||||
GTK_TYPE_NONE, 3,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT);
|
||||
|
||||
et_signals[DRAG_LEAVE] =
|
||||
gtk_signal_new ("drag_leave",
|
||||
et_signals[TABLE_DRAG_LEAVE] =
|
||||
gtk_signal_new ("table_drag_leave",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_leave),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_leave),
|
||||
e_marshal_NONE__INT_INT_POINTER_UINT,
|
||||
GTK_TYPE_NONE, 4,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_GDK_DRAG_CONTEXT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_MOTION] =
|
||||
gtk_signal_new ("drag_motion",
|
||||
et_signals[TABLE_DRAG_MOTION] =
|
||||
gtk_signal_new ("table_drag_motion",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_motion),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_motion),
|
||||
e_marshal_BOOL__INT_INT_POINTER_INT_INT_UINT,
|
||||
GTK_TYPE_BOOL, 6,
|
||||
GTK_TYPE_INT,
|
||||
@ -1364,11 +1364,11 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_DROP] =
|
||||
gtk_signal_new ("drag_drop",
|
||||
et_signals[TABLE_DRAG_DROP] =
|
||||
gtk_signal_new ("table_drag_drop",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_drop),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_drop),
|
||||
e_marshal_BOOL__INT_INT_POINTER_INT_INT_UINT,
|
||||
GTK_TYPE_BOOL, 6,
|
||||
GTK_TYPE_INT,
|
||||
@ -1377,11 +1377,11 @@ e_table_class_init (GtkObjectClass *object_class)
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_INT,
|
||||
GTK_TYPE_UINT);
|
||||
et_signals[DRAG_DATA_RECEIVED] =
|
||||
gtk_signal_new ("drag_data_received",
|
||||
et_signals[TABLE_DRAG_DATA_RECEIVED] =
|
||||
gtk_signal_new ("table_drag_data_received",
|
||||
GTK_RUN_LAST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (ETableClass, drag_data_received),
|
||||
GTK_SIGNAL_OFFSET (ETableClass, table_drag_data_received),
|
||||
e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_UINT_UINT,
|
||||
GTK_TYPE_NONE, 8,
|
||||
GTK_TYPE_INT,
|
||||
|
||||
@ -88,55 +88,55 @@ typedef struct {
|
||||
GtkAdjustment *vadjustment);
|
||||
|
||||
/* Source side drag signals */
|
||||
void (* drag_begin) (ETable *table,
|
||||
void (* table_drag_begin) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
void (* table_drag_end) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
void (* drag_end) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
void (* drag_data_get) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
void (* drag_data_delete) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
|
||||
void (* table_drag_data_get) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
void (* table_drag_data_delete) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context);
|
||||
|
||||
/* Target side drag signals */
|
||||
void (* drag_leave) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
guint time);
|
||||
gboolean (* drag_motion) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
gboolean (* drag_drop) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
void (* drag_data_received) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
void (* table_drag_leave) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
guint time);
|
||||
gboolean (* table_drag_motion) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
gboolean (* table_drag_drop) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
guint time);
|
||||
void (* table_drag_data_received) (ETable *table,
|
||||
int row,
|
||||
int col,
|
||||
GdkDragContext *context,
|
||||
gint x,
|
||||
gint y,
|
||||
GtkSelectionData *selection_data,
|
||||
guint info,
|
||||
guint time);
|
||||
} ETableClass;
|
||||
|
||||
GtkType e_table_get_type (void);
|
||||
|
||||
Reference in New Issue
Block a user