package org.eclipse.iee.editor.core.pad;
import java.awt.Rectangle;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.iee.core.document.PadDocumentPart;
import org.eclipse.iee.editor.core.bindings.IObservableValue;
import org.eclipse.iee.editor.core.container.Container;
import org.eclipse.iee.editor.core.container.ContainerManager;
import org.eclipse.iee.editor.core.pad.common.text.AbstractVisualTextEditor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.services.IDisposable;
import com.google.common.base.Optional;
public abstract class Pad<T extends PadDocumentPart, F extends IFigure> extends AbstractVisualTextEditor<T, F> implements IDisposable {
protected Container fContainer;
private final RectangleFigure selectionFigure;
public Pad() {
selectionFigure = new RectangleFigure();
selectionFigure.setForegroundColor(IPadConfiguration.BORDER_COLOR_SELECTED);
selectionFigure.setLineWidth(1);
selectionFigure.setFill(false);
}
public String getContainerManagerID() {
if (fContainer == null) {
return null;
}
return fContainer.getContainerManagerID();
}
public boolean isContainerAttached() {
return fContainer != null;
}
public Container getContainer() {
return fContainer;
}
public void setSelected(boolean isSelected) {
updateSelectionFrame(isSelected);
}
public void updateSelectionFrame(boolean isSelected) {
if (isSelected) {
addSelectionFrame();
} else if (selectionFigure.getParent() != null) {
removeSelectionFrame();
}
}
private void removeSelectionFrame() {
selectionFigure.getParent().remove(selectionFigure);
}
private void addSelectionFrame() {
IFigure figure = fContainer.getFeedbackFigure();
Rectangle bounds = getBounds();
updateSelectionBounds(bounds);
figure.add(selectionFigure);
}
protected void updateSelectionBounds(Rectangle bounds) {
selectionFigure.setBounds(new org.eclipse.draw2d.geometry.Rectangle(bounds.x - 2, bounds.y - 2, bounds.width + 4, bounds.height + 4));
}
public void moveCaretToCurrentPad() {
int containerOffset = fContainer.getPosition().getOffset();
fContainer.getContainerManager().getUserInteractionManager()
.moveCaretTo(containerOffset);
}
public void focusOnMainEditor() {
fContainer.getContainerManager().getUserInteractionManager()
.focusOnMainEditor();
}
public abstract void attachContainer(Container container);
public void addMouseListeners(Composite control) {
MouseEventManager mouseManager = new MouseEventManager(control);
control.addMouseTrackListener(mouseManager);
control.addMouseMoveListener(mouseManager);
control.addMouseListener(mouseManager);
}
public void detachContainer() {
Assert.isLegal(isContainerAttached(), "No container attached");
fContainer = null;
}
public abstract void activate();
public void deactivate() {
}
/**
* Save pad
*/
public void save() {
};
public abstract String getType();
public abstract String getTex();
public void updateData(Map<String, String> params, String value) {
}
public void moveCaretToContainerTail() {
Container c = getContainer();
ContainerManager containerManager = c.getContainerManager();
containerManager.getUserInteractionManager().moveCaretTo(
c.getPosition().getOffset() + c.getPosition().getLength());
}
public T getDocumentPart() {
return (T) fContainer.getPadPart();
}
public void bindDocumentPart(IObservableValue<T> model) {
setValue(Optional.of(model));
}
public String getContainerID() {
return getDocumentPart().getId();
}
public void dispose() {
}
public abstract void setBounds(Rectangle newBounds);
public abstract void setVisible(boolean isVisible);
@Override
public void setActive(boolean b) {
if (b) {
activate();
} else {
deactivate();
}
}
@Override
public boolean isSelectable() {
return true;
}
}