X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpspp-sheet-private.h;h=e01fd47d21506581ad9d0194abe73ce282e8d1e8;hb=d5a566a2900f69ab51c7dae78cd7810a4204589a;hp=c0ea0c8020144bbbae422d8b87ab283e7b3f1d6c;hpb=d64431ef201b3031adaca5643e35274c0cee2fa5;p=pspp diff --git a/src/ui/gui/pspp-sheet-private.h b/src/ui/gui/pspp-sheet-private.h index c0ea0c8020..e01fd47d21 100644 --- a/src/ui/gui/pspp-sheet-private.h +++ b/src/ui/gui/pspp-sheet-private.h @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2011 Free Software Foundation, Inc. + Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,31 +38,21 @@ #include +#include "libpspp/range-tower.h" #include "ui/gui/pspp-sheet-view.h" #include "ui/gui/pspp-sheet-view-column.h" -#include "ui/gui/pspp-rb-tree.h" #define TREE_VIEW_DRAG_WIDTH 6 typedef enum { - PSPP_SHEET_VIEW_IS_LIST = 1 << 0, - PSPP_SHEET_VIEW_SHOW_EXPANDERS = 1 << 1, PSPP_SHEET_VIEW_IN_COLUMN_RESIZE = 1 << 2, - PSPP_SHEET_VIEW_ARROW_PRELIT = 1 << 3, PSPP_SHEET_VIEW_HEADERS_VISIBLE = 1 << 4, PSPP_SHEET_VIEW_DRAW_KEYFOCUS = 1 << 5, PSPP_SHEET_VIEW_MODEL_SETUP = 1 << 6, PSPP_SHEET_VIEW_IN_COLUMN_DRAG = 1 << 7 } PsppSheetViewFlags; -typedef enum -{ - GTK_TREE_SELECT_MODE_TOGGLE = 1 << 0, - GTK_TREE_SELECT_MODE_EXTEND = 1 << 1 -} -GtkTreeSelectMode; - enum { DRAG_COLUMN_WINDOW_STATE_UNSET = 0, @@ -84,7 +74,6 @@ enum #define PSPP_SHEET_VIEW_FLAG_SET(tree_view, flag) ((tree_view->priv->flags&flag)==flag) #define TREE_VIEW_HEADER_HEIGHT(tree_view) (PSPP_SHEET_VIEW_FLAG_SET (tree_view, PSPP_SHEET_VIEW_HEADERS_VISIBLE)?tree_view->priv->header_height:0) #define TREE_VIEW_COLUMN_REQUESTED_WIDTH(column) (CLAMP (column->requested_width, (column->min_width!=-1)?column->min_width:column->requested_width, (column->max_width!=-1)?column->max_width:column->requested_width)) -#define TREE_VIEW_DRAW_EXPANDERS(tree_view) (!PSPP_SHEET_VIEW_FLAG_SET (tree_view, PSPP_SHEET_VIEW_IS_LIST)&&PSPP_SHEET_VIEW_FLAG_SET (tree_view, PSPP_SHEET_VIEW_SHOW_EXPANDERS)) /* This lovely little value is used to determine how far away from the title bar * you can move the mouse and still have a column drag work. @@ -106,7 +95,8 @@ struct _PsppSheetViewPrivate guint flags; /* tree information */ - GtkRBTree *tree; + gint row_count; + struct range_tower *selected; /* Container info */ GList *children; @@ -134,9 +124,6 @@ struct _PsppSheetViewPrivate /* Indentation and expander layout */ gint expander_size; - PsppSheetViewColumn *expander_column; - - gint level_indentation; /* Key navigation (focus), selection */ gint cursor_offset; @@ -147,12 +134,10 @@ struct _PsppSheetViewPrivate PsppSheetViewColumn *focus_column; /* Current pressed node, previously pressed, prelight */ - GtkRBNode *button_pressed_node; - GtkRBTree *button_pressed_tree; - gint pressed_button; gint press_start_x; gint press_start_y; + gint press_start_node; gint event_last_x; gint event_last_y; @@ -161,19 +146,11 @@ struct _PsppSheetViewPrivate gint last_button_x; gint last_button_y; - GtkRBNode *prelight_node; - GtkRBTree *prelight_tree; + int prelight_node; /* Cell Editing */ PsppSheetViewColumn *edited_column; - - /* The node that's currently being collapsed or expanded */ - GtkRBNode *expanded_collapsed_node; - GtkRBTree *expanded_collapsed_tree; - guint expand_collapse_timeout; - - /* Auto expand/collapse timeout in hover mode */ - guint auto_expand_timeout; + gint edited_row; /* Selection information */ PsppSheetSelection *selection; @@ -182,6 +159,7 @@ struct _PsppSheetViewPrivate gint n_columns; GList *columns; gint header_height; + gint n_selected_columns; PsppSheetViewColumnDropFunc column_drop_func; gpointer column_drop_func_data; @@ -189,8 +167,6 @@ struct _PsppSheetViewPrivate GList *column_drag_info; PsppSheetViewColumnReorder *cur_reorder; - gint prev_width_before_expander; - /* Interactive Header reordering */ GdkWindow *drag_window; GdkWindow *drag_highlight_window; @@ -204,10 +180,6 @@ struct _PsppSheetViewPrivate /* Non-interactive Header Resizing, expand flag support */ gint prev_width; - gint last_extra_space; - gint last_extra_space_per_column; - gint last_number_of_expand_columns; - /* ATK Hack */ PsppSheetDestroyCountFunc destroy_count_func; gpointer destroy_count_data; @@ -228,14 +200,16 @@ struct _PsppSheetViewPrivate gint rubber_band_shift; gint rubber_band_ctrl; - GtkRBNode *rubber_band_start_node; - GtkRBTree *rubber_band_start_tree; + int rubber_band_start_node; + + int rubber_band_end_node; - GtkRBNode *rubber_band_end_node; - GtkRBTree *rubber_band_end_tree; + /* Rectangular selection. */ + PsppSheetViewColumn *anchor_column; /* XXX needs to be a weak pointer? */ /* fixed height */ gint fixed_height; + gboolean fixed_height_set; /* Scroll-to functionality when unrealized */ GtkTreeRowReference *scroll_to_path; @@ -259,38 +233,28 @@ struct _PsppSheetViewPrivate /* Grid and tree lines */ PsppSheetViewGridLines grid_lines; - GdkGC *grid_line_gc; - gboolean tree_lines_enabled; - GdkGC *tree_line_gc; - - /* Row separators */ - PsppSheetViewRowSeparatorFunc row_separator_func; - gpointer row_separator_data; - GDestroyNotify row_separator_destroy; + /* Special cells. */ + PsppSheetViewSpecialCells special_cells; /* Tooltip support */ gint tooltip_column; + /* Cached style for button facades in columns. */ + GtkStyle *button_style; + /* Here comes the bitfield */ guint scroll_to_use_align : 1; - guint fixed_height_mode : 1; - guint fixed_height_check : 1; - guint reorderable : 1; guint header_has_focus : 1; guint drag_column_window_state : 3; /* hint to display rows in alternating colors */ guint has_rules : 1; - guint mark_rows_col_dirty : 1; /* for DnD */ guint empty_view_drop : 1; - guint ctrl_pressed : 1; - guint shift_pressed : 1; - guint init_hadjust_value : 1; guint in_top_row_to_dy : 1; @@ -299,9 +263,8 @@ struct _PsppSheetViewPrivate guint enable_search : 1; guint disable_popdown : 1; guint search_custom_entry_set : 1; - + guint hover_selection : 1; - guint hover_expand : 1; guint imcontext_changed : 1; guint rubber_banding_enable : 1; @@ -311,8 +274,16 @@ struct _PsppSheetViewPrivate guint post_validation_flag : 1; /* Whether our key press handler is to avoid sending an unhandled binding to the search entry */ + guint search_entry_avoid_unhandled_binding : 1; -}; + /* GtkScrollablePolicy needs to be checked when + * driving the scrollable adjustment values */ + guint hscroll_policy : 1; + guint vscroll_policy : 1; + + /* For optimisation of size allocate requests */ + guint resized : 1; + }; #ifdef __GNUC__ @@ -386,19 +357,16 @@ struct _PsppSheetViewPrivate /* functions that shouldn't be exported */ void _pspp_sheet_selection_internal_select_node (PsppSheetSelection *selection, - GtkRBNode *node, - GtkRBTree *tree, + int node, GtkTreePath *path, - GtkTreeSelectMode mode, + PsppSheetSelectMode mode, gboolean override_browse_mode); void _pspp_sheet_selection_emit_changed (PsppSheetSelection *selection); -gboolean _pspp_sheet_view_find_node (PsppSheetView *tree_view, +void _pspp_sheet_view_find_node (PsppSheetView *tree_view, GtkTreePath *path, - GtkRBTree **tree, - GtkRBNode **node); + int *node); GtkTreePath *_pspp_sheet_view_find_path (PsppSheetView *tree_view, - GtkRBTree *tree, - GtkRBNode *node); + int node); void _pspp_sheet_view_child_move_resize (PsppSheetView *tree_view, GtkWidget *widget, gint x, @@ -406,8 +374,7 @@ void _pspp_sheet_view_child_move_resize (PsppSheetView *tr gint width, gint height); void _pspp_sheet_view_queue_draw_node (PsppSheetView *tree_view, - GtkRBTree *tree, - GtkRBNode *node, + int node, const GdkRectangle *clip_rect); void _pspp_sheet_view_column_realize_button (PsppSheetViewColumn *column); @@ -445,15 +412,11 @@ PsppSheetSelection* _pspp_sheet_selection_new (void); PsppSheetSelection* _pspp_sheet_selection_new_with_tree_view (PsppSheetView *tree_view); void _pspp_sheet_selection_set_tree_view (PsppSheetSelection *selection, PsppSheetView *tree_view); -gboolean _pspp_sheet_selection_row_is_selectable (PsppSheetSelection *selection, - GtkRBNode *node, - GtkTreePath *path); void _pspp_sheet_view_column_cell_render (PsppSheetViewColumn *tree_column, - GdkWindow *window, + cairo_t *cr, const GdkRectangle *background_area, const GdkRectangle *cell_area, - const GdkRectangle *expose_area, guint flags); void _pspp_sheet_view_column_get_focus_area (PsppSheetViewColumn *tree_column, const GdkRectangle *background_area, @@ -464,17 +427,29 @@ gboolean _pspp_sheet_view_column_cell_focus (PsppSheetViewColumn *tree_ gboolean left, gboolean right); void _pspp_sheet_view_column_cell_draw_focus (PsppSheetViewColumn *tree_column, - GdkWindow *window, + cairo_t *cr, const GdkRectangle *background_area, const GdkRectangle *cell_area, - const GdkRectangle *expose_area, guint flags); -void _pspp_sheet_view_column_cell_set_dirty (PsppSheetViewColumn *tree_column, - gboolean install_handler); +void _pspp_sheet_view_column_cell_set_dirty (PsppSheetViewColumn *tree_column); void _pspp_sheet_view_column_get_neighbor_sizes (PsppSheetViewColumn *column, GtkCellRenderer *cell, gint *left, gint *right); +gboolean pspp_sheet_view_node_is_selected (PsppSheetView *tree_view, + int node); +void pspp_sheet_view_node_select (PsppSheetView *tree_view, + int node); +void pspp_sheet_view_node_unselect (PsppSheetView *tree_view, + int node); + +gint +pspp_sheet_view_node_next (PsppSheetView *tree_view, + gint node); +gint +pspp_sheet_view_node_prev (PsppSheetView *tree_view, + gint node); + #endif /* __GTK_TREE_PRIVATE_H__ */