Exemple #1
0
class HistoryDemo(HasTraits):

    name = Str()
    file = File()
    directory = Directory()

    view = View(
        Item('name',
             id='name',
             editor=HistoryEditor(entries=5)
             ),
        Item('file',
             id='file1',
             editor=FileEditor(entries=10)
             ),
        Item('file',
             id='file2',
             editor=FileEditor(entries=10,
                               filter=['All files (*.*)|*.*',
                                       'Python files (*.py)|*.py'])
             ),
        Item('directory',
             id='directory',
             editor=DirectoryEditor(entries=10)
             ),
        title='History Editor Demo',
        id='enthought.test.history_demo.HistoryDemo',
        width=0.33,
        resizable=True
    )
Exemple #2
0
class FileBrowserPane(TraitsDockPane):
    """ A simple file browser pane.
    """

    #### TaskPane interface ###################################################

    id = 'image_viewer.file_browser_pane'
    name = 'File Browser'

    #### FileBrowserPane interface ############################################

    # Fired when a file is double-clicked.
    activated = Event

    # The list of wildcard filters for filenames.
    filters = List(Str)

    # The currently selected file.
    selected_file = File(os.path.expanduser('~'))

    # The view used to construct the dock pane's widget.
    view = View(Item('selected_file',
                     editor=FileEditor(dclick_name='activated',
                                       filter_name='filters'),
                     style='custom',
                     show_label=False),
                resizable=True)
    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
Exemple #4
0
    def default_traits_view(self):
        v = super(MultiframeSavesFigure, self).default_traits_view()
        vsplit = v.content.content[0]

        if self._has_ffmpeg:
            vpanel = HGroup(
                Item('video_file', editor=FileEditor(dialog_style='save')),
                Item('video_fps',
                     label='FPS',
                     editor=RangeEditor(low=1, high=100, mode='spinner')),
                UItem('make_video'))
            vsplit.content.insert(1, vpanel)
        panel = HGroup(
            Item('mode',
                 label='Scroll frames',
                 editor=RangeEditor(low=self._mn, high=self._mx)),
            UItem('mode',
                  visible_when='_mx > 101',
                  editor=RangeEditor(low=self._mn,
                                     high=self._mx,
                                     mode='slider')),
            Item('mode_value',
                 style='readonly',
                 label='Current frame: {0}'.format(self.mode_name)))
        vsplit.content.insert(1, panel)
        return v
Exemple #5
0
 def check_init_and_dispose(self, style):
     # Test init and dispose by opening and closing the UI
     view = View(Item("filepath", editor=FileEditor(), style=style))
     obj = FileModel()
     with reraise_exceptions(), \
             create_ui(obj, dict(view=view)):
         pass
Exemple #6
0
class PythonBrowserPane(TraitsDockPane):
    """ A simple Python file browser pane.
    """

    # FileBrowserPane interface ----------------------------------------------

    # Fired when a file is double-clicked.
    activated = Event()

    # The list of wildcard filters for filenames.
    filters = List(Str, ["*.py"])

    # The currently selected file.
    selected_file = File(os.path.expanduser("~"))

    # TaskPane interface -----------------------------------------------------

    id = "example.python_browser_pane"
    name = "File Browser"

    # The view used to construct the dock pane's widget.
    view = View(
        Item(
            "selected_file",
            editor=FileEditor(
                dclick_name="activated",
                filter_name="filters",
                root_path=os.path.expanduser("~"),
            ),
            style="custom",
            show_label=False,
        ),
        resizable=True,
    )
class PythonBrowserPane(TraitsDockPane):
    """ A simple Python file browser pane.
    """

    # FileBrowserPane interface ----------------------------------------------

    # Fired when a file is double-clicked.
    activated = Event

    # The list of wildcard filters for filenames.
    filters = List(Str, ['*.py'])

    # The currently selected file.
    selected_file = File(os.path.expanduser('~'))

    # TaskPane interface -----------------------------------------------------

    id = 'example.python_browser_pane'
    name = 'File Browser'

    # The view used to construct the dock pane's widget.
    view = View(
        Item(
            'selected_file',
            editor=FileEditor(
                dclick_name='activated',
                filter_name='filters',
                root_path=os.path.expanduser('~'),
            ),
            style='custom',
            show_label=False
        ),
        resizable=True,
    )
