1 /* PSPPIRE - a graphical user interface for PSPP.
2 Copyright (C) 2011, 2012, 2013 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 ())
56 /* A "special cell" is a cell that is editable or activatable. When a row that
57 * contains a special cell is selected, the cursor is drawn around a single
58 * cell; when other rows are selected, the cursor is drawn around the entire
61 * With the default of "detect", whether a given row contains a special cell is
62 * detected automatically. This is the best choice most of the time. For
63 * sheet views that contain more than 100 columns, an explicit "yes" or "no"
64 * improves performance. */
67 PSPP_SHEET_VIEW_SPECIAL_CELLS_DETECT,
68 PSPP_SHEET_VIEW_SPECIAL_CELLS_YES,
69 PSPP_SHEET_VIEW_SPECIAL_CELLS_NO,
70 } PsppSheetViewSpecialCells;
72 GType pspp_sheet_view_special_cells_get_type (void) G_GNUC_CONST;
73 #define PSPP_TYPE_SHEET_VIEW_SPECIAL_CELLS (pspp_sheet_view_special_cells_get_type ())
77 /* drop before/after this row */
78 PSPP_SHEET_VIEW_DROP_BEFORE,
79 PSPP_SHEET_VIEW_DROP_AFTER,
80 /* drop as a child of this row (with fallback to before or after
81 * if into is not possible)
83 PSPP_SHEET_VIEW_DROP_INTO_OR_BEFORE,
84 PSPP_SHEET_VIEW_DROP_INTO_OR_AFTER
85 } PsppSheetViewDropPosition;
89 PSPP_SHEET_SELECT_MODE_TOGGLE = 1 << 0,
90 PSPP_SHEET_SELECT_MODE_EXTEND = 1 << 1
94 #define PSPP_TYPE_SHEET_VIEW (pspp_sheet_view_get_type ())
95 #define PSPP_SHEET_VIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSPP_TYPE_SHEET_VIEW, PsppSheetView))
96 #define PSPP_SHEET_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PSPP_TYPE_SHEET_VIEW, PsppSheetViewClass))
97 #define PSPP_IS_SHEET_VIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PSPP_TYPE_SHEET_VIEW))
98 #define PSPP_IS_SHEET_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PSPP_TYPE_SHEET_VIEW))
99 #define PSPP_SHEET_VIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PSPP_TYPE_SHEET_VIEW, PsppSheetViewClass))
101 typedef struct _PsppSheetView PsppSheetView;
102 typedef struct _PsppSheetViewClass PsppSheetViewClass;
103 typedef struct _PsppSheetViewPrivate PsppSheetViewPrivate;
104 typedef struct _PsppSheetSelection PsppSheetSelection;
105 typedef struct _PsppSheetSelectionClass PsppSheetSelectionClass;
107 struct _PsppSheetView
111 PsppSheetViewPrivate *PSEAL (priv);
113 gboolean dispose_has_run ;
116 struct _PsppSheetViewClass
118 GtkContainerClass parent_class;
120 void (* set_scroll_adjustments) (PsppSheetView *tree_view,
121 GtkAdjustment *hadjustment,
122 GtkAdjustment *vadjustment);
123 void (* row_activated) (PsppSheetView *tree_view,
125 PsppSheetViewColumn *column);
126 void (* columns_changed) (PsppSheetView *tree_view);
127 void (* cursor_changed) (PsppSheetView *tree_view);
129 /* Key Binding signals */
130 gboolean (* move_cursor) (PsppSheetView *tree_view,
131 GtkMovementStep step,
133 gboolean (* select_all) (PsppSheetView *tree_view);
134 gboolean (* unselect_all) (PsppSheetView *tree_view);
135 gboolean (* select_cursor_row) (PsppSheetView *tree_view,
136 gboolean start_editing,
137 PsppSheetSelectMode mode);
138 gboolean (* toggle_cursor_row) (PsppSheetView *tree_view);
139 gboolean (* select_cursor_parent) (PsppSheetView *tree_view);
140 gboolean (* start_interactive_search) (PsppSheetView *tree_view);
142 /* Padding for future expansion */
143 void (*_gtk_reserved0) (void);
144 void (*_gtk_reserved1) (void);
145 void (*_gtk_reserved2) (void);
146 void (*_gtk_reserved3) (void);
147 void (*_gtk_reserved4) (void);
151 typedef gboolean (* PsppSheetViewColumnDropFunc) (PsppSheetView *tree_view,
152 PsppSheetViewColumn *column,
153 PsppSheetViewColumn *prev_column,
154 PsppSheetViewColumn *next_column,
156 typedef void (* PsppSheetViewMappingFunc) (PsppSheetView *tree_view,
159 typedef gboolean (*PsppSheetViewSearchEqualFunc) (GtkTreeModel *model,
163 gpointer search_data);
164 typedef void (*PsppSheetViewSearchPositionFunc) (PsppSheetView *tree_view,
165 GtkWidget *search_dialog,
170 GType pspp_sheet_view_get_type (void) G_GNUC_CONST;
171 GtkWidget *pspp_sheet_view_new (void);
172 GtkWidget *pspp_sheet_view_new_with_model (GtkTreeModel *model);
175 GtkTreeModel *pspp_sheet_view_get_model (PsppSheetView *tree_view);
176 void pspp_sheet_view_set_model (PsppSheetView *tree_view,
177 GtkTreeModel *model);
178 PsppSheetSelection *pspp_sheet_view_get_selection (PsppSheetView *tree_view);
179 GtkAdjustment *pspp_sheet_view_get_hadjustment (PsppSheetView *tree_view);
180 void pspp_sheet_view_set_hadjustment (PsppSheetView *tree_view,
181 GtkAdjustment *adjustment);
182 GtkAdjustment *pspp_sheet_view_get_vadjustment (PsppSheetView *tree_view);
183 void pspp_sheet_view_set_vadjustment (PsppSheetView *tree_view,
184 GtkAdjustment *adjustment);
185 gboolean pspp_sheet_view_get_headers_visible (PsppSheetView *tree_view);
186 void pspp_sheet_view_set_headers_visible (PsppSheetView *tree_view,
187 gboolean headers_visible);
188 void pspp_sheet_view_columns_autosize (PsppSheetView *tree_view);
189 gboolean pspp_sheet_view_get_headers_clickable (PsppSheetView *tree_view);
190 void pspp_sheet_view_set_headers_clickable (PsppSheetView *tree_view,
192 void pspp_sheet_view_set_rules_hint (PsppSheetView *tree_view,
194 gboolean pspp_sheet_view_get_rules_hint (PsppSheetView *tree_view);
196 /* Column funtions */
197 gint pspp_sheet_view_append_column (PsppSheetView *tree_view,
198 PsppSheetViewColumn *column);
199 gint pspp_sheet_view_remove_column (PsppSheetView *tree_view,
200 PsppSheetViewColumn *column);
201 gint pspp_sheet_view_insert_column (PsppSheetView *tree_view,
202 PsppSheetViewColumn *column,
204 gint pspp_sheet_view_insert_column_with_attributes (PsppSheetView *tree_view,
207 GtkCellRenderer *cell,
208 ...) G_GNUC_NULL_TERMINATED;
209 gint pspp_sheet_view_insert_column_with_data_func (PsppSheetView *tree_view,
212 GtkCellRenderer *cell,
213 PsppSheetCellDataFunc func,
215 GDestroyNotify dnotify);
216 PsppSheetViewColumn *pspp_sheet_view_get_column (PsppSheetView *tree_view,
218 GList *pspp_sheet_view_get_columns (PsppSheetView *tree_view);
219 void pspp_sheet_view_move_column_after (PsppSheetView *tree_view,
220 PsppSheetViewColumn *column,
221 PsppSheetViewColumn *base_column);
222 void pspp_sheet_view_set_column_drag_function (PsppSheetView *tree_view,
223 PsppSheetViewColumnDropFunc func,
225 GDestroyNotify destroy);
228 void pspp_sheet_view_scroll_to_point (PsppSheetView *tree_view,
231 void pspp_sheet_view_scroll_to_cell (PsppSheetView *tree_view,
233 PsppSheetViewColumn *column,
237 void pspp_sheet_view_row_activated (PsppSheetView *tree_view,
239 PsppSheetViewColumn *column);
240 void pspp_sheet_view_set_reorderable (PsppSheetView *tree_view,
241 gboolean reorderable);
242 gboolean pspp_sheet_view_get_reorderable (PsppSheetView *tree_view);
243 void pspp_sheet_view_set_cursor (PsppSheetView *tree_view,
245 PsppSheetViewColumn *focus_column,
246 gboolean start_editing);
247 void pspp_sheet_view_set_cursor_on_cell (PsppSheetView *tree_view,
249 PsppSheetViewColumn *focus_column,
250 GtkCellRenderer *focus_cell,
251 gboolean start_editing);
252 void pspp_sheet_view_get_cursor (PsppSheetView *tree_view,
254 PsppSheetViewColumn **focus_column);
257 /* Layout information */
258 GdkWindow *pspp_sheet_view_get_bin_window (PsppSheetView *tree_view);
259 gboolean pspp_sheet_view_get_path_at_pos (PsppSheetView *tree_view,
263 PsppSheetViewColumn **column,
266 void pspp_sheet_view_get_cell_area (PsppSheetView *tree_view,
268 PsppSheetViewColumn *column,
270 void pspp_sheet_view_get_background_area (PsppSheetView *tree_view,
272 PsppSheetViewColumn *column,
274 void pspp_sheet_view_get_visible_rect (PsppSheetView *tree_view,
275 GdkRectangle *visible_rect);
277 #ifndef GTK_DISABLE_DEPRECATED
278 void pspp_sheet_view_widget_to_tree_coords (PsppSheetView *tree_view,
283 void pspp_sheet_view_tree_to_widget_coords (PsppSheetView *tree_view,
288 #endif /* !GTK_DISABLE_DEPRECATED */
289 gboolean pspp_sheet_view_get_visible_range (PsppSheetView *tree_view,
290 GtkTreePath **start_path,
291 GtkTreePath **end_path);
293 /* Drag-and-Drop support */
294 void pspp_sheet_view_enable_model_drag_source (PsppSheetView *tree_view,
295 GdkModifierType start_button_mask,
296 const GtkTargetEntry *targets,
298 GdkDragAction actions);
299 void pspp_sheet_view_enable_model_drag_dest (PsppSheetView *tree_view,
300 const GtkTargetEntry *targets,
302 GdkDragAction actions);
303 void pspp_sheet_view_unset_rows_drag_source (PsppSheetView *tree_view);
304 void pspp_sheet_view_unset_rows_drag_dest (PsppSheetView *tree_view);
307 /* These are useful to implement your own custom stuff. */
308 void pspp_sheet_view_set_drag_dest_row (PsppSheetView *tree_view,
310 PsppSheetViewDropPosition pos);
311 void pspp_sheet_view_get_drag_dest_row (PsppSheetView *tree_view,
313 PsppSheetViewDropPosition *pos);
314 gboolean pspp_sheet_view_get_dest_row_at_pos (PsppSheetView *tree_view,
318 PsppSheetViewDropPosition *pos);
321 GdkPixmap *pspp_sheet_view_create_row_drag_icon (PsppSheetView *tree_view,
325 /* Interactive search */
326 void pspp_sheet_view_set_enable_search (PsppSheetView *tree_view,
327 gboolean enable_search);
328 gboolean pspp_sheet_view_get_enable_search (PsppSheetView *tree_view);
329 gint pspp_sheet_view_get_search_column (PsppSheetView *tree_view);
330 void pspp_sheet_view_set_search_column (PsppSheetView *tree_view,
332 PsppSheetViewSearchEqualFunc pspp_sheet_view_get_search_equal_func (PsppSheetView *tree_view);
333 void pspp_sheet_view_set_search_equal_func (PsppSheetView *tree_view,
334 PsppSheetViewSearchEqualFunc search_equal_func,
335 gpointer search_user_data,
336 GDestroyNotify search_destroy);
338 GtkEntry *pspp_sheet_view_get_search_entry (PsppSheetView *tree_view);
339 void pspp_sheet_view_set_search_entry (PsppSheetView *tree_view,
341 PsppSheetViewSearchPositionFunc pspp_sheet_view_get_search_position_func (PsppSheetView *tree_view);
342 void pspp_sheet_view_set_search_position_func (PsppSheetView *tree_view,
343 PsppSheetViewSearchPositionFunc func,
345 GDestroyNotify destroy);
347 /* Convert between the different coordinate systems */
348 void pspp_sheet_view_convert_widget_to_tree_coords (PsppSheetView *tree_view,
353 void pspp_sheet_view_convert_tree_to_widget_coords (PsppSheetView *tree_view,
358 void pspp_sheet_view_convert_widget_to_bin_window_coords (PsppSheetView *tree_view,
363 void pspp_sheet_view_convert_bin_window_to_widget_coords (PsppSheetView *tree_view,
368 void pspp_sheet_view_convert_tree_to_bin_window_coords (PsppSheetView *tree_view,
373 void pspp_sheet_view_convert_bin_window_to_tree_coords (PsppSheetView *tree_view,
379 /* This function should really never be used. It is just for use by ATK.
381 typedef void (* PsppSheetDestroyCountFunc) (PsppSheetView *tree_view,
385 void pspp_sheet_view_set_destroy_count_func (PsppSheetView *tree_view,
386 PsppSheetDestroyCountFunc func,
388 GDestroyNotify destroy);
390 void pspp_sheet_view_set_hover_selection (PsppSheetView *tree_view,
392 gboolean pspp_sheet_view_get_hover_selection (PsppSheetView *tree_view);
393 void pspp_sheet_view_set_rubber_banding (PsppSheetView *tree_view,
395 gboolean pspp_sheet_view_get_rubber_banding (PsppSheetView *tree_view);
397 gboolean pspp_sheet_view_is_rubber_banding_active (PsppSheetView *tree_view);
399 PsppSheetViewGridLines pspp_sheet_view_get_grid_lines (PsppSheetView *tree_view);
400 void pspp_sheet_view_set_grid_lines (PsppSheetView *tree_view,
401 PsppSheetViewGridLines grid_lines);
403 PsppSheetViewSpecialCells pspp_sheet_view_get_special_cells (PsppSheetView *tree_view);
404 void pspp_sheet_view_set_special_cells (PsppSheetView *tree_view,
405 PsppSheetViewSpecialCells);
407 int pspp_sheet_view_get_fixed_height (const PsppSheetView *);
408 void pspp_sheet_view_set_fixed_height (PsppSheetView *,
411 /* Convenience functions for setting tooltips */
412 void pspp_sheet_view_set_tooltip_row (PsppSheetView *tree_view,
415 void pspp_sheet_view_set_tooltip_cell (PsppSheetView *tree_view,
418 PsppSheetViewColumn *column,
419 GtkCellRenderer *cell);
420 gboolean pspp_sheet_view_get_tooltip_context(PsppSheetView *tree_view,
423 gboolean keyboard_tip,
424 GtkTreeModel **model,
427 void pspp_sheet_view_set_tooltip_column (PsppSheetView *tree_view,
429 gint pspp_sheet_view_get_tooltip_column (PsppSheetView *tree_view);
431 void pspp_sheet_view_stop_editing (PsppSheetView *tree_view,
432 gboolean cancel_editing);
437 #endif /* __PSPP_SHEET_VIEW_H__ */