Table.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package imgui
  2. // #cgo CXXFLAGS: -std=c++11
  3. // #include "Table.h"
  4. import "C"
  5. type TableFlags int
  6. const (
  7. // Features
  8. TableFlags_None TableFlags = 0
  9. TableFlags_Resizable TableFlags = 1 << 0 // Enable resizing columns.
  10. TableFlags_Reorderable TableFlags = 1 << 1 // Enable reordering columns in header row (need calling TableSetupColumn() + TableHeadersRow() to display headers)
  11. TableFlags_Hideable TableFlags = 1 << 2 // Enable hiding/disabling columns in context menu.
  12. TableFlags_Sortable TableFlags = 1 << 3 // Enable sorting. Call TableGetSortSpecs() to obtain sort specs. Also see TableFlags_SortMulti and TableFlags_SortTristate.
  13. TableFlags_NoSavedSettings TableFlags = 1 << 4 // Disable persisting columns order, width and sort settings in the .ini file.
  14. TableFlags_ContextMenuInBody TableFlags = 1 << 5 // Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow().
  15. // Decorations
  16. TableFlags_RowBg TableFlags = 1 << 6 // Set each RowBg color with Col_TableRowBg or Col_TableRowBgAlt (equivalent of calling TableSetBgColor with TableBgFlags_RowBg0 on each row manually)
  17. TableFlags_BordersInnerH TableFlags = 1 << 7 // Draw horizontal borders between rows.
  18. TableFlags_BordersOuterH TableFlags = 1 << 8 // Draw horizontal borders at the top and bottom.
  19. TableFlags_BordersInnerV TableFlags = 1 << 9 // Draw vertical borders between columns.
  20. TableFlags_BordersOuterV TableFlags = 1 << 10 // Draw vertical borders on the left and right sides.
  21. TableFlags_BordersH TableFlags = TableFlags_BordersInnerH | TableFlags_BordersOuterH // Draw horizontal borders.
  22. TableFlags_BordersV TableFlags = TableFlags_BordersInnerV | TableFlags_BordersOuterV // Draw vertical borders.
  23. TableFlags_BordersInner TableFlags = TableFlags_BordersInnerV | TableFlags_BordersInnerH // Draw inner borders.
  24. TableFlags_BordersOuter TableFlags = TableFlags_BordersOuterV | TableFlags_BordersOuterH // Draw outer borders.
  25. TableFlags_Borders TableFlags = TableFlags_BordersInner | TableFlags_BordersOuter // Draw all borders.
  26. TableFlags_NoBordersInBody TableFlags = 1 << 11 // [ALPHA] Disable vertical borders in columns Body (borders will always appears in Headers). -> May move to style
  27. TableFlags_NoBordersInBodyUntilResizeTableFlags = 1 << 12 // [ALPHA] Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers). -> May move to style
  28. // Sizing Policy (read above for defaults)TableFlags
  29. TableFlags_SizingFixedFit TableFlags = 1 << 13 // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching contents width.
  30. TableFlags_SizingFixedSame TableFlags = 2 << 13 // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching the maximum contents width of all columns. Implicitly enable TableFlags_NoKeepColumnsVisible.
  31. TableFlags_SizingStretchProp TableFlags = 3 << 13 // Columns default to _WidthStretch with default weights proportional to each columns contents widths.
  32. TableFlags_SizingStretchSame TableFlags = 4 << 13 // Columns default to _WidthStretch with default weights all equal, unless overriden by TableSetupColumn().
  33. // Sizing Extra Options
  34. TableFlags_NoHostExtendX TableFlags = 1 << 16 // Make outer width auto-fit to columns, overriding outer_size.x value. Only available when ScrollX/ScrollY are disabled and Stretch columns are not used.
  35. TableFlags_NoHostExtendY TableFlags = 1 << 17 // Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible.
  36. TableFlags_NoKeepColumnsVisible TableFlags = 1 << 18 // Disable keeping column always minimally visible when ScrollX is off and table gets too small. Not recommended if columns are resizable.
  37. TableFlags_PreciseWidths TableFlags = 1 << 19 // Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth.
  38. // Clipping
  39. TableFlags_NoClip TableFlags = 1 << 20 // Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze().
  40. // Padding
  41. TableFlags_PadOuterX TableFlags = 1 << 21 // Default if BordersOuterV is on. Enable outer-most padding. Generally desirable if you have headers.
  42. TableFlags_NoPadOuterX TableFlags = 1 << 22 // Default if BordersOuterV is off. Disable outer-most padding.
  43. TableFlags_NoPadInnerX TableFlags = 1 << 23 // Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off).
  44. // Scrolling
  45. TableFlags_ScrollX TableFlags = 1 << 24 // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this create a child window, ScrollY is currently generally recommended when using ScrollX.
  46. TableFlags_ScrollY TableFlags = 1 << 25 // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size.
  47. // Sorting
  48. TableFlags_SortMulti TableFlags = 1 << 26 // Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).
  49. TableFlags_SortTristate TableFlags = 1 << 27 // Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).
  50. // [Internal] Combinations and masks
  51. TableFlags_SizingMask_ = TableFlags_SizingFixedFit | TableFlags_SizingFixedSame | TableFlags_SizingStretchProp | TableFlags_SizingStretchSame
  52. )
  53. type TableColumnFlags int
  54. const (
  55. // Input configuration flags
  56. TableColumnFlags_None = 0
  57. TableColumnFlags_Disabled = 1 << 0 // Overriding/master disable flag: hide column, won't show in context menu (unlike calling TableSetColumnEnabled() which manipulates the user accessible state)
  58. TableColumnFlags_DefaultHide = 1 << 1 // Default as a hidden/disabled column.
  59. TableColumnFlags_DefaultSort = 1 << 2 // Default as a sorting column.
  60. TableColumnFlags_WidthStretch = 1 << 3 // Column will stretch. Preferable with horizontal scrolling disabled (default if table sizing policy is _SizingStretchSame or _SizingStretchProp).
  61. TableColumnFlags_WidthFixed = 1 << 4 // Column will not stretch. Preferable with horizontal scrolling enabled (default if table sizing policy is _SizingFixedFit and table is resizable).
  62. TableColumnFlags_NoResize = 1 << 5 // Disable manual resizing.
  63. TableColumnFlags_NoReorder = 1 << 6 // Disable manual reordering this column, this will also prevent other columns from crossing over this column.
  64. TableColumnFlags_NoHide = 1 << 7 // Disable ability to hide/disable this column.
  65. TableColumnFlags_NoClip = 1 << 8 // Disable clipping for this column (all NoClip columns will render in a same draw command).
  66. TableColumnFlags_NoSort = 1 << 9 // Disable ability to sort on this field (even if TableFlags_Sortable is set on the table).
  67. TableColumnFlags_NoSortAscending = 1 << 10 // Disable ability to sort in the ascending direction.
  68. TableColumnFlags_NoSortDescending = 1 << 11 // Disable ability to sort in the descending direction.
  69. TableColumnFlags_NoHeaderLabel = 1 << 12 // TableHeadersRow() will not submit label for this column. Convenient for some small columns. Name will still appear in context menu.
  70. TableColumnFlags_NoHeaderWidth = 1 << 13 // Disable header text width contribution to automatic column width.
  71. TableColumnFlags_PreferSortAscending = 1 << 14 // Make the initial sort direction Ascending when first sorting on this column (default).
  72. TableColumnFlags_PreferSortDescending = 1 << 15 // Make the initial sort direction Descending when first sorting on this column.
  73. TableColumnFlags_IndentEnable = 1 << 16 // Use current Indent value when entering cell (default for column 0).
  74. TableColumnFlags_IndentDisable = 1 << 17 // Ignore current Indent value when entering cell (default for columns > 0). Indentation changes _within_ the cell will still be honored.
  75. // Output status flags read-only via TableGetColumnFlags()
  76. TableColumnFlags_IsEnabled = 1 << 24 // Status: is enabled == not hidden by user/api (referred to as "Hide" in _DefaultHide and _NoHide) flags.
  77. TableColumnFlags_IsVisible = 1 << 25 // Status: is visible == is enabled AND not clipped by scrolling.
  78. TableColumnFlags_IsSorted = 1 << 26 // Status: is currently part of the sort specs
  79. TableColumnFlags_IsHovered = 1 << 27 // Status: is hovered by mouse
  80. // [Internal] Combinations and masks
  81. TableColumnFlags_WidthMask_ = TableColumnFlags_WidthStretch | TableColumnFlags_WidthFixed
  82. TableColumnFlags_IndentMask_ = TableColumnFlags_IndentEnable | TableColumnFlags_IndentDisable
  83. TableColumnFlags_StatusMask_ = TableColumnFlags_IsEnabled | TableColumnFlags_IsVisible | TableColumnFlags_IsSorted | TableColumnFlags_IsHovered
  84. TableColumnFlags_NoDirectResize_ = 1 << 30 // [Internal] Disable user resizing this column directly (it may however we resized indirectly from its left edge)
  85. )
  86. type TableRowFlags int
  87. const (
  88. TableRowFlags_None TableRowFlags = 0
  89. TableRowFlags_Headers TableRowFlags = 1 << 0 // Identify header row (set default background color + width of its contents accounted different for auto column width)
  90. )
  91. type TableBgTarget int
  92. const (
  93. TableBgTarget_None TableBgTarget = 0
  94. TableBgTarget_RowBg0 TableBgTarget = 1 // Set row background color 0 (generally used for background, automatically set when TableFlags_RowBg is used)
  95. TableBgTarget_RowBg1 TableBgTarget = 2 // Set row background color 1 (generally used for selection marking)
  96. TableBgTarget_CellBg TableBgTarget = 3 // Set cell background color (top-most color)
  97. )
  98. func BeginTable(id string, column int, flags TableFlags, outerSize Vec2, innerWidth float64) bool {
  99. idArg, idDeleter := wrapString(id)
  100. defer idDeleter()
  101. outerSizeArg, _ := outerSize.wrapped()
  102. return C.iggBeginTable(idArg, C.int(column), C.int(flags), outerSizeArg, C.float(innerWidth)) != 0
  103. }
  104. func EndTable() {
  105. C.iggEndTable()
  106. }
  107. func TableNextRow(rowFlags TableRowFlags, minRowHeight float64) {
  108. C.iggTableNextRow(C.int(rowFlags), C.float(minRowHeight))
  109. }
  110. func TableNextColumn() {
  111. C.iggTableNextColumn()
  112. }
  113. func TableSetColumnIndex(columnN int) bool {
  114. return C.iggTableSetColumnIndex(C.int(columnN)) != 0
  115. }
  116. func TableSetupColumn(label string, flags TableColumnFlags, initWidthOrWeight float32, userId uint32) {
  117. labelArg, labelDeleter := wrapString(label)
  118. defer labelDeleter()
  119. C.iggTableSetupColumn(labelArg, C.int(flags), C.float(initWidthOrWeight), C.uint(userId))
  120. }
  121. func TableSetupScrollFreeze(cols, rows int) {
  122. C.iggTableSetupScrollFreeze(C.int(cols), C.int(rows))
  123. }
  124. func TableHeadersRow() {
  125. C.iggTableHeadersRow()
  126. }
  127. func TableHeader(label string) {
  128. labelArg, labelDeleter := wrapString(label)
  129. defer labelDeleter()
  130. C.iggTableHeader(labelArg)
  131. }
  132. func TableGetColumnCount() int {
  133. return int(C.iggTableGetColumnCount())
  134. }
  135. func TableGetColumnIndex() int {
  136. return int(C.iggTableGetColumnIndex())
  137. }
  138. func TableGetRowIndex() int {
  139. return int(C.iggTableGetRowIndex())
  140. }
  141. func TableGetColumnName(columnN int) string {
  142. return C.GoString(C.iggTableGetColumnName(C.int(columnN)))
  143. }
  144. func TableSetBgColor(target TableBgTarget, color uint32, columnN int) {
  145. C.iggTableSetBgColor(C.int(target), C.uint(color), C.int(columnN))
  146. }
  147. func TableGetColumnFlags(columnN int) TableColumnFlags {
  148. return TableColumnFlags(C.iggTableGetColumnFlags(C.int(columnN)))
  149. }