#include <fp_TableContainer.h>

| fp_CellContainer::fp_CellContainer | ( | fl_SectionLayout * | pSectionLayout | ) |
Create Cell container
| iType | Container type | |
| pSectionLayout | Section layout type used for this container |
| fp_CellContainer::~fp_CellContainer | ( | ) | [virtual] |
Destruct container
References fp_Container::setNext(), fp_Container::setPrev(), and xxx_UT_DEBUGMSG.
| void fp_CellContainer::sizeRequest | ( | fp_Requisition * | pRequest | ) |
References fp_Container::countCons(), FL_CONTAINER_BLOCK, FP_CONTAINER_CELL, FP_CONTAINER_LINE, FP_CONTAINER_TABLE, fp_Container::getColumn(), fl_ContainerLayout::getContainerType(), fp_ContainerObject::getContainerType(), fl_ContainerLayout::getFirstLayout(), fp_ContainerObject::getHeight(), fp_Container::getMarginAfter(), fl_BlockLayout::getMaxNonBreakableRun(), fl_ContainerLayout::getNext(), fp_Container::getNthCon(), fp_ContainerObject::getSectionLayout(), fp_ContainerObject::getWidth(), fp_VerticalContainer::getWidth(), _fp_Requisition::height, m_MyRequest, UT_ASSERT, UT_SHOULD_NOT_HAPPEN, _fp_Requisition::width, and xxx_UT_DEBUGMSG.
Referenced by fp_TableContainer::_size_allocate_pass2(), fp_TableContainer::_size_request_init(), fp_TableContainer::_size_request_pass1(), fp_TableContainer::_size_request_pass3(), fl_CellLayout::checkAndAdjustCellSize(), and fl_TableLayout::doSimpleChange().
| void fp_CellContainer::sizeAllocate | ( | fp_Allocation * | pAllocate | ) |
References _fp_Allocation::height, m_MyAllocation, _fp_Allocation::width, _fp_Allocation::x, and _fp_Allocation::y.
Referenced by fp_TableContainer::_size_allocate_pass2().
| void fp_CellContainer::layout | ( | void | ) |
References fp_VerticalContainer::_getMaxContainerHeight(), fp_VerticalContainer::_setMaxContainerHeight(), fp_ContainerObject::clearScreen(), fp_Container::countCons(), fp_TableContainer::deleteBrokenTables(), FP_CONTAINER_TABLE, getBrokenTable(), fp_ContainerObject::getContainerType(), fp_TableContainer::getFirstBrokenTable(), fp_VerticalContainer::getHeight(), fp_TableContainer::getHeight(), fp_ContainerObject::getHeight(), fp_Container::getMarginAfter(), fp_Container::getNthCon(), fp_VerticalContainer::getY(), fp_ContainerObject::getY(), fp_TableContainer::getYBottom(), fp_TableContainer::isThisBroken(), fp_Container::setAssignedScreenHeight(), setHeight(), fp_TableContainer::setY(), fp_VerticalContainer::setY(), fp_ContainerObject::setY(), fp_TableContainer::VBreakAt(), and xxx_UT_DEBUGMSG.
Referenced by fl_TOCLayout::format(), setToAllocation(), and setWidth().
| fp_Container * fp_CellContainer::drawSelectedCell | ( | fp_Line * | pLine | ) |
Draw the whole cell with the selection colour background. returns the last drawn cell in the container or NULL pLine pointer to the line contained within the cell the cell.
References _getBrokenRect(), dg_DrawArgs::bDirtyRunsOnly, doesOverlapBrokenTable(), drawBroken(), FP_CONTAINER_LINE, FP_CONTAINER_TABLE, fp_Container::getContainer(), fp_ContainerObject::getContainerType(), fp_Page::getDocLayout(), fp_TableContainer::getFirstBrokenTable(), fl_ContainerLayout::getFirstContainer(), FV_View::getGraphics(), fp_ContainerObject::getGraphics(), fl_ContainerLayout::getNext(), fp_Container::getNext(), fp_Container::getNthCon(), fp_Container::getPage(), FV_View::getPageScreenOffsets(), fp_ContainerObject::getSectionLayout(), FL_DocLayout::getView(), fp_ContainerObject::getX(), fp_ContainerObject::getY(), fp_ContainerObject::isColumnType(), m_bBgDirty, m_bIsSelected, dg_DrawArgs::pG, UT_ASSERT, UT_return_val_if_fail, dg_DrawArgs::xoff, and dg_DrawArgs::yoff.
Referenced by FV_View::_drawOrClearBetweenPositions().
| bool fp_CellContainer::isSelected | ( | void | ) | const [inline] |
Referenced by FV_View::_clearBetweenPositions(), and FV_View::_drawOrClearBetweenPositions().
| void fp_CellContainer::clearSelection | ( | void | ) | [inline] |
Referenced by FV_View::_clearBetweenPositions(), and FV_View::_drawOrClearBetweenPositions().
| bool fp_CellContainer::doesOverlapBrokenTable | ( | fp_TableContainer * | pBroke | ) |
This method returns true if the cell overlaps the supplied broken table.
References fp_TableContainer::getHeight(), fp_TableContainer::getMasterTable(), fp_VerticalContainer::getY(), fp_TableContainer::getYBottom(), fp_TableContainer::getYBreak(), fp_TableContainer::getYOfRow(), and m_iBottomAttach.
Referenced by drawSelectedCell(), getBrokenTable(), fp_TableContainer::getFirstLineInColumn(), and fp_TableContainer::getLastLineInColumn().
| void fp_CellContainer::drawBroken | ( | dg_DrawArgs * | pDA, | |
| fp_TableContainer * | pBroke | |||
| ) |
Draw container content visible within the supplied broken table
| pDA | Draw arguments | |
| pBroke | broken table that cell is part of |
References _drawBoundaries(), _getBrokenRect(), fp_VerticalContainer::_getMaxContainerHeight(), dg_DrawArgs::bDirtyRunsOnly, fl_SectionLayout::clearNeedsRedraw(), containsNestedTables(), fp_Container::countCons(), GR_Graphics::DGP_SCREEN, fp_ContainerObject::draw(), fp_TableContainer::draw(), drawLines(), fp_Page::expandDamageRect(), FG_FILL_IMAGE, fg_FillType::Fill(), GR_Painter::fillRect(), FP_CONTAINER_TABLE, fl_DocSectionLayout::getActualColumnHeight(), getBottomAttach(), fp_ContainerObject::getBreakTick(), fp_TableContainer::getCellAtRowColumn(), GR_Graphics::getClipRect(), FV_View::getColorSelBackground(), fp_Container::getContainer(), fp_ContainerObject::getContainerType(), fp_Page::getDocLayout(), fl_ContainerLayout::getDocSectionLayout(), fp_Container::getFillType(), fp_TableContainer::getFirstBrokenTable(), fp_ContainerObject::getHeight(), fp_VerticalContainer::getHeight(), getLeftAttach(), getLeftTopOffsets(), fp_TableContainer::getMasterTable(), fp_Container::getMyBrokenContainer(), fp_Container::getNthCon(), fp_Container::getPage(), getRightAttach(), fp_ContainerObject::getSectionLayout(), getTopAttach(), FL_DocLayout::getView(), fp_VerticalContainer::getWidth(), fp_ContainerObject::getX(), fp_VerticalContainer::getX(), fp_ContainerObject::getY(), fp_VerticalContainer::getY(), fp_TableContainer::getYBreak(), UT_Rect::height, fp_TableContainer::isInBrokenTable(), isInNestedTable(), fp_TableContainer::isThisBroken(), UT_Rect::left, m_bBgDirty, m_bDirty, m_bDrawBot, m_bDrawLeft, m_bDrawRight, m_bDrawTop, m_bIsSelected, dg_DrawArgs::pG, GR_Graphics::queryProperties(), fp_ContainerObject::setBreakTick(), fl_SectionLayout::setImageHeight(), fl_SectionLayout::setImageWidth(), fp_Container::setMyBrokenContainer(), fp_TableContainer::setRedrawLines(), fg_FillType::setWidthHeight(), fp_TableContainer::setY(), GR_Graphics::tlu(), UT_Rect::top, UT_ASSERT, UT_DEBUGMSG, UT_MAX, fp_TableContainer::VBreakAt(), UT_Rect::width, dg_DrawArgs::xoff, xxx_UT_DEBUGMSG, and dg_DrawArgs::yoff.
Referenced by fp_TableContainer::_brokenDraw(), draw(), and drawSelectedCell().
| void fp_CellContainer::clearScreen | ( | void | ) | [virtual] |
Reimplemented from fp_VerticalContainer.
Referenced by FV_View::_clearBetweenPositions(), FV_View::_drawOrClearBetweenPositions(), fl_CellLayout::_localCollapse(), fp_TableContainer::clearScreen(), setContainer(), setHeight(), and setWidth().
| void fp_CellContainer::clearScreen | ( | bool | bNoRecursive | ) |
References _clear(), fp_ContainerObject::clearScreen(), fp_Container::countCons(), fp_Container::getContainer(), fp_TableContainer::getFirstBrokenTable(), fp_Container::getNext(), fp_Container::getNthCon(), fp_Container::getPage(), getSpannedHeight(), fp_VerticalContainer::getY(), fp_ContainerObject::getY(), fp_TableContainer::getYBottom(), fp_TableContainer::getYBreak(), INITIAL_Y_POS, m_bDirty, m_bLinesDrawn, markAsDirty(), and xxx_UT_DEBUGMSG.
| void fp_CellContainer::getScreenPositions | ( | fp_TableContainer * | pBroke, | |
| GR_Graphics * | pG, | |||
| UT_sint32 & | iLeft, | |||
| UT_sint32 & | iRight, | |||
| UT_sint32 & | iTop, | |||
| UT_sint32 & | iBot, | |||
| UT_sint32 & | col_y, | |||
| fp_Column *& | pCol, | |||
| fp_ShadowContainer *& | pShadow, | |||
| bool & | bDoClear | |||
| ) |
Given the broken table that contains this cell, calculate the positions of the left,right,top and bottom edges of the cell.
References GR_Graphics::DGP_PAPER, GR_Graphics::DGP_SCREEN, FP_CONTAINER_COLUMN_SHADOW, FP_CONTAINER_FRAME, FP_CONTAINER_TABLE, fp_TableContainer::getBrokenColumn(), fp_Container::getColumn(), fp_Container::getContainer(), fp_ContainerObject::getContainerType(), fp_VerticalContainer::getCorrectBrokenTable(), fp_Page::getDocLayout(), fl_ContainerLayout::getDocSectionLayout(), fp_TableContainer::getFirstBrokenTable(), fp_TableContainer::getMasterTable(), fp_Column::getPage(), fp_ShadowContainer::getPage(), fp_TableContainer::getPage(), fp_Container::getPage(), FV_View::getPageScreenOffsets(), fp_Page::getScreenOffsets(), fp_ContainerObject::getSectionLayout(), FL_DocLayout::getView(), fp_VerticalContainer::getView(), FV_View::getViewMode(), fp_ContainerObject::getX(), fp_VerticalContainer::getX(), fp_FrameContainer::getX(), fp_ContainerObject::getY(), fp_VerticalContainer::getY(), fp_FrameContainer::getY(), fp_TableContainer::getYBreak(), fp_ContainerObject::isColumnType(), isInNestedTable(), fp_Page::isOnScreen(), fp_TableContainer::isThisBroken(), m_iBotY, m_iLeft, m_iRight, m_iTopY, GR_Graphics::queryProperties(), UT_return_if_fail, and VIEW_PRINT.
Referenced by FV_View::_fixInsertionPointCoords(), and drawLines().
| void fp_CellContainer::drawLines | ( | fp_TableContainer * | pBroke, | |
| GR_Graphics * | pG | |||
| ) |
Draw background and lines around a cell in a broken table.
References _drawLine(), GR_Graphics::DGP_SCREEN, FL_CONTAINER_TABLE, getBottomStyle(), fp_Container::getContainer(), fl_ContainerLayout::getContainerType(), fp_VerticalContainer::getHeight(), getLeftStyle(), fp_TableContainer::getPage(), fp_Container::getPage(), getRightStyle(), getScreenPositions(), fp_ContainerObject::getSectionLayout(), getTopAttach(), getTopStyle(), fp_TableContainer::getYBottom(), fp_TableContainer::getYBreak(), isInNestedTable(), fp_Page::isOnScreen(), m_bDrawBot, m_bDrawLeft, m_bDrawRight, m_bDrawTop, m_bLinesDrawn, PP_PropertyMap::Line::m_color, m_iBotY, m_iLeftAttach, m_iTopAttach, m_iTopY, fl_ContainerLayout::myContainingLayout(), GR_Graphics::queryProperties(), fp_TableContainer::setBrokenBot(), fp_TableContainer::setBrokenTop(), UT_return_if_fail, and xxx_UT_DEBUGMSG.
Referenced by FV_View::_drawOrClearBetweenPositions(), draw(), drawBroken(), fp_TableContainer::drawLines(), and drawLinesAdjacent().
| void fp_CellContainer::drawLinesAdjacent | ( | void | ) |
Draw lines around neighbouring cells. Use to fix artifacts of editting.
References drawLines(), fp_TableContainer::getCellAtRowColumn(), fp_Container::getContainer(), fp_TableContainer::getFirstBrokenTable(), fp_ContainerObject::getGraphics(), getLeftAttach(), fp_Container::getNext(), getRightAttach(), and getTopAttach().
Referenced by FV_View::_drawOrClearBetweenPositions(), and fp_Line::draw().
| void fp_CellContainer::draw | ( | fp_Line * | pLine | ) |
Draw the whole cell with the selection colour background. pLine pointer to the line contained within the cell the cell.
References _getBrokenRect(), dg_DrawArgs::bDirtyRunsOnly, drawBroken(), FP_CONTAINER_TABLE, fp_Container::getContainer(), fp_ContainerObject::getContainerType(), fp_TableContainer::getFirstBrokenTable(), FV_View::getGraphics(), fp_ContainerObject::getGraphics(), fp_Container::getNext(), fp_Container::getPage(), FV_View::getPageScreenOffsets(), fp_VerticalContainer::getView(), fp_ContainerObject::getX(), fp_VerticalContainer::getY(), fp_ContainerObject::getY(), fp_ContainerObject::isColumnType(), m_bDirty, dg_DrawArgs::pG, UT_ASSERT, UT_return_if_fail, dg_DrawArgs::xoff, and dg_DrawArgs::yoff.
Referenced by FV_View::_drawOrClearBetweenPositions().
| fp_TableContainer * fp_CellContainer::getBrokenTable | ( | fp_Container * | pCon | ) |
Return the broken table that contains this cell and the given Container
References doesOverlapBrokenTable(), FP_CONTAINER_TABLE, fp_Container::getContainer(), fp_ContainerObject::getContainerType(), fp_TableContainer::getFirstBrokenTable(), fp_TableContainer::getHeight(), fp_Container::getNext(), fp_VerticalContainer::getY(), fp_TableContainer::getYBreak(), fp_TableContainer::isInBrokenTable(), fp_TableContainer::isThisBroken(), fp_TableContainer::setY(), UT_DEBUGMSG, fp_TableContainer::VBreakAt(), and xxx_UT_DEBUGMSG.
Referenced by FV_View::_drawOrClearBetweenPositions(), fp_TableContainer::getBrokenColumn(), getColumn(), and layout().
| fp_VerticalContainer * fp_CellContainer::getColumn | ( | fp_Container * | pCon | ) |
This Method returns the column or shadow that embeds the container given.
References FP_CONTAINER_CELL, FP_CONTAINER_COLUMN, FP_CONTAINER_COLUMN_SHADOW, getBrokenTable(), fp_Container::getColumn(), fp_Container::getContainer(), fp_ContainerObject::getContainerType(), fp_ContainerObject::isColumnType(), isInNestedTable(), fp_TableContainer::isThisBroken(), UT_ASSERT, and xxx_UT_DEBUGMSG.
Referenced by FV_View::_getMouseContext(), fp_Line::getColumn(), fp_TableContainer::getFirstLineInColumn(), fp_TableContainer::getLastLineInColumn(), fp_TableContainer::getPage(), and FV_View::getTopRulerInfo().
| UT_sint32 fp_CellContainer::tweakBrokenTable | ( | fp_TableContainer * | pBroke | ) |
This method fills the broken table with containers from this cell contained by the broken table and returns the offset to current Ybreak of the supplied broken table required to wholly contain the first container of this cell in the broken table.
References fp_Container::countCons(), FP_CONTAINER_TABLE, fp_ContainerObject::getContainerType(), fp_TableContainer::getFirstBrokenTable(), fp_ContainerObject::getHeight(), fp_VerticalContainer::getHeight(), fp_TableContainer::getMasterTable(), fp_Container::getNthCon(), fp_Container::getPrev(), fp_ContainerObject::getY(), fp_VerticalContainer::getY(), fp_TableContainer::getYBottom(), fp_TableContainer::getYBreak(), fp_Container::setMyBrokenContainer(), and xxx_UT_DEBUGMSG.
Referenced by fp_TableContainer::tweakBrokenTable().
| void fp_CellContainer::draw | ( | dg_DrawArgs * | pDA | ) | [virtual] |
Draw container content
| pDA | Draw arguments |
Reimplemented from fp_VerticalContainer.
References _drawBoundaries(), fp_VerticalContainer::_getMaxContainerHeight(), fp_Container::countCons(), fp_ContainerObject::draw(), drawLines(), getBottomAttach(), GR_Graphics::getClipRect(), fp_Container::getContainer(), fp_ContainerObject::getHeight(), fp_VerticalContainer::getHeight(), fp_Container::getNthCon(), fp_TableContainer::getNumRows(), fp_VerticalContainer::getWidth(), fp_ContainerObject::getX(), fp_VerticalContainer::getX(), fp_ContainerObject::getY(), fp_VerticalContainer::getY(), UT_Rect::height, m_bDirty, m_bDrawBot, m_bDrawLeft, m_bDrawTop, dg_DrawArgs::pG, fp_TableContainer::setRedrawLines(), UT_Rect::top, UT_MAX, dg_DrawArgs::xoff, xxx_UT_DEBUGMSG, and dg_DrawArgs::yoff.
| virtual void fp_CellContainer::draw | ( | GR_Graphics * | ) | [inline, virtual] |
Reimplemented from fp_VerticalContainer.
| void fp_CellContainer::setContainer | ( | fp_Container * | pContainer | ) | [virtual] |
Reimplemented from fp_Container.
References clearScreen(), FP_CONTAINER_TABLE, fp_Container::getContainer(), fp_ContainerObject::getContainerType(), fp_Container::setContainer(), setWidth(), and UT_ASSERT.
Referenced by fp_TableContainer::tableAttach().
| void fp_CellContainer::setWidth | ( | UT_sint32 | iWidth | ) | [virtual] |
Set width
| iWidth | Width of container |
Reimplemented from fp_VerticalContainer.
References fl_CellLayout::_localCollapse(), clearScreen(), fp_Container::countCons(), FL_CONTAINER_TABLE, fl_CellLayout::format(), FP_CONTAINER_LINE, FP_CONTAINER_TABLE, fp_ContainerObject::getContainerType(), fl_ContainerLayout::getContainerType(), fp_Container::getNthCon(), fp_ContainerObject::getSectionLayout(), fp_VerticalContainer::getWidth(), layout(), fl_ContainerLayout::myContainingLayout(), fl_SectionLayout::setNeedsReformat(), fp_VerticalContainer::setWidth(), UT_ASSERT, UT_SHOULD_NOT_HAPPEN, and xxx_UT_DEBUGMSG.
Referenced by fl_CellLayout::createCellContainer(), setContainer(), and setToAllocation().
| void fp_CellContainer::setHeight | ( | UT_sint32 | iHeight | ) | [virtual] |
Reimplemented from fp_VerticalContainer.
References clearScreen(), FL_CONTAINER_TABLE, getBottomAttach(), fp_TableContainer::getCellAtRowColumn(), fp_Container::getContainer(), fl_ContainerLayout::getContainerType(), fp_VerticalContainer::getHeight(), fp_Container::getNext(), fp_TableContainer::getNumRows(), fp_ContainerObject::getSectionLayout(), fl_SectionLayout::markAllRunsDirty(), fl_ContainerLayout::myContainingLayout(), fp_VerticalContainer::setHeight(), fl_SectionLayout::setNeedsRedraw(), UT_ASSERT, and xxx_UT_DEBUGMSG.
Referenced by fl_CellLayout::checkAndAdjustCellSize(), layout(), and setToAllocation().
| void fp_CellContainer::_drawBoundaries | ( | dg_DrawArgs * | pDA, | |
| fp_TableContainer * | pBroke | |||
| ) |
Draw container outline
| pDA | Draw arguments | |
| pBroke | fp_TableContainer pointer to broken table |
References GR_Graphics::DGP_SCREEN, GR_Painter::drawLine(), fp_Page::getDocLayout(), fp_ContainerObject::getGraphics(), fp_VerticalContainer::getHeight(), fp_TableContainer::getPage(), fp_Container::getPage(), FV_View::getShowPara(), FL_DocLayout::getView(), fp_VerticalContainer::getView(), fp_VerticalContainer::getWidth(), fp_VerticalContainer::getX(), fp_VerticalContainer::getY(), fp_TableContainer::getYBreak(), fp_Page::isOnScreen(), dg_DrawArgs::pG, GR_Graphics::queryProperties(), GR_Graphics::setColor(), GR_Graphics::tlu(), UT_return_if_fail, dg_DrawArgs::xoff, xxx_UT_DEBUGMSG, and dg_DrawArgs::yoff.
Referenced by draw(), and drawBroken().
| bool fp_CellContainer::isVBreakable | ( | void | ) | [virtual] |
Returns true since cells can be broken vertically.
Reimplemented from fp_VerticalContainer.
| virtual bool fp_CellContainer::isHBreakable | ( | void | ) | [inline, virtual] |
Reimplemented from fp_VerticalContainer.
This routine requests that the cell be broken at the specfied height. the return value of the method is the actual height it can be broken which is less than or equal to the requested height.
Reimplemented from fp_VerticalContainer.
References fp_Line::containsAnnotations(), fp_Line::containsFootnoteReference(), fp_Container::countCons(), FL_DocLayout::displayAnnotations(), FP_CONTAINER_LINE, fp_Line::getAnnotationContainers(), fp_ContainerObject::getContainerType(), fl_SectionLayout::getDocLayout(), fp_Line::getFootnoteContainers(), fp_VerticalContainer::getHeight(), fp_ContainerObject::getHeight(), UT_GenericVector< T >::getItemCount(), fp_Container::getNthCon(), UT_GenericVector< T >::getNthItem(), fp_AnnotationContainer::getPage(), fp_Line::getPage(), fp_FootnoteContainer::getPage(), fp_ContainerObject::getSectionLayout(), fp_VerticalContainer::getY(), fp_ContainerObject::getY(), fp_ContainerObject::isVBreakable(), and fp_ContainerObject::wantVBreakAt().
Referenced by fp_TableContainer::wantVBreakAt().
Reimplemented from fp_VerticalContainer.
| fp_ContainerObject * fp_CellContainer::VBreakAt | ( | UT_sint32 | vpos | ) | [virtual] |
Break the cell at the specified location. This is mostly to handle the case of tables embedded in the cell. vpos is relative to the start of the cell.
Reimplemented from fp_VerticalContainer.
References containsNestedTables(), fp_Container::countCons(), FP_CONTAINER_TABLE, fp_ContainerObject::getBreakTick(), fp_ContainerObject::getContainerType(), fp_TableContainer::getFirstBrokenTable(), fp_TableContainer::getHeight(), fp_VerticalContainer::getHeight(), fp_ContainerObject::getHeight(), fp_Container::getMarginAfter(), fp_TableContainer::getMasterTable(), fp_Container::getNthCon(), fp_ContainerObject::getY(), fp_VerticalContainer::getY(), fp_TableContainer::getYBreak(), fp_TableContainer::isThisBroken(), fp_ContainerObject::isVBreakable(), fp_ContainerObject::setBreakTick(), fp_VerticalContainer::setY(), fp_ContainerObject::setY(), fp_TableContainer::setY(), UT_DEBUGMSG, and fp_TableContainer::VBreakAt().
Referenced by fp_TableContainer::breakCellsAt().
| virtual fp_ContainerObject* fp_CellContainer::HBreakAt | ( | UT_sint32 | ) | [inline, virtual] |
Reimplemented from fp_VerticalContainer.
| void fp_CellContainer::recalcMaxWidth | ( | bool | bDontClearIfNeeded = false |
) | [inline, virtual] |
| virtual void fp_CellContainer::setAssignedScreenHeight | ( | UT_sint32 | ) | [inline, virtual] |
Reimplemented from fp_VerticalContainer.
| fp_Container * fp_CellContainer::getNextContainerInSection | ( | void | ) | const [virtual] |
| fp_Container * fp_CellContainer::getPrevContainerInSection | ( | void |   |