Skip to content

Commit

Permalink
Copied the original WiiTracker functionality.
Browse files Browse the repository at this point in the history
  • Loading branch information
Carlos M. Pérez Penichet committed Feb 7, 2010
1 parent e8dd907 commit dd324de
Show file tree
Hide file tree
Showing 5 changed files with 418 additions and 25 deletions.
140 changes: 131 additions & 9 deletions bin/wiitracker.py
Expand Up @@ -7,6 +7,7 @@
import sys
import os
import gtk
from gtk.gdk import threads_init

# Check if we are working in the source tree or from the installed
# package and mangle the python path accordingly
Expand All @@ -21,6 +22,11 @@

from wiitracker import AboutWiitrackerDialog, PreferencesWiitrackerDialog
from wiitracker.wiitrackerconfig import getdatapath
from wiitracker.Wii3DTracker import Wii3DTracker
from wiitracker.WiiConnectionMaker import WiiConnectionMaker
from wiitracker.util import ARROW, rotateMoveScale, rotateMove
import gobject
from math import pi

class WiitrackerWindow(gtk.Window):
__gtype_name__ = "WiitrackerWindow"
Expand All @@ -37,7 +43,7 @@ def __init__(self):
"""
pass

def finish_initializing(self, builder):
def finish_initializing(self, builder, wiiAddress):
"""finish_initalizing should be called after parsing the ui definition
and creating a WiitrackerWindow object with it in order to finish
initializing the start of the new WiitrackerWindow instance.
Expand All @@ -46,13 +52,26 @@ def finish_initializing(self, builder):
#get a reference to the builder and set up the signals
self.builder = builder
self.builder.connect_signals(self)
self.tracker = Wii3DTracker(wiiAddress)

#uncomment the following code to read in preferences at start up
#dlg = PreferencesWiitrackerDialog.NewPreferencesWiitrackerDialog()
#self.preferences = dlg.get_preferences()

#code for other initialization actions should be added here

self.statusBar = builder.get_object("statusbar")
self.status_context = self.statusBar.get_context_id('')
self.rollDrawing = builder.get_object('rollDrawing')
self.pitchDrawing = builder.get_object('pitchDrawing')

self.menuConnect = builder.get_object('menuitem_Connect')
self.menuTrack = builder.get_object('menuitem_Track')
self.menuConnectTrack = builder.get_object('menuitem_ConnectTrack')
self.menuRumble = builder.get_object('menuitem_Rumble')


self.__connectTrack_source = 0

def about(self, widget, data=None):
"""about - display the about box for wiitracker """
about = AboutWiitrackerDialog.NewAboutWiitrackerDialog()
Expand All @@ -75,10 +94,112 @@ def quit(self, widget, data=None):
def on_destroy(self, widget, data=None):
"""on_destroy - called when the WiitrackerWindow is close. """
#clean up code for saving application state should be added here

gtk.main_quit()

def NewWiitrackerWindow():
self.set_sensitive(False)
self.tracker.stopping = True
if self.tracker.wiiMote:
gobject.timeout_add(10, self.tracker.wiiMote.close)
gobject.timeout_add(20, gtk.main_quit)

def __connectCallback(self, connectionMaker):
if connectionMaker.connected:
self.menuTrack.set_sensitive(True)
self.menuRumble.set_sensitive(True)
self.tracker.wiiMote = connectionMaker.wiiMote
self.tracker.acc_cal = connectionMaker.acc_cal
self.tracker.connected = True
else:
self.menuConnect.set_sensitive(True)
self.menuConnectTrack.set_sensitive(True)
if self.__connectTrack_source:
gobject.source_remove(self.__connectTrack_source)

def on_menuitem_Connect(self, widget, data=None):
"""called when the menuitem_Connect is clicked"""
self.menuConnect.set_sensitive(False)
self.menuConnectTrack.set_sensitive(False)
connectionMaker = WiiConnectionMaker(self.tracker.wiiAddress,
self.statusBar,
self.__connectCallback)
connectionMaker.start()

def on_menuitem_Track(self, widget, data=None):
"""called when the menuitem_Tack is clicked"""
if not self.tracker.connected:
return True

self.roll_gdkWindow = self.rollDrawing.window
self.pitch_gdkWindow = self.pitchDrawing.window
self.gc = self.roll_gdkWindow.new_gc()
self.__CENTER = (self.roll_gdkWindow.get_geometry()[2]/2,
self.roll_gdkWindow.get_geometry()[3]/2)

self.menuTrack.set_sensitive(False)
gobject.timeout_add(9, self.__paint)
return False

def on_menuitem_ConnectTrack(self, widget, data=None):
self.on_menuitem_Connect(widget, data)
self.__connectTrack_source = gobject.timeout_add(100,
self.on_menuitem_Track,
widget, data)

