Files
evolution/widgets/misc/e-reflow-model.h
Chris Toshok baa50a5c89 enable this function to reflow the view from a particular column onward.
2003-02-16  Chris Toshok  <toshok@ximian.com>

	* gal/widgets/e-reflow.c (reflow_columns): enable this function to
	reflow the view from a particular column onward.  This is useful
	if you have a huge model and the only changes are happening at the
	end (as is normally the case if you're appending to a large
	model.)
	(item_changed): calculate the height of the changed item here, so
	we aren't doing it as we reflow the model.  For now, reflow the
	entire model.  Further optimization can be done here.
	(item_removed): new function.  remove the item and reflow from the
	column that contained it.
	(items_inserted): calculate the heights of the new items, and
	calculate the lowest numbered column containing one of the
	inserted items.  reflow from there.
	(model_changed): calculate the heights of everything here.
	(comparison_changed): new function, clear the sorter and reflow.
	(disconnect_model): disconnect comparison_changed and
	model_item_removed.
	(connect_model): connect comparison_changed and
	model_item_removed.
	(adjustment_changed): use queue_incarnate here, instead of forcing
	the reflow model to incarnate as we scroll.  Not sure if this is
	actually the right solution, but it does make the scrollbar more
	responsive at the cost of redraw speed.

	* gal/widgets/e-reflow.h (struct _EReflow): add slots for the new
	signal ids, as well as "reflow_from_column".

	* gal/widgets/e-reflow-model.c (e_reflow_model_class_init): create
	the comparison_changed and model_item_removed signals.
	(e_reflow_model_comparison_changed): new function, emit the
	comparison_changed signal.
	(e_reflow_model_item_removed): new function, emit the
	model_item_removed signal.

	* gal/widgets/e-reflow-model.h: add comparison_changed and
	model_item_removed signals.

svn path=/trunk/; revision=19917
2003-02-17 02:38:15 +00:00

113 lines
4.2 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* e-reflow-model.h
* Copyright 2000, 2001, Ximian, Inc.
*
* Authors:
* Chris Lahey <clahey@ximian.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License, version 2, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef _E_REFLOW_MODEL_H_
#define _E_REFLOW_MODEL_H_
#include <glib-object.h>
#include <libgnomecanvas/gnome-canvas.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define E_REFLOW_MODEL_TYPE (e_reflow_model_get_type ())
#define E_REFLOW_MODEL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), E_REFLOW_MODEL_TYPE, EReflowModel))
#define E_REFLOW_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), E_REFLOW_MODEL_TYPE, EReflowModelClass))
#define E_IS_REFLOW_MODEL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), E_REFLOW_MODEL_TYPE))
#define E_IS_REFLOW_MODEL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), E_REFLOW_MODEL_TYPE))
#define E_REFLOW_MODEL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), E_REFLOW_MODEL_TYPE, EReflowModelClass))
typedef struct {
GObject base;
} EReflowModel;
typedef struct {
GObjectClass parent_class;
/*
* Virtual methods
*/
void (*set_width) (EReflowModel *etm, int width);
int (*count) (EReflowModel *etm);
int (*height) (EReflowModel *etm, int n, GnomeCanvasGroup *parent);
GnomeCanvasItem *(*incarnate) (EReflowModel *etm, int n, GnomeCanvasGroup *parent);
int (*compare) (EReflowModel *etm, int n1, int n2);
void (*reincarnate) (EReflowModel *etm, int n, GnomeCanvasItem *item);
/*
* Signals
*/
/*
* These all come after the change has been made.
* Major structural changes: model_changed
* Changes to the sorting of elements: comparison_changed
* Changes only in an item: item_changed
*/
void (*model_changed) (EReflowModel *etm);
void (*comparison_changed) (EReflowModel *etm);
void (*model_items_inserted) (EReflowModel *etm, int position, int count);
void (*model_item_removed) (EReflowModel *etm, int position);
void (*model_item_changed) (EReflowModel *etm, int n);
} EReflowModelClass;
GType e_reflow_model_get_type (void);
/**/
void e_reflow_model_set_width (EReflowModel *e_reflow_model,
int width);
int e_reflow_model_count (EReflowModel *e_reflow_model);
int e_reflow_model_height (EReflowModel *e_reflow_model,
int n,
GnomeCanvasGroup *parent);
GnomeCanvasItem *e_reflow_model_incarnate (EReflowModel *e_reflow_model,
int n,
GnomeCanvasGroup *parent);
int e_reflow_model_compare (EReflowModel *e_reflow_model,
int n1,
int n2);
void e_reflow_model_reincarnate (EReflowModel *e_reflow_model,
int n,
GnomeCanvasItem *item);
/*
* Routines for emitting signals on the e_reflow
*/
void e_reflow_model_changed (EReflowModel *e_reflow_model);
void e_reflow_model_comparison_changed (EReflowModel *e_reflow_model);
void e_reflow_model_items_inserted (EReflowModel *e_reflow_model,
int position,
int count);
void e_reflow_model_item_removed (EReflowModel *e_reflow_model,
int n);
void e_reflow_model_item_changed (EReflowModel *e_reflow_model,
int n);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _E_REFLOW_MODEL_H_ */