X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/45cbbbb3a40b1f0e0a526db27aafcd92c3663ae5..33d8353fa58dbc66fc9d22fcd510ded6b26ce719:/samples/joytest/joytest.cpp diff --git a/samples/joytest/joytest.cpp b/samples/joytest/joytest.cpp index 3e99d23496..f8f478d5f9 100644 --- a/samples/joytest/joytest.cpp +++ b/samples/joytest/joytest.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". @@ -24,15 +24,17 @@ # error You must set wxUSE_JOYSTICK to 1 in setup.h #endif -#if !wxUSE_STATUSBAR -# error You must set wxUSE_STATUSBAR to 1 in setup.h -#endif - #include "wx/sound.h" #include "wx/joystick.h" #include "joytest.h" +// the application icon (under Windows and OS/2 it is in resources and even +// though we could still include the XPM here it would be unused) +#ifndef wxHAS_IMAGES_IN_RESOURCES + #include "../sample.xpm" +#endif + MyFrame *frame = NULL; IMPLEMENT_APP(MyApp) @@ -43,18 +45,22 @@ long ypos = -1; int winNumber = 1; +int nButtons = 0; // Initialise this in OnInit, not statically bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + wxJoystick stick(wxJOYSTICK1); if (!stick.IsOk()) { - wxMessageBox(_T("No joystick detected!")); + wxMessageBox(wxT("No joystick detected!")); return false; } #if wxUSE_SOUND - m_fire.Create(_T("gun.wav")); + m_fire.Create(wxT("buttonpress.wav")); #endif // wxUSE_SOUND m_minX = stick.GetXMin(); @@ -64,36 +70,31 @@ bool MyApp::OnInit() // Create the main frame window - frame = new MyFrame(NULL, _T("Joystick Demo"), wxDefaultPosition, + frame = new MyFrame(NULL, wxT("Joystick Demo"), wxDefaultPosition, wxSize(500, 400), wxDEFAULT_FRAME_STYLE | wxHSCROLL | wxVSCROLL); - // Give it an icon (this is ignored in MDI mode: uses resources) -#ifdef __WXMSW__ - frame->SetIcon(wxIcon(_T("joyicon"))); -#endif -#ifdef __X__ - frame->SetIcon(wxIcon(_T("joyicon.xbm"))); -#endif + frame->SetIcon(wxICON(sample)); // Make a menubar wxMenu *file_menu = new wxMenu; - file_menu->Append(JOYTEST_QUIT, _T("&Exit")); + file_menu->Append(JOYTEST_QUIT, wxT("&Exit")); wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(file_menu, _T("&File")); + menu_bar->Append(file_menu, wxT("&File")); // Associate the menu bar with the frame frame->SetMenuBar(menu_bar); +#if wxUSE_STATUSBAR frame->CreateStatusBar(); + frame->SetStatusText(wxString::Format(wxT("Device [%s] (PID:[%i] MID:[%i]) Ready... # of joysticks:[%i]"), stick.GetProductName().c_str(), stick.GetProductId(), stick.GetManufacturerId(), wxJoystick::GetNumberJoysticks())); +#endif // wxUSE_STATUSBAR frame->CenterOnScreen(); frame->Show(true); - SetTopWindow(frame); - return true; } @@ -106,6 +107,7 @@ MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size): wxScrolledWindow(parent, wxID_ANY, pos, size, wxSUNKEN_BORDER) { m_stick = new wxJoystick(wxJOYSTICK1); + nButtons = m_stick->GetNumberButtons(); m_stick->SetCapture(this, 10); } @@ -117,47 +119,61 @@ MyCanvas::~MyCanvas() void MyCanvas::OnJoystickEvent(wxJoystickEvent& event) { - wxClientDC dc(this); - - wxPoint pt(event.GetPosition()); - - // if negative positions are possible then shift everything up - int xmin = wxGetApp().m_minX; - int xmax = wxGetApp().m_maxX; - int ymin = wxGetApp().m_minY; - int ymax = wxGetApp().m_maxY; - if (xmin < 0) { - xmax += abs(xmin); - pt.x += abs(xmin); - } - if (ymin < 0) { - ymax += abs(ymin); - pt.y += abs(ymin); - } - - // Scale to canvas size - int cw, ch; - GetSize(&cw, &ch); - - pt.x = (long) (((double)pt.x/(double)xmax) * cw); - pt.y = (long) (((double)pt.y/(double)ymax) * ch); - - if (xpos > -1 && ypos > -1 && event.IsMove() && event.ButtonIsDown()) + // We don't have valid (x, y) coordinates for z-move events. + if ( !event.IsZMove() ) { - dc.SetPen(*wxBLACK_PEN); - dc.DrawLine(xpos, ypos, pt.x, pt.y); + wxClientDC dc(this); + + wxPoint pt(event.GetPosition()); + + // if negative positions are possible then shift everything up + int xmin = wxGetApp().m_minX; + int xmax = wxGetApp().m_maxX; + int ymin = wxGetApp().m_minY; + int ymax = wxGetApp().m_maxY; + if (xmin < 0) { + xmax += abs(xmin); + pt.x += abs(xmin); + } + if (ymin < 0) { + ymax += abs(ymin); + pt.y += abs(ymin); + } + + // Scale to canvas size + int cw, ch; + GetSize(&cw, &ch); + + pt.x = (long) (((double)pt.x/(double)xmax) * cw); + pt.y = (long) (((double)pt.y/(double)ymax) * ch); + + if (xpos > -1 && ypos > -1 && event.IsMove() && event.ButtonIsDown()) + { + dc.SetPen(*wxBLACK_PEN); + dc.DrawLine(xpos, ypos, pt.x, pt.y); + } + + xpos = pt.x; + ypos = pt.y; } - xpos = pt.x; - ypos = pt.y; - +#if wxUSE_STATUSBAR wxString buf; if (event.ButtonDown()) - buf.Printf(_T("Joystick (%d, %d) Fire!"), pt.x, pt.y); + buf.Printf(wxT("Joystick (%d, %d) #%i Fire!"), xpos, ypos, event.GetButtonChange()); else - buf.Printf(_T("Joystick (%d, %d)"), pt.x, pt.y); + buf.Printf(wxT("Joystick (%d, %d) "), xpos, ypos); + +/* + for(int i = 0; i < nButtons; ++i) + { + buf += wxString(wxT("[")) + + ((event.GetButtonState() & (1 << i)) ? wxT("Y") : wxT("N")) + wxString(wxT("]")); + } +*/ frame->SetStatusText(buf); +#endif // wxUSE_STATUSBAR #if wxUSE_SOUND if (event.ButtonDown() && wxGetApp().m_fire.IsOk()) @@ -178,11 +194,6 @@ MyFrame::MyFrame(wxFrame *parent, const wxString& title, const wxPoint& pos, canvas = new MyCanvas(this); } -MyFrame::~MyFrame() -{ - // Empty -} - void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(true);