21 #if !defined ( WXPLPLOTWINDOW_H__INCLUDED_ )
22 #define WXPLPLOTWINDOW_H__INCLUDED_
26 #include <wx/window.h>
27 #include <wx/dcmemory.h>
28 #include <wx/dcclient.h>
29 #include <wx/dcgraph.h>
30 #include <wx/dcbuffer.h>
36 template <
class WXWINDOW>
40 wxPLplotwindow(
bool useGraphicsContext =
true, wxSize clientSize = wxDefaultSize );
44 bool SavePlot(
const wxString& driver,
const wxString& filename );
51 virtual void OnPaint( wxPaintEvent& event );
52 virtual void OnSize( wxSizeEvent & event );
53 virtual void OnErase( wxEraseEvent &event );
54 virtual void OnCreate( wxWindowCreateEvent &event );
55 void OnMouse( wxMouseEvent &event );
68 #ifdef wxUSE_GRAPHICS_CONTEXT
79 template<
class WXWINDOW>
81 : m_created( false ), m_initialSize( clientSize )
86 #ifdef wxUSE_GRAPHICS_CONTEXT
107 template<
class WXWINDOW>
120 template<
class WXWINDOW>
132 int width = WXWINDOW::GetClientSize().GetWidth();
133 int height = WXWINDOW::GetClientSize().GetHeight();
135 wxPaintDC paintDc(
this );
138 bool needResize = width != m_bitmap.GetWidth() || height != m_bitmap.GetHeight();
141 m_bitmap.Create( width, height, 32 );
144 m_memoryDc =
new wxMemoryDC;
145 m_memoryDc->SelectObject( m_bitmap );
146 wxDC *drawDc = m_memoryDc;
147 #ifdef wxUSE_GRAPHICS_CONTEXT
148 if ( m_useGraphicsContext )
152 m_gcDc =
new wxGCDC( *m_memoryDc );
157 m_stream.SetDC( drawDc );
158 drawDc->SetBackground( wxBrush( m_canvasColour ) );
161 m_stream.SetSize( width, height );
164 paintDc.Blit( 0, 0, width, height, m_memoryDc, 0, 0 );
169 template<
class WXWINDOW>
179 template<
class WXWINDOW>
188 template<
class WXWINDOW>
195 if ( m_initialSize != wxDefaultSize )
196 WXWINDOW::SetClientSize( m_initialSize );
198 int width = WXWINDOW::GetClientSize().GetWidth();
199 int height = WXWINDOW::GetClientSize().GetHeight();
200 m_bitmap.Create( width, height );
203 m_memoryDc =
new wxMemoryDC;
204 m_memoryDc->SelectObject( m_bitmap );
205 wxDC * drawDc = m_memoryDc;
206 #ifdef wxUSE_GRAPHICS_CONTEXT
207 if ( m_useGraphicsContext )
211 m_gcDc =
new wxGCDC( *m_memoryDc );
215 if ( !m_stream.IsValid() )
218 m_stream.SetDC( drawDc );
219 drawDc->SetBackground( wxBrush( m_canvasColour ) );
228 template<
class WXWINDOW>
232 wxPoint cursorPosition =
event.GetPosition();
233 wxSize clientSize = WXWINDOW::GetClientSize();
235 graphicsIn.
pX = cursorPosition.x;
236 graphicsIn.
pY = cursorPosition.y;
237 graphicsIn.
dX =
PLFLT( cursorPosition.x + 0.5 ) /
PLFLT( clientSize.GetWidth() );
238 graphicsIn.
dY = 1.0 -
PLFLT( cursorPosition.y + 0.5 ) /
PLFLT( clientSize.GetHeight() );
240 graphicsIn.
state = 0;
243 graphicsIn.
string[0] =
'\0';
244 if ( event.LeftUp() )
249 else if ( event.MiddleUp() )
254 else if ( event.RightUp() )
259 else if ( event.Aux1Up() )
264 else if ( event.Aux2Up() )
274 graphicsIn.
state = 0;
278 if ( wxGetKeyState( WXK_SHIFT ) )
280 if ( wxGetKeyState( WXK_CAPITAL ) )
282 if ( wxGetKeyState( WXK_ALT ) && wxGetKeyState( WXK_CONTROL ) )
284 else if ( wxGetKeyState( WXK_CONTROL ) )
286 else if ( wxGetKeyState( WXK_ALT ) )
288 if ( wxGetKeyState( WXK_NUMLOCK ) )
290 if ( wxGetKeyState( WXK_SCROLL ) )
295 m_stream.translatecursor( &graphicsIn );
296 this->OnLocate( graphicsIn );
301 template<
class WXWINDOW>
313 template<
class WXWINDOW>
319 if ( ( sfile = fopen( filename.mb_str(),
"wb+" ) ) == NULL )
331 plsdev( devname.mb_str() );
334 plspage( 0., 0., 800, 600, 0, 0 );
345 template<
class WXWINDOW>
349 #ifdef wxUSE_GRAPHICS_CONTEXT
350 if ( useGraphicsContext != m_useGraphicsContext )
352 m_useGraphicsContext = useGraphicsContext;
353 drawDc = m_useGraphicsContext ? (wxDC *) m_gcDc : (wxDC *) m_memoryDc;
356 drawDc = &m_memoryDc;
357 m_useGraphicsContext =
false;
361 m_stream.SetDC( drawDc );
366 template<
class WXWINDOW>
369 m_canvasColour = colour;
373 #endif // !defined( WXPLPLOTWINDOW_H__INCLUDED_ )
virtual void OnLocate(const PLGraphicsIn &graphicsIn)
void setUseGraphicsContext(bool useGraphicsContext)
Set whether we wish to use wxGCDC instead of a wxDC.
wxPLplotstream is inherited from plstream, which is the C++ interface
bool m_useGraphicsContext
Flag to indicate whether we should use a wxGCDC.
bool m_created
Flag to indicate the window has been Created.
virtual void OnCreate(wxWindowCreateEvent &event)
Window created event.
void OnMouse(wxMouseEvent &event)
Mouse events.
wxPLplotwindow(bool useGraphicsContext=true, wxSize clientSize=wxDefaultSize)
Constructor.
wxPLplotstream m_stream
The wxPLplotstream which belongs to this plot widget.
static PLStream * pls[PL_NSTREAMS]
wxPLplotstream * GetStream()
Get pointer to wxPLplotstream of this widget.
virtual void OnPaint(wxPaintEvent &event)
Paint event.
void RenewPlot(void)
Redo plot.
virtual void OnErase(wxEraseEvent &event)
Background erase event.
#define PLPLOT_wxLogDebug(string)
void setCanvasColour(const wxColour &colour)
virtual ~wxPLplotwindow(void)
Destructor.
virtual void OnSize(wxSizeEvent &event)
Size event.
bool SavePlot(const wxString &driver, const wxString &filename)
Save plot using a different driver.