/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_PLOT_LAYOUT_H
#define QWT_PLOT_LAYOUT_H

#include "qwt_global.h"
#include "qwt_plot.h"

/*!
  \brief Layout class for QwtPlot.

  Organizes the geometry for the different QwtPlot components.
*/

class QWT_EXPORT QwtPlotLayout
{
public:
    enum Options {
        AlignScales = 1,
        IgnoreScrollbars = 2,
        IgnoreFrames = 4,
        IgnoreMargin = 8,
        IgnoreLegend = 16
    };

    explicit QwtPlotLayout();
    virtual ~QwtPlotLayout();

    void setMargin(int);
    int margin() const;

    void setCanvasMargin(int margin, int axis = -1);
    int canvasMargin(int axis) const;

    void setAlignCanvasToScales(bool);
    bool alignCanvasToScales() const;

    void setSpacing(int);
    int spacing() const;

    void setLegendPosition(QwtPlot::LegendPosition pos, double ratio);
    void setLegendPosition(QwtPlot::LegendPosition pos);
    QwtPlot::LegendPosition legendPosition() const;

    void setLegendRatio(double ratio);
    double legendRatio() const;

    virtual QSize minimumSizeHint(const QwtPlot *) const;

    virtual void activate(const QwtPlot *,
                          const QRect &rect, int options = 0);

    virtual void invalidate();

    const QRect &titleRect() const;
    const QRect &legendRect() const;
    const QRect &scaleRect(int axis) const;
    const QRect &canvasRect() const;

    class LayoutData;

protected:

    QRect layoutLegend(int options, const QRect &) const;
    QRect alignLegend(const QRect &canvasRect,
                      const QRect &legendRect) const;

    void expandLineBreaks(int options, const QRect &rect,
                          int &dimTitle, int dimAxes[QwtPlot::axisCnt]) const;

    void alignScales(int options, QRect &canvasRect,
                     QRect scaleRect[QwtPlot::axisCnt]) const;

private:
    class PrivateData;

    PrivateData *d_data;
};

#endif
