changeset 29:fabb3a5cdfc9

Timed session improvements. Desperate pathetic attempts to send a simple HTTP POST.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Fri, 22 Feb 2013 17:41:38 +0000
parents e2c62db1e265
children c0a6f7c66719
files BottomTabViewController.mm IntroViewController.xib PresetAlertViewController.h PresetAlertViewController.mm Question.m QuestionnaireViewController.mm ServerComms.h ServerComms.mm TimedSessionController.h TimedSessionController.mm TopButtonViewController.h TopButtonViewController.mm TopButtonViewController.xib eventLogger.h eventLogger.mm presetManager.h presetManager.mm testApp.h testApp.mm
diffstat 19 files changed, 420 insertions(+), 115 deletions(-) [+]
line wrap: on
line diff
--- a/BottomTabViewController.mm	Mon Feb 18 11:45:05 2013 +0000
+++ b/BottomTabViewController.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -49,9 +49,10 @@
     
 }
 
-- (IBAction)show:(id)sender
+- (IBAction)show:(id)sender withSelection:(NSInteger)sel
 {
     self.theOFAppRef = sender;
+    self.interfaceSelector.selectedSegmentIndex = sel;
     self.view.hidden = NO;
 }
 
--- a/IntroViewController.xib	Mon Feb 18 11:45:05 2013 +0000
+++ b/IntroViewController.xib	Fri Feb 22 17:41:38 2013 +0000
@@ -42,7 +42,6 @@
 						<string key="NSFrame">{{326, 881}, {116, 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>
@@ -116,21 +115,21 @@
 IGdpdmUgeW91IGEgYmlnZ2VyIHBlcnNwZWN0aXZlLCBidXQgb2YgY291cnNlIHRoZSBzb3VuZCB3aWxs
 IGJlY29tZSBmYXIgbW9yZSByYW5kb20gYW5kIHVuY29udHJvbGxhYmxlIGFzIHlvdSBtb3ZlIGJpZ2dl
 ciBkaXN0YW5jZXMuDQ1XaGF0IHdlIGFyZSBhc2tpbmcgeW91LCB0aGUgcGFydGljaXBhbnQsIHRvIGRv
-IGlzIHVzZSBib3RoIHRoZSB6b29tZXIgYW5kIHRoZSBzbGlkZXJzIGZvciBhYm91dCAxMCBtaW51dGVz
-IGVhY2gsIGFuZCBzYXZlIGFueSBzb3VuZHMgdGhhdCB5b3UgbGlrZS4gQWxzbyB1c2UgdGhlICJyYW5k
-b21pc2UiIGFuZCAibG9jayIgYnV0dG9ucy4gQWZ0ZXIgYWJvdXQgMjAgbWludXRlcyBvZiBpbnRlcmFj
-dGlvbiBhIHByb21wdCB3aWxsIGFwcGVhciBmb3IgYSBzaG9ydCBxdWVzdGlvbm5haXJlIHRoYXQgd2ls
-bCBoZWxwIHVzIGFzc2VzcyB0aGUgaW50ZXJmYWNlIGZ1cnRoZXIuICBBZnRlciB0aGF0LCBwbGVhc2Ug
-ZmVlbCBmcmVlIHRvIHVzZSBpdCBzb21lIG1vcmU6IHRoZSBtb3JlIGRhdGEgd2UgZ2V0IHRoZSBiZXR0
-ZXIuIE1vcmUgZXhjaXRpbmcgZmVhdHVyZXMgYXJlIHBsYW5uZWQgZm9yIHRoaXMgYXBwLCBzbyBwbGVh
-c2Ugd2F0Y2ggb3V0IGZvciB1cGRhdGVzLg0NTk9URTogWW91ciBhY3Rpb25zIHdpbGwgYmUgbG9nZ2Vk
-LCBhbmQgc2VudCB0byBhIHNlY3VyZSBzZXJ2ZXIgaGVyZSBhdCBRdWVlbiBNYXJ5IFVuaXZlcnNpdHku
-ICBIb3dldmVyIG5vIHBlcnNvbmFsIGRhdGEgKG5hbWUsIGVtYWlsIGV0Yy4pIHdpbGwgYmUgY29sbGVj
-dGVkLCBhc3NvY2lhdGVkIHdpdGggdGhpcyBJRCBvciBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLiBJdCBp
-cyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYXJlIGNvbm5lY3RlZCB0byBXaUZpIGludGVybmV0
-IHdoaWxzdCB1c2luZyB0aGlzIEFwcCwgb3RoZXJ3aXNlIHRoZSBsb2cgZGF0YSB3aWxsIHRha2UgdXAg
-c3BhY2Ugb24geW91ciBkZXZpY2UuDVRvIGNvbnNlbnQgdG8gdGhpcyBwbGVhc2UgcHJlc3MgIkFncmVl
-IiBiZWxvdy4gVG8gZGVjbGluZSBqdXN0IGV4aXQgdGhlIGFwcC4NA</bytes>
+IGlzIHVzZSBib3RoIHRoZSB6b29tZXIgYW5kIHRoZSBzbGlkZXJzIGZvciA2IG1pbnV0ZXMgZWFjaCwg
+YW5kIHNhdmUgYW55IHNvdW5kcyB0aGF0IHlvdSBsaWtlLiBBbHNvIGNoZWNrIG91dCB0aGUgInJhbmRv
+bWlzZSIgYW5kICJsb2NrIiBidXR0b25zLiBBZnRlciB0aGlzIGEgc2hvcnQgcXVlc3Rpb25uYWlyZSB3
+aWxsIGFwcGVhciB0aGF0IHdpbGwgaGVscCB1cyBhc3Nlc3MgdGhlIGludGVyZmFjZSBmdXJ0aGVyLiBB
+ZnRlciB0aGF0LCBwbGVhc2UgZmVlbCBmcmVlIHRvIHVzZSBpdCBzb21lIG1vcmU6IHRoZSBtb3JlIGRh
+dGEgd2UgZ2V0IHRoZSBiZXR0ZXIuIEZ1cnRoZXIgZXhjaXRpbmcgZmVhdHVyZXMgYXJlIHBsYW5uZWQg
+Zm9yIHRoaXMgYXBwLCBzbyBwbGVhc2Ugd2F0Y2ggb3V0IGZvciB1cGRhdGVzLg0NTk9URTogWW91ciBh
+Y3Rpb25zIHdpbGwgYmUgbG9nZ2VkLCBhbmQgc2VudCB0byBhIHNlY3VyZSBzZXJ2ZXIgaGVyZSBhdCBR
+dWVlbiBNYXJ5IFVuaXZlcnNpdHkuICBIb3dldmVyIG5vIHBlcnNvbmFsIGRhdGEgKG5hbWUsIGVtYWls
+IGV0Yy4pIHdpbGwgYmUgY29sbGVjdGVkLCBhc3NvY2lhdGVkIHdpdGggdGhpcyBJRCBvciBzdG9yZWQg
+aW4gdGhlIGRhdGFiYXNlLiBJdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYXJlIGNvbm5l
+Y3RlZCB0byBXaUZpIGludGVybmV0IHdoaWxzdCB1c2luZyB0aGlzIEFwcCwgb3RoZXJ3aXNlIHRoZSBs
+b2cgZGF0YSB3aWxsIHRha2UgdXAgc3BhY2Ugb24geW91ciBkZXZpY2UuDVRvIGNvbnNlbnQgdG8gdGhp
+cyBwbGVhc2UgcHJlc3MgIkFncmVlIiBiZWxvdy4gVG8gZGVjbGluZSBqdXN0IGV4aXQgdGhlIGFwcC4N
+A</bytes>
 						</object>
 						<object class="NSColor" key="IBUITextColor">
 							<int key="NSColorSpace">1</int>
@@ -257,9 +256,9 @@
 						<int key="objectID">2</int>
 						<reference key="object" ref="766721923"/>
 						<array class="NSMutableArray" key="children">
-							<reference ref="814850245"/>
 							<reference ref="530886577"/>
 							<reference ref="83132392"/>
+							<reference ref="814850245"/>
 						</array>
 						<reference key="parent" ref="0"/>
 					</object>
--- a/PresetAlertViewController.h	Mon Feb 18 11:45:05 2013 +0000
+++ b/PresetAlertViewController.h	Fri Feb 22 17:41:38 2013 +0000
@@ -11,7 +11,7 @@
 
 
 @interface PresetAlertViewController : NSObject <UIAlertViewDelegate>
-
+@property  BOOL alertShowing;
 - (void)showPresetNamePrompt;
 
 @end
--- a/PresetAlertViewController.mm	Mon Feb 18 11:45:05 2013 +0000
+++ b/PresetAlertViewController.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -10,8 +10,21 @@
 
 
 extern PresetManager presetManager;
+extern EventLogger eventLogger;
+
 @implementation PresetAlertViewController
-
+- (PresetAlertViewController *) init{
+    [super init];
+    self = [super init];
+    if (self) {
+        // Custom initialization
+        
+        self.alertShowing = NO;
+        
+    }
+    return self;
+    
+}
 - (void)showPresetNamePrompt{
     UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Save"
                                                      message:@"Enter preset name:"
@@ -23,6 +36,7 @@
     alertTextField.keyboardType = UIKeyboardTypeDefault;
     alertTextField.placeholder = @"Preset Name";
     [alert show];
+    self.alertShowing = YES;
     [alert release];
 }
 
@@ -32,9 +46,16 @@
     if(buttonIndex == 0){
         // cancel
         NSLog(@"preset save was cancelled");
+        self.alertShowing = NO;
     }else{
         // save it
-        presetManager.addPreset([[[alertView textFieldAtIndex:0] text] cStringUsingEncoding:NSASCIIStringEncoding]);
+        self.alertShowing = NO;
+        if([[[alertView textFieldAtIndex:0] text] isEqualToString:@"newuser"]){
+            // call new user stufff
+            eventLogger.newUser();
+        }else{
+            presetManager.addPreset([[[alertView textFieldAtIndex:0] text] cStringUsingEncoding:NSASCIIStringEncoding]);
+        }
     }
 }
 
--- a/Question.m	Mon Feb 18 11:45:05 2013 +0000
+++ b/Question.m	Fri Feb 22 17:41:38 2013 +0000
@@ -21,7 +21,7 @@
     if(self){
         self.questionText = text;
         self.questionType = type;
-        self.answer = 0; 
+        self.answer = -1;
     }
     
     return self;
--- a/QuestionnaireViewController.mm	Mon Feb 18 11:45:05 2013 +0000
+++ b/QuestionnaireViewController.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -105,11 +105,11 @@
         
     }
     const char *userComments = [self.commentText.text cStringUsingEncoding: NSUTF8StringEncoding];
