summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorVeronika Irvine <veronika>2006-02-06 19:38:43 +0000
committerVeronika Irvine <veronika>2006-02-06 19:38:43 +0000
commit186380368966892b7f637df475c8899c4eb1a9d2 (patch)
treec9ff30730129dd2f9c81cc073468e94eca5ed23e /examples
parent56cde472421f66db171193d45550146f6b6ccad0 (diff)
downloadeclipse.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.java119
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();
+ }
+}