blob: f79ed6ce9abd1d5afe8396243eaebba919d097e3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2006 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.wst.xsd.ui.internal.adt.design.editparts;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MouseListener;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.ui.part.MultiPageEditorPart;
import org.eclipse.wst.xsd.ui.internal.adt.actions.SetInputToGraphView;
import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.model.IFeedbackHandler;
import org.eclipse.wst.xsd.ui.internal.adt.design.editpolicies.ADTDirectEditPolicy;
import org.eclipse.wst.xsd.ui.internal.adt.design.editpolicies.ADTSelectionFeedbackEditPolicy;
import org.eclipse.wst.xsd.ui.internal.adt.editor.ADTMultiPageEditor;
import org.eclipse.wst.xsd.ui.internal.design.figures.CenteredIconFigure;
import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
public class BackToSchemaEditPart extends BaseEditPart implements IFeedbackHandler
{
protected MultiPageEditorPart multipageEditor;
protected ADTDirectEditPolicy adtDirectEditPolicy = new ADTDirectEditPolicy();
protected boolean isEnabled;
protected CenteredIconFigure backToSchema;
protected MouseListener mouseListener;
public BackToSchemaEditPart(ADTMultiPageEditor multipageEditor)
{
super();
this.multipageEditor = multipageEditor;
}
protected IFigure createFigure()
{
backToSchema = new CenteredIconFigure();
backToSchema.setBackgroundColor(ColorConstants.white);
backToSchema.image = XSDEditorPlugin.getPlugin().getIcon("elcl16/schemaview_co.gif");
// TODO, look at why the editpolicy doesn't work
mouseListener = new MouseListener()
{
public void mouseDoubleClicked(org.eclipse.draw2d.MouseEvent me)
{
}
public void mousePressed(org.eclipse.draw2d.MouseEvent me)
{
if (isEnabled)
{
addFeedback();
}
}
public void mouseReleased(org.eclipse.draw2d.MouseEvent me)
{
if (isEnabled)
{
removeFeedback();
SetInputToGraphView action = new SetInputToGraphView(multipageEditor, getModel());
action.run();
}
}
};
backToSchema.addMouseListener(mouseListener);
return backToSchema;
}
public void setEnabled(boolean isEnabled)
{
this.isEnabled = isEnabled;
refreshVisuals();
}
protected void createEditPolicies()
{
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, adtDirectEditPolicy);
installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new ADTSelectionFeedbackEditPolicy());
}
public void performRequest(Request request)
{
if (request.getType() == RequestConstants.REQ_DIRECT_EDIT || request.getType() == RequestConstants.REQ_OPEN)
{
SetInputToGraphView action = new SetInputToGraphView(multipageEditor, getModel());
action.run();
}
}
protected void refreshVisuals()
{
super.refreshVisuals();
CenteredIconFigure figure = (CenteredIconFigure) getFigure();
if (isEnabled)
{
backToSchema.image = XSDEditorPlugin.getPlugin().getIcon("elcl16/schemaview_co.gif");
}
else
{
backToSchema.image = XSDEditorPlugin.getPlugin().getIcon("dlcl16/schemaview_co.gif");
}
figure.refresh();
}
public void addFeedback()
{
CenteredIconFigure figure = (CenteredIconFigure) getFigure();
figure.setMode(CenteredIconFigure.SELECTED);
figure.refresh();
}
public void removeFeedback()
{
CenteredIconFigure figure = (CenteredIconFigure) getFigure();
figure.setMode(CenteredIconFigure.NORMAL);
figure.refresh();
}
public void deactivate()
{
backToSchema.removeMouseListener(mouseListener);
super.deactivate();
}
}