def on_menuitem_Rumble(self, widget, data=None):
self.tracker.wiiMote.rumble = widget.active

def __paint(self):
angles = self.tracker.getAngles()

self.statusBar.pop(self.status_context)
self.statusBar.push(self.status_context,
# "R:%6.0f°\tP:%6.0f°\tSd (angles[0] *0 / pi,
# gles[1] * 180 / pi,
# self.tracker.filt_state))
"R:%6.0f°\tP:%6.0f°" % (angles[0] * 180 / pi,
(angles[1]+pi/2) * 180 / pi,))

self.roll_gdkWindow.clear()
self.roll_gdkWindow.draw_polygon(self.gc,
True,
rotateMoveScale(ARROW,
angles[0],
self.__CENTER,
(1, 0.5))
)
self.pitch_gdkWindow.clear()
self.pitch_gdkWindow.draw_polygon(self.gc,
True,
rotateMove(ARROW,
angles[1]+pi/2,
self.__CENTER)
)

#=======================================================================
# 3D stuff
#=======================================================================
# THETA = 0
# self.transform.RotateY(THETA * 180 / pi)
#
# # Pitch
# self.transform.RotateWXYZ(-angles[1] * 180 / pi,
# cos(THETA),
# 0,
# sin(THETA))
#
## Roll
# self.transform.RotateWXYZ(-angles[0] * 180 / pi,
# sin(THETA) * -sin(angles[1] - pi/2),
# cos(-angles[1] - pi/2),
# cos(THETA) * -sin(angles[1] - pi/2))
# self.renWin.Render()
#
# self.transform.Identity()
#=======================================================================
# 3D stuff ends
#=======================================================================

return not self.tracker.stopping

def NewWiitrackerWindow(wiiAddress):
"""NewWiitrackerWindow - returns a fully instantiated
WiitrackerWindow object. Use this function rather than
creating a WiitrackerWindow directly.
Expand All @@ -92,7 +213,7 @@ def NewWiitrackerWindow():
builder = gtk.Builder()
builder.add_from_file(ui_filename)
window = builder.get_object("wiitracker_window")
window.finish_initializing(builder)
window.finish_initializing(builder, wiiAddress)
return window

if __name__ == "__main__":
Expand All @@ -108,7 +229,8 @@ def NewWiitrackerWindow():
logging.debug('logging enabled')

#run the application
window = NewWiitrackerWindow()
window = NewWiitrackerWindow("00:17:AB:39:49:98")
window.show()
threads_init()
gtk.main()

29 changes: 13 additions & 16 deletions data/ui/WiitrackerWindow.ui
Expand Up @@ -5,9 +5,13 @@
<!-- interface-naming-policy project-wide -->
<!-- interface-local-resource-path ../media -->
<object class="WiitrackerWindow" id="wiitracker_window">
<property name="width_request">600</property>
<property name="height_request">500</property>
<property name="title" translatable="yes">Wiitracker</property>
<property name="width_request">440</property>
<property name="height_request">300</property>
<property name="title" translatable="yes">WiiTracker</property>
<property name="resizable">False</property>
<property name="window_position">center</property>
<property name="default_width">440</property>
<property name="default_height">250</property>
<property name="icon">../media/icon.png</property>
<signal name="destroy" handler="on_destroy"/>
<child>
Expand All @@ -31,6 +35,7 @@
<property name="visible">True</property>
<property name="label" translatable="yes">_Connect</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menuitem_Connect"/>
</object>
</child>
<child>
Expand All @@ -39,6 +44,7 @@
<property name="sensitive">False</property>
<property name="label" translatable="yes">_Track</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_menuitem_Track"/>
</object>
</child>
<child>
Expand All @@ -47,6 +53,7 @@
<property name="label" translatable="yes">Connect &amp; Trac_k</property>
<property name="use_underline">True</property>
<accelerator key="g" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<signal name="activate" handler="on_menuitem_ConnectTrack"/>
</object>
</child>
<child>
Expand Down Expand Up @@ -83,6 +90,7 @@
<property name="label" translatable="yes">_Rumble</property>
<property name="use_underline">True</property>
<accelerator key="r" signal="activate" modifiers="GDK_CONTROL_MASK"/>
<signal name="toggled" handler="on_menuitem_Rumble"/>
</object>
</child>
<child>
Expand Down Expand Up @@ -163,21 +171,10 @@
</packing>
</child>
<child>
<object class="GtkStatusbar" id="statusbar1">
<object class="GtkStatusbar" id="statusbar">
<property name="visible">True</property>
<property name="spacing">2</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="xpad">5</property>
<property name="ypad">5</property>
<property name="label" translatable="yes">Status Area</property>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<property name="has_resize_grip">False</property>
</object>
<packing>
<property name="expand">False</property>
Expand Down

0 comments on commit dd324de

Please sign in to comment.