Java tutorial
/******************************************************************************* * Copyright (c) 2015 ETAS GmbH. * 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: * Dennis Eder (ETAS GmbH) - initial API and implementation and/or initial documentation *******************************************************************************/ package mbtarranger.widgets.custombutton; import java.net.MalformedURLException; import java.net.URL; import java.nio.file.Paths; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseTrackAdapter; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.osgi.framework.Bundle; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.layout.FillLayout; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.jface.databinding.swt.SWTObservables; import org.eclipse.wb.swt.SWTResourceManager; public class CustomButton extends Composite { private DataBindingContext m_bindingContext; private Image buttonOff; private Image buttonOffHover; private Image buttonOn; private Image buttonOnHover; private Image buttonCurrentlyVisible; protected boolean on; private Canvas canvas_1; public synchronized boolean isOn() { return on; } public synchronized void setOn(boolean on) { this.on = on; } public synchronized Image getButtonCurrentlyVisible() { return buttonCurrentlyVisible; } public synchronized void setButtonCurrentlyVisible(Image buttonCurrentlyVisible) { this.buttonCurrentlyVisible = buttonCurrentlyVisible; } public CustomButton(Composite parent, int style) { super(parent, style); setBackground(SWTResourceManager.getColor(51, 51, 51)); setLayout(new FillLayout(SWT.HORIZONTAL)); canvas_1 = new Canvas(this, SWT.NONE); canvas_1.setBackground(SWTResourceManager.getColor(51, 51, 51)); canvas_1.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { if (isOn()) { setOn(false); setButtonCurrentlyVisible(buttonOffHover); } else { setOn(true); setButtonCurrentlyVisible(buttonOnHover); } canvas_1.redraw(); } @Override public void mouseUp(MouseEvent e) { if (isOn()) { setButtonCurrentlyVisible(buttonOn); } else { setButtonCurrentlyVisible(buttonOff); } canvas_1.redraw(); } }); // canvas_1.addMouseTrackListener(new MouseTrackAdapter() { // @Override // public void mouseEnter(MouseEvent e) { // if (isOn()) { // setButtonCurrentlyVisible(buttonOnHover); // } else { // setButtonCurrentlyVisible(buttonOffHover); // } // canvas_1.redraw(); // } // // @Override // public void mouseExit(MouseEvent e) { // if (isOn()) { // setButtonCurrentlyVisible(buttonOn); // } else { // setButtonCurrentlyVisible(buttonOff); // } // canvas_1.redraw(); // } // // }); canvas_1.setLayout(null); // Label lblNewLabel = new Label(canvas_1, SWT.NONE); // lblNewLabel.setImage(SWTResourceManager.getImage("C:\\Users\\edd9fe\\Documents\\dev\\gitMbtArranger\\core\\icons\\button1off.gif")); // lblNewLabel.setBounds(0, 0, 73, 43); buttonOff = icon("button1off.gif"); buttonOffHover = icon("button1offHover.gif"); buttonOn = icon("button1on.gif"); buttonOnHover = icon("button1onHover.gif"); buttonCurrentlyVisible = buttonOff; canvas_1.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { Canvas canvas = (Canvas) e.widget; canvas.setBackground(SWTResourceManager.getColor(51, 51, 51)); int minX = 1; int minY = 1; int maxX = canvas.getSize().x - minX; int maxY = canvas.getSize().y - minY; org.eclipse.swt.graphics.Transform transform = new org.eclipse.swt.graphics.Transform(e.display); e.gc.getTransform(transform); //transform.setElements( 1.0f,0.0f,-1.0f,0.0f,0.0f,0.0f); // reflect around x axis transform.translate(0, 0); transform.scale(1.0f, 1.0f); //e.gc.setAdvanced(true); e.gc.setTransform(transform); if (buttonCurrentlyVisible != null) { e.gc.drawImage(buttonCurrentlyVisible, 0, 0); } } }); m_bindingContext = initDataBindings(); } protected Image icon(String iconName) { Bundle bundle = Platform.getBundle(mbtarranger.Activator.PLUGIN_ID); if (bundle == null) return null; URL url = FileLocator.find(bundle, new Path("icons/" + iconName), null); ImageDescriptor imageDescriptor = ImageDescriptor.createFromURL(url); return imageDescriptor.createImage(); } protected DataBindingContext initDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // IObservableValue thisObserveSizeObserveWidget = SWTObservables.observeSize(this); IObservableValue canvas_1ObserveSizeObserveWidget = SWTObservables.observeSize(canvas_1); bindingContext.bindValue(thisObserveSizeObserveWidget, canvas_1ObserveSizeObserveWidget, null, null); // return bindingContext; } }