view QuestionnaireViewController.mm @ 21:650589cac373

Picker view stuff started.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Fri, 18 Jan 2013 15:48:33 +0000
parents fb2ef16dd013
children 8c0783739337
line wrap: on
line source
//
//  QuestionnaireViewController.m
//  oscSenderExample
//
//  Created by Robert Tubb on 16/01/2013.
//
//

#import "QuestionnaireViewController.h"

#include "testApp.h"

#pragma mark -
#pragma mark QuestionnaireViewController

@interface QuestionnaireViewController ()
    // the "model" is an array of questions and a bunch of answers
@property (strong, nonatomic)       NSArray * questionArray;
@property (strong, nonatomic)       NSArray * answerTypeArray;
@property (strong, nonatomic)       NSMutableArray * answerArray;
@property (nonatomic)               NSInteger currentQuestionIndex;
@property (nonatomic, assign)       id theOFAppRef;

/*


*/

@end

@implementation QuestionnaireViewController

@synthesize picker;
@synthesize agreeAnswer;
@synthesize agreeType;
@synthesize answerTypeArray;
@synthesize nextButton = _nextButton;
@synthesize segControl = _segControl;

//----------------------------------------------------------------
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        
        [self populateQuestionArray ];
        [self populateAnswerArray];
        
    }
    return self;
}
- (void)setAppRef:(id)theOFApp{
    self.theOFAppRef = theOFApp;
    
}
//----------------------------------------------------------------
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.currentQuestionIndex = 0;
    // load question 1
    
    self.agreeAnswer = [[NSArray alloc] initWithObjects:
                        @"Strongly disagree", @"Disagree", @"Neither",
                        @"Agree", @"Strongly agree", nil];
    
    self.interfaceAnswer = [[NSArray alloc] initWithObjects:
                            @"Definitely Sliders", @"Maybe Sliders", @"Neither",
                            @"Maybe Zoomer", @"Definitely Zoomer", nil];
    agreeType = YES;
    
    [self loadQuestion:self.currentQuestionIndex];
}
//----------------------------------------------------------------
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
//----------------------------------------------------------------
- (void)dealloc {

    [_questionText release];
    [_titleText release];
    [_finishButton release];
    [_nextButton release];
    [_segControl release];
    [super dealloc];
}
//----------------------------------------------------------------
- (void)viewDidUnload {
    [self setQuestionText:nil];
    [self setTitleText:nil];
    [self setFinishButton:nil];
    [self setNextButton:nil];
    [self setSegControl:nil];
    [super viewDidUnload];
}
//----------------------------------------------------------------
- (IBAction)answerWasSelected:(id)sender {
    // look at property?
    
}

//----------------------------------------------------------------
-(IBAction)hide:(id)sender{
    // c++ call with NSArray argument??
    ((testApp *)self.theOFAppRef)->questionnaireHidden(self.answerArray);
	self.view.hidden = YES;
}
//----------------------------------------------------------------
-(IBAction)show:(id)sender{
	self.view.hidden = NO;
}
//----------------------------------------------------------------

- (IBAction)nextQuestionPressed:(id)sender {
    // save answer ? no button did that hopefully
    
    // if last question show thanks
    // else go to next
    self.currentQuestionIndex++;
    if(self.currentQuestionIndex >= [self.questionArray count]){
        [self showThanks];
    }else{
        [self loadQuestion:self.currentQuestionIndex];

    }
}
//----------------------------------------------------------------
- (IBAction)previousQuestionPressed:(id)sender {
    self.currentQuestionIndex--;
    if(self.currentQuestionIndex < 0){
        // nothing
        self.currentQuestionIndex = 0;
    }else{
        [self loadQuestion:self.currentQuestionIndex];
    }
}
//----------------------------------------------------------------

// NAH
- (IBAction)answerSelected:(id)sender {
    // nice short lines of code.
    
    [self.answerArray replaceObjectAtIndex:self.currentQuestionIndex withObject:[NSNumber numberWithInteger:self.segControl.selectedSegmentIndex]];
    
    // chek wot we just rote
    
    NSLog(@"%@",[self.answerArray objectAtIndex:self.currentQuestionIndex]);
    
    
}
//----------------------------------------------------------------

- (void)showThanks{
    // hide next question button
    self.nextButton.hidden = YES;
    // hide selector
    self.segControl.hidden = YES;
    
    
    self.titleText.text = @"Thank you!";
    
    self.questionText.text = @"Thanks for helping science help you. Visit the study website to keep abreast of exciting events.";
}