-    
-    ((testApp *)self.theOFAppRef)->questionnaireHidden(answersArray, userComments);
     [self.commentText resignFirstResponder];
     
 	self.view.hidden = YES;
+    ((testApp *)self.theOFAppRef)->questionnaireHidden(answersArray, userComments);
+    
 }
 
 //----------------------------------------------------------------
@@ -156,7 +156,7 @@
     
     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 to the app.";
+    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.";
 }
 
 //----------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ServerComms.h	Fri Feb 22 17:41:38 2013 +0000
@@ -0,0 +1,18 @@
+//
+//  ServerComms.h
+//  sonicZoom
+//
+//  Created by Robert Tubb on 21/02/2013.
+//
+//
+
+#import <Foundation/Foundation.h>
+
+@interface ServerComms : NSObject  <NSURLConnectionDelegate>
+-(void)test;
+-(void)postRequest:(NSString *)msgbody;
+
+- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
+- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
+- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse;
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ServerComms.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -0,0 +1,55 @@
+//
+//  ServerComms.m
+//  sonicZoom
+//
+//  Created by Robert Tubb on 21/02/2013.
+//
+//
+
+#import "ServerComms.h"
+
+@implementation ServerComms
+-(void)test{
+    NSLog(@"hi");
+}
+-(void)postRequest:(NSString *)msgbody{
+    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]
+                                    initWithURL:[NSURL
+                                                 URLWithString:msgbody]];
+    
+    [request setHTTPMethod:@"POST"];
+    [request setValue:@"text/xml"
+   forHTTPHeaderField:@"Content-type"];
+    
+    NSString *xmlString = @"<data><item>Item 1</item><item>Item 2</item></data>";
+    
+    [request setValue:[NSString stringWithFormat:@"%d",
+                       [xmlString length]]
+   forHTTPHeaderField:@"Content-length"];
+    
+    [request setHTTPBody:[xmlString
+                          dataUsingEncoding:NSUTF8StringEncoding]];
+    
+    [[NSURLConnection alloc] 
+     initWithRequest:request 
+     delegate:self];
+}
+
+
+- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
+    NSLog(@"!!!!!!!!!!!!!!!!!!!!connection error");
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
+    NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveResponse");
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
+    NSLog(@"!!!!!!!!!!!!!!!!!!!!didReceiveData");
+}
+
+- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse{
+    
+}
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TimedSessionController.h	Fri Feb 22 17:41:38 2013 +0000
@@ -0,0 +1,22 @@
+//
+//  TimedSessionController.h
+//  sonicZoom
+//
+//  Created by Robert Tubb on 18/02/2013.
+//
+//
+#define SECONDS_PER_INTERFACE 10
+#import <Foundation/Foundation.h>
+
+
+@interface TimedSessionController : NSObject <UIAlertViewDelegate>
+@property (nonatomic, assign)       id theOFAppRef;
+@property (nonatomic,strong) NSTimer * theCurrentTimer;
+
+- (void)setAppRef:(id)theOFApp;
+-(void)resetTime:(int)newTime; // if we want to put ourselves somewhen
+-(void)startTimer; // go from start
+-(void)cancelTimers; // stop the whole thing
+-(void)showNextPrompt;
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TimedSessionController.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -0,0 +1,101 @@
+//
+//  TimedSessionController.m
+//  sonicZoom
+//
+//  Created by Robert Tubb on 18/02/2013.
+//
+//
+#import "testApp.h"
+#import "TimedSessionController.h"
+@interface TimedSessionController()
+    // private stuff
+
+@end
+
+@implementation TimedSessionController
+
+    int orders[6][3] = {{0,1,2},{0,2,1},{1,0,2},{1,2,0},{2,0,1},{2,1,0}};
+    int theOrder;
+    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];
+
+// nicer if it was initWithAppRef ?
+- (void)setAppRef:(id)theOFApp{
+    self.theOFAppRef = theOFApp;
+    theOrder = arc4random() % 6;
+    NSLog(@"the order: %d", theOrder);
+    
+    scount = 0;
+}
+-(void)startTimer{
+    // SHOW FIRST PROMPT
+    NSString *themessage;
+    themessage = [alertMessages objectAtIndex:orders[theOrder][0]];
+    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Thanks!"
+                                                     message:themessage
+                                                    delegate:self
+                                           cancelButtonTitle:@"Continue"
+                                           otherButtonTitles:nil];
+    alert.alertViewStyle = UIAlertViewStyleDefault;
+    [alert show];
+    [alert release];
+
+}
+-(void)resetTime:(int)newTime{
+    
+}
+
+// ALERT
+
+
+-(void)showNextPrompt{
+    NSString *themessage;
+    scount++;
+    if(scount < 3){
+        themessage = [alertMessages objectAtIndex:orders[theOrder][scount] ];
+    }else{
+        themessage = [alertMessages objectAtIndex:3 ];
+    }
+    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Thanks!"
+                                                     message:themessage
+                                                    delegate:self
+                                           cancelButtonTitle:@"Continue"
+                                           otherButtonTitles:nil];
+    alert.alertViewStyle = UIAlertViewStyleDefault;
+    [alert show];
+    [alert release];
+    
+}
+
+-(void)cancelTimers{
+    scount = 0;
+    if(self.theCurrentTimer){
+        [self.theCurrentTimer invalidate];
+        self.theCurrentTimer = nil;
+    }
+}
+- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
+    
+    NSLog(@"OK TO NEXT VIEW");
+    
+    if(scount < 3){
+        NSInteger next = orders[theOrder][scount];
+        ((testApp *)self.theOFAppRef)->interfaceSelected(next);
+        
+        self.theCurrentTimer = [NSTimer scheduledTimerWithTimeInterval:SECONDS_PER_INTERFACE target:self selector:@selector(showNextPrompt) userInfo:nil repeats:NO];
+        
+    }else{
+        ((testApp *)self.theOFAppRef)->showQuestionnaire();
+        scount = 0; // incase we try again
+        self.theCurrentTimer = nil;
+    }
+    
+}
+
+
+@end
--- a/TopButtonViewController.h	Mon Feb 18 11:45:05 2013 +0000
+++ b/TopButtonViewController.h	Fri Feb 22 17:41:38 2013 +0000
@@ -8,14 +8,15 @@
 
 #import <UIKit/UIKit.h>
 #import "HelpViewController.h"
