Class ColumnView

All Implemented Interfaces:
Accessible, Buildable, ConstraintTarget, Scrollable, Proxy

@Generated("org.javagi.JavaGI") public class ColumnView extends Widget implements Accessible, Buildable, ConstraintTarget, Scrollable

Presents a large dynamic list of items using multiple columns with headers.

GtkColumnView uses the factories of its columns to generate a cell widget for each column, for each visible item and displays them together as the row for this item.

The Gtk.ColumnView:show-row-separators and Gtk.ColumnView:show-column-separators properties offer a simple way to display separators between the rows or columns.

GtkColumnView allows the user to select items according to the selection characteristics of the model. For models that allow multiple selected items, it is possible to turn on rubberband selection, using Gtk.ColumnView:enable-rubberband.

The column view supports sorting that can be customized by the user by clicking on column headers. To set this up, the GtkSorter returned by getSorter() must be attached to a sort model for the data that the view is showing, and the columns must have sorters attached to them by calling ColumnViewColumn.setSorter(Sorter). The initial sort order can be set with sortByColumn(ColumnViewColumn, SortType).

The column view also supports interactive resizing and reordering of columns, via Drag-and-Drop of the column headers. This can be enabled or disabled with the Gtk.ColumnView:reorderable and Gtk.ColumnViewColumn:resizable properties.

To learn more about the list widget framework, see the overview.

CSS nodes

columnview[.column-separators][.rich-list][.navigation-sidebar][.data-table]
├── header
│   ├── <column header>
┊   ┊
│   ╰── <column header>
│
├── listview
│
┊
╰── [rubberband]

GtkColumnView uses a single CSS node named columnview. It may carry the .column-separators style class, when Gtk.ColumnView:show-column-separators property is set. Header widgets appear below a node with name header. The rows are contained in a GtkListView widget, so there is a listview node with the same structure as for a standalone GtkListView widget. If Gtk.ColumnView:show-row-separators is set, it will be passed on to the list view, causing its CSS node to carry the .separators style class. For rubberband selection, a node with name rubberband is used.

The main columnview node may also carry style classes to select the style of list presentation: .rich-list, .navigation-sidebar or .data-table.

Accessibility

