casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes
casa::MultiPVTool Class Reference

Base class for MultiWorldCanvas event-based rectangle tools. More...

#include <MultiPVTool.h>

Inheritance diagram for casa::MultiPVTool:
casa::RegionTool casa::DTVisible casa::viewer::RegionCreator casa::MultiWCTool casa::DisplayTool casa::WCPositionEH casa::WCMotionEH casa::WCRefreshEH casa::DisplayEH casa::MultiPVToolImpl casa::QtPVToolRegion casa::QtPVTool

List of all members.

Public Member Functions

 MultiPVTool (viewer::RegionSourceFactory *rsf, PanelDisplay *pd, Display::KeySym keysym=Display::K_Pointer_Button1, const Bool persistent=False)
 Constructor.
virtual ~MultiPVTool ()
 Destructor.
virtual void disable ()
 Switch the tool off - this erases the rectangle, if any, and calls the base class disable.
virtual void reset (Bool skipRefresh=False)
 reset to non-existent, non-active rectangle.
virtual Bool rectangleDefined ()
 Is a rectangle currently defined?
viewer::RegionSourcegetRegionSource ()
void checkPoint (WorldCanvas *wc, State &state)
 this is a non-const function because a non-const RegionTool ptr is returned in 'state' which can then be used for setting the state of the regions managed by the various tools....
void revokeRegion (viewer::Region *)
 called when the user (read GUI user) indicates that a region should be deleted...
const std::set
< viewer::region::RegionTypes > & 
regionsCreated () const
 returns a set which indicates regions this creator creates...
bool create (viewer::region::RegionTypes, WorldCanvas *, const std::vector< std::pair< double, double > > &, const std::string &, viewer::region::TextPosition, const std::vector< int > &, const std::string &, int, int, const std::string &, const std::string &, viewer::region::LineStyle, unsigned int, bool, VOID *)
 create regions of various types (e.g.
RegionToolTypes type () const

Protected Member Functions

virtual void keyPressed (const WCPositionEvent &ev)
 Functions called by the base class event handling operators--and normally only those.
virtual void keyReleased (const WCPositionEvent &ev)
virtual void otherKeyPressed (const WCPositionEvent &ev)
virtual void moved (const WCMotionEvent &ev, const viewer::region::region_list_type &)
virtual void draw (const WCRefreshEvent &, const viewer::region::region_list_type &)
 draw the rectangle (if any) on the object's currently active WC.
virtual void doubleInside ()
 Output callback functions--to be overridden in derived class.
virtual void doubleOutside ()
virtual void rectangleReady ()
 Called when a rectangle is ready and not being edited.
virtual void get (Int &x1, Int &y1, Int &x2, Int &y2) const
 Retrieve the rectangle coordinates, in screen pixels.
virtual bool checkType (viewer::region::RegionTypes t)
virtual std::tr1::shared_ptr
< viewer::PVLine
allocate_region (WorldCanvas *wc, double x1, double y1, double x2, double y2, VOID *region_specific_state) const

Protected Attributes

viewer::RegionSourcerfactory

Private Types

typedef std::list
< std::tr1::shared_ptr
< viewer::PVLine > > 
pvlinelist

Private Member Functions

void update_stats (const WCMotionEvent &ev)
void start_new_rectangle (WorldCanvas *, int x, int y)
virtual void set (const Int &x1, const Int &y1, const Int &x2, const Int &y2)
 set the pixel coordinates of the rectangle
virtual void get (Int &x1, Int &y1) const
 get only the anchor point

Private Attributes

Bool itsPVLineExists
 do we have a rectangle yet? (if True, itsCurrentWC, itsEmitted, P1, and P2 are valid)
Bool itsActive
 was the button pressed in the rectangle (or, if none, in an active WC) and not yet released/reset?
std::tr1::shared_ptr
< viewer::PVLine
resizing_region
 itsActive is being replaced by resizing_region
std::tr1::shared_ptr
< viewer::PVLine
creating_region
int resizing_region_handle
Bool itsMoving
 (valid only if itsActive==True): True = being moved False = being resized
pvlinelist moving_regions
 itsMoving is being replaced by moving_regions
double moving_linx_
double moving_liny_
Bool itsEmitted
 (valid only if itsPVLineExists==True) Has doubleInside/Outside been called for this rectangle? If so, a key press outside the rectangle will start a new rectangle, as if itsPVLineExists were False.
Vector< DoubleitsP1
 (Linear) coordinates of the rectangle (invariant over zooms, but not coordinate system changes.
Vector< DoubleitsP2
Vector< IntitsHX
 storage of the handle (pixel) coordinates
Vector< IntitsHY
Int itsBaseMoveX
 position that move started from
Int itsBaseMoveY
Double itsLastPressTime
 store the times of the last two presses here:
Double its2ndLastPressTime
pvlinelist rectangles
PanelDisplaypd_

Detailed Description

Base class for MultiWorldCanvas event-based rectangle tools.

Intended use:

Public interface

Review Status

Date Reviewed:
yyyy/mm/dd

<prerequisites> WCTool </prerequisites>

Etymology

MultiPVTool stands for MultiWorldCanvas PVLine Tool

Synopsis

This class adds to its base WCTool to provide a tool for drawing, resizing and moving rectangles on a WorldCanvas. While MultiPVTool is not abstract, it performs no useful function. The programmer should derive from this class, and implement the functions doubleInside and doubleOutside, which are called when the user double-clicks the key or mouse button inside or outside an existing rectangle respectively. It is up to the programmer to decide what double clicks inside and outside the rectangle correspond to, although it is recommended that a double click inside correspond to the main action of the tool, and a double click outside correspond to a secondary action of the tool, if indeed a secondary action exists.

The rectangle is drawn by dragging the mouse from one corner to the diagonally opposite corner. Once constructed, the rectangle can be resized by dragging its corners, or relocated by dragging inside the rectangle. The rectangle is removed from the display when the Esc key is pressed.

Example

Motivation

Many activities on the WorldCanvas will be based on the user drawing a rectangle, and then proceeding to some action with that rectangle. A nice example is zooming.

Definition at line 92 of file MultiPVTool.h.


Member Typedef Documentation

typedef std::list<std::tr1::shared_ptr<viewer::PVLine> > casa::MultiPVTool::pvlinelist [private]

Definition at line 177 of file MultiPVTool.h.


Constructor & Destructor Documentation

Constructor.

virtual casa::MultiPVTool::~MultiPVTool ( ) [virtual]

Destructor.


Member Function Documentation

virtual std::tr1::shared_ptr<viewer::PVLine> casa::MultiPVTool::allocate_region ( WorldCanvas wc,
double  x1,
double  y1,
double  x2,
double  y2,
VOID region_specific_state 
) const [protected, virtual]
void casa::MultiPVTool::checkPoint ( WorldCanvas wc,
State state 
) [virtual]

this is a non-const function because a non-const RegionTool ptr is returned in 'state' which can then be used for setting the state of the regions managed by the various tools....

Implements casa::RegionTool.

virtual bool casa::MultiPVTool::checkType ( viewer::region::RegionTypes  t) [inline, protected, virtual]

Definition at line 170 of file MultiPVTool.h.

References casa::viewer::region::PVLineRegion.

bool casa::MultiPVTool::create ( viewer::region::RegionTypes  ,
WorldCanvas ,
const std::vector< std::pair< double, double > > &  ,
const std::string &  ,
viewer::region::TextPosition  ,
const std::vector< int > &  ,
const std::string &  ,
int  ,
int  ,
const std::string &  ,
const std::string &  ,
viewer::region::LineStyle  ,
unsigned  int,
bool  ,
VOID  
) [virtual]

create regions of various types (e.g.

point, rect, poly, etc.). For use when loading casa region files...

Implements casa::RegionTool.

virtual void casa::MultiPVTool::disable ( ) [virtual]

Switch the tool off - this erases the rectangle, if any, and calls the base class disable.

Reimplemented from casa::RegionTool.

virtual void casa::MultiPVTool::doubleInside ( ) [inline, protected, virtual]

Output callback functions--to be overridden in derived class.

Called when there is a double click inside/outside the rectangle

Reimplemented in casa::MultiPVToolImpl.

Definition at line 156 of file MultiPVTool.h.

virtual void casa::MultiPVTool::doubleOutside ( ) [inline, protected, virtual]

Definition at line 157 of file MultiPVTool.h.

virtual void casa::MultiPVTool::draw ( const WCRefreshEvent ,
const viewer::region::region_list_type  
) [protected, virtual]

draw the rectangle (if any) on the object's currently active WC.

Only to be called by the base class refresh event handler. Derived objects should use refresh() if they need to redraw, but even that is normally handled automatically.

Reimplemented from casa::RegionTool.

virtual void casa::MultiPVTool::get ( Int x1,
Int y1,
Int x2,
Int y2 
) const [protected, virtual]

Retrieve the rectangle coordinates, in screen pixels.

Anchor (if applicable) is (x1,y1). Valid during the output callbacks; to be used by them, as well as internally.

virtual void casa::MultiPVTool::get ( Int x1,
Int y1 
) const [private, virtual]

get only the anchor point

Definition at line 116 of file MultiPVTool.h.

References rfactory.

virtual void casa::MultiPVTool::keyPressed ( const WCPositionEvent ev) [protected, virtual]

Functions called by the base class event handling operators--and normally only those.

This is the input that controls the rectangle's appearance and action. When the rectangle is ready and double-click is received, the doubleInside/Outside routine will be invoked.

Reimplemented from casa::RegionTool.

virtual void casa::MultiPVTool::keyReleased ( const WCPositionEvent ev) [protected, virtual]

Reimplemented from casa::RegionTool.

virtual void casa::MultiPVTool::moved ( const WCMotionEvent ev,
const viewer::region::region_list_type  
) [protected, virtual]

Reimplemented from casa::RegionTool.

virtual void casa::MultiPVTool::otherKeyPressed ( const WCPositionEvent ev) [protected, virtual]

Reimplemented from casa::RegionTool.

virtual Bool casa::MultiPVTool::rectangleDefined ( ) [inline, virtual]

Is a rectangle currently defined?

Definition at line 114 of file MultiPVTool.h.

References itsPVLineExists.

virtual void casa::MultiPVTool::rectangleReady ( ) [inline, protected, virtual]

Called when a rectangle is ready and not being edited.

(Unused so far on the glish level (12/01)).

Definition at line 162 of file MultiPVTool.h.

const std::set<viewer::region::RegionTypes>& casa::MultiPVTool::regionsCreated ( ) const [virtual]

returns a set which indicates regions this creator creates...

Implements casa::viewer::RegionCreator.

virtual void casa::MultiPVTool::reset ( Bool  skipRefresh = False) [virtual]

reset to non-existent, non-active rectangle.

Refreshes if necessary to erase (unless skipRefresh==True In that case, the caller should do the refresh itself). (Does not unregister from WCs or disable future event handling).

Reimplemented from casa::MultiWCTool.

called when the user (read GUI user) indicates that a region should be deleted...

Implements casa::RegionTool.

virtual void casa::MultiPVTool::set ( const Int x1,
const Int y1,
const Int x2,
const Int y2 
) [private, virtual]

set the pixel coordinates of the rectangle

void casa::MultiPVTool::start_new_rectangle ( WorldCanvas ,
int  x,
int  y 
) [private]
RegionToolTypes casa::MultiPVTool::type ( ) const [inline, virtual]

Implements casa::RegionTool.

Definition at line 132 of file MultiPVTool.h.

References casa::RegionTool::PVLINETOOL.

void casa::MultiPVTool::update_stats ( const WCMotionEvent ev) [private]

Member Data Documentation

std::tr1::shared_ptr<viewer::PVLine> casa::MultiPVTool::creating_region [private]

Definition at line 196 of file MultiPVTool.h.

Definition at line 228 of file MultiPVTool.h.

was the button pressed in the rectangle (or, if none, in an active WC) and not yet released/reset?

Definition at line 193 of file MultiPVTool.h.

position that move started from

Definition at line 225 of file MultiPVTool.h.

Definition at line 225 of file MultiPVTool.h.

(valid only if itsPVLineExists==True) Has doubleInside/Outside been called for this rectangle? If so, a key press outside the rectangle will start a new rectangle, as if itsPVLineExists were False.

However, a key press inside the rectangle will reset itsEmitted to False, allowing the rectangle to be reused (possibly moved or resized, and emitted again).

Definition at line 214 of file MultiPVTool.h.

storage of the handle (pixel) coordinates

Definition at line 222 of file MultiPVTool.h.

Definition at line 222 of file MultiPVTool.h.

store the times of the last two presses here:

Definition at line 228 of file MultiPVTool.h.

(valid only if itsActive==True): True = being moved False = being resized

Definition at line 201 of file MultiPVTool.h.

(Linear) coordinates of the rectangle (invariant over zooms, but not coordinate system changes.

To do: support the WorldCoordinateChange refresh reason, and reset this tool when it occurs).

Definition at line 219 of file MultiPVTool.h.

Definition at line 219 of file MultiPVTool.h.

do we have a rectangle yet? (if True, itsCurrentWC, itsEmitted, P1, and P2 are valid)

Definition at line 189 of file MultiPVTool.h.

Referenced by rectangleDefined().

Definition at line 204 of file MultiPVTool.h.

Definition at line 205 of file MultiPVTool.h.

itsMoving is being replaced by moving_regions

Definition at line 203 of file MultiPVTool.h.

Reimplemented in casa::QtPVToolRegion.

Definition at line 231 of file MultiPVTool.h.

Definition at line 230 of file MultiPVTool.h.

std::tr1::shared_ptr<viewer::PVLine> casa::MultiPVTool::resizing_region [private]

itsActive is being replaced by resizing_region

Definition at line 195 of file MultiPVTool.h.

Definition at line 197 of file MultiPVTool.h.

Definition at line 174 of file MultiPVTool.h.

Referenced by getRegionSource().


The documentation for this class was generated from the following file: