2013-10-18 18:14:03 +02:00
|
|
|
// -*- Mode: Objective-C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
//
|
|
|
|
// This file is part of the LibreOffice project.
|
|
|
|
//
|
|
|
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
|
|
|
|
#import "MLOTestingTileParameter.h"
|
|
|
|
#import "MLOTestingTileParametersViewController.h"
|
|
|
|
|
|
|
|
@interface MLOTestingTileParameter ()
|
|
|
|
@property MLOTestingTileParametersViewController * params;
|
2013-11-01 14:47:04 +02:00
|
|
|
@property (nonatomic,strong) MLOTestingTileParameterExtractor extractor1;
|
|
|
|
@property (nonatomic,strong) MLOTestingTileParameterExtractor extractor2;
|
2013-10-18 18:14:03 +02:00
|
|
|
@property UILabel * label;
|
|
|
|
@property UITextField * data;
|
2013-11-01 12:48:31 +02:00
|
|
|
@property UITextField * step;
|
2013-10-18 18:14:03 +02:00
|
|
|
@property NSInteger defaultValue;
|
2013-11-01 12:48:31 +02:00
|
|
|
@property UIStepper * dataStepper;
|
|
|
|
@property UIStepper * stepStepper;
|
2013-10-18 18:14:03 +02:00
|
|
|
@end
|
|
|
|
|
2013-11-01 12:48:31 +02:00
|
|
|
static const CGFloat DEFAULT_STEP_VALUE = 1;
|
|
|
|
|
2013-10-18 18:14:03 +02:00
|
|
|
@implementation MLOTestingTileParameter
|
|
|
|
|
2013-11-01 14:47:04 +02:00
|
|
|
-(MLOTestingTileParameter *)initWithParams:(MLOTestingTileParametersViewController *) params label:(NSString *)label extractor1:(MLOTestingTileParameterExtractor) extractor1 extractor2:(MLOTestingTileParameterExtractor) extractor2 defaultValue:(NSInteger) defaultValue{
|
2013-10-18 18:14:03 +02:00
|
|
|
NSLog(@"Creating tile testing param %@ with default value %d",label,defaultValue);
|
|
|
|
self = [self init];
|
|
|
|
if(self){
|
|
|
|
self.params = params;
|
2013-11-01 14:47:04 +02:00
|
|
|
self.extractor1 = extractor1;
|
|
|
|
self.extractor2 = extractor2;
|
2013-10-18 18:14:03 +02:00
|
|
|
self.defaultValue = defaultValue;
|
|
|
|
[self initLabel:label];
|
2013-11-01 12:48:31 +02:00
|
|
|
self.dataStepper = [self createStepper];
|
|
|
|
self.stepStepper = [self createStepper];
|
|
|
|
[self initDataTextField];
|
|
|
|
[self initStepTextField];
|
2013-10-18 18:14:03 +02:00
|
|
|
}
|
|
|
|
return self;
|
|
|
|
}
|
|
|
|
|
2013-11-01 12:48:31 +02:00
|
|
|
-(UIStepper *) createStepper{
|
|
|
|
UIStepper * stepper = [UIStepper new];
|
|
|
|
stepper.maximumValue = MAXFLOAT;
|
|
|
|
stepper.minimumValue = -MAXFLOAT;
|
|
|
|
stepper.stepValue = DEFAULT_STEP_VALUE;
|
|
|
|
stepper.autorepeat = YES;
|
|
|
|
stepper.continuous = NO;
|
|
|
|
[stepper addObserver:self forKeyPath:@"value"
|
2013-11-01 13:09:28 +02:00
|
|
|
options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
|
2013-11-01 12:48:31 +02:00
|
|
|
context:0];
|
|
|
|
return stepper;
|
|
|
|
}
|
|
|
|
|
|
|
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
|
|
|
{
|
|
|
|
|
|
|
|
if (object == self.dataStepper) {
|
2013-11-01 13:09:28 +02:00
|
|
|
NSNumber * newNumber = change[NSKeyValueChangeNewKey];
|
|
|
|
NSNumber * oldNumber = change[NSKeyValueChangeOldKey];
|
|
|
|
|
|
|
|
CGFloat value = [self currentDataValue] + [newNumber floatValue] - [oldNumber floatValue];
|
2013-11-01 12:48:31 +02:00
|
|
|
|
|
|
|
if(value == ((NSInteger) value)){
|
|
|
|
self.data.text = [[NSNumber numberWithInteger:(NSInteger) value] stringValue];
|
|
|
|
}else{
|
|
|
|
self.data.text = [[NSNumber numberWithFloat:value] stringValue];
|
|
|
|
}
|
|
|
|
[self.params renderTile];
|
|
|
|
}else if (object == self.stepStepper){
|
|
|
|
|
|
|
|
NSNumber * floatNumber = change[NSKeyValueChangeNewKey];
|
|
|
|
NSInteger value = [floatNumber integerValue];
|
|
|
|
NSNumber * newValue = [NSNumber numberWithInteger:value];
|
|
|
|
self.step.text = [newValue stringValue];
|
|
|
|
self.dataStepper.stepValue = [newValue floatValue];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
-(void)initStepTextField{
|
|
|
|
|
|
|
|
self.step =[[UITextField alloc] initWithFrame:CGRECT_ZERO];
|
|
|
|
self.data.textAlignment = NSTextAlignmentLeft;
|
|
|
|
self.step.text = [[NSNumber numberWithInteger:(NSInteger)DEFAULT_STEP_VALUE] stringValue];
|
|
|
|
}
|
|
|
|
|
2013-10-18 18:14:03 +02:00
|
|
|
-(NSString *)description{
|
|
|
|
return [@"MLOTestingTileParameter: " stringByAppendingString:self.label.text];
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void) initLabel:(NSString *) label{
|
|
|
|
self.label =[[UILabel alloc] initWithFrame:CGRECT_ZERO];
|
|
|
|
self.label.text = label;
|
2013-11-01 12:48:31 +02:00
|
|
|
self.label.textAlignment = NSTextAlignmentCenter;
|
2013-10-18 18:14:03 +02:00
|
|
|
}
|
|
|
|
|
2013-11-01 12:48:31 +02:00
|
|
|
-(void) initDataTextField{
|
2013-10-18 18:14:03 +02:00
|
|
|
self.data = [[UITextField alloc] initWithFrame:CGRECT_ZERO];
|
|
|
|
[self.data setKeyboardType:UIKeyboardTypeNumberPad];
|
|
|
|
self.data.textAlignment = NSTextAlignmentLeft;
|
|
|
|
[self resetValue];
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void)resetValue{
|
|
|
|
|
|
|
|
self.data.text = [NSString stringWithFormat:@"%d",self.defaultValue];
|
|
|
|
}
|
|
|
|
|
|
|
|
-(void)setParamFrame:(CGRect) paramFrame{
|
|
|
|
NSLog(@"%@ setParamFrame",self);
|
|
|
|
|
2013-11-01 12:48:31 +02:00
|
|
|
CGFloat x = paramFrame.origin.x;
|
|
|
|
CGFloat y = paramFrame.origin.y;
|
|
|
|
CGFloat w = paramFrame.size.width;
|
|
|
|
CGFloat h = paramFrame.size.height;
|
|
|
|
|
|
|
|
CGFloat labelW = w/3.0f;
|
|
|
|
CGFloat otherW = w/6.0f;
|
|
|
|
|
|
|
|
self.label.frame=CGRectMake(x,
|
|
|
|
y,
|
|
|
|
labelW,
|
|
|
|
h);
|
|
|
|
self.data.frame =CGRectMake(x + labelW,
|
|
|
|
y,
|
|
|
|
otherW,
|
|
|
|
h);
|
|
|
|
self.dataStepper.frame = CGRectMake(x + labelW + otherW,
|
|
|
|
y,
|
|
|
|
otherW,
|
|
|
|
h);
|
|
|
|
|
|
|
|
self.step.frame = CGRectMake(x + labelW + 2*otherW,
|
|
|
|
y,
|
|
|
|
otherW,
|
|
|
|
h);
|
|
|
|
self.stepStepper.frame = CGRectMake(x + labelW + 3*otherW,
|
|
|
|
y,
|
|
|
|
otherW,
|
|
|
|
h);
|
|
|
|
|
2013-10-18 18:14:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
-(void)addToSuperview{
|
|
|
|
NSLog(@"%@ addToSuperview",self);
|
|
|
|
[self.params.view addSubview:self.label];
|
|
|
|
[self.params.view addSubview:self.data];
|
2013-11-01 12:48:31 +02:00
|
|
|
[self.params.view addSubview:self.dataStepper];
|
|
|
|
[self.params.view addSubview:self.step];
|
|
|
|
[self.params.view addSubview:self.stepStepper];
|
2013-10-18 18:14:03 +02:00
|
|
|
}
|
|
|
|
|
2013-11-01 12:48:31 +02:00
|
|
|
-(BOOL)isNumber:(NSString *) string{
|
|
|
|
|
|
|
|
return [[NSNumberFormatter new]numberFromString:string] == nil;
|
|
|
|
}
|
2013-10-18 18:14:03 +02:00
|
|
|
|
2013-11-01 12:48:31 +02:00
|
|
|
-(CGFloat) currentDataValue{
|
|
|
|
if([self isNumber:self.data.text]){
|
2013-10-18 18:14:03 +02:00
|
|
|
|
|
|
|
NSLog(@"%@ got illegal value: %@, reseting to %d",self,self.data.text,self.defaultValue);
|
|
|
|
|
|
|
|
[self resetValue];
|
|
|
|
}
|
2013-11-01 12:48:31 +02:00
|
|
|
return [self.data.text floatValue];
|
|
|
|
}
|
|
|
|
|
2013-11-01 14:47:04 +02:00
|
|
|
-(void)extract:(BOOL) isExtractor1{
|
2013-11-01 12:48:31 +02:00
|
|
|
|
2013-11-01 14:47:04 +02:00
|
|
|
NSLog(@"%@ extract %d",self,isExtractor1?1:2);
|
|
|
|
|
|
|
|
CGFloat dataValue = [self currentDataValue];
|
|
|
|
|
|
|
|
if(isExtractor1){
|
|
|
|
self.extractor1(dataValue);
|
|
|
|
}else{
|
|
|
|
self.extractor2(dataValue);
|
|
|
|
}
|
2013-10-18 18:14:03 +02:00
|
|
|
}
|
|
|
|
@end
|