New cell-toggle stuff compiles -miguel

svn path=/trunk/; revision=1446
This commit is contained in:
Arturo Espinosa
1999-11-30 09:34:50 +00:00
parent c50636dba3
commit 0177093e77
19 changed files with 179 additions and 42 deletions

View File

@ -1,5 +1,10 @@
1999-11-29 Miguel de Icaza <miguel@gnu.org>
* e-table-col.c (e_table_col_new): Set etc->resizeable.
* e-table-header-item.c (ethi_event): Handle non-resizeables
columns; Add support for minimum width.
* e-cell-toggle.c, e-cell-toggle.h: New file. Implement a
multi-state image toggle cell object.

View File

@ -11,6 +11,8 @@ libevolutionwidgets_a_SOURCES = \
e-cell.h \
e-cell-text.c \
e-cell-text.h \
e-cell-toggle.c \
e-cell-toggle.h \
e-cursors.c \
e-cursors.h \
e-table-col.c \

View File

@ -19,7 +19,7 @@
#define PARENT_TYPE e_cell_get_type()
Typedef struct {
typedef struct {
ECellView cell_view;
GdkGC *gc;
GnomeCanvas *canvas;
@ -71,10 +71,13 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
int col, int row, gboolean selected,
int x1, int y1, int x2, int y2)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
GdkPixbuf *image;
const int value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
ArtPixBuf *art;
int x, y, width, height;
const int value = GPOINTER_TO_INT (
e_table_model_value_at (ecell_view->ecell->table_model, col, row));
if (value >= toggle->n_states){
g_warning ("Value from the table model is %d, the states we support are [0..%d)\n",
@ -83,19 +86,43 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
}
image = toggle->images [value];
art = image->art_pixbuf;
if ((x2 - x1) < art->width){
x = x1;
width = x2 - x1;
} else {
x = x1 + ((x2 - x1) - art->width) / 2;
width = art->width;
}
if ((y2 - y1) < art->height){
y = y1;
height = y2 - y1;
} else {
y = y1 + ((y2 - y1) - art->height) / 2;
height = art->height;
}
width = y2 - y1;
gdk_pixbuf_render_to_drawable_alpha (
image, drawable, 0, 0, x, y,
width, height,
GDK_PIXBUF_ALPHA_FULL, 0,
GDK_RGB_DITHER_NORMAL,
0, 0);
}
static void
etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
{
ECell *ecell = toggle_view->cell_view.ecell
ECell *ecell = toggle_view->cell_view.ecell;
ECellToggle *toggle = E_CELL_TOGGLE (ecell);
if (value >= toggle->n_vals)
if (value >= toggle->n_states)
value = 0;
e_table_model_set_value_at (ecell->table_model, col, row, value);
e_table_model_set_value_at (ecell->table_model, col, row, GINT_TO_POINTER (value));
etog_queue_redraw (toggle_view, col, row);
}
@ -105,9 +132,10 @@ etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
static gint
etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
int value = e_table_model_value_at (e_cell_view->ecell->table_model, col, row);
void *_value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
const int value = GPOINTER_TO_INT (_value);
switch (event->type){
case GDK_BUTTON_RELEASE:
@ -133,7 +161,7 @@ etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
static int
etog_height (ECellView *ecell_view, int col, int row)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
return toggle->height;
}
@ -174,6 +202,7 @@ void
e_cell_toggle_construct (ECellToggle *etog, ETableModel *etm, int border, int n_states, GdkPixbuf **images)
{
int max_height = 0;
int i;
E_CELL (etog)->table_model = etm;

View File

@ -28,7 +28,7 @@ typedef struct {
GtkType e_cell_toggle_get_type (void);
ECell *e_cell_toggle_new (ETableModel *model, int border,
int n_states,
GdkPibux **images);
GdkPixbuf **images);
void e_cell_toggle_construct (ECellToggle *etog, ETableModel *etm,
int border, int n_states, GdkPixbuf **images);

View File

@ -32,7 +32,7 @@ e_table_col_new (const char *id, int width, int min_width,
etc->compare = compare;
etc->selected = 0;
etc->resizeable = 0;
etc->resizeable = resizable;
return etc;
}

View File

@ -383,6 +383,8 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
case GDK_MOTION_NOTIFY:
convert (canvas, e->motion.x, e->motion.y, &x, &y);
if (resizing){
int new_width;
if (ethi->resize_guide == NULL){
/* Quick hack until I actually bind the views */
ethi->resize_guide = GINT_TO_POINTER (1);
@ -393,12 +395,16 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
e->button.time);
}
if (x - ethi->resize_start_pos <= 0)
new_width = x - ethi->resize_start_pos;
if (new_width <= 0)
break;
if (new_width < ethi->resize_min_width)
break;
ethi_request_redraw (ethi);
ethi->resize_width = x - ethi->resize_start_pos;
ethi->resize_width = new_width;
e_table_header_set_size (ethi->eth, ethi->resize_col, ethi->resize_width);
ethi_request_redraw (ethi);
@ -420,9 +426,13 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
* other event handlers).
*/
ecol = e_table_header_get_column (ethi->eth, col);
if (!ecol->resizeable)
break;
ethi->resize_col = col;
ethi->resize_width = ecol->width;
ethi->resize_start_pos = start - ecol->width;
ethi->resize_min_width = ecol->min_width;
}
break;

View File

@ -21,11 +21,13 @@ typedef struct {
GdkFont *font;
/*
* Used during resizing
* Used during resizing; Could be shorts
*/
int resize_col;
int resize_width;
int resize_start_pos;
int resize_min_width;
GtkObject *resize_guide;
/*

View File

@ -1,5 +1,10 @@
1999-11-29 Miguel de Icaza <miguel@gnu.org>
* e-table-col.c (e_table_col_new): Set etc->resizeable.
* e-table-header-item.c (ethi_event): Handle non-resizeables
columns; Add support for minimum width.
* e-cell-toggle.c, e-cell-toggle.h: New file. Implement a
multi-state image toggle cell object.

View File

@ -11,6 +11,8 @@ libevolutionwidgets_a_SOURCES = \
e-cell.h \
e-cell-text.c \
e-cell-text.h \
e-cell-toggle.c \
e-cell-toggle.h \
e-cursors.c \
e-cursors.h \
e-table-col.c \

View File

@ -19,7 +19,7 @@
#define PARENT_TYPE e_cell_get_type()
Typedef struct {
typedef struct {
ECellView cell_view;
GdkGC *gc;
GnomeCanvas *canvas;
@ -71,10 +71,13 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
int col, int row, gboolean selected,
int x1, int y1, int x2, int y2)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
GdkPixbuf *image;
const int value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
ArtPixBuf *art;
int x, y, width, height;
const int value = GPOINTER_TO_INT (
e_table_model_value_at (ecell_view->ecell->table_model, col, row));
if (value >= toggle->n_states){
g_warning ("Value from the table model is %d, the states we support are [0..%d)\n",
@ -83,19 +86,43 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
}
image = toggle->images [value];
art = image->art_pixbuf;
if ((x2 - x1) < art->width){
x = x1;
width = x2 - x1;
} else {
x = x1 + ((x2 - x1) - art->width) / 2;
width = art->width;
}
if ((y2 - y1) < art->height){
y = y1;
height = y2 - y1;
} else {
y = y1 + ((y2 - y1) - art->height) / 2;
height = art->height;
}
width = y2 - y1;
gdk_pixbuf_render_to_drawable_alpha (
image, drawable, 0, 0, x, y,
width, height,
GDK_PIXBUF_ALPHA_FULL, 0,
GDK_RGB_DITHER_NORMAL,
0, 0);
}
static void
etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
{
ECell *ecell = toggle_view->cell_view.ecell
ECell *ecell = toggle_view->cell_view.ecell;
ECellToggle *toggle = E_CELL_TOGGLE (ecell);
if (value >= toggle->n_vals)
if (value >= toggle->n_states)
value = 0;
e_table_model_set_value_at (ecell->table_model, col, row, value);
e_table_model_set_value_at (ecell->table_model, col, row, GINT_TO_POINTER (value));
etog_queue_redraw (toggle_view, col, row);
}
@ -105,9 +132,10 @@ etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
static gint
etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
int value = e_table_model_value_at (e_cell_view->ecell->table_model, col, row);
void *_value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
const int value = GPOINTER_TO_INT (_value);
switch (event->type){
case GDK_BUTTON_RELEASE:
@ -133,7 +161,7 @@ etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
static int
etog_height (ECellView *ecell_view, int col, int row)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
return toggle->height;
}
@ -174,6 +202,7 @@ void
e_cell_toggle_construct (ECellToggle *etog, ETableModel *etm, int border, int n_states, GdkPixbuf **images)
{
int max_height = 0;
int i;
E_CELL (etog)->table_model = etm;

View File

@ -28,7 +28,7 @@ typedef struct {
GtkType e_cell_toggle_get_type (void);
ECell *e_cell_toggle_new (ETableModel *model, int border,
int n_states,
GdkPibux **images);
GdkPixbuf **images);
void e_cell_toggle_construct (ECellToggle *etog, ETableModel *etm,
int border, int n_states, GdkPixbuf **images);

View File

@ -32,7 +32,7 @@ e_table_col_new (const char *id, int width, int min_width,
etc->compare = compare;
etc->selected = 0;
etc->resizeable = 0;
etc->resizeable = resizable;
return etc;
}

View File

@ -383,6 +383,8 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
case GDK_MOTION_NOTIFY:
convert (canvas, e->motion.x, e->motion.y, &x, &y);
if (resizing){
int new_width;
if (ethi->resize_guide == NULL){
/* Quick hack until I actually bind the views */
ethi->resize_guide = GINT_TO_POINTER (1);
@ -393,12 +395,16 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
e->button.time);
}
if (x - ethi->resize_start_pos <= 0)
new_width = x - ethi->resize_start_pos;
if (new_width <= 0)
break;
if (new_width < ethi->resize_min_width)
break;
ethi_request_redraw (ethi);
ethi->resize_width = x - ethi->resize_start_pos;
ethi->resize_width = new_width;
e_table_header_set_size (ethi->eth, ethi->resize_col, ethi->resize_width);
ethi_request_redraw (ethi);
@ -420,9 +426,13 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
* other event handlers).
*/
ecol = e_table_header_get_column (ethi->eth, col);
if (!ecol->resizeable)
break;
ethi->resize_col = col;
ethi->resize_width = ecol->width;
ethi->resize_start_pos = start - ecol->width;
ethi->resize_min_width = ecol->min_width;
}
break;

