Files
flenser/dw/outofflowmgr.hh

151 lines
5.1 KiB
C++

#ifndef __DW_OUTOFFLOWMGR_HH__
#define __DW_OUTOFFLOWMGR_HH__
#include "core.hh"
namespace dw {
/**
* \brief Out Of Flow. See \ref dw-out-of-flow.
*/
namespace oof {
class OOFAwareWidget;
/**
* \brief Represents additional data for OOF containers.
*/
class OutOfFlowMgr
{
public:
OutOfFlowMgr ();
virtual ~OutOfFlowMgr ();
virtual void sizeAllocateStart (OOFAwareWidget *caller,
core::Allocation *allocation) = 0;
virtual void sizeAllocateEnd (OOFAwareWidget *caller) = 0;
virtual void containerSizeChangedForChildren () = 0;
virtual void draw (core::View *view, core::Rectangle *area,
core::DrawingContext *context) = 0;
virtual void markSizeChange (int ref) = 0;
virtual void markExtremesChange (int ref) = 0;
virtual core::Widget *getWidgetAtPoint (int x, int y,
core::GettingWidgetAtPointContext
*context) = 0;
virtual void addWidgetInFlow (OOFAwareWidget *widget,
OOFAwareWidget *parent, int externalIndex) = 0;
virtual int addWidgetOOF (core::Widget *widget, OOFAwareWidget *generator,
int externalIndex) = 0;
virtual void calcWidgetRefSize (core::Widget *widget,
core::Requisition *size) = 0;
virtual void moveExternalIndices (OOFAwareWidget *generator,
int oldStartIndex, int diff) = 0;
/**
* \brief Called before tellPosition2, see there for more.
*/
virtual void tellPosition1 (core::Widget *widget, int x, int y) = 0;
/**
* \brief Called after tellPosition1.
*
* An implementation should only implement either tellPosition1 or
* tellPosition2. Coordinates are relative to the *container*.
*/
virtual void tellPosition2 (core::Widget *widget, int x, int y) = 0;
virtual void tellIncompletePosition1 (core::Widget *generator,
core::Widget *widget, int x, int y)
= 0;
virtual void tellIncompletePosition2 (core::Widget *generator,
core::Widget *widget, int x, int y)
= 0;
virtual void getSize (core::Requisition *containerReq, int *oofWidth,
int *oofHeight) = 0;
virtual bool containerMustAdjustExtraSpace ()= 0;
virtual void getExtremes (core::Extremes *containerExtr, int *oofMinWidth,
int *oofMaxWidth) = 0;
/**
* Get the left border for the vertical position of *y*, for a height
* of *h", based on floats; relative to the *container*.
*
* The border includes margin/border/padding of the calling textblock
* but is 0 if there is no float, so a caller should also consider
* other borders.
*/
virtual int getLeftBorder (int y, int h, OOFAwareWidget *lastGen,
int lastExtIndex) = 0;
/**
* Get the right border for the vertical position of *y*, for a height
* of *h*, based on floats; relative to the *container*.
*
* See also getLeftBorder().
*/
virtual int getRightBorder (int y, int h, OOFAwareWidget *lastGen,
int lastExtIndex) = 0;
/**
* Return whether there is a float on the left side. *y* is
* relative to the *container*.
*
* See also getLeftBorder().
*/
virtual bool hasFloatLeft (int y, int h, OOFAwareWidget *lastGen,
int lastExtIndex) = 0;
/**
* Return whether there is a float on the right side. *y* is
* relative to the *container*.
*
* See also hasFloatLeft(), getLeftBorder();
*/
virtual bool hasFloatRight (int y, int h, OOFAwareWidget *lastGen,
int lastExtIndex) = 0;
/**
* Assuming there is a float on the left side, return the rest
* height of it. *y* is relative to the *container*.
*
* See also getLeftBorder().
*/
virtual int getLeftFloatHeight (int y, int h, OOFAwareWidget *lastGen,
int lastExtIndex) = 0;
/**
* Assuming there is a float on the right side, return the rest
* height of it. *y* is relative to the *container*.
*
* See also getLeftFloatHeight(), getLeftBorder().
*/
virtual int getRightFloatHeight (int y, int h, OOFAwareWidget *lastGen,
int lastExtIndex) = 0;
virtual bool affectsLeftBorder (core::Widget *widget) = 0;
virtual bool affectsRightBorder (core::Widget *widget) = 0;
virtual bool mayAffectBordersAtAll () = 0;
/**
* Return value is relative to the *calling generator* (not container).
*/
virtual int getClearPosition (OOFAwareWidget *widget) = 0;
virtual bool dealingWithSizeOfChild (core::Widget *child) = 0;
virtual int getAvailWidthOfChild (core::Widget *child, bool forceValue) = 0;
virtual int getAvailHeightOfChild (core::Widget *child, bool forceValue) = 0;
// for iterators
virtual int getNumWidgets () = 0;
virtual core::Widget *getWidget (int i) = 0;
};
} // namespace oof
} // namespace dw
#endif // __DW_OUTOFFLOWMGR_HH__