@Override
    public Component getListCellRendererComponent(
        JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      if (value instanceof StoryComponentPanel) {
        final StoryComponentPanel valuePanel;
        final StoryComponent valueComponent;
        final Boolean isVisible;

        valuePanel = (StoryComponentPanel) value;

        valueComponent = valuePanel.getStoryComponent();
        isVisible = valueComponent.isVisible();

        valuePanel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.LIGHT_GRAY));

        if (isVisible
            && valueComponent.getLibrary().isReadOnly()
            && !isSelected
            && SEModelManager.getInstance().getActiveModel() instanceof LibraryModel
            && !ScriptEase.DEBUG_MODE) valuePanel.setBackground(ScriptEaseUI.TERTIARY_UI);
        else if (isSelected && isVisible) valuePanel.setBackground(list.getSelectionBackground());
        else if (isSelected && !isVisible) valuePanel.setBackground(ScriptEaseUI.SELECTED_COLOUR);
        else if (!isSelected && !isVisible) valuePanel.setBackground(Color.DARK_GRAY);
        else if (!isSelected && isVisible) valuePanel.setBackground(list.getBackground());

        if (valueComponent instanceof CauseIt || valueComponent instanceof ActivityIt) {
          valuePanel.setShowChildren(false);
          valuePanel.getExpansionButton().setCollapsed(true);
        }

        return valuePanel;
      } else if (value instanceof JPanel) {
        return (JPanel) value;
      } else return new JLabel("Error: Not a story component: " + value.toString());
    }
 public StoryComponent getStoryComponentForIndex(int index) {
   StoryComponentPanel panel = getStoryComponentPanelForIndex(index);
   if (panel != null) {
     return panel.getStoryComponent();
   } else {
     return null;
   }
 }
 /**
  * Returns the index in the StoryComponentPanelJList where the StoryComponentPanel representing
  * the StoryComponent resides.
  *
  * <p>returns -1 if no StoryComponentPanel is found to represent the given StoryComponent
  *
  * @param component
  * @return
  */
 public int getIndexOfStoryComponent(StoryComponent component) {
   final DefaultListModel listModel = (DefaultListModel) this.getModel();
   int returnIndex = -1;
   for (int panelIndex = 0; panelIndex < listModel.size(); panelIndex++) {
     final Object element = listModel.elementAt(panelIndex);
     if (element instanceof StoryComponentPanel) {
       final StoryComponentPanel panel = (StoryComponentPanel) element;
       final StoryComponent panelComponent = panel.getStoryComponent();
       if (panelComponent == component) {
         returnIndex = panelIndex;
         break;
       }
     }
   }
   return returnIndex;
 }