Exemple #8
0
class TranslationControlHandler(Controller):
    control_view = View(HGroup(Item('from_channel', style = 'readonly', show_label = False),
                               Item('', label = '->'),
                               Item('to_channel', style = 'readonly', show_label = False),
                               Item('file', 
                                    editor = FileEditor(dialog_style = 'open'),
                                    show_label = False),
                               show_labels = False))
Exemple #9
0
class ControlHandler(Controller):
    control_view = View(
        HGroup(
            Item('channel',
                 editor=EnumEditor(name='context_handler.channels')),
            Item('file',
                 editor=FileEditor(dialog_style='open'),
                 show_label=False)))
Exemple #10
0
 def traits_view(self):
     p_grp = VGroup(Item(
         'canvas_path',
         label='Canvas Path',
         editor=FileEditor(
             root_path=os.path.join(paths.canvas2D_dir, 'canvas.xml'))),
                    Item('canvas_config_path',
                         label='Config Path',
                         editor=FileEditor()),
                    Item('valves_path',
                         label='Valves Path',
                         editor=FileEditor(root_path=os.path.join(
                             paths.extraction_line_dir, 'valves.xml'))),
                    show_border=True,
                    label='Paths')
     v = View(p_grp)
     return v
 def test_simple_editor_auto_set_text(self):
     # Test with auto_set set to True.
     view = View(Item("filepath", editor=FileEditor(auto_set=True)))
     obj = FileModel()
     tester = UITester()
     with tester.create_ui(obj, dict(view=view)) as ui:
         filepath_field = tester.find_by_name(ui, "filepath")
         filepath_field.perform(KeySequence("some_file.txt"))
         self.assertEqual(obj.filepath, "some_file.txt")
    def test_show_file_dialog_truncate_ext(self, mock_open):
        view = View(Item("filepath", editor=FileEditor(truncate_ext=True)))
        obj = FileModel()
        tester = UITester()
        with tester.create_ui(obj, dict(view=view)) as ui:
            editor = ui.get_editors("filepath")[0]
            editor.show_file_dialog()

            self.assertEqual(editor.value, "some_file")
Exemple #13
0
class Person(HasTraits):

    #---------------------------------------------------------------------------
    #  Trait definitions:
    #---------------------------------------------------------------------------

    name = Str('David Morrill')
    age = Int(39)
    sex = Trait('Male', 'Female')
    coolness = Range(0.0, 10.0, 10.0)
    number = Trait(1, Range(1, 6), 'one', 'two', 'three', 'four', 'five',
                   'six')
    human = Bool(True)
    employer = Trait(Employer(company='Enthought, Inc.', boss='eric'))
    eye_color = RGBAColor
    set = List(
        editor=CheckListEditor(values=['one', 'two', 'three', 'four'], cols=4))
    font = KivaFont
    street = Str
    city = Str
    state = Str
    zip = Int(78663)
    password = Str
    books = List(Str,
                 ['East of Eden', 'The Grapes of Wrath', 'Of Mice and Men'])
    call = Event(0, editor=ButtonEditor(label='Click to call'))
    info = Str(editor=FileEditor())
    location = Str(editor=DirectoryEditor())
    origin = Trait(editor=ImageEnumEditor(values=origin_values,
                                          suffix='_origin',
                                          cols=4,
                                          klass=Employer),
                   *origin_values)

    nm = Item('name', enabled_when='object.age >= 21')
    pw = Item('password', defined_when='object.zip == 78664')
    view = View(
        ((nm, 'age', 'coolness', '_', 'eye_color', 'eye_color@', 'eye_color*',
          'eye_color~', '_', 'font', 'font@', 'font*', 'font~', '_', 'set',
          'set@', 'set*', 'set~', '_', 'sex', 'sex@', 'sex*', 'sex~', '_',
          'human', 'human@', 'human*', 'human~', '_', 'number', 'number@',
          'number*', 'number~', '_', 'books', '_', 'books@', '_', 'books*',
          '_', 'books~', '_', 'info', 'location', 'origin', 'origin@', 'call',
          'employer', 'employer[]@', 'employer*', 'employer~', pw,
          '|<[Person:]'),
         (' ', 'street', 'city', 'state', 'zip', '|<[Address:]'),
         (nm, nm, nm, nm, nm, nm, nm, nm, nm, nm, nm, nm, nm, nm,
          '|<[Names:]'), '|'),
        title='Traits 2 User Interface Test',
        handler=PersonHandler(),
        buttons=['Apply', 'Revert', 'Undo', 'OK'],
        height=0.5)

    wizard = View(('|p1:', 'name', 'age', 'sex'),
                  ('|p2:', 'street', 'city', 'state', 'zip'),
                  ('|p3:', 'eye_color', 'origin', 'human'),
                  handler=WizardHandler())
