casa
$Rev:20696$
|
Base class for MultiWorldCanvas event-based ellipse tools. More...
#include <MWCEllipseTool.h>
Public Member Functions | |
MWCEllipseTool (Display::KeySym keysym=Display::K_Pointer_Button1, const Bool persistent=False) | |
Constructor. | |
virtual | ~MWCEllipseTool () |
Destructor. | |
virtual void | disable () |
Switch the tool off - this erases the ellipse, if any, and calls the base class disable. | |
virtual void | reset (Bool skipRefresh=False) |
reset to non-existent, non-active ellipse. | |
virtual Bool | ellipseDefined () |
Is a ellipse currently defined? virtual Bool rectangleDefined() { return itsRectangleExists; }. | |
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 &, const viewer::region::region_list_type &) |
virtual void | draw (const WCRefreshEvent &, const viewer::region::region_list_type &) |
draw the ellipse (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 | ellipseReady () |
Called when a ellipse is ready and not being edited. | |
virtual void | get (Int &x1, Int &y1, Int &x2, Int &y2) const |
virtual void rectangleReady() { }; | |
Private Member Functions | |
virtual void | set (const Int &x1, const Int &y1, const Int &x2, const Int &y2) |
set the pixel coordinates of the ellipse | |
virtual void | get (Int &x1, Int &y1) const |
get only the anchor point | |
Private Attributes | |
Bool | itsEllipsePersistent |
does the ellipse persist after double clicks (until a new one is started)? | |
Bool | itsEllipseExists |
Bool itsRectanglePersistent;. | |
Bool | itsActive |
Bool itsRectangleExists;. | |
Bool | itsMoving |
(valid only if itsActive==True): True = being moved False = being resized | |
Bool | itsEmitted |
(valid only if itsEllipseExists==True) Has doubleInside/Outside been called for this ellipse? If so, a key press outside the ellipse will start a new ellipse, as if itsEllipseExists were False. | |
Vector< Double > | itsP1 |
(Linear) coordinates of the ellipse (invariant over zooms, but not coordinate system changes. | |
Vector< Double > | itsP2 |
Vector< Int > | itsHX |
storage of the handle (pixel) coordinates | |
Vector< Int > | itsHY |
Int | itsBaseMoveX |
position that move started from | |
Int | itsBaseMoveY |
Double | itsLastPressTime |
store the times of the last two presses here: | |
Double | its2ndLastPressTime |
Base class for MultiWorldCanvas event-based ellipse tools.
Public interface
<prerequisites> WCTool </prerequisites>
MWCEllipseTool stands for MultiWorldCanvas Ellipse Tool
This class adds to its base WCTool to provide a tool for drawing, resizing and moving ellipses on a WorldCanvas. While MWCEllipseTool 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 ellipse respectively. It is up to the programmer to decide what double clicks inside and outside the ellipse 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 ellipse is drawn by dragging the mouse from one corner to the diagonally opposite corner. Once constructed, the ellipse can be resized by dragging its corners, or relocated by dragging inside the ellipse. The ellipse is removed from the display when the Esc key is pressed.
Many activities on the WorldCanvas will be based on the user drawing a ellipse, and then proceeding to some action with that ellipse.
Definition at line 83 of file MWCEllipseTool.h.
casa::MWCEllipseTool::MWCEllipseTool | ( | Display::KeySym | keysym = Display::K_Pointer_Button1 , |
const Bool | persistent = False |
||
) |
Constructor.
virtual casa::MWCEllipseTool::~MWCEllipseTool | ( | ) | [virtual] |
Destructor.
virtual void casa::MWCEllipseTool::disable | ( | ) | [virtual] |
Switch the tool off - this erases the ellipse, if any, and calls the base class disable.
Reimplemented from casa::MultiWCTool.
virtual void casa::MWCEllipseTool::doubleInside | ( | ) | [inline, protected, virtual] |
Output callback functions--to be overridden in derived class.
Called when there is a double click inside/outside the ellipse
Reimplemented in casa::MWCETRegion.
Definition at line 131 of file MWCEllipseTool.h.
virtual void casa::MWCEllipseTool::doubleOutside | ( | ) | [inline, protected, virtual] |
Definition at line 132 of file MWCEllipseTool.h.
virtual void casa::MWCEllipseTool::draw | ( | const WCRefreshEvent & | , |
const viewer::region::region_list_type & | |||
) | [protected, virtual] |
draw the ellipse (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::MultiWCTool.
virtual Bool casa::MWCEllipseTool::ellipseDefined | ( | ) | [inline, virtual] |
Is a ellipse currently defined? virtual Bool rectangleDefined() { return itsRectangleExists; }.
Definition at line 106 of file MWCEllipseTool.h.
References itsEllipseExists.
virtual void casa::MWCEllipseTool::ellipseReady | ( | ) | [inline, protected, virtual] |
Called when a ellipse is ready and not being edited.
(Unused so far on the glish level (12/01)).
Definition at line 137 of file MWCEllipseTool.h.
virtual void casa::MWCEllipseTool::get | ( | Int & | x1, |
Int & | y1, | ||
Int & | x2, | ||
Int & | y2 | ||
) | const [protected, virtual] |
virtual void rectangleReady() { };
Retrieve the ellipse 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::MWCEllipseTool::get | ( | Int & | x1, |
Int & | y1 | ||
) | const [private, virtual] |
get only the anchor point
virtual void casa::MWCEllipseTool::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 ellipse's appearance and action. When the ellipse is ready and double-click is received, the doubleInside/Outside routine will be invoked.
Reimplemented from casa::MultiWCTool.
virtual void casa::MWCEllipseTool::keyReleased | ( | const WCPositionEvent & | ev | ) | [protected, virtual] |
Reimplemented from casa::MultiWCTool.
virtual void casa::MWCEllipseTool::moved | ( | const WCMotionEvent & | , |
const viewer::region::region_list_type & | |||
) | [protected, virtual] |
Reimplemented from casa::MultiWCTool.
virtual void casa::MWCEllipseTool::otherKeyPressed | ( | const WCPositionEvent & | ev | ) | [protected, virtual] |
Reimplemented from casa::MultiWCTool.
virtual void casa::MWCEllipseTool::reset | ( | Bool | skipRefresh = False | ) | [virtual] |
reset to non-existent, non-active ellipse.
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.
virtual void casa::MWCEllipseTool::set | ( | const Int & | x1, |
const Int & | y1, | ||
const Int & | x2, | ||
const Int & | y2 | ||
) | [private, virtual] |
set the pixel coordinates of the ellipse
Definition at line 195 of file MWCEllipseTool.h.
Bool casa::MWCEllipseTool::itsActive [private] |
Bool itsRectangleExists;.
was the button pressed in the ellipse (or, if none, in an active WC) and not yet released/reset?
Definition at line 168 of file MWCEllipseTool.h.
Int casa::MWCEllipseTool::itsBaseMoveX [private] |
position that move started from
Definition at line 192 of file MWCEllipseTool.h.
Int casa::MWCEllipseTool::itsBaseMoveY [private] |
Definition at line 192 of file MWCEllipseTool.h.
Bool casa::MWCEllipseTool::itsEllipseExists [private] |
Bool itsRectanglePersistent;.
do we have a ellipse yet? (if True, itsCurrentWC, itsEmitted, P1, and P2 are valid)
Definition at line 163 of file MWCEllipseTool.h.
Referenced by ellipseDefined().
does the ellipse persist after double clicks (until a new one is started)?
Definition at line 158 of file MWCEllipseTool.h.
Bool casa::MWCEllipseTool::itsEmitted [private] |
(valid only if itsEllipseExists==True) Has doubleInside/Outside been called for this ellipse? If so, a key press outside the ellipse will start a new ellipse, as if itsEllipseExists were False.
However, a key press inside the ellipse will reset itsEmitted to False, allowing the ellipse to be reused (possibly moved or resized, and emitted again).
Definition at line 181 of file MWCEllipseTool.h.
Vector<Int> casa::MWCEllipseTool::itsHX [private] |
storage of the handle (pixel) coordinates
Definition at line 189 of file MWCEllipseTool.h.
Vector<Int> casa::MWCEllipseTool::itsHY [private] |
Definition at line 189 of file MWCEllipseTool.h.
Double casa::MWCEllipseTool::itsLastPressTime [private] |
store the times of the last two presses here:
Definition at line 195 of file MWCEllipseTool.h.
Bool casa::MWCEllipseTool::itsMoving [private] |
(valid only if itsActive==True): True = being moved False = being resized
Definition at line 172 of file MWCEllipseTool.h.
Vector<Double> casa::MWCEllipseTool::itsP1 [private] |
(Linear) coordinates of the ellipse (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 186 of file MWCEllipseTool.h.
Vector<Double> casa::MWCEllipseTool::itsP2 [private] |
Definition at line 186 of file MWCEllipseTool.h.