text: //
  //  TSMessage.h
  //  Felix Krause
  //
  //  Created by Felix Krause on 24.08.12.
  //  Copyright (c) 2012 Felix Krause. All rights reserved.
  //
  
  #import <UIKit/UIKit.h>
  
  // NS_ENUM is now the preferred way to do typedefs. It gives the compiler and debugger more information, which helps everyone.
  // When using SDK 6 or later, NS_ENUM is defined by Apple, so this block does nothing.
  // For SDK 5 or earlier, this is the same definition block Apple uses.
  #ifndef NS_ENUM
  #if (__cplusplus && __cplusplus >= 201103L && (__has_extension(cxx_strong_enums) || __has_feature(objc_fixed_enum))) || (!__cplusplus && __has_feature(objc_fixed_enum))
  #define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
  #if (__cplusplus)
  #define NS_OPTIONS(_type, _name) _type _name; enum : _type
  #else
  #define NS_OPTIONS(_type, _name) enum _name : _type _name; enum _name : _type
  #endif
  #else
  #define NS_ENUM(_type, _name) _type _name; enum
  #define NS_OPTIONS(_type, _name) _type _name; enum
  #endif
  #endif
  
  
  #define TS_SYSTEM_VERSION_LESS_THAN(v)            ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
  
  
  @class TSMessageView;
  @protocol TSMessageViewProtocol;
  
  typedef NS_ENUM(NSInteger, TSMessageNotificationType) {
      TSMessageNotificationTypeMessage = 0,
      TSMessageNotificationTypeWarning,
      TSMessageNotificationTypeError,
      TSMessageNotificationTypeSuccess
  };
  typedef NS_ENUM(NSInteger, TSMessageNotificationPosition) {
      TSMessageNotificationPositionTop = 0,
      TSMessageNotificationPositionBottom
  };
  
  /** This enum can be passed to the duration parameter */
  typedef NS_ENUM(NSInteger,TSMessageNotificationDuration) {
      TSMessageNotificationDurationAutomatic = 0,
      TSMessageNotificationDurationEndless = -1 // The notification is displayed until the user dismissed it or it is dismissed by calling dismissActiveNotification
  };
  
  
  @interface TSMessage : NSObject
  
  + (instancetype)sharedMessage;
  
  + (UIViewController *)defaultViewController;
  
  /** Shows a notification message
   @param message The title of the notification view
   @param type The notification type (Message, Warning, Error, Success)
   */
  + (void)showNotificationWithTitle:(NSString *)message
                               type:(TSMessageNotificationType)type;
  
  /** Shows a notification message
   @param title The title of the notification view
   @param subtitle The text that is displayed underneath the title
   @param type The notification type (Message, Warning, Error, Success)
   */
  + (void)showNotificationWithTitle:(NSString *)title
                           subtitle:(NSString *)subtitle
                               type:(TSMessageNotificationType)type;
  
  /** Shows a notification message in a specific view controller
   @param viewController The view controller to show the notification in.
   You can use +setDefaultViewController: to set the the default one instead
   @param title The title of the notification view
   @param subtitle The text that is displayed underneath the title
   @param type The notification type (Message, Warning, Error, Success)
   */
  + (void)showNotificationInViewController:(UIViewController *)viewController
                                     title:(NSString *)title
                                  subtitle:(NSString *)subtitle
                                      type:(TSMessageNotificationType)type;
  
  /** Shows a notification message in a specific view controller with a specific duration
   @param viewController The view controller to show the notification in.
   You can use +setDefaultViewController: to set the the default one instead
   @param title The title of the notification view
   @param subtitle The text that is displayed underneath the title
   @param type The notification type (Message, Warning, Error, Success)
   @param duration The duration of the notification being displayed
   @param messageViewDelegate The delegate adopting TSMessageViewProtocol or nil
   */
  + (void)showNotificationInViewController:(UIViewController *)viewController
                                     title:(NSString *)title
                                  subtitle:(NSString *)subtitle
                                      type:(TSMessageNotificationType)type
                                  duration:(NSTimeInterval)duration
                                 delegate :(id <TSMessageViewProtocol>)messageViewDelegate;
  
  /** Shows a notification message in a specific view controller with a specific duration
   @param viewController The view controller to show the notification in.
   You can use +setDefaultViewController: to set the the default one instead
   @param title The title of the notification view
   @param subtitle The text that is displayed underneath the title
   @param type The notification type (Message, Warning, Error, Success)
   @param duration The duration of the notification being displayed
   @param dismissingEnabled Should the message be dismissed when the user taps/swipes it
   */
  + (void)showNotificationInViewController:(UIViewController *)viewController
                                     title:(NSString *)title
                                  subtitle:(NSString *)subtitle
                                      type:(TSMessageNotificationType)type
                                  duration:(NSTimeInterval)duration
                       canBeDismissedByUser:(BOOL)dismissingEnabled;
  
  
  
  /** Shows a notification message in a specific view controller
   @param viewController The view controller to show the notification in.
   @param title The title of the notification view
   @param subtitle The message that is displayed underneath the title (optional)
   @param image A custom icon image (optional)
   @param type The notification type (Message, Warning, Error, Success)
   @param duration The duration of the notification being displayed
   @param callback The block that should be executed, when the user tapped on the message
   @param buttonTitle The title for button (optional)
   @param buttonCallback The block that should be executed, when the user tapped on the button
   @param messagePosition The position of the message on the screen
   @param dismissingEnabled Should the message be dismissed when the user taps/swipes it
   @param messageViewDelegate The delegate adopting TSMessageViewProtocol or nil
   */
  + (void)showNotificationInViewController:(UIViewController *)viewController
                                     title:(NSString *)title
                                  subtitle:(NSString *)subtitle
                                     image:(UIImage *)image
                                      type:(TSMessageNotificationType)type
                                  duration:(NSTimeInterval)duration
                                  callback:(void (^)(void))callback
                               buttonTitle:(NSString *)buttonTitle
                            buttonCallback:(void (^)(void))buttonCallback
                                atPosition:(TSMessageNotificationPosition)messagePosition
                      canBeDismissedByUser:(BOOL)dismissingEnabled
                                 delegate :(id <TSMessageViewProtocol>)messageViewDelegate;
  
  /** Fades out the currently displayed notification. If another notification is in the queue,
   the next one will be displayed automatically
   @return YES if the currently displayed notification was successfully dismissed. NO if no notification
   was currently displayed.
   */
  + (BOOL)dismissActiveNotification;
  
  /** Fades out the currently displayed notification with a completion block after the animation has finished. If another notification is in the queue,
   the next one will be displayed automatically
   @return YES if the currently displayed notification was successfully dismissed. NO if no notification
   was currently displayed.
   */
  + (BOOL)dismissActiveNotificationWithCompletion:(void (^)(void))completion;
  
  /** Use this method to set a default view controller to display the messages in */
  + (void)setDefaultViewController:(UIViewController *)defaultViewController;
  
  /** Use this method to use custom designs in your messages. */
  + (void)addCustomDesignFromFileWithName:(NSString *)fileName inBundle:(NSBundle *) bundle;
  
  /** Indicates whether a notification is currently active. */
  + (BOOL)isNotificationActive;
  
  /** Prepares the notification view to be displayed in the future. It is queued and then
   displayed in fadeInCurrentNotification.
   You don't have to use this method. */
  + (void)prepareNotificationToBeShown:(TSMessageView *)messageView;
  
  /** Indicates whether currently the iOS 7 style of TSMessages is used
   This depends on the Base SDK and the currently used device */
  + (BOOL)iOS7StyleEnabled;
  
  /** Indicates whether the current navigationBar is hidden by isNavigationBarHidden
   on the UINavigationController or isHidden on the navigationBar of the current
   UINavigationController */
  + (BOOL)isNavigationBarInNavigationControllerHidden:(UINavigationController *)navController;
  
  @end
  