/*******************************************************************************
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
*******************************************************************************/
package com.liferay.ide.project.ui.wizard;
import com.liferay.ide.ui.util.SWTUtil;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.sapphire.modeling.Status;
import org.eclipse.sapphire.ui.forms.FormComponentPart;
import org.eclipse.sapphire.ui.forms.swt.FormComponentPresentation;
import org.eclipse.sapphire.ui.forms.swt.SwtPresentation;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
/**
* @author Simon Jiang
*/
public abstract class AbstractCheckboxCustomPart extends FormComponentPart
{
class CheckboxContentProvider implements IStructuredContentProvider
{
@Override
public void dispose()
{
}
@Override
public Object[] getElements( Object inputElement )
{
if( inputElement instanceof CheckboxElement[] )
{
return (CheckboxElement[]) inputElement;
}
return new Object[] { inputElement };
}
@Override
public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
{
}
}
protected class CheckboxElement
{
public String name;
public String context;
public CheckboxElement( final String name, final String context )
{
this.context = context;
this.name = name;
}
}
protected Status retval = Status.createOkStatus();
protected CheckboxTableViewer checkBoxViewer;
protected abstract void checkAndUpdateCheckboxElement();
@Override
protected Status computeValidation()
{
return retval;
}
@Override
public FormComponentPresentation createPresentation( SwtPresentation parent, Composite composite )
{
return new FormComponentPresentation( this, parent, composite )
{
@Override
public void render()
{
final Composite parent = SWTUtil.createComposite( composite(), 2, 2, GridData.FILL_BOTH );
checkBoxViewer = CheckboxTableViewer.newCheckList( parent, SWT.BORDER );
checkBoxViewer.addCheckStateListener
(
new ICheckStateListener()
{
@Override
public void checkStateChanged( CheckStateChangedEvent event )
{
handleCheckStateChangedEvent( event );
}
}
);
checkBoxViewer.setContentProvider( new CheckboxContentProvider() );
checkBoxViewer.setLabelProvider( new DelegatingStyledCellLabelProvider( getLableProvider() ) );
final Table table = checkBoxViewer.getTable();
final GridData tableData = new GridData( SWT.FILL, SWT.FILL, true, true, 1, 4 );
tableData.heightHint = 225;
tableData.widthHint = 400;
table.setLayoutData( tableData );
final Button selectAllButton = new Button( parent, SWT.NONE );
selectAllButton.setText( "Select All" );
selectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.TOP, false, false ) );
selectAllButton.addListener
(
SWT.Selection,
new Listener()
{
@Override
public void handleEvent( Event event )
{
handleSelectAllEvent();
}
}
);
final Button deselectAllButton = new Button( parent, SWT.NONE );
deselectAllButton.setText( "Deselect All" );
deselectAllButton.setLayoutData( new GridData( SWT.FILL, SWT.TOP, false, false ) );
deselectAllButton.addListener
(
SWT.Selection,
new Listener()
{
@Override
public void handleEvent( Event event )
{
handleDeSelectAllEvent();
}
}
);
final Button refreshButton = new Button( parent, SWT.NONE );
refreshButton.setText( "Refresh" );
refreshButton.setLayoutData( new GridData( SWT.FILL, SWT.TOP, false, false ) );
refreshButton.addListener
(
SWT.Selection,
new Listener()
{
@Override
public void handleEvent( Event event )
{
checkAndUpdateCheckboxElement();
}
}
);
startCheckThread();
}
private void startCheckThread()
{
final Thread t = new Thread()
{
@Override
public void run()
{
checkAndUpdateCheckboxElement();
}
};
t.start();
}
};
}
protected abstract IStyledLabelProvider getLableProvider();
protected abstract void handleCheckStateChangedEvent( CheckStateChangedEvent event );
protected abstract void handleDeSelectAllEvent();
protected abstract void handleSelectAllEvent();
protected abstract void updateValidation();
}