package org.craftyourmod.mineclipse.installer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.craftyourmod.mineclipse.installer.pages.ConfigPage;
import org.craftyourmod.mineclipse.installer.pages.InstallPage;
import org.craftyourmod.mineclipse.installer.pages.LicencePage;
import org.craftyourmod.mineclipse.installer.pages.SystemTestPage;
import org.craftyourmod.mineclipse.installer.pages.WelcomePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.wb.swt.SWTResourceManager;
import org.mihalis.opal.obutton.AbstractButtonRenderer;
import org.mihalis.opal.obutton.DefaultButtonRenderer;
import org.mihalis.opal.obutton.OButton;
import org.mihalis.opal.utils.SWTGraphicUtil;
import org.mihalis.opal.flatButton.FlatButton;
import com.richclientgui.toolbox.progressIndicator.CoolProgressBar;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.custom.StackLayout;
public class Installer {
private static final StackLayout LAYOUT = new StackLayout();
List<Composite> pages = new ArrayList<>();
public HashMap<String, String> config = new HashMap<>();
int i = 0;
private boolean hasNext = true;
/**
* This is the grey theme button renderer
*/
public static class GreyButtonRenderer extends AbstractButtonRenderer {
private static GreyButtonRenderer instance;
private Color FIRST_BACKGROUND_COLOR = SWTGraphicUtil
.createDisposableColor(87, 87, 87);
private Color SECOND_BACKGROUND_COLOR = SWTGraphicUtil
.createDisposableColor(48, 48, 48);
private GreyButtonRenderer() {
super();
}
@Override
protected Color getFontColor() {
return Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
}
@Override
protected Color getFirstBackgroundColor() {
if (FIRST_BACKGROUND_COLOR == null)
FIRST_BACKGROUND_COLOR = SWTGraphicUtil.createDisposableColor(
87, 87, 87);
return FIRST_BACKGROUND_COLOR;
}
@Override
protected Color getSecondBackgroundColor() {
if (SECOND_BACKGROUND_COLOR == null)
SECOND_BACKGROUND_COLOR = SWTGraphicUtil.createDisposableColor(
48, 48, 48);
return SECOND_BACKGROUND_COLOR;
}
public static GreyButtonRenderer getInstance() {
if (instance == null) {
instance = new GreyButtonRenderer();
}
return instance;
}
}
protected Object result;
protected Shell shell;
/**
* Create the dialog.
*
* @param parent
* @param style
*/
public Installer() {
}
private Composite current, previous;
private boolean toPrevious;
private OButton btnNext;
private OButton btnPrev;
protected boolean hasPrev;
public void showPage(Composite c) {
if (c == null || c == current) {
return;
}
if (!toPrevious) {
previous = current;
btnPrev.setEnabled(true);
} else {
toPrevious = false;
btnPrev.setEnabled(false);
}
LAYOUT.topControl = c;
c.update();
}
/**
* Open the dialog.
*
* @return the result
*/
public Object open() {
createContents();
shell.open();
shell.layout();
Display display = shell.getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
return result;
}
public void setNextEnabled(boolean b) {
btnNext.setEnabled(b);
if(!hasNext)
btnNext.setEnabled(false);
btnNext.redraw();
}
/**
* Create contents of the dialog.
*/
private void createContents() {
shell = new Shell(SWT.CLOSE | SWT.APPLICATION_MODAL);
shell.setBackgroundMode(SWT.INHERIT_FORCE);
shell.setBackgroundImage(SWTResourceManager.getImage(Installer.class,
"/icons/bg.gif"));
shell.setSize(600, 500);
shell.setLayout(new GridLayout(1, false));
Composite header = new Composite(shell, SWT.NONE);
header.setLayout(new GridLayout(2, false));
header.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
Label lblIcn = new Label(header, SWT.NONE);
lblIcn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false,
1, 3));
lblIcn.setImage(SWTResourceManager.getImage(Installer.class,
"/icons/logo_install.png"));
Label lblMineclipseInstallation = new Label(header, SWT.NONE);
lblMineclipseInstallation.setLayoutData(new GridData(SWT.LEFT,
SWT.CENTER, true, false, 1, 1));
lblMineclipseInstallation.setForeground(SWTResourceManager
.getColor(SWT.COLOR_WHITE));
lblMineclipseInstallation.setFont(SWTResourceManager.getFont(
"Segoe UI", 10, SWT.BOLD));
lblMineclipseInstallation.setText("MineClipse Installation");
Label lblWelcome = new Label(header, SWT.NONE);
lblWelcome.setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
lblWelcome.setText("1. Welcome");
final CoolProgressBar coolProgressBar = new CoolProgressBar(header,
SWT.NONE, SWTResourceManager.getImage(Installer.class,
"/icons/pgb_border.png"), SWTResourceManager.getImage(
Installer.class, "/icons/pgb_filled.png"),
SWTResourceManager.getImage(Installer.class,
"/icons/pgb_empty.png"), SWTResourceManager.getImage(
Installer.class, "/icons/pgb_border_r.png"));
coolProgressBar.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
false, 1, 1));
coolProgressBar.updateProgress(0);
coolProgressBar.update();
System.out.println(coolProgressBar.getCurrentProgress());
final Composite content = new Composite(shell, SWT.NONE);
content.setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
content.setLayout(LAYOUT);
content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
Composite welcomePage = new WelcomePage(content, SWT.NONE);
Composite licencePage = new LicencePage(content, SWT.NONE, this);
Composite systestPage = new SystemTestPage(content, SWT.NONE, this);
Composite configuPage = new ConfigPage(content, SWT.NONE);
Composite installPage = new InstallPage(content, 0, this);
pages.add(welcomePage);
pages.add(licencePage);
pages.add(systestPage);
pages.add(configuPage);
pages.add(installPage);
Composite footer = new Composite(shell, SWT.NONE);
footer.setLayout(new GridLayout(2, false));
footer.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false,
1, 1));
btnPrev = new OButton(footer, SWT.NONE);
btnPrev.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
i--;
final double percentage = ((double)i / (pages.size()-1));
System.out.println(percentage);
coolProgressBar.updateProgress(percentage);
showPage(pages.get(i));
hasNext = i < pages.size()-1;
btnNext.setEnabled(hasNext);
content.layout();
}
});
btnPrev.setEnabled(false);
btnPrev.setText("< Previous");
btnPrev.setButtonRenderer(GreyButtonRenderer.getInstance());
btnNext = new OButton(footer, SWT.NONE);
btnNext.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (hasNext) {
i++;
final double percentage = ((double)i / (pages.size()-1));
System.out.println(percentage);
coolProgressBar.updateProgress(percentage);
showPage(pages.get(i));
hasNext = i < pages.size()-1;
btnNext.setEnabled(hasNext);
hasPrev = i >= 0;
content.layout();
}
}
});
btnNext.setText("Next >");
btnNext.setButtonRenderer(GreyButtonRenderer.getInstance());
showPage(pages.get(i));
}
public static void main(String[] args) {
new Installer().open();
}
}