-
+#define IS_SUPERVISED 1 // to set new user button
 @interface TopButtonViewController : UIViewController
 
 @property (nonatomic, assign)       id theOFAppRef;
 
 @property (retain, nonatomic) IBOutlet UIBarButtonItem *playButton;
 @property (retain, nonatomic) IBOutlet UIBarButtonItem *pauseButton;
-@property (retain, nonatomic) IBOutlet UIBarButtonItem *qButton;
+@property (retain, strong, nonatomic) IBOutlet UIBarButtonItem *qButton;
+@property (retain, strong,nonatomic) IBOutlet UIBarButtonItem *newUserButton;
 
 -(IBAction)show:(id)sender;
 -(void)setAppRef:(id)theOFApp;
--- a/TopButtonViewController.mm	Mon Feb 18 11:45:05 2013 +0000
+++ b/TopButtonViewController.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -34,8 +34,24 @@
     // Do any additional setup after loading the view from its nib.
     self.playButton.enabled = true;
     self.pauseButton.enabled = false;
-    self.qButton.enabled = false;
-
+    self.qButton.enabled = true;
+    self.newUserButton.enabled = true;
+    //------------------------
+    // Get the reference to the current toolbar buttons
+    NSMutableArray *toolbarButtons = [self.toolbarItems mutableCopy];
+    
+    // This is how you remove the button from the toolbar and animate it
+    [toolbarButtons removeObject:self.qButton];
+    [self setToolbarItems:toolbarButtons animated:YES];
+    
+    // This is how you add the button to the toolbar and animate it
+    /*
+    if (![toolbarButtons containsObject:self.qButton]) {
+        [toolbarButtons addObject:self.qButton];
+        [self setToolbarItems:toolbarButtons animated:YES];
+    }
+    */
+    
 }
 
 - (void)enableQuestionButton{
@@ -128,12 +144,14 @@
     [_pauseButton release];
     [_qButton release];
 
+    [_newUserButton release];
     [super dealloc];
 }
 - (void)viewDidUnload {
     [self setPlayButton:nil];
     [self setPauseButton:nil];
     [self setQButton:nil];
+    [self setNewUserButton:nil];
     [super viewDidUnload];
 }
 @end
