Java tutorial
/******************************************************************************* * 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(); }