/*******************************************************************************
* Copyright (c) 2012 OpenLegacy Inc.
* 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:
* OpenLegacy Inc. - initial API and implementation
*******************************************************************************/
package org.openlegacy.ide.eclipse.wizards.project;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
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.openlegacy.designtime.newproject.model.ProjectTheme;
import org.openlegacy.ide.eclipse.Messages;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class OpenLegacyNewWizardThemePage extends WizardPage {
private String[] themeNames;
private TableViewer tableViewer;
private Canvas canvas;
private List<ProjectTheme> projectThemes = null;
protected OpenLegacyNewWizardThemePage(String pageName) {
super("wizardThemePage");//$NON-NLS-1$
setTitle(Messages.title_ol_project_wizard);
setDescription(Messages.info_ol_project_wizard);
}
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 2;
layout.horizontalSpacing = 9;
tableViewer = new TableViewer(container);
tableViewer.setContentProvider(new ArrayContentProvider());
tableViewer.setInput(new String[] { "Pending..." });//$NON-NLS-1$
GridData data = new GridData(GridData.FILL_HORIZONTAL, SWT.FILL, false, false);
data.horizontalSpan = 1;
tableViewer.getTable().setLayoutData(data);
canvas = new Canvas(container, SWT.NONE);
canvas.setLayoutData(new GridData(GridData.FILL_BOTH));
canvas.addPaintListener(this.getCanvasPaintListener());
setControl(container);
this.refreshTable();
setPageComplete(false);
}
private PaintListener getCanvasPaintListener() {
return new PaintListener() {
public void paintControl(PaintEvent e) {
if (projectThemes == null) {
return;
}
int index = tableViewer.getTable().getSelectionIndex();
BufferedInputStream in = new BufferedInputStream(
new ByteArrayInputStream(projectThemes.get(index).getImageData()));
ImageData imageData = new ImageData(in);
Image image = new Image(e.widget.getDisplay(), imageData);
int x = (e.width - image.getBounds().width) / 2;
e.gc.drawImage(image, x, 0);
try {
in.close();
} catch (IOException e1) {
}
}
};
}
private ISelectionChangedListener getTableSelectionListener() {
return new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent e) {
if (projectThemes != null) {
canvas.redraw();
setPageComplete(true);
}
}
};
}
private void refreshTable() {
tableViewer.refresh();
tableViewer.getTable().select(0);
}
private void updateStatus(String message) {
setErrorMessage(message);
setPageComplete(message == null);
}
public String getThemeName() {
if (this.projectThemes != null) {
return this.projectThemes.get(tableViewer.getTable().getSelectionIndex()).getDisplayName().toLowerCase();
}
return null;
}
public void updateControls(List<ProjectTheme> list) {
if (getControl().isDisposed()) {
return;
}
if (list == null || list.isEmpty()) {
getControl().getDisplay().syncExec(new Runnable() {
public void run() {
updateStatus(Messages.error_new_project_metadata_not_found);
}
});
return;
}
this.projectThemes = list;
ArrayList<String> themes = new ArrayList<String>();
for (ProjectTheme theme : list) {
themes.add(theme.getDisplayName());
}
themeNames = new String[themes.size()];
themes.toArray(themeNames);
getControl().getDisplay().syncExec(new Runnable() {
public void run() {
tableViewer.setInput(themeNames);
tableViewer.getTable().select(0);
tableViewer.addSelectionChangedListener(getTableSelectionListener());
// to trigger SelectionChangedListener
tableViewer.setSelection(tableViewer.getSelection());
}
});
}
}