WorldCanvasHolder.h
Go to the documentation of this file.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
00028 #ifndef TRIALDISPLAY_WORLDCANVASHOLDER_H
00029 #define TRIALDISPLAY_WORLDCANVASHOLDER_H
00030
00031 #include <casa/aips.h>
00032 #include <list>
00033 #include <display/DisplayEvents/WCRefreshEH.h>
00034 #include <display/DisplayEvents/WCPositionEH.h>
00035 #include <display/DisplayEvents/WCMotionEH.h>
00036 #include <display/DisplayCanvas/WCSizeControlHandler.h>
00037 #include <display/DisplayCanvas/WCCoordinateHandler.h>
00038 #include <display/Display/AttributeBuffer.h>
00039 #include <display/Display/WorldCanvas.h>
00040
00041 namespace casa {
00042
00043 class Attribute;
00044 class DisplayData;
00045 class String;
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079 class WorldCanvasHolder : public WCRefreshEH,
00080 public WCMotionEH,
00081 public WCPositionEH,
00082 public WCSizeControlHandler,
00083 public WCCoordinateHandler {
00084
00085 public:
00086
00087
00088
00089 WorldCanvasHolder(WorldCanvas *canvas);
00090
00091
00092 virtual ~WorldCanvasHolder();
00093
00094
00095 virtual WorldCanvas *worldCanvas() const {
00096 return itsWorldCanvas;
00097 }
00098
00099
00100
00101 virtual void addDisplayData(DisplayData *dData, int position);
00102
00103
00104
00105
00106
00107 virtual void removeDisplayData(DisplayData& dData,
00108 Bool ignoreRefresh = False);
00109
00110
00111 virtual uInt nDisplayDatas() const;
00112
00113
00114
00115
00116
00117 void setRestriction(const Attribute& restriction) {
00118 cout<<"World canvas holder restriction="<<restriction.getName().c_str()<<" value="<<restriction.getType()<<endl;
00119
00120 itsWorldCanvas->setRestriction(restriction);
00121 }
00122 void setRestrictions(const AttributeBuffer& resBuff) {
00123 itsWorldCanvas->setRestrictions(resBuff);
00124 }
00125
00126
00127
00128 Bool existRestriction(const String& name) const {
00129 return itsWorldCanvas->existRestriction(name);
00130 }
00131
00132
00133 void setBlinkMode( bool mode ) {
00134 blinkMode = mode;
00135 }
00136
00137
00138
00139
00140 void removeRestriction(const String& restrictionName) {
00141 itsWorldCanvas->removeRestriction(restrictionName);
00142 }
00143 void removeRestrictions() {
00144 itsWorldCanvas->removeRestrictions( );
00145 }
00146
00147
00148
00149
00150
00151
00152 Bool matchesRestriction(const Attribute& restriction) const {
00153 return itsWorldCanvas->matchesRestriction(restriction);
00154 }
00155 Bool matchesRestrictions(const AttributeBuffer& buffer) const {
00156 return itsWorldCanvas->matchesRestrictions(buffer);
00157 }
00158
00159
00160
00161
00162 const AttributeBuffer *restrictionBuffer() const {
00163 return itsWorldCanvas->restrictionBuffer( );
00164 }
00165
00166
00167
00168 virtual void refresh(const Display::RefreshReason &reason =
00169 Display::UserCommand,
00170 const Bool &explicitrequest = True);
00171
00172
00173 virtual Bool executeSizeControl(WorldCanvas *wCanvas);
00174
00175
00176
00177 virtual void operator()(const WCPositionEvent &ev);
00178
00179
00180
00181 virtual void operator()(const WCRefreshEvent &ev);
00182
00183
00184
00185 virtual void operator()(const WCMotionEvent &ev);
00186
00187
00188
00189
00190
00191 virtual void handleEvent(DisplayEvent& ev);
00192
00193
00194
00195
00196
00197
00198 virtual Bool linToWorld(Vector<Double>& world, const Vector<Double>& lin);
00199 virtual Bool worldToLin(Vector<Double>& lin, const Vector<Double>& world);
00200
00201
00202 virtual Bool linToWorld(Matrix<Double> & world, Vector<Bool> & failures,
00203 const Matrix<Double> & lin) {
00204 return WCCoordinateHandler::linToWorld(world, failures, lin);
00205 }
00206
00207 virtual Bool worldToLin(Matrix<Double> & lin, Vector<Bool> & failures,
00208 const Matrix<Double> & world) {
00209 return WCCoordinateHandler::worldToLin(lin, failures, world);
00210 }
00211
00212
00213
00214 virtual uInt nWorldAxes() const {
00215 return 2;
00216 }
00217
00218
00219
00220 virtual uInt nelements();
00221
00222
00223
00224 virtual void cleanup();
00225
00226
00227 const DisplayData* csMaster() const {
00228 return itsWorldCanvas->csMaster( );
00229 }
00230
00231
00232
00233
00234 Bool isCSmaster(const DisplayData *dd) const {
00235 return itsWorldCanvas->isCSmaster(dd);
00236 }
00237 void clearCSMasterSettings( WorldCanvas* wCanvas, bool clearZoom = true );
00238
00239
00240
00241
00242
00243
00244 Bool wasCSmaster(DisplayData* dd=0) const {
00245 return (dd==0)? itsLastCSmaster!=0 : itsLastCSmaster==dd;
00246 }
00247
00248
00249
00250
00251
00252 virtual Bool syncCSmaster(const WorldCanvasHolder* wch);
00253 bool setCSMaster( DisplayData* dd );
00254
00255 const std::list<DisplayData*> &displaylist( ) const {
00256 return itsDisplayList;
00257 }
00258
00263 Float getDrawUnit() const;
00264
00265 const static String BLINK_MODE;
00266
00267 std::string errorMessage( ) const { return error_string; }
00268
00269 private:
00270
00271 bool blinkMode;
00272
00273
00274 WorldCanvas *itsWorldCanvas;
00275
00276
00277
00278 std::list<DisplayData*> itsDisplayList;
00279 DisplayData* controllingDD;
00280
00281
00282
00283
00284
00285
00286
00287
00288 void* itsLastCSmaster;
00289 Float drawUnit;
00290
00291 String getTitleDDName(const Vector<Bool>& conforms) const;
00292 DisplayData* getTitleDDBlink( const Vector<Bool> & conforms ) const;
00293 DisplayData* getTitleDDNormal( const Vector<Bool> & conforms ) const;
00294 String getTitle( DisplayData* dd ) const;
00295 void labelAxes( const Vector<Bool>& conforms, const WCRefreshEvent &ev);
00296 void labelAxesBlink( const Vector<Bool>& conforms, const WCRefreshEvent & ev );
00297 void labelAxesNormal( const Vector<Bool>& conforms, const WCRefreshEvent & ev );
00298 void setControllingTitle( const Vector<Bool>& conforms );
00299 void clearSubstituteTitles( );
00300 Vector<Bool> getConformance() const;
00301 std::string error_string;
00302 };
00303
00304 }
00305
00306 #endif