All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.draw2d.text.FlowAdapter Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 * Copyright (c) 2005, 2010 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.text;

import java.util.Iterator;

import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Rectangle;

/**
 * Adapts non-flow figures for use within a parent hierarchy requiring flow
 * figures. Normal draw2d figures can be added as children. If a normal
 * LayoutManager is set, the children will be positioned by that layout manager.
 * The size of this figure within the flow will be determined by its preferred
 * size.
 * 

* WARNING: This class is not intended to be subclassed by clients. * * @author Pratik Shah * @since 3.1 */ public class FlowAdapter extends FlowFigure { private FlowContext context; private FigureBox box = new FigureBox(); /** * This FlowFigure contributes an Object Replacement Character. * * @see FlowFigure#contributeBidi(BidiProcessor) */ protected void contributeBidi(BidiProcessor proc) { box.setBidiLevel(-1); // contributes a single object replacement char proc.add(this, BidiChars.OBJ); } /** * @return null * @see org.eclipse.draw2d.text.FlowFigure#createDefaultFlowLayout() */ protected FlowFigureLayout createDefaultFlowLayout() { return null; } /** * Sizes the content box to be big enough to display all figures. Wraps to * the next line if there is not enough room on the current one. * * @see org.eclipse.draw2d.Figure#layout() */ protected void layout() { int wHint = context.getRemainingLineWidth(); if (wHint == Integer.MAX_VALUE) wHint = -1; Dimension prefSize = getPreferredSize(wHint, -1); if (context.isCurrentLineOccupied() && prefSize.width > context.getRemainingLineWidth()) { context.endLine(); prefSize = getPreferredSize(context.getRemainingLineWidth(), -1); } box.setSize(prefSize); context.addToCurrentLine(box); } /** * Updates the bounds of this figure to match that of its content box, and * lays out this figure's children. * * @see FlowFigure#postValidate() */ public void postValidate() { setBounds(new Rectangle(box.getX(), box.getBaseline() - box.ascent, box.width, box.ascent)); super.layout(); for (Iterator itr = getChildren().iterator(); itr.hasNext();) ((IFigure) itr.next()).validate(); } /** * Sets the bidi level of the content box associated with this Figure * * @see FlowFigure#setBidiInfo(BidiInfo) */ public void setBidiInfo(BidiInfo info) { box.setBidiLevel(info.levelInfo[0]); } /** * @see org.eclipse.draw2d.IFigure#setBounds(org.eclipse.draw2d.geometry.Rectangle) */ public void setBounds(Rectangle rect) { int x = bounds.x, y = bounds.y; boolean resize = (rect.width != bounds.width) || (rect.height != bounds.height), translate = (rect.x != x) || (rect.y != y); if ((resize || translate) && isVisible()) erase(); if (translate) { int dx = rect.x - x; int dy = rect.y - y; primTranslate(dx, dy); } bounds.width = rect.width; bounds.height = rect.height; if (translate || resize) { fireFigureMoved(); repaint(); } } /** * @see FlowFigure#setFlowContext(FlowContext) */ public void setFlowContext(FlowContext flowContext) { context = flowContext; } /** * Do not validate children. * * @see org.eclipse.draw2d.IFigure#validate() */ public void validate() { if (isValid()) return; setValid(true); layout(); } private class FigureBox extends ContentBox { private int ascent; public boolean containsPoint(int x, int y) { return FlowAdapter.this.containsPoint(x, y); } public int getAscent() { return ascent; } public int getDescent() { return 0; } public void setSize(Dimension size) { ascent = size.height; width = size.width; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy