Source code for traitsui.editors.tabular_editor

# (C) Copyright 2004-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!

""" A traits UI editor for editing tabular data (arrays, list of tuples, lists
    of objects, etc).
"""

import warnings

from pyface.ui_traits import Image
from traits.api import Str, Bool, Property, List, Enum, Instance

from traitsui.basic_editor_factory import BasicEditorFactory
from traitsui.toolkit import toolkit_object


[docs]class TabularEditor(BasicEditorFactory): """Editor factory for tabular editors.""" # -- Trait Definitions ---------------------------------------------------- #: The editor class to be created: klass = Property() #: Should column headers (i.e. titles) be displayed? show_titles = Bool(True) #: Should row headers be displayed (Qt4 only)? show_row_titles = Bool(False) #: The optional extended name of the trait used to indicate that a complete #: table update is needed: update = Str() #: The optional extended name of the trait used to indicate that the table #: just needs to be repainted. refresh = Str() #: Should the table update automatically when the table item's contents #: change? Note that in order for this feature to work correctly, the #: editor trait should be a list of objects derived from HasTraits. Also, #: performance can be affected when very long lists are used, since #: enabling this feature adds and removed Traits listeners to each item in #: the list. auto_update = Bool(False) #: The optional extended name of the trait to synchronize the selection #: values with: selected = Str() #: The optional extended name of the trait to synchronize the selection #: rows with: selected_row = Str() #: Whether or not to allow selection. selectable = Bool(True) #: The optional extended name of the trait to synchronize the activated #: value with: activated = Str() #: The optional extended name of the trait to synchronize the activated #: value's row with: activated_row = Str() #: The optional extended name of the trait to synchronize left click data #: with. The data is a TabularEditorEvent: clicked = Str() #: The optional extended name of the trait to synchronize left double click #: data with. The data is a TabularEditorEvent: dclicked = Str() #: The optional extended name of the trait to synchronize right click data #: with. The data is a TabularEditorEvent: right_clicked = Str() #: The optional extended name of the trait to synchronize right double #: clicked data with. The data is a TabularEditorEvent: right_dclicked = Str() #: The optional extended name of the trait to synchronize column #: clicked data with. The data is a TabularEditorEvent: column_clicked = Str() #: The optional extended name of the trait to synchronize column #: right clicked data with. The data is a TabularEditorEvent: column_right_clicked = Str() #: The optional extended name of the Event trait that should be used to #: trigger a scroll-to command. The data is an integer giving the row. scroll_to_row = Str() #: The optional extended name of the Event trait that should be used to #: trigger a scroll-to command. The data is an integer giving the column. scroll_to_column = Str() #: Deprecated: Controls behavior of scroll to row and scroll to column scroll_to_row_hint = Property(Str, observe="scroll_to_position_hint") #: (replacement of scroll_to_row_hint, but more clearly named) #: Controls behavior of scroll to row and scroll to column scroll_to_position_hint = Enum("visible", "center", "top", "bottom") #: Can the user edit the values? editable = Bool(True) #: Can the user edit the labels (i.e. the first column) editable_labels = Bool(False) #: Are multiple selected items allowed? multi_select = Bool(False) #: Should horizontal lines be drawn between items? horizontal_lines = Bool(True) #: Should vertical lines be drawn between items? vertical_lines = Bool(True) #: Should the columns automatically resize? Don't allow this when the #: amount of data is large. auto_resize = Bool(False) #: Should the rows automatically resize (Qt4 only)? Don't allow #: this when the amount of data is large. auto_resize_rows = Bool(False) #: Whether to stretch the last column to fit the available space. stretch_last_section = Bool(True) #: The adapter from trait values to editor values: adapter = Instance("traitsui.tabular_adapter.TabularAdapter", ()) #: What type of operations are allowed on the list: operations = List( Enum("delete", "insert", "append", "edit", "move"), ["delete", "insert", "append", "edit", "move"], ) #: Are 'drag_move' operations allowed (i.e. True), or should they always be #: treated as 'drag_copy' operations (i.e. False): drag_move = Bool(True) #: The set of images that can be used: images = List(Image) def _get_klass(self): """Returns the toolkit-specific editor class to be instantiated.""" return toolkit_object("tabular_editor:TabularEditor") def _get_scroll_to_row_hint(self): warnings.warn( "Use of scroll_to_row_hint trait is deprecated. " "Use scroll_to_position_hint instead.", DeprecationWarning, ) return self.scroll_to_position_hint def _set_scroll_to_row_hint(self, hint): warnings.warn( "Use of scroll_to_row_hint trait is deprecated. " "Use scroll_to_position_hint instead.", DeprecationWarning, ) self.scroll_to_position_hint = hint