changeset 33:92dba082d957

Added trail and EVALUATION_POINT event type.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Tue, 26 Mar 2013 18:41:42 +0000
parents ab7c86d0f3d8
children 94df2cd72d7b
files HelpViewController.xib IntroViewController.xib QuestionnaireViewController.mm QuestionnaireViewController.xib TimedSessionController.mm eventLogger.h eventLogger.mm grid.mm testApp.h testApp.mm
diffstat 10 files changed, 368 insertions(+), 101 deletions(-) [+]
line wrap: on
line diff
--- a/HelpViewController.xib	Fri Mar 08 14:54:55 2013 +0000
+++ b/HelpViewController.xib	Tue Mar 26 18:41:42 2013 +0000
@@ -56,37 +56,37 @@
 						<object class="NSAttributedString" key="IBUIAttributedText">
 							<string type="base64-UTF8" key="NSString">SU5TVFJVQ1RJT05TDQ1QcmVzcyB0aGUgcGxheSBidXR0b24gYXQgdGhlIHRvcCB0byBzdGFydCB0aGUg
 c2VxdWVuY2VyLiBQcmVzcyBwYXVzZSB0byBzdG9wLg1Zb3Ugd2lsbCBiZSB1c2luZyBhbGwgdGhyZWUg
-bW9kZXM6IGZpcnN0IHRoZSBTTElERVJTLCB0aGVuIHRoZSBaT09NRVIgYW5kIHRoZW4gQk9USCBmb3Ig
-YWJvdXQgNiBtaW51dGVzIGVhY2guIEFmdGVyIHlvdSBjb21wbGV0ZSB0aGUgdGltZWQgc2Vzc2lvbnMg
-YW5kIHRoZSBxdWVzdGlvbm5haXJlLCB5b3UgY2FuIGFjY2VzcyB0aGVzZSB1c2luZyB0aGUgdGFicyBh
-dCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uIA0NT1BFUkFUSU5HIFRIRSBaT09NRVLigKgNVGhlIHJl
-ZCBjcm9zc2hhaXJzIGluIHRoZSBjZW50cmUgb2YgdGhlIHNjcmVlbiByZXByZXNlbnQgdGhlIHBvaW50
-IG9uIHRoZSBzdXJmYWNlIHRoYXQgeW91IGFyZSBsaXN0ZW5pbmcgdG8uIFNjcm9sbCB0aGUgc3VyZmFj
-ZSB1bmRlciB0aGlzIHBvaW50IHRvIG1vdmUgdG8gYSBkaWZmZXJlbnQgc291bmQuIEluIEJPVEggbW9k
-ZSB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNlZSB0aGUgZWZmZWN0IG9mIHRoaXMgb24gdGhlIHNsaWRlcnMu
-IExpa2V3aXNlIGlmIHlvdSBtb3ZlIGEgc2xpZGVyIHlvdSB3aWxsIGhvcCB0byBhIGRpZmZlcmVudCBw
-b2ludCBvbiB0aGUgc3VyZmFjZS7igKgNU2F2ZSBhbnkgc291bmRzL3NlcXVlbmNlcyB0aGF0IHlvdSBs
-aWtlIHVzaW5nIHRoZSDigJxzYXZlIHByZXNldOKAnSBidXR0b24uIEEgbWFya2VyIHdpbGwgYXBwZWFy
-IG9uIHRoZSB6b29tIHN1cmZhY2UuIElmIHlvdSBtb3ZlIHRvIHRoZSB2aWNpbml0eSBvZiBhIHByZXNl
-dCBtYXJrZXIsIHRoZSBjcm9zc2hhaXJzIHdpbGwgc25hcCB0byB0aGUgcHJlc2V0LCBpdHMgZGV0YWls
-cyB3aWxsIGFwcGVhciBhbmQgdGhlIHNvdW5kIHdpbGwgcGxheS4N4oCoVXNpbmcgdHdvIGZpbmdlciBw
-aW5jaCBtb3ZlbWVudCB6b29tcyB0aGUgc3VyZmFjZSBqdXN0IGFzIGluIGEgbWFwcyBhcHAuIFRoZSBm
-dXJ0aGVyIHlvdSB6b29tIGluLCB0aGUgbGVzcyB0aGUgc291bmQgd2lsbCBjaGFuZ2UgYXMgeW91IHNj
-cm9sbCBhcm91bmQuIEZvciBleGFtcGxlIHRoZSB5ZWxsb3cgbGluZXMgdGhhdCBhcHBlYXIgYXQgdGhl
-IGxhcmdlc3Qgc2NhbGUgY29ycmVzcG9uZCB0byB0aGUgc2xpZGVycyBqdW1waW5nIDY0IHVuaXRzLiBU
-aGUgd2hpdGUgbGluZXMgYXQgdGhlIHNtYWxsZXN0IHNjYWxlIGNvcnJlc3BvbmQgdG8ganVtcHMgb2Yg
-b25lIHVuaXQuIFRoZXJlIGFyZSA3IGxldmVsczrigKjigKhZZWxsb3cgPSA2NOKAqFRlYWwgPSAzMuKA
-qFB1cnBsZSA9IDE24oCoR3JlZW4gPSA44oCoRGFyayBCbHVlID0gNOKAqFJlZCA9IDLigKhXaGl0ZSA9
-IDHigKjigKhMT0NL4oCo4oCoSWYgeW91IGZpbmQgYSBzZXF1ZW5jZSB5b3UgbGlrZSBidXQgd2FudCB0
-byBjaGFuZ2UgdGhlIHN5bnRoIHNvdW5kIHVzZSB0aGUgIkxvY2sgU2VxdWVuY2UgKFgpIiBidXR0b24u
-IFRoaXMgd2lsbCBwcmV2ZW50IHlvdSBhY2NpZGVudGFsbHkgbW92aW5nIGluIGZyb20gbGVmdCB0byBy
-aWdodCBhbmQgbWVzc2luZyB1cCB5b3VyIG5vdGUgcGF0dGVybi4gU2ltaWxhcmx5IGlmIHlvdSBmaW5k
-IGEgc3ludGggc291bmQgdGhhdCB5b3UgbGlrZSwgYnV0IHdhbnQgdG8gY2hhbmdlIHRoZSBub3RlIHNl
-cXVlbmNlLCB1c2UgdGhlICJMb2NrIFN5bnRoIChZKSIgYnV0dG9uLiDigKjigKhSQU5ET01JU0XigKji
-gKhVc2UgdGhlIHJhbmRvbWlzZSB0byBqdW1wIHRvIGEgcmFuZG9tIHBvaW50IG9uIHRoZSBncmlkLiDi
-gKjigKhUSEUgUVVFU1RJT05OQUlSReKAqOKAqFRoZXJlIGFyZSBhcm91bmQgMTcgc2ltcGxlIG11bHRp
-cGxlIGNob2ljZSBxdWVzdGlvbnMgdG8gYW5zd2VyLCBhbmQgYSB0ZXh0IGZlZWRiYWNrIGJveC4gWW91
-ciBmZWVkYmFjayBpcyBhcHByZWNpYXRlZCENDQ</string>
+bW9kZXM6IHRoZSBTTElERVJTLCB0aGUgWk9PTUVSIGFuZCBCT1RIIGZvciBhYm91dCA1IG1pbnV0ZXMg
+ZWFjaCwgaW4gYSByYW5kb20gb3JkZXIuIEFmdGVyIHlvdSBjb21wbGV0ZSB0aGUgdGltZWQgc2Vzc2lv
+bnMgYW5kIHRoZSBxdWVzdGlvbm5haXJlLCB5b3UgY2FuIGFjY2VzcyB0aGVzZSB1c2luZyB0aGUgdGFi
+cyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uIA0NT1BFUkFUSU5HIFRIRSBaT09NRVLigKgNVGhl
+IHJlZCBjcm9zc2hhaXJzIGluIHRoZSBjZW50cmUgb2YgdGhlIHNjcmVlbiByZXByZXNlbnQgdGhlIHBv
+aW50IG9uIHRoZSBzdXJmYWNlIHRoYXQgeW91IGFyZSBsaXN0ZW5pbmcgdG8uIFNjcm9sbCB0aGUgc3Vy
+ZmFjZSB1bmRlciB0aGlzIHBvaW50IHRvIG1vdmUgdG8gYSBkaWZmZXJlbnQgc291bmQuIEluIEJPVEgg
+bW9kZSB5b3Ugd2lsbCBiZSBhYmxlIHRvIHNlZSB0aGUgZWZmZWN0IG9mIHRoaXMgb24gdGhlIHNsaWRl
+cnMuIExpa2V3aXNlIGlmIHlvdSBtb3ZlIGEgc2xpZGVyIHlvdSB3aWxsIGhvcCB0byBhIGRpZmZlcmVu
+dCBwb2ludCBvbiB0aGUgc3VyZmFjZS7igKgNU2F2ZSBhbnkgc291bmRzL3NlcXVlbmNlcyB0aGF0IHlv
+dSBsaWtlIHVzaW5nIHRoZSDigJxzYXZlIHByZXNldOKAnSBidXR0b24uIEEgbWFya2VyIHdpbGwgYXBw
+ZWFyIG9uIHRoZSB6b29tIHN1cmZhY2UuIElmIHlvdSBtb3ZlIHRvIHRoZSB2aWNpbml0eSBvZiBhIHBy
+ZXNldCBtYXJrZXIsIHRoZSBjcm9zc2hhaXJzIHdpbGwgc25hcCB0byB0aGUgcHJlc2V0LCBpdHMgZGV0
+YWlscyB3aWxsIGFwcGVhciBhbmQgdGhhdCBzb3VuZCB3aWxsIHBsYXkuDeKAqFVzaW5nIHR3byBmaW5n
+ZXIgcGluY2ggbW92ZW1lbnQgem9vbXMgdGhlIHN1cmZhY2UganVzdCBhcyBpbiBhIG1hcHMgYXBwLiBU
+aGUgZnVydGhlciB5b3Ugem9vbSBpbiwgdGhlIGxlc3MgdGhlIHNvdW5kIHdpbGwgY2hhbmdlIGFzIHlv
+dSBzY3JvbGwgYXJvdW5kLiBGb3IgZXhhbXBsZSB0aGUgeWVsbG93IGxpbmVzIHRoYXQgYXBwZWFyIGF0
+IHRoZSBsYXJnZXN0IHNjYWxlIGNvcnJlc3BvbmQgdG8gdGhlIHNsaWRlcnMganVtcGluZyA2NCB1bml0
+cy4gVGhlIHdoaXRlIGxpbmVzIGF0IHRoZSBzbWFsbGVzdCBzY2FsZSBjb3JyZXNwb25kIHRvIGp1bXBz
+IG9mIG9uZSB1bml0LiBUaGVyZSBhcmUgNyBsZXZlbHM64oCo4oCoWWVsbG93ID0gNjTigKhUZWFsID0g
+MzLigKhQdXJwbGUgPSAxNuKAqEdyZWVuID0gOOKAqERhcmsgQmx1ZSA9IDTigKhSZWQgPSAy4oCoV2hp
+dGUgPSAx4oCo4oCoTE9DS+KAqOKAqElmIHlvdSBmaW5kIGEgc2VxdWVuY2UgeW91IGxpa2UgYnV0IHdh
+bnQgdG8gY2hhbmdlIHRoZSBzeW50aCBzb3VuZCB1c2UgdGhlICJMb2NrIFNlcXVlbmNlIChYKSIgYnV0
+dG9uLiBUaGlzIHdpbGwgcHJldmVudCB5b3UgYWNjaWRlbnRhbGx5IG1vdmluZyBpbiBmcm9tIGxlZnQg
+dG8gcmlnaHQgYW5kIG1lc3NpbmcgdXAgeW91ciBub3RlIHBhdHRlcm4uIFNpbWlsYXJseSBpZiB5b3Ug
+ZmluZCBhIHN5bnRoIHNvdW5kIHRoYXQgeW91IGxpa2UsIGJ1dCB3YW50IHRvIGNoYW5nZSB0aGUgbm90
+ZSBzZXF1ZW5jZSwgdXNlIHRoZSAiTG9jayBTeW50aCAoWSkiIGJ1dHRvbi4g4oCo4oCoUkFORE9NSVNF
+4oCo4oCoVXNlIHRoZSByYW5kb21pc2UgdG8ganVtcCB0byBhIHJhbmRvbSBwb2ludCBvbiB0aGUgZ3Jp
+ZC4g4oCo4oCoVEhFIFFVRVNUSU9OTkFJUkXigKjigKhUaGVyZSBhcmUgYXJvdW5kIDE1IHNpbXBsZSBt
+dWx0aXBsZSBjaG9pY2UgcXVlc3Rpb25zIHRvIGFuc3dlciwgYW5kIGEgdGV4dCBmZWVkYmFjayBib3gu
+IFlvdXIgZmVlZGJhY2sgaXMgYXBwcmVjaWF0ZWQhDQ0</string>
 							<dictionary key="NSAttributes">
 								<object class="NSColor" key="NSColor">
 									<int key="NSColorSpace">1</int>
