blob: 3d60532489dcc5aac1f464bb8863ccaa135d8218 [file] [log] [blame]
/*
* Copyright 1999-2005 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.layoutmgr;
import java.util.LinkedList;
import java.util.List;
import org.apache.fop.area.Area;
/**
* The interface for all LayoutManagers.
*/
public interface LayoutManager {
/**
* Set the parent layout manager.
* The parent layout manager is required for adding areas.
*
* @param lm the parent layout manager
*/
void setParent(LayoutManager lm);
/**
* Get the parent layout manager.
* @return the parent layout manager.
*/
LayoutManager getParent();
/**
* Get the active PageSequenceLayoutManager instance for this
* layout process.
* @return the PageSequenceLayoutManager
*/
PageSequenceLayoutManager getPSLM();
/**
* Reset to the position.
*
* @param position the Position to reset to
*/
void resetPosition(Position position);
/**
* Return a value indicating whether this LayoutManager has laid out
* all its content (or generated BreakPossibilities for all content.)
*
* @return true if this layout manager is finished
*/
boolean isFinished();
/**
* Set a flag indicating whether the LayoutManager has laid out all
* its content. This is generally called by the LM itself, but can
* be called by a parentLM when backtracking.
*
* @param isFinished the value to set the finished flag to
*/
void setFinished(boolean isFinished);
/**
* Get the parent area for an area.
* This should get the parent depending on the class of the
* area passed in.
*
* @param childArea the child area to get the parent for
* @return the parent Area
*/
Area getParentArea(Area childArea);
/**
* Add the area as a child of the current area.
* This is called by child layout managers to add their
* areas as children of the current area.
*
* @param childArea the child area to add
*/
void addChildArea(Area childArea);
/**
* Tell the layout manager to add all the child areas implied
* by Position objects which will be returned by the
* Iterator.
*
* @param posIter the position iterator
* @param context the context
*/
void addAreas(PositionIterator posIter, LayoutContext context);
/**
* Create more child LMs of the parent, up to child LM index pos
* @param pos index up to which child LMs are requested
* @return true if requested index does exist
*/
boolean createNextChildLMs(int pos);
/**
* @return the list of child LMs
*/
List getChildLMs();
/**
* Add the LM in the argument to the list of child LMs;
* set this LM as the parent;
* initialize the LM.
* @param lm the LM to be added
*/
void addChildLM(LayoutManager lm);
/**
* Add the LMs in the argument to the list of child LMs;
* @param newLMs the list of LMs to be added
*/
void addChildLMs(List newLMs);
/**
* Get a sequence of KnuthElements representing the content
* of the node assigned to the LM
*
* @param context the LayoutContext used to store layout information
* @param alignment the desired text alignement
* @return the list of KnuthElements
*/
LinkedList getNextKnuthElements(LayoutContext context, int alignment);
/**
* Get a sequence of KnuthElements representing the content
* of the node assigned to the LM, after changes have been applied
*
* @param oldList the elements to replace
* @param flaggedPenalty the penalty value for hyphenated lines
* @param alignment the desired text alignment
* @return the updated list of KnuthElements
*/
LinkedList getChangedKnuthElements(List oldList, /*int flaggedPenalty,*/
int alignment);
}