diff options
author | Veronika Irvine <veronika> | 2006-02-06 19:38:43 +0000 |
---|---|---|
committer | Veronika Irvine <veronika> | 2006-02-06 19:38:43 +0000 |
commit | 186380368966892b7f637df475c8899c4eb1a9d2 (patch) | |
tree | c9ff30730129dd2f9c81cc073468e94eca5ed23e /examples | |
parent | 56cde472421f66db171193d45550146f6b6ccad0 (diff) | |
download | eclipse.platform.swt-186380368966892b7f637df475c8899c4eb1a9d2.tar.gz eclipse.platform.swt-186380368966892b7f637df475c8899c4eb1a9d2.tar.xz eclipse.platform.swt-186380368966892b7f637df475c8899c4eb1a9d2.zip |
add new snippet
Diffstat (limited to 'examples')
-rw-r--r-- | examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java new file mode 100644 index 0000000000..56a6bb9dfc --- /dev/null +++ b/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet217.java @@ -0,0 +1,119 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * 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: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.snippets; + +import org.eclipse.swt.*; +import org.eclipse.swt.custom.*; +import org.eclipse.swt.events.*; +import org.eclipse.swt.graphics.*; +import org.eclipse.swt.layout.*; +import org.eclipse.swt.widgets.*; + +/** + * StyledText snippet: embed images + * + * For a list of all SWT example snippets see + * http://www.eclipse.org/swt/snippets/ + * + * @since 3.2 + */ +public class Snippet217 { + + static StyledText styledText; + static String text = + "This snippet shows how to embed widgets in a StyledText.\n"+ + "Here is one: \uFFFC, and here is another: \uFFFC."; + static int[] offsets; + static Control[] controls; + static int MARGIN = 5; + + static void addControl(Control control, int offset) { + StyleRange style = new StyleRange (); + style.start = offset; + style.length = 1; + control.pack(); + Rectangle rect = control.getBounds(); + int ascent = 2*rect.height/3; + int descent = rect.height - ascent; + style.metrics = new GlyphMetrics(ascent + MARGIN, descent + MARGIN, rect.width + 2*MARGIN); + styledText.setStyleRange(style); + } + + public static void main(String [] args) { + final Display display = new Display(); + final Shell shell = new Shell(display); + shell.setLayout(new GridLayout()); + styledText = new StyledText(shell, SWT.WRAP | SWT.BORDER); + styledText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + styledText.setText(text); + controls = new Control[2]; + Button button = new Button(styledText, SWT.PUSH); + button.setText("Button 1"); + controls[0] = button; + Combo combo = new Combo(styledText, SWT.NONE); + combo.add("item 1"); + combo.add("another item"); + controls[1] = combo; + offsets = new int[controls.length]; + int lastOffset = 0; + for (int i = 0; i < controls.length; i++) { + int offset = text.indexOf("\uFFFC", lastOffset); + offsets[i] = offset; + addControl(controls[i], offsets[i]); + lastOffset = offset + 1; + } + + // use a verify listener to keep the offsets up to date + styledText.addVerifyListener(new VerifyListener() { + public void verifyText(VerifyEvent e) { + int start = e.start; + int replaceCharCount = e.end - e.start; + int newCharCount = e.text.length(); + for (int i = 0; i < offsets.length; i++) { + int offset = offsets[i]; + if (start <= offset && offset < start + replaceCharCount) { + // this widget is being deleted from the text + if (controls[i] != null && !controls[i].isDisposed()) { + controls[i].dispose(); + controls[i] = null; + } + offset = -1; + } + if (offset != -1 && offset >= start) offset += newCharCount - replaceCharCount; + offsets[i] = offset; + } + } + }); + + // reposition widgets on paint event + styledText.addPaintObjectListener(new PaintObjectListener() { + public void paintObject(PaintObjectEvent event) { + StyleRange style = event.style; + int start = style.start; + for (int i = 0; i < offsets.length; i++) { + int offset = offsets[i]; + if (start == offset) { + controls[i].setLocation(event.x + MARGIN, event.y + MARGIN); + break; + } + } + } + }); + + shell.setSize(400, 400); + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); + } +} |