wxWidgets/contrib/samples/plot/plot.cpp
Włodzimierz Skiba fa0d344773 wxUSE_LOG fixes.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28335 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2004-07-20 17:04:02 +00:00

194 lines
4.4 KiB
C++

/*
* Program: wxPlotWindow
*
* Author: Robert Roebling
*
* Copyright: (C) 1999, Robert Roebling
*
*/
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#ifdef __BORLANDC__
#pragma hdrstop
#endif
#ifndef WX_PRECOMP
#include "wx/wx.h"
#endif
#include "wx/plot/plot.h"
#include "wx/image.h"
#include "wx/listctrl.h"
#include "wx/sizer.h"
#include "wx/log.h"
#include "wx/intl.h"
#include <math.h>
// derived classes
class MyPlotCurve;
class MyFrame;
class MyApp;
// MyPlotCurve
class MyPlotCurve: public wxPlotCurve
{
public:
MyPlotCurve( int offsetY, double startY, double endY ) :
wxPlotCurve( offsetY, startY, endY ) {}
virtual wxInt32 GetStartX()
{ return 0; }
virtual wxInt32 GetEndX()
{ return 7000; }
virtual double GetY( wxInt32 x )
{
double dx = x;
dx /= 100;
return sin( dx );
}
};
// MyFrame
class MyFrame: public wxFrame
{
public:
MyFrame();
void OnAbout( wxCommandEvent &event );
void OnQuit( wxCommandEvent &event );
void OnPlotClick( wxPlotEvent &event );
void OnPlotDClick( wxPlotEvent &event );
wxPlotWindow *m_plot;
#if wxUSE_LOG
wxTextCtrl *m_log;
#endif // wxUSE_LOG
private:
DECLARE_DYNAMIC_CLASS(MyFrame)
DECLARE_EVENT_TABLE()
};
// MyApp
class MyApp: public wxApp
{
public:
virtual bool OnInit();
};
// main program
IMPLEMENT_APP(MyApp)
// MyFrame
const int ID_QUIT = 108;
const int ID_ABOUT = 109;
IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_MENU (ID_ABOUT, MyFrame::OnAbout)
EVT_MENU (ID_QUIT, MyFrame::OnQuit)
EVT_PLOT_CLICKED ( -1, MyFrame::OnPlotClick)
EVT_PLOT_DOUBLECLICKED ( -1, MyFrame::OnPlotDClick)
END_EVENT_TABLE()
MyFrame::MyFrame()
: wxFrame( (wxFrame *)NULL, -1, _T("wxPlotWindow sample"),
wxPoint(20,20), wxSize(470,500) )
{
wxMenu *file_menu = new wxMenu();
file_menu->Append( ID_ABOUT, _T("&About.."));
file_menu->Append( ID_QUIT, _T("E&xit\tAlt-X"));
wxMenuBar *menu_bar = new wxMenuBar();
menu_bar->Append(file_menu, _T("&File"));
SetMenuBar( menu_bar );
#if wxUSE_STATUSBAR
CreateStatusBar(2);
int widths[] = { -1, 100 };
SetStatusWidths( 2, widths );
#endif // wxUSE_STATUSBAR
m_plot = new wxPlotWindow( this, -1, wxPoint(0,0), wxSize(100,100), wxSUNKEN_BORDER | wxPLOT_DEFAULT );
m_plot->SetUnitsPerValue( 0.01 );
// m_plot->SetScrollOnThumbRelease( TRUE );
m_plot->Add( new MyPlotCurve( 0, -1.5, 1.5 ) );
m_plot->Add( new MyPlotCurve( 50, -1.5, 1.5 ) );
wxPlotOnOffCurve *oo = new wxPlotOnOffCurve( 10 );
oo->Add( 10, 20 );
oo->Add( 25, 30 );
oo->Add( 100, 400 );
oo->Add( 1000, 2000 );
m_plot->Add( oo );
#if wxUSE_LOG
m_log = new wxTextCtrl( this, -1, _T("This is the log window.\n"), wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE );
wxLog *old_log = wxLog::SetActiveTarget( new wxLogTextCtrl( m_log ) );
delete old_log;
#endif // wxUSE_LOG
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
topsizer->Add( m_plot, 1, wxEXPAND );
#if wxUSE_LOG
topsizer->Add( m_log, 0, wxEXPAND );
#endif // wxUSE_LOG
SetAutoLayout( true );
SetSizer( topsizer );
}
void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) )
{
Close( true );
}
void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
{
(void)wxMessageBox( _T("wxPlotWindow Demo\n")
_T("Robert Roebling (c) 1999,2000"),
_T("About wxPlotWindow Demo"), wxICON_INFORMATION | wxOK );
}
void MyFrame::OnPlotClick( wxPlotEvent &event )
{
double x = event.GetPosition() * m_plot->GetUnitsPerValue();
double y = event.GetCurve()->GetY( event.GetPosition() );
wxLogMessage( _T("Clicked on curve at x coordinate: %f, value: %f"), x, y );
}
void MyFrame::OnPlotDClick( wxPlotEvent &event )
{
double x = event.GetPosition() * m_plot->GetUnitsPerValue();
double y = event.GetCurve()->GetY( event.GetPosition() );
wxLogMessage( _T("Double clicked on curve at x coordinate: %f, value: %f"), x, y );
}
//-----------------------------------------------------------------------------
// MyApp
//-----------------------------------------------------------------------------
bool MyApp::OnInit()
{
wxFrame *frame = new MyFrame();
frame->Show( TRUE );
return TRUE;
}