blob: dc9445c64974e467e437c6bcd028847125c0bb73 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.tests.multieditor;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.MultiEditor;
import org.eclipse.ui.tests.harness.util.CallHistory;
/**
* Implementation of a TiledEditor. This is the testable version copied from bug
* 42641.
*/
public class TiledEditor extends MultiEditor {
private CLabel innerEditorTitle[];
public CallHistory callHistory;
public TiledEditor() {
super();
callHistory = new CallHistory(this);
}
/**
* technically not part of our framework API, but it will mark when the
* widgets were disposed.
*/
public void widgetsDisposed() {
callHistory.add("widgetsDisposed");
}
/*
* @see IWorkbenchPart#createPartControl(Composite)
*/
public void createPartControl(Composite parent) {
callHistory.add("createPartControl");
parent.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
widgetsDisposed();
}
});
parent = new Composite(parent, SWT.BORDER);
parent.setLayout(new FillLayout());
SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
IEditorPart innerEditors[] = getInnerEditors();
for (int i = 0; i < innerEditors.length; i++) {
final IEditorPart e = innerEditors[i];
ViewForm viewForm = new ViewForm(sashForm, SWT.NONE);
viewForm.marginWidth = 0;
viewForm.marginHeight = 0;
createInnerEditorTitle(i, viewForm);
Composite content = createInnerPartControl(viewForm, e);
viewForm.setContent(content);
updateInnerEditorTitle(e, innerEditorTitle[i]);
final int index = i;
e.addPropertyListener(new IPropertyListener() {
public void propertyChanged(Object source, int property) {
if (property == IEditorPart.PROP_DIRTY
|| property == IWorkbenchPart.PROP_TITLE)
if (source instanceof IEditorPart)
updateInnerEditorTitle((IEditorPart) source,
innerEditorTitle[index]);
}
});
}
}
/**
* Draw the gradient for the specified editor.
*/
protected void drawGradient(IEditorPart innerEditor, Gradient g) {
CLabel label = innerEditorTitle[getIndex(innerEditor)];
if ((label == null) || label.isDisposed())
return;
label.setForeground(g.fgColor);
label.setBackground(g.bgColors, g.bgPercents);
}
/*
* Create the label for each inner editor.
*/
protected void createInnerEditorTitle(int index, ViewForm parent) {
CLabel titleLabel = new CLabel(parent, SWT.SHADOW_NONE);
// hookFocus(titleLabel);
titleLabel.setAlignment(SWT.LEFT);
titleLabel.setBackground(null, null);
parent.setTopLeft(titleLabel);
if (innerEditorTitle == null)
innerEditorTitle = new CLabel[getInnerEditors().length];
innerEditorTitle[index] = titleLabel;
}
/*
* Update the tab for an editor. This is typically called by a site when the
* tab title changes.
*/
public void updateInnerEditorTitle(IEditorPart editor, CLabel label) {
if ((label == null) || label.isDisposed())
return;
String title = editor.getTitle();
if (editor.isDirty())
title = "*" + title; //$NON-NLS-1$
label.setText(title);
Image image = editor.getTitleImage();
if (image != null)
if (!image.equals(label.getImage()))
label.setImage(image);
label.setToolTipText(editor.getTitleToolTip());
}
/*
*
*/
protected int getIndex(IEditorPart editor) {
IEditorPart innerEditors[] = getInnerEditors();
for (int i = 0; i < innerEditors.length; i++) {
if (innerEditors[i] == editor)
return i;
}
return -1;
}
//
// These are public methods from the parent that are overriden to
// add them to the call history.
//
public Composite createInnerPartControl(Composite parent, IEditorPart e) {
callHistory.add("createInnerPartControl");
return super.createInnerPartControl(parent, e);
}
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
callHistory.add("init");
super.init(site, input);
}
public void setFocus() {
callHistory.add("setFocus");
super.setFocus();
}
public void updateGradient(IEditorPart editor) {
callHistory.add("updateGradient");
super.updateGradient(editor);
}
public void setInitializationData(IConfigurationElement cfig,
String propertyName, Object data) {
callHistory.add("setInitializationData");
super.setInitializationData(cfig, propertyName, data);
}
public void dispose() {
callHistory.add("dispose");
super.dispose();
}
}