org.yakindu.sct.examples.wizard.pages.MessageArea.java Source code

Java tutorial

Introduction

Here is the source code for org.yakindu.sct.examples.wizard.pages.MessageArea.java

Source

/**
 * Copyright (c) 2016 committers of YAKINDU and others.
 * 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:
 *    committers of YAKINDU - initial API and implementation
 * 
 */
package org.yakindu.sct.examples.wizard.pages;

import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.ui.dialogs.PreferencesUtil;

/**
 * 
 * @author andreas muelder - Initial contribution and API
 * 
 */
public class MessageArea extends Composite {

    private static final String DOWNLOAD_LINK = "http://www.statecharts.org/examples.html";
    protected static final String PREF_PAGE_ID = "com.yakindu.sct.examples";
    protected static final String DISPLAY_ID = "com.yakindu.sct.examples";
    private Label imageLabel;
    private Link textLabel;
    public Button button;
    private Group group;

    public static enum State {
        DOWNLOAD, UPDATE, INSTALL, ERROR, HIDE
    }

    private State state = State.HIDE;

    public MessageArea(Composite parent) {
        super(parent, SWT.NONE);
        setLayout(new FillLayout());
        createControls();
    }

    protected void createControls() {
        group = new Group(this, SWT.NONE);
        group.setLayout(new GridLayout(3, false));
        imageLabel = new Label(group, SWT.NONE);
        GridDataFactory.fillDefaults().grab(false, false).align(SWT.BEGINNING, SWT.CENTER).applyTo(imageLabel);
        textLabel = new Link(group, SWT.WRAP);
        textLabel.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (DOWNLOAD_LINK.equals(e.text)) {
                    Program.launch(DOWNLOAD_LINK);
                } else {
                    PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getShell(), PREF_PAGE_ID,
                            new String[] { DISPLAY_ID }, null);
                    dialog.setSelectedNode("DISPLAY_ID");
                    dialog.open();
                }
            }
        });
        GridDataFactory.fillDefaults().grab(true, false).align(SWT.CENTER, SWT.CENTER).applyTo(textLabel);
        button = new Button(group, SWT.FLAT);
        button.setText("Download");
        GridDataFactory.fillDefaults().grab(false, false).align(SWT.END, SWT.CENTER).applyTo(button);
    }

    public void showDownload() {
        state = State.DOWNLOAD;
        imageLabel.setImage(Display.getDefault().getSystemImage(SWT.ICON_INFORMATION));
        textLabel.setText(
                "No examples found, please download the latest examples.\nYou can <a>change the storage location here.</a>");
        button.setText("Download");
        textLabel.pack();
        button.setVisible(true);
        show();
    }

    public void showUpdate() {
        state = State.UPDATE;
        imageLabel.setImage(Display.getDefault().getSystemImage(SWT.ICON_QUESTION));
        textLabel.setText("Updates available. Do you want to download the new examples?");
        textLabel.pack();
        button.setText("Update");
        button.setVisible(true);
        show();
    }

    public void showProInstall() {
        state = State.INSTALL;
        imageLabel.setImage(Display.getDefault().getSystemImage(SWT.ICON_INFORMATION));
        textLabel.setText(
                "This example requires YAKINDU Statechart Tools professional. Do you want to download it?");
        textLabel.pack();
        button.setText("Download");
        button.setVisible(true);
        show();
    }

    public void showError() {
        state = State.ERROR;
        imageLabel.setImage(Display.getDefault().getSystemImage(SWT.ICON_ERROR));
        textLabel.setText(
                "Unable to download examples. You can manually download them from \n <a>http://www.statecharts.org/examples.html</a>");
        textLabel.pack();
        button.setVisible(false);
        show();
    }

    protected void show() {
        setVisible(true);
        GridData data = (GridData) getLayoutData();
        data.exclude = false;
    }

    public void hide() {
        state = State.HIDE;
        setVisible(false);
        GridData data = (GridData) getLayoutData();
        data.exclude = true;
    }

    public void addSelectionListener(SelectionListener listener) {
        button.addSelectionListener(listener);
    }

    public State getState() {
        return state;
    }
}