vtkChartLegend.h 7.29 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkChartLegend.h

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/

// .NAME vtkChartLegend - draw the chart legend
//
// .SECTION Description
// The vtkChartLegend is drawn in screen coordinates. It is usually one of the
// last elements of a chart to be drawn. It renders the the mark/line for each
// plot, and the plot labels.

23 24
#ifndef vtkChartLegend_h
#define vtkChartLegend_h
25

26
#include "vtkChartsCoreModule.h" // For export macro
27
#include "vtkContextItem.h"
28
#include "vtkNew.h"         // For vtkNew
29
#include "vtkRect.h"        // For vtkRectf return value
30 31

class vtkChart;
32 33 34
class vtkPen;
class vtkBrush;
class vtkTextProperty;
35

36
class VTKCHARTSCORE_EXPORT vtkChartLegend : public vtkContextItem
37 38
{
public:
39
  vtkTypeMacro(vtkChartLegend, vtkContextItem);
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
  virtual void PrintSelf(ostream &os, vtkIndent indent);

  // Description:
  // Creates a 2D Chart object.
  static vtkChartLegend *New();

  // Description:
  // Set point the legend box is anchored to.
  vtkSetVector2Macro(Point, float);

  // Description:
  // Get point the legend box is anchored to.
  vtkGetVector2Macro(Point, float);

  enum {
    LEFT = 0,
    CENTER,
    RIGHT,
    TOP,
59 60
    BOTTOM,
    CUSTOM
61 62 63 64 65 66 67 68 69 70 71 72
    };

  // Description:
  // Set point the legend box is anchored to.
  void SetPoint(const vtkVector2f &point);

  // Description:
  // Get point the legend box is anchored to.
  const vtkVector2f& GetPointVector();

  // Description:
  // Set the horizontal alignment of the legend to the point specified.
73
  // Valid values are LEFT, CENTER and RIGHT.
74 75 76 77 78 79 80 81
  vtkSetMacro(HorizontalAlignment, int);

  // Description:
  // Get the horizontal alignment of the legend to the point specified.
  vtkGetMacro(HorizontalAlignment, int);

  // Description:
  // Set the vertical alignment of the legend to the point specified.
82
  // Valid values are TOP, CENTER and BOTTOM.
83 84 85 86 87 88
  vtkSetMacro(VerticalAlignment, int);

  // Description:
  // Get the vertical alignment of the legend to the point specified.
  vtkGetMacro(VerticalAlignment, int);

89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
  // Description:
  // Set the padding between legend marks, default is 5.
  vtkSetMacro(Padding, int);

  // Description:
  // Get the padding between legend marks.
  vtkGetMacro(Padding, int);

  // Description:
  // Set the symbol width, default is 15.
  vtkSetMacro(SymbolWidth, int);

  // Description:
  // Get the legend symbol width.
  vtkGetMacro(SymbolWidth, int);

105 106
  // Description:
  // Set the point size of the label text.
107
  virtual void SetLabelSize(int size);
108 109 110

  // Description:
  // Get the point size of the label text.
111 112
  virtual int GetLabelSize();

113 114 115 116 117 118 119
  // Description:
  // Get/set if the legend should be drawn inline (inside the chart), or not.
  // True would generally request that the chart draws it inside the chart,
  // false would adjust the chart axes and make space to draw the axes outside.
  vtkSetMacro(Inline, bool);
  vtkGetMacro(Inline, bool);

120 121 122 123 124 125 126 127
  // Description:
  // Get/set if the legend can be dragged with the mouse button, or not.
  // True results in left click and drag causing the legend to move around the
  // scene. False disables response to mouse events.
  // The default is true.
  vtkSetMacro(DragEnabled, bool);
  vtkGetMacro(DragEnabled, bool);

128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
  // Description:
  // Set the chart that the legend belongs to and will draw the legend for.
  void SetChart(vtkChart* chart);

  // Description:
  // Get the chart that the legend belongs to and will draw the legend for.
  vtkChart* GetChart();

  // Description:
  // Update the geometry of the axis. Takes care of setting up the tick mark
  // locations etc. Should be called by the scene before rendering.
  virtual void Update();

  // Description:
  // Paint event for the axis, called whenever the axis needs to be drawn.
  virtual bool Paint(vtkContext2D *painter);

145 146 147 148 149
  // Description:
  // Request the space the legend requires to be drawn. This is returned as a
  // vtkRect4f, with the corner being the offset from Point, and the width/
  // height being the total width/height required by the axis. In order to
  // ensure the numbers are correct, Update() should be called first.
150
  virtual vtkRectf GetBoundingRect(vtkContext2D* painter);
151

152 153 154 155 156 157 158 159 160 161 162 163
  // Description:
  // Get the pen used to draw the legend outline.
  vtkPen * GetPen();

  // Description:
  // Get the brush used to draw the legend background.
  vtkBrush * GetBrush();

  // Description:
  // Get the vtkTextProperty for the legend's labels.
  vtkTextProperty * GetLabelProperties();

164 165 166 167 168 169 170 171 172 173 174
  // Description:
  // Toggle whether or not this legend should attempt to cache its position
  // and size.  The default value is true.  If this value is set to false,
  // the legend will recalculate its position and bounds every time it is
  // drawn.  If users will be able to zoom in or out on your legend, you
  // may want to set this to false.  Otherwise, the border around the legend
  // may not resize appropriately.
  vtkSetMacro(CacheBounds, bool);
  vtkGetMacro(CacheBounds, bool);
  vtkBooleanMacro(CacheBounds, bool);

175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
  // Description:
  // Return true if the supplied x, y coordinate is inside the item.
  virtual bool Hit(const vtkContextMouseEvent &mouse);

  // Description:
  // Mouse move event.
  virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse);

  // Description:
  // Mouse button down event
  virtual bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse);

  // Description:
  // Mouse button release event.
  virtual bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse);