@@ -114,7 +114,6 @@
 						<string key="NSFrame">{{319, 941}, {130, 44}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
 						<reference key="NSWindow"/>
-						<reference key="NSNextKeyView"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
--- a/IntroViewController.xib	Fri Mar 08 14:54:55 2013 +0000
+++ b/IntroViewController.xib	Tue Mar 26 18:41:42 2013 +0000
@@ -98,36 +98,36 @@
 dXNlIHRoZSBkYXRhIHRvIGNyZWF0ZSBzeW50aHMgdGhhdCBhcmUgZWFzaWVyIHRvIG5hdmlnYXRlLCBh
 bmQgaG9wZWZ1bGx5IGVuY291cmFnZSBjcmVhdGl2aXR5Lg0NVGhlcmUgYXJlIHR3byBpbnRlcmZhY2Vz
 IHByZXNlbnRlZCBoZXJlLiBUaGUgZmlyc3QgaXMgb25lIHlvdSB3aWxsIHByb2JhYmx5IGJlIHVzZWQg
-dG8gaWYgeW91IGFyZSBhIG11c2ljaWFuOiAxMCBzbGlkZXJzIGZvciBlYWNoIG9mIHRoZSBwYXJhbWV0
-ZXJzLiBUaGUgc2Vjb25kIGlzIHNvbWV3aGF0IG5ldzogZXZlcnkgb25lIG9mIHRoZSBiaWxsaW9uIHRy
-aWxsaW9uIHBvaW50cyBoYXMgYmVlbiBtYXBwZWQgdG8gYSAyRCBzdXJmYWNlLiBCdXQgYmFzaWNhbGx5
-LCB0aGUgZnVydGhlciB5b3UgdHJhdmVsIGFsb25nIHRoaXMgMkQgc3VyZmFjZSwgdGhlIG1vcmUgZGlm
-ZmVyZW50IHRoZSBzb3VuZCB3aWxsIGJlY29tZS4NDVVwIGRvd24gbW92ZW1lbnQgY29udHJvbHMgdGhl
-IHN5bnRoIHRpbWJyZSwgbGVmdCByaWdodCBjb250cm9scyB0aGUgc2VxdWVuY2VyLiBXaGVuIHlvdSBj
-bGljayDigJxzYXZlIHByZXNldOKAnSB5b3Ugd2lsbCBkcm9wIGEgcGluIG9udG8gdGhlIHN1cmZhY2Us
-IGFuZCB5b3UgY2FuIHJldmlzaXQgdGhpcyBwb2ludCBhdCBhbnl0aW1lIGJ5IHNjcm9sbGluZyB0byBp
-dC4gVGhpbmsgb2YgaXQgbGlrZSBhICJHb29nbGUgTWFwcyIgZm9yIHN5bnRoIHNvdW5kcy4uLg0NWW91
-IGNhbiB1c2UgYSBwaW5jaCBnZXN0dXJlIHRvIHpvb20gaW4gYW5kIG91dCBvZiB0aGUgc3VyZmFjZS4g
-SW4gdGhpcyB3YXksIHlvdSBjYW4gZXhwbG9yZSB0aGUgIm5laWdoYm91cmhvb2QiIG9mIGEgcGFydGlj
-dWxhciBzb3VuZC4gWm9vbWluZyBpbiB3aWxsIGVuYWJsZSB5b3UgdG8gZXhwbG9yZSBzbWFsbGVyIGxv
-Y2FsaXRpZXMgb2YgdGhlIHNvdW5kIHNwYWNlLiBab29taW5nIG91dCB3aWxsIGdpdmUgeW91IGEgYmln
-Z2VyIHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSB0cmFuc2l0aW9ucyB3aWxsIGJlY29tZSBt
-b3JlIHN1ZGRlbiBhbmQgcmFuZG9tIGFzIHlvdSBtb3ZlIGJpZ2dlciBkaXN0YW5jZXMuDQ1XaGF0IHdl
-IGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRvIGlzIHVzZSB0aGUgem9vbWVyLCB0
-aGUgc2xpZGVycyBhbmQgYSBjb21iaW5hdGlvbiBvZiBib3RoIGZvciA1IG1pbnV0ZXMgZWFjaCwgYW5k
-IHNhdmUgYW55IHNvdW5kcyB0aGF0IHlvdSBsaWtlLiBBbHNvIGNoZWNrIG91dCB0aGUgInJhbmRvbWlz
-ZSIgYW5kICJsb2NrIiBidXR0b25zLiBBZnRlciB0aGlzIGEgc2hvcnQgcXVlc3Rpb25uYWlyZSB3aWxs
-IGFwcGVhciB0aGF0IHdpbGwgaGVscCB1cyBhc3Nlc3MgdGhlIGludGVyZmFjZSBmdXJ0aGVyLiBBZnRl
-ciB0aGF0LCBwbGVhc2UgZmVlbCBmcmVlIHRvIHVzZSBpdCBzb21lIG1vcmU6IHRoZSBtb3JlIGRhdGEg
-d2UgZ2V0IHRoZSBiZXR0ZXIuIEZ1cnRoZXIgZXhjaXRpbmcgZmVhdHVyZXMgYXJlIHBsYW5uZWQgZm9y
-IHRoaXMgYXBwLCBzbyBwbGVhc2Ugd2F0Y2ggb3V0IGZvciB1cGRhdGVzLg0NTk9URTogWW91ciBhY3Rp
-b25zIHdpbGwgYmUgbG9nZ2VkLCBhbmQgc2VudCB0byBhIHNlY3VyZSBzZXJ2ZXIgaGVyZSBhdCBRdWVl
-biBNYXJ5IFVuaXZlcnNpdHkuICBIb3dldmVyIG5vIHBlcnNvbmFsIGRhdGEgKG5hbWUsIGVtYWlsIGV0
-Yy4pIHdpbGwgYmUgY29sbGVjdGVkLCBhc3NvY2lhdGVkIHdpdGggdGhpcyBJRCBvciBzdG9yZWQgaW4g
-dGhlIGRhdGFiYXNlLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYXJlIGNvbm5lY3Rl
-ZCB0byBXaUZpIGludGVybmV0IHdoaWxzdCB1c2luZyB0aGlzIEFwcCwgb3RoZXJ3aXNlIHRoZSBsb2cg
-ZGF0YSB3aWxsIHRha2UgdXAgc3BhY2Ugb24geW91ciBkZXZpY2UuDVRvIGNvbnNlbnQgdG8gdGhpcyBw
-bGVhc2UgcHJlc3MgIkFncmVlIiBiZWxvdy4gVG8gZGVjbGluZSBqdXN0IGV4aXQgdGhlIGFwcC4NA</bytes>
+dG8gaWYgeW91IGFyZSBhbiBlbGVjdHJvbmljIG11c2ljaWFuOiAxMCBzbGlkZXJzIGZvciBlYWNoIG9m
+IHRoZSBwYXJhbWV0ZXJzLiBUaGUgc2Vjb25kIGlzIHNvbWV3aGF0IG5ldzogZXZlcnkgb25lIG9mIHRo
+ZSBiaWxsaW9uIHRyaWxsaW9uIHBvaW50cyBoYXMgYmVlbiBtYXBwZWQgdG8gYSAyRCBzdXJmYWNlLiBC
+dXQgYmFzaWNhbGx5LCB0aGUgZnVydGhlciB5b3UgdHJhdmVsIGFsb25nIHRoaXMgMkQgc3VyZmFjZSwg
+dGhlIG1vcmUgZGlmZmVyZW50IHRoZSBzb3VuZCB3aWxsIGJlY29tZS4NDVVwIGRvd24gbW92ZW1lbnQg
+Y29udHJvbHMgdGhlIHN5bnRoIHRpbWJyZSwgbGVmdCByaWdodCBjb250cm9scyB0aGUgc2VxdWVuY2Vy
+LiBXaGVuIHlvdSBjbGljayDigJxzYXZlIHByZXNldOKAnSB5b3Ugd2lsbCBkcm9wIGEgcGluIG9udG8g
+dGhlIHN1cmZhY2UsIGFuZCB5b3UgY2FuIHJldmlzaXQgdGhpcyBwb2ludCBhdCBhbnl0aW1lIGJ5IHNj
+cm9sbGluZyB0byBpdC4gVGhpbmsgb2YgaXQgbGlrZSBhICJHb29nbGUgTWFwcyIgZm9yIHN5bnRoIHNv
+dW5kcy4uLg0NWW91IGNhbiB1c2UgYSBwaW5jaCBnZXN0dXJlIHRvIHpvb20gaW4gYW5kIG91dCBvZiB0
+aGUgc3VyZmFjZS4gSW4gdGhpcyB3YXksIHlvdSBjYW4gZXhwbG9yZSB0aGUgIm5laWdoYm91cmhvb2Qi
+IG9mIGEgcGFydGljdWxhciBzb3VuZC4gWm9vbWluZyBpbiB3aWxsIGVuYWJsZSB5b3UgdG8gZXhwbG9y
+ZSBzbWFsbGVyIGxvY2FsaXRpZXMgb2YgdGhlIHNvdW5kIHNwYWNlLiBab29taW5nIG91dCB3aWxsIGdp
+dmUgeW91IGEgYmlnZ2VyIHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSB0cmFuc2l0aW9ucyB3
+aWxsIGJlY29tZSBtb3JlIHN1ZGRlbiBhbmQgcmFuZG9tIGFzIHlvdSBtb3ZlIGJpZ2dlciBkaXN0YW5j
+ZXMuDQ1XaGF0IHdlIGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRvIGlzIHVzZSB0
+aGUgem9vbWVyLCB0aGUgc2xpZGVycyBhbmQgYSBjb21iaW5hdGlvbiBvZiBib3RoIGZvciA1IG1pbnV0
+ZXMgZWFjaCwgYW5kIHNhdmUgYW55IHNvdW5kcyB0aGF0IHlvdSBsaWtlLiBUaGUgaW50ZXJmYWNlcyB3
+aWxsIHN3YXAgYXV0b21hdGljYWxseS4gQWxzbyBjaGVjayBvdXQgdGhlICJyYW5kb21pc2UiIGFuZCAi
+bG9jayIgYnV0dG9ucy4gQWZ0ZXIgdGhpcyBhIHNob3J0IHF1ZXN0aW9ubmFpcmUgd2lsbCBhcHBlYXIg
+dGhhdCB3aWxsIGhlbHAgdXMgYXNzZXNzIHRoZSBpbnRlcmZhY2UgZnVydGhlci4gQWZ0ZXIgdGhhdCwg
+cGxlYXNlIGZlZWwgZnJlZSB0byB1c2UgaXQgc29tZSBtb3JlOiB0aGUgbW9yZSBkYXRhIHdlIGdldCB0
+aGUgYmV0dGVyLiDigKjigKhQTEVBU0UgTk9URTogWW91ciBhY3Rpb25zIHdpbGwgYmUgbG9nZ2VkLCBh
+bmQgc2VudCB0byBhIHNlY3VyZSBzZXJ2ZXIgaGVyZSBhdCBRdWVlbiBNYXJ5IFVuaXZlcnNpdHkuICBI
+b3dldmVyIG5vIHBlcnNvbmFsIGRhdGEgKG5hbWUsIGVtYWlsIGV0Yy4pIHdpbGwgYmUgY29sbGVjdGVk
+LCBhc3NvY2lhdGVkIHdpdGggdGhpcyBJRCBvciBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLiBJdCBpcyBo
+aWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYXJlIGNvbm5lY3RlZCB0byBXaUZpIGludGVybmV0IHdo
+aWxzdCB1c2luZyB0aGlzIEFwcCwgb3RoZXJ3aXNlIHRoZSBsb2cgZGF0YSB3aWxsIHRha2UgdXAgc3Bh
+Y2Ugb24geW91ciBkZXZpY2UuDVRvIGNvbnNlbnQgdG8gdGhpcyBwbGVhc2UgcHJlc3MgIkFncmVlIiBi
+ZWxvdy4gVG8gZGVjbGluZSBqdXN0IGV4aXQgdGhlIGFwcC4NA</bytes>
 						</object>
 						<object class="NSColor" key="IBUITextColor">
 							<int key="NSColorSpace">1</int>
--- a/QuestionnaireViewController.mm	Fri Mar 08 14:54:55 2013 +0000
+++ b/QuestionnaireViewController.mm	Tue Mar 26 18:41:42 2013 +0000
@@ -59,7 +59,7 @@
     // load question 1    
     [self loadQuestion:self.currentQuestionIndex];
     
-    self.previousButton.hidden = YES; // dont bother
+    self.previousButton.hidden = NO; //  bother
     self.commentText.hidden = YES;
     self.finishButton.hidden = YES;
     self.nextButton.hidden = YES;
@@ -171,7 +171,7 @@
     self.numberChooser.hidden = YES;
     self.commentText.hidden = NO;
     
-    self.questionText.text = @"Thanks for helping science help you. Feel free to add further comments in the text box below, and then press 'finish' to go back and use the app, unhassled.";
+    self.questionText.text = @"Thanks for helping science help you. Feel free to add further comments in the text box below, and then press 'finish' to go back and use the app.";
 }
 
 //----------------------------------------------------------------
