Source code for apptools.scripting.recorder_with_ui

# (C) Copyright 2005-2024 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 Recorder subclass that presents a simple user interface.
"""

from traits.api import Code, Button, Int, observe, Any
from traitsui.api import View, Item, Group, HGroup, CodeEditor, spring, Handler

from .recorder import Recorder


###############################################################################
# `CloseHandler` class.
###############################################################################
[docs]class CloseHandler(Handler): """This class cleans up after the UI for the recorder is closed."""
[docs] def close(self, info, is_ok): """This method is invoked when the user closes the UI.""" recorder = info.object recorder.on_ui_close() return True
############################################################################### # `RecorderWithUI` class. ###############################################################################
[docs]class RecorderWithUI(Recorder): """ This class represents a Recorder but with a simple user interface. """ # The code to display code = Code(editor=CodeEditor(line="current_line")) # Button to save script to file. save_script = Button("Save Script") # The current line to show, used by the editor. current_line = Int # The root object which is being recorded. root = Any ######################################## # Traits View. view = View( Group( HGroup( Item("recording", show_label=True), spring, Item("save_script", show_label=False), ), Group(Item("code", show_label=False)), ), width=600, height=360, id="apptools.scripting.recorder_with_ui", buttons=["Cancel"], resizable=True, handler=CloseHandler(), ) ###################################################################### # RecorderWithUI interface. ######################################################################
[docs] def on_ui_close(self): """Called from the CloseHandler when the UI is closed. This method basically stops the recording. """ from .util import stop_recording from .package_globals import get_recorder if get_recorder() is self: stop_recording(self.root, save=False) else: self.recording = False self.unregister(self.root)
###################################################################### # Non-public interface. ###################################################################### @observe("lines.items") def _update_code(self, event): self.code = self.get_code() self.current_line = len(self.lines) + 1 def _save_script_fired(self): self.ui_save()