--- a/TopButtonViewController.xib	Mon Feb 18 11:45:05 2013 +0000
+++ b/TopButtonViewController.xib	Fri Feb 22 17:41:38 2013 +0000
@@ -1,14 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="8.00">
 	<data>
-		<int key="IBDocument.SystemTarget">1536</int>
+		<int key="IBDocument.SystemTarget">1552</int>
 		<string key="IBDocument.SystemVersion">11G63</string>
-		<string key="IBDocument.InterfaceBuilderVersion">2844</string>
+		<string key="IBDocument.InterfaceBuilderVersion">3084</string>
 		<string key="IBDocument.AppKitVersion">1138.51</string>
 		<string key="IBDocument.HIToolboxVersion">569.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">1930</string>
+			<string key="NS.object.0">2083</string>
 		</object>
 		<array key="IBDocument.IntegratedClassDependencies">
 			<string>IBProxyObject</string>
@@ -53,24 +53,17 @@
 								<int key="IBUIStyle">1</int>
 								<reference key="IBUIToolbar" ref="358683122"/>
 							</object>
+							<object class="IBUIBarButtonItem" id="1052071507">
+								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+								<reference key="IBUIToolbar" ref="358683122"/>
+								<int key="IBUISystemItemIdentifier">5</int>
+							</object>
 							<object class="IBUIBarButtonItem" id="996249183">
 								<string key="IBUITitle">Save Preset</string>
 								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 								<int key="IBUIStyle">1</int>
 								<reference key="IBUIToolbar" ref="358683122"/>
 							</object>