@@ -187,7 +187,7 @@
     
     
     // refresh picker view content
-    [picker reloadComponent:0];
+    //[picker reloadComponent:0];
 
     // show correct option number labels
     if(curQ.questionType == AGREE_DISAGREE){
@@ -199,7 +199,9 @@
     }
 
     //NSLog(@"Prev answer answerInt %d", curQ.answer);
-    [picker selectRow:2 inComponent:0 animated:YES];
+    //[picker selectRow:2 inComponent:0 animated:YES];
+    
+    // what about unselecting segment?
 
 }
 // 1/3/13 removed q 6 and 15. now only 15 qs
@@ -220,7 +222,6 @@
                           [[Question alloc] initWithTextAndType:@"The interface better for generating new ideas was...":SLIDERS_ZOOMER], 
                           [[Question alloc] initWithTextAndType:@"The interface better for performing live would be...":SLIDERS_ZOOMER],
                           [[Question alloc] initWithTextAndType:@"The Zoomer was an improvement on just using a randomiser.":AGREE_DISAGREE],
-                        
                           [[Question alloc] initWithTextAndType:@"The combination of Zoomer and Sliders was better than either individually.":AGREE_DISAGREE],
                           [[Question alloc] initWithTextAndType:@"Overall, the interface I preferred using was...":SLIDERS_ZOOMER], // ??????
                           nil];
