iCub-main
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
QCPLayoutElement Class Reference

The abstract base class for all objects that form the layout system. More...

#include <qcustomplot.h>

+ Inheritance diagram for QCPLayoutElement:

Public Types

enum  UpdatePhase {
  upPreparation ,
  upMargins ,
  upLayout
}
 Defines the phases of the update process, that happens just before a replot. More...
 

Public Member Functions

 QCPLayoutElement (QCustomPlot *parentPlot=0)
 Creates an instance of QCPLayoutElement and sets default values. More...
 
virtual ~QCPLayoutElement ()
 
QCPLayoutlayout () const
 Returns the parent layout of this layout element. More...
 
QRect rect () const
 Returns the inner rect of this layout element. More...
 
QRect outerRect () const
 
QMargins margins () const
 
QMargins minimumMargins () const
 
QCP::MarginSides autoMargins () const
 
QSize minimumSize () const
 
QSize maximumSize () const
 
QCPMarginGroupmarginGroup (QCP::MarginSide side) const
 
QHash< QCP::MarginSide, QCPMarginGroup * > marginGroups () const
 
void setOuterRect (const QRect &rect)
 Sets the outer rect of this layout element. More...
 
void setMargins (const QMargins &margins)
 Sets the margins of this layout element. More...
 
void setMinimumMargins (const QMargins &margins)
 If setAutoMargins is enabled on some or all margins, this function is used to provide minimum values for those margins. More...
 
void setAutoMargins (QCP::MarginSides sides)
 Sets on which sides the margin shall be calculated automatically. More...
 
void setMinimumSize (const QSize &size)
 Sets the minimum size for the inner rect of this layout element. More...
 
void setMinimumSize (int width, int height)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Sets the minimum size for the inner rect of this layout element. More...
 
void setMaximumSize (const QSize &size)
 Sets the maximum size for the inner rect of this layout element. More...
 
void setMaximumSize (int width, int height)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Sets the maximum size for the inner rect of this layout element. More...
 
void setMarginGroup (QCP::MarginSides sides, QCPMarginGroup *group)
 Sets the margin group of the specified margin sides. More...
 
virtual void update (UpdatePhase phase)
 Updates the layout element and sub-elements. More...
 
virtual QSize minimumSizeHint () const
 Returns the minimum size this layout element (the inner rect) may be compressed to. More...
 
virtual QSize maximumSizeHint () const
 Returns the maximum size this layout element (the inner rect) may be expanded to. More...
 
virtual QList< QCPLayoutElement * > elements (bool recursive) const
 Returns a list of all child elements in this layout element. More...
 
virtual double selectTest (const QPointF &pos, bool onlySelectable, QVariant *details=0) const
 Layout elements are sensitive to events inside their outer rect. More...
 
- Public Member Functions inherited from QCPLayerable
 QCPLayerable (QCustomPlot *plot, QString targetLayer="", QCPLayerable *parentLayerable=0)
 Creates a new QCPLayerable instance. More...
 
 ~QCPLayerable ()
 
bool visible () const
 
QCustomPlotparentPlot () const
 
QCPLayerableparentLayerable () const
 Returns the parent layerable of this layerable. More...
 
QCPLayerlayer () const
 
bool antialiased () const
 
void setVisible (bool on)
 Sets the visibility of this layerable object. More...
 
Q_SLOT bool setLayer (QCPLayer *layer)
 Sets the layer of this layerable object. More...
 
bool setLayer (const QString &layerName)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. Sets the layer of this layerable object by name. More...
 
void setAntialiased (bool enabled)
 Sets whether this object will be drawn antialiased or not. More...
 
bool realVisibility () const
 Returns whether this layerable is visible, taking the visibility of the layerable parent and the visibility of the layer this layerable is on into account. More...
 

Protected Member Functions

virtual int calculateAutoMargin (QCP::MarginSide side)
 
virtual void mousePressEvent (QMouseEvent *event)
 This event is called, if the mouse was pressed while being inside the outer rect of this layout element. More...
 
virtual void mouseMoveEvent (QMouseEvent *event)
 This event is called, if the mouse is moved inside the outer rect of this layout element. More...
 
virtual void mouseReleaseEvent (QMouseEvent *event)
 This event is called, if the mouse was previously pressed inside the outer rect of this layout element and is now released. More...
 
virtual void mouseDoubleClickEvent (QMouseEvent *event)
 This event is called, if the mouse is double-clicked inside the outer rect of this layout element. More...
 