Exemple #14
0
class OutFile(HasTraits):
    outname = File()

    fview = View( Item('outname',label='Save File Name:',style='simple',editor=FileEditor()),
                  title='Save File Name',
                  kind='modal',
                  width = -400,
                  height = -300,
                  buttons = OKCancelButtons)
Exemple #15
0
 def _get_view(self):
     return Item(
         'path',
         style='custom',
         show_label=False,
         editor=FileEditor(
             filter=['*.py'],
             root_path=paths.scripts_dir,
         ),
         #                    width=600,
     )
    def test_simple_editor_display_path(self):
        # Test the filepath widget is updated to show path
        view = View(Item("filepath", editor=FileEditor()))
        obj = FileModel()
        tester = UITester()
        with tester.create_ui(obj, dict(view=view)) as ui:
            filepath_field = tester.find_by_name(ui, "filepath")
            self.assertEqual(filepath_field.inspect(DisplayedText()), "")

            obj.filepath = "some_file.txt"
            self.assertEqual(filepath_field.inspect(DisplayedText()),
                             "some_file.txt")
    def test_simple_editor_set_text_to_nonexisting_path(self):
        # Test setting the editor to a nonexisting filepath
        # e.g. use case for creating a new file.
        view = View(Item("filepath", editor=FileEditor()))
        obj = FileModel()
        tester = UITester()
        with tester.create_ui(obj, dict(view=view)) as ui:
            filepath_field = tester.find_by_name(ui, "filepath")

            filepath_field.perform(KeySequence("some_file.txt"))
            filepath_field.perform(KeyClick("Enter"))

            self.assertEqual(obj.filepath, "some_file.txt")
 def test_custom_editor_reload_changed_after_dispose(self):
     # Test firing reload event on the model after the UI is disposed.
     view = View(
         Item(
             "filepath",
             editor=FileEditor(reload_name="reload_event"),
             style="custom",
         ), )
     obj = FileModel()
     with UITester().create_ui(obj, dict(view=view)):
         pass
     # should not fail.
     obj.reload_event = True
Exemple #19
0
    def default_traits_view(self):

        return View(
            HSplit(
                VSplit(
                    Item('data_file@', editor=FileEditor(filter_name='filter'),
                         show_label=False),
                    Group(
                        Item('figure', editor=MPLFigureEditor(),
                             resizable=True, show_label=False),
                        id='simexdb.plot_sheet',
                        label='plot sheet',
                        dock='tab',
                    ),
                    Group(
                        Item('plot_template'),
                        columns=1,
                        label='plot parameters',
                        id='simexdb.plot_params',
                        dock='tab',
                    ),
                    id='simexdb.plot.vsplit',
                    dock='tab',
                ),
                VSplit(
                    Item('model@',
                         id='simexdb.run.split',
                         dock='tab',
                         resizable=True,
                         label='experiment run',
                         show_label=False),
                    id='simexdb.mode_plot_data.vsplit',
                    dock='tab',
                    scrollable=True
                ),
                id='simexdb.hsplit',
                dock='tab',
            ),
            key_bindings=self.key_bindings,
            menubar=self.default_menubar(),
            toolbar=self.default_toolbar(),
            resizable=True,
            title='Simvisage: experiment database browser',
            id='simexdb',
            dock='tab',
            buttons=['Ok'],
            height=1.0,
            width=1.0
        )
Exemple #20
0
    class FileChooserWindow(HasPrivateTraits):
        f = File
        _fn = Str
        traits_view = View(Item(name='_fn', show_label=False),
                           Item(name='f',
                                editor=FileEditor(),
                                style='custom',
                                height=500,
                                width=500,
                                show_label=False),
                           buttons=OKCancelButtons,
                           kind='nonmodal',
                           title="This should be extremely inconvenient")

        @on_trait_change('_fn')
        def f_chg(self):
            self.f = self._fn
