def default_traits_view(self): table_editor = TableEditor(columns=[ ObjectColumn(name="name", label="name", resize_mode="stretch"), ObjectColumn(name="tag", label="File Type", resize_mode="fixed") ], auto_size=False, selected='object.selected_files', selection_mode='rows', editable=False) file_editor = FileEditor(allow_dir=True, filter=['*.tif']) image_editor = ImageEditor(scale=True, allow_upscaling=False, preserve_aspect_ratio=True) traits_view = View(VGroup( Group(UItem('image', editor=image_editor)), Group(Item('file_search', editor=file_editor, style='custom'), Item('add_file_button', label='Add File'), show_labels=False), HGroup( Item('key', editor=TextEditor(), style='simple'), Item('filter_file_button', label='Filter'), ), Group(Item('file_table', editor=table_editor), Item('remove_file_button', label='Remove File'), show_labels=False)), style='custom', resizable=True) return traits_view
class ViewportManager(Handler): #TODO make this a dialog from traitsui.api import (Item, View, ObjectColumn, TableEditor, RangeEditor, CheckListEditor, OKButton) ctl = Any selected_col = Any def __init__(self, ctl, **kwargs): super(Handler, self).__init__(**kwargs) self.ctl = ctl traits_view = View( Item( name='metadata_list', object='object.ctl', editor=TableEditor(columns=[ ObjectColumn(label='Window', name='panel_scratch', editor=TextEditor(enter_set=True, auto_set=False)), ObjectColumn(label='Dataset', name='ds_name_scratch', editor=TextEditor(enter_set=True, auto_set=False)) ], edit_view='tabular_view'), show_label=False, height=200, width=700, ), kind='nonmodal', buttons=[OKButton], title='If it were up to me it would all be in Swahili', )
def traits_view(self): cols = [ObjectColumn(name='name'), ObjectColumn(name='connected'), ObjectColumn(name='com_class', label='Com. Class'), ObjectColumn(name='klass', label='Class')] table_editor = TableEditor(columns=cols, editable=False, selected='selected', selection_mode='row') v = View(UItem('devices', editor=table_editor)) return v
def traits_view(self): cols = [ObjectColumn(name='name', editable=False), CheckboxColumn(name='display'), ObjectColumn(name='sigfigs')] sigma = VGroup(Item('age_nsigma'), Item('kca_nsigma')) v = okcancel_view(VGroup(UItem('columns', editor=TableEditor(columns=cols, sortable=False)), sigma, ), title='Interpreted Age Table Options', resizable=True, height=500, width=300) return v
def default_traits_view(self): estimates_table_ed = TableEditor( columns=[ ObjectColumn(name='name'), ], # menu = Menu(handler.do_edit_selected), auto_size=True, selection_mode='rows', selected_indices='_selected_indices', editable=False, #Can still select rows BUT not add them # row_factory=True #allows you to "Add new item" ) self.table_ed = estimates_table_ed view = View( Item('object.model.estimates', editor=estimates_table_ed), HGroup( Item('object.edit_button', show_label=False), Item('object.save_button', show_label=False), Item('object.add_button', show_label=False), Item('object.delete_button', show_label=False), Item('object.plot_button', show_label=False), ), resizable= True, #buttons=[do_edit_selected,'Plot','Add','Delete',do_save_db], #handler=Database_Handler ) return view
class ColorLegendWindow(HasTraits): legend = List(LegendEntry) traits_view = View( Item(name='legend', editor=TableEditor( columns=[ ObjectColumn(label='ROI', editor=TextEditor(), name='metaregion', style='readonly', editable=False), ColorColumn(label='color', editor=TextEditor(), name='blank', editable=False) ], selection_bg_color=None, ), show_label=False), kind='nonmodal', height=500, width=325, resizable=True, title='Fresh artichokes just -$3/lb', )
def test_progress_column(): from traitsui.extras.progress_column import ProgressColumn progress_view = View( Item( 'values', show_label=False, editor=TableEditor( columns=[ ObjectColumn(name='value'), ProgressColumn(name='other_value'), ], ) ), buttons=['OK'], ) gui = GUI() object_list = ObjectList( values=[ListItem(value=str(i**2)) for i in range(10)] ) with store_exceptions_on_all_threads(): ui = object_list.edit_traits(view=progress_view) gui.process_events() press_ok_button(ui) gui.process_events()
class JobManager(HasTraits): jobs = List(Instance(Job)) start = Button() def populate(self): self.jobs = [ Job(name='job %02d' % i, percent_complete=0) for i in range(1, 25) ] def process(self): for job in self.jobs: job.percent_complete = min( job.percent_complete + random.randint(0, 3), 100) if any(job.percent_complete < 100 for job in self.jobs): GUI.invoke_after(100, self.process) def _start_fired(self): self.populate() GUI.invoke_after(1000, self.process) view = View( UItem('jobs', editor=TableEditor( columns=[ ObjectColumn(name='name'), ProgressColumn(name='percent_complete'), ] )), UItem('start'), resizable=True, )
def default_traits_view(self): table_editor = TableEditor( columns=[ ObjectColumn(name='chemical', editor=EnumEditor(name='available')), ObjectColumn(name='concentration', editor=EnumEditor(name='available')) ], sortable=False, deletable=True, row_factory=self._row_factory, ) return View( Heading('Formulation Mapping'), Label("Select the variables that correspond to each " "formulation component's name and concentration"), UItem("table_rows", editor=table_editor), )
def __init__(self, PCAData, pca): super(PlotApp2, self).__init__() #self.phenotypes, self.pheno_dict = readPhenotypesFromCSVFile('..\..\IOdata\pca_phenotypes.csv') self.phenotypes, self.pheno_dict = readPhenotypesFromCSVFile( 'c:\pythondata\pca_phenotypes.csv') #self.phenotypes, self.pheno_dict = readPhenotypesFromCSVFile_pd('C:\Python Project\Visual_pca_6_Oct13\IOdata\phenotypes_table_2.csv') print(self.phenotypes, self.pheno_dict) self.shapes_name = self.pheno_dict[self.phenotypes[0]] self.colors_name = self.pheno_dict[self.phenotypes[1]] self.sizes_name = self.pheno_dict[self.phenotypes[2]] self.colors = get_colors(len(self.colors_name)) print('self.color=', self.colors_name) print('self.shape=', self.shapes_name) self.table_editor.columns = [ObjectColumn(name='name')] for i in range(len(PCAData) - 1): self.table_editor.columns.append(ObjectColumn(name="PCA" + str(i))) self.PCAData = PCAData self.pca = pca self.YPCA = [str(i) for i in range(len(PCAData) - 1)] self.XPCA = [str(i) for i in range(len(PCAData) - 1)] self.Shapedropdownlist = self.phenotypes self.Colordropdownlist = self.phenotypes self.Sizedropdownlist = self.phenotypes self.X_PCA = '0' self.Y_PCA = '0' self.Shape = self.phenotypes[0] self.Color = self.phenotypes[1] self.Size = self.phenotypes[2] self.activeScore = 'Pre Scores' self._updateTable() self._updateShapeTable() self._updateColorTable() self._updateSizeTable() self._update_Both_graph() return
def default_traits_view(self): table_editor = TableEditor(columns=[ ObjectColumn(name='name'), ObjectColumn(name='mean'), ObjectColumn(name='sigma') ], selected_indices='selected_table_index', show_toolbar=True, editable=True, deletable=True, sortable=False, row_factory=ViscosityModelParameters) return View( Item("calculation_mode"), Item("ingredient_models", editor=table_editor, style='custom'), HGroup(Item("add_viscosity_model_button"), Item("remove_viscosity_model_button"), show_labels=False))
def update_columns(self): if self.info is not None: # only compute if we have a UI up and running column_names = set() for foobar in self.model.foobars: print foobar column_names |= set(foobar.trait_names(column_trait=True)) columns = [ ObjectColumn(name=name) for name in sorted(column_names) ] editor = self.info.ui.get_editors('foobars')[0] editor.columns = columns
def rules_table(self): return TableEditor( sortable=False, auto_size=True, orientation="vertical", edit_view=View( Item("mask", editor=EnumEditor(values=sorted(self.model.masks.keys()))), Item("lower_limit", editor=optional_int_editor()), Item("upper_limit", editor=optional_int_editor()), Item("acts_on"), Item("result"), ), columns=[ ObjectColumn( name="mask", label="Mask", editable=False, ), ObjectColumn( name="lower_limit", label="Lower", editable=False, ), ObjectColumn( name="upper_limit", label="Upper", editable=False, ), ObjectColumn( name="acts_on", label="Acts On", editable=False, ), ObjectColumn( name="result", label="Result", editable=False, ) ] )
class ChildModelView(ModelView): # Define the 'family' ModelView property that maps the child and its # parents into a list of objects that can be viewed as a table: family = Property(List) # Define a view showing the family as a table: view = View( Item( 'family', show_label=False, editor=TableEditor(columns=[ ObjectColumn(name='first_name'), ObjectColumn(name='last_name'), ]), ), resizable=True, ) # Implementation of the 'family' property: def _get_family(self): return [self.model.father, self.model.mother, self.model]
def build_mc_parameter_table_editor(center_sim=None): """ TableEditor factory for the parameter scans that are possible to explore around the simulation provided. Note: the table editor doesn't support adding elements: it should be accompanied with a button which manually contributes to the list of ParameterScanDescriptions since that provides a higher level of controls anyway. """ distro_tooltip = "Type of distribution to draw random numbers from." param1_tooltip = "First parameter to describe the distribution. " \ "Corresponds to the 'mean' for 'Gaussian' distribution " \ "and to the lower limit for values (inclusive) for " \ "'Uniform' distribution." param2_tooltip = "Second parameter to describe the distribution. " \ "Corresponds to the 'std dev' for 'Gaussian' " \ "distribution and to the higher limit for values " \ "(exclusive) for 'Uniform' distribution." columns = [ ObjectColumn(name='name', label="Parameter name"), ObjectColumn(name='distribution', tooltip=distro_tooltip, # Let's restrict the number of options to just editor=EnumEditor(values=FAMILIAR_DISTROS)), ObjectColumn(name='dist_param1', tooltip=param1_tooltip, label="Low/Mean/1st param"), ObjectColumn(name='dist_param2', tooltip=param2_tooltip, label="High/Std Dev/2nd param"), ] if center_sim: center_val_col = ObjectColumn(name='center_value', style="readonly") columns.insert(1, center_val_col) editor = TableEditor( columns=columns, editable=True, sortable=False, deletable=True, ) return editor
def _updateSizeTable(self): del (self.size_table) columns = [ObjectColumn(name='name')] for i in range(len(self.sizes_name)): columns.append(ObjectColumn(name='s' + self.sizes_name[i])) data = SizeTable() self.size_table.append(data) self.size_columns = columns self.size_table.remove(data) data = SizeTable() data.name = self.psize for i in range(len(self.sizes_name)): exec('data.s' + self.sizes_name[i] + '="' + self.sizes_name[i] + '"') self.size_table.append(data) data = SizeTable() data.name = "Size" for i in range(len(self.sizes_name)): exec('data.s' + self.sizes_name[i] + '="' + sizes[i] + '"') self.size_table.append(data)
def build_regular_parameter_table_editor(center_sim=None, num_values_fixed=False, support_parallel_params=False): """ TableEditor factory for the parameter scans that are possible to explore around the simulation provided. Note: the table editor doesn't support adding elements: it should be accompanied with a button which manually contributes to the list of ParameterScanDescriptions since that provides a higher level of controls anyway. """ if num_values_fixed: num_value_style = "readonly" else: num_value_style = "simple" columns = [ ObjectColumn(name='name', label="Parameter name"), ObjectColumn(name='low'), ObjectColumn(name='high'), ObjectColumn(name='num_values', editor=RangeEditor(low=1, high=MAX_NUM_VALUES, mode='spinner'), style=num_value_style), ObjectColumn(name='spacing'), ObjectColumn(name='scanned_values', format_func=format_array, label="Final parameter values"), ] def format_adtl_params(param): if hasattr(param, "parallel_parameters") and param.parallel_parameters: return "%s param(s)" % len(param.parallel_parameters) return "None" if support_parallel_params: add_parallel_param_column = ModifiedObjectColumn( name='add_parallel_params', label="Add Parallel Param.", format_func=format_adtl_params ) columns.append(add_parallel_param_column) if center_sim: center_val_col = ObjectColumn(name='center_value', style="readonly") columns.insert(1, center_val_col) editor = TableEditor( columns=columns, editable=True, sortable=False, deletable=True, ) return editor
def _updateColorTable(self): del (self.color_table) columns = [ObjectColumn(name='name')] for i in range(len(self.colors_name)): columns.append( ObjectColumn(name='s' + self.colors_name[i], cell_color=getColor(self.colors[i]))) data = ColorTable() self.color_table.append(data) self.color_columns = columns self.color_table.remove(data) data = ColorTable() data.name = self.pcolor for i in range(len(self.colors_name)): exec('data.s' + self.colors_name[i] + '="' + self.colors_name[i] + '"') self.color_table.append(data) data = ColorTable() data.name = "Color" for i in range(len(self.colors_name)): exec('data.s' + self.colors_name[i] + '=""') self.color_table.append(data)
def get_columns(self): cols = [ CheckboxColumn(name='enabled'), CheckboxColumn(name='default'), ObjectColumn(name='kind'), ObjectColumn(name='name'), ObjectColumn(name='username'), ObjectColumn(name='password', format_func=lambda x: '*' * len(x), editor=TextEditor(password=True)), ObjectColumn(name='host'), ObjectColumn(name='dbname', label='Database', editor=EnumEditor(name='names')), ObjectColumn(name='path', style='readonly') ] return cols
def test_progress_column(self): from traitsui.extras.progress_column import ProgressColumn progress_view = View( Item( "values", show_label=False, editor=TableEditor(columns=[ ObjectColumn(name="value"), ProgressColumn(name="other_value"), ]), ), buttons=["OK"], ) object_list = ObjectList( values=[ListItem(value=str(i**2)) for i in range(10)]) tester = UITester() with tester.create_ui(object_list, dict(view=progress_view)): pass
def test_progress_column(self): from traitsui.extras.progress_column import ProgressColumn progress_view = View( Item( "values", show_label=False, editor=TableEditor(columns=[ ObjectColumn(name="value"), ProgressColumn(name="other_value"), ]), ), buttons=["OK"], ) object_list = ObjectList( values=[ListItem(value=str(i**2)) for i in range(10)]) with reraise_exceptions(), \ create_ui(object_list, dict(view=progress_view)) as ui: process_cascade_events()
def dynamic_view(self): return View( Item('electrodes', editor=TableEditor( columns = [ObjectColumn(label='electrode', editor=TextEditor(), style='readonly', editable=False, name='strrepr'), ObjectColumn(label='corner', editor=CheckListEditor( values=['','corner 1','corner 2', 'corner 3']), style='simple', name='corner'), ObjectColumn(label='geometry', editor=CSVListEditor(), #editor=TextEditor(), #style='readonly', #editable=False, name='geom_coords'), ObjectColumn(label='channel name', editor=TextEditor(), name='name'), ObjectColumn(label='ROIs', editor=ListStrEditor(), editable=False, name='roi_list'), ], selected='cur_sel', deletable=True, #row_factory=electrode_factory, row_factory=self.electrode_factory, ), show_label=False, height=350, width=700), HGroup( VGroup( Label( 'Automatic labeling parameters' ), Item( 'name_stem' ), HGroup( Item( 'naming_convention' ), Item( 'grid_type' ), ), ), #VGroup( # Label( 'ROI identification parameters' ), # Item('parcellation'), # Item('error_radius'), #), #VGroup( # Label('Image parameters' ), # Item('img_dpi', label='dpi'), # Item('img_size', label='size', editor=CSVListEditor()), #), ), resizable=True, kind='panel', title='modify electrodes', #buttons=[OKButton, swap_action, label_auto_action, # interpolate_action, save_montage_action, find_rois_action]) buttons = [self.label_auto_action, self.swap_action, OKButton], menubar = MenuBar( Menu( self.label_auto_action, self.add_blank_action, self.interpolate_action, self.find_rois_action, self.find_all_rois_action, self.manual_reposition_action, name='Operations', ), Menu( self.save_montage_action, self.save_csv_action, self.save_coronal_slice_action, name='Save Output', ), ) )
Person(name='Dave', age=39, phone='555-1212'), Person(name='Mike', age=28, phone='555-3526'), Person(name='Joe', age=34, phone='555-6943'), Person(name='Tom', age=22, phone='555-7586'), Person(name='Dick', age=63, phone='555-3895'), Person(name='Harry', age=46, phone='555-3285'), Person(name='Sally', age=43, phone='555-8797'), Person(name='Fields', age=31, phone='555-3547'), ] # Table editor definition: filters = [EvalFilterTemplate, MenuFilterTemplate, RuleFilterTemplate] table_editor = TableEditor( columns=[ ObjectColumn(name='name', width=0.4), ObjectColumn(name='age', width=0.2), ObjectColumn(name='phone', width=0.4), ], editable=True, deletable=True, sortable=True, sort_model=True, auto_size=False, filters=filters, search=RuleTableFilter(), row_factory=Person, show_toolbar=True, )
phone = Regex(value='000-0000', regex=r'\d\d\d[-]\d\d\d\d') traits_view = View('first_name', 'last_name', 'age', 'phone', title='Create new employee', width=0.18, buttons=['OK', 'Cancel']) # For readability, the TableEditor of the demo is defined here, rather than in # the View: table_editor = TableEditor( columns=[ ObjectColumn(name='first_name', width=0.20), ObjectColumn(name='last_name', width=0.20), ExpressionColumn(label='Full Name', width=0.30, expression="'%s %s' % (object.first_name, " "object.last_name )"), ObjectColumn(name='age', width=0.10, horizontal_alignment='center'), ObjectColumn(name='phone', width=0.20) ], deletable=True, sort_model=True, auto_size=False, orientation='vertical', edit_view=View(Group('first_name', 'last_name', 'age',
reraise_exceptions, ToolkitName, ) class MyEntry(HasTraits): name = Str() value = Int(0) color = RGBColor() entry_view = View(Group(Item("name"), Item("value"), Item("color"))) my_editor = TableEditor( columns=[ ObjectColumn(name="name"), ObjectColumn(name="value"), ColorColumn(name="color", style="readonly"), ], orientation="vertical", show_toolbar=True, row_factory=MyEntry, ) class MyData(HasTraits): data_list = List(MyEntry) view = View(Item("data_list", editor=my_editor, show_label=False))
def init(self, parent): """Finishes initializing the editor by creating the underlying toolkit widget.""" factory = self.factory self.filter = factory.filter columns = factory.columns[:] if (len(columns) == 0) and (len(self.value) > 0): columns = [ ObjectColumn(name=name) for name in self.value[0].editable_traits() ] self.columns = columns if factory.table_view_factory is not None: self.table_view = factory.table_view_factory(editor=self) if factory.source_model_factory is not None: self.source_model = factory.source_model_factory(editor=self) if factory.model_factory is not None: self.model = factory.model_factory(editor=self) # Create the table view and model self.model.setDynamicSortFilter(True) self.model.setSourceModel(self.source_model) self.table_view.setModel(self.model) # Create the vertical header context menu and connect to its signals self.header_menu = QtGui.QMenu(self.table_view) insertable = factory.row_factory is not None if factory.editable: if insertable: action = self.header_menu.addAction("Insert new item") action.triggered.connect(self._on_context_insert) if factory.deletable: action = self.header_menu.addAction("Delete item") action.triggered.connect(self._on_context_remove) if factory.reorderable: if factory.editable and (insertable or factory.deletable): self.header_menu.addSeparator() self.header_menu_up = self.header_menu.addAction("Move item up") self.header_menu_up.triggered.connect(self._on_context_move_up) self.header_menu_down = self.header_menu.addAction( "Move item down") self.header_menu_down.triggered.connect(self._on_context_move_down) # Create the empty space context menu and connect its signals self.empty_menu = QtGui.QMenu(self.table_view) action = self.empty_menu.addAction("Add new item") action.triggered.connect(self._on_context_append) # When sorting is enabled, the first column is initially displayed with # the triangle indicating it is the sort index, even though no sorting # has actually been done. Sort here for UI/model consistency. if self.factory.sortable and not self.factory.reorderable: self.model.sort(0, QtCore.Qt.AscendingOrder) # Connect to the mode specific selection handler and select the first # row/column/cell. Do this before creating the edit_view to make sure # that it has a valid item to use when constructing its view. smodel = self.table_view.selectionModel() mode_slot = getattr(self, "_on_%s_selection" % factory.selection_mode) smodel.selectionChanged.connect(mode_slot) self.table_view.setCurrentIndex(self.model.index(0, 0)) # Create the toolbar if necessary if factory.show_toolbar and len(factory.filters) > 0: main_view = QtGui.QWidget() layout = QtGui.QVBoxLayout(main_view) layout.setContentsMargins(0, 0, 0, 0) self.toolbar_ui = self.edit_traits( parent=parent, kind="subpanel", view=View( Group( Item("filter{View}", editor=factory._filter_editor), Item("filter_summary{Results}", style="readonly"), spring, orientation="horizontal", ), resizable=True, ), ) self.toolbar_ui.parent = self.ui layout.addWidget(self.toolbar_ui.control) layout.addWidget(self.table_view) else: main_view = self.table_view # Create auxiliary editor and encompassing splitter if necessary mode = factory.selection_mode if (factory.edit_view == " ") or mode not in {"row", "rows"}: self.control = main_view else: if factory.orientation == "horizontal": self.control = QtGui.QSplitter(QtCore.Qt.Horizontal) else: self.control = QtGui.QSplitter(QtCore.Qt.Vertical) self.control.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) self.control.addWidget(main_view) self.control.setStretchFactor(0, 2) # Create the row editor below the table view editor = InstanceEditor(view=factory.edit_view, kind="subpanel") self._ui = self.edit_traits( parent=self.control, kind="subpanel", view=View( Item( "selected_row", style="custom", editor=editor, show_label=False, resizable=True, width=factory.edit_view_width, height=factory.edit_view_height, ), resizable=True, handler=factory.edit_view_handler, ), ) self._ui.parent = self.ui self.control.addWidget(self._ui.control) self.control.setStretchFactor(1, 1) # Connect to the click and double click handlers self.table_view.clicked.connect(self._on_click) self.table_view.doubleClicked.connect(self._on_dclick) # Make sure we listen for 'items' changes as well as complete list # replacements self.context_object.on_trait_change(self.update_editor, self.extended_name + "_items", dispatch="ui") # Listen for changes to traits on the objects in the list self.context_object.on_trait_change(self.refresh_editor, self.extended_name + ".-", dispatch="ui") # Listen for changes on column definitions self.on_trait_change(self._update_columns, "columns", dispatch="ui") self.on_trait_change(self._update_columns, "columns_items", dispatch="ui") # Set up the required externally synchronized traits is_list = mode in ("rows", "columns", "cells") self.sync_value(factory.click, "click", "to") self.sync_value(factory.dclick, "dclick", "to") self.sync_value(factory.columns_name, "columns", is_list=True) self.sync_value(factory.selected, "selected", is_list=is_list) self.sync_value(factory.selected_indices, "selected_indices", is_list=is_list) self.sync_value(factory.filter_name, "filter", "from") self.sync_value(factory.filtered_indices, "filtered_indices", "to") self.sync_value(factory.update_filter_name, "update_filter", "from") self.auto_size = self.factory.auto_size # Initialize the ItemDelegates for each column self._update_columns()
from traits.api import HasTraits, Code, Instance, Button, Str, Float, List, on_trait_change from traitsui.api import (View, Item, VGroup, VSplit, HSplit, HGroup, ValueEditor, TableEditor, InstanceEditor, ObjectColumn) from matplotlib.figure import Figure from scpy2.traits import MPLFigureEditor ###1### class Point(HasTraits): x = Float() y = Float() point_table_editor = TableEditor(columns=[ ObjectColumn(name='x', width=100, format="%g"), ObjectColumn(name='y', width=100, format="%g") ], editable=True, sortable=False, sort_model=False, auto_size=False, row_factory=Point) ###1### ###2### class FunctionPlotter(HasTraits): figure = Instance(Figure, ()) #❶ code = Code() #❷ points = List(Instance(Point), []) #❸
from ibvpy.core.i_bcond import IBCond from traits.api import \ Instance, \ List from traitsui.api import \ TableEditor, ObjectColumn from view.ui import BMCSTreeNode # The definition of the demo TableEditor: bcond_list_editor = TableEditor( columns=[ ObjectColumn(label='Type', name='var'), ObjectColumn(label='Value', name='value'), ObjectColumn(label='DOF', name='dof') ], editable=False, selected='object.selected_bcond', ) class BCondMngr(BMCSTreeNode): node_name = 'boundary conditions' bcond_list = List(IBCond) def _tree_node_list_default(self): return self.bcond_list selected_bcond = Instance(IBCond)
"btn_cfg_tx", show_label=False, tooltip="Configure Tx AMI parameters.", enabled_when="tx_ami_valid == True", ), ), ), label="IBIS-AMI", show_border=True, ), VGroup( Item( name="tx_taps", editor=TableEditor( columns=[ ObjectColumn(name="name", editable=False), ObjectColumn(name="enabled", style="simple"), ObjectColumn( name="min_val", horizontal_alignment="center"), ObjectColumn( name="max_val", horizontal_alignment="center"), ObjectColumn( name="value", format="%+05.3f", horizontal_alignment="center"), ObjectColumn( name="steps", horizontal_alignment="center"),
), ), VGroup( Item(name='tx_use_ami', label='Use AMI', tooltip="You must select both files, first.", enabled_when='tx_ami_valid == True and tx_dll_valid == True'), Item(name='tx_use_getwave', label='Use GetWave', tooltip="Use the model's GetWave() function.", enabled_when='tx_use_ami and tx_has_getwave'), Item('btn_cfg_tx', show_label=False, tooltip="Configure Tx AMI parameters.", enabled_when='tx_ami_valid == True'), ), ), label='IBIS-AMI', show_border=True, ), VGroup( Item( name='tx_taps', editor=TableEditor(columns=[ObjectColumn(name='name', editable=False), ObjectColumn(name='enabled', style='simple'), ObjectColumn(name='min_val', horizontal_alignment='center'), ObjectColumn(name='max_val', horizontal_alignment='center'), ObjectColumn(name='value', format='%+05.3f', horizontal_alignment='center'), ObjectColumn(name='steps', horizontal_alignment='center'), ], configurable=False, reorderable=False, sortable=False, selection_mode='cell', auto_size=True, rows=4, # v_size_policy='ignored', # h_size_policy='minimum', # orientation='vertical',