text: /* -*- 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 engine for QwtPlot.
  
    It is used by the QwtPlot widget to organize its internal widgets
    or by QwtPlot::print() to render its content to a QPaintDevice like
    a QPrinter, QPixmap/QImage or QSvgRenderer.
  */
  
  class QWT_EXPORT QwtPlotLayout
  {
  public:
      /*!
        Options to configure the plot layout engine
  
        - AlignScales\n
          Unused
        - IgnoreScrollbars\n
          Ignore the dimension of the scrollbars. There are no
          scrollbars, when the plot is rendered to a paint device 
          (QwtPlot::print() ).
        - IgnoreFrames\n
          Ignore all frames. QwtPlot::print() doesn't paint them.
        - IgnoreMargin\n
          Ignore the margin().
        - IgnoreLegend\n
          Ignore the legend. 
  
        \sa activate()
       */
      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
  