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