/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.biomoby.client.gui.ontology;

import java.awt.Color;
import javax.swing.BoxLayout;
import org.inb.biomoby.client.gui.AbstractMobyComponent;
import org.inb.biomoby.client.gui.IDynamicComponent;
import org.inb.biomoby.client.gui.IDynamicComponent.MobyComponentListener;
import org.inb.biomoby.client.gui.ITransformable;
import org.inb.biomoby.client.gui.ISequenceCoordinateTransformer;
import org.inb.biomoby.client.gui.ISequenceDependent;
import org.inb.biomoby.client.gui.auxiliary.MultilineCommentedAASequenceDescriptionPane;
import org.inb.biomoby.client.gui.ontology.CommentedAASequenceComponent.CommentedAASequenceListener;
import org.inb.biomoby.client.gui.ontology.GenericSequenceComponent.GenericSequenceListener;
import org.inb.biomoby.shared.ontology.CommentedAASequence;

/**
 * @author Dmitry Repchevsky
 */

public class CommentedAASequenceComponent<T extends CommentedAASequence> extends AbstractMobyComponent<T>
        implements IDynamicComponent<CommentedAASequenceListener>,
                   ISequenceDependent,
                   ITransformable
{
    private GenericSequenceComponent genericSequencePanel;

    private MultilineCommentedAASequenceDescriptionPane description;
    
    private CommentedAASequenceComponent(GenericSequenceComponent genericSequencePanel)
    {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

        add(genericSequencePanel);
        
        description = new MultilineCommentedAASequenceDescriptionPane();
        add(description);
        
        this.genericSequencePanel = genericSequencePanel;
    }

    public CommentedAASequenceComponent()
    {
        this(new GenericSequenceComponent());
    }
    
    public CommentedAASequenceComponent(CommentedAASequence sequence)
    {
        this(new GenericSequenceComponent(sequence));

        description.setCommentedAASequence(sequence);
    }

    @Override
    public void setPosition(int position)
    {
        genericSequencePanel.setPosition(position);
    }

    @Override
    public void setSequenceVisible(boolean isVisible)
    {
        genericSequencePanel.setVisible(isVisible);
    }
    
    @Override
    public ISequenceCoordinateTransformer getTransformer()
    {
        return genericSequencePanel.getTransformer();
    }

    @Override
    public void setTransformer(ISequenceCoordinateTransformer transformer)
    {
    }
    
    @Override
    public void addListener(MobyComponentListener listener)
    {
        genericSequencePanel.addListener(listener);
    }

    @Override
    public void removeListener(MobyComponentListener listener)
    {
        genericSequencePanel.removeListener(listener);
    }

    public void setFontStyle(int style)
    {
        if (description != null)
        {
            description.setFontStyle(style);
        }   
    }
    
    @Override
    public void setOpaque(boolean isOpaque)
    {
        super.setOpaque(isOpaque);
        
        if (genericSequencePanel != null)
        {
            genericSequencePanel.setOpaque(isOpaque);
        }
        
        if (description != null)
        {
            description.setOpaque(isOpaque);
        }
    }

    @Override
    public void setBackground(Color bg)
    {
        super.setBackground(bg);
        
        if (genericSequencePanel != null)
        {
            genericSequencePanel.setBackground(bg);
        }
        
        if (description != null)
        {
            description.setBackground(bg);
        }
    }

    public static interface CommentedAASequenceListener extends GenericSequenceListener {}
}