virtual void wheelEvent (QWheelEvent *event)
 This event is called, if the mouse wheel is scrolled while the cursor is inside the rect of this layout element. More...
 
virtual void applyDefaultAntialiasingHint (QCPPainter *painter) const
 
virtual void draw (QCPPainter *painter)
 
virtual void parentPlotInitialized (QCustomPlot *parentPlot)
 
- Protected Member Functions inherited from QCPLayerable
virtual QCP::Interaction selectionCategory () const
 
virtual QRect clipRect () const
 
virtual void selectEvent (QMouseEvent *event, bool additive, const QVariant &details, bool *selectionStateChanged)
 
virtual void deselectEvent (bool *selectionStateChanged)
 
void initializeParentPlot (QCustomPlot *parentPlot)
 
void setParentLayerable (QCPLayerable *parentLayerable)
 
bool moveToLayer (QCPLayer *layer, bool prepend)
 
void applyAntialiasingHint (QCPPainter *painter, bool localAntialiased, QCP::AntialiasedElement overrideElement) const
 

Protected Attributes

QCPLayoutmParentLayout
 
QSize mMinimumSize
 
QSize mMaximumSize
 
QRect mRect
 
QRect mOuterRect
 
QMargins mMargins
 
QMargins mMinimumMargins
 
QCP::MarginSides mAutoMargins
 
QHash< QCP::MarginSide, QCPMarginGroup * > mMarginGroups
 
- Protected Attributes inherited from QCPLayerable
bool mVisible
 
QCustomPlotmParentPlot
 
QPointer< QCPLayerablemParentLayerable
 
QCPLayermLayer
 
bool mAntialiased
 

Friends

class QCustomPlot
 
class QCPLayout
 
class QCPMarginGroup
 

Additional Inherited Members

- Signals inherited from QCPLayerable
void layerChanged (QCPLayer *newLayer)
 This signal is emitted when the layer of this layerable changes, i.e. More...
 

Detailed Description

The abstract base class for all objects that form the layout system.

This is an abstract base class. As such, it can't be instantiated directly, rather use one of its subclasses.

A Layout element is a rectangular object which can be placed in layouts. It has an outer rect (QCPLayoutElement::outerRect) and an inner rect (QCPLayoutElement::rect). The difference between outer and inner rect is called its margin. The margin can either be set to automatic or manual (setAutoMargins) on a per-side basis. If a side is set to manual, that margin can be set explicitly with setMargins and will stay fixed at that value. If it's set to automatic, the layout element subclass will control the value itself (via calculateAutoMargin).

Layout elements can be placed in layouts (base class QCPLayout) like QCPLayoutGrid. The top level layout is reachable via QCustomPlot::plotLayout, and is a QCPLayoutGrid. Since QCPLayout itself derives from QCPLayoutElement, layouts can be nested.

Thus in QCustomPlot one can divide layout elements into two categories: The ones that are invisible by themselves, because they don't draw anything. Their only purpose is to manage the position and size of other layout elements. This category of layout elements usually use QCPLayout as base class. Then there is the category of layout elements which actually draw something. For example, QCPAxisRect, QCPLegend and QCPPlotTitle are of this category. This does not necessarily mean that the latter category can't have child layout elements. QCPLegend for instance, actually derives from QCPLayoutGrid and the individual legend items are child layout elements in the grid layout.

Definition at line 628 of file qcustomplot.h.

Member Enumeration Documentation

◆ UpdatePhase

Defines the phases of the update process, that happens just before a replot.

At each phase, update is called with the according UpdatePhase value.

Enumerator
upPreparation 

Phase used for any type of preparation that needs to be done before margin calculation and layout.

upMargins 

Phase in which the margins are calculated and set.

upLayout 

Final phase in which the layout system places the rects of the elements.

Definition at line 645 of file qcustomplot.h.

Constructor & Destructor Documentation

◆ QCPLayoutElement()

QCPLayoutElement::QCPLayoutElement ( QCustomPlot parentPlot = 0)
explicit

Creates an instance of QCPLayoutElement and sets default values.

Definition at line 1860 of file qcustomplot.cpp.

◆ ~QCPLayoutElement()

QCPLayoutElement::~QCPLayoutElement ( )
virtual

Definition at line 1873 of file qcustomplot.cpp.

Member Function Documentation

◆ applyDefaultAntialiasingHint()

