1 /* PSPPIRE - a graphical user interface for PSPP.
2 Copyright (C) 2011 Free Software Foundation, Inc.
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <jrb@redhat.com>
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Library General Public
22 * License as published by the Free Software Foundation; either
23 * version 2 of the License, or (at your option) any later version.
25 * This library is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Library General Public License for more details.
30 * You should have received a copy of the GNU Library General Public
31 * License along with this library; if not, write to the
32 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
33 * Boston, MA 02111-1307, USA.
36 #ifndef __PSPP_SHEET_VIEW_H__
37 #define __PSPP_SHEET_VIEW_H__
40 #include "ui/gui/pspp-sheet-view-column.h"
47 PSPP_SHEET_VIEW_GRID_LINES_NONE,
48 PSPP_SHEET_VIEW_GRID_LINES_HORIZONTAL,
49 PSPP_SHEET_VIEW_GRID_LINES_VERTICAL,
50 PSPP_SHEET_VIEW_GRID_LINES_BOTH
51 } PsppSheetViewGridLines;
53 GType pspp_sheet_view_grid_lines_get_type (void) G_GNUC_CONST;
54 #define PSPP_TYPE_SHEET_VIEW_GRID_LINES (pspp_sheet_view_grid_lines_get_type ())
58 /* drop before/after this row */
59 PSPP_SHEET_VIEW_DROP_BEFORE,
60 PSPP_SHEET_VIEW_DROP_AFTER,
61 /* drop as a child of this row (with fallback to before or after
62 * if into is not possible)
64 PSPP_SHEET_VIEW_DROP_INTO_OR_BEFORE,
65 PSPP_SHEET_VIEW_DROP_INTO_OR_AFTER
66 } PsppSheetViewDropPosition;
68 #define PSPP_TYPE_SHEET_VIEW (pspp_sheet_view_get_type ())
69 #define PSPP_SHEET_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSPP_TYPE_SHEET_VIEW, PsppSheetView))
70 #define PSPP_SHEET_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PSPP_TYPE_SHEET_VIEW, PsppSheetViewClass))
71 #define PSPP_IS_SHEET_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PSPP_TYPE_SHEET_VIEW))
72 #define PSPP_IS_SHEET_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PSPP_TYPE_SHEET_VIEW))
73 #define PSPP_SHEET_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PSPP_TYPE_SHEET_VIEW, PsppSheetViewClass))
75 typedef struct _PsppSheetView PsppSheetView;
76 typedef struct _PsppSheetViewClass PsppSheetViewClass;
77 typedef struct _PsppSheetViewPrivate PsppSheetViewPrivate;
78 typedef struct _PsppSheetSelection PsppSheetSelection;
79 typedef struct _PsppSheetSelectionClass PsppSheetSelectionClass;
85 PsppSheetViewPrivate *GSEAL (priv);
88 struct _PsppSheetViewClass
90 GtkContainerClass parent_class;
92 void (* set_scroll_adjustments) (PsppSheetView *tree_view,
93 GtkAdjustment *hadjustment,
94 GtkAdjustment *vadjustment);
95 void (* row_activated) (PsppSheetView *tree_view,
97 PsppSheetViewColumn *column);
98 gboolean (* test_expand_row) (PsppSheetView *tree_view,
101 gboolean (* test_collapse_row) (PsppSheetView *tree_view,
104 void (* row_expanded) (PsppSheetView *tree_view,
107 void (* row_collapsed) (PsppSheetView *tree_view,
110 void (* columns_changed) (PsppSheetView *tree_view);
111 void (* cursor_changed) (PsppSheetView *tree_view);
113 /* Key Binding signals */
114 gboolean (* move_cursor) (PsppSheetView *tree_view,
115 GtkMovementStep step,
117 gboolean (* select_all) (PsppSheetView *tree_view);
118 gboolean (* unselect_all) (PsppSheetView *tree_view);
119 gboolean (* select_cursor_row) (PsppSheetView *tree_view,
120 gboolean start_editing);
121 gboolean (* toggle_cursor_row) (PsppSheetView *tree_view);
122 gboolean (* expand_collapse_cursor_row) (PsppSheetView *tree_view,
126 gboolean (* select_cursor_parent) (PsppSheetView *tree_view);
127 gboolean (* start_interactive_search) (PsppSheetView *tree_view);
129 /* Padding for future expansion */
130 void (*_gtk_reserved0) (void);
131 void (*_gtk_reserved1) (void);
132 void (*_gtk_reserved2) (void);
133 void (*_gtk_reserved3) (void);
134 void (*_gtk_reserved4) (void);
138 typedef gboolean (* PsppSheetViewColumnDropFunc) (PsppSheetView *tree_view,
139 PsppSheetViewColumn *column,
140 PsppSheetViewColumn *prev_column,
141 PsppSheetViewColumn *next_column,
143 typedef void (* PsppSheetViewMappingFunc) (PsppSheetView *tree_view,
146 typedef gboolean (*PsppSheetViewSearchEqualFunc) (GtkTreeModel *model,
150 gpointer search_data);
151 typedef gboolean (*PsppSheetViewRowSeparatorFunc) (GtkTreeModel *model,
154 typedef void (*PsppSheetViewSearchPositionFunc) (PsppSheetView *tree_view,
155 GtkWidget *search_dialog,
160 GType pspp_sheet_view_get_type (void) G_GNUC_CONST;
161 GtkWidget *pspp_sheet_view_new (void);
162 GtkWidget *pspp_sheet_view_new_with_model (GtkTreeModel *model);
165 GtkTreeModel *pspp_sheet_view_get_model (PsppSheetView *tree_view);
166 void pspp_sheet_view_set_model (PsppSheetView *tree_view,
167 GtkTreeModel *model);
168 PsppSheetSelection *pspp_sheet_view_get_selection (PsppSheetView *tree_view);
169 GtkAdjustment *pspp_sheet_view_get_hadjustment (PsppSheetView *tree_view);
170 void pspp_sheet_view_set_hadjustment (PsppSheetView *tree_view,
171 GtkAdjustment *adjustment);
172 GtkAdjustment *pspp_sheet_view_get_vadjustment (PsppSheetView *tree_view);
173 void pspp_sheet_view_set_vadjustment (PsppSheetView *tree_view,
174 GtkAdjustment *adjustment);
175 gboolean pspp_sheet_view_get_headers_visible (PsppSheetView *tree_view);
176 void pspp_sheet_view_set_headers_visible (PsppSheetView *tree_view,
177 gboolean headers_visible);
178 void pspp_sheet_view_columns_autosize (PsppSheetView *tree_view);
179 gboolean pspp_sheet_view_get_headers_clickable (PsppSheetView *tree_view);
180 void pspp_sheet_view_set_headers_clickable (PsppSheetView *tree_view,
182 void pspp_sheet_view_set_rules_hint (PsppSheetView *tree_view,
184 gboolean pspp_sheet_view_get_rules_hint (PsppSheetView *tree_view);
186 /* Column funtions */
187 gint pspp_sheet_view_append_column (PsppSheetView *tree_view,
188 PsppSheetViewColumn *column);
189 gint pspp_sheet_view_remove_column (PsppSheetView *tree_view,
190 PsppSheetViewColumn *column);
191 gint pspp_sheet_view_insert_column (PsppSheetView *tree_view,
192 PsppSheetViewColumn *column,
194 gint pspp_sheet_view_insert_column_with_attributes (PsppSheetView *tree_view,
197 GtkCellRenderer *cell,
198 ...) G_GNUC_NULL_TERMINATED;
199 gint pspp_sheet_view_insert_column_with_data_func (PsppSheetView *tree_view,
202 GtkCellRenderer *cell,
203 PsppSheetCellDataFunc func,
205 GDestroyNotify dnotify);
206 PsppSheetViewColumn *pspp_sheet_view_get_column (PsppSheetView *tree_view,
208 GList *pspp_sheet_view_get_columns (PsppSheetView *tree_view);
209 void pspp_sheet_view_move_column_after (PsppSheetView *tree_view,
210 PsppSheetViewColumn *column,
211 PsppSheetViewColumn *base_column);
212 void pspp_sheet_view_set_expander_column (PsppSheetView *tree_view,
213 PsppSheetViewColumn *column);
214 PsppSheetViewColumn *pspp_sheet_view_get_expander_column (PsppSheetView *tree_view);
215 void pspp_sheet_view_set_column_drag_function (PsppSheetView *tree_view,
216 PsppSheetViewColumnDropFunc func,
218 GDestroyNotify destroy);
221 void pspp_sheet_view_scroll_to_point (PsppSheetView *tree_view,
224 void pspp_sheet_view_scroll_to_cell (PsppSheetView *tree_view,
226 PsppSheetViewColumn *column,
230 void pspp_sheet_view_row_activated (PsppSheetView *tree_view,
232 PsppSheetViewColumn *column);
233 void pspp_sheet_view_expand_all (PsppSheetView *tree_view);
234 void pspp_sheet_view_collapse_all (PsppSheetView *tree_view);
235 void pspp_sheet_view_expand_to_path (PsppSheetView *tree_view,
237 gboolean pspp_sheet_view_expand_row (PsppSheetView *tree_view,
240 gboolean pspp_sheet_view_collapse_row (PsppSheetView *tree_view,
242 void pspp_sheet_view_map_expanded_rows (PsppSheetView *tree_view,
243 PsppSheetViewMappingFunc func,
245 gboolean pspp_sheet_view_row_expanded (PsppSheetView *tree_view,
247 void pspp_sheet_view_set_reorderable (PsppSheetView *tree_view,
248 gboolean reorderable);
249 gboolean pspp_sheet_view_get_reorderable (PsppSheetView *tree_view);
250 void pspp_sheet_view_set_cursor (PsppSheetView *tree_view,
252 PsppSheetViewColumn *focus_column,
253 gboolean start_editing);
254 void pspp_sheet_view_set_cursor_on_cell (PsppSheetView *tree_view,
256 PsppSheetViewColumn *focus_column,
257 GtkCellRenderer *focus_cell,
258 gboolean start_editing);
259 void pspp_sheet_view_get_cursor (PsppSheetView *tree_view,
261 PsppSheetViewColumn **focus_column);
264 /* Layout information */
265 GdkWindow *pspp_sheet_view_get_bin_window (PsppSheetView *tree_view);
266 gboolean pspp_sheet_view_get_path_at_pos (PsppSheetView *tree_view,
270 PsppSheetViewColumn **column,
273 void pspp_sheet_view_get_cell_area (PsppSheetView *tree_view,
275 PsppSheetViewColumn *column,
277 void pspp_sheet_view_get_background_area (PsppSheetView *tree_view,
279 PsppSheetViewColumn *column,
281 void pspp_sheet_view_get_visible_rect (PsppSheetView *tree_view,
282 GdkRectangle *visible_rect);
284 #ifndef GTK_DISABLE_DEPRECATED
285 void pspp_sheet_view_widget_to_tree_coords (PsppSheetView *tree_view,
290 void pspp_sheet_view_tree_to_widget_coords (PsppSheetView *tree_view,
295 #endif /* !GTK_DISABLE_DEPRECATED */
296 gboolean pspp_sheet_view_get_visible_range (PsppSheetView *tree_view,
297 GtkTreePath **start_path,
298 GtkTreePath **end_path);
300 /* Drag-and-Drop support */
301 void pspp_sheet_view_enable_model_drag_source (PsppSheetView *tree_view,
302 GdkModifierType start_button_mask,
303 const GtkTargetEntry *targets,
305 GdkDragAction actions);
306 void pspp_sheet_view_enable_model_drag_dest (PsppSheetView *tree_view,
307 const GtkTargetEntry *targets,
309 GdkDragAction actions);
310 void pspp_sheet_view_unset_rows_drag_source (PsppSheetView *tree_view);
311 void pspp_sheet_view_unset_rows_drag_dest (PsppSheetView *tree_view);
314 /* These are useful to implement your own custom stuff. */
315 void pspp_sheet_view_set_drag_dest_row (PsppSheetView *tree_view,
317 PsppSheetViewDropPosition pos);
318 void pspp_sheet_view_get_drag_dest_row (PsppSheetView *tree_view,
320 PsppSheetViewDropPosition *pos);
321 gboolean pspp_sheet_view_get_dest_row_at_pos (PsppSheetView *tree_view,
325 PsppSheetViewDropPosition *pos);
326 GdkPixmap *pspp_sheet_view_create_row_drag_icon (PsppSheetView *tree_view,
329 /* Interactive search */
330 void pspp_sheet_view_set_enable_search (PsppSheetView *tree_view,
331 gboolean enable_search);
332 gboolean pspp_sheet_view_get_enable_search (PsppSheetView *tree_view);
333 gint pspp_sheet_view_get_search_column (PsppSheetView *tree_view);
334 void pspp_sheet_view_set_search_column (PsppSheetView *tree_view,
336 PsppSheetViewSearchEqualFunc pspp_sheet_view_get_search_equal_func (PsppSheetView *tree_view);
337 void pspp_sheet_view_set_search_equal_func (PsppSheetView *tree_view,
338 PsppSheetViewSearchEqualFunc search_equal_func,
339 gpointer search_user_data,
340 GDestroyNotify search_destroy);
342 GtkEntry *pspp_sheet_view_get_search_entry (PsppSheetView *tree_view);
343 void pspp_sheet_view_set_search_entry (PsppSheetView *tree_view,
345 PsppSheetViewSearchPositionFunc pspp_sheet_view_get_search_position_func (PsppSheetView *tree_view);
346 void pspp_sheet_view_set_search_position_func (PsppSheetView *tree_view,
347 PsppSheetViewSearchPositionFunc func,
349 GDestroyNotify destroy);
351 /* Convert between the different coordinate systems */
352 void pspp_sheet_view_convert_widget_to_tree_coords (PsppSheetView *tree_view,
357 void pspp_sheet_view_convert_tree_to_widget_coords (PsppSheetView *tree_view,
362 void pspp_sheet_view_convert_widget_to_bin_window_coords (PsppSheetView *tree_view,
367 void pspp_sheet_view_convert_bin_window_to_widget_coords (PsppSheetView *tree_view,
372 void pspp_sheet_view_convert_tree_to_bin_window_coords (PsppSheetView *tree_view,
377 void pspp_sheet_view_convert_bin_window_to_tree_coords (PsppSheetView *tree_view,
383 /* This function should really never be used. It is just for use by ATK.
385 typedef void (* PsppSheetDestroyCountFunc) (PsppSheetView *tree_view,
389 void pspp_sheet_view_set_destroy_count_func (PsppSheetView *tree_view,
390 PsppSheetDestroyCountFunc func,
392 GDestroyNotify destroy);
394 void pspp_sheet_view_set_fixed_height_mode (PsppSheetView *tree_view,
396 gboolean pspp_sheet_view_get_fixed_height_mode (PsppSheetView *tree_view);
397 void pspp_sheet_view_set_hover_selection (PsppSheetView *tree_view,
399 gboolean pspp_sheet_view_get_hover_selection (PsppSheetView *tree_view);
400 void pspp_sheet_view_set_hover_expand (PsppSheetView *tree_view,
402 gboolean pspp_sheet_view_get_hover_expand (PsppSheetView *tree_view);
403 void pspp_sheet_view_set_rubber_banding (PsppSheetView *tree_view,
405 gboolean pspp_sheet_view_get_rubber_banding (PsppSheetView *tree_view);
407 gboolean pspp_sheet_view_is_rubber_banding_active (PsppSheetView *tree_view);
409 PsppSheetViewRowSeparatorFunc pspp_sheet_view_get_row_separator_func (PsppSheetView *tree_view);
410 void pspp_sheet_view_set_row_separator_func (PsppSheetView *tree_view,
411 PsppSheetViewRowSeparatorFunc func,
413 GDestroyNotify destroy);
415 PsppSheetViewGridLines pspp_sheet_view_get_grid_lines (PsppSheetView *tree_view);
416 void pspp_sheet_view_set_grid_lines (PsppSheetView *tree_view,
417 PsppSheetViewGridLines grid_lines);
418 gboolean pspp_sheet_view_get_enable_tree_lines (PsppSheetView *tree_view);
419 void pspp_sheet_view_set_enable_tree_lines (PsppSheetView *tree_view,
421 void pspp_sheet_view_set_show_expanders (PsppSheetView *tree_view,
423 gboolean pspp_sheet_view_get_show_expanders (PsppSheetView *tree_view);
424 void pspp_sheet_view_set_level_indentation (PsppSheetView *tree_view,
426 gint pspp_sheet_view_get_level_indentation (PsppSheetView *tree_view);
428 /* Convenience functions for setting tooltips */
429 void pspp_sheet_view_set_tooltip_row (PsppSheetView *tree_view,
432 void pspp_sheet_view_set_tooltip_cell (PsppSheetView *tree_view,
435 PsppSheetViewColumn *column,
436 GtkCellRenderer *cell);
437 gboolean pspp_sheet_view_get_tooltip_context(PsppSheetView *tree_view,
440 gboolean keyboard_tip,
441 GtkTreeModel **model,
444 void pspp_sheet_view_set_tooltip_column (PsppSheetView *tree_view,
446 gint pspp_sheet_view_get_tooltip_column (PsppSheetView *tree_view);
451 #endif /* __PSPP_SHEET_VIEW_H__ */