-							<object class="IBUIBarButtonItem" id="319053509">
-								<string key="IBUITitle">New User</string>
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-								<int key="IBUIStyle">1</int>
-								<reference key="IBUIToolbar" ref="358683122"/>
-							</object>
-							<object class="IBUIBarButtonItem" id="702923516">
-								<string key="IBUITitle">Questionnaire</string>
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-								<int key="IBUIStyle">1</int>
-								<reference key="IBUIToolbar" ref="358683122"/>
-							</object>
 							<object class="IBUIBarButtonItem" id="528026433">
 								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 								<reference key="IBUIToolbar" ref="358683122"/>
@@ -128,6 +121,18 @@
 				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
 				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
 			</object>
+			<object class="IBUIBarButtonItem" id="702923516">
+				<bool key="IBUIEnabled">NO</bool>
+				<string key="IBUITitle">Questionnaire</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+				<int key="IBUIStyle">1</int>
+			</object>
+			<object class="IBUIBarButtonItem" id="319053509">
+				<bool key="IBUIEnabled">NO</bool>
+				<string key="IBUITitle">New User</string>
+				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
+				<int key="IBUIStyle">1</int>
+			</object>
 		</array>
 		<object class="IBObjectContainer" key="IBDocument.Objects">
 			<array class="NSMutableArray" key="connectionRecords">
@@ -164,6 +169,14 @@
 					<int key="connectionID">32</int>
 				</object>
 				<object class="IBConnectionRecord">
+					<object class="IBCocoaTouchOutletConnection" key="connection">
+						<string key="label">newUserButton</string>
+						<reference key="source" ref="841351856"/>
+						<reference key="destination" ref="319053509"/>
+					</object>
+					<int key="connectionID">39</int>
+				</object>
+				<object class="IBConnectionRecord">
 					<object class="IBCocoaTouchEventConnection" key="connection">
 						<string key="label">savePressed:</string>
 						<reference key="source" ref="996249183"/>
@@ -271,13 +284,12 @@
 							<reference ref="597523981"/>
 							<reference ref="996249183"/>
 							<reference ref="680653375"/>
-							<reference ref="702923516"/>
 							<reference ref="528026433"/>
-							<reference ref="379344923"/>
 							<reference ref="898331149"/>
 							<reference ref="180077124"/>
 							<reference ref="924591997"/>
-							<reference ref="319053509"/>
+							<reference ref="379344923"/>
+							<reference ref="1052071507"/>
 						</array>
 						<reference key="parent" ref="766721923"/>
 					</object>
@@ -292,11 +304,6 @@
 						<reference key="parent" ref="358683122"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">11</int>
-						<reference key="object" ref="702923516"/>
-						<reference key="parent" ref="358683122"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">12</int>
 						<reference key="object" ref="189059998"/>
 						<reference key="parent" ref="358683122"/>
@@ -332,9 +339,19 @@
 						<reference key="parent" ref="358683122"/>
 					</object>
 					<object class="IBObjectRecord">
+						<int key="objectID">11</int>
+						<reference key="object" ref="702923516"/>
+						<reference key="parent" ref="0"/>
+					</object>
+					<object class="IBObjectRecord">
+						<int key="objectID">40</int>
+						<reference key="object" ref="1052071507"/>
+						<reference key="parent" ref="358683122"/>
+					</object>
+					<object class="IBObjectRecord">
 						<int key="objectID">35</int>
 						<reference key="object" ref="319053509"/>
-						<reference key="parent" ref="358683122"/>
+						<reference key="parent" ref="0"/>
 					</object>
 				</array>
 			</object>
@@ -354,6 +371,7 @@
 				<string key="33.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 				<string key="35.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 				<string key="4.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
+				<string key="40.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 				<string key="9.IBPluginDependency">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
 			</dictionary>
@@ -361,7 +379,7 @@
 			<nil key="activeLocalization"/>
 			<dictionary class="NSMutableDictionary" key="localizations"/>
 			<nil key="sourceID"/>
-			<int key="maxID">38</int>
+			<int key="maxID">40</int>
 		</object>
 		<object class="IBClassDescriber" key="IBDocument.Classes">
 			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -423,11 +441,16 @@
 						</object>
 					</dictionary>
 					<dictionary class="NSMutableDictionary" key="outlets">
+						<string key="newUserButton">UIBarButtonItem</string>
 						<string key="pauseButton">UIBarButtonItem</string>
 						<string key="playButton">UIBarButtonItem</string>
 						<string key="qButton">UIBarButtonItem</string>
 					</dictionary>
 					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<object class="IBToOneOutletInfo" key="newUserButton">
+							<string key="name">newUserButton</string>
+							<string key="candidateClassName">UIBarButtonItem</string>
+						</object>
 						<object class="IBToOneOutletInfo" key="pauseButton">
 							<string key="name">pauseButton</string>
 							<string key="candidateClassName">UIBarButtonItem</string>
@@ -452,6 +475,6 @@
 		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">1930</string>
+		<string key="IBCocoaTouchPluginVersion">2083</string>
 	</data>
 </archive>
--- a/eventLogger.h	Mon Feb 18 11:45:05 2013 +0000
+++ b/eventLogger.h	Fri Feb 22 17:41:38 2013 +0000
@@ -25,17 +25,18 @@
 #include "json.h"
 #include "testApp.h"
 
-
-
-
+#import "ServerComms.h"
+ 
 #define EVENT_THIN_FACTOR 10
 #define EVENT_LOG_FILENAME "log.json"