virtual void QCPLayoutElement::applyDefaultAntialiasingHint ( QCPPainter painter) const
inlineprotectedvirtual

Implements QCPLayerable.

Reimplemented in QCPColorScale, QCPPlotTitle, QCPLegend, QCPAbstractLegendItem, and QCPAxisRect.

Definition at line 705 of file qcustomplot.h.

◆ autoMargins()

QCP::MarginSides QCPLayoutElement::autoMargins ( ) const
inline

Definition at line 660 of file qcustomplot.h.

◆ calculateAutoMargin()

int QCPLayoutElement::calculateAutoMargin ( QCP::MarginSide  side)
protectedvirtual

Reimplemented in QCPAxisRect.

Definition at line 2173 of file qcustomplot.cpp.

◆ draw()

virtual void QCPLayoutElement::draw ( QCPPainter painter)
inlineprotectedvirtual

◆ elements()

QList< QCPLayoutElement * > QCPLayoutElement::elements ( bool  recursive) const
virtual

Returns a list of all child elements in this layout element.

If recursive is true, all sub-child elements are included in the list, too.

Warning
There may be entries with value 0 in the returned list. (For example, QCPLayoutGrid may have empty cells which yield 0 at the respective index.)

Reimplemented in QCPAxisRect, QCPLayoutGrid, and QCPLayout.

Definition at line 2113 of file qcustomplot.cpp.

◆ layout()

QCPLayout * QCPLayoutElement::layout ( ) const
inline

Returns the parent layout of this layout element.

Definition at line 655 of file qcustomplot.h.

◆ marginGroup()

QCPMarginGroup* QCPLayoutElement::marginGroup ( QCP::MarginSide  side) const
inline

Definition at line 663 of file qcustomplot.h.

◆ marginGroups()

QHash<QCP::MarginSide, QCPMarginGroup*> QCPLayoutElement::marginGroups ( ) const
inline

Definition at line 664 of file qcustomplot.h.

◆ margins()

QMargins QCPLayoutElement::margins ( ) const
inline

Definition at line 658 of file qcustomplot.h.

◆ maximumSize()

QSize QCPLayoutElement::maximumSize ( ) const
inline

Definition at line 662 of file qcustomplot.h.

◆ maximumSizeHint()

QSize QCPLayoutElement::maximumSizeHint ( ) const
virtual

Returns the maximum size this layout element (the inner rect) may be expanded to.

