Java tutorial
/* * Copyright (c) 2012 Diamond Light Source Ltd. * * 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 */ package org.dawnsci.plotting.tools.preference; import java.text.DecimalFormat; import org.dawb.common.ui.viewers.TreeNodeContentProvider; import org.dawnsci.common.widgets.tree.LabelNode; import org.dawnsci.common.widgets.tree.NodeLabelProvider; import org.dawnsci.common.widgets.tree.ObjectNode; import org.dawnsci.common.widgets.tree.UnitEditingSupport; import org.dawnsci.common.widgets.tree.ValueEditingSupport; import org.dawnsci.common.widgets.tree.ValueEvent; import org.dawnsci.common.widgets.tree.ValueListener; import org.dawnsci.plotting.tools.Activator; import org.dawnsci.plotting.tools.diffraction.DiffractionDefaultMetadata; import org.dawnsci.plotting.tools.diffraction.DiffractionTreeModel; import org.eclipse.dawnsci.analysis.api.diffraction.DetectorProperties; import org.eclipse.dawnsci.analysis.api.diffraction.DiffractionCrystalEnvironment; import org.eclipse.dawnsci.analysis.api.metadata.IDiffractionMetadata; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.dialogs.FilteredTree; import org.eclipse.ui.dialogs.PatternFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; //Uses the Diffraction tools treeview to allow the diffraction metadata values in the // preference store to be edited public class DiffractionDefaultsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private FilteredTree filteredTree; private TreeViewer viewer; private DiffractionTreeModel model; private IDiffractionMetadata metaData; public static final String ID = "org.dawb.workbench.plotting.preference.diffraction.defaultsPreferencePage"; private static final Logger logger = LoggerFactory.getLogger(DiffractionDefaultsPreferencePage.class); @Override public void init(IWorkbench workbench) { setPreferenceStore(Activator.getPlottingPreferenceStore()); } @Override protected Control createContents(Composite parent) { Composite main = new Composite(parent, SWT.NONE); main.setLayout(new GridLayout(1, false)); GridData gdc = new GridData(SWT.FILL, SWT.FILL, true, true); main.setLayoutData(gdc); //Use the DiffractionTool treeview to display the default meta values Label label = new Label(main, SWT.NONE); label.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); label.setText("Set default diffraction meta data values:"); PatternFilter filter = new PatternFilter(); this.filteredTree = new FilteredTree(main, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER, filter, true); viewer = filteredTree.getViewer(); viewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); createColumns(viewer); viewer.setContentProvider(new TreeNodeContentProvider()); // Swing tree nodes viewer.getTree().setLinesVisible(true); viewer.getTree().setHeaderVisible(true); initializePage(); return main; } @Override protected void performDefaults() { super.performDefaults(); //reset tree to original values (the defaults in the store) model.reset(); viewer.refresh(); } private void initializePage() { createDiffractionModel(); } @Override public boolean performOk() { storePreferences(); return true; } private void storePreferences() { setPersistedDetectorPropertes(metaData.getDetector2DProperties()); setPersistedEnvironment(metaData.getDiffractionCrystalEnvironment()); } //Getters and setters for detector properites/crystal environment store private void setPersistedDetectorPropertes(DetectorProperties detprop) { DiffractionDefaultMetadata.setPersistedDetectorPropertieValues(detprop); } private void setPersistedEnvironment(DiffractionCrystalEnvironment dce) { DiffractionDefaultMetadata.setPersistedDiffractionCrystalEnvironmentValues(dce); } private void createDiffractionModel() { if (model != null) return; if (viewer == null) return; metaData = DiffractionDefaultMetadata.getDiffractionMetadata(null, new int[] { 1000, 1000 }); try { model = new DiffractionTreeModel(metaData); model.setViewer(viewer); final LabelNode format = new LabelNode("Format", model.getRoot()); final ObjectNode numeric = new ObjectNode("Numbers", Activator.getPlottingPreferenceStore().getString(DiffractionToolConstants.NUMBER_FORMAT), format); numeric.setEditable(true); numeric.addValueListener(new ValueListener() { @Override public void valueChanged(ValueEvent evt) { try { final String formatString = evt.getValue().toString(); final DecimalFormat f = new DecimalFormat(formatString); Activator.getPlottingPreferenceStore().setValue(DiffractionToolConstants.NUMBER_FORMAT, formatString); } catch (Exception ne) { logger.error( "Cannot set " + DiffractionToolConstants.NUMBER_FORMAT + " to " + evt.getValue()); } } }); } catch (Exception e) { logger.error("Cannot create model!", e); return; } viewer.setInput(model.getRoot()); } private void createColumns(TreeViewer viewer) { ColumnViewerToolTipSupport.enableFor(viewer, ToolTip.NO_RECREATE); viewer.setColumnProperties(new String[] { "Name", "Original", "Value", "Unit" }); TreeViewerColumn var = new TreeViewerColumn(viewer, SWT.LEFT, 0); var.getColumn().setText("Name"); // Selected var.getColumn().setWidth(200); var.setLabelProvider(new ColumnLabelProvider()); var = new TreeViewerColumn(viewer, SWT.LEFT, 1); var.getColumn().setText("Original"); // Selected var.getColumn().setWidth(0); var.getColumn().setResizable(false); var.setLabelProvider(new DelegatingStyledCellLabelProvider(new NodeLabelProvider(1))); var = new TreeViewerColumn(viewer, SWT.LEFT, 2); var.getColumn().setText("Value"); // Selected var.getColumn().setWidth(100); var.setLabelProvider(new DelegatingStyledCellLabelProvider(new NodeLabelProvider(2))); var.setEditingSupport(new ValueEditingSupport(viewer)); var = new TreeViewerColumn(viewer, SWT.LEFT, 3); var.getColumn().setText("Unit"); // Selected var.getColumn().setWidth(90); var.setLabelProvider(new DelegatingStyledCellLabelProvider(new NodeLabelProvider(3))); var.setEditingSupport(new UnitEditingSupport(viewer)); } }