Exemple #21
0
 def default_traits_view(self):
     v = View(VGroup(
         Item('file', label='Visualize this file'),
         VGroup(Item('conv_file',
                     editor=FileEditor(dialog_style='save'),
                     label='HDF5 convert file'),
                HGroup(Item('temp_conv', label='Use temp file'),
                       Item('downsamp', label='Downsample factor', width=4),
                       Item('quantized', label='Quantized?'),
                       label='Conversion options'),
                UItem('do_convert'),
                enabled_when='can_convert'), Label('Scales samples to V'),
         Label('(1.98e-7 if quantized, else 1e-6)'), UItem('y_scale'),
         HGroup(Item('zero_windows', label='Remove local DC?'),
                Item('car_windows', label='Com. Avg. Ref?'),
                label='Choose up to one')),
              resizable=True)
     return v
    def test_simple_editor_reset_text_if_validation_error(self):
        # Test when the trait validates file existence.
        view = View(Item("existing_filepath", editor=FileEditor()))
        obj = FileModel()
        tester = UITester()
        with tester.create_ui(obj, dict(view=view)) as ui:
            filepath_field = tester.find_by_name(ui, "existing_filepath")

            # when
            filepath_field.perform(KeySequence("some_file.txt"))
            filepath_field.perform(KeyClick("Enter"))

            # then
            # the file does not exist, the trait is not set.
            self.assertEqual(obj.existing_filepath, "")

            # the widget is synchronized to the trait value.
            self.assertEqual(filepath_field.inspect(DisplayedText()), "")
Exemple #23
0
class CiteImport(HasTraits):
    """Citation list file importer.
	
	Provides a view to select the extractor definition file and citation
	file to import.
	
	Attributes:
		sheet (:class:`CiteSheet`): Spreadsheet displaying the imported data.
		dbName (str): Name of imported database.
	
	"""
    extractor = Str()  # extractor filename in extractorNames
    extractorNames = Instance(TraitsList)  # list of extractor filenames
    path = File()  # citation list path
    sheet = Instance(CiteSheet)  # associated sheet
    clearBtn = Button('Clear')  # button to clear data

    # TraitsUI default view
    traits_view = View(
        VGroup(
            HGroup(
                Item(
                    "extractor",
                    label='File source',
                    springy=True,
                    # convert extractor filename for display
                    editor=CheckListEditor(
                        name="object.extractorNames.selections",
                        format_func=_displayExtractor)), ),
            HGroup(
                Item('path',
                     show_label=False,
                     style='simple',
                     springy=True,
                     editor=FileEditor(allow_dir=True)),
                Item('clearBtn', show_label=False),
            ),
        ), )

    def __init__(self, sheet):
        """Initialize import view."""
        super().__init__()
        self.sheet = sheet
        self.dbName = None
Exemple #24
0
class AutofluorescenceHandler(OpHandler):
    
    operation_traits_view = \
        View(Item('blank_file',
                  editor = FileEditor(dialog_style = 'open')),
             Item('channels',
                  editor = CheckListEditor(cols = 2,
                                           name = 'context_handler.previous_channels'),
                  style = 'custom'),
             VGroup(Item('subset_list',
                         show_label = False,
                         editor = SubsetListEditor(conditions = "context_handler.previous_conditions",
                                                   editor = InstanceHandlerEditor(view = 'subset_view',
                                                                                  handler_factory = subset_handler_factory))),
                    label = "Subset",
                    show_border = False,
                    show_labels = False),
             Item('do_estimate',
                  editor = ButtonEditor(value = True,
                                        label = "Estimate!"),
                  show_label = False),
             shared_op_traits_view)
