/* AWE - Amanzi Wireless Explorer
* http://awe.amanzi.org
* (C) 2008-2009, AmanziTel AB
*
* This library is provided under the terms of the Eclipse Public License
* as described at http://www.eclipse.org/legal/epl-v10.html. Any use,
* reproduction or distribution of the library constitutes recipient's
* acceptance of this agreement.
*
* This library is distributed WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*/
package org.amanzi.awe.neostyle;
import java.io.IOException;
import net.refractions.udig.project.internal.Layer;
import net.refractions.udig.style.IStyleConfigurator;
import org.amanzi.neo.models.render.IRenderableModel;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Table;
/**
* <p>
* Configurer of network style
* </p>
*
* @author TsAr
* @since 1.0.0
*/
public class NetworkNeoStyleConfigurator extends IStyleConfigurator {
private NetworkNeoStyle curStyle;
private final NetworkStyleDefiner defaultStyle = new NetworkStyleDefiner();
private CheckboxTableViewer viewer;
/** NetworkNeoStyleConfigurator ID field */
public static final String ID = "org.amanzi.awe.neostyle.style.network"; //$NON-NLS-1$
//private static final String[] ICON_SIZES = new String[] {"6", "8", "12", "16", "32", "48", "64"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$
public NetworkNeoStyleConfigurator() {
super();
}
@Override
public boolean canStyle(final Layer aLayer) {
return aLayer.getStyleBlackboard().get(ID) != null;
}
@Override
public void createControl(final Composite parent) {
parent.setLayout(new GridLayout(1, false));
CTabFolder tabFolder = new CTabFolder(parent, SWT.TOP);
tabFolder.setBorderVisible(true);
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
CTabItem item = new CTabItem(tabFolder, SWT.NONE);
item.setText("Style");
tabFolder.setSelection(item);
ScrolledComposite scroll = new ScrolledComposite(tabFolder, SWT.V_SCROLL | SWT.H_SCROLL);
scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
scroll.setExpandVertical(true);
scroll.setExpandHorizontal(true);
item.setControl(scroll);
Composite style = new Composite(scroll, SWT.FILL);
style.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
defaultStyle.createPartControl(style);
scroll.setContent(style);
scroll.setMinSize(style.computeSize(SWT.DEFAULT, SWT.DEFAULT));
item = new CTabItem(tabFolder, SWT.NONE);
item.setText("Filters");
scroll = new ScrolledComposite(tabFolder, SWT.V_SCROLL | SWT.H_SCROLL);
scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
scroll.setExpandVertical(true);
scroll.setExpandHorizontal(true);
item.setControl(scroll);
Composite filterMain = new Composite(scroll, SWT.NONE);
filterMain.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createFilterPage(filterMain);
scroll.setContent(filterMain);
}
private void createFilterPage(final Composite filterMain) {
filterMain.setLayout(new GridLayout(2, true));
Label lb = new Label(filterMain, SWT.LEFT);
lb.setText("Applyed filters:");
viewer = CheckboxTableViewer.newCheckList(filterMain, SWT.FULL_SELECTION | SWT.BORDER);
viewer.setColumnProperties(new String[] {"Filter"});
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 10);
viewer.getControl().setLayoutData(layoutData);
viewer.getTable().addControlListener(new ControlListener() {
@Override
public void controlResized(final ControlEvent e) {
Table table = (Table)e.widget;
int width = table.getClientArea().width;
table.getColumn(0).setWidth(width - 2);
}
@Override
public void controlMoved(final ControlEvent e) {
}
});
}
@Override
protected void refresh() {
curStyle = (NetworkNeoStyle)getStyleBlackboard().get(ID);
defaultStyle.setCurStyle(curStyle);
IRenderableModel resource;
try {
resource = getLayer().findGeoResource(IRenderableModel.class).resolve(IRenderableModel.class, null);
} catch (IOException e) {
throw (RuntimeException)new RuntimeException().initCause(e);
}
defaultStyle.setRenderableResource(resource);
defaultStyle.refresh();
}
@Override
public void preApply() {
defaultStyle.preApply();
NetworkNeoStyle clone = (NetworkNeoStyle)defaultStyle.getCurStyle().clone();
getStyleBlackboard().put(ID, clone);
}
}