![]() |
wxIScan
|
The canvas window. More...
#include <wxiviewcanvas.h>
Public Types | |
| enum | { wxICANVAS_MOUSE_SELECTION = 1, wxICANVAS_MOUSE_SCROLL = 2, wxICANVAS_MOUSEWHEEL_SCROLL = 4 } |
| wxIViewCanvas options (use SetOptions() function to set). More... | |
Public Member Functions | |
| wxIViewCanvas (wxWindow *poParent, wxWindowID nId=wxID_ANY, const wxPoint &oPos=wxDefaultPosition, const wxSize &oSize=wxDefaultSize, long nStyle=wxHSCROLL|wxVSCROLL|wxSUNKEN_BORDER, const wxString &strName=wxT("wxIViewCanvas")) | |
| Standard constructor. | |
| virtual | ~wxIViewCanvas () |
| Virtual destructor. | |
| void | OnPaint (wxPaintEvent &oEvent) |
| Handler for window (re)painting. | |
| virtual void | Paint (wxDC &oDc) |
| Repaints the image (using an internal bitmap). | |
| virtual wxBitmap & | GetBitmap () |
| Returns the internal bitmap. | |
| virtual void | SetBitmap (const wxBitmap &oBitmap) |
| Sets the internal bitmap. | |
| void | OnSize (wxSizeEvent &oEvent) |
| Handle resizing. | |
| void | OnTimer (wxTimerEvent &oEvent) |
| Handle timer events. | |
| void | OnMouse_ (wxMouseEvent &oEvent) |
| Handle mouse events (non virtual part, only calls the virtual part, see OnMouse() instead). | |
| virtual void | OnMouse (wxMouseEvent &oEvent) |
| Handle mouse events (the virtual, customizable part). | |
| virtual void | SetOptions (int nOptions) |
| Set options for the wxIViewCanvas. | |
| virtual void | ClearSelection () |
| Clears up (deletes) the current selection. | |
| virtual wxRect & | GetSelection () |
| Gets the selection rectangle. | |
| virtual bool | IsSelected () |
| Checks if a selection area exists. | |
Protected Attributes | |
| int | m_nOptions |
| Holds extended style info (options). | |
| wxBitmap | m_oBitmap |
| Internal bitmap object for repainting. | |
| wxTimer | m_oTimer |
| Timer for delay before sending resizing event to parent window. | |
| wxPoint | m_oMousePosBegin |
| Save the starting point of a mouse movement. | |
| wxPoint | m_oMousePosOld |
| Save former mouse position. | |
| wxRect | m_oSelection |
| Holds the selection. | |
| anonymous enum |
wxIViewCanvas options (use SetOptions() function to set).
Definition at line 199 of file wxiviewcanvas.h.
{
wxICANVAS_MOUSE_SELECTION= 1, ///< Enable selecting a rectangular image region. (Default is OFF.)
wxICANVAS_MOUSE_SCROLL= 2, ///< Enable scrolling following mouse cursor on right mouse key pressed. (Default is ON.)
wxICANVAS_MOUSEWHEEL_SCROLL= 4 ///< Enable selecting a rectangular image region. (Default is ON)
};
| wxIViewCanvas::wxIViewCanvas | ( | wxWindow * | poParent, |
| wxWindowID | nId = wxID_ANY, |
||
| const wxPoint & | oPos = wxDefaultPosition, |
||
| const wxSize & | oSize = wxDefaultSize, |
||
| long | nStyle = wxHSCROLL | wxVSCROLL | wxSUNKEN_BORDER, |
||
| const wxString & | strName = wxT( "wxIViewCanvas" ) |
||
| ) |
Standard constructor.
| poParent | a pointer to the dialog windows's parent window. |
| nId | the window id, default: 1 |
| oPos | the window position, default: wxDefaultPosition |
| oSize | the window size, default: wxDefaultSize |
| nStyle | window style (default: wxHSCROLL | wxVSCROLL | wxSUNKEN_BORDER) |
| strName | class name (default: wxT( "wxIViewCanvas" )) |
Definition at line 47 of file wxiviewcanvas.cpp.
: wxScrolledWindow( poParent, nId, oPos, oSize, nStyle, strName ),
m_nOptions( wxICANVAS_MOUSE_SCROLL | wxICANVAS_MOUSEWHEEL_SCROLL )
{
// Initialization.
m_oTimer.SetOwner( this );
// Reset selection.
ClearSelection();
}
| virtual wxIViewCanvas::~wxIViewCanvas | ( | ) | [inline, virtual] |
| virtual void wxIViewCanvas::ClearSelection | ( | ) | [inline, virtual] |
Clears up (deletes) the current selection.
Definition at line 178 of file wxiviewcanvas.h.
References m_oSelection.
Referenced by OnMouse(), and SetBitmap().
{
// RefreshRect( m_oSelection );
Refresh();
m_oSelection= wxRect( -1, -1, 0, 0 );
}
| virtual wxBitmap& wxIViewCanvas::GetBitmap | ( | ) | [inline, virtual] |
Returns the internal bitmap.
Definition at line 142 of file wxiviewcanvas.h.
References m_oBitmap.
{ return m_oBitmap; }
| virtual wxRect& wxIViewCanvas::GetSelection | ( | ) | [inline, virtual] |
Gets the selection rectangle.
Definition at line 186 of file wxiviewcanvas.h.
References m_oSelection.
Referenced by wxIScanFrame::GetImageSelection(), and wxIScanFrame::OnDocumentZoom().
{ return m_oSelection; };
| virtual bool wxIViewCanvas::IsSelected | ( | ) | [inline, virtual] |
Checks if a selection area exists.
Definition at line 189 of file wxiviewcanvas.h.
References m_oSelection.
Referenced by wxIScanFrame::GetImageSelection(), wxIScanFrame::OnDocumentZoom(), and Paint().
{
return ( m_oSelection.x >= 0 )
&& ( m_oSelection.y >= 0 )
&& ( m_oSelection.width > 1 )
&& ( m_oSelection.height > 1 );
}
| void wxIViewCanvas::OnMouse | ( | wxMouseEvent & | oEvent | ) | [virtual] |
Handle mouse events (the virtual, customizable part).
| oEvent | Contains the mouse event to handle. |
OnMouse() handles the following events depending on the options set by a previous call to SetOptions():
Definition at line 110 of file wxiviewcanvas.cpp.
References ClearSelection(), wxIViewCanvasSelectedEvent::m_bAlt, wxIViewCanvasSelectedEvent::m_bCtrl, wxIViewCanvasSelectedEvent::m_bMeta, wxIViewCanvasSelectedEvent::m_bShift, m_nOptions, m_oMousePosBegin, m_oMousePosOld, wxIViewCanvasSelectedEvent::m_oSelection, m_oSelection, wxICANVAS_MOUSE_SCROLL, wxICANVAS_MOUSE_SELECTION, and wxICANVAS_MOUSEWHEEL_SCROLL.
Referenced by OnMouse_().
{
if( m_nOptions & wxICANVAS_MOUSE_SCROLL )
{
// Process right mouse button events.
if( oEvent.RightDown() )
{
// Change mouse cursor.
SetCursor( wxCursor( wxCURSOR_HAND ) );
// Remember former mouse position.
m_oMousePosOld= wxPoint( oEvent.GetX(), oEvent.GetY() );
}
else if ( oEvent.RightUp() )
{
// Reset mouse cursor.
SetCursor( wxNullCursor );
}
else if ( oEvent.Dragging() && oEvent.RightIsDown() )
{
// Get mouse position.
wxPoint oMousePos( oEvent.GetX(), oEvent.GetY() );
// Get the virtual position of upper left corner
// (the view start).
wxPoint nViewStart;
GetViewStart( &nViewStart.x, &nViewStart.y );
// Calculate scrolling parameters and scroll image.
//
// NOTE: This only works because scroll unit size ist set to
// 1 pixel per horizontal/vertikal scroll unit in
// void wxIViewCanvas::SetBitmap( const wxBitmap &oBitmap ).
//
Scroll( nViewStart.x - ( oMousePos.x - m_oMousePosOld.x ),
nViewStart.y - ( oMousePos.y - m_oMousePosOld.y ) );
// Save the mouse position for further use.
m_oMousePosOld= oMousePos;
}
}
if( m_nOptions & wxICANVAS_MOUSEWHEEL_SCROLL )
{
if( oEvent.GetWheelRotation() != 0 )
{
// Get the virtual position of upper left corner
// (the view start).
wxPoint nViewStart;
GetViewStart( &nViewStart.x, &nViewStart.y );
// Calculate scrolling parameters and scroll image.
//
// NOTE: This only works because scroll unit size ist set to
// 1 pixel per horizontal/vertikal scroll unit in
// void wxIViewCanvas::SetBitmap( const wxBitmap &oBitmap ).
//
Scroll( nViewStart.x,
nViewStart.y - oEvent.GetWheelRotation() / 5 );
}
}
if( m_nOptions & wxICANVAS_MOUSE_SELECTION )
{
// Process left mouse button events
if( oEvent.LeftDown() )
{
// Clear a posible selection.
ClearSelection();
// Change mouse cursor.
SetCursor( wxCursor( wxCURSOR_CROSS ) );
// Remember former mouse position.
m_oMousePosOld= wxPoint( oEvent.GetX(), oEvent.GetY() );
// Save starting point of the mouse movement.
m_oMousePosBegin= m_oMousePosOld;
}
else if ( oEvent.LeftUp() )
{
// Reset mouse cursor.
SetCursor( wxNullCursor );
// Get mouse position.
wxPoint oMousePos( oEvent.GetX(), oEvent.GetY() );
// Get the virtual position of upper left corner
// (the view start).
wxPoint nViewStart;
GetViewStart( &nViewStart.x, &nViewStart.y );
// Remember selection.
m_oSelection= wxRect( nViewStart.x + m_oMousePosBegin.x, nViewStart.y + m_oMousePosBegin.y,
oMousePos.x - m_oMousePosBegin.x + 1, oMousePos.y - m_oMousePosBegin.y + 1 );
// Do some coordinate corrections.
if( m_oSelection.width < 0 )
{
m_oSelection.x += m_oSelection.width;
m_oSelection.width= -m_oSelection.width;
}
if( m_oSelection.height < 0 )
{
m_oSelection.y += m_oSelection.height;
m_oSelection.height= -m_oSelection.height;
}
if( m_oSelection.x < 0 )
{
m_oSelection.width += m_oSelection.x;
m_oSelection.x= 0;
}
if( m_oSelection.y < 0 )
{
m_oSelection.height += m_oSelection.y;
m_oSelection.y= 0;
}
// Notify the next window in the parent chain that there
// is a new selection.
//
// Note: An event of type wxIViewCanvasSelectedEvent is
// propageted to the parent window chain by default.
wxIViewCanvasSelectedEvent oIViewCanvasSelectedEvent;
oIViewCanvasSelectedEvent.m_bShift= oEvent.ShiftDown();
oIViewCanvasSelectedEvent.m_bAlt = oEvent.AltDown();
oIViewCanvasSelectedEvent.m_bCtrl = oEvent.ControlDown();
oIViewCanvasSelectedEvent.m_bMeta = oEvent.MetaDown();
oIViewCanvasSelectedEvent.m_oSelection= m_oSelection;
ProcessEvent( oIViewCanvasSelectedEvent );
}
else if ( oEvent.Dragging() && oEvent.LeftIsDown() )
{
// Get mouse position.
wxPoint oMousePos( oEvent.GetX(), oEvent.GetY() );
// ..
wxClientDC oDc( this );
oDc.SetPen( *wxBLACK_DASHED_PEN );
oDc.SetBrush( *wxTRANSPARENT_BRUSH );
oDc.SetLogicalFunction( wxINVERT );
oDc.DrawRectangle( m_oMousePosBegin.x, m_oMousePosBegin.y,
m_oMousePosOld.x - m_oMousePosBegin.x + 1, m_oMousePosOld.y - m_oMousePosBegin.y + 1 );
oDc.DrawRectangle( m_oMousePosBegin.x, m_oMousePosBegin.y,
oMousePos.x - m_oMousePosBegin.x + 1, oMousePos.y - m_oMousePosBegin.y + 1 );
// Save the mouse position for further use.
m_oMousePosOld= oMousePos;
}
}
}
| void wxIViewCanvas::OnMouse_ | ( | wxMouseEvent & | oEvent | ) | [inline] |
Handle mouse events (non virtual part, only calls the virtual part, see OnMouse() instead).
| oEvent | Contains the mouse event to handle. |
Definition at line 157 of file wxiviewcanvas.h.
References OnMouse().
{ OnMouse( oEvent ); }
| void wxIViewCanvas::OnPaint | ( | wxPaintEvent & | oEvent | ) |
Handler for window (re)painting.
Creates and prepares a device context and calls Paint( wxDC& oDc ).
Definition at line 64 of file wxiviewcanvas.cpp.
References Paint().
{
// Create a device context...
//
wxPaintDC oDc( this );
// ... and prepare it even if there is not a bitmap to paint
// for to repaint at least the window background etc.
//
PrepareDC( oDc );
// Paint (the bitmap).
Paint( oDc );
}
| void wxIViewCanvas::OnSize | ( | wxSizeEvent & | oEvent | ) |
Handle resizing.
Definition at line 81 of file wxiviewcanvas.cpp.
References m_oTimer, and WXIVIEWCANVASDELAY.
{
// Check if the timer is running, and...
if( m_oTimer.IsRunning() )
{
// ... stop it.
m_oTimer.Stop();
}
// Create a one shot timer event in 50ms.
m_oTimer.Start( WXIVIEWCANVASDELAY, wxTIMER_ONE_SHOT );
}
| void wxIViewCanvas::OnTimer | ( | wxTimerEvent & | oEvent | ) |
Handle timer events.
Definition at line 96 of file wxiviewcanvas.cpp.
{
// Notify the next window in the parent chain that the canvas size
// has changed.
//
// Note: An event of type wxIViewCanvasSizeEvent is propageted
// to the parent window chain by default.
wxIViewCanvasSizeEvent oEvent;
ProcessEvent( oEvent );
}
| void wxIViewCanvas::Paint | ( | wxDC & | oDc | ) | [virtual] |
Repaints the image (using an internal bitmap).
Definition at line 268 of file wxiviewcanvas.cpp.
References IsSelected(), m_oBitmap, and m_oSelection.
Referenced by OnPaint().
{
#if wxCHECK_VERSION( 2, 9, 0 )
if( oDc.IsOk() )
#else
if( oDc.Ok() )
#endif // wxCHECK_VERSION( 2, 9, 0 )
{
// If there is a bitmap connected to this canvas window (re)paint it.
if( m_oBitmap.Ok() )
{
// Repaint the bitmap.
oDc.DrawBitmap( m_oBitmap, 0, 0 );
}
// If there is a selection repaint the surrounding rectangle.
if( IsSelected() )
{
oDc.SetPen( *wxBLACK_DASHED_PEN );
oDc.SetBrush( *wxTRANSPARENT_BRUSH );
oDc.SetLogicalFunction( wxINVERT );
oDc.DrawRectangle( m_oSelection.x, m_oSelection.y, m_oSelection.width, m_oSelection.height );
}
}
}
| void wxIViewCanvas::SetBitmap | ( | const wxBitmap & | oBitmap | ) | [virtual] |
Sets the internal bitmap.
Definition at line 297 of file wxiviewcanvas.cpp.
References ClearSelection(), and m_oBitmap.
Referenced by wxIScanFrame::UpdateBitmap().
{
// Save the (new) bitmap,...
m_oBitmap= oBitmap;
// ... adjust the scrollbars, ...
SetScrollbars( 1, 1, m_oBitmap.GetWidth(), m_oBitmap.GetHeight() );
// ... clear a posible selection, ...
ClearSelection();
// .. and refresh (repaint) the windown content.
Refresh();
}
| virtual void wxIViewCanvas::SetOptions | ( | int | nOptions | ) | [inline, virtual] |
Set options for the wxIViewCanvas.
Definition at line 175 of file wxiviewcanvas.h.
References m_nOptions.
{ m_nOptions= nOptions; }
int wxIViewCanvas::m_nOptions [protected] |
Holds extended style info (options).
Definition at line 208 of file wxiviewcanvas.h.
Referenced by OnMouse(), and SetOptions().
wxBitmap wxIViewCanvas::m_oBitmap [protected] |
Internal bitmap object for repainting.
Definition at line 209 of file wxiviewcanvas.h.
Referenced by GetBitmap(), Paint(), and SetBitmap().
wxPoint wxIViewCanvas::m_oMousePosBegin [protected] |
Save the starting point of a mouse movement.
Definition at line 211 of file wxiviewcanvas.h.
Referenced by OnMouse().
wxPoint wxIViewCanvas::m_oMousePosOld [protected] |
Save former mouse position.
Definition at line 212 of file wxiviewcanvas.h.
Referenced by OnMouse().
wxRect wxIViewCanvas::m_oSelection [protected] |
Holds the selection.
Definition at line 213 of file wxiviewcanvas.h.
Referenced by ClearSelection(), GetSelection(), IsSelected(), OnMouse(), and Paint().
wxTimer wxIViewCanvas::m_oTimer [protected] |
Timer for delay before sending resizing event to parent window.
Definition at line 210 of file wxiviewcanvas.h.
Referenced by OnSize().