1 | // This may look like C code, but it is really -*- C++ -*-
|
---|
2 | // Objets traceur qui peuvent etre attaches a un PIBaseWidget
|
---|
3 | // R. Ansari 97-98
|
---|
4 | // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
|
---|
5 | #ifndef PIDRAWER_H
|
---|
6 | #define PIDRAWER_H
|
---|
7 |
|
---|
8 | #include "pibwdggen.h"
|
---|
9 | #include "pigraphuc.h"
|
---|
10 |
|
---|
11 | #include <list>
|
---|
12 | #if defined(__KCC__)
|
---|
13 | #include <list.h>
|
---|
14 | #endif
|
---|
15 |
|
---|
16 | enum {
|
---|
17 | kStdAxes = 0x0001,
|
---|
18 | kBoxAxes = 0x0002,
|
---|
19 | kTicks = 0x0004,
|
---|
20 | kIntTicks = 0x0010,
|
---|
21 | kExtTicks = 0x0020,
|
---|
22 | kMajTicks = 0x0040,
|
---|
23 | kMinTicks = 0x0080,
|
---|
24 | kLabels = 0x1000,
|
---|
25 | kGridOn = 0x2000,
|
---|
26 | kAxesDflt = kStdAxes | kTicks | kLabels, // Axes trace par defaut
|
---|
27 | kAxesNone = 0 // Pas de trace d axe
|
---|
28 | };
|
---|
29 |
|
---|
30 |
|
---|
31 | class PIDrawer {
|
---|
32 | public:
|
---|
33 | PIDrawer();
|
---|
34 | virtual ~PIDrawer();
|
---|
35 |
|
---|
36 | virtual void SetLimits(double xmin, double xmax, double ymin, double ymax,
|
---|
37 | int axrl=kAxeDirSame, int ayud=kAxeDirSame);
|
---|
38 |
|
---|
39 | virtual void DrawAxes(PIGraphicUC* g);
|
---|
40 | virtual void SetAxesFlags(unsigned int flags=kAxesNone);
|
---|
41 |
|
---|
42 | virtual void Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
|
---|
43 |
|
---|
44 | virtual void Refresh(); // Recalcule les limites et reaffiche
|
---|
45 | virtual void UpdateLimits(); // Calcule et change les limites
|
---|
46 |
|
---|
47 | inline double XMin() const {return xMin;}
|
---|
48 | inline double XMax() const {return xMax;}
|
---|
49 | inline double YMin() const {return yMin;}
|
---|
50 | inline double YMax() const {return yMax;}
|
---|
51 |
|
---|
52 | void GetAxesConfig(int& xa, int& ya);
|
---|
53 | inline unsigned int GetAxesFlags() { return(axesFlags); }
|
---|
54 |
|
---|
55 | inline PIGraphicUC* GetGraphicUC() { return(mGrUC); }
|
---|
56 |
|
---|
57 | inline int LimitsFixed() const {return limitsFixed;}
|
---|
58 | inline void FreeLimits() {limitsFixed = 0;}
|
---|
59 |
|
---|
60 | // Changement des attributs graphiques
|
---|
61 | virtual void SetColAtt(PIColors fg=PI_NotDefColor,
|
---|
62 | PIColors bg=PI_NotDefColor);
|
---|
63 | virtual void SetLineAtt(PILineAtt lat=PI_NotDefLineAtt);
|
---|
64 | virtual void SetFontAtt(PIFontSize fsz=PI_NotDefFontSize,
|
---|
65 | PIFontAtt fat=PI_NotDefFontAtt);
|
---|
66 | virtual void SetMarkerAtt(int sz=-1, PIMarker mrk=PI_NotDefMarker);
|
---|
67 | virtual void SetColMapId(CMapId cid=CMAP_OTHER);
|
---|
68 |
|
---|
69 | void SelGraAtt(PIGraphicUC* g);
|
---|
70 |
|
---|
71 | // Acces aux attributs graphiques
|
---|
72 | inline PIColors GetFgColAtt() { return(mFCol); }
|
---|
73 | inline PIColors GetBgColAtt() { return(mBCol); }
|
---|
74 | inline PILineAtt GetLineAtt() { return(mLAtt); }
|
---|
75 | inline PIFontSize GetFontSz() { return(mFSz); }
|
---|
76 | inline PIFontAtt GetFontAtt() { return(mFAtt); }
|
---|
77 | inline int GetMarkerSz() { return(mMSz); }
|
---|
78 | inline PIMarker GetMarker() { return(mMrk); }
|
---|
79 | inline CMapId GetColMapId() { return(mCmapid); }
|
---|
80 |
|
---|
81 |
|
---|
82 | // --- Methode static ----
|
---|
83 | // Calcul des Distances optimales des subdivisions
|
---|
84 | static void BestTicks(double rmin,double rmax,int nticks,double& majt);
|
---|
85 |
|
---|
86 | // Les objets/methodes suivants devraient etre protected
|
---|
87 | // Pb avec acces depuis PIBaseWdgGen (Reza 11/07/97)
|
---|
88 | virtual PIGraphicUC* SetDrwWdg(PIBaseWdgGen* drw, int x0, int y0, int dx, int dy, PIGraphicGen* g);
|
---|
89 |
|
---|
90 | // Je declare en public a cause de cxx - Reza 11/07/97
|
---|
91 | struct DrwBWId { int id; PIBaseWdgGen* wdg; };
|
---|
92 |
|
---|
93 | protected:
|
---|
94 | friend class PIBaseWdgGen;
|
---|
95 | virtual void Attach(PIBaseWdgGen*, int id);
|
---|
96 | virtual void Detach(PIBaseWdgGen*, int id);
|
---|
97 |
|
---|
98 | void CalcTicks();
|
---|
99 |
|
---|
100 | void DrawHTicks(PIGraphicUC* g, double y, double tickUp, double tickDown, double xBeg, double xStep);
|
---|
101 | void DrawVTicks(PIGraphicUC* g, double x, double tickLeft, double tickRight, double yBeg, double yStep);
|
---|
102 | void DrawHLabels(PIGraphicUC* g, double y, double xBeg, double xStep, int just=0);
|
---|
103 | void DrawVLabels(PIGraphicUC* g, double x, double yBeg, double yStep, int just=0);
|
---|
104 | void DrawGrid(PIGraphicUC* g);
|
---|
105 |
|
---|
106 |
|
---|
107 | double xMin, xMax, yMin, yMax; // Valeurs en unites user
|
---|
108 | int xW0, yW0, xWd, yWd; // Origine/largeur ds la fenetre de trace
|
---|
109 | bool aXdir, aYdir; // Sens des axes horiz, vertical
|
---|
110 | int aXFlg, aYFlg;
|
---|
111 |
|
---|
112 | double xFirstMajTick, xFirstMinTick;
|
---|
113 | double yFirstMajTick, yFirstMinTick;
|
---|
114 | double xMajTickStep, xMinTickStep;
|
---|
115 | double yMajTickStep, yMinTickStep;
|
---|
116 | double xMajTickLen, xMinTickLen;
|
---|
117 | double yMajTickLen, yMinTickLen;
|
---|
118 |
|
---|
119 | int limitsFixed;
|
---|
120 | unsigned int axesFlags;
|
---|
121 |
|
---|
122 | PIBaseWdgGen* mBWdg;
|
---|
123 | PIGraphicUC* mGrUC;
|
---|
124 |
|
---|
125 | list<DrwBWId> mBWdgList;
|
---|
126 | bool mDndfg;
|
---|
127 |
|
---|
128 | // Gestion d attributs graphiques associes a chaque drawer
|
---|
129 | PIColors mFCol, mBCol;
|
---|
130 | PILineAtt mLAtt;
|
---|
131 | PIFontSize mFSz;
|
---|
132 | PIFontAtt mFAtt;
|
---|
133 | int mMSz;
|
---|
134 | PIMarker mMrk;
|
---|
135 | CMapId mCmapid;
|
---|
136 |
|
---|
137 | };
|
---|
138 |
|
---|
139 |
|
---|
140 | // Classe avec gestion d une liste d elements a tracer
|
---|
141 |
|
---|
142 | class PIElDrawer : public PIDrawer
|
---|
143 | {
|
---|
144 | public:
|
---|
145 | enum { PIDEL_Line = 1, PIDEL_Text = 2,
|
---|
146 | PIDEL_Rect = 3, PIDEL_FRect = 4,
|
---|
147 | PIDEL_Circ = 5, PIDEL_FCirc = 6 } ;
|
---|
148 |
|
---|
149 | PIElDrawer();
|
---|
150 | virtual ~PIElDrawer();
|
---|
151 |
|
---|
152 | virtual void SetTitles(const char* tt=NULL, const char* tb=NULL);
|
---|
153 | virtual void SetTitles(string const & tt, string const & tb);
|
---|
154 |
|
---|
155 | virtual void Draw(PIGraphicUC* g, double xmin, double ymin, double xmax, double ymax);
|
---|
156 |
|
---|
157 | inline int ElAddLine(PIGrCoord x1, PIGrCoord y1, PIGrCoord x2, PIGrCoord y2,
|
---|
158 | PIColors c=PI_NotDefColor)
|
---|
159 | { return( ElAdd(PIDEL_Line, x1, y1, x2, y2, NULL, c) ); }
|
---|
160 | inline int ElAddText(PIGrCoord x, PIGrCoord y, const char* s, PIColors c=PI_NotDefColor)
|
---|
161 | { return( ElAdd(PIDEL_Text, x, y, 0, 0, s, c) ); }
|
---|
162 | inline int ElAddRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy,
|
---|
163 | PIColors c=PI_NotDefColor)
|
---|
164 | { return( ElAdd(PIDEL_Rect, x, y, dx, dy, NULL, c) ); }
|
---|
165 | inline int ElAddFRect(PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy,
|
---|
166 | PIColors c=PI_NotDefColor)
|
---|
167 | { return( ElAdd(PIDEL_FRect, x, y, dx, dy, NULL, c) ); }
|
---|
168 | inline int ElAddCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
|
---|
169 | { return( ElAdd(PIDEL_Circ, x, y, r, r, NULL, c) ); }
|
---|
170 | inline int ElAddFCirc(PIGrCoord x, PIGrCoord y, PIGrCoord r, PIColors c=PI_NotDefColor)
|
---|
171 | { return( ElAdd(PIDEL_FCirc, x, y, r, r, NULL, c) ); }
|
---|
172 |
|
---|
173 | void ElDel(int id);
|
---|
174 | void ElDelAll();
|
---|
175 |
|
---|
176 | protected:
|
---|
177 | int ElAdd(int typ, PIGrCoord x, PIGrCoord y, PIGrCoord dx, PIGrCoord dy,
|
---|
178 | const char* s, PIColors c=PI_NotDefColor);
|
---|
179 | #ifdef __DECCXX
|
---|
180 | public:
|
---|
181 | #endif
|
---|
182 | struct DrwEl{
|
---|
183 | int eid, etyp;
|
---|
184 | PIGrCoord ex,ey;
|
---|
185 | PIGrCoord edx,edy;
|
---|
186 | string es;
|
---|
187 | PIColors col;
|
---|
188 | };
|
---|
189 | #ifdef __DECCXX
|
---|
190 | protected:
|
---|
191 | #endif
|
---|
192 | typedef list<DrwEl> DrwElList;
|
---|
193 |
|
---|
194 | DrwElList mElist;
|
---|
195 | int mEn;
|
---|
196 |
|
---|
197 | string titleT, titleB; // Titre Haut - Bas
|
---|
198 |
|
---|
199 | };
|
---|
200 |
|
---|
201 | #endif
|
---|