]> git.saurik.com Git - wxWidgets.git/blame - samples/joytest/joytest.cpp
Removed two more GUI lock-ups. This time when
[wxWidgets.git] / samples / joytest / joytest.cpp
CommitLineData
bbf1f0e5
KB
1/////////////////////////////////////////////////////////////////////////////
2// Name: joytest.cpp
3// Purpose: Joystick sample
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart and Markus Holzem
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx/wx.h".
13#include "wx/wxprec.h"
14
15#ifdef __BORLANDC__
16#pragma hdrstop
17#endif
18
19#ifndef WX_PRECOMP
20#include "wx/wx.h"
21#endif
22
23#include <wx/msw/wave.h>
24#include <wx/msw/joystick.h>
25
26#include "joytest.h"
27
28MyFrame *frame = NULL;
29
30IMPLEMENT_APP(MyApp)
31
32// For drawing lines in a canvas
33long xpos = -1;
34long ypos = -1;
35
36int winNumber = 1;
37
38// Initialise this in OnInit, not statically
39bool MyApp::OnInit(void)
40{
41 wxJoystick stick(wxJOYSTICK1);
42 if (!stick.IsOk())
43 {
44 wxMessageBox("No joystick detected!");
45 return FALSE;
46 }
47 m_fire.Create("gun.wav");
48
49 m_maxX = stick.GetXMax();
50 m_maxY = stick.GetYMax();
51
52 // Create the main frame window
53
54 frame = new MyFrame(NULL, "Joystick Demo", wxPoint(0, 0), wxSize(500, 400),
5f4987fe 55 wxDEFAULT_FRAME_STYLE | wxHSCROLL | wxVSCROLL);
bbf1f0e5
KB
56
57 // Give it an icon (this is ignored in MDI mode: uses resources)
2049ba38 58#ifdef __WXMSW__
bbf1f0e5
KB
59 frame->SetIcon(wxIcon("joyicon"));
60#endif
61#ifdef __X__
62 frame->SetIcon(wxIcon("joyicon.xbm"));
63#endif
64
65 // Make a menubar
66 wxMenu *file_menu = new wxMenu;
67
68 file_menu->Append(JOYTEST_QUIT, "&Exit");
69
70 wxMenu *help_menu = new wxMenu;
71 help_menu->Append(JOYTEST_ABOUT, "&About");
72
73 wxMenuBar *menu_bar = new wxMenuBar;
74
75 menu_bar->Append(file_menu, "&File");
76 menu_bar->Append(help_menu, "&Help");
77
78 // Associate the menu bar with the frame
79 frame->SetMenuBar(menu_bar);
80
81 frame->CreateStatusBar();
82
83 frame->Show(TRUE);
84
85 SetTopWindow(frame);
86
87 return TRUE;
88}
89
90BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow)
91 EVT_JOYSTICK_EVENTS(MyCanvas::OnJoystickEvent)
92END_EVENT_TABLE()
93
94// Define a constructor for my canvas
95MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size):
96 wxScrolledWindow(parent, -1, pos, size, wxSUNKEN_BORDER)
97{
98 wxJoystick joystick(wxJOYSTICK1);
99 joystick.SetCapture(this);
100}
101
102MyCanvas::~MyCanvas(void)
103{
104 wxJoystick joystick(wxJOYSTICK1);
105 joystick.ReleaseCapture();
106}
107
108void MyCanvas::OnJoystickEvent(wxJoystickEvent& event)
109{
110 wxClientDC dc(this);
111
112 wxPoint pt(event.GetPosition());
113
114 // Scale to canvas size
115 int cw, ch;
116 GetSize(&cw, &ch);
117
118 pt.x = (long) (((double)pt.x/(double)wxGetApp().m_maxX) * cw);
119 pt.y = (long) (((double)pt.y/(double)wxGetApp().m_maxY) * ch);
120
121 if (xpos > -1 && ypos > -1 && event.IsMove() && event.ButtonIsDown())
122 {
123 dc.SetPen(*wxBLACK_PEN);
124 dc.DrawLine(xpos, ypos, pt.x, pt.y);
125 }
126 xpos = pt.x;
127 ypos = pt.y;
128
129 char buf[100];
130 if (event.ButtonDown())
131 sprintf(buf, "Joystick (%ld, %ld) Fire!", pt.x, pt.y);
132 else
133 sprintf(buf, "Joystick (%ld, %ld)", pt.x, pt.y);
134 frame->SetStatusText(buf);
135
136 if (event.ButtonDown() && wxGetApp().m_fire.IsOk())
137 {
138 wxGetApp().m_fire.Play();
139 }
140}
141
142BEGIN_EVENT_TABLE(MyFrame, wxFrame)
143 EVT_MENU(JOYTEST_QUIT, MyFrame::OnQuit)
144END_EVENT_TABLE()
145
146MyFrame::MyFrame(wxFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size,
147const long style):
148 wxFrame(parent, -1, title, pos, size, style)
149{
150 canvas = new MyCanvas(this);
151}
152
153MyFrame::~MyFrame(void)
154{
155}
156
157void MyFrame::OnQuit(wxCommandEvent& event)
158{
159 Close(TRUE);
160}
161
162void MyFrame::OnActivate(wxActivateEvent& event)
163{
164 if (event.GetActive() && canvas)
165 canvas->SetFocus();
166}