| /* |
| * Copyright (c) 2008 Borland Software Corporation. |
| * 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: |
| * Artem Tikhomirov (Borland) - initial API and implementation |
| * Alexander Shatalin (Borland) - initial API and implementation |
| */ |
| package org.eclipse.gmf.graphdef.editor.sheet; |
| |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.gmf.gmfgraph.Alignment; |
| import org.eclipse.gmf.gmfgraph.BorderLayout; |
| import org.eclipse.gmf.gmfgraph.CustomClass; |
| import org.eclipse.gmf.gmfgraph.CustomLayout; |
| import org.eclipse.gmf.gmfgraph.FlowLayout; |
| import org.eclipse.gmf.gmfgraph.GMFGraphFactory; |
| import org.eclipse.gmf.gmfgraph.GMFGraphPackage; |
| import org.eclipse.gmf.gmfgraph.GridLayout; |
| import org.eclipse.gmf.gmfgraph.Layoutable; |
| import org.eclipse.gmf.gmfgraph.StackLayout; |
| import org.eclipse.gmf.gmfgraph.XYLayout; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Combo; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Group; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Spinner; |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.swt.widgets.Widget; |
| import org.eclipse.ui.IWorkbenchPart; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; |
| import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; |
| |
| public class LayoutSection extends AbstractPropertySection implements ChangeTracker, Listener { |
| |
| private org.eclipse.emf.common.notify.Adapter[] myModelListeners; |
| |
| private boolean myIsCommit; |
| private boolean myIsRefresh; |
| private Object myInput; |
| |
| private Group myLayoutKindRadios; |
| private Group myFlowLayoutDetails; |
| private Group myBorderLayoutDetails; |
| private Group myGridLayoutDetails; |
| private Composite myCustomLayoutDetails; |
| private Button myR1; |
| private Button myR2; |
| private Button myR3; |
| private Button myR4; |
| private Button myR5; |
| private Button myR6; |
| private Button myR7; |
| private Button myFlowLayoutIsVertical; |
| private Button myFlowLayoutMatchMinor; |
| private Button myFlowLayoutForceSingle; |
| private Spinner myFlowLayoutMajSpacing; |
| private Spinner myFlowLayoutMinSpacing; |
| private Group myFlowLayoutAlign; |
| private Spinner myBorderLayoutSpacingX; |
| private Spinner myBorderLayoutSpacingY; |
| private Spinner myGridLayoutColumns; |
| private Button myGridLayoutSameWidth; |
| private Group myGridLayoutMargins; |
| private Group myGridLayoutSpacing; |
| private Text myCustomLayoutClass; |
| private Combo myFlowLayoutMajAlign; |
| private Combo myFlowLayoutMinAlign; |
| private Spinner myGridLayoutMarginX; |
| private Spinner myGridLayoutMarginY; |
| private Spinner myGridLayoutSpacingX; |
| private Spinner myGridLayoutSpacingY; |
| |
| @Override |
| public void createControls(Composite parent, TabbedPropertySheetPage page) { |
| super.createControls(parent, page); |
| getWidgetFactory().paintBordersFor(parent); |
| myLayoutKindRadios = createGroup(parent, "Layout"); |
| myR1 = getWidgetFactory().createButton(myLayoutKindRadios, "Flow Layout", SWT.RADIO); |
| myR2 = getWidgetFactory().createButton(myLayoutKindRadios, "Border Layout", SWT.RADIO); |
| myR3 = getWidgetFactory().createButton(myLayoutKindRadios, "Grid Layout", SWT.RADIO); |
| myR4 = getWidgetFactory().createButton(myLayoutKindRadios, "Stack Layout", SWT.RADIO); |
| myR5 = getWidgetFactory().createButton(myLayoutKindRadios, "XY Layout", SWT.RADIO); |
| myR6 = getWidgetFactory().createButton(myLayoutKindRadios, "Custom Layout", SWT.RADIO); |
| myR7 = getWidgetFactory().createButton(myLayoutKindRadios, "None", SWT.RADIO); |
| myLayoutKindRadios.setLayout(new org.eclipse.swt.layout.FillLayout(org.eclipse.swt.SWT.VERTICAL)); |
| myFlowLayoutDetails = createGroup(parent, "Details"); |
| myFlowLayoutIsVertical = getWidgetFactory().createButton(myFlowLayoutDetails, "Is Vertical", SWT.CHECK); |
| myFlowLayoutMatchMinor = getWidgetFactory().createButton(myFlowLayoutDetails, "Match minor size", SWT.CHECK); |
| myFlowLayoutForceSingle = getWidgetFactory().createButton(myFlowLayoutDetails, "Force single line", SWT.CHECK); |
| createLabel(myFlowLayoutDetails, "Major Spacing"); |
| myFlowLayoutMajSpacing = new Spinner(myFlowLayoutDetails, SWT.FLAT); |
| myFlowLayoutMajSpacing.setMinimum(0); |
| myFlowLayoutMajSpacing.setMaximum(2147483647); |
| myFlowLayoutMajSpacing.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| createLabel(myFlowLayoutDetails, "Minor Spacing"); |
| myFlowLayoutMinSpacing = new Spinner(myFlowLayoutDetails, SWT.FLAT); |
| myFlowLayoutMinSpacing.setMinimum(0); |
| myFlowLayoutMinSpacing.setMaximum(2147483647); |
| myFlowLayoutMinSpacing.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| myFlowLayoutAlign = createGroup(myFlowLayoutDetails, "Alignment"); |
| createLabel(myFlowLayoutAlign, "Major"); |
| myFlowLayoutMajAlign = new Combo(myFlowLayoutAlign, SWT.FLAT | SWT.READ_ONLY); |
| myFlowLayoutMajAlign.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); |
| getWidgetFactory().adapt(myFlowLayoutMajAlign, false, false); |
| createLabel(myFlowLayoutAlign, "Minor"); |
| myFlowLayoutMinAlign = new Combo(myFlowLayoutAlign, SWT.FLAT | SWT.READ_ONLY); |
| myFlowLayoutMinAlign.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); |
| getWidgetFactory().adapt(myFlowLayoutMinAlign, false, false); |
| myFlowLayoutAlign.setLayout(new org.eclipse.swt.layout.FillLayout(org.eclipse.swt.SWT.VERTICAL)); |
| myFlowLayoutDetails.setLayout(new org.eclipse.swt.layout.GridLayout(2, false)); |
| org.eclipse.jface.layout.GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).span(2, 1).applyTo(myFlowLayoutIsVertical); |
| org.eclipse.jface.layout.GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).span(2, 1).applyTo(myFlowLayoutMatchMinor); |
| org.eclipse.jface.layout.GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).span(2, 1).applyTo(myFlowLayoutForceSingle); |
| myBorderLayoutDetails = createGroup(parent, "Spacing"); |
| createLabel(myBorderLayoutDetails, "Horizontal"); |
| myBorderLayoutSpacingX = new Spinner(myBorderLayoutDetails, SWT.FLAT); |
| myBorderLayoutSpacingX.setMinimum(0); |
| myBorderLayoutSpacingX.setMaximum(2147483647); |
| myBorderLayoutSpacingX.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| createLabel(myBorderLayoutDetails, "Vertical"); |
| myBorderLayoutSpacingY = new Spinner(myBorderLayoutDetails, SWT.FLAT); |
| myBorderLayoutSpacingY.setMinimum(0); |
| myBorderLayoutSpacingY.setMaximum(2147483647); |
| myBorderLayoutSpacingY.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| myBorderLayoutDetails.setLayout(new org.eclipse.swt.layout.GridLayout(2, false)); |
| myGridLayoutDetails = createGroup(parent, "Details"); |
| createLabel(myGridLayoutDetails, "Columns #"); |
| myGridLayoutColumns = new Spinner(myGridLayoutDetails, SWT.FLAT); |
| myGridLayoutColumns.setMinimum(1); |
| myGridLayoutColumns.setMaximum(2147483647); |
| myGridLayoutColumns.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| myGridLayoutSameWidth = getWidgetFactory().createButton(myGridLayoutDetails, "Equal", SWT.CHECK); |
| myGridLayoutMargins = createGroup(myGridLayoutDetails, "Margins"); |
| createLabel(myGridLayoutMargins, "dx"); |
| myGridLayoutMarginX = new Spinner(myGridLayoutMargins, SWT.FLAT); |
| myGridLayoutMarginX.setMinimum(0); |
| myGridLayoutMarginX.setMaximum(2147483647); |
| myGridLayoutMarginX.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| createLabel(myGridLayoutMargins, "dy"); |
| myGridLayoutMarginY = new Spinner(myGridLayoutMargins, SWT.FLAT); |
| myGridLayoutMarginY.setMinimum(0); |
| myGridLayoutMarginY.setMaximum(2147483647); |
| myGridLayoutMarginY.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| myGridLayoutMargins.setLayout(new org.eclipse.swt.layout.GridLayout(2, false)); |
| myGridLayoutSpacing = createGroup(myGridLayoutDetails, "Spacing"); |
| createLabel(myGridLayoutSpacing, "dx"); |
| myGridLayoutSpacingX = new Spinner(myGridLayoutSpacing, SWT.FLAT); |
| myGridLayoutSpacingX.setMinimum(0); |
| myGridLayoutSpacingX.setMaximum(2147483647); |
| myGridLayoutSpacingX.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| createLabel(myGridLayoutSpacing, "dy"); |
| myGridLayoutSpacingY = new Spinner(myGridLayoutSpacing, SWT.FLAT); |
| myGridLayoutSpacingY.setMinimum(0); |
| myGridLayoutSpacingY.setMaximum(2147483647); |
| myGridLayoutSpacingY.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); // @see #145837 |
| myGridLayoutSpacing.setLayout(new org.eclipse.swt.layout.GridLayout(2, false)); |
| myGridLayoutDetails.setLayout(new org.eclipse.swt.layout.GridLayout(2, false)); |
| org.eclipse.jface.layout.GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).span(2, 1).applyTo(myGridLayoutSameWidth); |
| myCustomLayoutDetails = getWidgetFactory().createComposite(parent); |
| getWidgetFactory().paintBordersFor(myCustomLayoutDetails); |
| createLabel(myCustomLayoutDetails, "Qualified class name:"); |
| myCustomLayoutClass = getWidgetFactory().createText(myCustomLayoutDetails, null); |
| |
| parent.setLayout(new org.eclipse.swt.layout.FormLayout()); |
| org.eclipse.swt.layout.FormData parentFD; |
| parentFD = new org.eclipse.swt.layout.FormData(); |
| parentFD.left = new org.eclipse.swt.layout.FormAttachment(0, 20); |
| myLayoutKindRadios.setLayoutData(parentFD); |
| parentFD = new org.eclipse.swt.layout.FormData(); |
| parentFD.left = new org.eclipse.swt.layout.FormAttachment(myLayoutKindRadios, 20, org.eclipse.swt.SWT.RIGHT); |
| myFlowLayoutDetails.setLayoutData(parentFD); |
| parentFD = new org.eclipse.swt.layout.FormData(); |
| parentFD.left = new org.eclipse.swt.layout.FormAttachment(myLayoutKindRadios, 20, org.eclipse.swt.SWT.RIGHT); |
| myBorderLayoutDetails.setLayoutData(parentFD); |
| parentFD = new org.eclipse.swt.layout.FormData(); |
| parentFD.left = new org.eclipse.swt.layout.FormAttachment(myLayoutKindRadios, 20, org.eclipse.swt.SWT.RIGHT); |
| myGridLayoutDetails.setLayoutData(parentFD); |
| // TODO myFlowLayoutMajAlign.setItems(VALUES.toString().toArray()); |
| for (org.eclipse.emf.common.util.Enumerator e : Alignment.VALUES) { |
| myFlowLayoutMajAlign.add(e.getName()); |
| } |
| // TODO myFlowLayoutMinAlign.setItems(VALUES.toString().toArray()); |
| for (org.eclipse.emf.common.util.Enumerator e : Alignment.VALUES) { |
| myFlowLayoutMinAlign.add(e.getName()); |
| } |
| |
| for (Text t : new Text[] { myCustomLayoutClass }) { |
| t.addListener(SWT.Modify, this); |
| t.addListener(SWT.FocusOut, this); |
| t.addListener(SWT.KeyDown, this); |
| } |
| for (Spinner s : new Spinner[] { myFlowLayoutMajSpacing, myFlowLayoutMinSpacing, myBorderLayoutSpacingX, myBorderLayoutSpacingY, myGridLayoutColumns, myGridLayoutMarginX, myGridLayoutMarginY, |
| myGridLayoutSpacingX, myGridLayoutSpacingY }) { |
| s.addListener(SWT.Modify, this); |
| s.addListener(SWT.FocusOut, this); |
| } |
| for (Widget w : new Widget[] { myR1, myR2, myR3, myR4, myR5, myR6, myR7, myFlowLayoutIsVertical, myFlowLayoutMatchMinor, myFlowLayoutForceSingle, myGridLayoutSameWidth, myFlowLayoutMajAlign, |
| myFlowLayoutMinAlign }) { |
| w.addListener(SWT.Selection, this); |
| } |
| } |
| |
| @Override |
| public void setInput(IWorkbenchPart part, ISelection selection) { |
| super.setInput(part, selection); |
| Object newInput = null; |
| if (selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1) { |
| newInput = unwrap(((IStructuredSelection) selection).getFirstElement()); |
| } |
| if (newInput != myInput) { |
| if (myInput != null) { |
| detach(); |
| } |
| myInput = newInput; |
| if (newInput != null) { |
| attach(); |
| } |
| } |
| } |
| |
| protected void commit() { |
| |
| if (myFlowLayoutDetails.isVisible()) { |
| getInput().setLayout(GMFGraphFactory.eINSTANCE.createFlowLayout()); |
| ((FlowLayout) getInput().getLayout()).setVertical(myFlowLayoutIsVertical.getSelection()); |
| ((FlowLayout) getInput().getLayout()).setMatchMinorSize(myFlowLayoutMatchMinor.getSelection()); |
| ((FlowLayout) getInput().getLayout()).setForceSingleLine(myFlowLayoutForceSingle.getSelection()); |
| ((FlowLayout) getInput().getLayout()).setMajorSpacing(myFlowLayoutMajSpacing.getSelection()); |
| ((FlowLayout) getInput().getLayout()).setMinorSpacing(myFlowLayoutMinSpacing.getSelection()); |
| ((FlowLayout) getInput().getLayout()).setMinorAlignment(Alignment.get(myFlowLayoutMajAlign.getSelectionIndex())); |
| ((FlowLayout) getInput().getLayout()).setMajorAlignment(Alignment.get(myFlowLayoutMinAlign.getSelectionIndex())); |
| } |
| if (myBorderLayoutDetails.isVisible()) { |
| getInput().setLayout(GMFGraphFactory.eINSTANCE.createBorderLayout()); |
| if (((BorderLayout) getInput().getLayout()).getSpacing() == null) { |
| ((BorderLayout) getInput().getLayout()).setSpacing(GMFGraphFactory.eINSTANCE.createDimension()); |
| } |
| ((BorderLayout) getInput().getLayout()).getSpacing().setDx(myBorderLayoutSpacingX.getSelection()); |
| ((BorderLayout) getInput().getLayout()).getSpacing().setDy(myBorderLayoutSpacingY.getSelection()); |
| } |
| if (myGridLayoutDetails.isVisible()) { |
| getInput().setLayout(GMFGraphFactory.eINSTANCE.createGridLayout()); |
| ((GridLayout) getInput().getLayout()).setNumColumns(myGridLayoutColumns.getSelection()); |
| ((GridLayout) getInput().getLayout()).setEqualWidth(myGridLayoutSameWidth.getSelection()); |
| if (((GridLayout) getInput().getLayout()).getMargins() == null) { |
| ((GridLayout) getInput().getLayout()).setMargins(GMFGraphFactory.eINSTANCE.createDimension()); |
| } |
| if (((GridLayout) getInput().getLayout()).getSpacing() == null) { |
| ((GridLayout) getInput().getLayout()).setSpacing(GMFGraphFactory.eINSTANCE.createDimension()); |
| } |
| ((GridLayout) getInput().getLayout()).getMargins().setDx(myGridLayoutMarginX.getSelection()); |
| ((GridLayout) getInput().getLayout()).getMargins().setDy(myGridLayoutMarginY.getSelection()); |
| ((GridLayout) getInput().getLayout()).getSpacing().setDx(myGridLayoutSpacingX.getSelection()); |
| ((GridLayout) getInput().getLayout()).getSpacing().setDy(myGridLayoutSpacingY.getSelection()); |
| } |
| if (myR4.getSelection()) { |
| getInput().setLayout(GMFGraphFactory.eINSTANCE.createStackLayout()); |
| } |
| if (myR5.getSelection()) { |
| getInput().setLayout(GMFGraphFactory.eINSTANCE.createXYLayout()); |
| } |
| if (myCustomLayoutDetails.isVisible()) { |
| getInput().setLayout(GMFGraphFactory.eINSTANCE.createCustomLayout()); |
| ((CustomClass) getInput().getLayout()).setQualifiedClassName(/*Bridge.fieldGet(myCustomLayoutClass)*/myCustomLayoutClass.getText()); |
| } |
| if (myR7.getSelection()) { |
| getInput().setLayout(null); |
| } |
| |
| } |
| |
| @Override |
| public void refresh() { |
| myIsRefresh = true; |
| |
| if (getInput().getLayout() instanceof FlowLayout) { |
| if (getInput().getLayout() != null) { |
| myFlowLayoutIsVertical.setSelection(((FlowLayout) getInput().getLayout()).isVertical()); |
| myFlowLayoutMatchMinor.setSelection(((FlowLayout) getInput().getLayout()).isMatchMinorSize()); |
| myFlowLayoutForceSingle.setSelection(((FlowLayout) getInput().getLayout()).isForceSingleLine()); |
| myFlowLayoutMajSpacing.setSelection(((FlowLayout) getInput().getLayout()).getMajorSpacing()); |
| myFlowLayoutMinSpacing.setSelection(((FlowLayout) getInput().getLayout()).getMinorSpacing()); |
| myFlowLayoutMajAlign.select(((FlowLayout) getInput().getLayout()).getMinorAlignment().getValue()); |
| myFlowLayoutMinAlign.select(((FlowLayout) getInput().getLayout()).getMajorAlignment().getValue()); |
| } |
| myR1.setSelection(true); |
| myFlowLayoutDetails.setVisible(true); |
| } else { |
| myR1.setSelection(false); |
| myFlowLayoutDetails.setVisible(false); |
| } |
| if (getInput().getLayout() instanceof BorderLayout) { |
| if (getInput().getLayout() != null && ((BorderLayout) getInput().getLayout()).getSpacing() != null) { |
| myBorderLayoutSpacingX.setSelection(((BorderLayout) getInput().getLayout()).getSpacing().getDx()); |
| myBorderLayoutSpacingY.setSelection(((BorderLayout) getInput().getLayout()).getSpacing().getDy()); |
| } |
| myR2.setSelection(true); |
| myBorderLayoutDetails.setVisible(true); |
| } else { |
| myR2.setSelection(false); |
| myBorderLayoutDetails.setVisible(false); |
| } |
| if (getInput().getLayout() instanceof GridLayout) { |
| if (getInput().getLayout() != null) { |
| myGridLayoutColumns.setSelection(((GridLayout) getInput().getLayout()).getNumColumns()); |
| myGridLayoutSameWidth.setSelection(((GridLayout) getInput().getLayout()).isEqualWidth()); |
| } |
| if (getInput().getLayout() != null && ((GridLayout) getInput().getLayout()).getMargins() != null) { |
| myGridLayoutMarginX.setSelection(((GridLayout) getInput().getLayout()).getMargins().getDx()); |
| myGridLayoutMarginY.setSelection(((GridLayout) getInput().getLayout()).getMargins().getDy()); |
| } |
| if (getInput().getLayout() != null && ((GridLayout) getInput().getLayout()).getSpacing() != null) { |
| myGridLayoutSpacingX.setSelection(((GridLayout) getInput().getLayout()).getSpacing().getDx()); |
| myGridLayoutSpacingY.setSelection(((GridLayout) getInput().getLayout()).getSpacing().getDy()); |
| } |
| myR3.setSelection(true); |
| myGridLayoutDetails.setVisible(true); |
| } else { |
| myR3.setSelection(false); |
| myGridLayoutDetails.setVisible(false); |
| } |
| if (getInput().getLayout() instanceof StackLayout) { |
| myR4.setSelection(true); |
| } else { |
| myR4.setSelection(false); |
| } |
| if (getInput().getLayout() instanceof XYLayout) { |
| myR5.setSelection(true); |
| } else { |
| myR5.setSelection(false); |
| } |
| if (getInput().getLayout() instanceof CustomLayout) { |
| if (getInput().getLayout() != null) { |
| myCustomLayoutClass.setText(((CustomClass) getInput().getLayout()).getQualifiedClassName());/*Bridge.fieldSet(myCustomLayoutClass, ((CustomClass) getInput().getLayout()).getQualifiedClassName());*/ |
| } |
| myR6.setSelection(true); |
| myCustomLayoutDetails.setVisible(true); |
| } else { |
| myR6.setSelection(false); |
| myCustomLayoutDetails.setVisible(false); |
| } |
| if (getInput().getLayout() == null) { |
| myR7.setSelection(true); |
| } else { |
| myR7.setSelection(false); |
| } |
| |
| myIsRefresh = false; |
| } |
| |
| @Override |
| public void aboutToBeHidden() { |
| if (myInput != null) { |
| detach(); |
| } |
| } |
| |
| public void handleEvent(Event event) { |
| if (myIsRefresh) { |
| return; |
| } |
| |
| if (event.type == SWT.Modify) { |
| // XXX also override isDirty to compare values if they |
| // match model's and to clear dirty state in case like aaa^H^H^H |
| markDirty(); |
| } else if (event.type == SWT.FocusOut) { |
| applyChanges(); |
| } else if (event.type == SWT.KeyDown) { |
| if (event.keyCode == SWT.ESC) { |
| discardChanges(); |
| } else if (event.keyCode == SWT.CR) { |
| applyChanges(); |
| } |
| } |
| if (event.type == SWT.Selection) { |
| if (myFlowLayoutIsVertical == event.widget) { |
| applyChanges(); // Commit; View to Model |
| // Optimization? Instead of full refresh, just dependant widgets should get updated |
| } else if (myFlowLayoutMatchMinor == event.widget) { |
| applyChanges(); // Commit; View to Model |
| // Optimization? Instead of full refresh, just dependant widgets should get updated |
| } else if (myFlowLayoutForceSingle == event.widget) { |
| applyChanges(); // Commit; View to Model |
| // Optimization? Instead of full refresh, just dependant widgets should get updated |
| } else if (myGridLayoutSameWidth == event.widget) { |
| applyChanges(); // Commit; View to Model |
| // Optimization? Instead of full refresh, just dependant widgets should get updated |
| } |
| if (myR1 == event.widget) { |
| if (myR1.getSelection()) { |
| myFlowLayoutDetails.setVisible(true); |
| myBorderLayoutDetails.setVisible(false); |
| myGridLayoutDetails.setVisible(false); |
| myCustomLayoutDetails.setVisible(false); |
| applyChanges(); // Commit; View to Model |
| if (getInput().getLayout() != null) { |
| myFlowLayoutIsVertical.setSelection(((FlowLayout) getInput().getLayout()).isVertical()); |
| myFlowLayoutMatchMinor.setSelection(((FlowLayout) getInput().getLayout()).isMatchMinorSize()); |
| myFlowLayoutForceSingle.setSelection(((FlowLayout) getInput().getLayout()).isForceSingleLine()); |
| myFlowLayoutMajSpacing.setSelection(((FlowLayout) getInput().getLayout()).getMajorSpacing()); |
| myFlowLayoutMinSpacing.setSelection(((FlowLayout) getInput().getLayout()).getMinorSpacing()); |
| myFlowLayoutMajAlign.select(((FlowLayout) getInput().getLayout()).getMinorAlignment().getValue()); |
| myFlowLayoutMinAlign.select(((FlowLayout) getInput().getLayout()).getMajorAlignment().getValue()); |
| } |
| } else { |
| myFlowLayoutDetails.setVisible(false); |
| } |
| } else if (myR2 == event.widget) { |
| if (myR2.getSelection()) { |
| myBorderLayoutDetails.setVisible(true); |
| myFlowLayoutDetails.setVisible(false); |
| myGridLayoutDetails.setVisible(false); |
| myCustomLayoutDetails.setVisible(false); |
| applyChanges(); // Commit; View to Model |
| if (getInput().getLayout() != null && ((BorderLayout) getInput().getLayout()).getSpacing() != null) { |
| myBorderLayoutSpacingX.setSelection(((BorderLayout) getInput().getLayout()).getSpacing().getDx()); |
| myBorderLayoutSpacingY.setSelection(((BorderLayout) getInput().getLayout()).getSpacing().getDy()); |
| } |
| } else { |
| myBorderLayoutDetails.setVisible(false); |
| } |
| } else if (myR3 == event.widget) { |
| if (myR3.getSelection()) { |
| myGridLayoutDetails.setVisible(true); |
| myFlowLayoutDetails.setVisible(false); |
| myBorderLayoutDetails.setVisible(false); |
| myCustomLayoutDetails.setVisible(false); |
| applyChanges(); // Commit; View to Model |
| if (getInput().getLayout() != null) { |
| myGridLayoutColumns.setSelection(((GridLayout) getInput().getLayout()).getNumColumns()); |
| myGridLayoutSameWidth.setSelection(((GridLayout) getInput().getLayout()).isEqualWidth()); |
| } |
| if (getInput().getLayout() != null && ((GridLayout) getInput().getLayout()).getMargins() != null) { |
| myGridLayoutMarginX.setSelection(((GridLayout) getInput().getLayout()).getMargins().getDx()); |
| myGridLayoutMarginY.setSelection(((GridLayout) getInput().getLayout()).getMargins().getDy()); |
| } |
| if (getInput().getLayout() != null && ((GridLayout) getInput().getLayout()).getSpacing() != null) { |
| myGridLayoutSpacingX.setSelection(((GridLayout) getInput().getLayout()).getSpacing().getDx()); |
| myGridLayoutSpacingY.setSelection(((GridLayout) getInput().getLayout()).getSpacing().getDy()); |
| } |
| } else { |
| myGridLayoutDetails.setVisible(false); |
| } |
| } else if (myR4 == event.widget) { |
| if (myR4.getSelection()) { |
| myFlowLayoutDetails.setVisible(false); |
| myBorderLayoutDetails.setVisible(false); |
| myGridLayoutDetails.setVisible(false); |
| myCustomLayoutDetails.setVisible(false); |
| applyChanges(); // Commit; View to Model |
| } |
| } else if (myR5 == event.widget) { |
| if (myR5.getSelection()) { |
| myFlowLayoutDetails.setVisible(false); |
| myBorderLayoutDetails.setVisible(false); |
| myGridLayoutDetails.setVisible(false); |
| myCustomLayoutDetails.setVisible(false); |
| applyChanges(); // Commit; View to Model |
| } |
| } else if (myR6 == event.widget) { |
| if (myR6.getSelection()) { |
| myCustomLayoutDetails.setVisible(true); |
| myFlowLayoutDetails.setVisible(false); |
| myBorderLayoutDetails.setVisible(false); |
| myGridLayoutDetails.setVisible(false); |
| applyChanges(); // Commit; View to Model |
| if (getInput().getLayout() != null) { |
| myCustomLayoutClass.setText(((CustomClass) getInput().getLayout()).getQualifiedClassName());/*Bridge.fieldSet(myCustomLayoutClass, ((CustomClass) getInput().getLayout()).getQualifiedClassName());*/ |
| } |
| } else { |
| myCustomLayoutDetails.setVisible(false); |
| } |
| } else if (myR7 == event.widget) { |
| if (myR7.getSelection()) { |
| myFlowLayoutDetails.setVisible(false); |
| myBorderLayoutDetails.setVisible(false); |
| myGridLayoutDetails.setVisible(false); |
| myCustomLayoutDetails.setVisible(false); |
| applyChanges(); // Commit; View to Model |
| } |
| } |
| if (myFlowLayoutMajAlign == event.widget || myFlowLayoutMinAlign == event.widget) { |
| applyChanges(); |
| } |
| |
| } |
| } |
| |
| public void modelChanged(Notification msg) { |
| if (!myIsCommit && Display.getCurrent() != null) { |
| refresh(); |
| } |
| } |
| |
| private void markDirty() { |
| // NO-OP, need that to share Update::handleEvent template with IFormPart which has same method |
| // Perhaps, clients may find this method useful for some purpose? |
| } |
| |
| protected void applyChanges() { |
| try { |
| myIsCommit = true; |
| commit(); |
| } finally { |
| myIsCommit = false; |
| } |
| } |
| |
| protected void discardChanges() { |
| refresh(); |
| } |
| |
| protected Object unwrap(Object element) { |
| // TODO may need to adapt selected element to smth else, |
| // do it here |
| return element; |
| } |
| |
| private void attach() { |
| myModelListeners = new org.eclipse.emf.common.notify.Adapter[] { new AttachAdapter(GMFGraphPackage.eINSTANCE.getLayoutable_Layout(), new ChangeTracker() { |
| |
| public void modelChanged(org.eclipse.emf.common.notify.Notification n) { |
| // FIXME enable/disable widget(s) -- HOWEVER, need access to Binding/Widget here, so can't share the template with e.g. Alex's ItemProviders |
| } |
| }, new FeatureTracker(this, GMFGraphPackage.eINSTANCE.getFlowLayout_Vertical(), GMFGraphPackage.eINSTANCE.getFlowLayout_MatchMinorSize(), GMFGraphPackage.eINSTANCE |
| .getFlowLayout_ForceSingleLine(), GMFGraphPackage.eINSTANCE.getFlowLayout_MajorSpacing(), GMFGraphPackage.eINSTANCE.getFlowLayout_MinorSpacing(), GMFGraphPackage.eINSTANCE |
| .getGridLayout_NumColumns(), GMFGraphPackage.eINSTANCE.getGridLayout_EqualWidth(), GMFGraphPackage.eINSTANCE.getCustomClass_QualifiedClassName(), GMFGraphPackage.eINSTANCE |
| .getFlowLayout_MinorAlignment(), GMFGraphPackage.eINSTANCE.getFlowLayout_MajorAlignment()), new AttachAdapter(GMFGraphPackage.eINSTANCE.getBorderLayout_Spacing(), new FeatureTracker( |
| this, GMFGraphPackage.eINSTANCE.getDimension_Dx(), GMFGraphPackage.eINSTANCE.getDimension_Dy())), new AttachAdapter(GMFGraphPackage.eINSTANCE.getGridLayout_Margins(), |
| new FeatureTracker(this, GMFGraphPackage.eINSTANCE.getDimension_Dx(), GMFGraphPackage.eINSTANCE.getDimension_Dy())), new AttachAdapter(GMFGraphPackage.eINSTANCE |
| .getGridLayout_Spacing(), new FeatureTracker(this, GMFGraphPackage.eINSTANCE.getDimension_Dx(), GMFGraphPackage.eINSTANCE.getDimension_Dy()))) }; |
| getInput().eAdapters().addAll(java.util.Arrays.asList(myModelListeners)); |
| |
| } |
| |
| private void detach() { |
| if (myModelListeners != null) { |
| getInput().eAdapters().removeAll(java.util.Arrays.asList(myModelListeners)); |
| myModelListeners = null; |
| } |
| |
| } |
| |
| protected Layoutable getInput() { |
| // TODO implement; |
| return (Layoutable) myInput; |
| } |
| |
| private org.eclipse.swt.widgets.Label createLabel(org.eclipse.swt.widgets.Composite parent, String label) { |
| org.eclipse.swt.widgets.Label l = new org.eclipse.swt.widgets.Label(parent, SWT.NONE); |
| if (label != null) |
| l.setText(label); |
| getWidgetFactory().adapt(l, false, false); |
| return l; |
| } |
| |
| private org.eclipse.swt.widgets.Group createGroup(org.eclipse.swt.widgets.Composite parent, String label) { |
| org.eclipse.swt.widgets.Group g = new org.eclipse.swt.widgets.Group(parent, SWT.SHADOW_NONE); |
| if (label != null) |
| g.setText(label); |
| getWidgetFactory().adapt(g, false, false); |
| getWidgetFactory().paintBordersFor(g); |
| return g; |
| } |
| |
| } |