View File

@ -21,11 +21,13 @@ typedef struct {
GdkFont *font;
/*
* Used during resizing
* Used during resizing; Could be shorts
*/
int resize_col;
int resize_width;
int resize_start_pos;
int resize_min_width;
GtkObject *resize_guide;
/*

View File

@ -19,7 +19,7 @@
#define PARENT_TYPE e_cell_get_type()
Typedef struct {
typedef struct {
ECellView cell_view;
GdkGC *gc;
GnomeCanvas *canvas;
@ -71,10 +71,13 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
int col, int row, gboolean selected,
int x1, int y1, int x2, int y2)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
GdkPixbuf *image;
const int value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
ArtPixBuf *art;
int x, y, width, height;
const int value = GPOINTER_TO_INT (
e_table_model_value_at (ecell_view->ecell->table_model, col, row));
if (value >= toggle->n_states){
g_warning ("Value from the table model is %d, the states we support are [0..%d)\n",
@ -83,19 +86,43 @@ etog_draw (ECellView *ecell_view, GdkDrawable *drawable,
}
image = toggle->images [value];
art = image->art_pixbuf;
if ((x2 - x1) < art->width){
x = x1;
width = x2 - x1;
} else {
x = x1 + ((x2 - x1) - art->width) / 2;
width = art->width;
}
if ((y2 - y1) < art->height){
y = y1;
height = y2 - y1;
} else {
y = y1 + ((y2 - y1) - art->height) / 2;
height = art->height;
}
width = y2 - y1;
gdk_pixbuf_render_to_drawable_alpha (
image, drawable, 0, 0, x, y,
width, height,
GDK_PIXBUF_ALPHA_FULL, 0,
GDK_RGB_DITHER_NORMAL,
0, 0);
}
static void
etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
{
ECell *ecell = toggle_view->cell_view.ecell
ECell *ecell = toggle_view->cell_view.ecell;
ECellToggle *toggle = E_CELL_TOGGLE (ecell);
if (value >= toggle->n_vals)
if (value >= toggle->n_states)
value = 0;
e_table_model_set_value_at (ecell->table_model, col, row, value);
e_table_model_set_value_at (ecell->table_model, col, row, GINT_TO_POINTER (value));
etog_queue_redraw (toggle_view, col, row);
}
@ -105,9 +132,10 @@ etog_set_value (ECellToggleView *toggle_view, int col, int row, int value)
static gint
etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
ECellToggleView *toggle_view = (ECellToggleView *) ecell_view;
int value = e_table_model_value_at (e_cell_view->ecell->table_model, col, row);
void *_value = e_table_model_value_at (ecell_view->ecell->table_model, col, row);
const int value = GPOINTER_TO_INT (_value);
switch (event->type){
case GDK_BUTTON_RELEASE:
@ -133,7 +161,7 @@ etog_event (ECellView *ecell_view, GdkEvent *event, int col, int row)
static int
etog_height (ECellView *ecell_view, int col, int row)
{
ECellToggle *toggle = E_CELL_TOGGLE (e_cell_view->ecell);
ECellToggle *toggle = E_CELL_TOGGLE (ecell_view->ecell);
return toggle->height;
}
@ -174,6 +202,7 @@ void
e_cell_toggle_construct (ECellToggle *etog, ETableModel *etm, int border, int n_states, GdkPixbuf **images)
{
int max_height = 0;
int i;
E_CELL (etog)->table_model = etm;

View File

@ -28,7 +28,7 @@ typedef struct {
GtkType e_cell_toggle_get_type (void);
ECell *e_cell_toggle_new (ETableModel *model, int border,
int n_states,
GdkPibux **images);
GdkPixbuf **images);
void e_cell_toggle_construct (ECellToggle *etog, ETableModel *etm,
int border, int n_states, GdkPixbuf **images);

View File

@ -32,7 +32,7 @@ e_table_col_new (const char *id, int width, int min_width,
etc->compare = compare;
etc->selected = 0;
etc->resizeable = 0;
etc->resizeable = resizable;
return etc;
}

View File

@ -383,6 +383,8 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
case GDK_MOTION_NOTIFY:
convert (canvas, e->motion.x, e->motion.y, &x, &y);
if (resizing){
int new_width;
if (ethi->resize_guide == NULL){
/* Quick hack until I actually bind the views */
ethi->resize_guide = GINT_TO_POINTER (1);
@ -393,12 +395,16 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
e->button.time);
}
if (x - ethi->resize_start_pos <= 0)
new_width = x - ethi->resize_start_pos;
if (new_width <= 0)
break;
if (new_width < ethi->resize_min_width)
break;
ethi_request_redraw (ethi);
ethi->resize_width = x - ethi->resize_start_pos;
ethi->resize_width = new_width;
e_table_header_set_size (ethi->eth, ethi->resize_col, ethi->resize_width);
ethi_request_redraw (ethi);
@ -420,9 +426,13 @@ ethi_event (GnomeCanvasItem *item, GdkEvent *e)
* other event handlers).
*/
ecol = e_table_header_get_column (ethi->eth, col);
if (!ecol->resizeable)
break;
ethi->resize_col = col;
ethi->resize_width = ecol->width;
ethi->resize_start_pos = start - ecol->width;
ethi->resize_min_width = ecol->min_width;
}
break;

View File

@ -21,11 +21,13 @@ typedef struct {
GdkFont *font;
/*
* Used during resizing
* Used during resizing; Could be shorts
*/
int resize_col;
int resize_width;
int resize_start_pos;
int resize_min_width;
GtkObject *resize_guide;
/*