-#define SERVER_URL "http://127.0.0.1:8080/testservice/"
-#define UPLOAD_CHUNK_SIZE 500
+//#define LOGGING_SERVER_URL "http://www.isophonics.net/datacollector/"
+#define LOGGING_SERVER_URL "http://127.0.0.1:8080/testservice/"
+#define UPLOAD_CHUNK_SIZE 100
+
 #define QUESTIONNAIRE_ENABLE_TIME 100000 // milliseconds
-#define APP_CREATION_TIME 381429000000   // milliseconds to the time i wrote this wee blighter 
+#define APP_CREATION_TIME 381429000000   // milliseconds to the time i wrote this wee blighter saves digits
 
-#define PROGRAM_VERSION 1.0 // IMPORTANT TOCHNAGE!
+#define PROGRAM_VERSION 0.1 // IMPORTANT TOCHNAGE!
 
 // can add but don't change ordering - this will invalidate logs
 enum leventType {SAVE_PRESET,  // 0
@@ -128,7 +129,15 @@
     return os;
 }
  //---------------------------------------------------------------------------   
-
+    
+    class ThreadedObject: ofThread{
+        int i;
+        int threadedFunc(int i){
+            return i + 10;
+        };
+    };
+    
+    
 class EventLogger{
 public:
     int nextUploadNumber;
@@ -136,7 +145,9 @@
     bool logUploadInProgress;
     bool serverConnectionOK;
     bool consentGiven;
-    unsigned int deviceID; // unique get something from hardware??
+    bool questionnaireCompleted;
+    bool questionnaireUploaded;
+    unsigned int deviceID;
     unsigned int totalInteractionTime, savedInteractionTime, sessionTime, sessionStartTime;
     string userName; // not unique
 
@@ -149,18 +160,13 @@
     void questionnaireAnswersObtained(vector<int> answers, const char* userComments);
     void urlResponse(ofHttpResponse & response);
 private:
-    // what we need...
-    /*
-     time, type, value
-     */
 
     int currentHTTPRequestID;
+    
+    
     vector<lEvent> theEvents;
-    
+
     void thinnedLogEvent(lEvent nextEvent);
-    
-    // values applicable to all events
-
     unsigned int nextUploadQty;
 
     string questionnaireComments;
@@ -169,12 +175,11 @@
     
     bool testConnection();
     vector<int> questionnaireAnswers;
-    bool questionnaireCompleted;
-    bool questionnaireUploaded;
     int interfaceOrder;
 
     
     void checkLogFile();
+    void deleteLogs(); // new user
     bool uploadEventLog(bool async);
     void firstEverAppOpen();
     void readJsonToLog(const string &jsonFile);
@@ -190,6 +195,10 @@
             
         }
     };
+    
+    //
+    ServerComms *serverComms;
+    
 };
 
 
--- a/eventLogger.mm	Mon Feb 18 11:45:05 2013 +0000
+++ b/eventLogger.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -8,10 +8,9 @@
 
 //---------------------------------------------------------------------------
 #include "eventLogger.h"
-#include "timer.h"
 
 EventLogger eventLogger;