Exemple #25
0
 def default_traits_view(self):
     v = View(
         HGroup(
             VGroup(Item('anim_time_scale', label='Divide real time'),
                    Item('anim_frame'),
                    label='Animate Frames'),
             HGroup(VGroup(
                 Item('video_file',
                      label='MP4 File',
                      editor=FileEditor(dialog_style='save')),
                 UItem('write_frames')),
                    VGroup(
                        Item('cmap', label='Colormap'),
                        Item('clim', label='Color limit mode'),
                        Item('drop_video_frames',
                             label='Frame drop rate',
                             editor=RangeEditor(low=1,
                                                high=100,
                                                mode='spinner')),
                    ),
                    visible_when='_has_ffmpeg')))
     return v
 def default_traits_view(self):
     v = View(VSplit(
         UItem('array_plot',
               editor=MPLFigureEditor(),
               width=500,
               height=400,
               resizable=True),
         HGroup(
             Item('selected_site', style='readonly'),
             Item('min_max_norm', label='Min-Max Normalize'),
             Item('cmap', label='Color map'),
         ),
         HGroup(Item('_c_lo', label='Low color'),
                Item('_c_hi', label='High color'),
                enabled_when='min_max_norm==False'),
         HGroup(
             Item('save_file',
                  label='pdf file',
                  editor=FileEditor(dialog_style='save')),
             UItem('save_all'))),
              handler=PingPongStartup,
              resizable=True,
              title='Covariance Visualization')
     return v