191 192 193 194 195 196 197
protected:
  vtkChartLegend();
  ~vtkChartLegend();

  float* Point;  // The point the legend is anchored to.
  int HorizontalAlignment; // Alignment of the legend to the point it is anchored to.
  int VerticalAlignment; // Alignment of the legend to the point it is anchored to.
198 199 200

  // Description:
  // The pen used to draw the legend box.
201
  vtkNew<vtkPen> Pen;
202 203 204

  // Description:
  // The brush used to render the background of the legend.
205
  vtkNew<vtkBrush> Brush;
206 207 208

  // Description:
  // The text properties of the labels used in the legend.
209
  vtkNew<vtkTextProperty> LabelProperties;
210

211 212 213 214
  // Description:
  // Should we move the legend box around in response to the mouse drag?
  bool DragEnabled;

215 216 217 218 219
  // Description:
  // Should the legend attempt to avoid recalculating its position &
  // bounds unnecessarily?
  bool CacheBounds;

220 221 222 223
  // Description:
  // Last button to be pressed.
  int Button;

224 225 226 227
  vtkTimeStamp PlotTime;
  vtkTimeStamp RectTime;

  vtkRectf Rect;
228 229 230

  // Description:
  // Padding between symbol and text.
231
  int Padding;
232 233 234

  // Description:
  // Width of the symbols in pixels in the legend.
235
  int SymbolWidth;
236

237 238 239 240
  // Description:
  // Should the legend be drawn inline in its chart?
  bool Inline;

241 242 243 244 245
  // Private storage class
  class Private;
  Private* Storage;

private:
246
  vtkChartLegend(const vtkChartLegend &) VTK_DELETE_FUNCTION;
247
  void operator=(const vtkChartLegend &) VTK_DELETE_FUNCTION;
248 249
};

250
#endif //vtkChartLegend_h