/** * Copyright (c) 2013-2016 Angelo ZERR. * 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: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package tern.eclipse.ide.internal.ui.controls; import org.eclipse.core.resources.IProject; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Text; import tern.eclipse.ide.internal.ui.TernUIMessages; import tern.eclipse.ide.ui.utils.BrowserSupport; import tern.eclipse.ide.ui.viewers.TernModuleLabelProvider; import tern.metadata.TernModuleMetadata; import tern.server.ITernModule; import tern.utils.StringUtils; /** * Display information of the tern module. * */ public class TernModuleDetailsPanel extends AbstractTernModulePanel { public TernModuleDetailsPanel(Composite parent, ITernModule module, IProject project) { super(parent, module, project); } @Override protected void createUI(Composite parent, ITernModule module, IProject project) { GridLayout layout = new GridLayout(1, false); super.setLayout(layout); // Create title header of the module with icon. createHeader(parent, module); // Create separator createSeparator(); // Create body of the module. createBody(module); } private void createHeader(final Composite parent, ITernModule module) { Composite header = new Composite(this, SWT.NONE); GridLayout layout = new GridLayout(2, false); header.setLayout(layout); addInfo(header, null, TernModuleLabelProvider.getImageModule(module), module.getName(), JFaceResources.getFontRegistry().get(DetailsPanel.HEADER_FONT), false); } private void createSeparator() { final Label separator = new Label(this, SWT.SEPARATOR | SWT.HORIZONTAL); separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } private void createBody(ITernModule module) { GridLayout layout; final ScrolledComposite details = new ScrolledComposite(this, SWT.V_SCROLL | SWT.H_SCROLL); details.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); details.setMinWidth(300); details.setExpandHorizontal(true); details.setExpandVertical(true); final Composite nestedDetailsComposite = new Composite(details, SWT.NONE); layout = new GridLayout(2, false); layout.marginLeft = 0; layout.marginTop = 0; layout.marginHeight = 0; nestedDetailsComposite.setLayout(layout); details.setContent(nestedDetailsComposite); TernModuleMetadata metadata = module.getMetadata(); if (metadata != null && !StringUtils.isEmpty(metadata.getDescription())) { final Text descTextField = new Text(nestedDetailsComposite, SWT.WRAP | SWT.READ_ONLY); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; descTextField.setLayoutData(data); descTextField.setText(metadata.getDescription()); } // Home page addInfo(nestedDetailsComposite, TernUIMessages.TernModuleDetailsPanel_homepage, null, metadata != null ? metadata.getHomePage() : "", null, true); // Author addInfo(nestedDetailsComposite, TernUIMessages.TernModuleDetailsPanel_author, null, metadata != null ? metadata.getAuthor() : "", null, false); // Repository URL addInfo(nestedDetailsComposite, TernUIMessages.TernModuleDetailsPanel_repositoryURL, null, metadata != null ? metadata.getRepositoryURL() : "", null, true); // Bugs URL addInfo(nestedDetailsComposite, TernUIMessages.TernModuleDetailsPanel_bugsURL, null, metadata != null ? metadata.getBugsURL() : "", null, true); // Help URL addInfo(nestedDetailsComposite, TernUIMessages.TernModuleDetailsPanel_helpURL, null, metadata != null ? metadata.getHelpURL() : "", null, true); } private void addInfo(final Composite parent, String valueLabel, Image image, String valueInfo, Font font, boolean hyperlink) { Label label = new Label(parent, SWT.NONE); label.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); label.setText(valueLabel != null ? valueLabel : ""); if (image != null) { label.setImage(image); } if (hyperlink) { Link link = new Link(parent, SWT.WRAP); link.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (link != null) { link.setFont(font); } if (!StringUtils.isEmpty(valueInfo)) { BrowserSupport.setLinkTarget(link, valueInfo, valueInfo); } } else { Text textField = new Text(parent, SWT.WRAP | SWT.READ_ONLY); textField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); textField.setText(valueInfo != null ? valueInfo : ""); if (textField != null) { textField.setFont(font); } } } }