class PLOT3DReader(Source):
    """A PLOT3D file reader.  This reader does not support a
    timeseries of files.
    """

    # The version of this class.  Used for persistence.
    __version__ = 0

    # XYZ file name
    xyz_file_name = Str('', desc='the XYZ file')

    # The (optional) Q file.
    q_file_name = Str('', desc='the Q file')

    # The active scalar name.
    scalars_name = Trait('density',
                         TraitPrefixMap({
                             'density': 100,
                             'pressure': 110,
                             'temperature': 120,
                             'enthalpy': 130,
                             'internal energy': 140,
                             'kinetic energy': 144,
                             'velocity magnitude': 153,
                             'stagnation energy': 163,
                             'entropy': 170,
                             'swirl': 184
                         }),
                         desc='scalar data attribute to show')
    # The active vector name.
    vectors_name = Trait('momentum',
                         TraitPrefixMap({
                             'velocity': 200,
                             'vorticity': 201,
                             'momentum': 202,
                             'pressure gradient': 210
                         }),
                         desc='vector data attribute to show')

    # The VTK data file reader.
    reader = Instance(tvtk.MultiBlockPLOT3DReader,
                      args=(),
                      allow_none=False,
                      record=True)

    # Information about what this object can produce.
    output_info = PipelineInfo(datasets=['structured_grid'])

    ########################################
    # View related code.

    update_reader = Button('Update Reader')

    # Our view.
    view = View(Group(
        Item('xyz_file_name', editor=FileEditor()),
        Item('q_file_name', editor=FileEditor()),
        Item(name='scalars_name', enabled_when='len(object.q_file_name) > 0'),
        Item(name='vectors_name', enabled_when='len(object.q_file_name)>0'),
        Item(name='update_reader'),
        label='Reader',
    ),
                Group(Item(name='reader', style='custom', resizable=True),
                      show_labels=False,
                      label='PLOT3DReader'),
                resizable=True)

    ########################################
    # Private traits.

    # The current file paths.  This is not meant to be touched by the
    # user.
    xyz_file_path = Instance(FilePath,
                             args=(),
                             desc='the current XYZ file path')
    q_file_path = Instance(FilePath, args=(), desc='the current Q file path')

    ######################################################################
    # `object` interface
    ######################################################################
    def __get_pure_state__(self):
        d = super(PLOT3DReader, self).__get_pure_state__()
        # These traits are dynamically created.
        for name in ('scalars_name', 'vectors_name', 'xyz_file_name',
                     'q_file_name'):
            d.pop(name, None)

        return d

    def __set_pure_state__(self, state):
        xyz_fn = state.xyz_file_path.abs_pth
        q_fn = state.q_file_path.abs_pth
        if not isfile(xyz_fn):
            msg = 'Could not find file at %s\n' % xyz_fn
            msg += 'Please move the file there and try again.'
            raise IOError, msg

        # Setup the reader state.
        set_state(self, state, first=['reader'], ignore=['*'])
        # Initialize the files.
        self.initialize(xyz_fn, q_fn, configure=False)
        # Now set the remaining state without touching the children.
        set_state(self,
                  state,
                  ignore=['children', 'xyz_file_path', 'q_file_path'])
        # Setup the children.
        handle_children_state(self.children, state.children)
        # Setup the children's state.
        set_state(self, state, first=['children'], ignore=['*'])

    ######################################################################
    # `FileDataSource` interface
    ######################################################################
    def initialize(self, xyz_file_name, q_file_name='', configure=True):
        """Given an xyz filename and a Q filename which may or may not
        be part of a time series, this initializes the list of files.
        This method need not be called to initialize the data.

        If configure is True, it pops up a UI to configure the
        PLOT3DReader.
        """
        if len(q_file_name) == 0:
            base = splitext(xyz_file_name)[0]
            qf = base + '.q'
            if exists(qf):
                q_file_name = qf

        if configure:
            # First set properties of the reader.  This is useful when
            # the data format has atypical defaults.  Automatic
            # detection can be disastrous sometimes due to VTK related
            # problems.
            self.reader.edit_traits(kind='livemodal')
        self.xyz_file_name = xyz_file_name
        if len(q_file_name) > 0:
            self.q_file_name = q_file_name

    def update(self):
        if len(self.xyz_file_path.get()) == 0:
            return
        self.reader.update()
        self.render()

    def has_output_port(self):
        """ Return True as the reader has output port."""
        return True

    def get_output_object(self):
        """ Return the reader output port."""
        return self.reader.output_port

    ######################################################################
    # Non-public interface
    ######################################################################
    def _xyz_file_name_changed(self, value):
        if len(value) == 0:
            return
        else:
            self.reader.xyz_file_name = value
            self.xyz_file_path.set(value)
            self._update_reader_output()

    def _q_file_name_changed(self, value):
        if len(value) == 0:
            return
        else:
            self.reader.q_file_name = value
            self.q_file_path.set(value)
            self._update_reader_output()

    def _update_reader_output(self):
        r = self.reader
        r.update()

        if r.error_code != 0:
            try:
                self.reader.i_blanking = True
            except AttributeError:
                pass
            else:
                r.update()

        # Try reading file.
        if r.error_code != 0:
            # No output so the file might be an ASCII file.
            try:
                # Turn off IBlanking.
                r.set(i_blanking=False, binary_file=False)
            except AttributeError:
                pass
            else:
                r.update()

        # Try again this time as ascii and with blanking.
        if r.error_code != 0:
            # No output so the file might be an ASCII file.
            try:
                # Turn on IBlanking.
                r.i_blanking = True
            except AttributeError:
                pass
            else:
                r.update()

        # If there still is an error, ask the user.
        if r.error_code != 0:
            r.edit_traits(kind='livemodal')
            r.update()

        # If there still is an error, ask the user to retry.
        if r.error_code != 0:
            msg = 'Unable to read file properly. '\
                  'Please check the settings of the reader '\
                  'on the UI and press the "Update Reader" button '\
                  'when done and try again!'
            error(msg)
            return

        # Now setup the outputs by resetting self.outputs.  Changing
        # the outputs automatically fires a pipeline_changed event.
        try:
            n = r.get_output().number_of_blocks
        except AttributeError:  # for VTK >= 4.5
            n = r.number_of_outputs
        outputs = []
        for i in range(n):
            outputs.append(r.get_output().get_block(i))

        self.outputs = outputs

        # Fire data_changed just in case the outputs are not
        # really changed.  This can happen if the dataset is of
        # the same type as before.
        self.data_changed = True

        # Change our name on the tree view
        self.name = self._get_name()

    def _scalars_name_changed(self, value):
        self.reader.scalar_function_number = self.scalars_name_
        self.reader.modified()
        self.update()
        self.data_changed = True

    def _vectors_name_changed(self, value):
        self.reader.vector_function_number = self.vectors_name_
        self.reader.modified()
        self.update()
        self.data_changed = True

    def _update_reader_fired(self):
        self.reader.modified()
        self._update_reader_output()
        self.pipeline_changed = True

    def _get_name(self):
        """ Gets the name to display on the tree view.
        """
        xyz_fname = basename(self.xyz_file_path.get())
        q_fname = basename(self.q_file_path.get())
        if len(self.q_file_name) > 0:
            ret = "PLOT3D:%s, %s" % (xyz_fname, q_fname)
        else:
            ret = "PLOT3D:%s" % (xyz_fname)
        if '[Hidden]' in self.name:
            ret += ' [Hidden]'
        return ret
Exemple #28
0
class VRMLImporter(Source):

    __version__ = 0

    # The file name.
    file_name = Str('',
                    enter_set=True,
                    auto_set=False,
                    desc='the VRML file name')

    # The VRML importer.
    reader = Instance(tvtk.VRMLImporter,
                      args=(),
                      allow_none=False,
                      record=True)

    output_info = PipelineInfo(datasets=['none'])

    ###############
    # Private traits.

    # Our file path used for persistence
    _file_path = Instance(FilePath, args=())

    # Our View.
    view = View(Item(name='file_name', editor=FileEditor()))

    ######################################################################
    # `object` interface
    ######################################################################
    def __get_pure_state__(self):
        d = super(VRMLImporter, self).__get_pure_state__()
        # These traits are dynamically created.
        for name in ('reader', 'file_name'):
            d.pop(name)
        return d

    def __set_pure_state__(self, state):
        # The reader has its own file_name which needs to be fixed.
        fname = state._file_path.abs_pth
        # Now call the parent class to setup everything.
        self.initialize(fname)
        # Setup the rest of the state.
        set_state(self, state, ignore=['_file_path'])

    def initialize(self, file_name):
        self.file_name = file_name

    ######################################################################
    # `PipelineBase` interface.
    ######################################################################
    def add_actors(self):
        """Adds `self.actors` to the scene.
        """
        if not self._actors_added:
            self.reader.render_window = self.scene.render_window
            self._update_reader()
            self._actors_added = True
            if not self.visible:
                self._visible_changed(self.visible)
            self.scene.render()

    def remove_actors(self):
        """Removes `self.actors` from the scene.
        """
        if self._actors_added:
            self.scene.remove_actors(self.actors)
            self._actors_added = False
            self.scene.render()

    ######################################################################
    # Non-public interface
    ######################################################################
    def _file_name_changed(self, value):
        reader = self.reader
        reader.file_name = value
        self._file_path.set(value)
        self._update_reader()
        self.render()
        name = "VRML file (%s)" % basename(self.file_name)
        if '[Hidden]' in self.name:
            name += ' [Hidden]'
        self.name = name

    def _update_reader(self):
        reader = self.reader
        if self.scene is None or reader.file_name is None \
               or len(reader.file_name) == 0:
            return
        actors1 = [x for x in self.scene.renderer.actors]
        reader.read()
        self.scene.render()
        actors2 = [x for x in self.scene.renderer.actors]
        self.actors = [x for x in actors2 if x not in actors1]
        # If these are the first actors on scene reset the view.
        if len(actors1) == 0:
            self.scene.reset_zoom()

    def _scene_changed(self, old, new):
        if self._actors_added:
            old.remove_actors(self.actors)
            reader = self.reader
            reader.render_window = new.render_window
            self._update_reader()

    def _actors_changed(self, old, new):
        if self._actors_added:
            self.scene.remove_actors(old)
            # The actors are added automatically when the importer
            # does a read.
            self.scene.render()

    def _actors_items_changed(self, list_event):
        if self._actors_added:
            self.scene.remove_actors(list_event.removed)
            # The actors are added automatically when the importer
            # does a read.
            self.scene.render()

    def _visible_changed(self, value):
        if value:
            if not self._actors_added:
                self.scene.add_actors(self.actors)
                self._actors_added = True
        super(VRMLImporter, self)._visible_changed(value)
