aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/misc/e-reflow.h
blob: 9ecbb5c529730d57bb42e6b8a368be9e7c3b026f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* e-reflow.h
 * Copyright (C) 2000  Helix Code, Inc.
 * Author: Chris Lahey <clahey@helixcode.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * This program 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
 * General Public License for more details.
 *
 * You should have received a copy of the GNU 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_H__
#define __E_REFLOW_H__

#include <libgnomeui/gnome-canvas.h>
#include <gal/widgets/e-reflow-model.h>
#include <gal/widgets/e-selection-model.h>
#include <gal/util/e-sorter-array.h>

#ifdef __cplusplus
extern "C" {
#pragma }
#endif /* __cplusplus */

/* EReflow - A canvas item container.
 *
 * The following arguments are available:
 *
 * name     type        read/write  description
 * --------------------------------------------------------------------------------
 * minimum_width double         RW              minimum width of the reflow.  width >= minimum_width
 * width        double          R               width of the reflow
 * height       double          RW              height of the reflow
 */

#define E_REFLOW_TYPE           (e_reflow_get_type ())
#define E_REFLOW(obj)           (GTK_CHECK_CAST ((obj), E_REFLOW_TYPE, EReflow))
#define E_REFLOW_CLASS(klass)       (GTK_CHECK_CLASS_CAST ((klass), E_REFLOW_TYPE, EReflowClass))
#define E_IS_REFLOW(obj)        (GTK_CHECK_TYPE ((obj), E_REFLOW_TYPE))
#define E_IS_REFLOW_CLASS(klass)    (GTK_CHECK_CLASS_TYPE ((obj), E_REFLOW_TYPE))


typedef struct EReflowPriv    EReflowPriv;

typedef struct _EReflow       EReflow;
typedef struct _EReflowClass  EReflowClass;

struct _EReflow
{
    GnomeCanvasGroup parent;
    
    /* item specific fields */
    EReflowModel *model;
    guint model_changed_id;
    guint model_items_inserted_id;
    guint model_item_changed_id;

    ESelectionModel *selection;
    guint selection_changed_id;
    ESorterArray *sorter;

    GtkAdjustment *adjustment;
    guint adjustment_changed_id;
    guint adjustment_value_changed_id;
    guint set_scroll_adjustments_id;

    int *heights;
    GnomeCanvasItem **items;
    int count;
    int allocated_count;

    int *columns;
    gint column_count; /* Number of columnns */

    GnomeCanvasItem *empty_text;
    gchar *empty_message;

    double minimum_width;
    double width;
    double height;

    double column_width;

    int incarnate_idle_id;

    /* These are all for when the column is being dragged. */
    gdouble start_x;
    gint which_column_dragged;
    double temp_column_width;
    double previous_temp_column_width;

    guint column_drag : 1;

    guint need_height_update : 1;
    guint need_column_resize : 1;
    guint need_reflow_columns : 1;

    guint default_cursor_shown : 1;
    GdkCursor *arrow_cursor;
    GdkCursor *default_cursor;
};

struct _EReflowClass
{
    GnomeCanvasGroupClass parent_class;

    int (*selection_event) (EReflow *reflow, GnomeCanvasItem *item, GdkEvent *event);
};

/* 
 * To be added to a reflow, an item must have the argument "width" as
 * a Read/Write argument and "height" as a Read Only argument.  It
 * should also do an ECanvas parent reflow request if its size
 * changes.
 */
GtkType  e_reflow_get_type       (void);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __E_REFLOW_H__ */