/******************************************************************************* * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany * - initial API and implementation ******************************************************************************/ package org.reuseware.coconut.description.classify.views.facet; import org.eclipse.jface.viewers.ContentViewer; import org.eclipse.jface.viewers.Viewer; 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.reuseware.coconut.description.Facet; import org.reuseware.coconut.description.FacetTypeDecorator; import org.reuseware.coconut.description.FragmentDescription; public abstract class JFaceFacetView extends FacetView { protected Composite compButtons; protected Composite compViewer; protected abstract ContentViewer buildViewer(boolean isMultiValue); protected abstract ContentViewer getViewer(); protected abstract void setContentProvider(boolean isMultiValue); @Override public void createPartControl(Composite parent) { super.createPartControl(parent); createButtonComposite(); createViewerComposite(); } private void createButtonComposite() { if (compCustom == null || compCustom.isDisposed()) buildCustomComposite(); compButtons = new Composite(compCustom, SWT.NONE); compButtons.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); GridLayout gridLayout = new GridLayout(1, false); gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; gridLayout.verticalSpacing = 5; gridLayout.horizontalSpacing = 5; compButtons.setLayout(gridLayout); } private void createViewerComposite() { if (compCustom == null || compCustom.isDisposed()) buildCustomComposite(); compViewer = new Composite(compCustom, SWT.NONE); compViewer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout gridLayout = new GridLayout(1, false); gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; gridLayout.verticalSpacing = 5; gridLayout.horizontalSpacing = 5; compViewer.setLayout(gridLayout); } @Override public void setContext(FacetTypeDecorator context, FragmentDescription description) { if (context == null) return; // clean view if needed if (compButtons != null && compButtons.getChildren().length != 0) { compButtons.dispose(); compViewer.dispose(); createButtonComposite(); createViewerComposite(); } // create buttons if (browserMode) addResetAndSetButton(compButtons); else addSetButton(compButtons); // create jFace viewer Viewer viewer = buildViewer(context.getDecoratee().isMultiValue()); viewer.setInput(context); super.setContext(context, description); } private void renewView() { if (compButtons == null || compViewer == null || compButtons.isDisposed() || compViewer.isDisposed()) { // create Composites createButtonComposite(); createViewerComposite(); // create buttons if (browserMode) addResetAndSetButton(compButtons); else addSetButton(compButtons); } } @Override public void refreshContext(FacetTypeDecorator context, Facet select) { if (context == null) return; // update the viewer ContentViewer viewer = getViewer(); if (viewer != null) { if (viewer.getControl().isDisposed() || viewer.getContentProvider() == null) { renewView(); setContentProvider(context.getDecoratee().isMultiValue()); } viewer.setInput(context); } // if there were an old selection, set viewer's selection if (select != null) supportEdit(select); super.refreshContext(context, select); } }