/* * * Goko * Copyright (C) 2013 PsyKo * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.goko.tools.centerfinder; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.beans.PojoObservables; import org.eclipse.core.databinding.observable.map.IObservableMap; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.jface.databinding.viewers.ObservableListContentProvider; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.wb.swt.ResourceManager; import org.goko.common.GkUiComponent; import org.goko.common.dialog.GkDialog; import org.goko.common.elements.combo.GkCombo; import org.goko.common.elements.combo.LabeledValue; import org.goko.core.common.exception.GkException; import org.goko.core.common.exception.GkFunctionalException; import org.goko.core.common.measure.quantity.Length; import org.goko.core.config.GokoPreference; import org.goko.core.log.GkLog; import org.goko.core.math.Tuple6b; import org.goko.tools.centerfinder.model.CenterFinderController; import org.goko.tools.centerfinder.model.CenterFinderModel; public class CenterFinderPart extends GkUiComponent<CenterFinderController, CenterFinderModel> { private static final GkLog LOG = GkLog.getLogger(CenterFinderPart.class); private Table table; private TableViewer tableViewer; private Button grabPoint; private Label centerXLabel; private Label centerYLabel; private Label centerZLabel; private Button goToCenterBtn; private Label radiusLabel; private GkCombo<LabeledValue<EnumPlane>> planeCombo; @Inject public CenterFinderPart(IEclipseContext context) { super(context, new CenterFinderController()); } @PostConstruct public void createControls(final Composite parent, MPart part) throws GkException { parent.setLayout(new FillLayout(SWT.HORIZONTAL)); Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout(1, false)); tableViewer = new TableViewer(composite, SWT.BORDER | SWT.FULL_SELECTION); table = tableViewer.getTable(); table.setLinesVisible(true); table.setHeaderVisible(true); GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1); gd_table.heightHint = 85; table.setLayoutData(gd_table); TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnX = tableViewerColumn.getColumn(); tblclmnX.setWidth(100); tblclmnX.setText("X"); tableViewerColumn.setLabelProvider(new QuantityLableProvider(0)); TableViewerColumn tableViewerColumn_1 = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnY = tableViewerColumn_1.getColumn(); tblclmnY.setWidth(100); tblclmnY.setText("Y"); tableViewerColumn_1.setLabelProvider(new QuantityLableProvider(1)); TableViewerColumn tableViewerColumn_2 = new TableViewerColumn(tableViewer, SWT.NONE); TableColumn tblclmnZ = tableViewerColumn_2.getColumn(); tblclmnZ.setWidth(100); tblclmnZ.setText("Z"); tableViewerColumn_2.setLabelProvider(new QuantityLableProvider(2)); Composite composite_1 = new Composite(composite, SWT.NONE); composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); GridLayout gl_composite_1 = new GridLayout(5, false); gl_composite_1.marginWidth = 0; gl_composite_1.marginHeight = 0; composite_1.setLayout(gl_composite_1); grabPoint = new Button(composite_1, SWT.NONE); grabPoint.setToolTipText("Create point from position"); grabPoint.setImage(ResourceManager.getPluginImage("org.goko.tools.centerfinder", "icons/grab-point.png")); grabPoint.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent event) { try{ getController().grabPoint(); }catch(GkFunctionalException e){ LOG.warn(e.getLocalizedMessage()); GkDialog.openDialog(e); }catch(GkException e){ LOG.error(e.getLocalizedMessage()); GkDialog.openDialog(e); } } }); Button btnNewButton_1 = new Button(composite_1, SWT.NONE); btnNewButton_1.setToolTipText("Remove selected point"); btnNewButton_1.setImage(ResourceManager.getPluginImage("org.goko.tools.centerfinder", "icons/eraser.png")); new Label(composite_1, SWT.NONE); Label lblPlane = new Label(composite_1, SWT.NONE); lblPlane.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); lblPlane.setText("Plane"); planeCombo = new GkCombo<>(composite_1, SWT.READ_ONLY); // goToCenterBtn = new Button(composite_1, SWT.NONE); // goToCenterBtn.addMouseListener(new MouseAdapter() { // @Override // public void mouseUp(MouseEvent e) { // getController().goToCalculatedCenter(); // } // }); // goToCenterBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1)); // goToCenterBtn.setToolTipText("Go to calculated center"); // goToCenterBtn.setImage(ResourceManager.getPluginImage("org.goko.tools.centerfinder", "icons/arrow-step.png")); btnNewButton_1.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent evt) { try { getController().clearSelectedSamplePoints(); } catch (GkException e) { displayMessage(e); } } }); Composite composite_2 = new Composite(composite, SWT.NONE); composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); composite_2.setLayout(new GridLayout(5, false)); Label lblCenter = new Label(composite_2, SWT.NONE); lblCenter.setText("Center"); Label lblX = new Label(composite_2, SWT.NONE); lblX.setText("X:"); centerXLabel = new Label(composite_2, SWT.NONE); GridData gd_centerXLabel = new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1); gd_centerXLabel.widthHint = 80; centerXLabel.setLayoutData(gd_centerXLabel); centerXLabel.setText("New Label"); Label lblRadius = new Label(composite_2, SWT.NONE); lblRadius.setText("Radius :"); radiusLabel = new Label(composite_2, SWT.NONE); GridData gd_radiusLabel = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_radiusLabel.widthHint = 80; radiusLabel.setLayoutData(gd_radiusLabel); radiusLabel.setText("New Label"); new Label(composite_2, SWT.NONE); Label lblY = new Label(composite_2, SWT.NONE); lblY.setText("Y:"); centerYLabel = new Label(composite_2, SWT.NONE); centerYLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); centerYLabel.setText("New Label"); new Label(composite_2, SWT.NONE); new Label(composite_2, SWT.NONE); new Label(composite_2, SWT.NONE); Label lblZ = new Label(composite_2, SWT.NONE); lblZ.setText("Z:"); centerZLabel = new Label(composite_2, SWT.NONE); centerZLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); centerZLabel.setText("New Label"); new Label(composite_2, SWT.NONE); new Label(composite_2, SWT.NONE); initCustomDataBindings(); } protected DataBindingContext initCustomDataBindings() { DataBindingContext bindingContext = new DataBindingContext(); // ObservableListContentProvider listContentProvider = new ObservableListContentProvider(); IObservableMap[] observeMaps = PojoObservables.observeMaps(listContentProvider.getKnownElements(), Tuple6b.class, new String[]{"x", "y", "z"}); //A CORRIGER (les valeurs ne s'affichent pas bien suite au passage des tuples en Quantity) //tableViewer.setLabelProvider(new ObservableMapLabelProvider(observeMaps)); //tableViewer.setLabelProvider(new QuantityLableProvider()); tableViewer.setContentProvider(listContentProvider); // tableViewer.setInput(getDataModel().getSamplePoints()); // try { getController().addTextDisplayBinding(centerXLabel, "centerXPosition"); getController().addTextDisplayBinding(centerYLabel, "centerYPosition"); getController().addTextDisplayBinding(centerZLabel, "centerZPosition"); getController().addTextDisplayBinding(radiusLabel, "radius"); getController().addTableSelectionBinding(tableViewer, "selectedPoint"); getController().addItemsBinding(planeCombo, "availablePlane"); getController().addItemSelectionBinding(planeCombo, "selectedPlane"); } catch (GkException e) { LOG.error(e); } return bindingContext; } class QuantityLableProvider extends CellLabelProvider{ private int axis; /** * @param axis */ public QuantityLableProvider(int axis) { super(); this.axis = axis; } public String getText(Object element) { if(element == null ){ return StringUtils.EMPTY; } Tuple6b tuple = (Tuple6b) element; Length quantity = tuple.getX(); if(axis == 1){ quantity = tuple.getY(); }else if(axis == 2){ quantity = tuple.getZ(); } try { return GokoPreference.getInstance().format(quantity, true, true); } catch (GkException e) { LOG.error(e); } return StringUtils.EMPTY; } @Override public void update(ViewerCell cell) { cell.setText(getText(cell.getElement())); } } }