GtkColumnView uses the Gtk.AccessibleRole.tree_grid role, header title widgets are using the Gtk.AccessibleRole.column_header role. The row widgets are using the Gtk.AccessibleRole.row role, and individual cells are using the Gtk.AccessibleRole.grid_cell role

  • Constructor Details

    • ColumnView

      public ColumnView(MemorySegment address)
      Create a ColumnView instance for the provided memory address.
      Parameters:
      address - the memory address of the native object
    • ColumnView

      public ColumnView(@Nullable SelectionModel model)

      Creates a new GtkColumnView.

      You most likely want to call appendColumn(ColumnViewColumn) to add columns next.

      Parameters:
      model - the list model to use
    • ColumnView

      public ColumnView()
      Create a new ColumnView.
  • Method Details

    • getType

      public static @Nullable Type getType()
      Get the GType of the ColumnView class.
      Returns:
      the GType
    • getMemoryLayout

      public static MemoryLayout getMemoryLayout()
      The memory layout of the native struct.
      Returns:
      the memory layout
    • asParent

      protected ColumnView asParent()
      Return this instance as if it were its parent type. Comparable to the Java super keyword, but ensures the parent typeclass is also used in native code.
      Overrides:
      asParent in class Widget
      Returns:
      the instance as if it were its parent type
    • appendColumn

      public void appendColumn(ColumnViewColumn column)
      Appends the column to the end of the columns in self.
      Parameters:
      column - a column that hasn't been added to a GtkColumnView yet
    • getColumns

      public ListModel getColumns()

      Gets the list of columns in this column view.

      This list is constant over the lifetime of this ColumnView and can be used to monitor changes to the columns of this ColumnView by connecting to the Gio.ListModel::items-changed signal.

      Returns:
      The list managing the columns
    • getEnableRubberband

      public boolean getEnableRubberband()
      Returns whether rows can be selected by dragging with the mouse.
      Returns:
      true if rubberband selection is enabled
    • getHeaderFactory

      public @Nullable ListItemFactory getHeaderFactory()
      Gets the factory that's currently used to populate section headers.
      Returns:
      The factory in use
      Since:
      4.12
    • getModel

      public @Nullable SelectionModel getModel()
      Gets the model that's currently used to read the items displayed.
      Returns:
      The model in use
    • getReorderable

      public boolean getReorderable()
      Returns whether columns are reorderable.
      Returns:
      true if columns are reorderable
    • getRowFactory

      public @Nullable ListItemFactory getRowFactory()
      Gets the factory set via setRowFactory(ListItemFactory).
      Returns:
      The factory
      Since:
      4.12
    • getShowColumnSeparators

      public boolean getShowColumnSeparators()
      Returns whether the list should show separators between columns.
      Returns:
      true if the list shows column separators
    • getShowRowSeparators

      public boolean getShowRowSeparators()
      Returns whether the list should show separators between rows.
      Returns:
      true if the list shows separators
    • getSingleClickActivate

      public boolean getSingleClickActivate()
      Returns whether rows will be activated on single click and selected on hover.
      Returns:
      true if rows are activated on single click
    • getSorter

      public @Nullable Sorter getSorter()

      Returns a special sorter that reflects the users sorting choices in the column view.

      To allow users to customizable sorting by clicking on column headers, this sorter needs to be set on the sort model underneath the model that is displayed by the view.

      See ColumnViewColumn.setSorter(Sorter) for setting up per-column sorting.

      Here is an example:

      gtk_column_view_column_set_sorter (column, sorter);
      gtk_column_view_append_column (view, column);
      sorter = g_object_ref (gtk_column_view_get_sorter (view)));
      model = gtk_sort_list_model_new (store, sorter);
      selection = gtk_no_selection_new (model);
      gtk_column_view_set_model (view, selection);
      
      Returns:
      the GtkSorter of this ColumnView
    • getTabBehavior

      public ListTabBehavior getTabBehavior()
      Gets the behavior set for the Tab key.
      Returns:
      The behavior of the Tab key
      Since:
      4.12
    • insertColumn

      public void insertColumn(int position, ColumnViewColumn column)

      Inserts a column at the given position in the columns of self.

      If column is already a column of self, it will be repositioned.

      Parameters:
      position - the position to insert column at
      column - the column to insert
    • removeColumn

      public void removeColumn(ColumnViewColumn column)
      Removes the column from the list of columns of self.
      Parameters:
      column - a column that's part of this ColumnView
    • scrollTo

      public void scrollTo(int pos, @Nullable ColumnViewColumn column, Set<ListScrollFlags> flags, @Nullable ScrollInfo scroll)

      Scroll to the row at the given position - or cell if a column is given - and performs the actions specified in flags.

      This function works no matter if the columnview is shown or focused. If it isn't, then the changes will take effect once that happens.

      Parameters:
      pos - position of the item. Must be less than the number of items in the view.
      column - The column to scroll to or NULL to not scroll columns
      flags - actions to perform
      scroll - details of how to perform the scroll operation or null to scroll into view
      Since:
      4.12
    • scrollTo

      public void scrollTo(int pos, @Nullable ColumnViewColumn column, ListScrollFlags flags, @Nullable ScrollInfo scroll)

      Scroll to the row at the given position - or cell if a column is given - and performs the actions specified in flags.

      This function works no matter if the columnview is shown or focused. If it isn't, then the changes will take effect once that happens.

      Parameters:
      pos - position of the item. Must be less than the number of items in the view.
      column - The column to scroll to or NULL to not scroll columns
      flags - actions to perform
      scroll - details of how to perform the scroll operation or null to scroll into view
      Since:
      4.12
    • setEnableRubberband

      public void setEnableRubberband(boolean enableRubberband)
      Sets whether selections can be changed by dragging with the mouse.
      Parameters:
      enableRubberband - whether to enable rubberband selection
    • setHeaderFactory

      public void setHeaderFactory(@Nullable ListItemFactory factory)

      Sets the factory to use for populating the ListHeader objects used in section headers.

      If this factory is set to NULL, the list will not show section headers.

      Parameters:
      factory - the factory to use
      Since:
      4.12
    • setModel

      public void setModel(@Nullable SelectionModel model)

      Sets the model to use.

      This must be a SelectionModel.

      Parameters:
      model - the model to use
    • setReorderable

      public void setReorderable(boolean reorderable)
      Sets whether columns should be reorderable by dragging.
      Parameters:
      reorderable - whether columns should be reorderable
    • setRowFactory

      public void setRowFactory(@Nullable ListItemFactory factory)

      Sets the factory used for configuring rows.

      The factory must be for configuring ColumnViewRow objects.

      If this factory is not set - which is the default - then the defaults will be used.

      This factory is not used to set the widgets displayed in the individual cells. For that see GtkColumnViewColumn.setFactory and GtkColumnViewCell.

      Parameters:
      factory - The row factory
      Since:
      4.12
    • setShowColumnSeparators

      public void setShowColumnSeparators(boolean showColumnSeparators)
      Sets whether the list should show separators between columns.
      Parameters:
      showColumnSeparators - whether to show column separators
    • setShowRowSeparators

      public void setShowRowSeparators(boolean showRowSeparators)
      Sets whether the list should show separators between rows.
      Parameters:
      showRowSeparators - whether to show row separators
    • setSingleClickActivate

      public void setSingleClickActivate(boolean singleClickActivate)
      Sets whether rows should be activated on single click and selected on hover.
      Parameters:
      singleClickActivate - whether to activate items on single click
    • setTabBehavior

      public void setTabBehavior(ListTabBehavior tabBehavior)

      Sets the Tab key behavior.

      This influences how the Tab and Shift+Tab keys move the focus in the columnview.

      Parameters:
      tabBehavior - The desired tab behavior
      Since:
      4.12
    • sortByColumn

      public void sortByColumn(@Nullable ColumnViewColumn column, SortType direction)

      Sets the sorting of the view.

      This function should be used to set up the initial sorting. At runtime, users can change the sorting of a column view by clicking on the list headers.

      This call only has an effect if the sorter returned by getSorter() is set on a sort model, and ColumnViewColumn.setSorter(Sorter) has been called on column to associate a sorter with the column.

      If column is unset, the view will be unsorted.

      Parameters:
      column - the column to sort by
      direction - the direction to sort in
    • onActivate

      Emitted when a row has been activated by the user, usually via activating the GtkListBase|list.activate-item action.

      This allows for a convenient way to handle activation in a columnview. See ListItem.setActivatable(boolean) for details on how to use this signal.

      Parameters:
      handler - the signal handler
      Returns:
      a signal handler ID to keep track of the signal connection
      See Also:
    • emitActivate

      public void emitActivate(int position)
      Emits the "activate" signal. See onActivate(ColumnView.ActivateCallback).
    • builder

      public static ColumnView.Builder<? extends ColumnView.Builder> builder()
      A ColumnView.Builder object constructs a ColumnView with the specified properties. Use the various set...() methods to set properties, and finish construction with ColumnView.Builder.build().
      Returns:
      the builder object