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 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
|
// 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
|