-extern Timer timer;
+
 //---------------------------------------------------------------------------
 EventLogger::EventLogger(){
     //QuestionnaireViewController * questionnaireViewController;
@@ -33,6 +32,7 @@
 // draw() - show path of last N scroll events  - can be scrubbed along?
 // 
 //---------------------------------------------------------------------------
+
 void EventLogger::init(){
     
     readJsonToLog(ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME);
@@ -41,7 +41,19 @@
     testConnection();
 
     logEvent(APP_STARTED);
+
+    stringstream r;
+    r << LOGGING_SERVER_URL << "testConnection?jsontext=" << "{\"test\":\"test\"}&Content-Length=456";
+
+    NSString *urlstring;
+    urlstring = @"http://127.0.0.1:8080/testservice/testConnection?jsontext={\"objc post\":\"obj c post\"}";
+    serverComms = [[ServerComms alloc] init];
+    [serverComms postRequest:urlstring];
+
+    
+    urlstring = nil;
 }
+
 //---------------------------------------------------------------------------
 void EventLogger::questionnaireAnswersObtained(vector<int> answers, const char* userComments){
     
@@ -62,8 +74,10 @@
 //---------------------------------------------------------------------------
 bool EventLogger::sendToServer(string functionName, Json::Value jsonData, bool async = false){
     bool sent;
-    string request;
+    stringstream request;
 
+    request << LOGGING_SERVER_URL << functionName << "?jsontext=";
+    /*
     if(functionName == "testConnection"){
          request = "http://127.0.0.1:8080/testservice/testConnection?jsontext=";
     }else if(functionName == "questionnaire"){
@@ -71,6 +85,7 @@
     }else if(functionName == "eventlog"){
          request = "http://127.0.0.1:8080/testservice/eventlog?jsontext=";
     }
+     */
     Json::FastWriter writer;
     string jsontext = writer.write( jsonData );
     
@@ -79,12 +94,14 @@
         jsontext.erase(jsontext.length()-1);
     }
 
-    request.append(jsontext);
+    request << jsontext;
+    
+    cout << request.str();
     
     if(!async){
         ofURLFileLoader fileLoader;
         ofHttpResponse resp;
-        resp = fileLoader.get(request);
+        resp = fileLoader.get(request.str());
 
         cout << "HTTP STATUS  " << resp.status << "\n";
         cout << "HTTP ERROR  " << resp.error << "\n";
@@ -111,7 +128,7 @@
         return sent;
     }else{ // async
         ofURLFileLoader fileLoader;
-        currentHTTPRequestID = ofLoadURLAsync(request, functionName);
+        currentHTTPRequestID = ofLoadURLAsync(request.str(), functionName);
         ofRegisterURLNotification(this);
         
         return true; // ???
@@ -178,7 +195,7 @@
 //---------------------------------------------------------------------------
 bool EventLogger::testConnection(){
     Json::Value root;
-    root["test"] = "test";
+    root["x"] = "y";
     
     
     sendToServer("testConnection", root, true);
@@ -256,8 +273,8 @@
     // TODO if the total interaction time is greater than a certain amount && no questions answered - questionnaire time!
     cout << "Total interaction time: " << savedInteractionTime << '\n';
     
-    timer.setInteractionTime(savedInteractionTime);
-    timer.setOrderFromPrevious(interfaceOrder);
+    //timer.setInteractionTime(savedInteractionTime);
+    //timer.setOrderFromPrevious(interfaceOrder);
     
 }
 
@@ -272,7 +289,7 @@
     if(!async){
         bool success = sendToServer("eventlog", logsToJson(), async);
         if(!success){
-            // try later
+            // try later : NOPE has maximum size
             nextUploadQty += UPLOAD_CHUNK_SIZE;
         }else{
             
@@ -310,15 +327,16 @@
 // only called when doing supervised tests
 void EventLogger::newUser(){
     cout<<"setup new user\n";
+    deleteLogs();
     nextUploadNumber = 0;
     deviceID = ofGetSystemTimeMicros();
     savedInteractionTime = 0;
     totalInteractionTime = 0;
     sessionStartTime = ofGetSystemTime();
     questionnaireCompleted = false;
-    questionnaireUploaded = false;
-    consentGiven = true; // other wise we wouldn't be doing this
-    ((testApp *)ofGetAppPtr())->introHidden(true); // hacky
+    questionnaireUploaded = false; 
+    
+    ((testApp *)ofGetAppPtr())->showIntro();
     
 }
 //---------------------------------------------------------------------------
@@ -326,7 +344,9 @@
 void EventLogger::setUsername(const char *u){
     userName = u;
     // start interaction clock
-    timer.startInteractionClock();
+    
+    //timer.startInteractionClock();
+    [((testApp *)ofGetAppPtr())->tsc startTimer];
 }
 //---------------------------------------------------------------------------
 void EventLogger::thinnedLogEvent(lEvent newEvent){
@@ -361,7 +381,6 @@
     previousEvent = newEvent;
 }
 //---------------------------------------------------------------------------
-// log zoom event
 void EventLogger::logEvent(const leventType& evtType,const TwoVector& centre, const double& scale, const int& sliderID, const double& sliderVal){
     //cout << "log: " << evtType << "\n";
     
@@ -386,7 +405,7 @@
         case CHANGE_SLIDER:
             thinnedLogEvent(lEvent(evtType,sliderVal , 0.0 , sliderID));
             break;
-            
+           // non thinned data
         case SAVE_PRESET:
             theEvents.push_back(lEvent(evtType,centre.x,centre.y));
             // Code
@@ -419,7 +438,16 @@
     totalInteractionTime = savedInteractionTime + (ofGetSystemTime() - sessionStartTime); // milliseconds
 
 }
-
+//--------------------------------------------------------------------
+// called from newUser
+void EventLogger::deleteLogs(){
+    // the
+    theEvents.clear();
+    string fname = ofxiPhoneGetDocumentsDirectory() + EVENT_LOG_FILENAME;
+    ofFile logFile(fname,ofFile::WriteOnly);
+    logFile << "";
+    logFile.close();
+}
 //---------------------------------------------------------------------------
 
 void EventLogger::exitAndSave(){
@@ -445,6 +473,7 @@
     Json::Value jlogs = logsToJson();
     ofFile logFile(fname,ofFile::WriteOnly);
     logFile << jlogs;
+    logFile.close();
     
 }
 //---------------------------------------------------------------------------
--- a/presetManager.h	Mon Feb 18 11:45:05 2013 +0000
+++ b/presetManager.h	Fri Feb 22 17:41:38 2013 +0000
@@ -30,7 +30,6 @@
 
 
 
-
 //---------------------------------------------------------------------------
 class Preset{
 public:
--- a/presetManager.mm	Mon Feb 18 11:45:05 2013 +0000
+++ b/presetManager.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -166,7 +166,7 @@
 }
 //---------------------------------------------------------------------------
 void PresetManager::showNameDialog(){
-    if(!presetAlertShowing){ // this is to stop wierd infinite loop in ios5 (simulator)
+    if(!presetAlertViewController.alertShowing){ // this is to stop wierd infinite loop in ios5 (simulator)
         presetAlertShowing = true;
         [presetAlertViewController showPresetNamePrompt];
         
@@ -263,8 +263,7 @@
     
     cout << root;
     presetFile << root;
-     
-    
+
 }
 
 //---------------------------------------------------------------------------
--- a/testApp.h	Mon Feb 18 11:45:05 2013 +0000
+++ b/testApp.h	Fri Feb 22 17:41:38 2013 +0000
@@ -25,11 +25,11 @@
 #import "TopButtonViewController.h"
 #import "SliderViewController.h"
 #import "usernameAlertViewController.h"
+#import "TimedSessionController.h"
+#define OSC_HOST "169.254.1.1"
+#define OSC_PORT 12345
 
-#define HOST "169.254.1.1"
-#define PORT 12345
-
-typedef enum {SLIDERS,ZOOMER,BOTH,INTRO,QUESTIONNAIRE}interfaceType;
+typedef enum {SLIDERS,ZOOMER,BOTH,INTRO,QUESTIONNAIRE, HELP}interfaceType;
 
 class testApp : public ofxiPhoneApp {
 
@@ -44,7 +44,7 @@
     IntroViewController * introViewController;
     TopButtonViewController * topButtonViewController;
     SliderViewController * sliderViewController;
-    
+    TimedSessionController * tsc;
     int prevTouchX;
     int prevTouchY;
     double prevDist;
--- a/testApp.mm	Mon Feb 18 11:45:05 2013 +0000
+++ b/testApp.mm	Fri Feb 22 17:41:38 2013 +0000
@@ -17,14 +17,15 @@
 //--------------------------------------------------------------
 void testApp::setup(){
     paused = true;
-	
+
    
     ofBackground( 0, 0, 0 );
     ofEnableAlphaBlending();
     //ofEnableSmoothing();
 
-	// open an outgoing connection to HOST:PORT
-	sender.setup( HOST, PORT );
+	// open an outgoing connection to HOST:PORT for OSC
+    
+	sender.setup( OSC_HOST, OSC_PORT );
     ofSetFrameRate(50);
     // reciever
     lastMoveTime = ofGetSystemTimeMicros();
@@ -83,7 +84,7 @@
 	
     [bottomTabViewController setAppRef:(id)this];
     bottomTabViewController.view.frame = CGRectMake(0,getHeight()-44,getWidth(),44);
-    
+    bottomTabViewController.view.hidden = YES;
 
     /////
     
@@ -112,14 +113,21 @@
 
     // initialise user logging stuff
     presetManager.startupLoadAll();
+    tsc = [[TimedSessionController alloc] init];
+    [tsc setAppRef:(id)this];
     eventLogger.init();
     
     // timer.init();
+	whichInterfaceShowing = BOTH; // but timer will change this
+
     
-    whichInterfaceShowing = SLIDERS;
+    if(eventLogger.questionnaireCompleted){
+        [bottomTabViewController show:(id)this withSelection:1];
+    }
     setAllGUISliders(theGridView.getParams());
     // GO
     paused = false;
+
     
 }
 
@@ -193,8 +201,7 @@
     // stop updating / drawing
 
     // if(eventLogger.questionnaireCompleted) return;
-    
-    paused = true; // need to set button
+
     [topButtonViewController pausePressed:(id)this];
     
     //stopSequencer
@@ -216,18 +223,19 @@
     eventLogger.questionnaireAnswersObtained(answers, userComments);
     
     // set "we've done questionnaire" to true in event logger
-    paused = false;
 
     whichInterfaceShowing = BOTH;
     // tell bottomtabviewcontroller
-    [bottomTabViewController show:(id)this];
+    [bottomTabViewController show:(id)this withSelection:1];
+
 }
 //--------------------------------------------------------------
 void testApp::showIntro(){
-    paused = true;
 
     cout << "SHOW INTRO\n";
 
+    [tsc cancelTimers];
+    bottomTabViewController.view.hidden = YES;
     introViewController	= [[IntroViewController alloc] initWithNibName:@"IntroViewController" bundle:nil];
     [ofxiPhoneGetGLParentView() addSubview:introViewController.view];
 	
@@ -242,7 +250,9 @@
 void testApp::introHidden(bool OK){
     if(OK){
         eventLogger.consentGiven = true;
-        whichInterfaceShowing = BOTH;
+        //
+        // clear presets?
+        presetManager.clearAll();
         // show username prompt
         [usernameAlertViewController showUserNamePrompt];
     }
@@ -293,9 +303,10 @@
     // LEFT GUI
     sliderGUI = new ofxUICanvas(0,100,SLIDER_GUI_WIDTH,getHeight());
 
+    
     // Uh.. loop this
     for(int i = 1; i<=10;i++){
-        
+    
         ofxUISlider *slider;
         slider = (ofxUISlider *)sliderGUI->addWidgetDown(new ofxUISlider(length,dim,0.0,127,64,sliderParamNames[i-1]));
         slider->setDrawPadding(true);
@@ -373,14 +384,14 @@
 }
 //-
 void testApp::showHelp(){
-    paused = true;
+    whichInterfaceShowing = HELP;
     seqStartStop(false);
     [topButtonViewController pausePressed:(id)this];
     helpViewController.view.hidden = NO;
     eventLogger.logEvent(HELP_PRESSED);
 }
 void testApp::helpHidden(){
-    paused = false;
+    whichInterfaceShowing = BOTH;
     // start seq?
     
 }
@@ -477,7 +488,6 @@
 }
 //--------------------------------------------------------------
 void testApp::draw(){
-    if(paused) return;
 
     switch (whichInterfaceShowing){
         case SLIDERS: