from enthought.traits.api import Dict, HasStrictTraits, Instance, List, Str, \
     Tuple

# Local imports.
from task_layout import TaskLayout


class TaskWindowLayout(HasStrictTraits):
    """ A picklable object that describes the layout and state of a TaskWindow.
    """

    # The ID of the active task. If unspecified, the first task will be active.
    active_task = Str

    # The IDs of all the tasks attached to the window.
    tasks = List(Str)

    # The position of the window.
    position = Tuple(-1, -1)

    # The size of the window.
    size = Tuple(800, 600)

    # A map from task IDs to their respective layouts. Set by the framework.
    layout_state = Dict(Str, Instance(TaskLayout))

from enthought.traits.api import Dict, HasStrictTraits, Instance, List, Str, \
     Tuple

# Local imports.
from task_layout import TaskLayout


class TaskWindowLayout(HasStrictTraits):
    """ A picklable object that describes the layout and state of a TaskWindow.
    """

    # The ID of the active task. If unspecified, the first task will be active.
    active_task = Str

    # The IDs of all the tasks attached to the window.
    tasks = List(Str)

    # The position of the window.
    position = Tuple(-1, -1)

    # The size of the window.
    size = Tuple(800, 600)

    # A map from task IDs to their respective layouts. Set by the framework.
    layout_state = Dict(Str, Instance(TaskLayout))

    def get_active_task(self):
        """ Returns the ID of the active task in the layout, or None if there is
            no active task.
        """
        if self.active_task:
            return self.active_task
        elif self.tasks:
            return self.tasks[0]
        return None

    def is_equivalent_to(self, layout):
        """ Returns whether two layouts are equivalent, i.e. whether they
            contain the same tasks.
        """
        return isinstance(layout, TaskWindowLayout) and \
            self.get_active_task() == layout.get_active_task() and \
            self.tasks == layout.tasks

Add a few useful utility methods to TaskWindowLayout.
Add a few useful utility methods to TaskWindowLayout.

  from enthought.traits.api import Dict, HasStrictTraits, Instance, List, Str, \
       Tuple
  
  # Local imports.
  from task_layout import TaskLayout
  
  
  class TaskWindowLayout(HasStrictTraits):
      """ A picklable object that describes the layout and state of a TaskWindow.
      """
  
      # The ID of the active task. If unspecified, the first task will be active.
      active_task = Str
  
      # The IDs of all the tasks attached to the window.
      tasks = List(Str)
  
      # The position of the window.
      position = Tuple(-1, -1)
  
      # The size of the window.
      size = Tuple(800, 600)
  
      # A map from task IDs to their respective layouts. Set by the framework.
      layout_state = Dict(Str, Instance(TaskLayout))
  
+     def get_active_task(self):
+         """ Returns the ID of the active task in the layout, or None if there is
+             no active task.
+         """
+         if self.active_task:
+             return self.active_task
+         elif self.tasks:
+             return self.tasks[0]
+         return None
+ 
+     def is_equivalent_to(self, layout):
+         """ Returns whether two layouts are equivalent, i.e. whether they
+             contain the same tasks.
+         """
+         return isinstance(layout, TaskWindowLayout) and \
+             self.get_active_task() == layout.get_active_task() and \
+             self.tasks == layout.tasks
+ 
Add a few useful utility methods to TaskWindowLayout.
## Code Before:
from enthought.traits.api import Dict, HasStrictTraits, Instance, List, Str, \
     Tuple

# Local imports.
from task_layout import TaskLayout


class TaskWindowLayout(HasStrictTraits):
    """ A picklable object that describes the layout and state of a TaskWindow.
    """

    # The ID of the active task. If unspecified, the first task will be active.
    active_task = Str

    # The IDs of all the tasks attached to the window.
    tasks = List(Str)

    # The position of the window.
    position = Tuple(-1, -1)

    # The size of the window.
    size = Tuple(800, 600)

    # A map from task IDs to their respective layouts. Set by the framework.
    layout_state = Dict(Str, Instance(TaskLayout))

## Instruction:
Add a few useful utility methods to TaskWindowLayout.
## Code After:
from enthought.traits.api import Dict, HasStrictTraits, Instance, List, Str, \
     Tuple

# Local imports.
from task_layout import TaskLayout


class TaskWindowLayout(HasStrictTraits):
    """ A picklable object that describes the layout and state of a TaskWindow.
    """

    # The ID of the active task. If unspecified, the first task will be active.
    active_task = Str

    # The IDs of all the tasks attached to the window.
    tasks = List(Str)

    # The position of the window.
    position = Tuple(-1, -1)

    # The size of the window.
    size = Tuple(800, 600)

    # A map from task IDs to their respective layouts. Set by the framework.
    layout_state = Dict(Str, Instance(TaskLayout))

    def get_active_task(self):
        """ Returns the ID of the active task in the layout, or None if there is
            no active task.
        """
        if self.active_task:
            return self.active_task
        elif self.tasks:
            return self.tasks[0]
        return None

    def is_equivalent_to(self, layout):
        """ Returns whether two layouts are equivalent, i.e. whether they
            contain the same tasks.
        """
        return isinstance(layout, TaskWindowLayout) and \
            self.get_active_task() == layout.get_active_task() and \
            self.tasks == layout.tasks
