/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.motorola.studio.android.codesnippets; import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer; import org.eclipse.jdt.ui.PreferenceConstants; import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration; import org.eclipse.jdt.ui.text.JavaTextTools; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.jface.window.ToolTip; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; 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.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.wst.common.snippets.core.ISnippetItem; import com.motorola.studio.android.codesnippets.i18n.AndroidSnippetsNLS; /** * Customized tooltip for snippets in Snippet View. * It's intended to display the snippet preview * */ @SuppressWarnings("restriction") public class AndroidSnippetsTooltip extends ToolTip { /* * The snippet item to be displayed in the tooltip */ private final ISnippetItem item; /** * Constructor * * @param item the snippet item to be displayed * @param control */ public AndroidSnippetsTooltip(ISnippetItem item, Control control) { super(control, NO_RECREATE, true); this.item = item; } /** * Display the snippet preview by using a JAVA Source Viewer, which is * used to highlight the code * * @see org.eclipse.jface.window.ToolTip#createToolTipContentArea(org.eclipse.swt.widgets.Event, org.eclipse.swt.widgets.Composite) */ @Override protected Composite createToolTipContentArea(Event event, Composite parent) { // the main composite Composite mainComposite = new Composite(parent, SWT.NULL); mainComposite.setLayout(new GridLayout(1, true)); /* * snippet preview label */ Label textElem = new Label(mainComposite, SWT.LEFT); textElem.setText(AndroidSnippetsNLS.UI_Snippet_Preview); textElem.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)); /* * JAVA source viewer */ final ScrolledComposite scroll = new ScrolledComposite(mainComposite, SWT.H_SCROLL | SWT.V_SCROLL); scroll.setLayout(new FillLayout()); // create scroll layout which receives values to limit its area of display GridData scrollLayoutData = new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1); Rectangle visibleArea = parent.getDisplay().getActiveShell().getMonitor().getClientArea(); scrollLayoutData.heightHint = visibleArea.height / 3; scrollLayoutData.widthHint = visibleArea.width / 3; scroll.setLayoutData(scrollLayoutData); final Composite javaSourceViewerComposite = new Composite(scroll, SWT.NULL); javaSourceViewerComposite.setLayout(new FillLayout()); int styles = SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION; Document document = new Document(item.getContentString()); IPreferenceStore store = JavaPlugin.getDefault().getCombinedPreferenceStore(); JavaTextTools javaTextTools = JavaPlugin.getDefault().getJavaTextTools(); SourceViewer javaSourceViewer = new JavaSourceViewer(javaSourceViewerComposite, null, null, false, styles, store); javaSourceViewer.configure(new JavaSourceViewerConfiguration(javaTextTools .getColorManager(), store, null, null)); javaSourceViewer.getControl().setFont( JFaceResources.getFont(PreferenceConstants.EDITOR_TEXT_FONT)); javaTextTools.setupJavaDocumentPartitioner(document); javaSourceViewer.setDocument(document); javaSourceViewer.setEditable(false); // set up scroll scroll.setContent(javaSourceViewerComposite); scroll.setExpandHorizontal(true); scroll.setExpandVertical(true); scroll.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) { scroll.setMinSize(javaSourceViewerComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); } }); return mainComposite; } /** * Get the snippet item being displayed * * @return the snippet item being displayed */ public ISnippetItem getItem() { return item; } }