| /******************************************************************************* |
| * Copyright (c) 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.draw2d.examples.text; |
| |
| import org.eclipse.swt.graphics.Font; |
| |
| import org.eclipse.draw2d.ColorConstants; |
| import org.eclipse.draw2d.FigureCanvas; |
| import org.eclipse.draw2d.IFigure; |
| import org.eclipse.draw2d.PositionConstants; |
| import org.eclipse.draw2d.examples.AbstractExample; |
| import org.eclipse.draw2d.text.BlockFlow; |
| import org.eclipse.draw2d.text.FlowPage; |
| import org.eclipse.draw2d.text.InlineFlow; |
| import org.eclipse.draw2d.text.SimpleTextLayout; |
| import org.eclipse.draw2d.text.TextFlow; |
| |
| /** |
| * This example shows the basic ways that the draw2d.text figures can be used. |
| * |
| * @author hudsonr |
| * @since 2.0 |
| */ |
| public class TextFlowExample extends AbstractExample { |
| |
| static protected IFigure createAlignmentParagraph() { |
| BlockFlow block = new BlockFlow(); |
| block.setHorizontalAligment(PositionConstants.RIGHT); |
| block.add(new TextFlow("An inline flow figure's aligment is determined " |
| + "by the block flow in which it resides. This block is aligned using ")); |
| TextFlow text = new TextFlow("PositionConstants.RIGHT"); |
| text.setFont(COURIER); |
| block.add(text); |
| block.add(new TextFlow(", which results in right text aligment")); |
| return block; |
| } |
| |
| static protected IFigure createBaselineParagraph() { |
| BlockFlow block = new BlockFlow(); |
| |
| String message[] = { |
| "Text fragments ", |
| "with different ", |
| "Font sizes will ", |
| "have their ", |
| "baseline ", |
| "vertically ", |
| "aligned ", |
| "within ", |
| "the current ", |
| "line" |
| }; |
| |
| for (int i=0; i<message.length; i++){ |
| TextFlow tf = new TextFlow(message[i]); |
| //This is a resource leak. |
| tf.setFont(new Font(null, "Helvetica", i+8, 0)); |
| block.add(tf); |
| } |
| |
| return block; |
| } |
| |
| static protected IFigure createBlockParagraph() { |
| BlockFlow blockFlow = new BlockFlow(); |
| blockFlow.setFont(COURIER); |
| TextFlow contents = new TextFlow(); |
| contents.setLayoutManager(new SimpleTextLayout(contents)); |
| contents.setText( |
| "/**\n" + |
| " * The SimpleTextLayout only breaks at newlines\n" + |
| " * It can be used to render source code.\r" + |
| " */\r\n" + |
| "public void foo() {\n" + |
| " //TABs are not handled currently, only spaces.\n" + |
| " System.out.println(\"foo\")\n" + |
| "}" |
| ); |
| blockFlow.add(contents); |
| return blockFlow; |
| } |
| |
| static protected IFigure createNestedInlineParagraph() { |
| BlockFlow blockFlow = new BlockFlow(); |
| TextFlow text; |
| blockFlow.add(new TextFlow("A paragraph can contain multiple children, including" |
| + " nested structure using InlineFlows. ")); |
| |
| InlineFlow inline = new InlineFlow(); |
| inline.setForegroundColor(ColorConstants.darkBlue()); |
| inline.add(new TextFlow("This TextFlow is inside an InlineFlow with a blue " |
| + "foreground color. Children can have ")); |
| text = new TextFlow("Bold "); |
| text.setFont(BOLD); |
| inline.add(text); |
| |
| inline.add(new TextFlow("or ")); |
| |
| text = new TextFlow("Italic "); |
| text.setFont(ITALICS); |
| inline.add(text); |
| |
| inline.add(new TextFlow("Font, or override other inherited attributes.")); |
| blockFlow.add(inline); |
| return blockFlow; |
| } |
| |
| static protected IFigure createParagraph() { |
| BlockFlow blockFlow = new BlockFlow(); |
| TextFlow contents = new TextFlow(); |
| contents.setText("A paragraph is created by using a BlockFlow figure. A " |
| + "paragraph usually wraps to the width of the current page. " |
| + "To see this, try resizing the example's window. " |
| + "The contents of this paragraph were created using a TextFlow figure " |
| + "in its default layout, which breaks at whitespace. " |
| + "a block of text that doesn't wrap can be created by using the " |
| + "SimpleTextLayout on a TextFlow"); |
| |
| blockFlow.add(contents); |
| return blockFlow; |
| } |
| |
| static protected IFigure createTitle() { |
| BlockFlow blockFlow = new BlockFlow(); |
| TextFlow contents = new TextFlow("Draw2D TextFlow Example"); |
| contents.setFont(HEADING_1); |
| blockFlow.add(contents); |
| return blockFlow; |
| } |
| |
| /** |
| * @see org.eclipse.draw2d.examples.AbstractExample#getContents() |
| */ |
| protected IFigure getContents() { |
| FlowPage page = new FlowPage(); |
| page.setOpaque(true); |
| page.setBackgroundColor(ColorConstants.white()); |
| page.add(createTitle()); |
| page.add(createParagraph()); |
| page.add(createBlockParagraph()); |
| page.add(createNestedInlineParagraph()); |
| page.add(createBaselineParagraph()); |
| page.add(createAlignmentParagraph()); |
| return page; |
| } |
| |
| public static void main(String[] args) { |
| new TextFlowExample().run(); |
| } |
| |
| /** |
| * @see org.eclipse.draw2d.examples.AbstractExample#setFigureCanvas(FigureCanvas) |
| */ |
| protected void setFigureCanvas(FigureCanvas canvas) { |
| super.setFigureCanvas(canvas); |
| // canvas.setVerticalScrollBarVisibility(canvas.ALWAYS); |
| canvas.getViewport().setContentsTracksWidth(true); |
| } |
| |
| } |