268 lines
10 KiB
Objective-C
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
|