It is more interesting to get smaller text in the initial tile. Also, make the tile fit on the screen of an iPad. Change-Id: Ibe4e7f055ec2782a4fd96a3ae585d4630449f0ee
205 lines
7.1 KiB
Objective-C
205 lines
7.1 KiB
Objective-C
// -*- 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;
|
|
@property (nonatomic,strong) MLOTestingTileParameterExtractor widthIsHeightExtractor;
|
|
@property (nonatomic,strong) MLOTestingTileParameterExtractor widthIsNotHeightExtractor;
|
|
@property UILabel * label;
|
|
@property UITextField * data;
|
|
@property UITextField * step;
|
|
@property NSInteger defaultValue;
|
|
@property UIStepper * dataStepper;
|
|
@property UIStepper * stepStepper;
|
|
@end
|
|
|
|
static const CGFloat DEFAULT_STEP_VALUE = 10;
|
|
|
|
@implementation MLOTestingTileParameter
|
|
|
|
-(MLOTestingTileParameter *)initWithParams:(MLOTestingTileParametersViewController *) params label:(NSString *)label widthIsNotHeightExtractor:(MLOTestingTileParameterExtractor) widthIsNotHeightExtractor widthIsHeightExtractor:(MLOTestingTileParameterExtractor) widthIsHeightExtractor defaultValue:(NSInteger) defaultValue{
|
|
NSLog(@"Creating tile testing param %@ with default value %d",label,defaultValue);
|
|
self = [self init];
|
|
if(self){
|
|
self.params = params;
|
|
self.widthIsHeightExtractor = widthIsHeightExtractor;
|
|
self.widthIsNotHeightExtractor = widthIsNotHeightExtractor;
|
|
self.defaultValue = defaultValue;
|
|
[self initLabel:label];
|
|
self.dataStepper = [self stepperWithMinValue:-MAXFLOAT];
|
|
self.stepStepper = [self stepperWithMinValue:1];
|
|
// The step stepper obviously needs a step value of 1,
|
|
// and an initial value of DEFAULT_STEP_VALUE.
|
|
self.stepStepper.stepValue = 1;
|
|
self.stepStepper.value = DEFAULT_STEP_VALUE;
|
|
[self initDataTextField];
|
|
[self initStepTextField];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
-(UIStepper *) stepperWithMinValue:(CGFloat) minValue{
|
|
UIStepper * stepper = [UIStepper new];
|
|
stepper.maximumValue = MAXFLOAT;
|
|
stepper.minimumValue = minValue;
|
|
stepper.stepValue = DEFAULT_STEP_VALUE;
|
|
stepper.autorepeat = YES;
|
|
stepper.continuous = NO;
|
|
[stepper addObserver:self forKeyPath:@"value"
|
|
options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld
|
|
context:0];
|
|
return stepper;
|
|
}
|
|
|
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
|
{
|
|
|
|
if (object == self.dataStepper) {
|
|
NSNumber * newNumber = change[NSKeyValueChangeNewKey];
|
|
NSNumber * oldNumber = change[NSKeyValueChangeOldKey];
|
|
|
|
CGFloat value = [self currentDataValue] + [newNumber floatValue] - [oldNumber floatValue];
|
|
|
|
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];
|
|
}
|
|
|
|
-(NSString *)description{
|
|
return [@"MLOTestingTileParameter: " stringByAppendingString:self.label.text];
|
|
}
|
|
|
|
-(void) initLabel:(NSString *) label{
|
|
self.label =[[UILabel alloc] initWithFrame:CGRECT_ZERO];
|
|
self.label.text = label;
|
|
self.label.textAlignment = NSTextAlignmentCenter;
|
|
}
|
|
|
|
-(void) initDataTextField{
|
|
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);
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
-(void)addToSuperview{
|
|
NSLog(@"%@ addToSuperview",self);
|
|
[self.params.view addSubview:self.label];
|
|
[self.params.view addSubview:self.data];
|
|
[self.params.view addSubview:self.dataStepper];
|
|
[self.params.view addSubview:self.step];
|
|
[self.params.view addSubview:self.stepStepper];
|
|
}
|
|
|
|
-(BOOL)isNumber:(NSString *) string{
|
|
|
|
return [[NSNumberFormatter new]numberFromString:string] == nil;
|
|
}
|
|
|
|
-(CGFloat) currentDataValue{
|
|
if([self isNumber:self.data.text]){
|
|
|
|
NSLog(@"%@ got illegal value: %@, reseting to %d",self,self.data.text,self.defaultValue);
|
|
|
|
[self resetValue];
|
|
}
|
|
return [self.data.text floatValue];
|
|
}
|
|
|
|
-(MLOTestingTileParameterExtractor) getExtractor:(MLOTestingTileParametersMode) mode{
|
|
switch (mode) {
|
|
case WIDTH_IS_HEIGHT:
|
|
return self.widthIsHeightExtractor;
|
|
case WIDTH_IS_NOT_HEIGHT:
|
|
return self.widthIsNotHeightExtractor;
|
|
}
|
|
}
|
|
|
|
-(void)extractMode:(MLOTestingTileParametersMode) mode{
|
|
MLOTestingTileParameterExtractor extractor = [self getExtractor:mode];
|
|
if(extractor!=nil){
|
|
// NSLog(@"%@ extract %@",self,MLOTestingTileParametersModeString(mode));
|
|
extractor([self currentDataValue]);
|
|
}
|
|
}
|
|
-(BOOL)isSupportingMode:(MLOTestingTileParametersMode) mode{
|
|
return [self getExtractor:mode]!=nil;
|
|
}
|
|
-(void)enterMode:(MLOTestingTileParametersMode)mode{
|
|
CGFloat alpha = [self isSupportingMode:mode] ? 1.0f: 0.0f;
|
|
self.label.alpha = alpha;
|
|
self.data.alpha = alpha;
|
|
self.dataStepper.alpha = alpha;
|
|
self.step.alpha =alpha;
|
|
self.stepStepper.alpha = alpha;
|
|
}
|
|
|
|
@end
|