aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/misc/e-selection-model.h
blob: 355734b6a54411e6b6f87888a679a4e87d54d64a (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/*
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) version 3.
 *
 * 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with the program; if not, see <http://www.gnu.org/licenses/>
 *
 *
 * Authors:
 *      Chris Lahey <clahey@ximian.com>
 *
 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
 *
 */

#ifndef E_SELECTION_MODEL_H
#define E_SELECTION_MODEL_H

#include <gtk/gtk.h>
#include <e-util/e-sorter.h>

/* Standard GObject macros */
#define E_TYPE_SELECTION_MODEL \
    (e_selection_model_get_type ())
#define E_SELECTION_MODEL(obj) \
    (G_TYPE_CHECK_INSTANCE_CAST \
    ((obj), E_TYPE_SELECTION_MODEL, ESelectionModel))
#define E_SELECTION_MODEL_CLASS(cls) \
    (G_TYPE_CHECK_CLASS_CAST \
    ((cls), E_TYPE_SELECTION_MODEL, ESelectionModelClass))
#define E_IS_SELECTION_MODEL(obj) \
    (G_TYPE_CHECK_INSTANCE_TYPE \
    ((obj), E_TYPE_SELECTION_MODEL))
#define E_IS_SELECTION_MODEL_CLASS(cls) \
    (G_TYPE_CHECK_CLASS_TYPE \
    ((cls), E_TYPE_SELECTION_MODEL))
#define E_SELECTION_MODEL_GET_CLASS(obj) \
    (G_TYPE_INSTANCE_GET_CLASS \
    ((obj), E_TYPE_SELECTION_MODEL, ESelectionModelClass))

G_BEGIN_DECLS

#ifndef _E_FOREACH_FUNC_H_
#define _E_FOREACH_FUNC_H_
typedef void (*EForeachFunc) (gint model_row,
                  gpointer closure);
#endif

typedef struct _ESelectionModel ESelectionModel;
typedef struct _ESelectionModelClass ESelectionModelClass;

/* list selection modes */
typedef enum {
    E_CURSOR_LINE,
    E_CURSOR_SIMPLE,
    E_CURSOR_SPREADSHEET
} ECursorMode;

struct _ESelectionModel {
    GObject parent;

    ESorter *sorter;

    GtkSelectionMode mode;
    ECursorMode cursor_mode;

    gint old_selection;
};

struct _ESelectionModelClass {
    GObjectClass parent_class;

    /* Virtual methods */
    gboolean    (*is_row_selected)  (ESelectionModel *esm,
                         gint row);
    void        (*foreach)      (ESelectionModel *esm,
                         EForeachFunc callback,
                         gpointer closure);
    void        (*clear)        (ESelectionModel *esm);
    gint        (*selected_count)   (ESelectionModel *esm);
    void        (*select_all)       (ESelectionModel *esm);
    void        (*invert_selection) (ESelectionModel *esm);
    gint        (*row_count)        (ESelectionModel *esm);

    /* Protected virtual methods. */
    void        (*change_one_row)   (ESelectionModel *esm,
                         gint row,
                         gboolean on);
    void        (*change_cursor)    (ESelectionModel *esm,
                         gint row,
                         gint col);
    gint        (*cursor_row)       (ESelectionModel *esm);
    gint        (*cursor_col)       (ESelectionModel *esm);

    void        (*select_single_row)    (ESelectionModel *selection,
                         gint row);
    void        (*toggle_single_row)    (ESelectionModel *selection,
                         gint row);
    void        (*move_selection_end)   (ESelectionModel *selection,
                         gint row);
    void        (*set_selection_end)    (ESelectionModel *selection,
                         gint row);

    /* Signals */
    void        (*cursor_changed)   (ESelectionModel *esm,
                         gint row,
                         gint col);
    void        (*cursor_activated) (ESelectionModel *esm,
                         gint row,
                         gint col);
    void        (*selection_row_changed)(ESelectionModel *esm,
                         gint row);
    void        (*selection_changed)    (ESelectionModel *esm);
};

GType       e_selection_model_get_type  (void);
void        e_selection_model_do_something  (ESelectionModel *esm,
                         guint row,
                         guint col,
                         GdkModifierType state);
gboolean    e_selection_model_maybe_do_something
                        (ESelectionModel *esm,
                         guint row,
                         guint col,
                         GdkModifierType state);
void        e_selection_model_right_click_down
                        (ESelectionModel *selection,
                         guint row,
                         guint col,
                         GdkModifierType state);
void        e_selection_model_right_click_up
                        (ESelectionModel *selection);
gboolean    e_selection_model_key_press (ESelectionModel *esm,
                         GdkEventKey *key);
void        e_selection_model_select_as_key_press
                        (ESelectionModel *esm,
                         guint row,
                         guint col,
                         GdkModifierType state);

/* Virtual functions */
gboolean    e_selection_model_is_row_selected
                        (ESelectionModel *esm,
                         gint             n);
void        e_selection_model_foreach   (ESelectionModel *esm,
                         EForeachFunc     callback,
                         gpointer         closure);
void        e_selection_model_clear     (ESelectionModel *esm);
gint        e_selection_model_selected_count
                        (ESelectionModel *esm);
void        e_selection_model_select_all    (ESelectionModel *esm);
void        e_selection_model_invert_selection
                        (ESelectionModel *esm);
gint        e_selection_model_row_count (ESelectionModel *esm);

/* Private virtual Functions */
void        e_selection_model_change_one_row
                        (ESelectionModel *esm,
                         gint row,
                         gboolean on);
void        e_selection_model_change_cursor (ESelectionModel *esm,
                         gint row,
                         gint col);
gint        e_selection_model_cursor_row    (ESelectionModel *esm);
gint        e_selection_model_cursor_col    (ESelectionModel *esm);
void        e_selection_model_select_single_row
                        (ESelectionModel *selection,
                         gint row);
void        e_selection_model_toggle_single_row
                        (ESelectionModel *selection,
                         gint row);
void        e_selection_model_move_selection_end
                        (ESelectionModel *selection,
                         gint row);
void        e_selection_model_set_selection_end
                        (ESelectionModel *selection,
                         gint row);

/* Signals */
void        e_selection_model_cursor_changed
                        (ESelectionModel *selection,
                         gint row,
                         gint col);
void        e_selection_model_cursor_activated
                        (ESelectionModel *selection,
                         gint row,
                         gint col);
void        e_selection_model_selection_row_changed
                        (ESelectionModel *selection,
                         gint row);
void        e_selection_model_selection_changed
                        (ESelectionModel *selection);

G_END_DECLS

#endif /* E_SELECTION_MODEL_H */