/******************************************************************************* * Copyright (c) 2016 Red Hat. * 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: * Red Hat - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.ui.views; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.linuxtools.docker.core.DockerConnectionManager; import org.eclipse.linuxtools.docker.core.IDockerConnection; import org.eclipse.linuxtools.docker.core.IDockerImage; import org.eclipse.linuxtools.docker.core.IDockerImageHierarchyNode; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.forms.widgets.Form; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.navigator.CommonNavigator; import org.eclipse.ui.navigator.CommonViewer; import org.eclipse.ui.part.PageBook; import org.eclipse.ui.views.properties.IPropertySheetPage; import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; /** * */ public class DockerImageHierarchyView extends CommonNavigator implements ITabbedPropertySheetPageContributor { /** the id of the view as defined in {@code plugin.xml}. */ public static final String VIEW_ID = "org.eclipse.linuxtools.docker.ui.dockerImageHierarchyView"; //$NON-NLS-1$ private Control hierarchyPane; private Control explanationsPane; private PageBook pageBook; private IDockerImageHierarchyNode selectedImageHierarchy = null; private Control currentPane; private IDockerConnection connection; @Override protected Object getInitialInput() { return this.selectedImageHierarchy; } /** * Shows the given resolved hierarchy associated with the selected * {@link IDockerImage}. * * @param selectedImageHierarchy * the hierarchy to display in this view * @param selectedElement * the element to select in the view */ public void show(final IDockerImageHierarchyNode selectedImageHierarchy) { this.selectedImageHierarchy = selectedImageHierarchy; if (this.selectedImageHierarchy != null) { this.getCommonViewer().setInput(new DockerImageHiearchy( this.selectedImageHierarchy.getRoot())); if (this.getCommonViewer() == null) System.out.println("null viewer"); this.getCommonViewer().expandAll(); this.getCommonViewer().setSelection( new StructuredSelection(selectedImageHierarchy)); } showHierarchyOrExplanations(); } @Override public void createPartControl(final Composite parent) { final FormToolkit toolkit = new FormToolkit(parent.getDisplay()); this.pageBook = new PageBook(parent, SWT.NONE); this.hierarchyPane = createHierarchyPane(pageBook, toolkit); this.explanationsPane = createExplanationPane(pageBook, toolkit); showHierarchyOrExplanations(); } private Control createExplanationPane(final PageBook pageBook, final FormToolkit toolkit) { final Form form = toolkit.createForm(pageBook); final Composite container = form.getBody(); GridLayoutFactory.fillDefaults().numColumns(1).margins(5, 5) .applyTo(container); final Label label = new Label(container, SWT.WRAP); label.setText( DVMessages.getString("DockerHierarchyViewNoImageSelected.msg")); //$NON-NLS-1$ GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.FILL) .grab(true, false).applyTo(label); return form; } private Control createHierarchyPane(final PageBook pageBook, final FormToolkit toolkit) { final Form form = toolkit.createForm(pageBook); final Composite container = form.getBody(); GridLayoutFactory.fillDefaults().numColumns(1).margins(5, 5) .applyTo(container); super.createPartControl(container); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL) .grab(true, true).applyTo(getCommonViewer().getControl()); return form; } @Override protected CommonViewer createCommonViewer(final Composite parent) { final CommonViewer viewer = super.createCommonViewer(parent); setLinkingEnabled(false); return viewer; } @Override public String getContributorId() { return "org.eclipse.linuxtools.docker.ui.propertiesViewContributor"; //$NON-NLS-1$ // return getSite().getId(); } @SuppressWarnings("unchecked") @Override public <T> T getAdapter(final Class<T> adapter) { if (IPropertySheetPage.class.isAssignableFrom(adapter)) { return (T) new TabbedPropertySheetPage(this, true); } return super.getAdapter(adapter); } @Override public void dispose() { } /** * Shows the {@link DockerExplorerView#explanationsPane} or the * {@link DockerExplorerView#hierarchyPane} depending on the number of * connections in the {@link DockerConnectionManager}. */ public void showHierarchyOrExplanations() { if (this.selectedImageHierarchy == null) { this.currentPane = explanationsPane; pageBook.showPage(explanationsPane); } else { this.currentPane = hierarchyPane; pageBook.showPage(hierarchyPane); } } /** * @return <code>true</code> if the current panel is the one containing a * {@link TreeViewer} of {@link IDockerConnection}s, * <code>false</code> otherwise. */ public boolean isShowingConnectionsPane() { return this.currentPane == hierarchyPane; } static class DockerImageHiearchy { private final IDockerImageHierarchyNode root; public DockerImageHiearchy(final IDockerImageHierarchyNode root) { this.root = root; } public IDockerImageHierarchyNode getRoot() { return this.root; } } /** * @return the {@link IDockerConnection} used to display the current * hierarchy. */ public IDockerConnection getConnection() { return connection; } public void setConnection(IDockerConnection connection) { this.connection = connection; } }