gtktreeprivate.inc 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370
  1. // included by gtk2.pas
  2. {$IFDEF read_forward_definitions}
  3. {$ENDIF read_forward_definitions}
  4. //------------------------------------------------------------------------------
  5. {$IFDEF read_interface_types}
  6. // internal type
  7. PGtkTreeRowReference = pointer;
  8. PGtkTreeViewFlags = ^TGtkTreeViewFlags;
  9. TGtkTreeViewFlags = longint;
  10. TGtkTreeViewSearchDialogPositionFunc = procedure (tree_view:PGtkTreeView; search_dialog:PGtkWidget); cdecl;
  11. PGtkTreeViewColumnReorder = ^TGtkTreeViewColumnReorder;
  12. TGtkTreeViewColumnReorder = record
  13. left_align : gint;
  14. right_align : gint;
  15. left_column : PGtkTreeViewColumn;
  16. right_column : PGtkTreeViewColumn;
  17. end;
  18. { tree information }
  19. { bin_window offset }
  20. { dy == y pos of top_row + top_row_dy }
  21. { we cache it for simplicity of the code }
  22. { Focus code }
  23. { Selection stuff }
  24. { Column Resizing }
  25. { Prelight information }
  26. { The node that's currently being collapsed or expanded }
  27. { Selection information }
  28. { Header information }
  29. { ATK Hack }
  30. { Scroll timeout (e.g. during dnd) }
  31. { Row drag-and-drop }
  32. { Scroll-to functionality when unrealized }
  33. { hint to display rows in alternating colors }
  34. { interactive search }
  35. PGtkTreeViewPrivate = ^TGtkTreeViewPrivate;
  36. TGtkTreeViewPrivate = record
  37. model : PGtkTreeModel;
  38. flags : guint;
  39. tree : PGtkRBTree;
  40. button_pressed_node : PGtkRBNode;
  41. button_pressed_tree : PGtkRBTree;
  42. children : PGList;
  43. width : gint;
  44. height : gint;
  45. expander_size : gint;
  46. hadjustment : PGtkAdjustment;
  47. vadjustment : PGtkAdjustment;
  48. bin_window : PGdkWindow;
  49. header_window : PGdkWindow;
  50. drag_window : PGdkWindow;
  51. drag_highlight_window : PGdkWindow;
  52. drag_column : PGtkTreeViewColumn;
  53. last_button_press : PGtkTreeRowReference;
  54. last_button_press_2 : PGtkTreeRowReference;
  55. top_row : PGtkTreeRowReference;
  56. top_row_dy : gint;
  57. dy : gint;
  58. drag_column_x : gint;
  59. expander_column : PGtkTreeViewColumn;
  60. edited_column : PGtkTreeViewColumn;
  61. presize_handler_timer : guint;
  62. validate_rows_timer : guint;
  63. scroll_sync_timer : guint;
  64. focus_column : PGtkTreeViewColumn;
  65. anchor : PGtkTreeRowReference;
  66. cursor : PGtkTreeRowReference;
  67. drag_pos : gint;
  68. x_drag : gint;
  69. prelight_node : PGtkRBNode;
  70. prelight_tree : PGtkRBTree;
  71. expanded_collapsed_node : PGtkRBNode;
  72. expanded_collapsed_tree : PGtkRBTree;
  73. expand_collapse_timeout : guint;
  74. selection : PGtkTreeSelection;
  75. n_columns : gint;
  76. columns : PGList;
  77. header_height : gint;
  78. column_drop_func : TGtkTreeViewColumnDropFunc;
  79. column_drop_func_data : gpointer;
  80. column_drop_func_data_destroy : TGtkDestroyNotify;
  81. column_drag_info : PGList;
  82. cur_reorder : PGtkTreeViewColumnReorder;
  83. destroy_count_func : TGtkTreeDestroyCountFunc;
  84. destroy_count_data : gpointer;
  85. destroy_count_destroy : TGtkDestroyNotify;
  86. scroll_timeout : guint;
  87. drag_dest_row : PGtkTreeRowReference;
  88. drag_dest_pos : TGtkTreeViewDropPosition;
  89. open_dest_timeout : guint;
  90. pressed_button : gint;
  91. press_start_x : gint;
  92. press_start_y : gint;
  93. scroll_to_path : PGtkTreeRowReference;
  94. scroll_to_column : PGtkTreeViewColumn;
  95. scroll_to_row_align : gfloat;
  96. scroll_to_col_align : gfloat;
  97. flag0 : word;
  98. search_column : gint;
  99. search_dialog_position_func : TGtkTreeViewSearchDialogPositionFunc;
  100. search_equal_func : TGtkTreeViewSearchEqualFunc;
  101. search_user_data : gpointer;
  102. search_destroy : TGtkDestroyNotify;
  103. end;
  104. {$ENDIF read_interface_types}
  105. //------------------------------------------------------------------------------
  106. {$IFDEF read_interface_rest}
  107. const
  108. TREE_VIEW_DRAG_WIDTH = 6;
  109. GTK_TREE_VIEW_IS_LIST = 1 shl 0;
  110. GTK_TREE_VIEW_SHOW_EXPANDERS = 1 shl 1;
  111. GTK_TREE_VIEW_IN_COLUMN_RESIZE = 1 shl 2;
  112. GTK_TREE_VIEW_ARROW_PRELIT = 1 shl 3;
  113. GTK_TREE_VIEW_HEADERS_VISIBLE = 1 shl 4;
  114. GTK_TREE_VIEW_DRAW_KEYFOCUS = 1 shl 5;
  115. GTK_TREE_VIEW_MODEL_SETUP = 1 shl 6;
  116. GTK_TREE_VIEW_IN_COLUMN_DRAG = 1 shl 7;
  117. DRAG_COLUMN_WINDOW_STATE_UNSET = 0;
  118. DRAG_COLUMN_WINDOW_STATE_ORIGINAL = 1;
  119. DRAG_COLUMN_WINDOW_STATE_ARROW = 2;
  120. DRAG_COLUMN_WINDOW_STATE_ARROW_LEFT = 3;
  121. DRAG_COLUMN_WINDOW_STATE_ARROW_RIGHT = 4;
  122. procedure GTK_TREE_VIEW_SET_FLAG(tree_view: PGtkTreeView; flag : guint);
  123. procedure GTK_TREE_VIEW_UNSET_FLAG(tree_view: PGtkTreeView; flag : guint);
  124. function GTK_TREE_VIEW_FLAG_SET(tree_view: PGtkTreeView; flag : guint) : boolean;
  125. function TREE_VIEW_HEADER_HEIGHT(tree_view : PGtkTreeView) : longint;
  126. function TREE_VIEW_COLUMN_REQUESTED_WIDTH(column : PGtkTreeViewColumn) : longint;
  127. function TREE_VIEW_DRAW_EXPANDERS(tree_view : PGtkTreeView) : boolean;
  128. { This lovely little value is used to determine how far away from the title bar
  129. you can move the mouse and still have a column drag work.
  130. }
  131. function TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER(tree_view : PGtkTreeView) : longint;
  132. const
  133. bm_TGtkTreeViewPrivate_scroll_to_use_align = $1;
  134. bp_TGtkTreeViewPrivate_scroll_to_use_align = 0;
  135. bm_TGtkTreeViewPrivate_fixed_height_check = $2;
  136. bp_TGtkTreeViewPrivate_fixed_height_check = 1;
  137. bm_TGtkTreeViewPrivate_reorderable = $4;
  138. bp_TGtkTreeViewPrivate_reorderable = 2;
  139. bm_TGtkTreeViewPrivate_header_has_focus = $8;
  140. bp_TGtkTreeViewPrivate_header_has_focus = 3;
  141. bm_TGtkTreeViewPrivate_drag_column_window_state = $70;
  142. bp_TGtkTreeViewPrivate_drag_column_window_state = 4;
  143. bm_TGtkTreeViewPrivate_has_rules = $80;
  144. bp_TGtkTreeViewPrivate_has_rules = 7;
  145. bm_TGtkTreeViewPrivate_mark_rows_col_dirty = $100;
  146. bp_TGtkTreeViewPrivate_mark_rows_col_dirty = 8;
  147. bm_TGtkTreeViewPrivate_enable_search = $200;
  148. bp_TGtkTreeViewPrivate_enable_search = 9;
  149. bm_TGtkTreeViewPrivate_disable_popdown = $400;
  150. bp_TGtkTreeViewPrivate_disable_popdown = 10;
  151. function scroll_to_use_align(var a : TGtkTreeViewPrivate) : guint;
  152. procedure set_scroll_to_use_align(var a : TGtkTreeViewPrivate; __scroll_to_use_align : guint);
  153. function fixed_height_check(var a : TGtkTreeViewPrivate) : guint;
  154. procedure set_fixed_height_check(var a : TGtkTreeViewPrivate; __fixed_height_check : guint);
  155. function reorderable(var a : TGtkTreeViewPrivate) : guint; overload;
  156. procedure set_reorderable(var a : TGtkTreeViewPrivate; __reorderable : guint); overload;
  157. function header_has_focus(var a : TGtkTreeViewPrivate) : guint;
  158. procedure set_header_has_focus(var a : TGtkTreeViewPrivate; __header_has_focus : guint);
  159. function drag_column_window_state(var a : TGtkTreeViewPrivate) : guint;
  160. procedure set_drag_column_window_state(var a : TGtkTreeViewPrivate; __drag_column_window_state : guint);
  161. function has_rules(var a : TGtkTreeViewPrivate) : guint;
  162. procedure set_has_rules(var a : TGtkTreeViewPrivate; __has_rules : guint);
  163. function mark_rows_col_dirty(var a : TGtkTreeViewPrivate) : guint;
  164. procedure set_mark_rows_col_dirty(var a : TGtkTreeViewPrivate; __mark_rows_col_dirty : guint);
  165. function enable_search(var a : TGtkTreeViewPrivate) : guint;
  166. procedure set_enable_search(var a : TGtkTreeViewPrivate; __enable_search : guint);
  167. function disable_popdown(var a : TGtkTreeViewPrivate) : guint;
  168. procedure set_disable_popdown(var a : TGtkTreeViewPrivate; __disable_popdown : guint);
  169. { functions that shouldn't be exported }
  170. procedure _gtk_tree_selection_internal_select_node(selection:PGtkTreeSelection; node:PGtkRBNode; tree:PGtkRBTree; path:PGtkTreePath; state:TGdkModifierType;
  171. override_browse_mode:gboolean); cdecl; external gtklib;
  172. function _gtk_tree_view_find_node(tree_view:PGtkTreeView; path:PGtkTreePath; var tree:PGtkRBTree; var node:PGtkRBNode):gboolean; cdecl; external gtklib;
  173. function _gtk_tree_view_find_path(tree_view:PGtkTreeView; tree:PGtkRBTree; node:PGtkRBNode):PGtkTreePath; cdecl; external gtklib;
  174. procedure _gtk_tree_view_child_move_resize(tree_view:PGtkTreeView; widget:PGtkWidget; x:gint; y:gint; width:gint;
  175. height:gint); cdecl; external gtklib;
  176. procedure _gtk_tree_view_queue_draw_node(tree_view:PGtkTreeView; tree:PGtkRBTree; node:PGtkRBNode; clip_rect:PGdkRectangle); cdecl; external gtklib;
  177. procedure _gtk_tree_view_column_realize_button(column:PGtkTreeViewColumn); cdecl; external gtklib;
  178. procedure _gtk_tree_view_column_unrealize_button(column:PGtkTreeViewColumn); cdecl; external gtklib;
  179. procedure _gtk_tree_view_column_set_tree_view(column:PGtkTreeViewColumn; tree_view:PGtkTreeView); cdecl; external gtklib;
  180. procedure _gtk_tree_view_column_unset_tree_view(column:PGtkTreeViewColumn); cdecl; external gtklib;
  181. procedure _gtk_tree_view_column_set_width(column:PGtkTreeViewColumn; width:gint); cdecl; external gtklib;
  182. procedure _gtk_tree_view_column_start_drag(tree_view:PGtkTreeView; column:PGtkTreeViewColumn); cdecl; external gtklib;
  183. function _gtk_tree_view_column_cell_event(tree_column:PGtkTreeViewColumn; var editable_widget:PGtkCellEditable; event:PGdkEvent; path_string:Pgchar; background_area:PGdkRectangle;
  184. cell_area:PGdkRectangle; flags:guint):gboolean; cdecl; external gtklib;
  185. procedure _gtk_tree_view_column_start_editing(tree_column:PGtkTreeViewColumn; editable_widget:PGtkCellEditable); cdecl; external gtklib;
  186. procedure _gtk_tree_view_column_stop_editing(tree_column:PGtkTreeViewColumn); cdecl; external gtklib;
  187. procedure _gtk_tree_view_install_mark_rows_col_dirty(tree_view:PGtkTreeView); cdecl; external gtklib;
  188. procedure _gtk_tree_view_column_autosize(tree_view:PGtkTreeView; column:PGtkTreeViewColumn); cdecl; external gtklib;
  189. function _gtk_tree_view_column_has_editable_cell(column:PGtkTreeViewColumn):gboolean; cdecl; external gtklib;
  190. function _gtk_tree_view_column_get_edited_cell(column:PGtkTreeViewColumn):PGtkCellRenderer; cdecl; external gtklib;
  191. function _gtk_tree_view_column_count_special_cells(column:PGtkTreeViewColumn):gint; cdecl; external gtklib;
  192. function _gtk_tree_view_column_get_cell_at_pos(column:PGtkTreeViewColumn; x:gint):PGtkCellRenderer; cdecl; external gtklib;
  193. function _gtk_tree_selection_new:PGtkTreeSelection; cdecl; external gtklib;
  194. function _gtk_tree_selection_new_with_tree_view(tree_view:PGtkTreeView):PGtkTreeSelection; cdecl; external gtklib;
  195. procedure _gtk_tree_selection_set_tree_view(selection:PGtkTreeSelection; tree_view:PGtkTreeView); cdecl; external gtklib;
  196. procedure _gtk_tree_view_column_cell_render(tree_column:PGtkTreeViewColumn; window:PGdkWindow; background_area:PGdkRectangle; cell_area:PGdkRectangle; expose_area:PGdkRectangle;
  197. flags:guint); cdecl; external gtklib;
  198. function _gtk_tree_view_column_cell_focus(tree_column:PGtkTreeViewColumn; direction:gint; left:gboolean; right:gboolean):gboolean; cdecl; external gtklib;
  199. procedure _gtk_tree_view_column_cell_draw_focus(tree_column:PGtkTreeViewColumn; window:PGdkWindow; background_area:PGdkRectangle; cell_area:PGdkRectangle; expose_area:PGdkRectangle;
  200. flags:guint); cdecl; external gtklib;
  201. procedure _gtk_tree_view_column_cell_set_dirty(tree_column:PGtkTreeViewColumn; install_handler:gboolean); cdecl; external gtklib;
  202. procedure _gtk_tree_view_column_get_neighbor_sizes(column:PGtkTreeViewColumn; cell:PGtkCellRenderer; left:Pgint; right:Pgint); cdecl; external gtklib;
  203. {$ENDIF read_interface_rest}
  204. //------------------------------------------------------------------------------
  205. {$IFDEF read_implementation}
  206. function GTK_TREE_VIEW_FLAG_SET(tree_view: PGtkTreeView; flag : guint) : boolean;
  207. begin
  208. GTK_TREE_VIEW_FLAG_SET:=((tree_view^.priv^.flags) and flag) = flag;
  209. end;
  210. function TREE_VIEW_HEADER_HEIGHT(tree_view : PGtkTreeView) : longint;
  211. var
  212. if_local1 : longint;
  213. begin
  214. if GTK_TREE_VIEW_FLAG_SET(tree_view,GTK_TREE_VIEW_HEADERS_VISIBLE) then
  215. if_local1:=tree_view^.priv^.header_height
  216. else
  217. if_local1:=0;
  218. TREE_VIEW_HEADER_HEIGHT:=if_local1;
  219. end;
  220. function TREE_VIEW_COLUMN_REQUESTED_WIDTH(column : PGtkTreeViewColumn) : longint;
  221. var
  222. MinWidth, MaxWidth: integer;
  223. begin
  224. if column^.min_width<>-1 then
  225. MinWidth:=column^.min_width
  226. else
  227. MinWidth:=column^.requested_width;
  228. if column^.max_width<>-1 then
  229. MaxWidth:=column^.max_width
  230. else
  231. MaxWidth:=column^.requested_width;
  232. TREE_VIEW_COLUMN_REQUESTED_WIDTH:=CLAMP(column^.requested_width,MinWidth,MaxWidth);
  233. end;
  234. function TREE_VIEW_DRAW_EXPANDERS(tree_view : PGtkTreeView) : boolean;
  235. begin
  236. TREE_VIEW_DRAW_EXPANDERS:=(not (GTK_TREE_VIEW_FLAG_SET(tree_view,GTK_TREE_VIEW_IS_LIST)))
  237. and (GTK_TREE_VIEW_FLAG_SET(tree_view,GTK_TREE_VIEW_SHOW_EXPANDERS));
  238. end;
  239. function TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER(tree_view : PGtkTreeView) : longint;
  240. begin
  241. TREE_VIEW_COLUMN_DRAG_DEAD_MULTIPLIER:=10 * (TREE_VIEW_HEADER_HEIGHT(tree_view));
  242. end;
  243. function scroll_to_use_align(var a : TGtkTreeViewPrivate) : guint;
  244. begin
  245. scroll_to_use_align:=(a.flag0 and bm_TGtkTreeViewPrivate_scroll_to_use_align) shr bp_TGtkTreeViewPrivate_scroll_to_use_align;
  246. end;
  247. procedure set_scroll_to_use_align(var a : TGtkTreeViewPrivate; __scroll_to_use_align : guint);
  248. begin
  249. a.flag0:=a.flag0 or ((__scroll_to_use_align shl bp_TGtkTreeViewPrivate_scroll_to_use_align) and bm_TGtkTreeViewPrivate_scroll_to_use_align);
  250. end;
  251. function fixed_height_check(var a : TGtkTreeViewPrivate) : guint;
  252. begin
  253. fixed_height_check:=(a.flag0 and bm_TGtkTreeViewPrivate_fixed_height_check) shr bp_TGtkTreeViewPrivate_fixed_height_check;
  254. end;
  255. procedure set_fixed_height_check(var a : TGtkTreeViewPrivate; __fixed_height_check : guint);
  256. begin
  257. a.flag0:=a.flag0 or ((__fixed_height_check shl bp_TGtkTreeViewPrivate_fixed_height_check) and bm_TGtkTreeViewPrivate_fixed_height_check);
  258. end;
  259. function reorderable(var a : TGtkTreeViewPrivate) : guint;
  260. begin
  261. reorderable:=(a.flag0 and bm_TGtkTreeViewPrivate_reorderable) shr bp_TGtkTreeViewPrivate_reorderable;
  262. end;
  263. procedure set_reorderable(var a : TGtkTreeViewPrivate; __reorderable : guint);
  264. begin
  265. a.flag0:=a.flag0 or ((__reorderable shl bp_TGtkTreeViewPrivate_reorderable) and bm_TGtkTreeViewPrivate_reorderable);
  266. end;
  267. function header_has_focus(var a : TGtkTreeViewPrivate) : guint;
  268. begin
  269. header_has_focus:=(a.flag0 and bm_TGtkTreeViewPrivate_header_has_focus) shr bp_TGtkTreeViewPrivate_header_has_focus;
  270. end;
  271. procedure set_header_has_focus(var a : TGtkTreeViewPrivate; __header_has_focus : guint);
  272. begin
  273. a.flag0:=a.flag0 or ((__header_has_focus shl bp_TGtkTreeViewPrivate_header_has_focus) and bm_TGtkTreeViewPrivate_header_has_focus);
  274. end;
  275. function drag_column_window_state(var a : TGtkTreeViewPrivate) : guint;
  276. begin
  277. drag_column_window_state:=(a.flag0 and bm_TGtkTreeViewPrivate_drag_column_window_state) shr bp_TGtkTreeViewPrivate_drag_column_window_state;
  278. end;
  279. procedure set_drag_column_window_state(var a : TGtkTreeViewPrivate; __drag_column_window_state : guint);
  280. begin
  281. a.flag0:=a.flag0 or ((__drag_column_window_state shl bp_TGtkTreeViewPrivate_drag_column_window_state) and bm_TGtkTreeViewPrivate_drag_column_window_state);
  282. end;
  283. function has_rules(var a : TGtkTreeViewPrivate) : guint;
  284. begin
  285. has_rules:=(a.flag0 and bm_TGtkTreeViewPrivate_has_rules) shr bp_TGtkTreeViewPrivate_has_rules;
  286. end;
  287. procedure set_has_rules(var a : TGtkTreeViewPrivate; __has_rules : guint);
  288. begin
  289. a.flag0:=a.flag0 or ((__has_rules shl bp_TGtkTreeViewPrivate_has_rules) and bm_TGtkTreeViewPrivate_has_rules);
  290. end;
  291. function mark_rows_col_dirty(var a : TGtkTreeViewPrivate) : guint;
  292. begin
  293. mark_rows_col_dirty:=(a.flag0 and bm_TGtkTreeViewPrivate_mark_rows_col_dirty) shr bp_TGtkTreeViewPrivate_mark_rows_col_dirty;
  294. end;
  295. procedure set_mark_rows_col_dirty(var a : TGtkTreeViewPrivate; __mark_rows_col_dirty : guint);
  296. begin
  297. a.flag0:=a.flag0 or ((__mark_rows_col_dirty shl bp_TGtkTreeViewPrivate_mark_rows_col_dirty) and bm_TGtkTreeViewPrivate_mark_rows_col_dirty);
  298. end;
  299. function enable_search(var a : TGtkTreeViewPrivate) : guint;
  300. begin
  301. enable_search:=(a.flag0 and bm_TGtkTreeViewPrivate_enable_search) shr bp_TGtkTreeViewPrivate_enable_search;
  302. end;
  303. procedure set_enable_search(var a : TGtkTreeViewPrivate; __enable_search : guint);
  304. begin
  305. a.flag0:=a.flag0 or ((__enable_search shl bp_TGtkTreeViewPrivate_enable_search) and bm_TGtkTreeViewPrivate_enable_search);
  306. end;
  307. function disable_popdown(var a : TGtkTreeViewPrivate) : guint;
  308. begin
  309. disable_popdown:=(a.flag0 and bm_TGtkTreeViewPrivate_disable_popdown) shr bp_TGtkTreeViewPrivate_disable_popdown;
  310. end;
  311. procedure set_disable_popdown(var a : TGtkTreeViewPrivate; __disable_popdown : guint);
  312. begin
  313. a.flag0:=a.flag0 or ((__disable_popdown shl bp_TGtkTreeViewPrivate_disable_popdown) and bm_TGtkTreeViewPrivate_disable_popdown);
  314. end;
  315. procedure GTK_TREE_VIEW_SET_FLAG(tree_view: PGtkTreeView; flag : guint);
  316. begin
  317. tree_view^.priv^.flags:=tree_view^.priv^.flags or flag;
  318. end;
  319. procedure GTK_TREE_VIEW_UNSET_FLAG(tree_view: PGtkTreeView; flag : guint);
  320. begin
  321. tree_view^.priv^.flags:=tree_view^.priv^.flags and not flag;
  322. end;
  323. {$ENDIF read_implementation}
  324. // included by gtk2.pas