//
//  Performing_UI_Related_Tasks_with_GCDAppDelegate.m
//  Performing UI-Related Tasks with GCD
//
//  Created by Vandad Nahavandipoor on 13/07/2011.
//  Copyright 2011 Pixolity Ltd. All rights reserved.
//

#import "Performing_UI_Related_Tasks_with_GCDAppDelegate.h"

void displayAlertView(void *paramContext);

@implementation Performing_UI_Related_Tasks_with_GCDAppDelegate

@synthesize window = _window;


//- (BOOL)            application:(UIApplication *)application
//  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//  
//  dispatch_queue_t mainQueue = dispatch_get_main_queue();
//  
//  dispatch_async(mainQueue, ^(void) {
//    NSLog(@"Wątek bieżący = %@", [NSThread currentThread]);
//    NSLog(@"Wątek główny = %@", [NSThread mainThread]);
//  });
//  
//  self.window = [[UIWindow alloc] initWithFrame:
//                 [[UIScreen mainScreen] bounds]];
//  
//  self.window.backgroundColor = [UIColor whiteColor];
//  [self.window makeKeyAndVisible];
//  return YES;
//}
//
//typedef struct{
//  char *title;
//  char *message;
//  char *cancelButtonTitle;
//} AlertViewData;
//
//void displayAlertView(void *paramContext){
//  
//  AlertViewData *alertData = (AlertViewData *)paramContext;
//  
//  NSString *title = 
//    [NSString stringWithUTF8String:alertData->title];
//  
//  NSString *message = 
//    [NSString stringWithUTF8String:alertData->message];
//  
//  NSString *cancelButtonTitle = 
//    [NSString stringWithUTF8String:alertData->cancelButtonTitle];
//  
//  [[[UIAlertView alloc] initWithTitle:title
//                             message:message
//                            delegate:nil
//                   cancelButtonTitle:cancelButtonTitle
//                   otherButtonTitles:nil, nil] show];
//  
//  free(alertData);
//  
//}

//- (BOOL)            application:(UIApplication *)application
//  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//  
//  dispatch_queue_t mainQueue = dispatch_get_main_queue();
//  
//  AlertViewData *context = (AlertViewData *)
//  malloc(sizeof(AlertViewData));
//  
//  if (context != NULL){
//    context->title = "GCD";
//    context->message = "Technologia GCD jest zadziwiająca.";
//    context->cancelButtonTitle = "OK";
//    
//    dispatch_async_f(mainQueue, 
//                     (void *)context, 
//                     displayAlertView);
//  }
//  
//  self.window = [[UIWindow alloc] initWithFrame:
//                 [[UIScreen mainScreen] bounds]];
//  
//  self.window.backgroundColor = [UIColor whiteColor];
//  [self.window makeKeyAndVisible];
//  return YES;
//}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  
  dispatch_queue_t mainQueue = dispatch_get_main_queue();
  
  dispatch_async(mainQueue, ^(void) {
    
    [[[UIAlertView alloc] initWithTitle:@"GCD"
                                message:@"Technologia GCD jest zadziwiająca!"
                               delegate:nil 
                      cancelButtonTitle:@"OK"
                      otherButtonTitles:nil, nil] show];
    
  });
  
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  // Miejsce na przeprowadzenie własnej konfiguracji po uruchomieniu aplikacji.
  self.window.backgroundColor = [UIColor whiteColor];
  [self.window makeKeyAndVisible];
  return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application
{
  /*
   Ta metoda jest wywoływana, gdy aplikacja przechodzi ze stanu aktywnego do nieaktywnego. Może być wywołana w określonych sytuacjach (na przykład w chwili odbywania rozmowy telefonicznej lub po otrzymaniu wiadomości SMS) bądź kiedy użytkownik kończy działanie aplikacji. Metoda rozpoczyna proces przejścia do stanu pozostania w tle. Tę metodę można wykorzystać do wstrzymania wykonywania bieżących zadań, wyłączenia liczników czasu, zmniejszenia liczby klatek generowanych przez OpenGL ES. W grach ta metoda powinna być użyta do wstrzymania gry (pauza).
   */
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  /*
   Tę metodę należy wykorzystać do zwolnienia zasobów współdzielonych, zapisania danych użytkownika, wyzerowania liczników czasu oraz do przechowania takiej ilości informacji o stanie, która pozwoli na przywrócenie aplikacji do stanu bieżącego. Jeżeli aplikacja obsługuje działanie w tle, w chwili kończenia działania należy wywołać tę metodę zamiast applicationWillTerminate:.
   */
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
  /*
   Ta metoda jest wywoływana podczas przechodzenia aplikacji ze stanu aktywnego do działania w tle. Można więc tutaj wycofać wiele zmian wprowadzonych w chwili przechodzenia do stanu działania w tle.
   */
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
  /*
   W tej metodzie można wznowić działanie zadań zatrzymanych (lub nieuruchomionych), gdy aplikacja była nieaktywna. Jeżeli aplikacja znajdowała się w trybie działania w tle, w metodzie można przeprowadzić odświeżenie interfejsu użytkownika.
   */
}

- (void)applicationWillTerminate:(UIApplication *)application
{
  /*
   Ta metoda jest wywoływana, gdy działanie aplikacji ma zostać zakończone. Zapoznaj się z opisem metody applicationDidEnterBackground:.
   */
}

@end
