package org.bundlemaker.core.ui.editor.dsm.widget.internal.sidemarker;
import org.bundlemaker.core.ui.editor.dsm.widget.IDsmColorScheme;
import org.bundlemaker.core.ui.editor.dsm.widget.IDsmContentProvider;
import org.bundlemaker.core.ui.editor.dsm.widget.internal.util.BoxSize;
import org.eclipse.core.runtime.Assert;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.MouseEvent;
import org.eclipse.draw2d.MouseListener;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontMetrics;
/**
* <p>
* Abstract base class for all side marker implementations.
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*/
/**
* <p>
* </p>
*
* @author Gerd Wütherich (gerd@gerd-wuetherich.de)
*
*/
public abstract class AbstractSideMarker extends Figure {
/** - */
private IDsmContentProvider _contentProvider;
/** - */
private ILabelProvider _labelProvider;
/** - */
private IDsmColorScheme _colorScheme;
/** the marked item */
private int _markedItem = -1;
/** - */
private FontMetrics _fontMetrics;
/** - */
private BoxSize _boxSize;
/**
* <p>
* Creates a new instance of type {@link AbstractSideMarker}.
* </p>
*
* @param contentProvider
* @param cycleDetector
* @param labelProvider
* @param colorScheme
*/
public AbstractSideMarker(IDsmContentProvider contentProvider, ILabelProvider labelProvider,
IDsmColorScheme colorScheme) {
//
Assert.isNotNull(contentProvider);
Assert.isNotNull(labelProvider);
Assert.isNotNull(colorScheme);
//
_contentProvider = contentProvider;
_labelProvider = labelProvider;
_colorScheme = colorScheme;
//
_boxSize = new BoxSize();
//
addMouseListener(new MouseListener.Stub() {
@Override
public void mouseReleased(MouseEvent me) {
if ((me.getState() & SWT.ALT) != 0) {
System.out.println("ALT");
}
if ((me.getState() & SWT.SHIFT) != 0) {
System.out.println("SHIFT");
}
if ((me.getState() & SWT.CONTROL) != 0) {
System.out.println("CONTROL");
}
onMouseReleased(me);
}
});
}
public ILabelProvider getLabelProvider() {
return _labelProvider;
}
/**
* <p>
* </p>
*
* @return
*/
public BoxSize getBoxSize() {
return _boxSize;
}
/**
* <p>
* </p>
*
* @param boxSize
*/
public void setBoxSize(BoxSize boxSize) {
Assert.isNotNull(boxSize);
_boxSize = boxSize;
}
protected abstract void onMouseReleased(MouseEvent me);
/**
* {@inheritDoc}
*/
public final void mark(int i) {
int oldValue = _markedItem;
_markedItem = i;
onMark(oldValue, _markedItem);
}
/**
* <p>
* </p>
*
* @return
*/
public IDsmContentProvider getContentProvider() {
return _contentProvider;
}
/**
* <p>
* </p>
*
* @param oldValue
* @param x
*/
protected abstract void onMark(int oldValue, int x);
/**
* <p>
* </p>
*
*/
protected abstract void resetSize();
/**
* <p>
* </p>
*
* @return
*/
protected IDsmColorScheme getColorScheme() {
return _colorScheme;
}
/**
* <p>
* </p>
*
* @param count
* @return
*/
protected final int getHorizontalSliceSize(int count) {
return (getBoxSize().getHorizontalBoxSize() * count);
}
/**
* <p>
* </p>
*
* @param count
* @return
*/
protected final int getVerticalSliceSize(int count) {
return (getBoxSize().getVerticalBoxSize() * count);
}
/**
* <p>
* </p>
*
* @return
*/
public final int getMarkedItem() {
return _markedItem;
}
/**
* <p>
* </p>
*
* @return
*/
public int getFontHeight() {
if (_fontMetrics == null) {
_fontMetrics = FigureUtilities.getFontMetrics(getFont());
}
return _fontMetrics.getHeight();
}
public void setModel(IDsmContentProvider contentProvider) {
_contentProvider = contentProvider;
}
}