package org.eclipse.papyrus.uml.diagram.sequence.apex.part; import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer; import org.eclipse.gef.ui.rulers.RulerComposite; import org.eclipse.gmf.runtime.notation.Diagram; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; import org.eclipse.papyrus.uml.diagram.sequence.apex.part.tweaks.ITweak; import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditor; 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.Display; import org.eclipse.ui.IPerspectiveDescriptor; public class ApexUMLDiagramEditor extends UMLDiagramEditor { public static final String EDITOR_SHOW_TWEAK = "tweak"; public ApexUMLDiagramEditor(ServicesRegistry servicesRegistry, Diagram diagram) throws ServiceException { super(servicesRegistry, diagram); } private boolean fIsTweakVisible; private Composite fTweakComposite; private ITweak fTweak; private IPropertyChangeListener fPreferenceStoreChangeListener = new PreferenceStoreChangeListener(); @Override public void createPartControl(Composite parent) { super.createPartControl(parent); fTweak = createTweak(); fTweak.init(); fIsTweakVisible = isTweakShown(); if (fIsTweakVisible) { showTweak(); } } @Override protected void createGraphicalViewer(Composite parent) { setRulerComposite(new RulerComposite(parent, SWT.NONE)); Composite rulerComposite = getRulerComposite(); GridLayout layout = new GridLayout(1, false); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = 0; layout.verticalSpacing = 1; rulerComposite.setLayout(layout); rulerComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); fTweakComposite = new Composite(rulerComposite, SWT.NONE); GridData layoutData= new GridData(SWT.FILL, SWT.TOP, true, false); fTweakComposite.setLayoutData(layoutData); layout = new GridLayout(1, false); layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = 0; layout.verticalSpacing = 0; layoutData.exclude= true; fTweakComposite.setLayout(layout); ScrollingGraphicalViewer sGViewer = createScrollingGraphicalViewer(); sGViewer.createControl(getRulerComposite()); setGraphicalViewer(sGViewer); hookGraphicalViewer(); configureGraphicalViewer(); initializeGraphicalViewer(); getRulerComposite().setGraphicalViewer( (ScrollingGraphicalViewer) getGraphicalViewer()); Control control = sGViewer.getControl(); control.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); } @Override protected void initializeGraphicalViewer() { super.initializeGraphicalViewer(); Object store = getPreferencesHint().getPreferenceStore(); if (store instanceof IPreferenceStore) { ((IPreferenceStore)store).addPropertyChangeListener(fPreferenceStoreChangeListener); } } public ITweak createTweak() { return new SequenceEditorTweak(this); } protected boolean isTweakShown() { Object store= getPreferencesHint().getPreferenceStore(); String key= getTweakPreferenceKey(); if (store instanceof IPreferenceStore && key != null) { return ((IPreferenceStore)store).getBoolean(key); } return false; } String getTweakPreferenceKey() { IPerspectiveDescriptor perspective = getSite().getPage().getPerspective(); if (perspective == null) { return null; } return ApexUMLDiagramEditor.EDITOR_SHOW_TWEAK + "." + perspective.getId(); //$NON-NLS-1$; } private void showTweak() { if (fTweak == null) return; if (fTweakComposite.getChildren().length == 0) { fTweak.createContent(fTweakComposite); } ((GridData) fTweakComposite.getLayoutData()).exclude= false; fTweakComposite.setVisible(true); fTweak.setInput(getDiagram()); fTweakComposite.getParent().layout(true, true); } private void hideTweak() { if (fTweak == null) { return; } ((GridData) fTweakComposite.getLayoutData()).exclude= true; fTweakComposite.setVisible(false); fTweakComposite.getParent().layout(true, true); } protected void handlePreferenceStoreChanged(PropertyChangeEvent event) { final String property = event.getProperty(); try { boolean newBooleanValue = false; Object newValue = event.getNewValue(); if (newValue != null) { newBooleanValue = Boolean.valueOf(newValue.toString()).booleanValue(); } if (property.equals(getTweakPreferenceKey())) { if (newBooleanValue != fIsTweakVisible) { fIsTweakVisible = newBooleanValue; if (fIsTweakVisible) { showTweak(); } else { hideTweak(); } } } } finally { } } private class PreferenceStoreChangeListener implements IPropertyChangeListener { public void propertyChange(PropertyChangeEvent event) { handlePreferenceStoreChanged(event); } } }