//----------------------------------------------------------------
- (void)loadQuestion:(NSInteger)questionIndex {
    // populate text fields with question
    NSString *qtitle;
    qtitle = [@"Question " stringByAppendingFormat:@"%d / 16",questionIndex+1];
    self.titleText.text = qtitle;
    
    self.questionText.text = [self.questionArray objectAtIndex:questionIndex];
    
    // if question already answered show that
    NSInteger answerInt = [[self.answerArray objectAtIndex:questionIndex] integerValue];
    
    // set different answer type
    agreeType = [answerTypeArray objectAtIndex:questionIndex];
    // then refresh picker view content
    [picker reloadComponent:0];
    

    // DUZZNT WERK
    if(answerInt==-1){
        // select "neither" (2)
        NSLog(@"No answer answerInt %d", answerInt);
        [picker selectRow:2 inComponent:0 animated:YES];
        
    }else{
        // select previous answer
        NSLog(@"Prev answer answerInt %d", answerInt);
        [picker selectRow:answerInt inComponent:0 animated:YES];
    }
}
//----------------------------------------------------------------
- (void)populateQuestionArray{
    self.questionArray = [[NSArray alloc] initWithObjects:
                          @"I am familiar with music software and synthesisers.",
                          @"The best way to get a feel for the possibilities of the synth was with:",
                          @"Interesting sounds could be discovered more quickly as a result of using:",
                          @"A sound could be fine tuned more easily using:",
                          @"The correspondence between the sliders and the grid was understandable.",
                          @"The interface that felt more familiar was:",
                          @"Scrolling a greater distance the zoom grid seemed to correspond to larger  difference in the sound.",
                          @"The ability to see other presets on the grid was useful.",
                          @"The range of sounds was too limited to be able to judge the eventual usefulness of the interface.",
                          @"The interface better for generating new ideas was",
                          @"The interface better for live performance would be:",
                          @"A specific type of sound could be found more quickly using:",
                          @"I felt more in control when using:",
                          @"The Zoomer was an improvement on just using a randomiser.",
                          @"The combination of Zoomer and Sliders was more useful than either individually.",
                          @"Overall, I preferred using:",
                          nil];
    self.answerTypeArray = [[NSArray alloc] initWithObjects:
                            YES,
                            NO,
                            NO,
                            NO,
                            YES,
                            NO,
                            YES,
                            YES,
                            YES,
                            NO,
                            NO,
                            NO,
                            NO,
                            YES,
                            YES,
                            NO,
                            nil]
}
//----------------------------------------------------------------
- (void)populateAnswerArray{
    int N = [self.questionArray count];

    //[self.answerArray initWithCapacity:N]; // necessary?
    self.answerArray = [[NSMutableArray alloc] initWithCapacity:N];
    // set the number to what?
    for(int i=0;i<N;i++){
        [self.answerArray addObject:[NSNumber numberWithInt:-1]];
    }
    
}
//----------------------------------------------------------------
#pragma mark -
#pragma mark PickerView DataSource

- (NSInteger)numberOfComponentsInPickerView:
(UIPickerView *)pickerView
{
    return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
    return [agreeAnswer count]; // always 5
}
- (NSString *)pickerView:(UIPickerView *)pickerView
             titleForRow:(NSInteger)row
            forComponent:(NSInteger)component
{
    if(agreeType){
        return [agreeAnswer objectAtIndex:row];
    }else{
        return [interfaceAnswer objectAtIndex:row];
    }
}

#pragma mark -
#pragma mark PickerView Delegate
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
      inComponent:(NSInteger)component
{
    
    // set question answerArray
    [self.answerArray replaceObjectAtIndex:self.currentQuestionIndex withObject:[NSNumber numberWithInteger:row]];
    
    // chek wot we just rote
    
    NSLog(@"%@",[self.answerArray objectAtIndex:self.currentQuestionIndex]);
    /*
     float rate = [[exchangeRates objectAtIndex:row] floatValue];
     float dollars = [dollarText.text floatValue];
     float result = dollars * rate;
     
     NSString *resultString = [[NSString alloc] initWithFormat:
     @"%.2f USD = %.2f %@", dollars, result,
     [countryNames objectAtIndex:row]];
     resultLabel.text = resultString;
     */
}

@end // end implementation
//----------------------------------------------------------------
//----------------------------------------------------------------