00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef PLOTCANVASLAYOUT_H_
00028 #define PLOTCANVASLAYOUT_H_
00029
00030 #include <graphics/GenericPlotter/PlotCanvas.h>
00031
00032 #include <casa/namespace.h>
00033
00034 namespace casa {
00035
00036
00037 class Plotter;
00038
00039
00041
00043
00044
00045
00046 class PlotLayoutCoordinate {
00047 public:
00048 PlotLayoutCoordinate() { }
00049
00050 virtual ~PlotLayoutCoordinate() { }
00051 };
00052
00053
00054 class PlotCanvasLayout {
00055 public:
00056
00057 PlotCanvasLayout() : m_plotter(NULL) { }
00058
00059
00060 virtual ~PlotCanvasLayout() { }
00061
00062
00063
00064 virtual Plotter* plotter() const { return m_plotter; }
00065
00066
00067
00068 virtual void attach(Plotter* p) { m_plotter = p; }
00069
00070
00071
00072
00073
00074 virtual bool coordIsValid(const PlotLayoutCoordinate& coord) const = 0;
00075
00076
00077
00078 virtual int coordToIndex(const PlotLayoutCoordinate& coord) const = 0;
00079
00080
00081 virtual void setCanvasAt(const PlotLayoutCoordinate& coord,
00082 PlotCanvasPtr canvas) = 0;
00083
00084
00085 virtual PlotCanvasPtr canvasAt(const PlotLayoutCoordinate& coord) const =0;
00086
00087
00088 virtual PlotCanvasPtr canvas() const = 0;
00089
00090
00091 virtual vector<PlotCanvasPtr> allCanvases() const = 0;
00092
00093
00094 virtual bool isValid() const = 0;
00095
00096
00097
00098
00099
00100 virtual unsigned int spacing() const = 0;
00101 virtual void setSpacing(unsigned int spacing) = 0;
00102
00103
00104 protected:
00105 Plotter* m_plotter;
00106 };
00107
00108
00110
00112
00113
00114 class PlotLayoutSingle : public virtual PlotCanvasLayout {
00115 public:
00116
00117 PlotLayoutSingle(PlotCanvasPtr c);
00118
00119
00120 ~PlotLayoutSingle();
00121
00122
00123
00124 bool coordIsValid(const PlotLayoutCoordinate& coord) const { return true; }
00125
00126
00127 int coordToIndex(const PlotLayoutCoordinate& coord) const { return 0; }
00128
00129
00130 void setCanvasAt(const PlotLayoutCoordinate& coord, PlotCanvasPtr c);
00131
00132
00133 void setCanvas(PlotCanvasPtr canvas);
00134
00135
00136 PlotCanvasPtr canvas() const;
00137
00138
00139 PlotCanvasPtr canvasAt(const PlotLayoutCoordinate& coord) const;
00140
00141
00142 vector<PlotCanvasPtr> allCanvases() const;
00143
00144
00145 bool isValid() const;
00146
00147
00148 unsigned int spacing() const { return 0; }
00149
00150
00151 void setSpacing(unsigned int spacing) { }
00152
00153 protected:
00154 PlotCanvasPtr m_canvas;
00155 };
00156
00157
00159
00161
00162
00163 class PlotGridCoordinate : public virtual PlotLayoutCoordinate {
00164 public:
00165 PlotGridCoordinate(unsigned int r, unsigned int c): row(r), col(c) { }
00166
00167 ~PlotGridCoordinate() { }
00168
00169 unsigned int row;
00170 unsigned int col;
00171 };
00172
00173
00174 class PlotLayoutGrid : public virtual PlotCanvasLayout {
00175 public:
00176
00177 PlotLayoutGrid(unsigned int rows, unsigned int cols);
00178
00179
00180 ~PlotLayoutGrid();
00181
00182
00183 unsigned int rows() const;
00184
00185
00186 unsigned int cols() const;
00187
00188
00189 bool coordIsValid(const PlotLayoutCoordinate& coord) const;
00190
00191
00192 int coordToIndex(const PlotLayoutCoordinate& coord) const;
00193
00194
00195 void setCanvasAt(const PlotLayoutCoordinate& coord, PlotCanvasPtr canvas);
00196
00197
00198 PlotCanvasPtr canvasAt(const PlotLayoutCoordinate& coord) const;
00199
00200
00201 PlotCanvasPtr canvas() const;
00202
00203
00204 vector<PlotCanvasPtr> allCanvases() const;
00205
00206
00207 bool isValid() const;
00208
00209
00210 unsigned int spacing() const;
00211
00212
00213 void setSpacing(unsigned int spacing);
00214
00215 protected:
00216 unsigned int m_rows;
00217 unsigned int m_cols;
00218 vector<vector<PlotCanvasPtr> > m_panels;
00219 unsigned int m_spacing;
00220 };
00221
00222
00224
00226
00227 typedef CountedPtr<PlotCanvasLayout> PlotCanvasLayoutPtr;
00228 INHERITANCE_POINTER2(PlotLayoutSingle, PlotLayoutSinglePtr, PlotCanvasLayout,
00229 PlotCanvasLayoutPtr)
00230 INHERITANCE_POINTER2(PlotLayoutGrid, PlotLayoutGridPtr, PlotCanvasLayout,
00231 PlotCanvasLayoutPtr)
00232
00233 }
00234
00235 #endif