mbtarranger.widgets.custombutton.CustomButton.java Source code

Java tutorial

Introduction

Here is the source code for mbtarranger.widgets.custombutton.CustomButton.java

Source

/*******************************************************************************
 * 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;
    }
}