You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.8 KiB
69 lines
2.8 KiB
//
|
|
// FLEXArgumentInputViewFactory.m
|
|
// FLEXInjected
|
|
//
|
|
// Created by Ryan Olson on 6/15/14.
|
|
//
|
|
//
|
|
|
|
#import "FLEXArgumentInputViewFactory.h"
|
|
#import "FLEXArgumentInputView.h"
|
|
#import "FLEXArgumentInputJSONObjectView.h"
|
|
#import "FLEXArgumentInputNumberView.h"
|
|
#import "FLEXArgumentInputSwitchView.h"
|
|
#import "FLEXArgumentInputStructView.h"
|
|
#import "FLEXArgumentInputNotSupportedView.h"
|
|
#import "FLEXArgumentInputStringView.h"
|
|
#import "FLEXArgumentInputFontView.h"
|
|
#import "FLEXArgumentInputColorView.h"
|
|
#import "FLEXArgumentInputDateView.h"
|
|
|
|
@implementation FLEXArgumentInputViewFactory
|
|
|
|
+ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding
|
|
{
|
|
return [self argumentInputViewForTypeEncoding:typeEncoding currentValue:nil];
|
|
}
|
|
|
|
+ (FLEXArgumentInputView *)argumentInputViewForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue
|
|
{
|
|
Class subclass = [self argumentInputViewSubclassForTypeEncoding:typeEncoding currentValue:currentValue];
|
|
if (!subclass) {
|
|
// Fall back to a FLEXArgumentInputNotSupportedView if we can't find a subclass that fits the type encoding.
|
|
// The unsupported view shows "nil" and does not allow user input.
|
|
subclass = [FLEXArgumentInputNotSupportedView class];
|
|
}
|
|
return [[subclass alloc] initWithArgumentTypeEncoding:typeEncoding];
|
|
}
|
|
|
|
+ (Class)argumentInputViewSubclassForTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue
|
|
{
|
|
Class argumentInputViewSubclass = nil;
|
|
NSArray<Class> *inputViewClasses = @[[FLEXArgumentInputColorView class],
|
|
[FLEXArgumentInputFontView class],
|
|
[FLEXArgumentInputStringView class],
|
|
[FLEXArgumentInputStructView class],
|
|
[FLEXArgumentInputSwitchView class],
|
|
[FLEXArgumentInputDateView class],
|
|
[FLEXArgumentInputNumberView class],
|
|
[FLEXArgumentInputJSONObjectView class]];
|
|
|
|
// Note that order is important here since multiple subclasses may support the same type.
|
|
// An example is the number subclass and the bool subclass for the type @encode(BOOL).
|
|
// Both work, but we'd prefer to use the bool subclass.
|
|
for (Class inputView in inputViewClasses) {
|
|
if ([inputView supportsObjCType:typeEncoding withCurrentValue:currentValue]) {
|
|
argumentInputViewSubclass = inputView;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return argumentInputViewSubclass;
|
|
}
|
|
|
|
+ (BOOL)canEditFieldWithTypeEncoding:(const char *)typeEncoding currentValue:(id)currentValue
|
|
{
|
|
return [self argumentInputViewSubclassForTypeEncoding:typeEncoding currentValue:currentValue] != nil;
|
|
}
|
|
|
|
@end
|