blob: 72f16730d24be79f51e905652bc8c52fcd2e4b3a [file] [log] [blame]
/*
* Copyright (c) 2014, 2015 Eike Stepper (Berlin, Germany) and others.
* 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.setup.ui.recorder;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ICheckStateProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TableColumn;
import java.util.Arrays;
import java.util.Map;
/**
* @author Eike Stepper
*/
public class RecorderPoliciesComposite extends Composite implements ISelectionProvider
{
private final boolean clean;
private final CheckboxTableViewer viewer;
private ViewerFilter filter;
private RecorderTransaction transaction;
private String[] sortedKeys;
public RecorderPoliciesComposite(Composite parent, int style, boolean clean)
{
super(parent, SWT.NONE);
this.clean = clean;
setLayout(new FillLayout(SWT.HORIZONTAL));
TableColumnLayout tableLayout = new TableColumnLayout();
Composite composite = new Composite(this, SWT.NONE);
composite.setLayout(tableLayout);
viewer = CheckboxTableViewer.newCheckList(composite, style);
viewer.setContentProvider(new ArrayContentProvider());
viewer.setLabelProvider(new LabelProvider());
viewer.addCheckStateListener(new ICheckStateListener()
{
public void checkStateChanged(CheckStateChangedEvent event)
{
String path = (String)event.getElement();
boolean policy = event.getChecked();
transaction.setPolicy(path, policy);
}
});
viewer.setCheckStateProvider(new ICheckStateProvider()
{
public boolean isGrayed(Object element)
{
return false;
}
public boolean isChecked(Object element)
{
return Boolean.TRUE.equals(transaction.getPolicy(element.toString()));
}
});
TableColumn column = new TableColumn(viewer.getTable(), SWT.LEFT);
tableLayout.setColumnData(column, new ColumnWeightData(100));
}
public final void setRecorderTransaction(RecorderTransaction transaction)
{
this.transaction = transaction;
Map<String, Boolean> policies = transaction.getPolicies(clean);
sortedKeys = policies.keySet().toArray(new String[policies.size()]);
Arrays.sort(sortedKeys);
viewer.setInput(sortedKeys);
if (sortedKeys.length != 0)
{
viewer.setSelection(new StructuredSelection(sortedKeys[0]));
}
}
public final void setFilter(ViewerFilter filter)
{
this.filter = filter;
viewer.setFilters(filter == null ? new ViewerFilter[0] : new ViewerFilter[] { filter });
}
@Override
public void setEnabled(boolean enabled)
{
super.setEnabled(enabled);
viewer.getTable().setEnabled(enabled);
}
public CheckboxTableViewer getViewer()
{
return viewer;
}
public String getFirstVisiblePolicy()
{
if (sortedKeys != null && sortedKeys.length != 0)
{
if (filter == null)
{
return sortedKeys[0];
}
for (String key : sortedKeys)
{
if (filter.select(viewer, sortedKeys, key))
{
return key;
}
}
}
return null;
}
public void selectFirstPolicy()
{
viewer.getTable().setSelection(0);
}
public void addSelectionChangedListener(ISelectionChangedListener listener)
{
viewer.addSelectionChangedListener(listener);
}
public void removeSelectionChangedListener(ISelectionChangedListener listener)
{
viewer.removeSelectionChangedListener(listener);
}
public IStructuredSelection getSelection()
{
return (IStructuredSelection)viewer.getSelection();
}
public void setSelection(ISelection selection)
{
viewer.setSelection(selection);
}
public void setSelection(ISelection selection, boolean reveal)
{
viewer.setSelection(selection, reveal);
}
public void addCheckStateListener(ICheckStateListener listener)
{
viewer.addCheckStateListener(listener);
}
public void removeCheckStateListener(ICheckStateListener listener)
{
viewer.removeCheckStateListener(listener);
}
public boolean getChecked(Object element)
{
return viewer.getChecked(element);
}
public Object[] getCheckedElements()
{
return viewer.getCheckedElements();
}
public void setAllChecked(boolean state)
{
viewer.setAllChecked(state);
}
public boolean setChecked(Object element, boolean state)
{
return viewer.setChecked(element, state);
}
public void setCheckedElements(Object[] elements)
{
viewer.setCheckedElements(elements);
}
@Override
public boolean setFocus()
{
return viewer.getTable().setFocus();
}
@Override
protected void checkSubclass()
{
// Disable the check that prevents subclassing of SWT components
}
}