diff --git a/contrib/mobile/iOS/Onelab/Parameter.h b/contrib/mobile/iOS/Onelab/Parameter.h index d226ef2ad0c5c4154bf1a41d52369de280af2d5b..5250ce6b39ba81fb090a41e7dffc9ba3f2066aba 100644 --- a/contrib/mobile/iOS/Onelab/Parameter.h +++ b/contrib/mobile/iOS/Onelab/Parameter.h @@ -55,6 +55,15 @@ -(UISwitch *)getCheckbox; @end +@interface ParameterNumberStepper : Parameter +{ + @protected + UIStepper *stepper; +} +-(id)initWithNumber:(onelab::number)number; +-(UIStepper *)getStepper; +@end + @interface ParameterNumberRange : Parameter { @protected diff --git a/contrib/mobile/iOS/Onelab/Parameter.mm b/contrib/mobile/iOS/Onelab/Parameter.mm index be8d85c63dea062600835cad69f3798386d963a5..251d98f54135bb050c285bfa25e7b22fd430ec94 100644 --- a/contrib/mobile/iOS/Onelab/Parameter.mm +++ b/contrib/mobile/iOS/Onelab/Parameter.mm @@ -230,6 +230,56 @@ } @end +@implementation ParameterNumberStepper +-(id) initWithNumber:(onelab::number) number +{ + self = [super init]; + if(self) + { + name = [NSString stringWithCString:number.getName().c_str() encoding:[NSString defaultCStringEncoding]]; + label.alpha = (number.getReadOnly())? 0.439216f : 1.0f; + stepper = [[UIStepper alloc] init]; + [stepper setValue:number.getValue()]; + [stepper setStepValue:1]; + [stepper setMaximumValue:number.getMax()]; + [stepper setMinimumValue:number.getMin()]; + [stepper addTarget:self action:@selector(stepperValueChanged:) forControlEvents:UIControlEventValueChanged]; + [label setText:[NSString stringWithFormat:@"%s %d" ,number.getShortName().c_str(), (int)number.getValue()]]; + } + return self; +} +-(void)stepperValueChanged:(UIStepper *)sender +{ + std::vector<onelab::number> number; + onelab::server::instance()->get(number,[name UTF8String]); + if(number.size() < 1) return; + number[0].setValue(sender.value); + onelab::server::instance()->set(number[0]); + [label setText:[NSString stringWithFormat:@"%s %d" ,number[0].getShortName().c_str(), (int)number[0].getValue()]]; + if(onelab_cb("check") == 1) + [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" object:nil]; +} +-(void)refresh +{ + std::vector<onelab::number> number; + onelab::server::instance()->get(number,[name UTF8String]); + if(number.size() < 1) return; + [stepper setValue:number[0].getValue()]; +} +-(void)setFrame:(CGRect)frame +{ + [stepper setFrame:frame]; +} +-(UIStepper *)getStepper +{ + return stepper; +} ++(double)getHeight +{ + return 60.0f; +} +@end + @implementation ParameterNumberRange -(id) initWithNumber:(onelab::number) number { diff --git a/contrib/mobile/iOS/Onelab/ParametersViewController.mm b/contrib/mobile/iOS/Onelab/ParametersViewController.mm index 14f2dbcf30c5213254e2dcfb483df2da9d757259..dee73a14a3f7e659a301f6627b2d9b714784d289 100644 --- a/contrib/mobile/iOS/Onelab/ParametersViewController.mm +++ b/contrib/mobile/iOS/Onelab/ParametersViewController.mm @@ -82,6 +82,10 @@ ParameterNumberTextbox *param = [[ParameterNumberTextbox alloc] initWithNumber:p]; [section addObject:param]; } + else if(p.getStep() == 1) { // stepper + ParameterNumberStepper *param = [[ParameterNumberStepper alloc] initWithNumber:p]; + [section addObject:param]; + } else { ParameterNumberRange *param = [[ParameterNumberRange alloc] initWithNumber:p]; @@ -289,6 +293,11 @@ [param setLabelFrame:CGRectMake(100, 5, cell.frame.size.width - 110, cell.frame.size.height)]; [param setFrame:CGRectMake(20, 5, cell.frame.size.width - 40, cell.frame.size.height)]; [cell addSubview:[param getCheckbox]]; + } + else if([tmp isKindOfClass:[ParameterNumberStepper class]]) { + ParameterNumberStepper *param = (ParameterNumberStepper *)tmp; + [param setFrame:CGRectMake(20, cell.frame.size.height/2+5, cell.frame.size.width - 40, cell.frame.size.height/2)]; + [cell addSubview:[param getStepper]]; } else if([tmp isKindOfClass:[ParameterNumberRange class]]) { ParameterNumberRange *param = (ParameterNumberRange *)tmp;