espagram/Espagram/EspagramMainTableViewController.m
2013-02-21 17:08:51 +01:00

268 lines
10 KiB
Objective-C

//
// EspagramMainTableViewController.m
// Espagram
//
// Created by Abel Fokkinga on 11/9/12.
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
//
#import "EspagramMainTableViewController.h"
#import "SpanishConjugator.h"
#import "EspagramTestViewController.h"
#import "EspagramLessonViewController.h"
#import "SplitViewBarButtonItemPresenter.h"
@interface EspagramMainTableViewController ()
@property (nonatomic, strong) NSString *language, *displayTitle;
@property (nonatomic, strong) Tense * tense;
@property (nonatomic, strong) UIManagedDocument * lessonsDatabase;
@end
@implementation EspagramMainTableViewController
@synthesize language = _language;
@synthesize tense = _tense;
@synthesize displayTitle = _displayTitle;
@synthesize aboutButton = _aboutButton;
@synthesize lessonsDatabase = _lessonsDatabase;
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)awakeFromNib // always try to be the split view's delegate
{
[super awakeFromNib];
self.splitViewController.delegate = self;
}
- (id <SplitViewBarButtonItemPresenter>)splitViewBarButtonItemPresenter
{
id detailVC = [self.splitViewController.viewControllers lastObject];
if (![detailVC conformsToProtocol:@protocol(SplitViewBarButtonItemPresenter)]) {
detailVC = nil;
}
return detailVC;
}
- (BOOL)splitViewController:(UISplitViewController *)svc
shouldHideViewController:(UIViewController *)vc
inOrientation:(UIInterfaceOrientation)orientation
{
return NO;
//return [self splitViewBarButtonItemPresenter] ? UIInterfaceOrientationIsPortrait(orientation) : NO;
}
- (void)splitViewController:(UISplitViewController *)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem *)barButtonItem
forPopoverController:(UIPopoverController *)pc
{
barButtonItem.title = self.title;
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = barButtonItem;
}
- (void)splitViewController:(UISplitViewController *)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
[self splitViewBarButtonItemPresenter].splitViewBarButtonItem = nil;
}
# pragma mark - Espagram setters and getters
- (id <Conjugator>) getLanguage {
if ( [@"Spanish" isEqualToString:_language] ) {
return [[SpanishConjugator alloc] init];
} else return nil;
}
- (Tense *) tense {
if ( _tense == nil ) _tense =[[Tense alloc] init];
return _tense;
}
- (void) testVerbsWithLanguage:(NSString *)language andTense:(NSString *)tense;
{
self.language = language;
self.tense = [[Tense alloc] init];
self.tense.tense = tense;
self.displayTitle = [self.tense getTenseInLanguage:@"Spanish"];
[self performSegueWithIdentifier:@"Show Lessons" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ( [segue.identifier isEqualToString:@"Show Lessons"]) {
[segue.destinationViewController setConjugator:[self getLanguage]];
[segue.destinationViewController setTense:self.tense];
[segue.destinationViewController setLessonsDatabase:self.lessonsDatabase];
}
}
- (void) createDocument
{
[self.lessonsDatabase saveToURL:self.lessonsDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL succes){
NSLog(@"Created lessons database");
}];
}
- (void) useDocument
{
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.lessonsDatabase.fileURL path]]) {
NSLog(@"No database exists");
[self createDocument];
} else if (self.lessonsDatabase.documentState == UIDocumentStateClosed){
[self.lessonsDatabase openWithCompletionHandler:^(BOOL succes){
NSLog(@"Opened lessons database");
}];
}
}
- (void) setLessonsDatabase:(UIManagedDocument *)lessonsDatabase{
if ( _lessonsDatabase != lessonsDatabase ) {
_lessonsDatabase = lessonsDatabase;
[self useDocument];
}
}
- (void)setupSubTitles {
// Set cell subtitle to localised subtitle
for (int section = 0; section < [self.tableView numberOfSections]; section++) {
for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];
if ( cell.detailTextLabel.text ) {
if ( ![cell.detailTextLabel.text isEqualToString:NSLocalizedString(cell.detailTextLabel.text, nil)]) {
// Set subtitle
cell.detailTextLabel.text = NSLocalizedString(cell.detailTextLabel.text, nil);
}
}
}
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[self setupSubTitles];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.aboutButton setTitle:NSLocalizedString(@"About button", @"About button text")];
[self setupSubTitles];
if (!self.lessonsDatabase) { // We'll create a default database if none is set
NSFileManager * fileManager = [NSFileManager defaultManager];
NSURL *storeURL = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDirectory] lastObject] URLByAppendingPathComponent: @"Default Espagram database"];
NSLog(@"DB url: %@", storeURL.path);
if (![fileManager fileExistsAtPath:storeURL.path]) {
NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Default Espagram database" ofType:@"sqlite"];
NSString *languageCode = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([languageCode isEqualToString:@"en"]) {
NSLog(@"Default DB is EN");
defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Default Espagram database EN" ofType:@"sqlite"];
}else if ([languageCode isEqualToString:@"nl"]) {
NSLog(@"Default DB is NL");
defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Default Espagram database NL" ofType:@"sqlite"];
}else if ([languageCode isEqualToString:@"de"]) {
NSLog(@"Default DB is DE");
defaultStorePath = [[NSBundle mainBundle] pathForResource:@"Default Espagram database DE" ofType:@"sqlite"];
}
if ( [fileManager fileExistsAtPath:defaultStorePath]) {
NSLog(@"Default DB present in app");
NSError *error;
[fileManager copyItemAtPath:defaultStorePath toPath:storeURL.path error:&error];
NSLog(@"%@",error.debugDescription );
}
}
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDirectory] lastObject];
url = [url URLByAppendingPathComponent:@"Default Espagram database"];
UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
doc.persistentStoreOptions = options;
self.lessonsDatabase = doc;
}
}
- (void)viewDidUnload {
[super viewDidUnload];
[self.lessonsDatabase closeWithCompletionHandler:^(BOOL success) {
NSLog(@"Database closed");
}];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString * selectedTense = [tableView cellForRowAtIndexPath:indexPath].textLabel.text;
NSLog(@"Selected tense: %@", selectedTense);
if ( [selectedTense isEqualToString:@"Presente de Indicativo"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"SIMPLE_PRESENT"];
} else if ( [selectedTense isEqualToString:@"Presente de Subjuntivo"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"PRESENT_SUBJUNCTIVE"];
} else if ( [selectedTense isEqualToString:@"Pretérito Indefinido"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"SIMPLE_PAST"];
} else if ( [selectedTense isEqualToString:@"Imperfecto"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"IMPERFECT"];
} else if ( [selectedTense isEqualToString:@"Imperfecto de Subjuntivo"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"IMPERFECT_SUBJUNCTIVE"];
} else if ( [selectedTense isEqualToString:@"Futuro"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"FUTURE"];
} else if ( [selectedTense isEqualToString:@"Pretérito Perfecto"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"PRESENT_PERFECT"];
} else if ( [selectedTense isEqualToString:@"Perfecto de Subjuntivo"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"PERFECT_SUBJUNCTIVE"];
} else if ( [selectedTense isEqualToString:@"Pluscuamperfecto"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"PAST_PERFECT"];
} else if ( [selectedTense isEqualToString:@"Pluscuamperfecto Subjuntivo"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"PAST_PERFECT_SUBJUNCTIVE"];
} else if ( [selectedTense isEqualToString:@"Futuro Perfecto"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"FUTURE_PERFECT"];
} else if ( [selectedTense isEqualToString:@"Condicional"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"CONDITIONAL"];
} else if ( [selectedTense isEqualToString:@"Condicional Perfecto"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"CONDITIONAL_PERFECT"];
} else if ( [selectedTense isEqualToString:@"Gerundio"] ) {
[self testVerbsWithLanguage: @"Spanish" andTense:@"GERUND"];
}
}
@end