Exemple #29
0
             name="debug",
             label="Debug",
             tooltip="Enable to log extra information to console."),
         label="Analysis Parameters",
         show_border=True,
     ),
 ),
 HGroup(
     VGroup(
         VGroup(
             HGroup(
                 Item(
                     name="tx_ibis_file",
                     label="File",
                     springy=True,
                     editor=FileEditor(dialog_style="open",
                                       filter=["*.ibs"]),
                 ),
                 Item(name="tx_ibis_valid",
                      label="Valid",
                      style="simple",
                      enabled_when="False"),
             ),
             HGroup(
                 Item(name="tx_use_ibis", label="Use IBIS"),
                 Item(name="btn_sel_tx", show_label=False),
                 Item(name="btn_view_tx", show_label=False),
                 Item(name="tx_use_ts4",
                      label="Use on-die S-parameters.",
                      enabled_when="tx_use_ibis and tx_has_ts4"),
                 enabled_when="tx_ibis_valid == True",
             ),
Exemple #30
0
class OdorControl(traited_plugin.HasTraits_FViewPlugin):
    enabled = traits.Bool(False)
    plugin_name = "Odor Control"
    last_update_time = traits.Float(-np.inf, transient=True)
    save_to_disk = traits.Bool(False, transient=True)
    log_filename_prefix = traits.String('odd_log_data_')
    log_filename = traits.File
    odd_filename = traits.File
    persistent_attr_names = traits.List(['odd_filename', 'log_filename'])
    deliver_odors = traits.Bool(False, transient=True)
    traits_view = View(Group(\
      Item(name="deliver_odors"),\
      Item(name='save_to_disk'),\
      Item(name="odd_filename", editor=FileEditor(dialog_style="open")),\
      Item(name="log_filename_prefix"),\
      Item(name="log_filename", style="readonly")))

    def __init__(self, *args, **kwargs):
        super(OdorControl, self).__init__(*args, **kwargs)
        print "Initialized odor control"
        self._list_of_timestamp_data = []
        self.odors = []
        self.last_trigger_timestamp = {}
        self.sending_odor = False
        self.total_delay = 0
        self.has_started = False
        self.log_file = None
        self.worker = None
        self.context = zmq.Context(1)
        self.client = self.context.socket(zmq.REQ)
        self.client.connect(SERVER_ENDPOINT)
        self.poll = zmq.Poller()
        self.poll.register(self.client, zmq.POLLIN)
        print "Socket initialized on port 5556..."

        self.has_started = True

        # variables for current odor
        self.odor_name = ""
        self.odor = 0
        self.stim = 0
        self.delay = 0

    def _save_to_disk_changed(self):
        print "Changing save to disk"
        if self.has_started:
            if self.save_to_disk:
                self.log_filename = self.log_filename_prefix + time.strftime(
                    '%Y%m%d_%H%M%S') + ".txt"
                self.log_file = open(self.log_filename, 'w')
                print "Saving ", repr(self.log_filename), " to disk..."
            else:
                print "Closed", repr(self.log_filename)
                self.log_file.close()
                self.log_file = None
                self.log_filename = ""

    def _odd_filename_changed(self):
        print "Changing ODD filename"
        try:
            print "Using ODD file ", self.odd_filename
            self.odors = read_odd_file(self.odd_filename.encode('ascii'))
        except IOError:
            print "Couldn't open ODD file ", self.odd_filename

    def quit(self):
        pass
        if self.save_to_disk:
            self.log_file.close()
        if self.has_started and self.worker is not None:
            self.worker.join()

    def camera_starting_notification(self,
                                     cam_id,
                                     pixel_format=None,
                                     max_width=None,
                                     max_height=None):
        self.has_started = True
        pass

    def process_frame(self, cam_id, buf, buf_offset, timestamp, framenumber):
        draw_points = []
        draw_linesegs = []
        now = time.time()
        if self.deliver_odors:
            if not self.sending_odor:
                self.odor_name, self.odor, self.stim, self.delay = self.odors.pop(
                )
                if self.save_to_disk:
                    loginfo = "S %s %d %d %d %d %d %d\n" % (
                        self.odor_name, self.odor, self.stim, self.delay,
                        framenumber, time.mktime(time.gmtime()), timestamp)
                    self.log_file.write(loginfo)
                self.total_delay = self.stim + self.delay
                print "Sending odor ", self.odor_name, " with total delay ", self.total_delay
                self.worker = ODDControlWorker(self.odor, self.stim,
                                               self.delay, self.client,
                                               self.poll)
                self.worker.daemon = True
                self.worker.start()
                self.sending_odor = True
                self.last_update_time = time.time()
            else:
                if (now - self.last_update_time) > self.total_delay:
                    print "Changing odor from ", self.odor_name
                    self.worker.join()
                    self.sending_odor = False
                    if self.save_to_disk:
                        loginfo = "R %s %d %d %d %d %d %d\n" % (
                            self.odor_name, self.odor, self.stim, self.delay,
                            framenumber, time.mktime(time.gmtime()), timestamp)
                        self.log_file.write(loginfo)
                    if len(self.odors) == 0:
                        self.deliver_odors = False
                        # reload odors
                        self.odors = read_odd_file(
                            self.odd_filename.encode('ascii'))
        return draw_points, draw_linesegs