/*******************************************************************************
* Copyright (c) 2008 Pierre-Antoine Grégoire.
* 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:
* Pierre-Antoine Grégoire - initial API and implementation
*******************************************************************************/
package org.org.eclipse.core.utils.platform.wizards.page;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.IDialogPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.org.eclipse.core.utils.platform.dialogs.IListAdapter;
import org.org.eclipse.core.utils.platform.dialogs.IStringButtonAdapter;
import org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField;
import org.org.eclipse.core.utils.platform.fields.DialogField;
import org.org.eclipse.core.utils.platform.fields.IDialogField;
import org.org.eclipse.core.utils.platform.fields.IDialogFieldListener;
import org.org.eclipse.core.utils.platform.fields.ListDialogField;
import org.org.eclipse.core.utils.platform.tools.DialogHelper;
import org.org.eclipse.core.utils.platform.wizards.StatusInfo;
/**
* @author pagregoire
*/
public abstract class AbstractWizardCustomPage extends WizardPage {
/**
* Logger for this class
*/
private static Logger logger = Logger.getLogger(AbstractWizardCustomPage.class);
private IStatus wizardStatus;
private Composite wizardContainer;
private AllInOneAdapter wizardAdapter;
private int columnsNumber = 3;
protected int getColumnsNumber() {
return columnsNumber;
}
protected void setColumnsNumber(int columnsNumber) {
this.columnsNumber = columnsNumber;
}
/**
* @return Returns the wizardAdapter.
*/
protected AllInOneAdapter getWizardAdapter() {
return wizardAdapter;
}
/**
* @param wizardAdapter
* The wizardAdapter to set.
*/
protected void setWizardAdapter(AllInOneAdapter wizardAdapter) {
this.wizardAdapter = wizardAdapter;
}
/**
* @return Returns the wizardStatus.
*/
protected IStatus getWizardStatus() {
return wizardStatus;
}
/**
* @param wizardStatus
* The wizardStatus to set.
*/
protected void setWizardStatus(IStatus wizardStatus) {
this.wizardStatus = wizardStatus;
}
/**
* Constructor for ConfigXmlPage.
*
* @param pageName
*/
public AbstractWizardCustomPage(String wizardId, String title, String description, int columnsNumber) {
super(wizardId);
setColumnsNumber(columnsNumber);
setTitle(title);
setDescription(description);
logger.debug("Created the wizard :" + this.getClass().getName());
}
/**
* Constructor for ConfigXmlPage.
*
* @param pageName
*/
public AbstractWizardCustomPage(String wizardId, String title, String description) {
this(wizardId, title, description, 3);
setPageComplete(false);
}
/**
* @see IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
wizardContainer = new Composite(parent, SWT.FLAT);
wizardContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GridLayout wizardLayout = new GridLayout();
wizardLayout.numColumns = getColumnsNumber();
wizardContainer.setLayout(wizardLayout);
wizardAdapter = new AllInOneAdapter();
wizardContainer.setVisible(true);
describe();
setControl(wizardContainer);
wizardContainer.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
}
public void focusGained(FocusEvent e) {
init();
}
});
wizardContainer.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
init();
}
});
wizardContainer.forceFocus();
}
private boolean alreadyInited = false;
private synchronized void init() {
if (!alreadyInited) {
initialize();
touch();
alreadyInited = true;
}
}
protected void updateStatus(IStatus status) {
wizardStatus = status;
setPageComplete(!wizardStatus.matches(IStatus.ERROR));
DialogHelper.applyToStatusLine(this, wizardStatus);
}
protected IStatus createStatus(int severity, String message) {
IStatus status = new StatusInfo(severity, message);
return status;
}
public void dispose() {
super.dispose();
}
abstract protected void describe();
abstract protected void initialize();
abstract protected void touch();
abstract protected IStatus validate();
abstract protected void handleCustomButtonPressed(IListDialogField field, int buttonIndex);
abstract protected void handleSelectionChanged(IListDialogField field);
abstract protected void handleDoubleClicked(IListDialogField field);
abstract protected void handleChangeControlPressed(IDialogField field);
abstract protected void handleDialogFieldChanged(IDialogField field);
protected class AllInOneAdapter implements IListAdapter, IStringButtonAdapter, IDialogFieldListener {
private final Logger logger = Logger.getLogger(AllInOneAdapter.class);
//
// ----------IListAdapter
//
public void customButtonPressed(IListDialogField field, int index) {
if (logger.isDebugEnabled()) {
logger.debug("customButtonPressed" + field + " " + index);
}
handleCustomButtonPressed(field, index);
}
/**
* @see IListAdapter#selectionChanged(ListDialogField)
*/
public void selectionChanged(IListDialogField field) {
if (logger.isDebugEnabled()) {
logger.debug("selectionChanged" + field);
}
handleSelectionChanged(field);
}
/**
* @see IListAdapter#doubleClicked(ListDialogField)
*/
public void doubleClicked(IListDialogField field) {
if (logger.isDebugEnabled()) {
logger.debug("doubleClicked" + field);
}
handleDoubleClicked(field);
}
//
// ----------IStringButtonAdapter
//
/**
* @see IStringButtonAdapter#changeControlPressed(DialogField)
*/
public void changeControlPressed(IDialogField field) {
if (logger.isDebugEnabled()) {
logger.debug("changeControlPressed" + field);
}
handleChangeControlPressed(field);
}
//
// ----------IDialogFieldListener
//
/**
* @see IDialogFieldListener#dialogFieldChanged(DialogField)
*/
public void dialogFieldChanged(IDialogField field) {
if (logger.isDebugEnabled()) {
logger.debug("dialogFieldChanged(DialogField) - ");
}
handleDialogFieldChanged(field);
}
}
public Composite getWizardContainer() {
return wizardContainer;
}
}