⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 layoutengine.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		}
		else if (m_area == AREA_CONTENT)
			newPage();
		else	//	footer/header
		{
			m_position[m_area].setLocation(part.x, m_position[m_area].y + m_maxHeightSinceNewLine[m_area]);
			log.error("newLine - Outside of Area(" + m_area + "): " + m_position[m_area]);
		}
		m_maxHeightSinceNewLine[m_area] = 0f;
	}	//	newLine


	/**
	 * 	Get current Page Number (not zero based)
	 * 	@return Page No
	 */
	public int getPageNo()
	{
		return m_pageNo;
	}	//	getPageNo

	/**
	 * 	Get Page No
	 * 	@param pageNo page number (NOT zero based)
	 * 	@return Page
	 */
	public Page getPage (int pageNo)
	{
		if (pageNo <= 0 || pageNo > m_pages.size())
		{
			log.error("getPage - No page #" + pageNo);
			return null;
		}
		Page retValue = (Page)m_pages.get(pageNo-1);
		return retValue;
	}	//	getPage

	/**
	 * 	Het Page Count
	 * 	@return Page Count
	 */
	public int getPageCount ()
	{
		return m_pages.size();
	}	//	getPageCount


	/**
	 * 	Get Pages
	 * 	@return Pages in ArrayList
	 */
	public ArrayList getPages()
	{
		return m_pages;
	}	//	getPages

	/**
	 * 	Get Header & Footer info
	 * 	@return Header&Footer
	 */
	public HeaderFooter getHeaderFooter()
	{
		return m_headerFooter;
	}	//	getPages

	/**
	 * 	Set Current page to Page No
	 * 	@param pageNo page number (NOT zero based)
	 */
	protected void setPage (int pageNo)
	{
		if (pageNo <= 0 || pageNo > m_pages.size())
		{
			log.error("setPage - No page #" + pageNo);
			return;
		}
		Page retValue = (Page)m_pages.get(pageNo-1);
		m_currPage = retValue;
	}	//	setPage

	/**
	 * 	Get Page Info for Multi-Page tables
	 * 	@param pageNo page
	 * 	@return info e.g. (1,1)
	 */
	public String getPageInfo(int pageNo)
	{
		if (m_tableElement == null || m_tableElement.getPageXCount() == 1)
			return "";
		int pi = m_tableElement.getPageIndex(pageNo);
		StringBuffer sb = new StringBuffer("(");
		sb.append(m_tableElement.getPageYIndex(pi)+1).append(",")
			.append(m_tableElement.getPageXIndex(pi)+1).append(")");
		return sb.toString();
	}	//	getPageInfo

	/**
	 * 	Get Max Page Info for Multi-Page tables
	 * 	@return info e.g. (3,2)
	 */
	public String getPageInfoMax()
	{
		if (m_tableElement == null || m_tableElement.getPageXCount() == 1)
			return "";
		StringBuffer sb = new StringBuffer("(");
		sb.append(m_tableElement.getPageYCount()).append(",")
			.append(m_tableElement.getPageXCount()).append(")");
		return sb.toString();
	}	//	getPageInfoMax

	/*************************************************************************/

	/**
	 * 	Set Position on current page (no check)
	 * 	@param p point relative in area
	 */
	protected void setRelativePosition (Point2D p)
	{
		if (p == null)
			return;
		Rectangle part = m_content;
		if (m_area == AREA_HEADER)
			part = m_header;
		else if (m_area == AREA_FOOTER)
			part = m_footer;
		m_position[m_area].setLocation(part.x + p.getX(), part.y + p.getY());
		if (Log.isTraceLevel(10))
			log.debug("setPosition - Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
	}	//	setPosition

	/**
	 * 	Set Position  on current page (no check)
	 * 	@param x x position in 1/72 inch
	 *  @param y y position in 1/72 inch
	 */
	protected void setRelativePosition (float x, float y)
	{
		setRelativePosition(new Point2D.Float(x, y));
	}	//	setPosition

	/**
	 * 	Get the current position on current page
	 * 	@return current position
	 */
	public Point2D getPosition ()
	{
		return m_position[m_area];
	}	//	getPosition

	/**
	 * 	Set X Position on current page
	 * 	@param x x position in 1/72 inch
	 */
	protected void setX (float x)
	{
		m_position[m_area].x = x;
		if (Log.isTraceLevel(10))
			log.debug("setX - Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
	}	//	setX

	/**
	 * 	Add to X Position on current page
	 * 	@param xOffset add offset to x position in 1/72 inch
	 */
	protected void addX (float xOffset)
	{
		if (xOffset == 0f)
			return;
		m_position[m_area].x += xOffset;
		if (Log.isTraceLevel(10))
			log.debug("addX - Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
	}	//	addX

	/**
	 * 	Get X Position on current page
	 * 	@return x position in 1/72 inch
	 */
	public float getX ()
	{
		return (float)m_position[m_area].x;
	}	//	getX

	/**
	 * 	Set Y Position on current page
	 * 	@param y y position in 1/72 inch
	 */
	protected void setY (int y)
	{
		m_position[m_area].y = y;
		if (Log.isTraceLevel(10))
			log.debug("setY - Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
	}	//	setY

	/**
	 * 	Add to Y Position - may cause New Page
	 * 	@param yOffset add offset to y position in 1/72 inch
	 */
	protected void addY (int yOffset)
	{
		if (yOffset == 0f)
			return;
		if (isYspaceFor(yOffset))
		{
			m_position[m_area].y += yOffset;
			if (Log.isTraceLevel(10))
				log.debug("addY - Page=" + m_pageNo + " [" + m_area + "] " + m_position[m_area].x + "/" + m_position[m_area].y);
		}
		else if (m_area == AREA_CONTENT)
			newPage();
		else
		{
			m_position[m_area].y += yOffset;
			log.error("addY - Outside of Area: " + m_position);
		}
	}	//	addY

	/**
	 * 	Get Y Position on current page
	 * 	@return y position in 1/72 inch
	 */
	public float getY ()
	{
		return (float)m_position[m_area].y;
	}	//	getY

	/*************************************************************************/

	/**
	 * 	Return remaining X dimension space _ on current page in Area
	 * 	@return space in 1/72 inch remaining in line
	 */
	public float getXspace()
	{
		Rectangle part = m_content;
		if (m_area == AREA_HEADER)
			part = m_header;
		else if (m_area == AREA_FOOTER)
			part = m_footer;
		//
		return (float)(part.x + part.width - m_position[m_area].x);
	}	//	getXspace

	/**
	 * 	Remaining Space is OK for Width in Area
	 * 	@param width width
	 * 	@return true if width fits in area
	 */
	public boolean isXspaceFor (float width)
	{
		return (getXspace()-width) > 0f;
	}	//	isXspaceFor

	/**
	 * 	Return remaining Y dimension space | on current page in Area
	 * 	@return space in 1/72 inch remaining on page
	 */
	public float getYspace()
	{
		Rectangle part = m_content;
		if (m_area == AREA_HEADER)
			part = m_header;
		else if (m_area == AREA_FOOTER)
			part = m_footer;
		//
		return (float)(part.y + part.height - m_position[m_area].y);
	}	//	getYspace

	/**
	 * 	Remaining Space is OK for Height in Area
	 * 	@param height height
	 * 	@return true if height fits in area
	 */
	public boolean isYspaceFor (float height)
	{
		return (getYspace()-height) > 0f;
	}	//	isYspaceFor

	/*************************************************************************/

	/**
	 * 	Set Current Font
	 *	@param font font
	 */
	protected void setFont (Font font)
	{
		if (font != null)
			m_font = font;
	}	//	setFont

	/**
	 * 	Get current Font
	 *	@return font
	 */
	public Font getFont()
	{
		return m_font;
	}	//	setFont

	/**
	 * 	Set Current Font Name
	 * 	@param name font name like Dialog, DialogInput, Monospaced, Serif, or SansSerif
	 */
	protected void setFontName (String name)
	{
		m_font = new Font(name, m_font.getStyle(), m_font.getSize());
	}	//	setFontSize

	/**
	 * 	Set Current Font Style
	 * 	@param style font style - Font.PLAIN, Font.BOLD, Font.ITALIC, Font.BOLD|Font.ITALIC
	 */
	protected void setFontStyle (int style)
	{
		m_font = new Font(m_font.getName(), style, m_font.getSize());
	}	//	setFontStyle

	/**
	 * 	Set Current Font Size
	 * 	@param size font size in points
	 */
	protected void setFontSize (int size)
	{
		m_font = new Font(m_font.getName(), m_font.getStyle(), size);
	}	//	setFontSize

	/*************************************************************************/

	/**
	 * 	Set Current Foreground Paint
	 * 	@param paint Color, GardientPaint, TexturePaint
	 */
	protected void setPaint (Paint paint)
	{
		if (paint != null)
			m_paint = paint;
	}	//	setPaint

	/**
	 * 	Get Current Foreground Paint
	 * 	@return Color, GardientPaint, TexturePaint
	 */
	public Paint getPaint ()
	{
		return m_paint;
	}	//	getPaint

	/**
	 * 	Set the alpha value (transparency) of a color - if the current paint is a Color.
	 *  An alpha value of 255 means that the color is completely opaque
	 *  and an alpha value of 0 means that the color is completely transparent.
	 *  @param alpha 0 - 255
	 */
	protected void setPaintAlpha (int alpha)
	{
		if (m_paint instanceof Color)
		{
			Color c = (Color)m_paint;
			m_paint = new Color (c.getRed(), c.getGreen(), c.getBlue(), alpha);
		}
	}	//	setPaintAlpha

	/*************************************************************************/

	/**
	 * 	Set Current Stroke
	 * 	@param stroke Stroke
	 */
	protected void setStroke (Stroke stroke)
	{
		if (stroke != null)
			m_stroke = stroke;
	}	//	setStroke

	/**
	 * 	Get Current Stroke
	 * 	@return Stroke
	 */
	public Stroke getStroke()
	{
		return m_stroke;
	}	//	setStroke

	/*************************************************************************/

	/**
	 *	Create Standard Header/Footer
	 *  <pre>
	 *  title           C        Page x of x
	 *  Copyright      who         date&time
	 *  </pre>
	 */
	private void createStandardHeaderFooter()
	{
	//	element = new ImageElement(org.compiere.Compiere.getImageLogo());	//	100x30
		PrintElement element = new ImageElement(org.compiere.Compiere.getImageLogoSmall());	//	48x15
		element.layout(m_header.width, 0, false, MPrintFormatItem.FIELD_ALIGN_LEADING);
		element.setLocation(m_header.getLocation());
		m_headerFooter.addElement(element);
		//
		MPrintTableFormat tf = m_format.getTableFormat();
		Font font = tf.getPageHeader_Font();
		Color color = tf.getPageHeaderFG_Color();
		//
		element = new StringElement("@*ReportName@", font, color, null, true);
		element.layout (m_header.width, 0, true, MPrintFormatItem.FIELD_ALIGN_CENTER);
		element.setLocation(m_header.getLocation());
		m_headerFooter.addElement(element);
		//
		//
		element = new StringElement("@Page@ @*Page@ @of@ @*PageCount@", font, color, null, true);
		element.layout (m_header.width, 0, true, MPrintFormatItem.FIELD_ALIGN_TRAILING);
		element.setLocation(m_header.getLocation());
		m_headerFooter.addElement(element);

		//	Footer
		font = tf.getPageFooter_Font();
		color = tf.getPageFooterFG_Color();
		//
		element = new StringElement("@CopyRight@", font, color, null, true);
		element.layout (m_footer.width, 0, true, MPrintFormatItem.FIELD_ALIGN_LEADING);
		Point ft = m_footer.getLocation();
		ft.y += m_footer.height - element.getHeight() - 2;	//	2pt above min
		element.setLocation(ft);
		m_headerFooter.addElement(element);
		//
		element = new StringElement("@*Header@", font, color, null, true);
		element.layout (m_footer.width, 0, true, MPrintFormatItem.FIELD_ALIGN_CENTER);
		element.setLocation(ft);
		m_headerFooter.addElement(element);
		//
		element = new StringElement("@*CurrentDateTime@", font, color, null, true);
		element.layout (m_footer.width, 0, true, MPrintFormatItem.FIELD_ALIGN_TRAILING);
		element.setLocation(ft);
		m_headerFooter.addElement(element);
	}	//	createStandardHeaderFooter

	/*************************************************************************/

	/**
	 * 	Layout Form.
	 *  For every Row, loop through the Format
	 *  and calculate element size and position.
	 */
	private void layoutForm()
	{
		log.info("layoutForm");
		m_columnCount = 0;
		float lastHeight[] = new float[] {0f, 0f, 0f};
		float lastWidth[] = new float[] {0f, 0f, 0f};
		//	for every row
		for (int row = 0; row < m_data.getRowCount(); row++)
		{
			log.debug("layoutForm - Row=" + row);
			m_data.setRowIndex(row);
			boolean somethingPrinted = true;	//	prevent NL of nothing printed and supress null
			//	for every item
			for (int i = 0; i < m_format.getItemCount(); i++)
			{
				MPrintFormatItem item = m_format.getItem(i);
				if (!item.isPrinted())
					continue;
				m_columnCount++;
				//	Read Header/Footer just once
				if (row > 0 && (item.isHeader() || item.isFooter()))
					continue;
				//	Position
				if (item.isHeader())			//	Area
					setArea(AREA_HEADER);
				else if (item.isFooter())
					setArea(AREA_FOOTER);
				else
					setArea(AREA_CONTENT);
				//
				if (item.isSetNLPosition() && item.isRelativePosition())
					m_tempNLPositon = 0;
				if (item.isNextPage())			//	item.isPageBreak()			//	new page
					newPage();
				else if (item.isNextLine() && somethingPrinted)		//	new line
				{
					newLine ();
					somethingPrinted = false;
				}
				else
					addX(lastWidth[m_area]);
				if (item.isRelativePosition())
				{
					addX(item.getXspace());
					addY(item.getYspace());
				}
				else	//	Absolute relative position
					setRelativePosition(item.getXposition(), item.getYposition());
				//	Temporary NL Position when absolute positioned
				if (item.isSetNLPosition() && !item.isRelativePosition())
					m_tempNLPositon = (int)getPosition().getX();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -