diff --git a/iOS/MonsterCards/Base.lproj/Main.storyboard b/iOS/MonsterCards/Base.lproj/Main.storyboard
index b0017d5..795f07a 100644
--- a/iOS/MonsterCards/Base.lproj/Main.storyboard
+++ b/iOS/MonsterCards/Base.lproj/Main.storyboard
@@ -190,7 +190,20 @@
+
+
+
+
+
+
+
+
@@ -200,6 +213,9 @@
+
+
+
@@ -276,7 +292,7 @@
-
+
diff --git a/iOS/MonsterCards/Models/Monster.h b/iOS/MonsterCards/Models/Monster.h
index 290f5e2..b4bbcf6 100644
--- a/iOS/MonsterCards/Models/Monster.h
+++ b/iOS/MonsterCards/Models/Monster.h
@@ -63,6 +63,8 @@ NS_ASSUME_NONNULL_BEGIN
-(id)initWithJSONString:(NSString*)jsonString andContext:(NSManagedObjectContext*)context;
-(id)initWithJSONData:(NSData*)jsonData andContext:(NSManagedObjectContext*)context;
-(id)initWithMonster:(Monster*)monster;
+-(void)copyFromMonster:(Monster*)monster;
+
-(NSString*)meta;
-(int)abilityScoreForAbilityScoreName: (NSString*)abilityScoreName;
-(int)abilityModifierForAbilityScoreName: (NSString*)abilityScoreName;
diff --git a/iOS/MonsterCards/Models/Monster.m b/iOS/MonsterCards/Models/Monster.m
index d8bcf55..258e266 100644
--- a/iOS/MonsterCards/Models/Monster.m
+++ b/iOS/MonsterCards/Models/Monster.m
@@ -7,6 +7,7 @@
//
#import "Monster.h"
+#import "StringHelper.h"
@implementation Monster
@@ -54,6 +55,7 @@
self = [super init];
self.name = @"";
+ self.size = @"";
return self;
}
@@ -69,7 +71,8 @@
NSDictionary *jsonRoot = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
- self.name = [jsonRoot objectForKey:@"name"];
+ self.name = [jsonRoot objectForKey:@"name"] ?: @"";
+ self.size = [jsonRoot objectForKey:@"size"] ?: @"";
return self;
}
@@ -83,7 +86,26 @@
}
-(NSString*)meta {
- @throw [[NSException alloc] initWithName:@"unimplemented" reason:@"Method not implemented." userInfo:nil];
+ //"${size} ${type} (${subtype}) ${alignment}"
+
+ NSMutableArray *parts = [NSMutableArray arrayWithCapacity:4];
+ if (![StringHelper isStringNilOrEmpty:self.size]) {
+ [parts addObject:self.size];
+ }
+
+ if (![StringHelper isStringNilOrEmpty:self.type]) {
+ [parts addObject:self.type];
+ }
+
+ if (![StringHelper isStringNilOrEmpty:self.subtype]) {
+ [parts addObject:[NSString stringWithFormat:@"(%@)", self.subtype]];
+ }
+
+ if (![StringHelper isStringNilOrEmpty:self.alignment]) {
+ [parts addObject:self.alignment];
+ }
+
+ return [parts componentsJoinedByString:@" "];
}
-(int)abilityScoreForAbilityScoreName: (NSString*)abilityScoreName {
@@ -309,4 +331,9 @@
@throw [[NSException alloc] initWithName:@"unimplemented" reason:@"Method not implemented." userInfo:nil];
}
+-(void)copyFromMonster:(Monster*)monster {
+ self.name = monster.name;
+ self.size = monster.size;
+}
+
@end
diff --git a/iOS/MonsterCards/MonsterCards.xcdatamodeld/MonsterCards.xcdatamodel/contents b/iOS/MonsterCards/MonsterCards.xcdatamodeld/MonsterCards.xcdatamodel/contents
index f130f0b..f9229af 100644
--- a/iOS/MonsterCards/MonsterCards.xcdatamodeld/MonsterCards.xcdatamodel/contents
+++ b/iOS/MonsterCards/MonsterCards.xcdatamodeld/MonsterCards.xcdatamodel/contents
@@ -3,7 +3,7 @@
-
+
diff --git a/iOS/MonsterCards/Views/EditMonsterViewController.m b/iOS/MonsterCards/Views/EditMonsterViewController.m
index fa6f4ad..4c0c276 100644
--- a/iOS/MonsterCards/Views/EditMonsterViewController.m
+++ b/iOS/MonsterCards/Views/EditMonsterViewController.m
@@ -41,7 +41,7 @@
[_context rollback];
} else if ([@"SaveChanges" isEqualToString:segue.identifier]) {
// TODO: this should use a method on originalMonster to copy values from editingMonster or pass the new monster back some way. Core Data would save and probably trigger a refresh in the receiving view.
- self.originalMonster.name = self.editingMonster.name;
+ [self.originalMonster copyFromMonster:self.editingMonster];
[_context refreshObject:self.editingMonster mergeChanges:NO];
[_context save:nil];
} else {
@@ -59,7 +59,7 @@
// * Subtype
// * Alignment
- return 1;
+ return 2;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
@@ -76,9 +76,20 @@
}
shortStringCell.delegate = self;
shortStringCell.identifier = @"monster.name";
- // TODO: make these setters on EditableShortStringTableViewCell
+ // TODO: make these use setters on EditableShortStringTableViewCell
shortStringCell.textField.text = self.editingMonster.name;
- shortStringCell.textField.placeholder = @"Name";
+ shortStringCell.textField.placeholder = NSLocalizedString(@"Name", @"Placeholder text for the name of a monster or NPC.");
+ return shortStringCell;
+ case 1:
+ shortStringCell = [self.monsterTableView dequeueReusableCellWithIdentifier:@"EditableShortString"];
+ if (shortStringCell == nil) {
+ shortStringCell = [[EditableShortStringTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"EditableShortString"];
+ }
+ shortStringCell.delegate = self;
+ shortStringCell.identifier = @"monster.size";
+ // TODO: make these use setters on EditableShortStringTableViewCell
+ shortStringCell.textField.text = self.editingMonster.size;
+ shortStringCell.textField.placeholder = NSLocalizedString(@"Size", @"Placehodler text for the size of a monster or NPC.");
return shortStringCell;
}
break;
@@ -93,6 +104,8 @@
if ([@"String" isEqualToString:type]) {
if ([@"monster.name" isEqualToString:identifier]) {
self.editingMonster.name = (NSString*)value;
+ } else if ([@"monster.size" isEqualToString:identifier]) {
+ self.editingMonster.size = (NSString*)value;
}
}
}
diff --git a/iOS/MonsterCards/Views/LibraryViewController.m b/iOS/MonsterCards/Views/LibraryViewController.m
index b80f958..69b781b 100644
--- a/iOS/MonsterCards/Views/LibraryViewController.m
+++ b/iOS/MonsterCards/Views/LibraryViewController.m
@@ -34,7 +34,7 @@
- (IBAction)addNewMonster:(id)sender {
Monster *monster = [[Monster alloc] initWithContext:_context];
- monster.name = @"Unnamed Monster";
+ monster.name = NSLocalizedString(@"Unnamed Monster", @"The default name of a new monster.");
self.allMonsters = [self.allMonsters arrayByAddingObject:monster];
//DispatchQueue.main.async{"code here"}
[_context save:nil];
diff --git a/iOS/MonsterCards/Views/MonsterViewController.h b/iOS/MonsterCards/Views/MonsterViewController.h
index 33d6ca3..305ad8e 100644
--- a/iOS/MonsterCards/Views/MonsterViewController.h
+++ b/iOS/MonsterCards/Views/MonsterViewController.h
@@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface MonsterViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *monsterName;
+@property (weak, nonatomic) IBOutlet UILabel *monsterMeta;
@property Monster* monster;
diff --git a/iOS/MonsterCards/Views/MonsterViewController.m b/iOS/MonsterCards/Views/MonsterViewController.m
index 7e2a19c..33a0b66 100644
--- a/iOS/MonsterCards/Views/MonsterViewController.m
+++ b/iOS/MonsterCards/Views/MonsterViewController.m
@@ -35,6 +35,12 @@
self.navigationItem.title = self.monster.name;
}
}
+ NSString *metaText = self.monster.meta;
+ if (metaText == nil) {
+ self.monsterMeta.text = @"";
+ } else {
+ self.monsterMeta.text = metaText;
+ }
}
- (IBAction)unwindWithSegue:(UIStoryboardSegue *)unwindSegue {
diff --git a/iOS/MonsterCardsTests/Models/MonsterTests.m b/iOS/MonsterCardsTests/Models/MonsterTests.m
index f262cb2..58cd575 100644
--- a/iOS/MonsterCardsTests/Models/MonsterTests.m
+++ b/iOS/MonsterCardsTests/Models/MonsterTests.m
@@ -25,7 +25,7 @@
- (void)setUp {
_context = nil;
_monster = [[Monster alloc] initWithContext:_context];
- _jsonString = @"{\"name\":\"Acolyte\"}";
+ _jsonString = @"{\"name\":\"Acolyte\",\"size\":\"large\"}";
_jsonData = [_jsonString dataUsingEncoding:NSUTF8StringEncoding];
}
@@ -36,6 +36,7 @@
- (void)testDefaultInitializer {
XCTAssertNotNil(_monster);
XCTAssertEqualObjects(@"", _monster.name);
+ XCTAssertEqualObjects(@"", _monster.size);
}
- (void)testInitWithJSONString {
@@ -43,13 +44,22 @@
XCTAssertNotNil(_monster);
XCTAssertEqualObjects(@"Acolyte", _monster.name);
+ XCTAssertEqualObjects(@"large", _monster.size);
}
+- (void)testInitWithEmptyJSONString {
+ _monster = [[Monster alloc] initWithJSONString:@"{}" andContext:_context];
+
+ XCTAssertNotNil(_monster);
+ XCTAssertEqualObjects(@"", _monster.name);
+ XCTAssertEqualObjects(@"", _monster.size);
+}
- (void)testInitWithJSONData {
_monster = [[Monster alloc] initWithJSONData:_jsonData andContext:_context];
XCTAssertNotNil(_monster);
XCTAssertEqualObjects(@"Acolyte", _monster.name);
+ XCTAssertEqualObjects(@"large", _monster.size);
}
- (void)testNameGetterAndSetter {
@@ -58,4 +68,10 @@
XCTAssertEqualObjects(name, _monster.name);
}
+- (void)testSizeGetterAndSetter {
+ NSString *size = @"huge";
+ _monster.size = size;
+ XCTAssertEqualObjects(size, _monster.size);
+}
+
@end