add sliuder variant
@ -56,13 +56,13 @@ import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.graphics.TextLayout;
|
||||
import org.eclipse.swt.layout.FillLayout;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Canvas;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
@ -71,7 +71,6 @@ import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.swt.widgets.Menu;
|
||||
import org.eclipse.swt.widgets.ScrollBar;
|
||||
import org.eclipse.swt.widgets.Slider;
|
||||
import org.eclipse.swt.widgets.Widget;
|
||||
import org.eclipse.wb.swt.SWTResourceManager;
|
||||
|
||||
@ -94,6 +93,8 @@ import com.minres.scviewer.database.ui.IWaveformStyleProvider;
|
||||
import com.minres.scviewer.database.ui.IWaveformView;
|
||||
import com.minres.scviewer.database.ui.IWaveformZoom;
|
||||
import com.minres.scviewer.database.ui.TrackEntry;
|
||||
import com.minres.scviewer.database.ui.swt.internal.slider.ImageButton;
|
||||
import com.minres.scviewer.database.ui.swt.internal.slider.RangeSlider;
|
||||
import com.minres.scviewer.database.ui.swt.sb.FlatScrollBar;
|
||||
|
||||
public class WaveformView implements IWaveformView {
|
||||
@ -345,11 +346,37 @@ public class WaveformView implements IWaveformView {
|
||||
waveformCanvas = new WaveformCanvas(waveformPane, SWT.NONE | SWT.V_SCROLL /*| SWT.H_SCROLL*/, styleProvider);
|
||||
waveformCanvas.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
|
||||
|
||||
Composite timeSliderPane = new WaveformSlider(waveformPane, SWT.NONE);
|
||||
GridData gd_timeSlider = new GridData(SWT.FILL, SWT.BOTTOM, false, false, 1, 1);
|
||||
gd_timeSlider.heightHint = 18;
|
||||
timeSliderPane.setLayoutData(gd_timeSlider);
|
||||
|
||||
//Composite timeSliderPane = new WaveformSlider(waveformPane, SWT.NONE);
|
||||
Composite timeSliderPane = new Composite(waveformPane, SWT.NONE);
|
||||
// timeSliderPane.setBackground(SWTResourceManager.getColor(SWT.COLOR_RED));
|
||||
GridData gd_timeSliderPane = new GridData(SWT.FILL, SWT.BOTTOM, false, false, 1, 1);
|
||||
// gd_timeSliderPane.heightHint = 22;
|
||||
timeSliderPane.setLayoutData(gd_timeSliderPane);
|
||||
GridLayout gl_timeSliderPane = new GridLayout(3, false);
|
||||
gl_timeSliderPane.marginHeight=0;
|
||||
gl_timeSliderPane.marginWidth=0;
|
||||
gl_timeSliderPane.horizontalSpacing=0;
|
||||
gl_timeSliderPane.verticalSpacing=0;
|
||||
timeSliderPane.setLayout(gl_timeSliderPane);
|
||||
ImageButton b1 = new ImageButton(timeSliderPane, SWT.NONE);
|
||||
GridData gd_b1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
|
||||
gd_b1.widthHint=18;
|
||||
gd_b1.heightHint=18;
|
||||
b1.setLayoutData(gd_b1);
|
||||
b1.setImage(SWTResourceManager.getImage(RangeSlider.class, "bullet_left.png"));
|
||||
|
||||
Composite timeSlider = new RangeSlider(timeSliderPane, SWT.ON|SWT.HIGH|SWT.SMOOTH|SWT.CONTROL);
|
||||
GridData gd_timeSlide = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
|
||||
timeSlider.setLayoutData(gd_timeSlide);
|
||||
|
||||
ImageButton b2 = new ImageButton(timeSliderPane, SWT.NONE);
|
||||
GridData gd_b2 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
|
||||
gd_b2.widthHint=18;
|
||||
gd_b2.heightHint=18;
|
||||
b2.setLayoutData(gd_b2);
|
||||
b2.setImage(SWTResourceManager.getImage(RangeSlider.class, "bullet_right.png"));
|
||||
|
||||
// create the name pane
|
||||
createTextPane(namePane, "Name");
|
||||
|
||||
|
@ -0,0 +1,129 @@
|
||||
package com.minres.scviewer.database.ui.swt.internal.slider;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import org.eclipse.swt.graphics.GC;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.ImageData;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.graphics.Transform;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
|
||||
public class ImageButton extends Composite
|
||||
{
|
||||
private Color textColor;
|
||||
private Image image;
|
||||
private Image grayImage;
|
||||
private ImageData imageData;
|
||||
private String text = "";
|
||||
private int width;
|
||||
private int height;
|
||||
private boolean hover;
|
||||
|
||||
public ImageButton(Composite parent, int style)
|
||||
{
|
||||
super(parent, style);
|
||||
|
||||
textColor = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
|
||||
|
||||
/* Add dispose listener for the image */
|
||||
addListener(SWT.Dispose, event -> {
|
||||
if (image != null)
|
||||
image.dispose();
|
||||
});
|
||||
|
||||
/* Add custom paint listener that paints the stars */
|
||||
addListener(SWT.Paint, event -> {
|
||||
paintControl(event);
|
||||
});
|
||||
|
||||
/* Listen for click events */
|
||||
addListener(SWT.MouseDown, event -> {
|
||||
System.out.println("Click");
|
||||
});
|
||||
addListener(SWT.MouseDown, event -> {
|
||||
});
|
||||
|
||||
addListener(SWT.MouseUp, event -> {
|
||||
});
|
||||
|
||||
addListener(SWT.MouseMove, event -> {
|
||||
hover=false;
|
||||
redraw();
|
||||
});
|
||||
|
||||
addListener(SWT.MouseWheel, event -> {
|
||||
});
|
||||
|
||||
addListener(SWT.MouseHover, event -> {
|
||||
hover=true;
|
||||
redraw();
|
||||
});
|
||||
|
||||
addListener(SWT.MouseDoubleClick, event -> {
|
||||
});
|
||||
}
|
||||
|
||||
private void paintControl(Event event) {
|
||||
GC gc = event.gc;
|
||||
|
||||
if (image != null)
|
||||
{
|
||||
// gc.drawImage(image, 1, 1);
|
||||
// if(hover) {
|
||||
// Rectangle rect = image.getBounds ();
|
||||
// Transform tr = new Transform (event.display);
|
||||
// tr.setElements (1, 0, 0, -1, 1, 2*(1+rect.height));
|
||||
// gc.setTransform (tr);
|
||||
// gc.drawImage (image, 1, 1);
|
||||
// gc.setTransform (null);
|
||||
// }
|
||||
if(hover) {
|
||||
gc.drawImage(image, 1, 1);
|
||||
} else {
|
||||
gc.drawImage(grayImage, 1, 1);
|
||||
}
|
||||
Point textSize = gc.textExtent(text);
|
||||
gc.setForeground(textColor);
|
||||
gc.drawText(text, (width - textSize.x) / 2 + 1, (height - textSize.y) / 2 + 1, true);
|
||||
}
|
||||
}
|
||||
|
||||
public void setImage(Image img)
|
||||
{
|
||||
image = new Image(Display.getDefault(), img, SWT.IMAGE_COPY);
|
||||
grayImage = new Image(Display.getDefault(),img,SWT.IMAGE_GRAY);
|
||||
width = img.getBounds().width;
|
||||
height = img.getBounds().height;
|
||||
imageData = img.getImageData();
|
||||
redraw();
|
||||
}
|
||||
|
||||
public void setText(String text)
|
||||
{
|
||||
this.text = text;
|
||||
redraw();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Point computeSize(int wHint, int hHint, boolean changed)
|
||||
{
|
||||
int overallWidth = width;
|
||||
int overallHeight = height;
|
||||
|
||||
/* Consider hints */
|
||||
if (wHint != SWT.DEFAULT && wHint < overallWidth)
|
||||
overallWidth = wHint;
|
||||
|
||||
if (hHint != SWT.DEFAULT && hHint < overallHeight)
|
||||
overallHeight = hHint;
|
||||
|
||||
/* Return computed dimensions plus border */
|
||||
return new Point(overallWidth + 2, overallHeight + 2);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package com.minres.scviewer.database.ui.swt.internal.slider;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class ReflectionUtils {
|
||||
/**
|
||||
* Call a method using introspection (so ones can call a private or protected method)
|
||||
* @param object object on which the method will be called
|
||||
* @param methodName method name
|
||||
* @param args arguments of this method (can be null)
|
||||
* @return the value returned by this method (if this method returns a value)
|
||||
*/
|
||||
public static Object callMethod(final Object object, final String methodName, final Object... args) {
|
||||
if (object == null) {
|
||||
return null;
|
||||
}
|
||||
final Class<?>[] array = new Class<?>[args == null ? 0 : args.length];
|
||||
int index = 0;
|
||||
if (args != null) {
|
||||
for (final Object o : args) {
|
||||
array[index++] = o == null ? Object.class : o.getClass();
|
||||
}
|
||||
}
|
||||
|
||||
return callMethodWithClassType(object, methodName, array, args);
|
||||
}
|
||||
|
||||
private static Object callMethodWithClassType(final Object object, final String methodName, final Class<?>[] array, final Object... args) {
|
||||
Class<?> currentClass = object.getClass();
|
||||
Method method = null;
|
||||
while (currentClass != null) {
|
||||
try {
|
||||
method = currentClass.getDeclaredMethod(methodName, array);
|
||||
break;
|
||||
} catch (final NoSuchMethodException nsme) {
|
||||
currentClass = currentClass.getSuperclass();
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
method.setAccessible(true);
|
||||
return method.invoke(object, args);
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package com.minres.scviewer.database.ui.swt.internal.slider;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionListener;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.swt.widgets.Listener;
|
||||
import org.eclipse.swt.widgets.TypedListener;
|
||||
|
||||
public class SelectionListenerUtil {
|
||||
/**
|
||||
* Add a <code>SelectionListener</code> to a given Control
|
||||
*
|
||||
* @param control control on which the selection listener is added
|
||||
* @param listener listener to add
|
||||
*/
|
||||
public static void addSelectionListener(final Control control, final SelectionListener listener) {
|
||||
if (listener == null) {
|
||||
SWT.error(SWT.ERROR_NULL_ARGUMENT);
|
||||
}
|
||||
TypedListener typedListener = new TypedListener(listener);
|
||||
control.addListener(SWT.Selection, typedListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a <code>SelectionListener</code> of a given Control
|
||||
*
|
||||
* @param control control on which the selection listener is removed
|
||||
* @param listener listener to remove
|
||||
*/
|
||||
public static void removeSelectionListener(final Control control, final SelectionListener listener) {
|
||||
if (listener == null) {
|
||||
SWT.error(SWT.ERROR_NULL_ARGUMENT);
|
||||
}
|
||||
final Listener[] listeners = control.getListeners(SWT.Selection);
|
||||
for (Listener l : listeners) {
|
||||
if (l instanceof TypedListener) {
|
||||
TypedListener typedListener = (TypedListener) l;
|
||||
if (typedListener.getEventListener() == listener) {
|
||||
ReflectionUtils.callMethod(control, "removeListener", SWT.Selection, ((TypedListener) l).getEventListener());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fire the selection listeners of a given control
|
||||
*
|
||||
* @param control the control that fires the event
|
||||
* @param sourceEvent mouse event
|
||||
* @return true if the selection could be changed, false otherwise
|
||||
*/
|
||||
public static boolean fireSelectionListeners(final Control control, final Event sourceEvent) {
|
||||
for (final Listener listener : control.getListeners(SWT.Selection)) {
|
||||
final Event event = new Event();
|
||||
|
||||
event.button = sourceEvent==null?1:sourceEvent.button;
|
||||
event.display = control.getDisplay();
|
||||
event.item = null;
|
||||
event.widget = control;
|
||||
event.data = sourceEvent == null ? null : sourceEvent.data;
|
||||
event.time = sourceEvent == null ? 0 : sourceEvent.time;
|
||||
event.x = sourceEvent == null ? 0 : sourceEvent.x;
|
||||
event.y = sourceEvent == null ? 0 : sourceEvent.y;
|
||||
event.type = SWT.Selection;
|
||||
|
||||
listener.handleEvent(event);
|
||||
if (!event.doit) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 307 B |
After Width: | Height: | Size: 307 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 358 B |
After Width: | Height: | Size: 386 B |
After Width: | Height: | Size: 366 B |
After Width: | Height: | Size: 345 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 430 B |