casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DisplayData.h
Go to the documentation of this file.
1 //# DisplayData.h: base class for display objects
2 //# Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003
3 //# Associated Universities, Inc. Washington DC, USA.
4 //#
5 //# This library is free software; you can redistribute it and/or modify it
6 //# under the terms of the GNU Library General Public License as published by
7 //# the Free Software Foundation; either version 2 of the License, or (at your
8 //# option) any later version.
9 //#
10 //# This library is distributed in the hope that it will be useful, but WITHOUT
11 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13 //# License for more details.
14 //#
15 //# You should have received a copy of the GNU Library General Public License
16 //# along with this library; if not, write to the Free Software Foundation,
17 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18 //#
19 //# Correspondence concerning AIPS++ should be addressed as follows:
20 //# Internet email: aips2-request@nrao.edu.
21 //# Postal address: AIPS++ Project Office
22 //# National Radio Astronomy Observatory
23 //# 520 Edgemont Road
24 //# Charlottesville, VA 22903-2475 USA
25 //#
26 //# $Id$
27 
28 #ifndef TRIALDISPLAY_DISPLAYDATA_H
29 #define TRIALDISPLAY_DISPLAYDATA_H
30 
31 #include <casa/aips.h>
32 #include <casa/Arrays/Vector.h>
33 #include <casa/Arrays/Matrix.h>
34 #include <list>
41 
42 namespace casacore{
43 
44  class Unit;
45  class String;
46  class Record;
47  template <class T> class ImageInterface;
48 }
49 
50 namespace casa { //# NAMESPACE CASA - BEGIN
51 
52  class Attribute;
53  class AttributeBuffer;
54  class WorldCanvas;
55  class Colormap;
56  class WCPositionEH;
57  class WCMotionEH;
58  class WCRefreshEH;
59  class WCPositionEvent;
60  class WCMotionEvent;
61  class WCRefreshEvent;
62  class ImageAnalysis;
63 
64 // <summary>
65 // Base class for display objects.
66 // </summary>
67 //
68 // <use visibility=export>
69 //
70 // <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
71 // </reviewed>
72 //
73 // <prerequisite>
74 // <li> WorldCanvas
75 // <li> WorldCanvasHolder
76 // <li> Attribute
77 // <li> AttributBuffer
78 // </prerequisite>
79 //
80 // <etymology>
81 // A class having "DisplayData" as its base is used to generate
82 // "Display"s out of "Data."
83 // </etymology>
84 //
85 // <synopsis> The basic drawing devices in the Display Library are the
86 // PixelCanvas and the WorldCanvas. These devices know nothing about what real
87 // data look like, what kind of object will draw on these devices and in what
88 // kind of circumstances these devices will be used. The only thing they
89 // define is the interface of how to draw on them and the way they communicate
90 // with other objects (the event handlers). Building in no assumptions in the
91 // Canvases on how they will be used should give larger flexibility in how one
92 // can actually use these Canvases. Since the Canvases know nothing about how
93 // real data looks, a class is needed to transform data into objects the
94 // Canvases do understand. These are the DisplayData. A DisplayData generates,
95 // based on data and some algorithm to represent that data, a number of
96 // primitives that it draws on the WorldCanvas. So in a way, 'the data draw
97 // themselves'. The definition of how data is represented (image, contour,
98 // rendering, list of symbols from a catalogue, etc, etc) is entirely defined
99 // by these DisplayData and as long it can be done using the primitives of the
100 // WorldCanvas, there are no restrictions. If one finds a new way of
101 // representing data, the only thing one has to do is to write a new
102 // DisplayData that generates this representation and draws it on the
103 // WorldCanvas using the primitives of the WorldCnvas.
104 //
105 // To do the administration of a number of DisplayDatas on one WorldCanvas, a
106 // bookkeeping class is needed, this is the WorldCnvasHolder.
107 //
108 // Some DisplayData will consist of a sequence of display object (eg a set of
109 // channels in a data cube). The DisplayData are build with sequences in mind
110 // (as is clear from the interface), and the Display Library is designed very
111 // strongly with movies in mind. The programmer is free to define what a
112 // sequence really means, but it is probably best to keep the structure of the
113 // sequence in a DisplayData fairly logical. But there is not requirement on
114 // the structure of the sequence.
115 //
116 // Before a display object is displayed (ie when a refresh happens), a size
117 // control step is performed. The WorldCanvas call a sizeControl event
118 // handler. Normally this will be a handler that is installed by the
119 // WorldCanvasHolder. All the WorldCanvasHolder does is to call the
120 // sizeControl member function of all displayData registered with the
121 // WorldCanvasHolder to do the sizeControl. The purpose of the size control is
122 // to put the WorldCanvas in a correct state before the objects are actually
123 // drawn. For example, for images there can be restrictions on the size of the
124 // output array (eg the image is expanded using pixelreplication which means
125 // that the draw area of the WorldCanvas must by an integral of the size of
126 // the image). For each DisplayData the WorldCanvasHolder calls the sizeControl
127 // function, supplying an AttributeBuffer where the DisplayData should set the
128 // Attributes it needs to be set. THERE IS ONE IMPORTANT RULE IN THIS: a
129 // DisplayData should never overwrite an Attribute that is already set in this
130 // buffer. If the WorldCanvas cannot be put in a correct state during the size
131 // control, a DisplayData should turn itself off. DisplayData are also
132 // responsible for the linear coordinate system of the WorldCanvas and usually
133 // setting that up will be done in this step.
134 
135 
136 // (dk 6/04 note on 'size control'). The important WC state set during
137 // sizeControl() defines a series of coordinate transformations, ultimately
138 // between screen (PixelCanvas) pixels and coordinates in world space.
139 // First, there are the limits of the WC's 'draw area', inside the labelling
140 // margins, on the PC ('canvasDraw{X,Y}{Size,Offset}' WC Attributes).
141 // Second is the 'zoom window': the area of 'linear coordinate' space
142 // currently mapped to the draw area ('lin{X,Y}{Min,Max}' WC Attributes).
143 // Also stored in linear terms are the maximum extents of the data
144 // ('lin{X,Y}{Min,Max}Limit' Attributes), which are used to set the zoom
145 // window initially or when 'unzoom' (zoom-to-extent) is requested.
146 //
147 // 'Linear coordinates' often correspond to indices within the data
148 // being displayed, although in principle this is not necessary. They
149 // serve to isolate the simple linear scaling/translation (zoom and pan)
150 // transformations from the final transformation (often a nonlinear sky
151 // projection) between 'linear coordinates' and world space (which is
152 // changed less often).
153 //
154 // (Also, linear coordinates define an entire plane, although a given
155 // sky-coordinate projection to that plane may not be defined everywhere.
156 // Keeping zoom windows defined in linear coordinates allows natural
157 // display of all-sky images even when sky coordinates are not defined
158 // everywhere in the display area. In other words, the existing
159 // scheme allows all-sky images to be displayed easily _in principle_;
160 // it does not work currently due to inappropriate insistence of
161 // WC::drawImage() that its draw area be given in world coordinates;
162 // this is high on the list of bugfix priorities...).
163 //
164 // The final transformation makes use of the casacore::Coordinate classes (which
165 // ultimately use wcslib for any needed sky projection). It defines the
166 // current 2D surface on display within some nD world space, as parameterized
167 // by the X and Y linear coordinates. State for this purpose includes the
168 // 'WorldCanvas DisplayCoordinateSystem' or 'WCCS' (WorldCanvas::itsCoordinateSystem)
169 // plus 'axis codes' (which have the odd Attribute names
170 // '{x,y}axiscode (required match)'). They are intended to define the
171 // coordinate values and types for the world space currently of interest.
172 //
173 // This latter transformation is not as simple or well-defined as it might
174 // appear, however (and in my opinion this area still needs work). First of
175 // all, the WCCS is a rather late addition to WC interface, and in most cases
176 // is _not even used_ to do WC linear-to-world transformations. Instead, this
177 // chore is handed off (via the older WCCoordinateHandler interface) to one
178 // of the DDs currently registered on WC's companion object, WorldCanvasHolder.
179 // Also, the axis codes do not always provide enough information about the
180 // current world space for DDs to determine whether they are designed to
181 // draw in that space (which, in my opinion, should be the codes' purpose).
182 // They also implicitly assume a 1-to-1 correspondence between linear and
183 // world coordinates, which is not very general.
184 //
185 // Back to how it works now, though. During the 'sizeControl' step of
186 // refresh, the WCH will attempt to determine a 'CS master DD'. (Usually the
187 // same DD will remain 'in charge' as long as it is registered). Within
188 // the sizeControl routine, DDs should test isCSMaster(wch) to determine
189 // whether they have permission to become the CS master. If so, and if they
190 // are willing and able to become CS master, they must set all of the WC
191 // state above and return true; in all other cases they should return false.
192 // Only the CSmaster should set the WC CS or axis codes, and it will be
193 // responsible for performing the WC's linToWorld, etc. transformation chores.
194 // In other words, it is entirely in charge of the final transformation to
195 // world coordinates. In principle, other DDs may perform certain 'slave
196 // sizeControl' tweaks (such as aligning the zoom window on data pixel
197 // boundaries or redefining maximum zoom extents). No current implementations
198 // do anything but return false if they are not the master, however.
199 //
200 // Major implementation examples for sizeControl() can be found in the
201 // ActiveCaching2dDD and PrincipalAxesDD classes. They should be consulted
202 // as well for the conventions for processing WC 'zoom/unzoom' order
203 // attributes, another CSmaster responsibility. (<\dk>)
204 
205 
206 
207 // The control of what is displayed in a display application is done with
208 // setting restrictions on the WorldCanvasHolder (and possibly on the
209 // Displaydata). Restrictions are implemented as Attributes and stored in
210 // AttributeBuffers. To define what is displayed, one sets one or more
211 // restrictions on the WorldCanvasHolder and calls a refresh on the
212 // WorldCanvas. Most DisplayData will have pre-defined restrictions, for
213 // example in an ImageDisplayData each image has defined the restriction
214 // zIndex (set to the pixelindex of the 'third' axis in the data set) and
215 // zValue (set to the 'third' worldcoordinate of the image). So to display
216 // channel 13 of a data cube, one only has to set on the WorldCanvasHolder a
217 // restriction called zIndex with value 13 and call refresh:
218 //
219 // <srcblock>
220 // worldCanvasHolder.setRestriction("zIndex", 13);
221 // worldCanvas.refresh();
222 // </srcblock>
223 //
224 // Movies can be made using the Animator class. One way it to use indices, but
225 // there is a generic way of defining movies using restrictions. So a sequence
226 // does not have to correspond to a 'logical' or 'physical' sequence in some
227 // datastructure (channels in a cube for example), but can be made of images
228 // from different datasets (e.g. blinking) and display data in different
229 // forms. This system is very flexible and there are no real limits to what a
230 // movie really means.
231 //
232 // The DisplayData also define the coordinate system of the WorldCanvas. If
233 // the WorldCanvas has to do a coordinate transformation, it asks a coordinate
234 // handler to do this. When a WorldCanvasHolder is created for a WorldCanvas,
235 // the WorldCanvasHolder install a coordinate handler on the WorldCanvas. What
236 // this coordinate handlers does is to ask the DisplayData that is first in
237 // the list of the WorldcanvasHolder to do the transformation. This is quite
238 // an indirect way of doing the transformation, but it is very flexible (and
239 // the WorldCanvas does not have to know what an Aips++ coordinate system is,
240 // or what a DisplayData is, , which makes the WorldCanvas more generic). Most
241 // DisplayData will use the coordinate system of the data belonging to this
242 // DisplayData to do the transformation, but this is not a requirement. As
243 // long as you produce something that can be used as a coordinate system, it
244 // does not matter how you compute it. The most important thing is that the
245 // DisplayData are responsible for this. At the moment, only the Vector
246 // version should be implemented, since efficient transformation of a series
247 // of positions is not available in AIPS++. The casacore::Matrix versions are handled at
248 // the WorldCanvas level at the moment. Most DisplayData will assume that the
249 // linear coordinate system of the WorldCanvas corresponds to some underlying
250 // pixel array. The way the linear coordinate system is used is that it is the
251 // input for the coordinate transformation to world coordinates. The
252 // DisplayData are responsible for keeping the linear system correct.
253 
254 // Other event handlers that the DisplayData have to implement are the
255 // position- and the motion event handlers. (PositionEH and MotionEH). These
256 // are called by the WorldCanvasHolder in response to an event on the
257 // WorldCanvas. It is up to the DisplayData what to do with these events.
258 //
259 // One can also register position- and motion event handlers on a
260 // DisplayData. What kind of event a DisplayData generates in response to an
261 // event on the WorldCanvas (passed to the DisplayData by the
262 // WorldCanvasHolder by calling PositionEH/MotionEH) is entirely up to the
263 // DisplayData, as long as the handlers are derived from WCPositionEH or
264 // WCMotionEH. One can also install a refresh handler on a DisplayData,
265 // although I have not thought of any use for that (but allowed for it to keep
266 // symmetry with the other events).
267 //
268 // (1/02) DisplayEH interface has also been added for handling generic
269 // DisplayEvents through handleEvent(). It is expected that DDs will handle
270 // these events themselves, as needed, or pass them on in an ad-hoc manner.
271 // However, nothing prevents implementing a dispatching list for passing
272 // on these events too, if needed.
273 //
274 // (3/03) One can also register itself as a DisplayEventHandler on a
275 // DisplayData. The handleEvent function of DisplayEH is implemented
276 // to forward any DisplayEvents its receives to these
277 // handlers. Therefore, all DisplayDatas that overide the handleEvent
278 // function, should call the handleEvent function of its super class
279 // so this forwarding can take place.
280 //
281 // A DisplayData also has to implement a refreshEH. This function is called by
282 // the WorldCanvasHolder in response to a refresh request of the WorldCanvas.
283 // This is a very important function: here the actual drawing has
284 // to happen, using the draw primitives of the WorldCanvas. It is a good idea
285 // to check the state of the WorldCanvas before the draw is actually done, and
286 // decide not to draw if the state (for whatever reason) is not ok. Also be
287 // aware that it is a requirement that one DisplayData can work for more than
288 // one WorldCanvasHolders at a time, so the DisplayData has to do some
289 // administration for that (which WorldCanvasHolders am I working for and
290 // which one am I drawing on at the moment, things like that). See
291 // ImageDisplayData for an example of that.
292 //
293 // DisplayData also have Attributes. These can be used to store whatever
294 // information on a DisplayData. The Attributes give a standard interface to
295 // do this.
296 // </synopsis>
297 //
298 // <example>
299 // <srcBlock>
300 // </srcBlock>
301 // </example>
302 //
303 
304 // <motivation>
305 // An abstract interface between data and canvases was needed
306 //</motivation>
307 //
308 // <todo>
309 //
310 // <li> When efficient implementations of the casacore::Matrix versions of the
311 // coordinate transformations become available in AIPS++, these should be
312 // implemented in DisplayData
313 //
314 // </todo>
315 //
316 
317  class DisplayData : public DisplayOptions, public DisplayEH, public DlTarget {
318 
319  public:
320 
322 
323  // (Required) default constructor.
324  DisplayData();
325 
326  // required destructor
327  virtual ~DisplayData();
328 
329  // casacore::Coordinate transformations, called by WorldCanvasHolder (casacore::Matrix versions
330  // not implemented)
332  const casacore::Vector<casacore::Double>& lin) = 0;
334  const casacore::Vector<casacore::Double>& world) = 0;
335 
336  virtual std::string errorMessage( ) const = 0;
337 
338  // casacore::Format a string containing coordinate information at
339  // the given world coordinate
341  const casacore::Bool &displayAxesOnly = false) = 0;
342 
343  // casacore::Format a string containing value information at the
344  // given world coordinate
346 
347 
348  virtual void setDisplayState( DisplayState s ) {
349  displaystate = s;
350  }
351  virtual DisplayState getDisplayState( ) const {
352  return displaystate;
353  }
354 
355  virtual bool isDisplayable( ) const {
356  return true;
357  }
358 
359  // Some routines that give info on the axes names, units etc. I am not sure
360  // this is the right way of doing it.
361  // <group>
364  // </group>
365 
366  // Returns the number of elements in this DisplayData (mainly for movie
367  // purposes). First one is no. of elements for specific WCanvas.
368  virtual casacore::uInt nelements(const WorldCanvasHolder &wcHolder) const = 0;
369  // and non-specific
370  virtual casacore::uInt nelements() const = 0;
371 
372  // Add general restrictions or a restriction for item <src>itemNum</src> of
373  // this DisplayData. Note that the item versions of the restriction
374  // interface are not implemented. I am not sure the item versions belong in
375  // DisplayData and instead they should only appear in some derived classes.
376  // <group>
377  virtual void addRestrictions(AttributeBuffer& otherBuf);
378  virtual void addRestriction(Attribute& newRestriction, casacore::Bool permanent);
379  virtual void addElementRestrictions(const casacore::uInt itemNum,
380  AttributeBuffer& other);
381  virtual void addElementRestriction(const casacore::uInt itemNum,
382  Attribute& newRestriction,
383  casacore::Bool permanent);
384  // </group>
385 
386  // Set general restrictions or a restriction for item <src>itemNum</src> of
387  // this DisplayData. Note that the item versions of the restriction
388  // interface are not implemented.
389  // <group>
390  virtual void setRestrictions(AttributeBuffer& otherBuf);
391  virtual void setRestriction(Attribute& newRestriction);
392  virtual void setElementRestrictions(const casacore::uInt itemNum,
393  AttributeBuffer& other);
394  virtual void setElementRestriction(const casacore::uInt itemNum,
395  Attribute& newRestriction);
396  // </group>
397 
398  // Remove a general restriction or a restriction from item <src>itemNum</src>
399  // <group>
400  virtual void removeRestriction(const casacore::String& name);
401  virtual void removeElementRestriction(const casacore::uInt itemNum,
402  const casacore::String& name);
403  // </group>
404 
405  // Clear all general restrictions or all restrictions of item
406  // <src>itemNum</src> (except the ones that are permanent of course...)
407  // <group>
408  virtual void clearRestrictions();
409  virtual void clearElementRestrictions(const casacore::uInt itemNum);
410  // </group>
411 
412  // Check if a general restriction or a restriction for item
413  // <src>itemNum</src> with name <src>name</src> exists.
414  // <group>
417  const casacore::String& name);
418  // </group>
419 
420  // Get a handle to the buffer of general restrictions or of the buffer of
421  // restrictions for item <src>itemNum</src>
422  // <group>
425  // </group>
426 
427 
428  // Check whether the DD is is compatible with all WC[H]
429  // state, including its coordinate state, restrictions, and zIndex (if any).
430  // It also assures that the DD is 'focused' on this WC[H] and its zindex
431  // for purposes of drawing or event handling.
432  // <group>
433  virtual casacore::Bool conformsTo(const WorldCanvas *wCanvas) {
435  return (wCanvas!=0 && conformsTo(*wCanvas));
436  }
437 
438  virtual casacore::Bool conformsTo(const WorldCanvas& wc) {
439  conformsToRstrs(wc);
440  conformsToCS(wc);
441  conformsToZIndex(wc);
442  return conformed();
443  }
444  // </group>
445 
446  // Determine whether DD restrictions are in conformance with restrictions
447  // on the given WCH. (Note: this will include blink index, if any,
448  // but _not_ zIndex. zIndex is an individual DM restriction, not an
449  // overall DD restriction).
450  virtual casacore::Bool conformsToRstrs(const WorldCanvas& wc) ;
451 
452  // Determine whether DD is compatible with the WC[H]'s current
453  // world coordinates. Derived DDs can override according to their
454  // individual capabilities (PADD and ACDD match axis codes).
455  // Overriding DDs should set csConformed_ to the value returned.
456  virtual casacore::Bool conformsToCS(const WorldCanvas& /*wc*/) {
457  csConformed_ = true;
458  return csConformed_;
459  }
460 
461  // Determine whether DD is compatible with the current canvas
462  // animation (zIndex) position. (This usually means that it lies
463  // within the current number of DD animation frames).
464  // (Generally, DDs should probably override setActiveZIndex_()
465  // rather than this method).
467  casacore::Int zindex = 0; // (default in case no zIndex exists).
468  const AttributeBuffer *rstrs = wc.restrictionBuffer();
469  if (rstrs->exists("zIndex")) rstrs->getValue("zIndex",zindex);
470  return setActiveZIndex_(zindex);
471  }
472 
473  // Retrieve 'Active' zIndex. Not likely to be meaningful/useful
474  // unless conformsTo(wch) (or conformsToZIndex(wch)) has been called
475  // just prior (and has returned a true result). Those calls make
476  // wch the 'active' one; zIndex varies from one wch to another.
477  // You can pass a wch, which will force a call to conformsToZIndex(wch).
478  virtual casacore::Int activeZIndex(const WorldCanvas* wc=0) {
479  if(wc!=0) conformsToZIndex(*wc);
480  return activeZIndex_;
481  }
482 
483 
484 
485  // Set firstZIndex to minimum zIndex setting from all canvases where
486  // this DD is registered. (In the usual case where the DD is registered
487  // on one [multi]panel, this will return its animator 'frame #' setting).
488  // The routine will return false (and firstZIndex remain unchanged) if
489  // there are no registered canvases with zIndex below axZrng--the total
490  // number of frames on the Z axis. axZrng can be supplied; the default
491  // means 'use nelements()'.
492  // (Note: to get the zindex from the 'currently active' wch instead,
493  // a DD should check activeZIndex_. Or, if the desired wch is known,
494  // it can retrieve the zIndex itself from wch.restrictionBuffer()).
495  virtual casacore::Bool getFirstZIndex(int& firstZIndex, casacore::Int axZrng=-1) const {
497  if(zInds.nelements()==0) return false;
498  firstZIndex=zInds[0];
499  return true;
500  }
501 
502 
503 
504  // Add event handlers on the DisplayData. I am not sure there is also a need
505  // for a refresh handler on a DisplayData, but allowing for it makes
506  // things 'symmetric'. These member functions throw an casacore::AipsError if a null
507  // pointer is passed.
508  // <group>
509  virtual void addPositionEventHandler(WCPositionEH *positionHandler);
510  virtual void addMotionEventHandler(WCMotionEH *motionHandler);
511  virtual void addRefreshEventHandler(WCRefreshEH *refreshHandler);
512  virtual void addDisplayEventHandler(DisplayEH *displayHandler);
513  // </group>
514 
515  // Remove eventhandlers
516  // <group>
517  virtual void removePositionEventHandler(WCPositionEH& positionHandler);
518  virtual void removeMotionEventHandler(WCMotionEH& motionHandler);
519  virtual void removeRefreshEventHandler(WCRefreshEH& refreshHandler);
520  virtual void removeDisplayEventHandler(DisplayEH& displayHandler);
521  // </group>
522 
523  // Set/remove/get a ColourMap (sorry, ColorMap) for this DisplayData
524  // setColormap() throw an casacore::AipsError is a null pointer is passed. colormap()
525  // returns 0 if no Colormap is registered.
526  // <group>
527  virtual void setColormap(Colormap *cmap, casacore::Float weight);
528  virtual void removeColormap();
529  virtual Colormap *colormap() const {
530  return itsColormap;
531  }
532  // </group>
533 
534 
535  // set an Attribute or Attributes
536  // <group>
537  void setAttribute(Attribute& at);
538  void setAttributes(AttributeBuffer& at);
539  // </group>
540 
541  // User interface to get value from the attribute buffer
542  // <group>
543 
556  // </group>
557 
558  // Check if a certain Attribute exists
560 
561  // Remove an Attribute
563 
564  // Get the type of the Attribute
566 
567  // Set an attribute on any WorldCanvas for which this DD is CS master
569 
570  // <group>
571  virtual void notifyRegister(WorldCanvasHolder *wcHolder) ;
572  // <src>ignoreRefresh</src> tells the DD not to refresh just to clean
573  // up DMs
574  virtual void notifyUnregister(WorldCanvasHolder& wcHolder,
575  casacore::Bool ignoreRefresh = false) ;
576  // </group>
577 
578  // remove this DD everywhere--will stop any more refresh handling by
579  // the DD. It is a good idea for top-level DDs to call this first
580  // in their destructor.
581  virtual void removeFromAllWCHs();
582 
583  // install the default options for this DisplayData
584  virtual void setDefaultOptions();
585 
586  // apply options stored in val to the DisplayData; return value
587  // true means a refresh is needed...
589 
590  // retrieve the current and default options and parameter types.
591  virtual casacore::Record getOptions( bool scrub=false ) const;
592 
593  // an explicit refresh: should be called if the DisplayData is
594  // changed such that drawing is required. If clean is true,
595  // the DD is totally rebuilt, in practice. This is provided
596  // for higher level control, even explicit control of refresh
597  // where necessary.
598  // ..."refresh(true)"... does not seem to work <drs:Mar 21 2013>
599  virtual void refresh(casacore::Bool clean = false);
600 
601  // an explicit request to draw the axes and/or labels. Returns
602  // true if axes were drawn, otherwise false;
603  virtual casacore::Bool labelAxes(const WCRefreshEvent &ev);
604  virtual casacore::Bool canLabelAxes() const{
605  return false;
606  }
607 
608  // Return the class name of this DisplayData; useful mostly for
609  // debugging purposes, and perhaps future use in the glish widget
610  // interface.
611  virtual casacore::String className() const {
612  return casacore::String("DisplayData");
613  }
614  virtual casacore::String description( ) const {
615  return "not available";
616  }
617 
618  // Return the DisplayData type; used by the WorldCanvasHolder to
619  // determine the order of drawing.
620  virtual Display::DisplayDataType classType() = 0;
621 
622  virtual casacore::String dataType( ) const = 0;
623  virtual const casacore::IPosition dataShape( ) const = 0;
624  virtual casacore::uInt dataDim( ) const = 0;
625  virtual const casacore::Unit dataUnit( ) const = 0;
626  virtual std::vector<int> displayAxes( ) const = 0;
627 
628  // Get image analyis about images... for non-image
629  // "DisplayData" this function will return null...
630  // Use dataType() to check...
631  // Creates a new object (or a null pointer) which may need to be deleted...
632  virtual ImageAnalysis *imageanalysis( ) const {
633  return 0;
634  }
635  // Returns a pointer that should *not* be deleted...
636  virtual std::shared_ptr<casacore::ImageInterface<casacore::Float> > imageinterface( ) {
637  return std::shared_ptr<casacore::ImageInterface<casacore::Float> >();
638  }
639 
640  virtual void setSubstituteTitleText( const casacore::String /*title*/ ){
641 
642  }
643 
644  // Identify the WorldCanvasHolder for the given WorldCanvas. Return
645  // <src>0</src> if the DisplayData does not know of a
646  // WorldCanvasHolder for the WorldCanvas.
647  const WorldCanvasHolder *findHolder(const WorldCanvas *wCanvas) const;
648  WorldCanvasHolder *findHolder(const WorldCanvas *wCanvas);
649 
650  // Return a sorted casacore::Block of all animation frame numbers currently set
651  // onto all WCHs where this DD is registered.
652  // The frame numbers returned are guaranteed to be in the range
653  // 0 <= zIndex < axZrng, where axZrng is the total number of frames
654  // on the Z axis. axZrng can be supplied; the default is nelements().
656 
657  // Will be called just before registering the [GTk]DD on a [GTk]PanelDisplay
658  // which has none registered on it yet. The DD can set the initial
659  // animator position in this case by overriding this method to set
660  // preferredZIndex and return true.
661  virtual casacore::Bool zIndexHint(casacore::Int& /*preferredZIndex*/) const {
662  return false;
663  }
664 
665  // Overide DisplayEH::handleEvent. This base class on forwards the
666  // event on to listeners
667  virtual void handleEvent(DisplayEvent &ev);
668 
669  // Is this DD the CS master of the passed WCH?
670  // Defaulting wch to 0 asks whether this DD is CS master of _some_ WCH
671  // on which it is registered. (That option is mostly a kludge, since the
672  // DD may be CS master of some WCHs and not others).
673  virtual casacore::Bool isCSmaster(const WorldCanvasHolder* wch=0) const;
674 
675  // DD 'Absolute Pixel Coordinates', e.g. channel numbers, are internally
676  // 0-based (they begin numbering at 0), but certain external user-interface
677  // functions (e.g. showPosition(), used for position tracking) have
678  // produced 1-based output traditionally for the glish-based viewer.
679  // uiBase_, and related methods uiBase() and setUIBase(), allow newer
680  // (python/Qt-based) code to cause external ui functions like showValue()
681  // to report 0-based values instead. Unless setUIBase(0) is called, the
682  // traditional 1-based reporting behavior is retained by default.
683  //
684  // If you are using 0-basing in the user interface, you should call
685  // setUIBase(0) right after constructing this DD, before other
686  // user interface operations such as getOptions().
687  // <group>
688  virtual casacore::Int uiBase() const {
689  return uiBase_;
690  }
691 
692  virtual void setUIBase(casacore::Int uibase) {
693  if(uibase==0 || uibase==1) uiBase_ = uibase;
694  }
695  // </group>
696 
697  // Get and set method for the flag
698  // <group>
700  return delTmpData_;
701  }
704  }
705  // </group>
706 
707  virtual void setDisplayDataRed( DisplayData* /*dd*/ ){}
708  virtual void setDisplayDataBlue( DisplayData* /*dd*/ ){}
709  virtual void setDisplayDataGreen( DisplayData* /*dd*/ ){}
710 
713 
714  protected:
715 
716  // DDs may override to adjust the internal stored current animation
717  // index (activeZIndex_) if necessary, and to set return value false
718  // iff the passed zindex won't work for the DD. zIndexConformed_
719  // should be set to the value returned; activeZIndex_ should also
720  // be set appropriately.
722  activeZIndex_ = zindex;
723  zIndexConformed_ = true;
724  return zIndexConformed_;
725  }
726 
727 
728  // The Book says that we should not put data members in class that is
729  // supposed to only define an interface, but by putting these here, we can
730  // implement some of the restriction & eventhandling stuff so that people do
731  // not have to repeat it.
732 
733  // buffer for storing restrictions
735 
736  // buffer for storing Attributes
738 
739  // list of DisplayDataElements, which are of type DisplayMethod or derived
741 
742  // Protected interface for WorldCanvasHolder, can be called by the friends
743  // of DisplayData, but are nobody else's business. I decided to do this in
744  // this way to avoid that the programmer has to both register the
745  // DisplayData with the WorldCanvasHolder AND the WorldCanvasHolder with the
746  // DisplayData. Now one of the two is done automatically.
747  // The WorldCanvasHolder is my friend. This is to hide the eventhandler
748  // interfaces listed below from the outside world. The WorldCanvasHolder is
749  // the only class that needs them
750  friend class WorldCanvasHolder;
751 
752  // Indicates the 'current' animation frame, i.e. the zIndex on the canvas
753  // for which confromsTo(wch) was last called. Intended to be set only
754  // by setActiveZIndex_() in this class or derived classes.
756 
757  // Flag indicating that temporary data should be removed when deleting
758  // the object.
760 
761  // Somewhat limited-use state, saved here for 'efficiency'. Indicates
762  // that the last call to conformsToRstrs(), conformsToCS(), or
763  // conformsToZIndex(), passed the respective compatibility tests.
764  // (See conformed(), below). Intended to be set only in the methods
765  // conformsToRstrs(), conformsToCS() and setActiveZIndex_(), respectively.
767 
768  // Returns result of last call to conformsTo(WCH&). Methods like showValue()
769  // which don't have access to the wch can use it instead, but that
770  // shifts the burden elsewhere of being sure that conformsTo() was called
771  // for the current WCH. When possible, it is generally better and safer
772  // to call conformsTo(wch) directly when needed, rather than querying this.
775  }
776  //Added so that when two images are loaded with no velocity
777  //alignment, they can still show their position coordinates without
778  //having to be rstrsConformed.
780  return csConformed_ && zIndexConformed_;
781  }
782  // Set (coordinate) state of WCH's WC. Called by WCH::executeSizeControl().
783  // (See important notes on interface and implementation of this function
784  // in the class synopsis above).
785  virtual casacore::Bool sizeControl(WorldCanvasHolder& wcHolder,
786  AttributeBuffer& holderBuf) = 0;
787 
788  // Delete temporary data. To be called by sub-classe
789  // that now the filenames.
790  virtual void delTmpData(casacore::String &tmpData);
791 
792 
793  // Retrieve position, motion, refresh and display event handler lists.
794  // <group>
795  virtual const std::list<WCPositionEH*> *positionEventHandlerList() {
796  return &itsPositionEHList;
797  }
798  virtual const std::list<WCMotionEH*> *motionEventHandlerList() {
799  return &itsMotionEHList;
800  }
801  virtual const std::list<WCRefreshEH*> *refreshEventHandlerList() {
802  return &itsRefreshEHList;
803  }
804  virtual const std::list<DisplayEH*> *displayEventHandlerList() {
805  return &itsDisplayEHList;
806  }
807  // </group>
808 
809  // Position, motion and refresh event handlers that will generally
810  // be called by a WorldCanvasHolder.
811  // <group>
812  virtual void positionEH(const WCPositionEvent &ev);
813  virtual void motionEH(const WCMotionEvent &ev);
814  virtual void refreshEH(const WCRefreshEvent& ev) = 0;
815  // </group>
816 
817  // clean up the memory used by this DisplayData
818  virtual void cleanup() = 0;
819 
820  // (Required) copy constructor.
821  DisplayData(const DisplayData &other);
822 
823  // (Required) copy assignment.
824  void operator=(const DisplayData &other);
825 
826 
827  private:
828 
830 
831  // is this data currently being displayed?
833 
834  // Colormap for this DisplayData, and its weight.
837 
838  // A list of WorldCanvasHolders for which this DisplayData works.
839  // The list is maintained by the DisplayData itself based on the
840  // notify routines used by the WorldCanvasHolder. This can be used,
841  // for example, to find which WorldCanvas belongs to which
842  // WorldCanvasHolder.
843  std::list<WorldCanvasHolder*> itsWCHList;
844 
845  // Lists of position, motion, refresh and display event handlers.
846  std::list<WCPositionEH*> itsPositionEHList;
847  std::list<WCMotionEH*> itsMotionEHList;
848  std::list<WCRefreshEH*> itsRefreshEHList;
849  std::list<DisplayEH*> itsDisplayEHList;
850 
851  // DD 'Absolute Pixel Coordinates', e.g. channel numbers, are internally
852  // 0-based (begin numbering at 0), but certain external user-interface
853  // functions (e.g. showPosition(), used for position tracking) have
854  // produced 1-based output traditionally for the glish-based viewer.
855  // uiBase_, and related methods uiBase() and setUIBase(), allow newer
856  // (python/Qt-based) code to cause external ui functions like showValue()
857  // report 0-based values instead. Unless setUIBase(0) is called, the
858  // traditional 1-based reporting behavior is retained by default.
859 
860  casacore::Int uiBase_; // (initialized to 1).
861  };
862 
863 
864 } //# NAMESPACE CASA - END
865 
866 #endif
A Vector of integers, for indexing into Array&lt;T&gt; objects.
Definition: IPosition.h:119
virtual void setSubstituteTitleText(const casacore::String)
Definition: DisplayData.h:640
int Int
Definition: aipstype.h:50
std::list< DisplayEH * > itsDisplayEHList
Definition: DisplayData.h:849
Class to provide option parsing routines for display classes.
Class which stores WorldCanvas refresh event information.
virtual void addRefreshEventHandler(WCRefreshEH *refreshHandler)
AttributeBuffer attributes
buffer for storing Attributes
Definition: DisplayData.h:737
virtual void removeFromAllWCHs()
remove this DD everywhere–will stop any more refresh handling by the DD.
virtual std::vector< int > displayAxes() const =0
casacore::Bool exists(const casacore::String &name) const
Check if an Attribute with name name exists.
virtual casacore::String showValue(const casacore::Vector< casacore::Double > &world)=0
casacore::Format a string containing value information at the given world coordinate ...
virtual void setDisplayDataRed(DisplayData *)
Definition: DisplayData.h:707
virtual casacore::Bool isCSmaster(const WorldCanvasHolder *wch=0) const
Is this DD the CS master of the passed WCH? Defaulting wch to 0 asks whether this DD is CS master of ...
virtual void setRestrictions(AttributeBuffer &otherBuf)
Set general restrictions or a restriction for item itemNum of this DisplayData.
virtual casacore::Bool existElementRestriction(const casacore::uInt itemNum, const casacore::String &name)
virtual void addRestrictions(AttributeBuffer &otherBuf)
Add general restrictions or a restriction for item itemNum of this DisplayData.
casacore::Bool rstrsConformed_
Somewhat limited-use state, saved here for &#39;efficiency&#39;.
Definition: DisplayData.h:766
virtual DisplayState getDisplayState() const
Definition: DisplayData.h:351
virtual ~DisplayData()
required destructor
virtual casacore::String className() const
Return the class name of this DisplayData; useful mostly for debugging purposes, and perhaps future u...
Definition: DisplayData.h:611
Colormap * itsColormap
Colormap for this DisplayData, and its weight.
Definition: DisplayData.h:835
DisplayDataType
WorldCanvasHolder - what type of DisplayData is this, need to know for drawing order.
Definition: DisplayEnums.h:355
Buffer for storing Attributes.
Base class for handling WorldCanvas motion events.
Definition: WCMotionEH.h:70
virtual void setDelTmpData(casacore::Bool delTmpData)
Definition: DisplayData.h:702
std::list< WorldCanvasHolder * > itsWCHList
A list of WorldCanvasHolders for which this DisplayData works.
Definition: DisplayData.h:843
virtual void setElementRestriction(const casacore::uInt itemNum, Attribute &newRestriction)
virtual void motionEH(const WCMotionEvent &ev)
virtual casacore::String showPosition(const casacore::Vector< casacore::Double > &world, const casacore::Bool &displayAxesOnly=false)=0
casacore::Format a string containing coordinate information at the given world coordinate ...
static const casacore::String DATA_MAX
Definition: DisplayData.h:712
size_t nelements() const
The number of elements contained in this Block&lt;T&gt;.
Definition: Block.h:611
DisplayData()
(Required) default constructor.
virtual void handleEvent(DisplayEvent &ev)
Overide DisplayEH::handleEvent.
virtual casacore::Bool getFirstZIndex(int &firstZIndex, casacore::Int axZrng=-1) const
Set firstZIndex to minimum zIndex setting from all canvases where this DD is registered.
Definition: DisplayData.h:495
virtual void setUIBase(casacore::Int uibase)
Definition: DisplayData.h:692
WorldCanvasHolder * oldWCHolder
Definition: DisplayData.h:829
virtual bool isDisplayable() const
Definition: DisplayData.h:355
casacore::Float itsColormapWeight
Definition: DisplayData.h:836
virtual casacore::String dataType() const =0
virtual void addPositionEventHandler(WCPositionEH *positionHandler)
Add event handlers on the DisplayData.
virtual const std::list< WCMotionEH * > * motionEventHandlerList()
Definition: DisplayData.h:798
virtual void addElementRestrictions(const casacore::uInt itemNum, AttributeBuffer &other)
virtual void addRestriction(Attribute &newRestriction, casacore::Bool permanent)
DisplayState displaystate
is this data currently being displayed?
Definition: DisplayData.h:832
ABSTRACT CLASSES Abstract class for colors Any implementation of color should be able to provide a hexadecimal form of the if a human readable name(i.e."black").In many places throughout the plotter
void removeAttribute(casacore::String &name)
Remove an Attribute.
virtual Colormap * colormap() const
Definition: DisplayData.h:529
class for handling any type of DisplayEvent.
Definition: DisplayEH.h:100
virtual AttributeBuffer * elementRestrictionBuffer(const casacore::uInt itemNum)
Arbitrary name-value pairs used in the display classes.
Definition: Attribute.h:144
virtual const std::list< WCPositionEH * > * positionEventHandlerList()
Retrieve position, motion, refresh and display event handler lists.
Definition: DisplayData.h:795
void setAttributes(AttributeBuffer &at)
virtual casacore::Bool canLabelAxes() const
Definition: DisplayData.h:604
virtual casacore::Bool setOptions(casacore::Record &rec, casacore::Record &recOut)
apply options stored in val to the DisplayData; return value true means a refresh is needed...
ValueType
The possible value types.
Definition: AttValBase.h:82
virtual casacore::String description() const
Definition: DisplayData.h:614
const WorldCanvasHolder * findHolder(const WorldCanvas *wCanvas) const
Identify the WorldCanvasHolder for the given WorldCanvas.
Base class for handling WorldCanvas refresh events.
Definition: WCRefreshEH.h:95
defines physical units
Definition: Unit.h:189
virtual void notifyRegister(WorldCanvasHolder *wcHolder)
casacore::PtrBlock< void * > DDelement
list of DisplayDataElements, which are of type DisplayMethod or derived
Definition: DisplayData.h:740
void setAttributeOnPrimaryWCHs(Attribute &at)
Set an attribute on any WorldCanvas for which this DD is CS master.
virtual void refresh(casacore::Bool clean=false)
an explicit refresh: should be called if the DisplayData is changed such that drawing is required...
virtual casacore::Bool linToWorld(casacore::Vector< casacore::Double > &world, const casacore::Vector< casacore::Double > &lin)=0
casacore::Coordinate transformations, called by WorldCanvasHolder (casacore::Matrix versions not impl...
Class which stores WorldCanvas motion event information.
Definition: WCMotionEvent.h:79
virtual const std::list< DisplayEH * > * displayEventHandlerList()
Definition: DisplayData.h:804
virtual void removePositionEventHandler(WCPositionEH &positionHandler)
Remove eventhandlers.
virtual std::shared_ptr< casacore::ImageInterface< casacore::Float > > imageinterface()
Returns a pointer that should not be deleted...
Definition: DisplayData.h:636
virtual void setRestriction(Attribute &newRestriction)
virtual void clearRestrictions()
Clear all general restrictions or all restrictions of item itemNum (except the ones that are permanen...
AttributeBuffer restrictions
The Book says that we should not put data members in class that is supposed to only define an interfa...
Definition: DisplayData.h:734
double Double
Definition: aipstype.h:55
virtual casacore::uInt nelements() const =0
and non-specific
virtual const casacore::Unit dataUnit() const =0
Class describing the most basic event information in the display classes.
Definition: DisplayEvent.h:82
casacore::Bool existsAttribute(casacore::String &name)
Check if a certain Attribute exists.
virtual void setDefaultOptions()
install the default options for this DisplayData
virtual casacore::Bool labelAxes(const WCRefreshEvent &ev)
an explicit request to draw the axes and/or labels.
casacore::Bool isCsAndZIndexConformed()
Added so that when two images are loaded with no velocity alignment, they can still show their positi...
Definition: DisplayData.h:779
virtual AttributeBuffer * restrictionBuffer()
Get a handle to the buffer of general restrictions or of the buffer of restrictions for item itemNum ...
virtual void addElementRestriction(const casacore::uInt itemNum, Attribute &newRestriction, casacore::Bool permanent)
virtual casacore::Block< casacore::Int > allZIndices(casacore::Int axZrng=-1) const
Return a sorted casacore::Block of all animation frame numbers currently set onto all WCHs where this...
virtual casacore::Vector< casacore::String > worldAxisUnits() const =0
A hierarchical collection of named fields of various types.
Definition: Record.h:180
virtual void setElementRestrictions(const casacore::uInt itemNum, AttributeBuffer &other)
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
virtual void refreshEH(const WCRefreshEvent &ev)=0
std::list< WCPositionEH * > itsPositionEHList
Lists of position, motion, refresh and display event handlers.
Definition: DisplayData.h:846
float Float
Definition: aipstype.h:54
virtual casacore::Int uiBase() const
DD &#39;Absolute Pixel Coordinates&#39;, e.g.
Definition: DisplayData.h:688
virtual void removeRestriction(const casacore::String &name)
Remove a general restriction or a restriction from item itemNum
virtual casacore::Bool conformsToCS(const WorldCanvas &)
Determine whether DD is compatible with the WC[H]&#39;s current world coordinates.
Definition: DisplayData.h:456
casacore::Int uiBase_
DD &#39;Absolute Pixel Coordinates&#39;, e.g.
Definition: DisplayData.h:860
virtual std::string errorMessage() const =0
virtual void setColormap(Colormap *cmap, casacore::Float weight)
Set/remove/get a ColourMap (sorry, ColorMap) for this DisplayData setColormap() throw an casacore::Ai...
virtual casacore::uInt dataDim() const =0
virtual const casacore::IPosition dataShape() const =0
casacore::Bool zIndexConformed_
Definition: DisplayData.h:766
virtual void removeRefreshEventHandler(WCRefreshEH &refreshHandler)
virtual casacore::Bool sizeControl(WorldCanvasHolder &wcHolder, AttributeBuffer &holderBuf)=0
Set (coordinate) state of WCH&#39;s WC.
virtual void clearElementRestrictions(const casacore::uInt itemNum)
Class which stores WorldCanvas position event information.
virtual void notifyUnregister(WorldCanvasHolder &wcHolder, casacore::Bool ignoreRefresh=false)
ignoreRefresh tells the DD not to refresh just to clean up DMs
virtual casacore::Bool getDelTmpData()
Get and set method for the flag.
Definition: DisplayData.h:699
Describes a method of generating a table of colors.
Definition: Colormap.h:104
virtual void removeColormap()
void operator=(const DisplayData &other)
(Required) copy assignment.
casacore::Bool delTmpData_
Flag indicating that temporary data should be removed when deleting the object.
Definition: DisplayData.h:759
A holder to interface between DisplayDatas and a WorldCanvas.
Implementation of drawing in world coordinates on top of a PixelCanvas.
Definition: WorldCanvas.h:204
virtual void setDisplayDataGreen(DisplayData *)
Definition: DisplayData.h:709
virtual void cleanup()=0
clean up the memory used by this DisplayData
std::list< WCRefreshEH * > itsRefreshEHList
Definition: DisplayData.h:848
virtual Display::DisplayDataType classType()=0
Return the DisplayData type; used by the WorldCanvasHolder to determine the order of drawing...
virtual casacore::Bool conformsToZIndex(const WorldCanvas &wc)
Determine whether DD is compatible with the current canvas animation (zIndex) position.
Definition: DisplayData.h:466
virtual void addDisplayEventHandler(DisplayEH *displayHandler)
virtual void removeElementRestriction(const casacore::uInt itemNum, const casacore::String &name)
String: the storage and methods of handling collections of characters.
Definition: String.h:223
virtual casacore::Bool zIndexHint(casacore::Int &) const
Will be called just before registering the [GTk]DD on a [GTk]PanelDisplay which has none registered o...
Definition: DisplayData.h:661
casacore::Int activeZIndex_
Indicates the &#39;current&#39; animation frame, i.e.
Definition: DisplayData.h:755
virtual casacore::Bool conformsToRstrs(const WorldCanvas &wc)
Determine whether DD restrictions are in conformance with restrictions on the given WCH...
Base class for handling WorldCanvas position events.
Definition: WCPositionEH.h:75
void setAttribute(Attribute &at)
set an Attribute or Attributes
virtual casacore::Record getOptions(bool scrub=false) const
retrieve the current and default options and parameter types.
Base class for display objects.
Definition: DisplayData.h:317
static const casacore::String DATA_MIN
Definition: DisplayData.h:711
virtual const std::list< WCRefreshEH * > * refreshEventHandlerList()
Definition: DisplayData.h:801
virtual casacore::Bool worldToLin(casacore::Vector< casacore::Double > &lin, const casacore::Vector< casacore::Double > &world)=0
casacore::Bool getAttributeValue(const casacore::String &name, casacore::uInt &newValue)
User interface to get value from the attribute buffer.
virtual casacore::Int activeZIndex(const WorldCanvas *wc=0)
Retrieve &#39;Active&#39; zIndex.
Definition: DisplayData.h:478
virtual casacore::Bool setActiveZIndex_(casacore::Int zindex)
DDs may override to adjust the internal stored current animation index (activeZIndex_) if necessary...
Definition: DisplayData.h:721
std::list< WCMotionEH * > itsMotionEHList
Definition: DisplayData.h:847
virtual casacore::Bool conformsTo(const WorldCanvas *wCanvas)
Check whether the DD is is compatible with all WC[H] state, including its coordinate state...
Definition: DisplayData.h:433
virtual void removeMotionEventHandler(WCMotionEH &motionHandler)
virtual casacore::Bool existRestriction(const casacore::String &name)
Check if a general restriction or a restriction for item itemNum with name name exists.
virtual casacore::Vector< casacore::String > worldAxisNames() const =0
Some routines that give info on the axes names, units etc.
virtual void delTmpData(casacore::String &tmpData)
Delete temporary data.
virtual void positionEH(const WCPositionEvent &ev)
Position, motion and refresh event handlers that will generally be called by a WorldCanvasHolder.
casacore::Bool conformed()
Returns result of last call to conformsTo(WCH&amp;).
Definition: DisplayData.h:773
const AttributeBuffer * restrictionBuffer() const
Return the buffer of restrictions installed on this WorldCanvas.
casacore::Bool csConformed_
Definition: DisplayData.h:766
unsigned int uInt
Definition: aipstype.h:51
virtual void removeDisplayEventHandler(DisplayEH &displayHandler)
virtual void setDisplayDataBlue(DisplayData *)
Definition: DisplayData.h:708
virtual casacore::Bool conformsTo(const WorldCanvas &wc)
Definition: DisplayData.h:438
virtual void addMotionEventHandler(WCMotionEH *motionHandler)
casacore::Bool getValue(const casacore::String &name, casacore::Vector< T > &value) const
Get tha value of the named Attribute.
virtual void setDisplayState(DisplayState s)
Definition: DisplayData.h:348
virtual ImageAnalysis * imageanalysis() const
Get image analyis about images...
Definition: DisplayData.h:632
AttValue::ValueType attributeType(casacore::String &name)
Get the type of the Attribute.
#define casacore
&lt;X11/Intrinsic.h&gt; #defines true, false, casacore::Bool, and String.
Definition: X11Intrinsic.h:42