123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- // included by gtk2.pas
- {$IFDEF read_forward_definitions}
- {$ENDIF read_forward_definitions}
- //------------------------------------------------------------------------------
- {$IFDEF read_interface_types}
- // internal type
- PGtkTreeRowReference = pointer;
- PGtkTreeViewFlags = ^TGtkTreeViewFlags;
- TGtkTreeViewFlags = longint;
- TGtkTreeViewSearchDialogPositionFunc = procedure (tree_view:PGtkTreeView; search_dialog:PGtkWidget); cdecl;
- PGtkTreeViewColumnReorder = ^TGtkTreeViewColumnReorder;
- TGtkTreeViewColumnReorder = record
- left_align : gint;
- right_align : gint;
- left_column : PGtkTreeViewColumn;
- right_column : PGtkTreeViewColumn;
- end;
- { tree information }
- { bin_window offset }
- { dy == y pos of top_row + top_row_dy }
- { we cache it for simplicity of the code }
- { Focus code }
- { Selection stuff }
- { Column Resizing }
- { Prelight information }
- { The node that's currently being collapsed or expanded }
- { Selection information }
- { Header information }
- { ATK Hack }
- { Scroll timeout (e.g. during dnd) }
- { Row drag-and-drop }
- { Scroll-to functionality when unrealized }
- { hint to display rows in alternating colors }
- { interactive search }
- PGtkTreeViewPrivate = ^TGtkTreeViewPrivate;
- TGtkTreeViewPrivate = record
- model : PGtkTreeModel;
- flags : guint;
- tree : PGtkRBTree;
- button_pressed_node : PGtkRBNode;
- button_pressed_tree : PGtkRBTree;
- children : PGList;
- width : gint;
- height : gint;
- expander_size : gint;
- hadjustment : PGtkAdjustment;
- vadjustment : PGtkAdjustment;
- bin_window : PGdkWindow;
- header_window : PGdkWindow;
- drag_window : PGdkWindow;
- drag_highlight_window : PGdkWindow;
- drag_column : PGtkTreeViewColumn;
- last_button_press : PGtkTreeRowReference;
- last_button_press_2 : PGtkTreeRowReference;
- top_row : PGtkTreeRowReference;
- top_row_dy : gint;
- dy : gint;
- drag_column_x : gint;
- expander_column : PGtkTreeViewColumn;
- edited_column : PGtkTreeViewColumn;
- presize_handler_timer : guint;
- validate_rows_timer : guint;
- scroll_sync_timer : guint;
- focus_column : PGtkTreeViewColumn;
- anchor : PGtkTreeRowReference;
- cursor : PGtkTreeRowReference;
- drag_pos : gint;
- x_drag : gint;
- prelight_node : PGtkRBNode;
- prelight_tree : PGtkRBTree;
- expanded_collapsed_node : PGtkRBNode;
- expanded_collapsed_tree : PGtkRBTree;
- expand_collapse_timeout : guint;
- selection : PGtkTreeSelection;
- n_columns : gint;
- columns : PGList;
- header_height : gint;
- column_drop_func : TGtkTreeViewColumnDropFunc;
- column_drop_func_data : gpointer;
- column_drop_func_data_destroy : TGtkDestroyNotify;
- column_drag_info : PGList;
- cur_reorder : PGtkTreeViewColumnReorder;
- destroy_count_func : TGtkTreeDestroyCountFunc;
- destroy_count_data : gpointer;
- destroy_count_destroy : TGtkDestroyNotify;
- scroll_timeout : guint;
- drag_dest_row : PGtkTreeRowReference;
- drag_dest_pos : TGtkTreeViewDropPosition;
- open_dest_timeout : guint;
- pressed_button : gint;
- press_start_x : gint;
- press_start_y : gint;
- scroll_to_path : PGtkTreeRowReference;
- scroll_to_column : PGtkTreeViewColumn;
- scroll_to_row_align : gfloat;
- scroll_to_col_align : gfloat;
- flag0 : word;
- search_column : gint;
- search_dialog_position_func : TGtkTreeViewSearchDialogPositionFunc;
- search_equal_func : TGtkTreeViewSearchEqualFunc;
- search_user_data : gpointer;
- search_destroy : TGtkDestroyNotify;
- end;
- {$ENDIF read_interface_types}
- //------------------------------------------------------------------------------
- {$IFDEF read_interface_rest}
- const
- TREE_VIEW_DRAG_WIDTH = 6;
- GTK_TREE_VIEW_IS_LIST = 1 shl 0;
- GTK_TREE_VIEW_SHOW_EXPANDERS = 1 shl 1;
- GTK_TREE_VIEW_IN_COLUMN_RESIZE = 1 shl 2;
- GTK_TREE_VIEW_ARROW_PRELIT = 1 shl 3;
- GTK_TREE_VIEW_HEADERS_VISIBLE = 1 shl 4;
- GTK_TREE_VIEW_DRAW_KEYFOCUS = 1 shl 5;
- GTK_TREE_VIEW_MODEL_SETUP = 1 shl 6;
- GTK_TREE_VIEW_IN_COLUMN_DRAG = 1 shl 7;
- DRAG_COLUMN_WINDOW_STATE_UNSET = 0;
- DRAG_COLUMN_WINDOW_STATE_ORIGINAL = 1;
- DRAG_COLUMN_WINDOW_STATE_ARROW = 2;
- DRAG_COLUMN_WINDOW_STATE_ARROW_LEFT = 3;
- DRAG_COLUMN_WINDOW_STATE_ARROW_RIGHT = 4;
- procedure GTK_TREE_VIEW_SET_FLAG(tree_view: PGtkTreeView; flag : guint);
- procedure GTK_TREE_VIEW_UNSET_FLAG(tree_view: PGtkTreeView; flag : guint);
- function GTK_TREE_VIEW_FLAG_SET(tree_view: PGtkTreeView; flag : guint) : boolean;
- function TREE_VIEW_HEADER_HEIGHT(tree_view : PGtkTreeView) : longint;
- function TREE_VIEW_COLUMN_REQUESTED_WIDTH(column : PGtkTreeViewColumn) : longint;
- function TREE_VIEW_DRAW_EXPANDERS(tree_view : PGtkTreeView) : boolean;
- { 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.
- }
- function TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER(tree_view : PGtkTreeView) : longint;
- const
- bm_TGtkTreeViewPrivate_scroll_to_use_align = $1;
- bp_TGtkTreeViewPrivate_scroll_to_use_align = 0;
- bm_TGtkTreeViewPrivate_fixed_height_check = $2;
- bp_TGtkTreeViewPrivate_fixed_height_check = 1;
- bm_TGtkTreeViewPrivate_reorderable = $4;
- bp_TGtkTreeViewPrivate_reorderable = 2;
- bm_TGtkTreeViewPrivate_header_has_focus = $8;
- bp_TGtkTreeViewPrivate_header_has_focus = 3;
- bm_TGtkTreeViewPrivate_drag_column_window_state = $70;
- bp_TGtkTreeViewPrivate_drag_column_window_state = 4;
- bm_TGtkTreeViewPrivate_has_rules = $80;
- bp_TGtkTreeViewPrivate_has_rules = 7;
- bm_TGtkTreeViewPrivate_mark_rows_col_dirty = $100;
- bp_TGtkTreeViewPrivate_mark_rows_col_dirty = 8;
- bm_TGtkTreeViewPrivate_enable_search = $200;
- bp_TGtkTreeViewPrivate_enable_search = 9;
- bm_TGtkTreeViewPrivate_disable_popdown = $400;
- bp_TGtkTreeViewPrivate_disable_popdown = 10;
- function scroll_to_use_align(var a : TGtkTreeViewPrivate) : guint;
- procedure set_scroll_to_use_align(var a : TGtkTreeViewPrivate; __scroll_to_use_align : guint);
- function fixed_height_check(var a : TGtkTreeViewPrivate) : guint;
- procedure set_fixed_height_check(var a : TGtkTreeViewPrivate; __fixed_height_check : guint);
- function reorderable(var a : TGtkTreeViewPrivate) : guint; overload;
- procedure set_reorderable(var a : TGtkTreeViewPrivate; __reorderable : guint); overload;
- function header_has_focus(var a : TGtkTreeViewPrivate) : guint;
- procedure set_header_has_focus(var a : TGtkTreeViewPrivate; __header_has_focus : guint);
- function drag_column_window_state(var a : TGtkTreeViewPrivate) : guint;
- procedure set_drag_column_window_state(var a : TGtkTreeViewPrivate; __drag_column_window_state : guint);
- function has_rules(var a : TGtkTreeViewPrivate) : guint;
- procedure set_has_rules(var a : TGtkTreeViewPrivate; __has_rules : guint);
- function mark_rows_col_dirty(var a : TGtkTreeViewPrivate) : guint;
- procedure set_mark_rows_col_dirty(var a : TGtkTreeViewPrivate; __mark_rows_col_dirty : guint);
- function enable_search(var a : TGtkTreeViewPrivate) : guint;
- procedure set_enable_search(var a : TGtkTreeViewPrivate; __enable_search : guint);
- function disable_popdown(var a : TGtkTreeViewPrivate) : guint;
- procedure set_disable_popdown(var a : TGtkTreeViewPrivate; __disable_popdown : guint);
- { functions that shouldn't be exported }
- procedure _gtk_tree_selection_internal_select_node(selection:PGtkTreeSelection; node:PGtkRBNode; tree:PGtkRBTree; path:PGtkTreePath; state:TGdkModifierType;
- override_browse_mode:gboolean); cdecl; external gtklib;
- function _gtk_tree_view_find_node(tree_view:PGtkTreeView; path:PGtkTreePath; var tree:PGtkRBTree; var node:PGtkRBNode):gboolean; cdecl; external gtklib;
- function _gtk_tree_view_find_path(tree_view:PGtkTreeView; tree:PGtkRBTree; node:PGtkRBNode):PGtkTreePath; cdecl; external gtklib;
- procedure _gtk_tree_view_child_move_resize(tree_view:PGtkTreeView; widget:PGtkWidget; x:gint; y:gint; width:gint;
- height:gint); cdecl; external gtklib;
- procedure _gtk_tree_view_queue_draw_node(tree_view:PGtkTreeView; tree:PGtkRBTree; node:PGtkRBNode; clip_rect:PGdkRectangle); cdecl; external gtklib;
- procedure _gtk_tree_view_column_realize_button(column:PGtkTreeViewColumn); cdecl; external gtklib;
- procedure _gtk_tree_view_column_unrealize_button(column:PGtkTreeViewColumn); cdecl; external gtklib;
- procedure _gtk_tree_view_column_set_tree_view(column:PGtkTreeViewColumn; tree_view:PGtkTreeView); cdecl; external gtklib;
- procedure _gtk_tree_view_column_unset_tree_view(column:PGtkTreeViewColumn); cdecl; external gtklib;
- procedure _gtk_tree_view_column_set_width(column:PGtkTreeViewColumn; width:gint); cdecl; external gtklib;
- procedure _gtk_tree_view_column_start_drag(tree_view:PGtkTreeView; column:PGtkTreeViewColumn); cdecl; external gtklib;
- function _gtk_tree_view_column_cell_event(tree_column:PGtkTreeViewColumn; var editable_widget:PGtkCellEditable; event:PGdkEvent; path_string:Pgchar; background_area:PGdkRectangle;
- cell_area:PGdkRectangle; flags:guint):gboolean; cdecl; external gtklib;
- procedure _gtk_tree_view_column_start_editing(tree_column:PGtkTreeViewColumn; editable_widget:PGtkCellEditable); cdecl; external gtklib;
- procedure _gtk_tree_view_column_stop_editing(tree_column:PGtkTreeViewColumn); cdecl; external gtklib;
- procedure _gtk_tree_view_install_mark_rows_col_dirty(tree_view:PGtkTreeView); cdecl; external gtklib;
- procedure _gtk_tree_view_column_autosize(tree_view:PGtkTreeView; column:PGtkTreeViewColumn); cdecl; external gtklib;
- function _gtk_tree_view_column_has_editable_cell(column:PGtkTreeViewColumn):gboolean; cdecl; external gtklib;
- function _gtk_tree_view_column_get_edited_cell(column:PGtkTreeViewColumn):PGtkCellRenderer; cdecl; external gtklib;
- function _gtk_tree_view_column_count_special_cells(column:PGtkTreeViewColumn):gint; cdecl; external gtklib;
- function _gtk_tree_view_column_get_cell_at_pos(column:PGtkTreeViewColumn; x:gint):PGtkCellRenderer; cdecl; external gtklib;
- function _gtk_tree_selection_new:PGtkTreeSelection; cdecl; external gtklib;
- function _gtk_tree_selection_new_with_tree_view(tree_view:PGtkTreeView):PGtkTreeSelection; cdecl; external gtklib;
- procedure _gtk_tree_selection_set_tree_view(selection:PGtkTreeSelection; tree_view:PGtkTreeView); cdecl; external gtklib;
- procedure _gtk_tree_view_column_cell_render(tree_column:PGtkTreeViewColumn; window:PGdkWindow; background_area:PGdkRectangle; cell_area:PGdkRectangle; expose_area:PGdkRectangle;
- flags:guint); cdecl; external gtklib;
- function _gtk_tree_view_column_cell_focus(tree_column:PGtkTreeViewColumn; direction:gint; left:gboolean; right:gboolean):gboolean; cdecl; external gtklib;
- procedure _gtk_tree_view_column_cell_draw_focus(tree_column:PGtkTreeViewColumn; window:PGdkWindow; background_area:PGdkRectangle; cell_area:PGdkRectangle; expose_area:PGdkRectangle;
- flags:guint); cdecl; external gtklib;
- procedure _gtk_tree_view_column_cell_set_dirty(tree_column:PGtkTreeViewColumn; install_handler:gboolean); cdecl; external gtklib;
- procedure _gtk_tree_view_column_get_neighbor_sizes(column:PGtkTreeViewColumn; cell:PGtkCellRenderer; left:Pgint; right:Pgint); cdecl; external gtklib;
- {$ENDIF read_interface_rest}
- //------------------------------------------------------------------------------
- {$IFDEF read_implementation}
- function GTK_TREE_VIEW_FLAG_SET(tree_view: PGtkTreeView; flag : guint) : boolean;
- begin
- GTK_TREE_VIEW_FLAG_SET:=((tree_view^.priv^.flags) and flag) = flag;
- end;
- function TREE_VIEW_HEADER_HEIGHT(tree_view : PGtkTreeView) : longint;
- var
- if_local1 : longint;
- begin
- if GTK_TREE_VIEW_FLAG_SET(tree_view,GTK_TREE_VIEW_HEADERS_VISIBLE) then
- if_local1:=tree_view^.priv^.header_height
- else
- if_local1:=0;
- TREE_VIEW_HEADER_HEIGHT:=if_local1;
- end;
- function TREE_VIEW_COLUMN_REQUESTED_WIDTH(column : PGtkTreeViewColumn) : longint;
- var
- MinWidth, MaxWidth: integer;
- begin
- if column^.min_width<>-1 then
- MinWidth:=column^.min_width
- else
- MinWidth:=column^.requested_width;
- if column^.max_width<>-1 then
- MaxWidth:=column^.max_width
- else
- MaxWidth:=column^.requested_width;
- TREE_VIEW_COLUMN_REQUESTED_WIDTH:=CLAMP(column^.requested_width,MinWidth,MaxWidth);
- end;
- function TREE_VIEW_DRAW_EXPANDERS(tree_view : PGtkTreeView) : boolean;
- begin
- TREE_VIEW_DRAW_EXPANDERS:=(not (GTK_TREE_VIEW_FLAG_SET(tree_view,GTK_TREE_VIEW_IS_LIST)))
- and (GTK_TREE_VIEW_FLAG_SET(tree_view,GTK_TREE_VIEW_SHOW_EXPANDERS));
- end;
- function TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER(tree_view : PGtkTreeView) : longint;
- begin
- TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER:=10 * (TREE_VIEW_HEADER_HEIGHT(tree_view));
- end;
- function scroll_to_use_align(var a : TGtkTreeViewPrivate) : guint;
- begin
- scroll_to_use_align:=(a.flag0 and bm_TGtkTreeViewPrivate_scroll_to_use_align) shr bp_TGtkTreeViewPrivate_scroll_to_use_align;
- end;
- procedure set_scroll_to_use_align(var a : TGtkTreeViewPrivate; __scroll_to_use_align : guint);
- begin
- a.flag0:=a.flag0 or ((__scroll_to_use_align shl bp_TGtkTreeViewPrivate_scroll_to_use_align) and bm_TGtkTreeViewPrivate_scroll_to_use_align);
- end;
- function fixed_height_check(var a : TGtkTreeViewPrivate) : guint;
- begin
- fixed_height_check:=(a.flag0 and bm_TGtkTreeViewPrivate_fixed_height_check) shr bp_TGtkTreeViewPrivate_fixed_height_check;
- end;
- procedure set_fixed_height_check(var a : TGtkTreeViewPrivate; __fixed_height_check : guint);
- begin
- a.flag0:=a.flag0 or ((__fixed_height_check shl bp_TGtkTreeViewPrivate_fixed_height_check) and bm_TGtkTreeViewPrivate_fixed_height_check);
- end;
- function reorderable(var a : TGtkTreeViewPrivate) : guint;
- begin
- reorderable:=(a.flag0 and bm_TGtkTreeViewPrivate_reorderable) shr bp_TGtkTreeViewPrivate_reorderable;
- end;
- procedure set_reorderable(var a : TGtkTreeViewPrivate; __reorderable : guint);
- begin
- a.flag0:=a.flag0 or ((__reorderable shl bp_TGtkTreeViewPrivate_reorderable) and bm_TGtkTreeViewPrivate_reorderable);
- end;
- function header_has_focus(var a : TGtkTreeViewPrivate) : guint;
- begin
- header_has_focus:=(a.flag0 and bm_TGtkTreeViewPrivate_header_has_focus) shr bp_TGtkTreeViewPrivate_header_has_focus;
- end;
- procedure set_header_has_focus(var a : TGtkTreeViewPrivate; __header_has_focus : guint);
- begin
- a.flag0:=a.flag0 or ((__header_has_focus shl bp_TGtkTreeViewPrivate_header_has_focus) and bm_TGtkTreeViewPrivate_header_has_focus);
- end;
- function drag_column_window_state(var a : TGtkTreeViewPrivate) : guint;
- begin
- drag_column_window_state:=(a.flag0 and bm_TGtkTreeViewPrivate_drag_column_window_state) shr bp_TGtkTreeViewPrivate_drag_column_window_state;
- end;
- procedure set_drag_column_window_state(var a : TGtkTreeViewPrivate; __drag_column_window_state : guint);
- begin
- a.flag0:=a.flag0 or ((__drag_column_window_state shl bp_TGtkTreeViewPrivate_drag_column_window_state) and bm_TGtkTreeViewPrivate_drag_column_window_state);
- end;
- function has_rules(var a : TGtkTreeViewPrivate) : guint;
- begin
- has_rules:=(a.flag0 and bm_TGtkTreeViewPrivate_has_rules) shr bp_TGtkTreeViewPrivate_has_rules;
- end;
- procedure set_has_rules(var a : TGtkTreeViewPrivate; __has_rules : guint);
- begin
- a.flag0:=a.flag0 or ((__has_rules shl bp_TGtkTreeViewPrivate_has_rules) and bm_TGtkTreeViewPrivate_has_rules);
- end;
- function mark_rows_col_dirty(var a : TGtkTreeViewPrivate) : guint;
- begin
- mark_rows_col_dirty:=(a.flag0 and bm_TGtkTreeViewPrivate_mark_rows_col_dirty) shr bp_TGtkTreeViewPrivate_mark_rows_col_dirty;
- end;
- procedure set_mark_rows_col_dirty(var a : TGtkTreeViewPrivate; __mark_rows_col_dirty : guint);
- begin
- a.flag0:=a.flag0 or ((__mark_rows_col_dirty shl bp_TGtkTreeViewPrivate_mark_rows_col_dirty) and bm_TGtkTreeViewPrivate_mark_rows_col_dirty);
- end;
- function enable_search(var a : TGtkTreeViewPrivate) : guint;
- begin
- enable_search:=(a.flag0 and bm_TGtkTreeViewPrivate_enable_search) shr bp_TGtkTreeViewPrivate_enable_search;
- end;
- procedure set_enable_search(var a : TGtkTreeViewPrivate; __enable_search : guint);
- begin
- a.flag0:=a.flag0 or ((__enable_search shl bp_TGtkTreeViewPrivate_enable_search) and bm_TGtkTreeViewPrivate_enable_search);
- end;
- function disable_popdown(var a : TGtkTreeViewPrivate) : guint;
- begin
- disable_popdown:=(a.flag0 and bm_TGtkTreeViewPrivate_disable_popdown) shr bp_TGtkTreeViewPrivate_disable_popdown;
- end;
- procedure set_disable_popdown(var a : TGtkTreeViewPrivate; __disable_popdown : guint);
- begin
- a.flag0:=a.flag0 or ((__disable_popdown shl bp_TGtkTreeViewPrivate_disable_popdown) and bm_TGtkTreeViewPrivate_disable_popdown);
- end;
- procedure GTK_TREE_VIEW_SET_FLAG(tree_view: PGtkTreeView; flag : guint);
- begin
- tree_view^.priv^.flags:=tree_view^.priv^.flags or flag;
- end;
- procedure GTK_TREE_VIEW_UNSET_FLAG(tree_view: PGtkTreeView; flag : guint);
- begin
- tree_view^.priv^.flags:=tree_view^.priv^.flags and not flag;
- end;
- {$ENDIF read_implementation}
- // included by gtk2.pas
|