diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/MarsWater/.DS_Store b/MarsWater/.DS_Store new file mode 100644 index 0000000..6200866 Binary files /dev/null and b/MarsWater/.DS_Store differ diff --git a/MarsWater/MarsWater.xcodeproj/project.pbxproj b/MarsWater/MarsWater.xcodeproj/project.pbxproj index a2f82e3..67feab1 100644 --- a/MarsWater/MarsWater.xcodeproj/project.pbxproj +++ b/MarsWater/MarsWater.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 5054F1241BC83BFE0047FE54 /* TaskCreationTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5054F1231BC83BFE0047FE54 /* TaskCreationTableViewController.m */; settings = {ASSET_TAGS = (); }; }; + 5054F1271BC83C0B0047FE54 /* TasksTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5054F1261BC83C0B0047FE54 /* TasksTableViewController.m */; settings = {ASSET_TAGS = (); }; }; + 84EE9E541BC8CB3000464904 /* CustomTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 84EE9E531BC8CB3000464904 /* CustomTableViewCell.m */; settings = {ASSET_TAGS = (); }; }; 8DA86CA91BC1AE57006C50BC /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DA86CA81BC1AE57006C50BC /* main.m */; }; 8DA86CAC1BC1AE57006C50BC /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DA86CAB1BC1AE57006C50BC /* AppDelegate.m */; }; 8DA86CB21BC1AE57006C50BC /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8DA86CB01BC1AE57006C50BC /* Main.storyboard */; }; @@ -22,6 +25,12 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 5054F1221BC83BFE0047FE54 /* TaskCreationTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TaskCreationTableViewController.h; sourceTree = ""; }; + 5054F1231BC83BFE0047FE54 /* TaskCreationTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TaskCreationTableViewController.m; sourceTree = ""; }; + 5054F1251BC83C0B0047FE54 /* TasksTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TasksTableViewController.h; sourceTree = ""; }; + 5054F1261BC83C0B0047FE54 /* TasksTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TasksTableViewController.m; sourceTree = ""; }; + 84EE9E521BC8CB3000464904 /* CustomTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomTableViewCell.h; sourceTree = ""; }; + 84EE9E531BC8CB3000464904 /* CustomTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomTableViewCell.m; sourceTree = ""; }; 8DA86CA41BC1AE57006C50BC /* MarsWater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MarsWater.app; sourceTree = BUILT_PRODUCTS_DIR; }; 8DA86CA81BC1AE57006C50BC /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 8DA86CAA1BC1AE57006C50BC /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -56,6 +65,30 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 84EE9E501BC8A77300464904 /* List */ = { + isa = PBXGroup; + children = ( + 8DA86CD21BC1B8E4006C50BC /* ListsTableViewController.h */, + 8DA86CD31BC1B8E4006C50BC /* ListsTableViewController.m */, + 8DA86CD51BC1B904006C50BC /* ListCreationTableViewController.h */, + 8DA86CD61BC1B904006C50BC /* ListCreationTableViewController.m */, + ); + name = List; + sourceTree = ""; + }; + 84EE9E511BC8A78200464904 /* Task */ = { + isa = PBXGroup; + children = ( + 5054F1251BC83C0B0047FE54 /* TasksTableViewController.h */, + 5054F1261BC83C0B0047FE54 /* TasksTableViewController.m */, + 84EE9E521BC8CB3000464904 /* CustomTableViewCell.h */, + 84EE9E531BC8CB3000464904 /* CustomTableViewCell.m */, + 5054F1221BC83BFE0047FE54 /* TaskCreationTableViewController.h */, + 5054F1231BC83BFE0047FE54 /* TaskCreationTableViewController.m */, + ); + name = Task; + sourceTree = ""; + }; 8DA86C9B1BC1AE57006C50BC = { isa = PBXGroup; children = ( @@ -78,10 +111,8 @@ 8DA86CD11BC1B329006C50BC /* Model */, 8DA86CAA1BC1AE57006C50BC /* AppDelegate.h */, 8DA86CAB1BC1AE57006C50BC /* AppDelegate.m */, - 8DA86CD21BC1B8E4006C50BC /* ListsTableViewController.h */, - 8DA86CD31BC1B8E4006C50BC /* ListsTableViewController.m */, - 8DA86CD51BC1B904006C50BC /* ListCreationTableViewController.h */, - 8DA86CD61BC1B904006C50BC /* ListCreationTableViewController.m */, + 84EE9E501BC8A77300464904 /* List */, + 84EE9E511BC8A78200464904 /* Task */, 8DA86CB01BC1AE57006C50BC /* Main.storyboard */, 8DA86CB61BC1AE57006C50BC /* Assets.xcassets */, 8DA86CB81BC1AE57006C50BC /* LaunchScreen.storyboard */, @@ -146,6 +177,7 @@ TargetAttributes = { 8DA86CA31BC1AE57006C50BC = { CreatedOnToolsVersion = 7.0.1; + DevelopmentTeam = B4G65K7YME; }; }; }; @@ -187,7 +219,10 @@ files = ( 8DA86CB51BC1AE57006C50BC /* MarsWater.xcdatamodeld in Sources */, 8DA86CAC1BC1AE57006C50BC /* AppDelegate.m in Sources */, + 84EE9E541BC8CB3000464904 /* CustomTableViewCell.m in Sources */, 8DB2F6EA1BC1E75500E58E65 /* Task+CoreDataProperties.m in Sources */, + 5054F1271BC83C0B0047FE54 /* TasksTableViewController.m in Sources */, + 5054F1241BC83BFE0047FE54 /* TaskCreationTableViewController.m in Sources */, 8DA86CD41BC1B8E4006C50BC /* ListsTableViewController.m in Sources */, 8DB2F6E71BC1E75500E58E65 /* List.m in Sources */, 8DB2F6E91BC1E75500E58E65 /* Task.m in Sources */, @@ -303,9 +338,10 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; INFOPLIST_FILE = MarsWater/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mikekavouras.MarsWater; + PRODUCT_BUNDLE_IDENTIFIER = espinaljovanny; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Debug; @@ -314,9 +350,10 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; INFOPLIST_FILE = MarsWater/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = com.mikekavouras.MarsWater; + PRODUCT_BUNDLE_IDENTIFIER = espinaljovanny; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; diff --git a/MarsWater/MarsWater/Assets.xcassets/Contents.json b/MarsWater/MarsWater/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/MarsWater/MarsWater/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MarsWater/MarsWater/Assets.xcassets/WhiteStar.imageset/Contents.json b/MarsWater/MarsWater/Assets.xcassets/WhiteStar.imageset/Contents.json new file mode 100644 index 0000000..08c75c0 --- /dev/null +++ b/MarsWater/MarsWater/Assets.xcassets/WhiteStar.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "WhiteStar.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MarsWater/MarsWater/Assets.xcassets/WhiteStar.imageset/WhiteStar.png b/MarsWater/MarsWater/Assets.xcassets/WhiteStar.imageset/WhiteStar.png new file mode 100644 index 0000000..98e0cd6 Binary files /dev/null and b/MarsWater/MarsWater/Assets.xcassets/WhiteStar.imageset/WhiteStar.png differ diff --git a/MarsWater/MarsWater/Assets.xcassets/YellowStar.imageset/Contents.json b/MarsWater/MarsWater/Assets.xcassets/YellowStar.imageset/Contents.json new file mode 100644 index 0000000..506052f --- /dev/null +++ b/MarsWater/MarsWater/Assets.xcassets/YellowStar.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "YellowStar.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MarsWater/MarsWater/Assets.xcassets/YellowStar.imageset/YellowStar.png b/MarsWater/MarsWater/Assets.xcassets/YellowStar.imageset/YellowStar.png new file mode 100644 index 0000000..4e1bc8f Binary files /dev/null and b/MarsWater/MarsWater/Assets.xcassets/YellowStar.imageset/YellowStar.png differ diff --git a/MarsWater/MarsWater/Assets.xcassets/check.imageset/Contents.json b/MarsWater/MarsWater/Assets.xcassets/check.imageset/Contents.json new file mode 100644 index 0000000..e57fdb5 --- /dev/null +++ b/MarsWater/MarsWater/Assets.xcassets/check.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "check.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MarsWater/MarsWater/Assets.xcassets/check.imageset/check.png b/MarsWater/MarsWater/Assets.xcassets/check.imageset/check.png new file mode 100644 index 0000000..3a2d3b0 Binary files /dev/null and b/MarsWater/MarsWater/Assets.xcassets/check.imageset/check.png differ diff --git a/MarsWater/MarsWater/Base.lproj/Main.storyboard b/MarsWater/MarsWater/Base.lproj/Main.storyboard index 13ead89..65697e6 100644 --- a/MarsWater/MarsWater/Base.lproj/Main.storyboard +++ b/MarsWater/MarsWater/Base.lproj/Main.storyboard @@ -1,7 +1,8 @@ - + + @@ -13,9 +14,22 @@ + + + + + + + + + + + + + - + @@ -26,7 +40,7 @@ - + + + + @@ -50,16 +67,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -75,9 +446,9 @@ - + - + @@ -85,7 +456,7 @@ - + @@ -100,7 +471,7 @@ - + @@ -122,76 +493,102 @@ - - + + - + + + + + + + @@ -206,14 +603,18 @@ - + + + + + - + @@ -233,4 +634,7 @@ + + + diff --git a/MarsWater/MarsWater/CustomTableViewCell.h b/MarsWater/MarsWater/CustomTableViewCell.h new file mode 100644 index 0000000..d8021d5 --- /dev/null +++ b/MarsWater/MarsWater/CustomTableViewCell.h @@ -0,0 +1,18 @@ +// +// CustomTableViewCell.h +// MarsWater +// +// Created by Diana Elezaj on 10/10/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import + +@interface CustomTableViewCell : UITableViewCell + +@property (weak, nonatomic) IBOutlet UILabel *titleLabel; +@property (weak, nonatomic) IBOutlet UILabel *dueAtLabel; +@property (weak, nonatomic) IBOutlet UILabel *priorityLabel; +@property (weak, nonatomic) IBOutlet UILabel *createdAtLabel; + +@end diff --git a/MarsWater/MarsWater/CustomTableViewCell.m b/MarsWater/MarsWater/CustomTableViewCell.m new file mode 100644 index 0000000..9efe412 --- /dev/null +++ b/MarsWater/MarsWater/CustomTableViewCell.m @@ -0,0 +1,21 @@ +// +// CustomTableViewCell.m +// MarsWater +// +// Created by Diana Elezaj on 10/10/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import "CustomTableViewCell.h" + +@implementation CustomTableViewCell + +- (void)awakeFromNib { + // Initialization code +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; +} + +@end diff --git a/MarsWater/MarsWater/List+CoreDataProperties.h b/MarsWater/MarsWater/List+CoreDataProperties.h index 9ce8d06..ccbccbd 100644 --- a/MarsWater/MarsWater/List+CoreDataProperties.h +++ b/MarsWater/MarsWater/List+CoreDataProperties.h @@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nullable, nonatomic, retain) NSString *title; @property (nullable, nonatomic, retain) NSDate *createdAt; @property (nullable, nonatomic, retain) id color; -@property (nullable, nonatomic, retain) NSArray *task; +@property (nullable, nonatomic, retain) NSOrderedSet *task; @end diff --git a/MarsWater/MarsWater/ListCreationTableViewController.m b/MarsWater/MarsWater/ListCreationTableViewController.m index 0ecf6e9..2b78ef3 100644 --- a/MarsWater/MarsWater/ListCreationTableViewController.m +++ b/MarsWater/MarsWater/ListCreationTableViewController.m @@ -14,6 +14,12 @@ @interface ListCreationTableViewController () @property (weak, nonatomic) IBOutlet UITextField *titleTextField; +@property (weak, nonatomic) IBOutlet UIButton *redColor; +@property (weak, nonatomic) IBOutlet UIButton *orangeColor; +@property (weak, nonatomic) IBOutlet UIButton *blueColor; +@property (weak, nonatomic) IBOutlet UIButton *lightBlueColor; +@property (nonatomic) UIImage *checkBackgroundImage; + @property (nonatomic) List *list; @@ -23,7 +29,10 @@ @implementation ListCreationTableViewController - (void)viewDidLoad { [super viewDidLoad]; + self.checkBackgroundImage = [UIImage imageNamed:@"check"]; + self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.752 green:0.098 blue:0 alpha:1]; + [self setupNavigationBar]; AppDelegate *delegate = [UIApplication sharedApplication].delegate; @@ -36,28 +45,86 @@ - (void)setupNavigationBar { self.navigationItem.title = @"Create new list"; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)]; - + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)]; - - // set the right button to save } - (void)cancel { + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.managedObjectContext deleteObject:self.list]; [self dismissViewControllerAnimated:YES completion:nil]; } - (void)save { - self.list.title = self.titleTextField.text; - self.list.createdAt = [NSDate date]; - AppDelegate *delegate = [UIApplication sharedApplication].delegate; - [delegate.managedObjectContext save:nil]; + if ([self.titleTextField.text isEqualToString:@""]) { + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Ooops!" message:@"Please fill out the title field" preferredStyle: UIAlertControllerStyleAlert]; + + UIAlertAction *okAction = [UIAlertAction + actionWithTitle:NSLocalizedString(@"OK", @"OK action") + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) + { + NSLog(@"OK action"); + }]; + + [alert addAction:okAction]; + [self presentViewController:alert animated:YES completion:nil]; + } + else { + self.list.title = self.titleTextField.text; + self.list.createdAt = [NSDate date]; + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.managedObjectContext save:nil]; + + [self dismissViewControllerAnimated:YES completion:nil]; + } +} + +- (IBAction)redColorSelected:(UIButton *)sender { + NSLog(@"red"); + self.list.color = sender.backgroundColor; - [self dismissViewControllerAnimated:YES completion:nil]; + [self.redColor setBackgroundImage:self.checkBackgroundImage forState:UIControlStateNormal]; + + [self.orangeColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.blueColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.lightBlueColor setBackgroundImage:nil forState:UIControlStateNormal]; +} + +- (IBAction)orangeColorSelected:(UIButton *)sender { + + self.list.color = sender.backgroundColor; + + [self.orangeColor setBackgroundImage:self.checkBackgroundImage forState:UIControlStateNormal]; + + [self.redColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.blueColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.lightBlueColor setBackgroundImage:nil forState:UIControlStateNormal]; } -- (IBAction)colorButtonTapped:(UIButton *)sender { +- (IBAction)blueColorSelected:(UIButton *)sender { self.list.color = sender.backgroundColor; + + [self.blueColor setBackgroundImage:self.checkBackgroundImage forState:UIControlStateNormal]; + + [self.orangeColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.redColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.lightBlueColor setBackgroundImage:nil forState:UIControlStateNormal]; +} + +- (IBAction)lightBlueColorSelected:(UIButton *)sender { + self.list.color = sender.backgroundColor; + + [self.lightBlueColor setBackgroundImage:self.checkBackgroundImage forState:UIControlStateNormal]; + + [self.orangeColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.blueColor setBackgroundImage:nil forState:UIControlStateNormal]; + [self.redColor setBackgroundImage:nil forState:UIControlStateNormal]; } + @end diff --git a/MarsWater/MarsWater/ListsTableViewController.m b/MarsWater/MarsWater/ListsTableViewController.m index 8a2659c..ea4a646 100644 --- a/MarsWater/MarsWater/ListsTableViewController.m +++ b/MarsWater/MarsWater/ListsTableViewController.m @@ -8,12 +8,16 @@ #import #import "ListsTableViewController.h" +#import "TasksTableViewController.h" #import "AppDelegate.h" #import "List.h" @interface ListsTableViewController () @property (nonatomic) NSFetchedResultsController *fetchedResultsController; +@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentedControl; +@property (nonatomic) NSSortDescriptor *sort; +@property (nonatomic) List *list; @end @@ -21,30 +25,19 @@ @implementation ListsTableViewController - (void)viewDidLoad { [super viewDidLoad]; - - - AppDelegate *delegate = [UIApplication sharedApplication].delegate; - - // 1) create an instance of NSFetchRequest with an entity name - NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"List"]; - - - // 2) create a sort descriptor - NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:NO]; - - // 3) set the sortDescriptors on the fetchRequest - fetchRequest.sortDescriptors = @[sort]; - - // 4) create a fetchedResultsController with a fetchRequest and a managedObjectContext, - self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:delegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; - - self.fetchedResultsController.delegate = self; - - [self.fetchedResultsController performFetch:nil]; - + [self sorting]; [self.tableView reloadData]; + self.navigationItem.leftBarButtonItem = self.editButtonItem; + + self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.752 green:0.098 blue:0 alpha:1]; + } +-(void) viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self sorting]; + [self.tableView reloadData]; +} #pragma mark - Table view data source @@ -62,15 +55,85 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N List *list = self.fetchedResultsController.fetchedObjects[indexPath.row]; cell.backgroundColor = (UIColor *)list.color; cell.textLabel.text = list.title; - cell.detailTextLabel.text = [list.createdAt description]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + + NSDateFormatter *createdDateFormatter = [[NSDateFormatter alloc] init]; + [createdDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; + cell.detailTextLabel.text = [NSString stringWithFormat:@"Created at: %@",[createdDateFormatter stringFromDate:list.createdAt ]]; + return cell; } + +- (IBAction)segmentedControlChanged:(UISegmentedControl *)sender { + [self sorting]; + [self.tableView reloadData]; +} + +-(void) sorting { + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"List"]; + + if (self.segmentedControl.selectedSegmentIndex == 0) { + self.sort = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; + } + else + self.sort = [[NSSortDescriptor alloc] initWithKey:@"color" ascending:NO]; + + fetchRequest.sortDescriptors = @[self.sort]; + + self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:delegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; + + self.fetchedResultsController.delegate = self; + + [self.fetchedResultsController performFetch:nil]; +} + - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath { [self.tableView reloadData]; } +-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ + + if ([segue.identifier isEqualToString:@"taskSegue"]) { + + NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; + + TasksTableViewController *vc = segue.destinationViewController; + + vc.list = self.fetchedResultsController.fetchedObjects[indexPath.row]; + } +} + + +//delegate method that allows for editing when the edit button is clicked + +- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { + + if (editingStyle == UITableViewCellEditingStyleDelete) + { +// AppDelegate *delegate = [UIApplication sharedApplication].delegate; + +// delegate.managedObjectContext = [self.fetchedResultsController managedObjectContext]; + +// [delegate.managedObjectContext deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]]; + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.managedObjectContext deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]]; + + + [self.tableView reloadData]; + } + + + +} + + + @end diff --git a/MarsWater/MarsWater/TaskCreationTableViewController.h b/MarsWater/MarsWater/TaskCreationTableViewController.h new file mode 100644 index 0000000..32d0116 --- /dev/null +++ b/MarsWater/MarsWater/TaskCreationTableViewController.h @@ -0,0 +1,16 @@ +// +// TaskCreationTableViewController.h +// MarsWater +// +// Created by Diana Elezaj on 10/9/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import +#import "List.h" + +@interface TaskCreationTableViewController : UITableViewController + +@property (nonatomic) List *list; + +@end diff --git a/MarsWater/MarsWater/TaskCreationTableViewController.m b/MarsWater/MarsWater/TaskCreationTableViewController.m new file mode 100644 index 0000000..6bbe27c --- /dev/null +++ b/MarsWater/MarsWater/TaskCreationTableViewController.m @@ -0,0 +1,146 @@ +// +// TaskCreationTableViewController.m +// MarsWater +// +// Created by Diana Elezaj on 10/9/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import "TaskCreationTableViewController.h" +#import "Task.h" +#import "AppDelegate.h" + +@interface TaskCreationTableViewController () +@property (weak, nonatomic) IBOutlet UITextField *textField; +@property (nonatomic) Task *task; +@property (nonatomic) NSMutableOrderedSet *set; +@property (weak, nonatomic) IBOutlet UIButton *priority1; +@property (weak, nonatomic) IBOutlet UIButton *priority2; +@property (weak, nonatomic) IBOutlet UIButton *priority3; +@property (weak, nonatomic) IBOutlet UIButton *priority4; +@property (weak, nonatomic) IBOutlet UIButton *priority5; +@property (weak, nonatomic) IBOutlet UIDatePicker *datePicker; +@property (nonatomic) UIImage *whiteStarBackground; +@property (nonatomic) UIImage *yellowStarBackground; +@property (nonatomic) NSNumber *priorityNumber; + + +@end + +@implementation TaskCreationTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.752 green:0.098 blue:0 alpha:1]; + + + self.whiteStarBackground = [UIImage imageNamed:@"WhiteStar"]; + self.yellowStarBackground = [UIImage imageNamed:@"YellowStar"]; + + self.priorityNumber = @1; + [self.priority1 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + + [self.datePicker setMinimumDate: [NSDate date]]; + + self.set = [self.list.task mutableCopy]; + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + + self.task = [NSEntityDescription insertNewObjectForEntityForName:@"Task" inManagedObjectContext:delegate.managedObjectContext]; + + self.navigationItem.title = [NSString stringWithFormat:@"Add task to %@", self.list.title]; +} + +- (IBAction)cancelTask:(UIBarButtonItem *)sender { + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + [delegate.managedObjectContext deleteObject:self.task]; + + [self.tableView reloadData]; + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (IBAction)saveTask:(UIBarButtonItem *)sender { + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + + if ([self.textField.text isEqualToString:@""]) { + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Ooops!" message:@"Please fill out the title field" preferredStyle: UIAlertControllerStyleAlert]; + + UIAlertAction *okAction = [UIAlertAction + actionWithTitle:NSLocalizedString(@"OK", @"OK action") + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) + { + NSLog(@"OK action"); + }]; + + [alert addAction:okAction]; + [self presentViewController:alert animated:YES completion:nil]; + + } + else { + + self.task.taskDescription = self.textField.text; + self.task.createdAt = [NSDate date]; + self.task.priority = self.priorityNumber; + self.task.dueAt = self.datePicker.date; + + [self.set addObject:self.task]; + + self.list.task = self.set; + + [delegate.managedObjectContext save:nil]; + + [self.tableView reloadData]; + + [self dismissViewControllerAnimated:YES completion:nil]; + + } +} + +- (IBAction)priority1Selected:(UIButton *)sender { + self.priorityNumber = @1; + [self.priority1 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority2 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; + [self.priority3 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; + [self.priority4 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; + [self.priority5 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; +} +- (IBAction)priority2Selected:(UIButton *)sender { + self.priorityNumber = @2; + [self.priority1 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority2 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority3 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; + [self.priority4 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; + [self.priority5 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; +} +- (IBAction)priority3Selected:(UIButton *)sender { + self.priorityNumber = @3; + [self.priority1 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority2 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority3 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority4 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; + [self.priority5 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; +} +- (IBAction)priority4Selected:(UIButton *)sender { + self.priorityNumber = @4; + [self.priority1 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority2 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority3 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority4 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority5 setBackgroundImage:self.whiteStarBackground forState:UIControlStateNormal]; +} +- (IBAction)priority5Selected:(UIButton *)sender { + self.priorityNumber = @5; + [self.priority1 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority2 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority3 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority4 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; + [self.priority5 setBackgroundImage:self.yellowStarBackground forState:UIControlStateNormal]; +} + + + +@end diff --git a/MarsWater/MarsWater/TasksTableViewController.h b/MarsWater/MarsWater/TasksTableViewController.h new file mode 100644 index 0000000..8c201b5 --- /dev/null +++ b/MarsWater/MarsWater/TasksTableViewController.h @@ -0,0 +1,15 @@ +// +// TasksTableViewController.h +// MarsWater +// +// Created by Diana Elezaj on 10/9/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// + +#import +#import "List.h" + +@interface TasksTableViewController : UITableViewController + +@property (nonatomic) List *list; +@end diff --git a/MarsWater/MarsWater/TasksTableViewController.m b/MarsWater/MarsWater/TasksTableViewController.m new file mode 100644 index 0000000..276d1ca --- /dev/null +++ b/MarsWater/MarsWater/TasksTableViewController.m @@ -0,0 +1,123 @@ +// +// TasksTableViewController.m +// MarsWater +// +// Created by Diana Elezaj on 10/9/15. +// Copyright © 2015 Michael Kavouras. All rights reserved. +// +#import + +#import "TasksTableViewController.h" +#import "Task.h" +#import "TaskCreationTableViewController.h" +#import "CustomTableViewCell.h" +#import "AppDelegate.h" + + +@interface TasksTableViewController () + +@property (nonatomic) NSFetchedResultsController *fetchedResultsController; +@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentedControl; +@property (nonatomic) NSSortDescriptor *sort; +@property (nonatomic) Task *task; +@end + +@implementation TasksTableViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.navigationItem.title = self.list.title; + [self sorting]; + [self.tableView reloadData]; +} + +-(void)viewWillAppear:(BOOL)animated{ + [super viewWillAppear:animated]; + [self sorting]; + [self.tableView reloadData]; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.fetchedResultsController.fetchedObjects.count; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TaskCellIdentifier" forIndexPath:indexPath]; + + self.task = self.fetchedResultsController.fetchedObjects[indexPath.row]; + + cell.titleLabel.text = _task.taskDescription ; + + NSDateFormatter *createdDateFormatter = [[NSDateFormatter alloc] init]; + [createdDateFormatter setDateFormat:@"MM/dd/yyyy"]; + + cell.createdAtLabel.text = [NSString stringWithFormat:@"Created at: %@",[createdDateFormatter stringFromDate:_task.createdAt] ]; + + NSDateFormatter *dueAtDateFormatter = [[NSDateFormatter alloc] init]; + [dueAtDateFormatter setDateFormat:@"MM/dd/yyyy"]; + + cell.dueAtLabel.text = [NSString stringWithFormat:@"Due at: %@",[dueAtDateFormatter stringFromDate:_task.dueAt] ]; + + cell.priorityLabel.text = [NSString stringWithFormat:@"Priority: %@",_task.priority];; + + return cell; +} + +- (IBAction)segmentSelected:(UISegmentedControl *)sender { + + [self sorting]; + [self.tableView reloadData]; +} + +-(void) sorting { + + AppDelegate *delegate = [UIApplication sharedApplication].delegate; + + // 1) create an instance of NSFetchRequest with an entity name + NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Task"]; + + // 2) create a sort descriptor + + if (self.segmentedControl.selectedSegmentIndex == 0) { + + self.sort = [NSSortDescriptor sortDescriptorWithKey:@"taskDescription" ascending:YES]; + } + else if (self.segmentedControl.selectedSegmentIndex == 1) { + + self.sort = [NSSortDescriptor sortDescriptorWithKey:@"priority" ascending:NO]; + } + else + self.sort = [NSSortDescriptor sortDescriptorWithKey:@"dueAt" ascending:YES]; + + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"list.title = %@", self.list.title]; + + // 3) set the sortDescriptors on the fetchRequest + fetchRequest.sortDescriptors = @[self.sort]; + fetchRequest.predicate = predicate; + + // 4) create a fetchedResultsController with a fetchRequest and a managedObjectContext, + self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:delegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; + + self.fetchedResultsController.delegate = self; + + [self.fetchedResultsController performFetch:nil]; + + [self.tableView reloadData]; +} + +-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ + + UINavigationController *navController = segue.destinationViewController; + + TaskCreationTableViewController *taskCTVC = (TaskCreationTableViewController *)([navController viewControllers][0]); + + taskCTVC.list = self.list; + } + +@end