summaryrefslogtreecommitdiff
path: root/src/plugins/snippets/src/com/motorola/studio/android/codesnippets/AndroidSnippetsTooltip.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/snippets/src/com/motorola/studio/android/codesnippets/AndroidSnippetsTooltip.java')
-rw-r--r--src/plugins/snippets/src/com/motorola/studio/android/codesnippets/AndroidSnippetsTooltip.java147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/plugins/snippets/src/com/motorola/studio/android/codesnippets/AndroidSnippetsTooltip.java b/src/plugins/snippets/src/com/motorola/studio/android/codesnippets/AndroidSnippetsTooltip.java
new file mode 100644
index 0000000..a954ba8
--- /dev/null
+++ b/src/plugins/snippets/src/com/motorola/studio/android/codesnippets/AndroidSnippetsTooltip.java
@@ -0,0 +1,147 @@
+/*
+* 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;
+ }
+
+}