--- a/QuestionnaireViewController.xib	Fri Mar 08 14:54:55 2013 +0000
+++ b/QuestionnaireViewController.xib	Tue Mar 26 18:41:42 2013 +0000
@@ -44,6 +44,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{324, 706}, {121, 44}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="960474577"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
@@ -79,6 +80,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{143, 220}, {275, 53}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="692955189"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
@@ -111,6 +113,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{144, 281}, {472, 138}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="660724550"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
@@ -143,6 +146,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{425, 706}, {121, 44}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="791686696"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
@@ -163,13 +167,13 @@
 					<object class="IBUIButton" id="356964106">
 						<reference key="NSNextResponder" ref="766721923"/>
 						<int key="NSvFlags">292</int>
-						<string key="NSFrame">{{212, 706}, {157, 44}}</string>
+						<string key="NSFrame">{{51, 706}, {157, 44}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="871929113"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<bool key="IBUIEnabled">NO</bool>
 						<int key="IBUIContentHorizontalAlignment">0</int>
 						<int key="IBUIContentVerticalAlignment">0</int>
 						<int key="IBUIButtonType">1</int>
@@ -188,6 +192,7 @@
 						<int key="NSvFlags">-2147483358</int>
 						<string key="NSFrame">{{413, 788}, {334, 216}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 						<bool key="IBUIShowsSelectionIndicator">YES</bool>
@@ -197,6 +202,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{212, 468}, {334, 230}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="356964106"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<object class="NSColor" key="IBUIBackgroundColor">
@@ -227,6 +233,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{51, 533}, {667, 44}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="960632081"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
@@ -278,6 +285,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{7, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="638395666"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="340544853"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -314,6 +322,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{139, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="638395666"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="674807401"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -341,6 +350,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{267, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="638395666"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="85392105"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -368,6 +378,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{399, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="638395666"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="36668958"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -395,6 +406,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{535, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="638395666"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="838658605"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -420,6 +432,7 @@
 						</array>
 						<string key="NSFrame">{{51, 416}, {667, 118}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="316486170"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<object class="NSColor" key="IBUIBackgroundColor">
@@ -437,6 +450,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{7, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="692955189"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="790263268"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -464,6 +478,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{139, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="692955189"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="355647270"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -491,6 +506,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{267, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="692955189"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="404206660"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -518,6 +534,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{399, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="692955189"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="78723594"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -545,6 +562,7 @@
 								<int key="NSvFlags">292</int>
 								<string key="NSFrame">{{535, 29}, {132, 69}}</string>
 								<reference key="NSSuperview" ref="692955189"/>
+								<reference key="NSWindow"/>
 								<reference key="NSNextKeyView" ref="638395666"/>
 								<string key="NSReuseIdentifierKey">_NS:9</string>
 								<bool key="IBUIOpaque">NO</bool>
@@ -570,6 +588,7 @@
 						</array>
 						<string key="NSFrame">{{50, 416}, {667, 118}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="353586444"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<object class="NSColor" key="IBUIBackgroundColor">
@@ -583,6 +602,7 @@
 						<int key="NSvFlags">292</int>
 						<string key="NSFrame">{{143, 104}, {434, 21}}</string>
 						<reference key="NSSuperview" ref="766721923"/>
+						<reference key="NSWindow"/>
 						<reference key="NSNextKeyView" ref="783180915"/>
 						<string key="NSReuseIdentifierKey">_NS:9</string>
 						<bool key="IBUIOpaque">NO</bool>
@@ -605,6 +625,7 @@
 				</array>
 				<string key="NSFrameSize">{768, 1024}</string>
 				<reference key="NSSuperview"/>
+				<reference key="NSWindow"/>
 				<reference key="NSNextKeyView" ref="831894070"/>
 				<object class="NSColor" key="IBUIBackgroundColor">
 					<int key="NSColorSpace">1</int>
@@ -806,7 +827,6 @@
 						<int key="objectID">2</int>
 						<reference key="object" ref="766721923"/>
 						<array class="NSMutableArray" key="children">
-							<reference ref="356964106"/>
 							<reference ref="960474577"/>
 							<reference ref="871929113"/>
 							<reference ref="791686696"/>
@@ -817,6 +837,7 @@
 							<reference ref="838658605"/>
 							<reference ref="783180915"/>
 							<reference ref="831894070"/>
+							<reference ref="356964106"/>
 						</array>
 						<reference key="parent" ref="0"/>
 					</object>
@@ -979,7 +1000,106 @@
 			<nil key="sourceID"/>
 			<int key="maxID">91</int>
 		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes"/>
+		<object class="IBClassDescriber" key="IBDocument.Classes">
+			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
+				<object class="IBPartialClassDescription">
+					<string key="className">QuestionnaireViewController</string>
+					<string key="superclassName">UIViewController</string>
+					<dictionary class="NSMutableDictionary" key="actions">
+						<string key="answerChosen:">id</string>
+						<string key="hide:">id</string>
+						<string key="nextQuestionPressed:">id</string>
+						<string key="previousQuestionPressed:">id</string>
+						<string key="show:">id</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="actionInfosByName">
+						<object class="IBActionInfo" key="answerChosen:">
+							<string key="name">answerChosen:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="hide:">
+							<string key="name">hide:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="nextQuestionPressed:">
+							<string key="name">nextQuestionPressed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="previousQuestionPressed:">
+							<string key="name">previousQuestionPressed:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+						<object class="IBActionInfo" key="show:">
+							<string key="name">show:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="commentText">UITextView</string>
+						<string key="finishButton">UIButton</string>
+						<string key="interfacePreferenceOptions">UIView</string>
+						<string key="lickertOptions">UIView</string>
+						<string key="nextButton">UIButton</string>
+						<string key="numberChooser">UISegmentedControl</string>
+						<string key="picker">UIPickerView</string>
+						<string key="pleaseAnswer">UILabel</string>
+						<string key="previousButton">UIButton</string>
+						<string key="questionText">UILabel</string>
+						<string key="titleText">UILabel</string>
+					</dictionary>
+					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="commentText">
+							<string key="name">commentText</string>
+							<string key="candidateClassName">UITextView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="finishButton">
+							<string key="name">finishButton</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="interfacePreferenceOptions">
+							<string key="name">interfacePreferenceOptions</string>
+							<string key="candidateClassName">UIView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="lickertOptions">
+							<string key="name">lickertOptions</string>
+							<string key="candidateClassName">UIView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="nextButton">
+							<string key="name">nextButton</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="numberChooser">
+							<string key="name">numberChooser</string>
+							<string key="candidateClassName">UISegmentedControl</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="picker">
+							<string key="name">picker</string>
+							<string key="candidateClassName">UIPickerView</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="pleaseAnswer">
+							<string key="name">pleaseAnswer</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="previousButton">
+							<string key="name">previousButton</string>
+							<string key="candidateClassName">UIButton</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="questionText">
+							<string key="name">questionText</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+						<object class="IBToOneOutletInfo" key="titleText">
+							<string key="name">titleText</string>
+							<string key="candidateClassName">UILabel</string>
+						</object>
+					</dictionary>
+					<object class="IBClassDescriptionSource" key="sourceIdentifier">
+						<string key="majorKey">IBProjectSource</string>
+						<string key="minorKey">./Classes/QuestionnaireViewController.h</string>
+					</object>
+				</object>
+			</array>
+		</object>
 		<int key="IBDocument.localizationMode">0</int>
 		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
--- a/TimedSessionController.mm	Fri Mar 08 14:54:55 2013 +0000
+++ b/TimedSessionController.mm	Tue Mar 26 18:41:42 2013 +0000
@@ -18,10 +18,10 @@
     int scount;
 
     NSArray *alertMessages = [NSArray arrayWithObjects:
-                      @"Thanks, now try the sliders only",
-                      @"Thanks, now try the sliders and the Zoomer together",
-                      @"Thanks, now try the zoomer only",
-                      @"Thanks, now please take the questionnaire",nil];
+                      @"Now try the sliders only.",
+                      @"Now try the sliders and the Zoomer together.",
+                      @"Now try the zoomer only.",
+                      @"Now please take the questionnaire.",nil];
 
 // nicer if it was initWithAppRef ?
 - (void)setAppRef:(id)theOFApp{
@@ -34,7 +34,7 @@
     NSString *themessage;
     themessage = [alertMessages objectAtIndex:orders[theOrder][0]];
     UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Thanks!"
-                                                     message:themessage
+                                                     message:[themessage stringByAppendingString:@" Press play to start sound."]
                                                     delegate:self
                                            cancelButtonTitle:@"Continue"
                                            otherButtonTitles:nil];
--- a/eventLogger.h	Fri Mar 08 14:54:55 2013 +0000
+++ b/eventLogger.h	Tue Mar 26 18:41:42 2013 +0000
@@ -26,16 +26,17 @@
 #include "testApp.h"
 #include "presetManager.h"
 #import "ServerComms.h"
- 
-#define EVENT_THIN_FACTOR 10
+#include "grid.h"
+
+#define EVENT_THIN_FACTOR 15
 #define EVENT_LOG_FILENAME "log.json"
-//#define LOGGING_SERVER_URL "http://www.isophonics.net/datacollector/"
-#define LOGGING_SERVER_URL "http://127.0.0.1:8080/testservice/"
 #define UPLOAD_CHUNK_SIZE 1000
+#define APP_CREATION_TIME 381429000000   // milliseconds to the time i wrote this wee blighter. saves digits
+#define SCROLL_TRAIL_LENGTH 200
+#define PROGRAM_VERSION 0.3 // IMPORTANT TOCHNAGE!
 
-#define APP_CREATION_TIME 381429000000   // milliseconds to the time i wrote this wee blighter. saves digits
+#define SUPERVISED // this def will save files
 
-#define PROGRAM_VERSION 0.3 // IMPORTANT TOCHNAGE!
 
 // can add but don't change ordering - this will invalidate logs
 enum leventType {SAVE_PRESET,  // 0
@@ -58,7 +59,9 @@
     PLAY_PRESSED,           // 17
     PAUSE_PRESSED,         // 18
     HELP_PRESSED,            // 19
-    QUESTIONNAIRE_COMPLETED};     // 20
+    QUESTIONNAIRE_COMPLETED,  // 20
+    EVALUATION_POINT,       // 21
+    EMPTY_EVENT};          // 22
 
 //---------------------------------------------------------------------------
 
@@ -102,6 +105,7 @@
         jevt["eTime"] = eventTime;
         return jevt;
     }
+    void draw();
 };
 //---------------------------------------------------------------------------
 // streams no longer used
@@ -167,11 +171,15 @@
     
     void printAll();
     void saveSessionToFile();
+    void drawTrail(const TwoVector min, const TwoVector max);
+    vector<lEvent> getDrawableEventsInRange(const TwoVector min, const TwoVector max);
+    vector<TwoVector> getRecentPath(int numEvents);
 private:
   
     vector<lEvent> theEvents;
 
     void thinnedLogEvent(lEvent nextEvent);
+    void thinnedScrollEvent(lEvent nextEvent);
     unsigned int nextUploadQty;
 
     string questionnaireComments;
--- a/eventLogger.mm	Fri Mar 08 14:54:55 2013 +0000
+++ b/eventLogger.mm	Tue Mar 26 18:41:42 2013 +0000
@@ -8,9 +8,30 @@
 
 //---------------------------------------------------------------------------
 #include "eventLogger.h"
+#include "grid.h"
+
+extern Grid theGridView;
 
 EventLogger eventLogger;
 extern PresetManager presetManager;
+//---------------------------------------------------------------------------
+void lEvent::draw(){
+    // can't draw lines you fool
+    double size = 2.0;
+    TwoVector pos = theGridView.coordToPixel(TwoVector(val1,val2)); // euch -rely on grid view?
+    
+    if(eventType == SCROLL){
+        ofSetColor(255,123,56);
+        ofRect(pos.x, pos.y,size,size);
+    }else if(eventType == EVALUATION_POINT){
+        size = sliderID/150.0; // slider id is the hover time. sorry sorry.
+        if(size > 40) size = 40;
+        ofSetColor(25,123,216);
+        ofNoFill();
+        ofEllipse(pos.x, pos.y, size, size);
+
+    }
+}
 
 //---------------------------------------------------------------------------
 EventLogger::EventLogger(){
@@ -156,8 +177,10 @@
     questionnaireCompleted = false;
     questionnaireUploaded = false;
     
-    ((testApp *)ofGetAppPtr())->showIntro();
-    consentGiven = false;
+    //((testApp *)ofGetAppPtr())->showIntro();
+    //consentGiven = false;
+    ((testApp *)ofGetAppPtr())->justStart();
+    
     
 }
 
@@ -209,7 +232,7 @@
 }
 //-----------------------------
 void EventLogger::eventlogOK(){
-    // IF UPLAODING FROM IPAD TO XCODE
+    // COMMENT THIS IF UPLAODING FROM IPAD TO XCODE
     theEvents.clear();
     cout << "EVENT LOG UPLOAD SUCCESS\n";
     nextUploadNumber++;
@@ -244,7 +267,8 @@
 //---------------------------------------------------------------------------
 
 bool EventLogger::uploadEventLog(bool async){
-
+    // COMMENT THIS OUTRT   !!!!!!!!
+    return false;
     // show indicator
     logUploadInProgress = true;
     cout << "^^^^^^^^  ATTEMPTING TO UPLOAD " << theEvents.size() << " EVENTS ^^^^^^^^ .\n";
@@ -268,8 +292,62 @@
     }
 }
 //----------------------------------------------------------------------------
+bool eventWasInRegion(vector<lEvent>::iterator eiter, TwoVector regionTopLeft, TwoVector regionBottomRight){
+    if( ((*eiter).val1 > regionTopLeft.x ) && ((*eiter).val2 > regionTopLeft.y ) && ((*eiter).val1 < regionBottomRight.x ) && ((*eiter).val2 < regionBottomRight.y )){
+        return true;
+    }else{
+        return false;
+    }
+    
+}
+//----------------------------------------------------------------------------
+void EventLogger::drawTrail(const TwoVector min, const TwoVector max){
+    // horribly inefficient
+    vector<lEvent>::iterator eiter;
+    vector<lEvent>::iterator preveiter;
+    int i = 0;
+    
+    
+    
+    preveiter = theEvents.begin();
+    for(eiter = --theEvents.end(); eiter > theEvents.begin(); eiter--){
 
-//----------------------------------------------------------------------------
+        //cout << i << '\n';
+        if( (*eiter).eventType == SCROLL || (*eiter).eventType == EVALUATION_POINT){
+            i++;
+            if(i > SCROLL_TRAIL_LENGTH){
+                return;
+            }
+            if(eventWasInRegion(eiter, min, max) || eventWasInRegion(preveiter, min, max)){
+                // draw a line between prev and this
+                if(preveiter != theEvents.begin()){
+                    TwoVector start = theGridView.coordToPixel(TwoVector((*preveiter).val1,(*preveiter).val2));
+                    TwoVector end = theGridView.coordToPixel(TwoVector((*eiter).val1,(*eiter).val2));
+                    ofSetColor(255,255,255,96);
+                    ofLine(start.x,start.y, end.x, end.y);
+                
+                }else{
+                    // draw line from listen point to last evt
+                    TwoVector start = TwoVector(ofGetWidth()*0.5,ofGetHeight()*0.5);
+                    TwoVector end = theGridView.coordToPixel(TwoVector((*eiter).val1,(*eiter).val2));
+                    ofSetColor(255,255,255,96);
+                    ofLine(start.x,start.y, end.x, end.y);
+                    // draw ever growing listen point
+                    
+                }
+            
+            }
+            preveiter = eiter;
+        }
+        if( (*eiter).eventType == EVALUATION_POINT){
+            if( ((*eiter).val1 > min.x ) && ((*eiter).val2 > min.y ) && ((*eiter).val1 < max.x ) && ((*eiter).val2 < max.y )){
+                // draw it
+                (*eiter).draw();
+            }
+        }
+    }
+    
+}
 
 //---------------------------------------------------------------------------
 // only called when doing supervised tests
@@ -299,10 +377,42 @@
     
     //timer.startInteractionClock();
     [((testApp *)ofGetAppPtr())->tsc startTimer];
+    
+    // press play??
+}
+//---------------------------------------------------------------------------
+void EventLogger::thinnedScrollEvent(lEvent newEvent){
+    static lEvent previousEvent(EMPTY_EVENT); // initialised as whatever
+    static int eventCounter = 0;
+    
+    // if first event then log it. it won't be, but still.
+    if(theEvents.size() == 0){
+        theEvents.push_back(newEvent);
+        previousEvent = newEvent;
+        return;
+    }
+    
+    // if previous event is more than 300ms ago, or event type has changed, log both of them (lots of events on move+zoom combinations!!)
+    int gap = newEvent.eventTime - previousEvent.eventTime;
+    if(gap > 300){
+        // log previous event as a evaluation point MAYBE TODO if previous event was logged as scroll chuck it out?
+        theEvents.push_back(lEvent(EVALUATION_POINT, previousEvent.val1, previousEvent.val2, gap));
+        // and now new event as scroll
+        theEvents.push_back(newEvent);
+        eventCounter = 0;
+
+    }else if(eventCounter >= EVENT_THIN_FACTOR){ // otherwise only record every Nth event
+        theEvents.push_back(newEvent);
+        eventCounter = 0;
+        
+    }
+    eventCounter++;
+    previousEvent = newEvent;
+    
 }
 //---------------------------------------------------------------------------
 void EventLogger::thinnedLogEvent(lEvent newEvent){
-    static lEvent previousEvent(APP_STARTED); // initialised as whatever. hopefully won't log
+    static lEvent previousEvent(EMPTY_EVENT); // initialised as whatever. hopefully won't log
     static int eventCounter = 0;
     
     // if first event then log it. it won't be, but still.
@@ -334,7 +444,7 @@
 }
 //---------------------------------------------------------------------------
 void EventLogger::logEvent(const leventType& evtType,const TwoVector& centre, const double& scale, const int& sliderID, const double& sliderVal){
-    //cout << "log: " << evtType << "\n";
+    
     
     // scroll has 2 double coords
     // zoom has 1 double scale
@@ -349,7 +459,8 @@
     switch ( evtType ) {
             // data thinning here
         case SCROLL:
-            thinnedLogEvent(lEvent(evtType,centre.x,centre.y));
+            thinnedScrollEvent(lEvent(evtType,centre.x,centre.y));
+            //theEvents.push_back(lEvent(evtType,centre.x,centre.y));
             break;
         case ZOOM:
             thinnedLogEvent(lEvent(evtType,scale));
@@ -503,3 +614,19 @@
     logFile.close();
 
 }
+//----------------------------------------------------------------------------
+// TODO this path thing
+vector<TwoVector> EventLogger::getRecentPath(int numEvents){
+    vector<TwoVector> thePath;
+    
+    TwoVector lastScrollPos;
+    vector<lEvent>::iterator eventIndex;
+    eventIndex = theEvents.end();
+    int numScrolls = 0;
+    while(numScrolls < numEvents){
+        // go back check for scrolls, check for end of array etc.
+        thePath.push_back(lastScrollPos);
+        numScrolls++;
+    }
+    return thePath;
+}
\ No newline at end of file
--- a/grid.mm	Fri Mar 08 14:54:55 2013 +0000
+++ b/grid.mm	Tue Mar 26 18:41:42 2013 +0000
@@ -55,6 +55,7 @@
     
     viewWasChanged();
     
+    cout << "SIZEOF " << sizeof(long long);
     
     
 }
@@ -333,12 +334,14 @@
     //displayInfo();
 
     drawPresets();
-    ////////-------/////////
-    
-    ////////-------/////////
-    
+
     // draw centre cross hairs
     drawCrossHairs();
+
+    
+    // draw the undo history trail, given viewing area
+    eventLogger.drawTrail(topLeft, topLeft + size);
+    
     ////////-------////////
     /*
     ostringstream temp;
@@ -380,6 +383,7 @@
     if(snapped && closestPreset != NULL){
         ofDrawBitmapString( closestPreset->displayTextDescription(), pixSize.x/2+10, pixSize.y/2+10 );
     }
+    
 }
 
 //-----------------------------------------------------------------------
@@ -431,7 +435,7 @@
 }
 
 //--------------------------------------------------------------
-// would be advisable to only have one "mover" object that has permission to move the grid (?)
+
 void Grid::move(TwoVector moveP){
     // numspacing, pixelspacing stay the same
     
--- a/testApp.h	Fri Mar 08 14:54:55 2013 +0000
+++ b/testApp.h	Tue Mar 26 18:41:42 2013 +0000
@@ -18,7 +18,6 @@
 
 #include "json.h"
 
-
 #import "QuestionnaireViewController.h"
 #import "BottomTabViewController.h"
 #import "IntroViewController.h"
@@ -117,6 +116,8 @@
     void seqStartStop(bool go);
     void showHelp();
     void helpHidden();
+    // shortcut function for testing
+    void justStart();
     
     void setupBottomGui();
     void bottomGuiEvent();
--- a/testApp.mm	Fri Mar 08 14:54:55 2013 +0000
+++ b/testApp.mm	Tue Mar 26 18:41:42 2013 +0000
@@ -131,9 +131,7 @@
     randomise(); // everyone starts from random position
     
     ofxiPhoneExternalDisplay::mirrorOn();
-    
-    double timemsd = [NSDate timeIntervalSinceReferenceDate];
-    cout << "TIME: " << timemsd << '\n';
+
     
 }
 
@@ -235,6 +233,13 @@
 
 }
 //--------------------------------------------------------------
+// shortcut function for testing
+void testApp::justStart(){
+    interfaceSelected(BOTH);
+    [bottomTabViewController show:(id)this withSelection:1];
+    
+}
+//--------------------------------------------------------------
 void testApp::showIntro(){
 
     cout << "SHOW INTRO\n";
@@ -512,10 +517,12 @@
             break;
         case ZOOMER:
             theGridView.draw();
+
             break;
         case BOTH:
+            
+            theGridView.draw();
 
-            theGridView.draw();
             break;
         case INTRO:
             break;