if a maximum size (setMaximumSize) was not set manually, parent layouts consult this function to determine the maximum allowed size of this layout element. (A manual maximum size is considered set if it is smaller than Qt's QWIDGETSIZE_MAX.)

Reimplemented in QCPPlotTitle, and QCPLayoutGrid.

Definition at line 2101 of file qcustomplot.cpp.

◆ minimumMargins()

QMargins QCPLayoutElement::minimumMargins ( ) const
inline

Definition at line 659 of file qcustomplot.h.

◆ minimumSize()

QSize QCPLayoutElement::minimumSize ( ) const
inline

Definition at line 661 of file qcustomplot.h.

◆ minimumSizeHint()

QSize QCPLayoutElement::minimumSizeHint ( ) const
virtual

Returns the minimum size this layout element (the inner rect) may be compressed to.

if a minimum size (setMinimumSize) was not set manually, parent layouts consult this function to determine the minimum allowed size of this layout element. (A manual minimum size is considered set if it is non-zero.)

Reimplemented in QCPPlotTitle, QCPPlottableLegendItem, and QCPLayoutGrid.

Definition at line 2089 of file qcustomplot.cpp.

◆ mouseDoubleClickEvent()

void QCPLayoutElement::mouseDoubleClickEvent ( QMouseEvent *  event)
inlineprotectedvirtual

This event is called, if the mouse is double-clicked inside the outer rect of this layout element.

Definition at line 701 of file qcustomplot.h.

◆ mouseMoveEvent()

void QCPLayoutElement::mouseMoveEvent ( QMouseEvent *  event)
inlineprotectedvirtual

This event is called, if the mouse is moved inside the outer rect of this layout element.

Reimplemented in QCPColorScale, and QCPAxisRect.

Definition at line 699 of file qcustomplot.h.

◆ mousePressEvent()

void QCPLayoutElement::mousePressEvent ( QMouseEvent *  event)
inlineprotectedvirtual

This event is called, if the mouse was pressed while being inside the outer rect of this layout element.

Reimplemented in QCPColorScale, and QCPAxisRect.

Definition at line 698 of file qcustomplot.h.

◆ mouseReleaseEvent()

void QCPLayoutElement::mouseReleaseEvent ( QMouseEvent *  event)
inlineprotectedvirtual

This event is called, if the mouse was previously pressed inside the outer rect of this layout element and is now released.

Reimplemented in QCPColorScale, and QCPAxisRect.

Definition at line 700 of file qcustomplot.h.

◆ outerRect()

QRect QCPLayoutElement::outerRect ( ) const
inline

Definition at line 657 of file qcustomplot.h.

◆ parentPlotInitialized()

void QCPLayoutElement::parentPlotInitialized ( QCustomPlot parentPlot)
protectedvirtual

Reimplemented from QCPLayerable.

Reimplemented in QCPLegend.

Definition at line 2155 of file qcustomplot.cpp.

◆ rect()

QRect QCPLayoutElement::rect ( ) const
inline

Returns the inner rect of this layout element.

The inner rect is the outer rect (setOuterRect) shrinked by the margins (setMargins, setAutoMargins).

In some cases, the area between outer and inner rect is left blank. In other cases the margin area is used to display peripheral graphics while the main content is in the inner rect. This is where automatic margin calculation becomes interesting because it allows the layout element to adapt the margins to the peripheral graphics it wants to draw. For example, QCPAxisRect draws the axis labels and tick labels in the margin area, thus needs to adjust the margins (if setAutoMargins is enabled) according to the space required by the labels of the axes.

Definition at line 656 of file qcustomplot.h.

◆ selectTest()

double QCPLayoutElement::selectTest ( const QPointF &  pos,
bool  onlySelectable,
QVariant *  details = 0 
) const
virtual

Layout elements are sensitive to events inside their outer rect.

If pos is within the outer rect, this method returns a value corresponding to 0.99 times the parent plot's selection tolerance. However, layout elements are not selectable by default. So if onlySelectable is true, -1.0 is returned.

See QCPLayerable::selectTest for a general explanation of this virtual method.

QCPLayoutElement subclasses may reimplement this method to provide more specific selection test behaviour.

Reimplemented from QCPLayerable.

Reimplemented in QCPPlotTitle, QCPLegend, QCPAbstractLegendItem, and QCPLayoutInset.

Definition at line 2130 of file qcustomplot.cpp.

◆ setAutoMargins()

void QCPLayoutElement::setAutoMargins ( QCP::MarginSides  sides)

Sets on which sides the margin shall be calculated automatically.

If a side is calculated automatically, a minimum margin value may be provided with setMinimumMargins. If a side is set to be controlled manually, the value may be specified with setMargins.

Margin sides that are under automatic control may participate in a QCPMarginGroup (see setMarginGroup), to synchronize (align) it with other layout elements in the plot.

See also
setMinimumMargins, setMargins

Definition at line 1948 of file qcustomplot.cpp.

◆ setMarginGroup()

void QCPLayoutElement::setMarginGroup ( QCP::MarginSides  sides,
QCPMarginGroup group 
)

Sets the margin group of the specified margin sides.

Margin groups allow synchronizing specified margins across layout elements, see the documentation of QCPMarginGroup.

To unset the margin group of sides, set group to 0.

Note that margin groups only work for margin sides that are set to automatic (setAutoMargins).

Definition at line 2015 of file qcustomplot.cpp.

◆ setMargins()

void QCPLayoutElement::setMargins ( const QMargins &  margins)

Sets the margins of this layout element.

If setAutoMargins is disabled for some or all sides, this function is used to manually set the margin on those sides. Sides that are still set to be handled automatically are ignored and may have any value in margins.

The margin is the distance between the outer rect (controlled by the parent layout via setOuterRect) and the inner rect (which usually contains the main content of this layout element).

See also
setAutoMargins

Definition at line 1912 of file qcustomplot.cpp.

◆ setMaximumSize() [1/2]

void QCPLayoutElement::setMaximumSize ( const QSize &  size)

Sets the maximum size for the inner rect of this layout element.

A parent layout tries to respect the size here by changing row/column sizes in the layout accordingly.

Definition at line 1985 of file qcustomplot.cpp.

◆ setMaximumSize() [2/2]

void QCPLayoutElement::setMaximumSize ( int  width,
int  height 
)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Sets the maximum size for the inner rect of this layout element.

Definition at line 1999 of file qcustomplot.cpp.

◆ setMinimumMargins()

void QCPLayoutElement::setMinimumMargins ( const QMargins &  margins)

If setAutoMargins is enabled on some or all margins, this function is used to provide minimum values for those margins.

The minimum values are not enforced on margin sides that were set to be under manual control via setAutoMargins.

See also
setAutoMargins

Definition at line 1930 of file qcustomplot.cpp.

◆ setMinimumSize() [1/2]

void QCPLayoutElement::setMinimumSize ( const QSize &  size)

Sets the minimum size for the inner rect of this layout element.

A parent layout tries to respect the size here by changing row/column sizes in the layout accordingly.

If the parent layout size is not sufficient to satisfy all minimum size constraints of its child layout elements, the layout may set a size that is actually smaller than size. QCustomPlot propagates the layout's size constraints to the outside by setting its own minimum QWidget size accordingly, so violations of size should be exceptions.

Definition at line 1962 of file qcustomplot.cpp.

◆ setMinimumSize() [2/2]

void QCPLayoutElement::setMinimumSize ( int  width,
int  height 
)

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Sets the minimum size for the inner rect of this layout element.

Definition at line 1976 of file qcustomplot.cpp.

◆ setOuterRect()

void QCPLayoutElement::setOuterRect ( const QRect &  rect)

Sets the outer rect of this layout element.

If the layout element is inside a layout, the layout sets the position and size of this layout element using this function.

Calling this function externally has no effect, since the layout will overwrite any changes to the outer rect upon the next replot.

The layout element will adapt its inner rect by applying the margins inward to the outer rect.

See also
rect

Definition at line 1892 of file qcustomplot.cpp.

◆ update()

void QCPLayoutElement::update ( UpdatePhase  phase)
virtual

Updates the layout element and sub-elements.

This function is automatically called before every replot by the parent layout element. It is called multiple times, once for every UpdatePhase. The phases are run through in the order of the enum values. For details about what happens at the different phases, see the documentation of UpdatePhase.

Layout elements that have child elements should call the update method of their child elements, and pass the current phase unchanged.

The default implementation executes the automatic margin mechanism in the upMargins phase. Subclasses should make sure to call the base class implementation.

Reimplemented in QCPColorScale, QCPAxisRect, and QCPLayout.

Definition at line 2056 of file qcustomplot.cpp.

◆ wheelEvent()

void QCPLayoutElement::wheelEvent ( QWheelEvent *  event)
inlineprotectedvirtual

This event is called, if the mouse wheel is scrolled while the cursor is inside the rect of this layout element.

Reimplemented in QCPColorScale, and QCPAxisRect.

Definition at line 702 of file qcustomplot.h.

Friends And Related Function Documentation

◆ QCPLayout

friend class QCPLayout
friend

Definition at line 713 of file qcustomplot.h.

◆ QCPMarginGroup

friend class QCPMarginGroup
friend

Definition at line 714 of file qcustomplot.h.

◆ QCustomPlot

friend class QCustomPlot
friend

Definition at line 712 of file qcustomplot.h.

Member Data Documentation

◆ mAutoMargins

QCP::MarginSides QCPLayoutElement::mAutoMargins
protected

Definition at line 692 of file qcustomplot.h.

◆ mMarginGroups

QHash<QCP::MarginSide, QCPMarginGroup*> QCPLayoutElement::mMarginGroups
protected

Definition at line 693 of file qcustomplot.h.

◆ mMargins

QMargins QCPLayoutElement::mMargins
protected

Definition at line 691 of file qcustomplot.h.

◆ mMaximumSize

QSize QCPLayoutElement::mMaximumSize
protected

Definition at line 689 of file qcustomplot.h.

◆ mMinimumMargins

QMargins QCPLayoutElement::mMinimumMargins
protected

Definition at line 691 of file qcustomplot.h.

◆ mMinimumSize

QSize QCPLayoutElement::mMinimumSize
protected

Definition at line 689 of file qcustomplot.h.

◆ mOuterRect

QRect QCPLayoutElement::mOuterRect
protected

Definition at line 690 of file qcustomplot.h.

◆ mParentLayout

QCPLayout* QCPLayoutElement::mParentLayout
protected

Definition at line 688 of file qcustomplot.h.

◆ mRect

QRect QCPLayoutElement::mRect
protected

Definition at line 690 of file qcustomplot.h.


The documentation for this class was generated from the following files: