/*******************************************************************************
 * Copyright (c) 2000, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.internal;

import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.part.MultiEditor;

/**
 * Implements a pane of each editor inside a MultiEditor.
 */
public class MultiEditorInnerPane extends EditorPane {

    EditorPane parentPane;

    /**
     * Constructor for MultiEditorInnerPane.
     */
    public MultiEditorInnerPane(EditorPane pane, IEditorReference ref,
            WorkbenchPage page, EditorStack workbook) {
        super(ref, page, workbook);
        parentPane = pane;
    }

    /**
     * Returns the outer editor.
     */
    public EditorPane getParentPane() {
        return parentPane;
    }

    /**
     * Update the gradient on the inner editor title bar
     */
    private void updateGradient() {
        MultiEditor multiEditor = (MultiEditor) parentPane.getPartReference()
                .getPart(true);
        if (multiEditor != null) {
            IEditorPart part = (IEditorPart) this.getEditorReference().getPart(
                    true);
            if (part != null) {
				multiEditor.updateGradient(part);
			}
        }
    }

    /**
     * Indicate focus in part.
     */
    public void showFocus(boolean inFocus) {
        super.showFocus(inFocus);
        updateGradient();
    }

    /* (non-Javadoc)
     * Method declared on PartPane.
     */
    /* package */void shellDeactivated() {
        super.shellDeactivated();
        updateGradient();
    }

    /* (non-Javadoc)
     * Method declared on PartPane.
     */
    /* package */void shellActivated() {
        super.shellActivated();
        updateGradient();
    }

}
