Full Code of florent37/OCiney-iOS for AI

master 6e3df1b75dae cached
277 files
696.8 KB
195.9k tokens
4 symbols
1 requests
Download .txt
Showing preview only (766K chars total). Download the full file or copy to clipboard to get everything.
Repository: florent37/OCiney-iOS
Branch: master
Commit: 6e3df1b75dae
Files: 277
Total size: 696.8 KB

Directory structure:
gitextract_j85k_784/

├── .gitignore
├── Crashlytics.framework/
│   ├── Versions/
│   │   └── A/
│   │       ├── Crashlytics
│   │       ├── Headers/
│   │       │   └── Crashlytics.h
│   │       ├── Modules/
│   │       │   └── module.modulemap
│   │       └── Resources/
│   │           └── Info.plist
│   ├── run
│   └── submit
├── Fabric.framework/
│   ├── Versions/
│   │   └── A/
│   │       ├── Fabric
│   │       ├── Headers/
│   │       │   └── Fabric.h
│   │       ├── Modules/
│   │       │   └── module.modulemap
│   │       └── Resources/
│   │           └── Info.plist
│   └── run
├── Podfile
├── README.md
├── ociney/
│   ├── Base.lproj/
│   │   └── Main.storyboard
│   ├── Images.xcassets/
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   └── LaunchImage.launchimage/
│   │       └── Contents.json
│   ├── OCAppDelegate.h
│   ├── OCAppDelegate.m
│   ├── OCSplashViewController.h
│   ├── OCSplashViewController.m
│   ├── en.lproj/
│   │   └── InfoPlist.strings
│   ├── libs/
│   │   ├── GTAppMenuController/
│   │   │   ├── GTAppMenuController.h
│   │   │   └── GTAppMenuController.m
│   │   ├── SliddingController/
│   │   │   ├── TTBlackTriangle.h
│   │   │   ├── TTBlackTriangle.m
│   │   │   ├── TTScrollSlidingPagesController.h
│   │   │   ├── TTScrollSlidingPagesController.m
│   │   │   ├── TTScrollViewWrapper.h
│   │   │   ├── TTScrollViewWrapper.m
│   │   │   ├── TTSliddingPageDelegate.h
│   │   │   ├── TTSlidingPage.h
│   │   │   ├── TTSlidingPage.m
│   │   │   ├── TTSlidingPageTitle.h
│   │   │   ├── TTSlidingPageTitle.m
│   │   │   ├── TTSlidingPagesDataSource.h
│   │   │   └── TTUIScrollViewSlidingPages.h
│   │   └── Slider/
│   │       ├── TTBlackTriangle.h
│   │       ├── TTBlackTriangle.m
│   │       ├── TTScrollSlidingPagesController.h
│   │       ├── TTScrollSlidingPagesController.m
│   │       ├── TTScrollViewWrapper.h
│   │       ├── TTScrollViewWrapper.m
│   │       ├── TTSliddingPageDelegate.h
│   │       ├── TTSlidingPage.h
│   │       ├── TTSlidingPage.m
│   │       ├── TTSlidingPageTitle.h
│   │       ├── TTSlidingPageTitle.m
│   │       ├── TTSlidingPagesDataSource.h
│   │       └── TTUIScrollViewSlidingPages.h
│   ├── main.m
│   ├── ociney-Info.plist
│   ├── ociney-Prefix.pch
│   ├── res/
│   │   └── Base.lproj/
│   │       └── Localizable.strings
│   └── src/
│       ├── Controller/
│       │   ├── FeedSmall.h
│       │   ├── FeedSmall.m
│       │   ├── LeftViewController.h
│       │   ├── LeftViewController.m
│       │   ├── ListSallesController.h
│       │   ├── ListSallesController.m
│       │   ├── MovieDetailController.h
│       │   ├── MovieDetailController.m
│       │   ├── OCCreditsViewController.h
│       │   ├── OCCreditsViewController.m
│       │   ├── OCDoubleController.h
│       │   ├── OCDoubleController.m
│       │   ├── OCListMovieViewController.h
│       │   ├── OCListMovieViewController.m
│       │   ├── OCListViewController.h
│       │   ├── OCListViewController.m
│       │   ├── OCPosterController.h
│       │   ├── OCPosterController.m
│       │   ├── OCRechercheSearchBarController.h
│       │   ├── OCRechercheSearchBarController.m
│       │   ├── OCStarDetailViewController.h
│       │   ├── OCStarDetailViewController.m
│       │   ├── OCStarListController.h
│       │   ├── OCStarListController.m
│       │   ├── OCTheaterDetailController.h
│       │   ├── OCTheaterDetailController.m
│       │   ├── OCTheaterDetailMovieController.h
│       │   ├── OCTheaterDetailMovieController.m
│       │   ├── SlidingImageControllerController.h
│       │   └── SlidingImageControllerController.m
│       ├── Modele/
│       │   ├── AllocineResponse.h
│       │   ├── AllocineResponse.m
│       │   ├── AllocineResponseSmall.h
│       │   ├── AllocineResponseSmall.m
│       │   ├── CastMember.h
│       │   ├── CastMember.m
│       │   ├── CastingShort.h
│       │   ├── CastingShort.m
│       │   ├── DefaultMedia.h
│       │   ├── DefaultMedia.m
│       │   ├── Distributor.h
│       │   ├── Distributor.m
│       │   ├── Feature.h
│       │   ├── Feature.m
│       │   ├── Feed.h
│       │   ├── Feed.m
│       │   ├── Geoloc.h
│       │   ├── Geoloc.m
│       │   ├── HelpfulNegativeReview.h
│       │   ├── HelpfulNegativeReview.m
│       │   ├── HelpfulPositiveReview.h
│       │   ├── HelpfulPositiveReview.m
│       │   ├── Horaires.h
│       │   ├── Horaires.m
│       │   ├── Link.h
│       │   ├── Link.m
│       │   ├── Media.h
│       │   ├── Media.m
│       │   ├── ModelObject.h
│       │   ├── ModelObject.m
│       │   ├── Movie.h
│       │   ├── Movie.m
│       │   ├── MovieShowtime.h
│       │   ├── MovieShowtime.m
│       │   ├── MovieType.h
│       │   ├── MovieType.m
│       │   ├── Name.h
│       │   ├── Name.m
│       │   ├── News.h
│       │   ├── News.m
│       │   ├── NewsSource.h
│       │   ├── NewsSource.m
│       │   ├── OnShow.h
│       │   ├── OnShow.m
│       │   ├── Participation.h
│       │   ├── Participation.m
│       │   ├── Person.h
│       │   ├── Person.m
│       │   ├── PersonFull.h
│       │   ├── PersonFull.m
│       │   ├── PersonSmall.h
│       │   ├── PersonSmall.m
│       │   ├── Picture.h
│       │   ├── Picture.m
│       │   ├── Place.h
│       │   ├── Place.m
│       │   ├── Poster.h
│       │   ├── Poster.m
│       │   ├── Protocole.h
│       │   ├── Publication.h
│       │   ├── Publication.m
│       │   ├── Release.h
│       │   ├── Release.m
│       │   ├── Rendition.h
│       │   ├── Rendition.m
│       │   ├── Review.h
│       │   ├── Review.m
│       │   ├── Scr.h
│       │   ├── Scr.m
│       │   ├── Statistics.h
│       │   ├── Statistics.m
│       │   ├── Subject.h
│       │   ├── Subject.m
│       │   ├── Theater.h
│       │   ├── Theater.m
│       │   ├── TheaterShowtime.h
│       │   ├── TheaterShowtime.m
│       │   ├── Thumbnail.h
│       │   ├── Thumbnail.m
│       │   ├── Trailer.h
│       │   ├── Trailer.m
│       │   ├── Trivium.h
│       │   ├── Trivium.m
│       │   ├── Version.h
│       │   ├── Version.m
│       │   ├── Writer.h
│       │   └── Writer.m
│       ├── Service/
│       │   ├── AllocineService.h
│       │   ├── AllocineService.m
│       │   ├── ServiceSecurity.h
│       │   └── ServiceSecurity.m
│       ├── Task/
│       │   ├── AsyncTask.h
│       │   ├── AsyncTask.m
│       │   ├── LoadBandeAnnonceFilmTask.h
│       │   ├── LoadBandeAnnonceFilmTask.m
│       │   ├── LoadMovieFullTask.h
│       │   ├── LoadMovieFullTask.m
│       │   ├── OCLoadMoviesTask.h
│       │   ├── OCLoadMoviesTask.m
│       │   ├── OCLoadPersonTask.h
│       │   ├── OCLoadPersonTask.m
│       │   ├── OCLoadShowTimesTask.h
│       │   ├── OCLoadShowTimesTask.m
│       │   ├── OCLoadStarsTask.h
│       │   ├── OCLoadStarsTask.m
│       │   ├── OCLoadTheaterMoviesTask.h
│       │   ├── OCLoadTheaterMoviesTask.m
│       │   ├── OCLoadTheatersTask.h
│       │   ├── OCLoadTheatersTask.m
│       │   ├── RechercheTask.h
│       │   ├── RechercheTask.m
│       │   ├── RechercheTaskMovie.h
│       │   ├── RechercheTaskMovie.m
│       │   ├── RechercheTaskStar.h
│       │   ├── RechercheTaskStar.m
│       │   ├── RechercheTaskTheater.h
│       │   └── RechercheTaskTheater.m
│       ├── Utils/
│       │   ├── Color+Hex.h
│       │   ├── Color+Hex.m
│       │   ├── Constantes.h
│       │   ├── DateUtils.h
│       │   ├── DateUtils.m
│       │   ├── UIImage+Blur.h
│       │   └── UIImage+Blur.m
│       └── View/
│           ├── CellTheaterHoraires.h
│           ├── CellTheaterHoraires.m
│           ├── HeaderMovieDetail.h
│           ├── HeaderMovieDetail.m
│           ├── HeaderStarDetail.h
│           ├── HeaderStarDetail.m
│           ├── MovieDetailContent.h
│           ├── MovieDetailContent.m
│           ├── MovieDetailTheaterList.h
│           ├── MovieDetailTheaterList.m
│           ├── OCCastMember.h
│           ├── OCCastMember.m
│           ├── OCEmptyView.h
│           ├── OCEmptyView.m
│           ├── OCEmptyViewGPS.h
│           ├── OCEmptyViewGPS.m
│           ├── OCFilmoElement.h
│           ├── OCFilmoElement.m
│           ├── OCFilmoGridLayout.h
│           ├── OCFilmoGridLayout.m
│           ├── OCHeaderVersionView.h
│           ├── OCHeaderVersionView.m
│           ├── OCLoader.h
│           ├── OCLoader.m
│           ├── OCMovieBandeAnnonceSlider.h
│           ├── OCMovieBandeAnnonceSlider.m
│           ├── OCMovieBandeAnnonceSliderElement.h
│           ├── OCMovieBandeAnnonceSliderElement.m
│           ├── OCMovieDelegates.h
│           ├── OCMovieDetailStarList.h
│           ├── OCMovieDetailStarList.m
│           ├── OCMovieViewPager.h
│           ├── OCMovieViewPager.m
│           ├── OCStarFilmoGrid.h
│           ├── OCStarFilmoGrid.m
│           ├── OCStarPhoto.h
│           ├── OCStarPhoto.m
│           ├── OCStarViewPager.h
│           ├── OCStarViewPager.m
│           ├── PosterView.h
│           ├── PosterView.m
│           ├── StarDetail.h
│           ├── StarDetail.m
│           ├── StarDetailDelegate.h
│           ├── StarDetailPhotos.h
│           ├── StarDetailPhotos.m
│           ├── TheaterDetailMovieBackground.h
│           ├── TheaterDetailMovieBackground.m
│           ├── TheaterDetailMovieForeground.h
│           ├── TheaterDetailMovieForeground.m
│           ├── TheaterDetailMoviePageHoraires.h
│           ├── TheaterDetailMoviePageHoraires.m
│           ├── ViewPager.h
│           ├── ViewPager.m
│           └── cell/
│               ├── OCMovieCell.h
│               ├── OCMovieCell.m
│               ├── OCMovieCell.xib
│               ├── OCStarCell.h
│               ├── OCStarCell.m
│               ├── OCStarCell.xib
│               ├── SalleCell.h
│               ├── SalleCell.m
│               └── SalleCell.xib
├── ociney.xcodeproj/
│   ├── project.pbxproj
│   └── project.xcworkspace/
│       └── contents.xcworkspacedata
├── ociney.xcworkspace/
│   └── contents.xcworkspacedata
└── ocineyTests/
    ├── en.lproj/
    │   └── InfoPlist.strings
    ├── ocineyTests-Info.plist
    └── ocineyTests.m

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
Pods/

================================================
FILE: Crashlytics.framework/Versions/A/Headers/Crashlytics.h
================================================
//
//  Crashlytics.h
//  Crashlytics
//
//  Copyright 2013 Crashlytics, Inc. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
 *
 * The CLS_LOG macro provides as easy way to gather more information in your log messages that are
 * sent with your crash data. CLS_LOG prepends your custom log message with the function name and
 * line number where the macro was used. If your app was built with the DEBUG preprocessor macro
 * defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog.
 * If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only.
 *
 * Example output:
 * -[AppDelegate login:] line 134 $ login start
 *
 * If you would like to change this macro, create a new header file, unset our define and then define
 * your own version. Make sure this new header file is imported after the Crashlytics header file.
 *
 * #undef CLS_LOG
 * #define CLS_LOG(__FORMAT__, ...) CLSNSLog...
 *
 **/
#ifdef DEBUG
#define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#endif

/**
 *
 * Add logging that will be sent with your crash data. This logging will not show up in the system.log
 * and will only be visible in your Crashlytics dashboard.
 *
 **/
OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
OBJC_EXTERN void CLSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);

/**
 *
 * Add logging that will be sent with your crash data. This logging will show up in the system.log
 * and your Crashlytics dashboard. It is not recommended for Release builds.
 *
 **/
OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
OBJC_EXTERN void CLSNSLogv(NSString *format, va_list args) NS_FORMAT_FUNCTION(1,0);


@protocol CrashlyticsDelegate;

@interface Crashlytics : NSObject

@property (nonatomic, readonly, copy) NSString *apiKey;
@property (nonatomic, readonly, copy) NSString *version;
@property (nonatomic, assign)         BOOL      debugMode;

@property (nonatomic, assign)         NSObject <CrashlyticsDelegate> *delegate;

/**
 *
 * The recommended way to install Crashlytics into your application is to place a call
 * to +startWithAPIKey: in your -application:didFinishLaunchingWithOptions: method.
 *
 * This delay defaults to 1 second in order to generally give the application time to
 * fully finish launching.
 *
 **/
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey;
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey afterDelay:(NSTimeInterval)delay;

/**
 *
 * If you need the functionality provided by the CrashlyticsDelegate protocol, you can use
 * these convenience methods to activate the framework and set the delegate in one call.
 *
 **/
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject <CrashlyticsDelegate> *)delegate;
+ (Crashlytics *)startWithAPIKey:(NSString *)apiKey delegate:(NSObject <CrashlyticsDelegate> *)delegate afterDelay:(NSTimeInterval)delay;

/**
 *
 * Access the singleton Crashlytics instance.
 *
 **/
+ (Crashlytics *)sharedInstance;

/**
 *
 * The easiest way to cause a crash - great for testing!
 *
 **/
- (void)crash;

/**
 *
 * Many of our customers have requested the ability to tie crashes to specific end-users of their
 * application in order to facilitate responses to support requests or permit the ability to reach
 * out for more information. We allow you to specify up to three separate values for display within
 * the Crashlytics UI - but please be mindful of your end-user's privacy.
 *
 * We recommend specifying a user identifier - an arbitrary string that ties an end-user to a record
 * in your system. This could be a database id, hash, or other value that is meaningless to a
 * third-party observer but can be indexed and queried by you.
 *
 * Optionally, you may also specify the end-user's name or username, as well as email address if you
 * do not have a system that works well with obscured identifiers.
 *
 * Pursuant to our EULA, this data is transferred securely throughout our system and we will not
 * disseminate end-user data unless required to by law. That said, if you choose to provide end-user
 * contact information, we strongly recommend that you disclose this in your application's privacy
 * policy. Data privacy is of our utmost concern.
 *
 **/
- (void)setUserIdentifier:(NSString *)identifier;
- (void)setUserName:(NSString *)name;
- (void)setUserEmail:(NSString *)email;

+ (void)setUserIdentifier:(NSString *)identifier;
+ (void)setUserName:(NSString *)name;
+ (void)setUserEmail:(NSString *)email;

/**
 *
 * Set a value for a key to be associated with your crash data.
 *
 **/
- (void)setObjectValue:(id)value forKey:(NSString *)key;
- (void)setIntValue:(int)value forKey:(NSString *)key;
- (void)setBoolValue:(BOOL)value forKey:(NSString *)key;
- (void)setFloatValue:(float)value forKey:(NSString *)key;

+ (void)setObjectValue:(id)value forKey:(NSString *)key;
+ (void)setIntValue:(int)value forKey:(NSString *)key;
+ (void)setBoolValue:(BOOL)value forKey:(NSString *)key;
+ (void)setFloatValue:(float)value forKey:(NSString *)key;

@end

/**
 * The CLSCrashReport protocol exposes methods that you can call on crash report objects passed
 * to delegate methods. If you want these values or the entire object to stay in memory retain
 * them or copy them.
 **/
@protocol CLSCrashReport <NSObject>
@required

/**
 * Returns the session identifier for the crash report.
 **/
@property (nonatomic, readonly) NSString *identifier;

/**
 * Returns the custom key value data for the crash report.
 **/
@property (nonatomic, readonly) NSDictionary *customKeys;

/**
 * Returns the CFBundleVersion of the application that crashed.
 **/
@property (nonatomic, readonly) NSString *bundleVersion;

/**
 * Returns the CFBundleShortVersionString of the application that crashed.
 **/
@property (nonatomic, readonly) NSString *bundleShortVersionString;

/**
 * Returns the date that the application crashed at.
 **/
@property (nonatomic, readonly) NSDate *crashedOnDate;

/**
 * Returns the os version that the application crashed on.
 **/
@property (nonatomic, readonly) NSString *OSVersion;

/**
 * Returns the os build version that the application crashed on.
 **/
@property (nonatomic, readonly) NSString *OSBuildVersion;

@end

/**
 *
 * The CrashlyticsDelegate protocol provides a mechanism for your application to take
 * action on events that occur in the Crashlytics crash reporting system.  You can make
 * use of these calls by assigning an object to the Crashlytics' delegate property directly,
 * or through the convenience startWithAPIKey:delegate:... methods.
 *
 **/
@protocol CrashlyticsDelegate <NSObject>
@optional

/**
 *
 * Called once a Crashlytics instance has determined that the last execution of the
 * application ended in a crash.  This is called some time after the crash reporting
 * process has begun.  If you have specified a delay in one of the
 * startWithAPIKey:... calls, this will take at least that long to be invoked.
 *
 **/
- (void)crashlyticsDidDetectCrashDuringPreviousExecution:(Crashlytics *)crashlytics;

/**
 *
 * Just like crashlyticsDidDetectCrashDuringPreviousExecution this delegate method is
 * called once a Crashlytics instance has determined that the last execution of the
 * application ended in a crash. A CLSCrashReport is passed back that contains data about
 * the last crash report that was generated. See the CLSCrashReport protocol for method details.
 * This method is called after crashlyticsDidDetectCrashDuringPreviousExecution.
 *
 **/
- (void)crashlytics:(Crashlytics *)crashlytics didDetectCrashDuringPreviousExecution:(id <CLSCrashReport>)crash;

@end

/**
 *  `CrashlyticsKit` can be used as a parameter to `[Fabric with:@[CrashlyticsKit]];` in Objective-C. In Swift, simply use `Crashlytics()`
 */
#define CrashlyticsKit [Crashlytics sharedInstance]


================================================
FILE: Crashlytics.framework/Versions/A/Modules/module.modulemap
================================================
framework module Crashlytics {
  umbrella header "Crashlytics.h"

  export *
  module * { export * }
}


================================================
FILE: Crashlytics.framework/Versions/A/Resources/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>English</string>
	<key>CFBundleGetInfoString</key>
	<string>Crashlytics Framework</string>
	<key>CFBundleIdentifier</key>
	<string>com.twitter.crashlytics.ios</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>Crashlytics</string>
	<key>CFBundlePackageType</key>
	<string>FMWK</string>
	<key>CFBundleShortVersionString</key>
	<string>2.2.9+kit</string>
	<key>CFBundleSupportedPlatforms</key>
	<array>
		<string>iPhoneOS</string>
		<string>iPhoneSimulator</string>
		<string>MacOSX</string>
	</array>
	<key>CFBundleVersion</key>
	<string>44</string>
	<key>NSHumanReadableCopyright</key>
	<string>Copyright 2014 Twitter Inc.</string>
</dict>
</plist>


================================================
FILE: Fabric.framework/Versions/A/Headers/Fabric.h
================================================
//
//  Fabric.h
//
//  Copyright (c) 2014 Twitter. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
 *  Fabric Base. Coordinates configuration and starts all provided kits.
 */
@interface Fabric : NSObject

/**
 *  Initialize Fabric and all provided kits. Call this method within your App Delegate's
 *  `application:didFinishLaunchingWithOptions:` and provide the kits you wish to use.
 *
 *  For example, in Objective-C:
 *
 *      `[Fabric with:@[TwitterKit, CrashlyticsKit, MoPubKit]];`
 *
 *  Swift:
 *
 *      `Fabric.with([Twitter(), Crashlytics(), MoPub()])`
 *  
 *  @param kits An array of kit instances. Kits may provide a macro such as CrashlyticsKit which can be passed in as array elements in objective-c.
 *
 *  @return Returns the shared Fabric instance. In most cases this can be ignored.
 */
+ (instancetype)with:(NSArray *)kits;

/**
 *  Returns the Fabric singleton object.
 */
+ (instancetype)sharedSDK;

/**
 *  This BOOL enables or disables debug logging, such as kit version information. The default value is NO.
 */
@property (nonatomic, assign) BOOL debug;

/**
 *  Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance.
 */
- (id)init __attribute__((unavailable("Use +sharedSDK to retrieve the shared Fabric instance.")));

/**
 *  Returns Fabrics's instance of the specified kit.
 *
 *  @param klass The class of the kit.
 *
 *  @return The kit instance of class klass which was provided to with: or nil.
 */
- (id)kitForClass:(Class)klass;

/**
 *  Returns a dictionary containing the kit configuration info for the provided kit.
 *  The configuration information is parsed from the application's Info.plist. This
 *  method is primarily intended to be used by kits to retrieve their configuration.
 *
 *  @param kitInstance An instance of the kit whose configuration should be returned.
 *
 *  @return A dictionary containing kit specific configuration information or nil if none exists.
 */
- (NSDictionary *)configurationDictionaryForKit:(id)kitInstance;

@end


================================================
FILE: Fabric.framework/Versions/A/Modules/module.modulemap
================================================
framework module Fabric {
    umbrella header "Fabric.h"

    export *
    module * { export * }
}

================================================
FILE: Fabric.framework/Versions/A/Resources/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>English</string>
	<key>CFBundleGetInfoString</key>
	<string>Fabric Framework</string>
	<key>CFBundleIdentifier</key>
	<string>io.fabric.sdk.ios</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>Fabric</string>
	<key>CFBundlePackageType</key>
	<string>FMWK</string>
	<key>CFBundleShortVersionString</key>
	<string>1.1.1</string>
	<key>CFBundleSupportedPlatforms</key>
	<array>
		<string>iPhoneOS</string>
		<string>iPhoneSimulator</string>
		<string>MacOSX</string>
	</array>
	<key>CFBundleVersion</key>
	<string>1.1.1</string>
	<key>NSHumanReadableCopyright</key>
	<string>Copyright 2014 Twitter Inc.</string>
</dict>
</plist>


================================================
FILE: Podfile
================================================
# Uncomment this line to define a global platform for your project
platform :ios, "8.1"

target "ociney" do

pod 'AFNetworking', '~> 2.0'
pod 'JSONModel'
pod 'SDWebImage', '~>3.6'
pod 'GPUImage'
pod 'AnalyticsKit/GoogleAnalytics'
pod 'ECSlidingViewController', '~> 2.0.2'
pod 'EDStarRating'
pod 'JBParallaxCell', "~>0.0.1"
pod 'DKScrollingTabController'
pod 'SwipeView' , "~>1.3.2"
pod 'AnalyticsKit/GoogleAnalytics'

# ignore all warnings from all pods
inhibit_all_warnings!

end



================================================
FILE: README.md
================================================
# OCiney

OCiney is a sample app available on iTune :  https://itunes.apple.com/us/app/id955480687
I was firstly built to test a few different implementations of a details page.

![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/1.png?raw=true)
![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/2.png?raw=true)
![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/3.png?raw=true)
![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/4.png?raw=true)
![alt text](https://raw.githubusercontent.com/florent37/OCiney-iOS/master/screens/5.png?raw=true)


OCiney is a movie application, open-source version of Allociné, but 

- With an other design
- With an other ergonomy
- Open source :D

### Tech

### Development
Want to contribute? Feel free!

### Todo's

License
----

Copyright (c) <2014>, <Florent Champigny>
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software
   must display the following acknowledgement:
   This product includes software developed by the <organization>.
4. Neither the name of the <organization> nor the
   names of its contributors may be used to endorse or promote products
   derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY <Florent Champigny> ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

================================================
FILE: ociney/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="4451" systemVersion="13A461" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" initialViewController="vXZ-lx-hvc">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="3676"/>
    </dependencies>
    <scenes>
        <!--class Prefix:identifier View Controller-->
        <scene sceneID="ufC-wZ-h7g">
            <objects>
                <viewController id="vXZ-lx-hvc" customClass="OCViewController" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
            </objects>
        </scene>
    </scenes>
    <simulatedMetricsContainer key="defaultSimulatedMetrics">
        <simulatedStatusBarMetrics key="statusBar"/>
        <simulatedOrientationMetrics key="orientation"/>
        <simulatedScreenMetrics key="destination" type="retina4"/>
    </simulatedMetricsContainer>
</document>

================================================
FILE: ociney/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-Small@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "57x57",
      "idiom" : "iphone",
      "filename" : "Icon.png",
      "scale" : "1x"
    },
    {
      "size" : "57x57",
      "idiom" : "iphone",
      "filename" : "Icon@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-60@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "Icon-Small.png",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "29x29",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "Icon-40.png",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "40x40",
      "scale" : "2x"
    },
    {
      "size" : "50x50",
      "idiom" : "ipad",
      "filename" : "Icon-Small-50.png",
      "scale" : "1x"
    },
    {
      "size" : "50x50",
      "idiom" : "ipad",
      "filename" : "Icon-Small-50@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "72x72",
      "idiom" : "ipad",
      "filename" : "Icon-72.png",
      "scale" : "1x"
    },
    {
      "size" : "72x72",
      "idiom" : "ipad",
      "filename" : "Icon-72@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-76.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-76@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "512x512",
      "idiom" : "mac",
      "filename" : "iTunesArtwork.png",
      "scale" : "1x"
    },
    {
      "size" : "512x512",
      "idiom" : "mac",
      "filename" : "iTunesArtwork@2x.png",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: ociney/Images.xcassets/LaunchImage.launchimage/Contents.json
================================================
{
  "images" : [
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    },
    {
      "orientation" : "portrait",
      "idiom" : "iphone",
      "subtype" : "retina4",
      "extent" : "full-screen",
      "minimum-system-version" : "7.0",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: ociney/OCAppDelegate.h
================================================
//
//  OCAppDelegate.h
//  ociney
//
//  Created by Florent Champigny on 21/10/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "ECSlidingViewController.h"
#import "RechercheTask.h"
#import <CoreLocation/CoreLocation.h>

#define APP_DELEGATE (OCAppDelegate*)[UIApplication sharedApplication].delegate

@interface OCAppDelegate : UIResponder <UIApplicationDelegate,UISearchBarDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (atomic, strong) UINavigationController *navigationController;

@property (atomic, strong) ECSlidingViewController *slidingViewController;

@property (nonatomic, strong) UIButton *menu;

@property (strong, nonatomic) NSMutableArray * moviesList;


-(void)lancerVueFilm:(NSArray *) movieList;

-(void) changeTopViewController:(NSInteger)tagController;

-(void)toggleLeftDrawer;

@property (strong, nonatomic) UIWindow *frontWindow;
@property (strong, nonatomic) UIWindow *backWindow;

-(void)cacherMenu:(BOOL)cacher;
-(void)cacherBoutonRecherche:(BOOL)cacher;
-(void)cacherSearchBar:(BOOL)cacher;
-(void)fermerSearchBar:(BOOL)fermer andCacherRecherche:(BOOL)cacher;

// Search Bar
@property (nonatomic, strong) UIButton *search;
@property (nonatomic, assign) BOOL openSearch;
@property (strong,nonatomic) UISearchBar *searchBar;
@property (strong,nonatomic) NSString * placeholderSearch;

@property (strong, nonatomic) CLLocation *myLocationGPS;

@property (strong,nonatomic) RechercheTask * task;
-(void)searchBarMore:(NSInteger)page;

-(void)displayDetailScreen:(BOOL)secondScreen;

@end



================================================
FILE: ociney/OCAppDelegate.m
================================================
//
//  OCAppDelegate.m
//  ociney
//
//  Created by Florent Champigny on 21/10/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import "OCAppDelegate.h"
#import "OCSplashViewController.h"
#import "LeftViewController.h"
#import "OCListMovieViewController.h"
#import "OCStarListController.h"
#import "Constantes.h"
#import "GTAppMenuController.h"
#import "MovieDetailController.h"
#import "Color+Hex.h"
#import "ListSallesController.h"
#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>
#import "OCTheaterDetailMovieController.h"
#import "OCCreditsViewController.h"
#import "AnalyticsKit.h"
#import "AnalyticsKitGoogleAnalyticsProvider.h"

@interface OCAppDelegate(){
    NSInteger tagControllerActive;
}
@end

@implementation OCAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    
    [Fabric with:@[CrashlyticsKit]];
    
    NSString *googleTrackId = @"UA-58169759-1";

#if DEBUG
    googleTrackId = @"";
#endif
    
    AnalyticsKitGoogleAnalyticsProvider *google = [[AnalyticsKitGoogleAnalyticsProvider alloc] initWithTrackingID:googleTrackId];
    [AnalyticsKit initializeLoggers:@[google]];
    
    [application setStatusBarHidden:NO];
    [application setStatusBarStyle:UIStatusBarStyleLightContent];
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:
                                 [[OCSplashViewController alloc] init]];
    
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
    
    self.window.rootViewController = self.navigationController;
    
    [self.window makeKeyAndVisible];
    
    self.myLocationGPS = nil;
    
    return YES;
}

-(void)lancerVueFilm:(NSArray *) movieList{
    
    tagControllerActive = FILMS_MENU;
    
    LeftViewController *underLeftViewController  = [[LeftViewController alloc] init];
    OCListMovieViewController * topController = [[OCListMovieViewController alloc]init];
    
    [topController.array addObjectsFromArray:movieList];
    self.moviesList = [topController.array mutableCopy];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:topController];
    
    UINavigationController* leftNav = [[UINavigationController alloc] initWithRootViewController:underLeftViewController];
    leftNav.navigationBarHidden = NO;
    
    
    UIColor* barColor = [UIColor blackColor];
    self.navigationController.navigationBar.barTintColor = barColor;
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    self.navigationController.navigationBar.opaque = YES;
    self.navigationController.navigationBar.translucent = NO;
    
    leftNav.navigationBar.barTintColor = barColor;
    leftNav.navigationBar.opaque = YES;
    leftNav.navigationBar.translucent = NO;
    
    UIView* nav = self.navigationController.navigationBar.viewForBaselineLayout;
    
    {
        self.menu  = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 20, 20)];
        
        self.menu.center = CGPointMake(self.menu.center.x, nav.center.y);
        [self.menu setImage:[UIImage imageNamed:@"menu"] forState:UIControlStateNormal];
        self.menu.alpha = 0.8;
        self.menu.imageView.contentMode = UIViewContentModeScaleAspectFit;
        [nav addSubview:self.menu];
        
        [self.menu addTarget:self action:@selector(toggleLeftDrawer) forControlEvents:UIControlEventTouchUpInside];
    }
    
    
    {
        
        self.search  = [[UIButton alloc] initWithFrame:CGRectMake(nav.frame.size.width - 35, 0, 25, 25)];
        self.search.center = CGPointMake(self.search.center.x, nav.center.y);
        
        [self.search setImage:[UIImage imageNamed:@"ic_action_search.png"] forState:UIControlStateNormal];
        self.search.imageView.contentMode = UIViewContentModeScaleAspectFit;
        [nav addSubview:self.search];
        
        
        self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(nav.frame.size.width - 35, 0, 0, nav.frame.size.height)];
        
        self.searchBar.delegate = self;
        self.searchBar.showsCancelButton = YES;
        self.searchBar.barStyle = UIBarStyleBlack;
        
        [nav addSubview:self.searchBar];
        
        
        self.openSearch = NO;
        
        [self.search addTarget:self action:@selector(editSearch:) forControlEvents:UIControlEventTouchUpInside];
    }
    
    // configure under left view controller
    underLeftViewController.edgesForExtendedLayout = UIRectEdgeTop | UIRectEdgeBottom | UIRectEdgeLeft; // don't go under the top view
    
    
    // configure sliding view controller
    self.slidingViewController = [ECSlidingViewController slidingWithTopViewController:self.navigationController];
    self.slidingViewController.underLeftViewController  = leftNav;
    
    
    self.slidingViewController.anchorLeftPeekAmount = 60.0;
    self.slidingViewController.anchorRightPeekAmount = 60.0;
    
    
    self.slidingViewController.defaultTransitionDuration = 0.18;
    
    // enable swiping on the top view
    [self enableSwipeGesture:YES];
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = self.slidingViewController;
    [self.window makeKeyAndVisible];
}

-(void)displayDetailScreen:(BOOL)secondScreen{
    if(secondScreen)
    { //detail
        [self enableSwipeGesture:NO];
        [self cacherMenu:YES];
    }else
    { //menu
        [self enableSwipeGesture:YES];
        [self cacherMenu:NO];
    }
}

-(void)enableSwipeGesture:(BOOL)enable
{
    if(enable){
        // enable swiping on the top view
        [self.navigationController.view addGestureRecognizer:self.slidingViewController.panGesture];
    }else{
        // enable swiping on the top view
        [self.navigationController.view removeGestureRecognizer:self.slidingViewController.panGesture];
    }
}

-(void) editSearch:(UIButton *)sender
{
    
    [self fermerSearchBar:NO andCacherRecherche:NO];
    
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    
    [self fermerSearchBar:YES andCacherRecherche:NO];
    [self.searchBar resignFirstResponder];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    [self.task execute:@[searchBar.text]];
    [self.searchBar resignFirstResponder];
}


-(void)searchBarMore:(NSInteger)page{
    [self.task execute:@[self.searchBar.text,@(page)]];
    
}

- (void)toggleLeftDrawer{
    if ([self.slidingViewController currentTopViewPosition] == ECSlidingViewControllerTopViewPositionAnchoredRight)
    {
        [self.slidingViewController resetTopViewAnimated:YES];
    }else{
        [self.slidingViewController anchorTopViewToRightAnimated:YES];
    }
}

-(NSString *) titleWithTag{
    
    NSString * title;
    
    switch (tagControllerActive) {
        case FILMS_MENU:
        {
            title = @"Films";
            
        }
            break;
            
        case STARTS_MENU:
        {
            title = @"Stars";
        }
            break;
            
        case SALLES_MENU:
        {
            title = @"Salles";
        }
            break;
            
        default:
        {
            title = NSLocalizedString(@"app_name", nil);
            
        }
            break;
    }
    
    return title;
}

-(void) changeTopViewController:(NSInteger)tagController{
    
    if(tagController != tagControllerActive){
        
        UIViewController * topController = nil;
        tagControllerActive = tagController;
        
        
        switch (tagController) {
            case FILMS_MENU:
            {
                
                topController = [[OCListMovieViewController alloc]init];
                ((OCListMovieViewController *)topController).array = [self.moviesList mutableCopy];
                
                break;
            }
                
            case STARTS_MENU:
            {
                
                topController = [[OCStarListController alloc]init];

                
            }
                break;
                
            case SALLES_MENU:
            {
                
                topController = [[ListSallesController alloc]init];
                
                
            }
                break;
                
            case FAVORIS_MENU:
            {
                
                topController = [[OCListMovieViewController alloc]init];
                
                
            }
                break;
                
            case CREDITS_MENU:
            {
                
                topController = [[OCCreditsViewController alloc]init];
                
                
            }
                break;
                
            default:
            {
                topController = [[OCListMovieViewController alloc]init];                
            }
                break;
        }
        
        
        [topController setTitle:[self titleWithTag]];
        
        [self.navigationController setViewControllers: [NSArray arrayWithObject: topController]
                                             animated: NO];
        
        [self.slidingViewController resetTopViewAnimated:YES];
        
        //[self cacherMenu:YES];
        [self.searchBar setText:@""];
        
        
        if([topController isKindOfClass:[OCCreditsViewController class]])
            [self fermerSearchBar:YES andCacherRecherche:YES];
        else
            [self fermerSearchBar:YES andCacherRecherche:NO];
        [self enableSwipeGesture:YES];
    }
    
}


-(void)cacherMenu:(BOOL)cacher{
    
    self.menu.hidden = cacher;
}

-(void)cacherBoutonRecherche:(BOOL)cacher{
    
    [UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^(void) {
        self.search.hidden = cacher;
    }completion:^(BOOL finished) {
        [self.searchBar resignFirstResponder];
    } ];
}

-(void)cacherSearchBar:(BOOL)cacher{
    self.searchBar.hidden = cacher;
    [self.searchBar resignFirstResponder];
}

-(void)fermerSearchBar:(BOOL)fermer andCacherRecherche:(BOOL)cacher{
    
    if(fermer){
        
        [self.navigationController.topViewController setTitle:[self titleWithTag]];
        
        
        [UIView animateWithDuration:0.05 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^(void) {
            
            self.searchBar.frame = CGRectMake(65, self.searchBar.frame.origin.y, 0, self.searchBar.frame.size.height);
            
        } completion:^(BOOL finished) {
            self.search.hidden = cacher;
            [self.searchBar resignFirstResponder];
        } ];
        
        [self.task.cancelDelegate onCancelSearch];
        
    }else{
        
        [self.searchBar setPlaceholder:self.placeholderSearch];
        
        [self.navigationController.topViewController setTitle:@""];
        
        self.search.hidden = YES;
        
        [UIView animateWithDuration:0.05 delay:0.0 options:UIViewAnimationOptionCurveLinear animations:^(void) {
            
            self.searchBar.frame = CGRectMake(65, self.searchBar.frame.origin.y, 250, self.searchBar.frame.size.height);
            [self.searchBar becomeFirstResponder];
            
        } completion:^(BOOL finished) {} ];
    }
    
}

@end


================================================
FILE: ociney/OCSplashViewController.h
================================================
//
//  OCViewController.h
//  ociney
//
//  Created by Florent Champigny on 21/10/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "OCLoadMoviesTask.h"

@interface OCSplashViewController : UIViewController <OCLoadMoviesTaskDelegate>

@property (strong, nonatomic) OCLoadMoviesTask *task;

@end


================================================
FILE: ociney/OCSplashViewController.m
================================================
//
//  OCViewController.m
//  ociney
//
//  Created by Florent Champigny on 21/10/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import "OCSplashViewController.h"
#import "Color+Hex.h"
#import "OCListMovieViewController.h"
#import "OCAppDelegate.h"

@interface OCSplashViewController (){
    UIView * fondStripe;
    UILabel * descriptif;
    UIView * splash_logo;
    UIImageView * ic_glass;
    UIImageView * ic_text_ociney;
    UIImageView * ic_drawer_film;
    OCAppDelegate * appDelegate;
}

@end

@implementation OCSplashViewController

#define DEGREES_IN_RADIANS(x) (M_PI * x / 180.0);


- (void)viewDidLoad
{
    [super viewDidLoad];

    [self.view setBackgroundColor:[UIColor colorFromHexString:GRAY]];

    appDelegate = ((OCAppDelegate*)[[UIApplication sharedApplication] delegate]);

    fondStripe = [[UIView alloc] initWithFrame:CGRectZero];
    fondStripe.alpha = 0.2f;
    [fondStripe setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"splash_motif_stripes_black.png"]]];
    [self.view addSubview:fondStripe];
    
    descriptif = [[UILabel alloc]initWithFrame:CGRectZero];
    [descriptif setTextColor:[UIColor whiteColor]];
    descriptif.textAlignment = NSTextAlignmentCenter;
    //[UIFont fontWithName:@"Roboto-Light" size:13]
    descriptif.font = [UIFont systemFontOfSize:12];

    [descriptif setText:@"FILMS | HORAIRES | CRITIQUES | CASTING"];
    
    [self.view addSubview:descriptif];
    
    splash_logo = [[UIView alloc]initWithFrame:CGRectZero];
    
    ic_glass = [[UIImageView alloc]initWithFrame:CGRectZero];
    ic_glass.image = [UIImage imageNamed:@"ic_glass_reflect_color_big.png"];
    
    [splash_logo addSubview:ic_glass];
    
    
    ic_text_ociney = [[UIImageView alloc]initWithFrame:CGRectZero];
    ic_text_ociney.image = [UIImage imageNamed:@"ic_txt_ociney.png"];
    
    [splash_logo addSubview:ic_text_ociney];
    
    [self.view addSubview:splash_logo];
    
    
    ic_drawer_film = [[UIImageView alloc]initWithFrame:CGRectZero];
    ic_drawer_film.image = [UIImage imageNamed:@"ic_drawer_films.png"];
    
    [self.view addSubview:ic_drawer_film];
    
    
    CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    [fullRotation setFromValue:[NSNumber numberWithFloat:0]];
    [fullRotation setToValue:[NSNumber numberWithFloat:((2*M_PI))]];
    fullRotation.speed = 5.0f;
    fullRotation.duration = 5.5;
    fullRotation.repeatCount = 1;
    
    fullRotation.repeatCount = HUGE_VALF;
    
    [[ic_drawer_film layer] addAnimation:fullRotation forKey:@"transform.rotation"];
    
    self.task = [[OCLoadMoviesTask alloc]initWithDelegate:self];
    [self.task execute:@[@"nowshowing",@"small",@"toprank",@20,@1]];
}



-(void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    
    [[self navigationController] setNavigationBarHidden:YES animated:NO];

    fondStripe.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
    descriptif.frame = CGRectMake(0, 30, self.view.frame.size.width, 80);
    
    // On met la vue au milieu
    splash_logo.frame = CGRectMake(0, 0, self.view.frame.size.width, 135);
    splash_logo.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
    
    
    ic_glass.frame = CGRectMake(0, 0,160,95);
    ic_glass.center = CGPointMake(splash_logo.center.x, ic_glass.center.y);
    
    
    ic_text_ociney.frame = CGRectMake(0, 95, 150, 40);
    ic_text_ociney.center = CGPointMake(splash_logo.center.x, ic_text_ociney.center.y);
    
    
    ic_drawer_film.frame = CGRectMake(0,self.view.frame.size.height - 100, 54, 54);
    ic_drawer_film.center = CGPointMake(self.view.center.x, ic_drawer_film.center.y);
    
}

#pragma mark - OCLoadMoviesTaskDelegate


-(void)onMoviesListRecu:(OCLoadMoviesTask*)task moviesList:(NSArray*)moviesList{
    [appDelegate lancerVueFilm:moviesList];

}

-(void)onMoviesListResultatVide:(OCLoadMoviesTask*)task{
    
}

-(void)erreurReseau:(AsyncTask*)task
{
    
}

-(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher
{
    
}

@end


================================================
FILE: ociney/en.lproj/InfoPlist.strings
================================================
/* Localized versions of Info.plist keys */



================================================
FILE: ociney/libs/GTAppMenuController/GTAppMenuController.h
================================================
//
//  GTMainViewController.h
//  GTAppMenuController
//
//  Created by Gianluca Tursi on 24/05/14.
//  Copyright (c) 2014 Gianluca Tursi. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface GTAppMenuController : UINavigationController

-(void)activateSwipeToOpenMenu:(BOOL)onlyNavigation;
-(void)openAndCloseMenu;
-(void)setAnimationDuration:(CGFloat)d;

@end


================================================
FILE: ociney/libs/GTAppMenuController/GTAppMenuController.m
================================================
//
//  GTMainViewController.m
//  GTAppMenuController
//
//  Created by Gianluca Tursi on 24/05/14.
//  Copyright (c) 2014 Gianluca Tursi. All rights reserved.
//

#import "GTAppMenuController.h"
#import "OCAppDelegate.h"
#define kHeaderHeight 60


@interface GTAppMenuController ()
@property (strong, nonatomic) OCAppDelegate *delegate;
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UIPanGestureRecognizer *panGesture;
@end

@implementation GTAppMenuController{
    
    float firstX;
    float firstY;
    CGPoint _origin;
    CGPoint _final;
    CGFloat duration;
    
}

-(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleLightContent;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.delegate = (OCAppDelegate *)[[UIApplication sharedApplication] delegate];
    self.window = self.delegate.frontWindow;
    self.window.layer.shadowRadius = 5.0f;
    self.window.layer.shadowOffset = CGSizeMake(0,0);
    self.window.layer.shadowColor = [UIColor blackColor].CGColor;
    self.window.layer.shadowOpacity = .9f;
    
    duration = .3f;
}

-(void)activateSwipeToOpenMenu:(BOOL)onlyNavigation{
    
    _panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(onPan:)];
    if (onlyNavigation == YES) {
        [self.navigationBar addGestureRecognizer:_panGesture];
    }else{
        [self.window addGestureRecognizer:_panGesture];
    }
    
    
    
}
-(void)openAndCloseMenu{
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    CGPoint finalOrigin;
    CGRect f = self.window.frame;
    
    if (f.origin.y == CGPointZero.y)
        finalOrigin.y = CGRectGetHeight([UIScreen mainScreen].bounds) - kHeaderHeight;
    else
        finalOrigin.y = CGPointZero.y;
    
    finalOrigin.x = 0;
    f.origin = finalOrigin;
    [UIView animateWithDuration:.3 delay:0.0 options:UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         self.window.transform = CGAffineTransformIdentity;
                         self.window.frame = f;
                         
                     } completion:^(BOOL finished) {
                         
                     }];
    
    
}

-(void)setAnimationDuration:(CGFloat)d{
    duration = d;
}


- (void)onPan:(UIPanGestureRecognizer *)pan
{
    CGPoint translation = [pan translationInView:self.window];
    CGPoint velocity = [pan velocityInView:self.window];
    
    switch (pan.state) {
            
        case UIGestureRecognizerStateBegan:
            
            _origin = self.window.frame.origin;
            
            break;
        case UIGestureRecognizerStateChanged:
            
            if (_origin.y + translation.y >= 0){
                
                if(self.window.frame.origin.y != CGPointZero.y)
                    self.window.transform = CGAffineTransformMakeTranslation(0, translation.y);
                else
                    self.window.transform = CGAffineTransformMakeTranslation(0, translation.y);
                
            }
            
            break;
        case UIGestureRecognizerStateEnded:
            
        case UIGestureRecognizerStateCancelled:
        {
            CGPoint finalOrigin = CGPointZero;
            if (velocity.y >= 0) {
                finalOrigin.y = CGRectGetHeight([UIScreen mainScreen].bounds) - kHeaderHeight;
            }
            
            CGRect f = self.window.frame;
            f.origin = finalOrigin;
            [UIView animateWithDuration:.3 delay:0.0 options:UIViewAnimationOptionCurveEaseOut
                             animations:^{
                                 self.window.transform = CGAffineTransformIdentity;
                                 self.window.frame = f;
                                 
                             } completion:^(BOOL finished) {
                                 
                             }];
            
        }
            break;
            
        default:
            break;
    }
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


@end


================================================
FILE: ociney/libs/SliddingController/TTBlackTriangle.h
================================================
//
//  TTBlackTriangle.h
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 16/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface TTBlackTriangle : UIView

- (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor;

@end


================================================
FILE: ociney/libs/SliddingController/TTBlackTriangle.m
================================================
//
//  TTBlackTriangle.m
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 16/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

#import "TTBlackTriangle.h"

@implementation TTBlackTriangle
{
    UIColor * color;
}

- (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor
{
    color = sColor;
    self = [super initWithFrame:frame];
    if (self) {
        [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

-(void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    CGContextClearRect(ctx, rect);
    
    CGContextBeginPath(ctx);
    CGContextMoveToPoint   (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect));  // top left
    CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMinY(rect));  // top right
    CGContextAddLineToPoint(ctx, CGRectGetMidX(rect), CGRectGetMaxY(rect));  // mid bottom
    CGContextClosePath(ctx);
    
    CGContextSetFillColorWithColor(ctx, color.CGColor);
    CGContextFillPath(ctx);
}

@end


================================================
FILE: ociney/libs/SliddingController/TTScrollSlidingPagesController.h
================================================
//
//  TTSlidingPagesController.h
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <UIKit/UIKit.h>
#import "TTSlidingPagesDataSource.h"
#import "TTSliddingPageDelegate.h"
#import "OCAppDelegate.h"
@class TTScrollViewWrapper;

@interface TTScrollSlidingPagesController : UIViewController<UIScrollViewDelegate>{
    int currentPageBeforeRotation;
    bool viewDidLoadHasBeenCalled;
    bool viewDidAppearHasBeenCalled;
    UIPageControl *pageControl;
    TTScrollViewWrapper *topScrollViewWrapper;
    UIScrollView *bottomScrollView, *topScrollView;
    UILabel * skip;
    OCAppDelegate * appDelegate;

}


-(void)didRotate;
/**Don't use anything above this. Feel free to use anything below!*/


-(void)reloadPages;
-(void)scrollToPage:(int)page animated:(BOOL)animated;
-(int)getCurrentDisplayedPage;
-(int)getXPositionOfPage:(int)page;



@property (nonatomic, weak) id<TTSlidingPagesDataSource> dataSource;

@property (nonatomic, weak) id<TTSliddingPageDelegate> delegate;

/** @property titleScrollerHidden
 *  @brief Whether the title scroller bar is hidden or not.
 *  Whether the title scroller bar is hidden or not. Set this to YES if you only want the pages, and don't want the titles at the top of the page. For now even if this is set to YES you will still need to implement the `-(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController *)source atIndex:(int)index` method in your datasource class, but you can just return nil for everything. Default is NO.  **/
@property (nonatomic) bool titleScrollerHidden;

/**  @property titleScrollerHeight
 *   @brief The height of the top scroller
 *   The height of the top navigation scroller (the one with the header texts or images in). If not set, this will default to 50px.  **/
@property (nonatomic) int titleScrollerHeight;

/**  @property titleScrollerItemWidth
 *   @brief The width of each item in the top scroller
 *   The width of each individual item in the top scroller. The wider it is, the less of the previous and next items you'll see, the narrower it is the more of the previous and next items you'll see but the more likely you won't have enough width for your title! Default if not set is 150px  **/
@property (nonatomic) int titleScrollerItemWidth;

/**  @property titleScrollerBackgroundColour
 *   @brief The background colour of the top scroller
 *   The background colour of the top scroller. If you want it to be a texture image, you can use [UIColor colorWithPatternImage]. If not set, the default is a black diamonds pattern (credit: from http://subtlepatterns.com/ as long as you copy the diagmonds.png files within the Images folder in the same folder as this source). **/
@property (nonatomic, strong) UIColor *titleScrollerBackgroundColour;

/**  @property titleScrollerBackgroundColour
 *   @brief The colour of the text in the top scroller
 *   The colour of the text in the top scroller. If not set, the default will be white. **/
@property (nonatomic, strong) UIColor *titleScrollerTextColour;

/** @property titleScrollerInActiveTextColour
 *  @brief The colour of the inactive headings in the header area
 *  The colour of the inactive text in the top scroller. If not set, the default will be white. **/
@property (nonatomic, strong) UIColor *titleScrollerInActiveTextColour;

/** @property titleScrollerTextDropShadowColour
 *  @brief The colour of the drop shadow for the heading text
 *  The colour of the drop shadow for the heading text. If not set, the default will be black. **/
@property (nonatomic, strong) UIColor *titleScrollerTextDropShadowColour;

/** @property titleScrollerTextFont
 *  @brief The font for the text in the header area
 *  The font for the text in the header area. If not set, the default will be the bold system font. **/
@property (nonatomic, strong) UIFont *titleScrollerTextFont;

/** @property titleScrollerBottomEdgeColour
 *  @brief The colour of the border on the bottom edge of the header area
 *  The colour of the border on the bottom edge of the header area. If not set, the default will be transparent. **/
@property (nonatomic, strong) UIColor *titleScrollerBottomEdgeColour;

/** @property titleScrollerBottomEdgeHeight
 *  @brief The height of the border on the bottom edge of the header area
 *  The height of the border on the bottom edge of the header area. If not set, the default will be 3. **/
@property (nonatomic) int titleScrollerBottomEdgeHeight;

/**  @property triangleBackgroundColour
 *   @brief The colour of the triangle in the top scroller
 *   The colour of the triangle in the top scroller. If not set, the default will be black. **/
@property (nonatomic, strong) UIColor *triangleBackgroundColour;

/**  @property disableTopScrollerShadow
 *   @brief Disables the shadow effect on the top header scroller
 *   If set to YES the shadow effect on the top header scroller will be disabled. Default is NO. **/
@property (nonatomic) BOOL disableTitleScrollerShadow;

/**  @property disableUIPageControl
 *   @brief Disables the UIPageControl (the page dots) at the top of the screen
 *   If set to YES the UIPageControl at the top of the screen will not be added. Default is NO. **/
@property (nonatomic) BOOL disableUIPageControl;

/**  @property initialPageNumber
 *   @brief Sets the scroller to scroll to a specific page initially
 *   Sets the scroller to scroll to a specific page initially (either on the first load, or afrer calling reloadPages). Default is 0. **/
@property (nonatomic) int initialPageNumber;

/**  @property pagingEnabled
 *   @brief Whether the content view "snaps" to each page. Dont set this to NO if you implement widthForPageOnSlidingPagesViewController:atIndex in the delegate as it won't work properly!
 *   Whether the content view "snaps" to each page (YES), or if the scroll is continous (NO). Default is YES. **/
@property (nonatomic) BOOL pagingEnabled;

/**  @property zoomOutAnimationDisabled
 *   @brief Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO.
 *   Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO **/
@property (nonatomic) bool zoomOutAnimationDisabled;

/**  @property hideStatusBarWhenScrolling
 *   @brief Intended for use in iOS7+ and when the UIScrollSlidingPages control is full screen. 
 
    The new behaviour of iOS7 can result in the status bar overlapping the top of the UIScrollSlidingPages. If you set this property to YES, the page dots at the top of the screen will be hidden until the user starts scrolling, at which point the status bar is replaced with the page number dots until the user stops scrolling. 
 
    If you set this to YES, you also need to add the "UIViewControllerBasedStatusBarAppearance" key as a BOOLEAN in info.plist and set it to NO, the app will throw an exception to alert you of this if you don't.  
 
    If you use this in anything less than iOS7 it won't make sense unless in your view hierarchy you make sure the status bar overlaps the TTScrollSlidingPagesController. So unless you do that, it's probably best to enable this property conditionally if the device is iOS7+
 
 *   Default is NO
 **/
@property (nonatomic) bool hideStatusBarWhenScrolling;



@end


================================================
FILE: ociney/libs/SliddingController/TTScrollSlidingPagesController.m
================================================
//
//  TTSlidingPagesController.m
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTScrollSlidingPagesController.h"
#import "TTSlidingPage.h"
#import "TTSlidingPageTitle.h"
#import <QuartzCore/QuartzCore.h>
#import "TTBlackTriangle.h"
#import "TTScrollViewWrapper.h"
#import "Color+Hex.h"
#import "Constantes.h"
#import "OCAppDelegate.h"

@interface TTScrollSlidingPagesController ()

@end

@implementation TTScrollSlidingPagesController

/**
 Initalises the control and sets all the default values for the user-settable properties.
 */
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        viewDidLoadHasBeenCalled = NO;
        //set defaults
        self.titleScrollerHidden = NO;
        self.titleScrollerHeight = 50;
        self.titleScrollerItemWidth = 150;
        
        UIImage *backgroundImage = [UIImage imageNamed:@"diagmonds.png"];
        if (backgroundImage != nil){
            self.titleScrollerBackgroundColour = [UIColor colorWithPatternImage:backgroundImage];
        } else {
            self.titleScrollerBackgroundColour = [UIColor blackColor];
        }
        
        self.titleScrollerTextColour = [UIColor whiteColor];
        self.titleScrollerInActiveTextColour = [UIColor whiteColor];
        self.titleScrollerTextDropShadowColour = [UIColor blackColor];
        self.titleScrollerTextFont = [UIFont boldSystemFontOfSize:19];
        self.titleScrollerBottomEdgeHeight = 3;
        self.titleScrollerBottomEdgeColour = [UIColor clearColor];
        self.triangleBackgroundColour = [UIColor blackColor];
        self.disableTitleScrollerShadow = NO;
        self.disableUIPageControl = NO;
        self.initialPageNumber = 0;
        self.pagingEnabled = YES;
        self.zoomOutAnimationDisabled = NO;
        self.hideStatusBarWhenScrolling = NO;
    }
    return self;
}

/**
 Initialse the top and bottom scrollers (but don't populate them with pages yet)
 */
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    viewDidLoadHasBeenCalled = YES;
    
    int nextYPosition = self.view.frame.size.height - 30;
    int pageDotsControlHeight = 0;

    appDelegate = ((OCAppDelegate*)[[UIApplication sharedApplication] delegate]);

    TTBlackTriangle *triangle;
    if (!self.titleScrollerHidden){
        //add a triangle view to point to the currently selected page from the header
        int triangleWidth = 30;
        int triangleHeight = 10;
        triangle = [[TTBlackTriangle alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2-(triangleWidth/2), nextYPosition/*start at the top of the nextYPosition, but dont increment the yposition, so this means the triangle sits on top of the topscroller and cuts into it a bit*/, triangleWidth, triangleHeight) color:self.triangleBackgroundColour];
        triangle.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        [self.view addSubview:triangle];
        
        //set up the top scroller (for the nav titles to go in) - it is one frame wide, but has clipToBounds turned off to enable you to see the next and previous items in the scroller. We wrap it in an outer uiview so that the background colour can be set on that and span the entire view (because the width of the topScrollView is only one frame wide and centered).
        topScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.titleScrollerItemWidth, self.titleScrollerHeight)];
        topScrollView.center = CGPointMake(self.view.center.x, topScrollView.center.y); //center it horizontally
        topScrollView.pagingEnabled = YES;
        topScrollView.clipsToBounds = NO;
        topScrollView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        topScrollView.showsVerticalScrollIndicator = NO;
        topScrollView.showsHorizontalScrollIndicator = NO;
        topScrollView.directionalLockEnabled = YES;
        topScrollView.backgroundColor = [UIColor clearColor];
        topScrollView.pagingEnabled = self.pagingEnabled;
        topScrollView.delegate = self; //move the bottom scroller proportionally as you drag the top.
        topScrollViewWrapper = [[TTScrollViewWrapper alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, self.titleScrollerHeight) andUIScrollView:topScrollView];//make the view to put the scroll view inside which will allow the background colour, and allow dragging from anywhere in this wrapper to be passed to the scrollview.
        topScrollViewWrapper.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        topScrollViewWrapper.backgroundColor = self.titleScrollerBackgroundColour;
        //pass touch events from the wrapper onto the scrollview (so you can drag from the entire width, as the scrollview itself only lives in the very centre, but with clipToBounds turned off)
        
        //single tap to switch to different item
        UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topScrollViewTapped:)];
        singleTap.numberOfTapsRequired = 1;
        singleTap.numberOfTouchesRequired = 1;
        [topScrollViewWrapper addGestureRecognizer: singleTap];
        
        [topScrollViewWrapper addSubview:topScrollView];//put the top scroll view in the wrapper.
        [self.view addSubview:topScrollViewWrapper]; //put the wrapper in this view.
        nextYPosition += self.titleScrollerHeight;
        
        UIView *barView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(topScrollViewWrapper.frame) - self.titleScrollerBottomEdgeHeight, CGRectGetWidth(topScrollViewWrapper.frame), self.titleScrollerBottomEdgeHeight)];
        barView.backgroundColor = self.titleScrollerBottomEdgeColour;
        [topScrollViewWrapper addSubview:barView];
        [topScrollViewWrapper bringSubviewToFront:barView];
    }
    
    
    //set up the bottom scroller (for the content to go in)
    bottomScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    bottomScrollView.pagingEnabled = self.pagingEnabled;
    bottomScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    bottomScrollView.showsVerticalScrollIndicator = NO;
    bottomScrollView.showsHorizontalScrollIndicator = NO;
    bottomScrollView.directionalLockEnabled = YES;
    bottomScrollView.delegate = self; //move the top scroller proportionally as you drag the bottom.
    bottomScrollView.alwaysBounceVertical = NO;
    [self.view addSubview:bottomScrollView];
    
    if (!self.disableUIPageControl){
        //create and add the UIPageControl
        CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
        int statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); // the height of the status bar will be the smaller value. Can't guarantee it's the height property because if the app starts in landscape sometimes the height is actually the width property :|
        pageDotsControlHeight = statusBarHeight;
        pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, pageDotsControlHeight)];
        pageControl.backgroundColor = [UIColor clearColor];
        pageControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        [pageControl addTarget:self action:@selector(pageControlChangedPage:) forControlEvents:UIControlEventValueChanged];
        [self.view addSubview:pageControl];
        
        nextYPosition += pageDotsControlHeight;
        
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        //[button setTitleColor:[UIColor colorFromHexString:WHITE50] forState:UIControlStateNormal];
       /* [button addTarget:self
                   action:@selector(skip:)
         forControlEvents:UIControlEventTouchUpInside];*/
        button.titleLabel.font =[UIFont fontWithName:@"Roboto-Black" size:12];
        [button setTitle:NSLocalizedString(@"skip", nil) forState:UIControlStateNormal];
        button.frame = CGRectMake(self.view.frame.size.width - 62, self.view.frame.size.height - 59, 55, 80);
        [self.view addSubview:button];
         }
    
    //add the drop shadow on the top scroller (if enabled) and bring the view to the front
    if (!self.titleScrollerHidden && !self.disableTitleScrollerShadow){
        topScrollViewWrapper.layer.masksToBounds = NO;
        topScrollViewWrapper.layer.shadowOffset = CGSizeMake(0, 4);
        topScrollViewWrapper.layer.shadowRadius = 4;
        topScrollViewWrapper.layer.shadowOpacity = 0.3;
        
        //Add shadow path (better performance)
        CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:topScrollViewWrapper.bounds].CGPath;
        [topScrollViewWrapper.layer setShadowPath:shadowPath];
        //rasterize (also due to the better performance)
        topScrollViewWrapper.layer.shouldRasterize = YES;
        topScrollViewWrapper.layer.rasterizationScale = [UIScreen mainScreen].scale;
        
        [self.view bringSubviewToFront:topScrollViewWrapper];//bring view to sit on top so you can see the shadow!
    }
    
    if (triangle != nil){
        [self.view bringSubviewToFront:triangle];
    }
    
    if (self.hideStatusBarWhenScrolling){
        //hide the page dots initially
        pageControl.alpha = 0;
    }

}

-(void)viewDidAppear:(BOOL)animated{
    if (!viewDidAppearHasBeenCalled){
        viewDidAppearHasBeenCalled = YES;
        [self reloadPages];
    }
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/**
 Goes through the datasource and finds all the pages, then populates the topScrollView and bottomScrollView with all the pages and headers.
 
 It clears any of the views in both scrollViews first, so if you need to reload all the pages with new data from the dataSource for some reason, you can call this method.
 */
-(void)reloadPages{
    if (self.dataSource == nil){
        [NSException raise:@"TTSlidingPagesController data source missing" format:@"There was no data source set for the TTSlidingPagesControlller. You must set the .dataSource property on TTSlidingPagesController to an object instance that implements TTSlidingPagesDataSource, also make sure you do this before the view will be loaded (so before you add it as a subview to any other view that is about to appear)"];
    }
    
    //remove any existing items from the subviews
    [topScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    [bottomScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    
    //remove any existing items from the view hierarchy
    for (UIViewController* subViewController in self.childViewControllers){
        [subViewController willMoveToParentViewController:nil];
        [subViewController removeFromParentViewController];
    }
    
    //get the number of pages
    int numOfPages = [self.dataSource numberOfPagesForSlidingPagesViewController:self];
    
    //keep track of where next to put items in each scroller
    int nextXPosition = 0;
    int nextTopScrollerXPosition = 0;
    
    //loop through each page and add it to the scroller
    for (int i=0; i<numOfPages; i++){
        //top scroller (nav) add----
        TTSlidingPageTitle *title = [self.dataSource titleForSlidingPagesViewController:self atIndex:i];
        UIView *topItem;
        if (title == nil){
            //do nothing, just empty view
            NSLog(@"TTScrollSlidingPagesController Notice: An empty title object was returned in the titleForSlidingPagesViewController method of the datasource. Titles should be instances of TTSlidingPageTitle. An empty view is being put in it's place.");
            topItem = [[UIView alloc] init];
        } else if (![title isKindOfClass:[TTSlidingPageTitle class]]){ //if someone has implemented the datasource wrong tell them
            [NSException raise:@"TTScrollSlidingPagesController Wrong Title Type" format:@"TTScrollSlidingPagesController: Titles should be instances of TTSlidingPageTitle, one was returned that wasn't a TTSlidingPageTitle. Did you implement the titleForSlidingPagesViewController method in the datasource correctly and with the right return type?"];
        }
        else if (title.headerImage != nil){
            UIImageView *imageView = [[UIImageView alloc] init];
            imageView.contentMode = UIViewContentModeScaleAspectFit;
            imageView.image = title.headerImage;
            topItem = (UIView *)imageView;
        } else {
            UILabel *label = [[UILabel alloc] init];
            label.text = title.headerText;
            label.textAlignment = NSTextAlignmentCenter;
            label.adjustsFontSizeToFitWidth = YES;
            label.textColor = self.titleScrollerInActiveTextColour;
            label.font = self.titleScrollerTextFont;
            label.backgroundColor = [UIColor clearColor];
            
            //add subtle drop shadow
            label.layer.shadowColor = [self.titleScrollerTextDropShadowColour CGColor];
            label.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
            label.layer.shadowRadius = 2.0f;
            label.layer.shadowOpacity = 1.0f;
            
            //set view as the top item
            topItem = (UIView *)label;
        }
        topItem.frame = CGRectMake(nextTopScrollerXPosition, 0, topScrollView.frame.size.width, topScrollView.frame.size.height);
        [topScrollView addSubview:topItem];
        nextTopScrollerXPosition = nextTopScrollerXPosition + topItem.frame.size.width;
        
        
        //bottom scroller add-----
        //set the default width of the page
        int pageWidth = bottomScrollView.frame.size.width;
        //if the datasource implements the widthForPageOnSlidingPagesViewController:atIndex method, use it to override the width of the page
        if ([self.dataSource respondsToSelector:@selector(widthForPageOnSlidingPagesViewController:atIndex:)] ){
            pageWidth = [self.dataSource widthForPageOnSlidingPagesViewController:self atIndex:i];
        }
        
        TTSlidingPage *page = [self.dataSource pageForSlidingPagesViewController:self atIndex:i];//get the page
        if (page == nil || ![page isKindOfClass:[TTSlidingPage class]]){
            [NSException raise:@"TTScrollSlidingPagesController Wrong Page Content Type" format:@"TTScrollSlidingPagesController: Page contents should be instances of TTSlidingPage, one was returned that was either nil, or wasn't a TTSlidingPage. Make sure your pageForSlidingPagesViewController method in the datasource always returns a TTSlidingPage instance for each page requested."];
        }
        UIView *contentView = page.contentView;
        
        //make a container view (putting it inside a container view because if the contentView uses any autolayout it doesn't work well with the .transform property that the zoom animation uses. The container view shields it from this).
        UIView *containerView = [[UIView alloc] init];
        
        //put the container view in the right position, y is always 0, x is incremented with each item you add (it is a horizontal scroller).
        containerView.frame = CGRectMake(nextXPosition, 0, pageWidth, bottomScrollView.frame.size.height);
        nextXPosition = nextXPosition + containerView.frame.size.width;
        
        //put the content view inside the container view
        [containerView addSubview:contentView];
        
        //add the container view to the scroll view
        [bottomScrollView addSubview:containerView];
        
        
        if (page.contentViewController != nil){
            [self addChildViewController:page.contentViewController];
            [page.contentViewController didMoveToParentViewController:self];
        }
        
    }
    
    //now set the content size of the scroller to be as wide as nextXPosition (we can know that nextXPosition is also the width of the scroller)
    topScrollView.contentSize = CGSizeMake(nextTopScrollerXPosition, topScrollView.frame.size.height);
    bottomScrollView.contentSize = CGSizeMake(nextXPosition, bottomScrollView.frame.size.height);
    
    int initialPage = self.initialPageNumber;
    
    if (!self.disableUIPageControl){
        //set the number of dots on the page control, and set the initial selected dot
        pageControl.numberOfPages = numOfPages;
        pageControl.currentPage = initialPage;
    }
    
    //scroll to the initialpage
    [self scrollToPage:initialPage animated:NO];
}


/**
 Gets number of the page currently displayed in the bottom scroller (zero based - so starting at 0 for the first page).
 
 @return Returns the number of the page currently displayed in the bottom scroller (zero based - so starting at 0 for the first page).
 */
-(int)getCurrentDisplayedPage{
    //sum through all the views until you get to a position that matches the offset then that's what page youre on (each view can be a different width)
    int page = 0;
    int currentXPosition = 0;
    while (currentXPosition <= bottomScrollView.contentOffset.x && currentXPosition < bottomScrollView.contentSize.width){
        currentXPosition += [self getWidthOfPage:page];
        
        if (currentXPosition <= bottomScrollView.contentOffset.x){
            page++;
        }
    }
    
    return page;
}

/**
 Gets the x position of the requested page in the bottom scroller. For example, if you ask for page 5, and page 5 starts at the contentOffset 520px in the bottom scroller, this will return 520.
 
 @param page The page number requested.
 @return Returns the x position of the requested page in the bottom scroller
 */
-(int)getXPositionOfPage:(int)page{
    //each view could in theory have a different width
    int currentTotal = 0;
    for (int curPage = 0; curPage < page; curPage++){
        currentTotal += [self getWidthOfPage:curPage];
    }
    
    return currentTotal;
}

/**
 Gets the width of a specific page in the bottom scroll view. Most of the time this will be the width of the scrollview itself, but if you have widthForPageOnSlidingPagesViewController implemented on the datasource it might be different - hence this method.
 
 @param page The page number requested.
 @return Returns the width of the page requested.
 */
-(int)getWidthOfPage:(int)page {
    int pageWidth = bottomScrollView.frame.size.width;
    if ([self.dataSource respondsToSelector:@selector(widthForPageOnSlidingPagesViewController:atIndex:)]){
        pageWidth = [self.dataSource widthForPageOnSlidingPagesViewController:self atIndex:page];
    }
    return pageWidth;
}

/**
 Gets the page based on an X position in the topScrollView. For example, if you pass in 100 and each topScrollView width is 50, then this would return page 2.
 
 @param page The X position in the topScrollView
 @return Returns the page. For example, if you pass in 100 and each topScrollView width is 50, then this would return page 2.
 */
-(int)getTopScrollViewPageForXPosition:(int)xPosition{
    return xPosition / self.titleScrollerItemWidth;
}

/**
 Sets the active and inactive colors of the heading text labels
 
 @param page The X position of the active page index
 */
- (void)updateHeaderTextColour:(int)page {
    NSArray *vs = [topScrollView subviews];
    int title = 0;
    for (UIView *v in vs) {
        if(title == page && [v isKindOfClass:[UILabel class]]){
            ((UILabel *) v).textColor = self.titleScrollerTextColour;
        } else if([v isKindOfClass:[UILabel class]]) {
            ((UILabel *) v).textColor = self.titleScrollerInActiveTextColour;
        }
        
        title++;
    }
}

/**
 Scrolls the bottom scorller (content scroller) to a particular page number.
 
 @param page The page number to scroll to.
 @param animated Whether the scroll should be animated to move along to the page (YES) or just directly scroll to the page (NO)
 */
-(void)scrollToPage:(int)page animated:(BOOL)animated{
    //keep track of the current page (for the rotation if it ever happens)
    currentPageBeforeRotation = page;
    
    //scroll to the page
    [bottomScrollView setContentOffset: CGPointMake([self getXPositionOfPage:page],0) animated:animated];
    
    if (!animated){
        //if the scroll is not animated, we also need to move the topScrollView - we don't want (if it's animated, it'll call the scrollViewDidScroll delegate which keeps everything in sync, so calling it twice would mess things up).
        [topScrollView setContentOffset: CGPointMake(page * topScrollView.frame.size.width, 0) animated:animated];
    }
    
    //update the pagedots pagenumber
    if (!self.disableUIPageControl){
        pageControl.currentPage = page;
    }
    
    [self updateHeaderTextColour:page];
}




/**
 Handler for the gesture recogniser on the top scrollview wrapper. When the topscrollview wrapper is tapped, this works out the tap position and scrolls the view to that page.
 */
- (void)topScrollViewTapped:(id)sender {
    //get the point that was tapped within the context of the topScrollView (not the wrapper)
    CGPoint point = [sender locationInView:topScrollView];
    
    //we need to add on the contentOffset of the topScrollView
    //int position = point.x + topScrollView.contentOffset.x;
    
    //find out what page in the topscroller would be at that x location
    int page = [self getTopScrollViewPageForXPosition:point.x];
    
    //if not already on the page and the page is within the bounds of the pages we have, scroll to the page!
    if ([self getCurrentDisplayedPage] != page && page < [bottomScrollView.subviews count]){
        [self scrollToPage:page animated:YES];
    }
    
}

/**If YES, hides the status bar and shows the page dots.
 *If NO, shows the status bar and hides the page dots.
 But only if the self.hideStatusBarWhenScrolling property is set to YES, and the disableUIPageControl is NO.
 */
-(void)setStatusBarReplacedWithPageDots:(BOOL)statusBarHidden{
    if (self.hideStatusBarWhenScrolling && !self.disableUIPageControl){
        //hide the status bar and show the page dots control
        [[UIApplication sharedApplication] setStatusBarHidden:statusBarHidden withAnimation:UIStatusBarAnimationFade];
        float pageControlAlpha = statusBarHidden ? 1 : 0;
        [UIView animateWithDuration:0.3 animations:^{
            pageControl.alpha = pageControlAlpha;
        }];
    }
}


#pragma mark Some delegate methods for handling rotation.

-(void)didRotate{
    currentPageBeforeRotation = [self getCurrentDisplayedPage];
}


-(void)viewDidLayoutSubviews{
    //this will get called when the screen rotates, at which point we need to fix the frames of all the subviews to be the new correct x position horizontally. The autolayout mask will automatically change the width for us.
    
    if (!self.titleScrollerHidden && !self.disableTitleScrollerShadow){
        //Fix the shadow path now the bounds might have changed.
        CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:topScrollViewWrapper.bounds].CGPath;
        [topScrollViewWrapper.layer setShadowPath:shadowPath];
    }
    
    //reposition the subviews and set the new contentsize width
    CGRect frame;
    int nextXPosition = 0;
    int page = 0;
    for (UIView *view in bottomScrollView.subviews) {
        view.transform = CGAffineTransformIdentity;
        frame = view.frame;
        frame.size.width = [self getWidthOfPage:page];
        frame.size.height = bottomScrollView.frame.size.height;
        frame.origin.x = nextXPosition;
        frame.origin.y = 0;
        page++;
        nextXPosition += frame.size.width;
        view.frame = frame;
    }
    bottomScrollView.contentSize = CGSizeMake(nextXPosition, bottomScrollView.frame.size.height);
    
    //set it back to the same page as it was before (the contentoffset will be different now the widths are different)
    int contentOffsetWidth = [self getXPositionOfPage:currentPageBeforeRotation];
    bottomScrollView.contentOffset = CGPointMake(contentOffsetWidth, 0);
    
}

#pragma mark UIScrollView delegate

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    [self setStatusBarReplacedWithPageDots:YES];
}


- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (bottomScrollView.subviews.count == 0){
        return; //there are no pages in the bottom scroll view so we couldn't have scrolled. This probably happened during a rotation before the pages had been created (E.g if the app starts in landscape mode)
    }
    
    int currentPage = [self getCurrentDisplayedPage];
    
    if (!self.zoomOutAnimationDisabled){
        //Do a zoom out effect on the current view and next view depending on the amount scrolled
        double minimumZoom = 0.93;
        double zoomSpeed = 1000;//increase this number to slow down the zoom
        UIView *currentView = [bottomScrollView.subviews objectAtIndex:currentPage];
        UIView *nextView;
        if (currentPage < [bottomScrollView.subviews count]-1){
            nextView = [bottomScrollView.subviews objectAtIndex:currentPage+1];
        }
        
        //currentView zooms out as scroll left
        int distanceFromPageOrigin = bottomScrollView.contentOffset.x - [self getXPositionOfPage:currentPage]; //find out how far the scroll is away from the start of the page, and use this to adjust the transform of the currentView
        if (distanceFromPageOrigin < 0) {distanceFromPageOrigin = 0;}
        double scaleAmount = 1-(distanceFromPageOrigin/zoomSpeed);
        if (scaleAmount < minimumZoom ){scaleAmount = minimumZoom;}
        currentView.transform = CGAffineTransformScale(CGAffineTransformIdentity, scaleAmount, scaleAmount);
        
        //nextView zooms in as scroll left
        if (nextView != nil){
            //find out how far the scroll is away from the start of the next page, and use this to adjust the transform of the nextView
            distanceFromPageOrigin = (bottomScrollView.contentOffset.x - [self getXPositionOfPage:currentPage+1]) * -1;//multiply by minus 1 to get the distance to the next page (because otherwise the result would be -300 for example, as in 300 away from the next page)
            if (distanceFromPageOrigin < 0) {distanceFromPageOrigin = 0;}
            scaleAmount = 1-(distanceFromPageOrigin/zoomSpeed);
            if (scaleAmount < minimumZoom ){scaleAmount = minimumZoom;}
            nextView.transform = CGAffineTransformScale(CGAffineTransformIdentity, scaleAmount, scaleAmount);
        }
    }
    
    
    if (scrollView == topScrollView){
        //translate the top scroll to the bottom scroll
        
        //get the page number of the scroll item (e.g third header = 3rd page).
        int pageNumber =  [self getTopScrollViewPageForXPosition:topScrollView.contentOffset.x];
        
        //get the width of the bottom scroller item at that page
        int bottomPageWidth = [self getWidthOfPage:pageNumber];
        
        //work out the start of that page number in the bottom scroller (e.g if the 3rd bottom scroller page starts at 520px, then it's 520)
        int bottomPageStart = [self getXPositionOfPage:pageNumber];
        
        //work out the percent through the header you have scrolled in the top scroller
        int startOfTopPage = pageNumber * self.titleScrollerItemWidth;
        float percentOfTop = (topScrollView.contentOffset.x - startOfTopPage) / self.titleScrollerItemWidth;
        
        //translate that to the percent through the bottom scroller page to scroll, by doing the (percent through the top header * the bottom width) + the bottomPageStart.
        int bottomScrollOffset = (percentOfTop * bottomPageWidth) + bottomPageStart;
        
        bottomScrollView.delegate = nil;
        bottomScrollView.contentOffset = CGPointMake(bottomScrollOffset, 0);
        bottomScrollView.delegate = self;
    }
    else if (scrollView == bottomScrollView){
        //translate the bottom scroll to the top scroll. The bottom scroll items can in theory be different widths so it's a bit more complicated.
        
        //get the x position of the page in the top scroller
        int topXPosition = self.titleScrollerItemWidth * currentPage;
        
        //work out the percentage past this page the view currently is, by getting the xPosition of the next page and seeing how close it is
        float currentPageStartXPosition = [self getXPositionOfPage:currentPage]; //subtract the current page's start x position from both the current offset and next page's start position, to mean that we're on a base level. So for example if we're on page 1 so that the currentPageStartXPosition is 320, and the current offset is 330, the next page xPosition is 640, then 330-320 - 10, and 640-320 - 320. So we're 10 pixels into 320, so roughly 3%.
        float nextPagesXPosition = [self getXPositionOfPage:currentPage+1];
        float percentageTowardsNextPage = (scrollView.contentOffset.x-currentPageStartXPosition) / (nextPagesXPosition-currentPageStartXPosition);
        //multiply the percentage towards the next page that you are, by the width of each topScroller item, and add it to the topXPosition
        
        float addToTopXPosition = percentageTowardsNextPage * self.titleScrollerItemWidth;
        topXPosition = topXPosition + roundf(addToTopXPosition);
        
        topScrollView.delegate = nil;
        topScrollView.contentOffset = CGPointMake(topXPosition, 0);
        topScrollView.delegate = self;
    }
    
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    int currentPage = [self getCurrentDisplayedPage];
    
    [self setStatusBarReplacedWithPageDots:NO];
    
    //store the page you were on so if you have a rotate event, or you come back to this view you know what page to start at. (for example from a navigation controller), the viewDidLayoutSubviews method will know which page to navigate to (for example if the screen was portrait when you left, then you changed to landscape, and navigate back, then viewDidLayoutSubviews will need to change all the sizes of the views, but still know what page to set the offset to)
    currentPageBeforeRotation = [self getCurrentDisplayedPage];
    
    
    //update the pagedots pagenuber
    if (!self.disableUIPageControl){
        //set the correct page on the pagedots
        pageControl.currentPage = currentPage;
    }
    
    [self updateHeaderTextColour:currentPage];
  
    //call the delegate to tell him you've scrolled to another page
    if([self.delegate respondsToSelector:@selector(didScrollToViewAtIndex:)]){
      [self.delegate didScrollToViewAtIndex:currentPage];
    }
  
    /*Just do a quick check, that if the paging enabled property is YES (paging is enabled), the user should not define widthForPageOnSlidingPagesViewController on the datasource delegate because scrollviews do not cope well with paging being enabled for scrollviews where each subview is not full width! */
    if (self.pagingEnabled == YES && [self.dataSource respondsToSelector:@selector(widthForPageOnSlidingPagesViewController:atIndex:)]){
        NSLog(@"Warning: TTScrollSlidingPagesController. You have paging enabled in the TTScrollSlidingPagesController (pagingEnabled is either not set, or specifically set to YES), but you have also implemented widthForPageOnSlidingPagesViewController:atIndex:. ScrollViews do not cope well with paging being disabled when items have custom widths. You may get weird behaviour with your paging, in which case you should either disable paging (set pagingEnabled to NO) and keep widthForPageOnSlidingPagesViewController:atIndex: implented, or not implement widthForPageOnSlidingPagesViewController:atIndex: in your datasource for the TTScrollSlidingPagesController instance.");
    }
}

#pragma mark UIPageControl page changed listener we set up on it
-(void)pageControlChangedPage:(id)sender
{
    //if not already on the page and the page is within the bounds of the pages we have, scroll to the page!

    NSInteger page = pageControl.currentPage;

    if ([self getCurrentDisplayedPage] != page && page < [bottomScrollView.subviews count]){
        [self scrollToPage:(int)page animated:YES];
    }
}

#pragma mark property setters - for when need to do fancy things as well as set the value

-(void)setDataSource:(id<TTSlidingPagesDataSource>)dataSource{
    _dataSource = dataSource;
//    if (self.isViewLoaded){
//        [self reloadPages];
//    }
}

-(void)setPagingEnabled:(BOOL)pagingEnabled{
    _pagingEnabled = pagingEnabled;
    if (bottomScrollView != nil){
        bottomScrollView.pagingEnabled = pagingEnabled;
    }
}

#pragma mark Setters for properties to warn someone if they attempt to set a property after viewDidLoad has already been called (they won't work if so!)
-(void)raiseErrorIfViewDidLoadHasBeenCalled{
    if (viewDidLoadHasBeenCalled)
    {
        [NSException raise:@"TTSlidingPagesController set custom property too late" format:@"The app attempted to set one of the custom properties on TTSlidingPagesController (such as TitleScrollerHeight, TitleScrollerItemWidth etc.) after viewDidLoad has already been loaded. This won't work, you need to set the properties before viewDidLoad has been called - so before you access the .view property or set the dataSource. It is best to set the custom properties immediately after calling init on TTSlidingPagesController"];
    }
}
-(void)setTitleScrollerHidden:(bool)titleScrollerHidden{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerHidden = titleScrollerHidden;
}
-(void)setTitleScrollerHeight:(int)titleScrollerHeight{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerHeight = titleScrollerHeight;
}
-(void)setTitleScrollerItemWidth:(int)titleScrollerItemWidth{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerItemWidth = titleScrollerItemWidth;
}
-(void)setTitleScrollerBackgroundColour:(UIColor *)titleScrollerBackgroundColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerBackgroundColour = titleScrollerBackgroundColour;
}
-(void)setTriangleBackgroundColour:(UIColor *)triangleBackgroundColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _triangleBackgroundColour = triangleBackgroundColour;
}
-(void)setTitleScrollerTextColour:(UIColor *)titleScrollerTextColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerTextColour = titleScrollerTextColour;
}

-(void)setTitleScrollerInActiveTextColour:(UIColor *)titleScrollerNonActiveTextColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerInActiveTextColour = titleScrollerNonActiveTextColour;
}
-(void)setTitleScrollerTextFont:(UIFont *)titleScrollerTextFont{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerTextFont = titleScrollerTextFont;
}
-(void)setTitleScrollerTextDropShadowColour:(UIColor *)titleScrollerTextDropShadowColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerTextDropShadowColour = titleScrollerTextDropShadowColour;
}
-(void)setTitleScrollerBottomEdgeColour:(UIColor *)titleScrollerBottomEdgeColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerBottomEdgeColour = titleScrollerBottomEdgeColour;
}

-(void)setDisableTitleScrollerShadow:(BOOL)disableTitleScrollerShadow{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _disableTitleScrollerShadow = disableTitleScrollerShadow;
}
-(void)setDisableUIPageControl:(BOOL)disableUIPageControl{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _disableUIPageControl = disableUIPageControl;
}
-(void)setHideStatusBarWhenScrolling:(bool)hideStatusBarWhenScrolling{
    if (hideStatusBarWhenScrolling){
        //check the info.plist required key has been set and throw an exception if not
        NSNumber *statusBarKey = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"];
        if (statusBarKey == nil || [statusBarKey isEqualToNumber:@1 ]){
            [NSException raise:@"TTScrollSlidingPagesController: Status Bar 'UIViewControllerBasedStatusBarAppearance' key missing from info.plist" format:@"The 'hideStarusBarWhenScrolling' property on the TTScrollSlidingPagesController is set to yes. This makes the page control (the page number dots) and the status bar share the same space at the top of the screen, and hide the status bar as the user changes pages. To do this, however you need to add the 'UIViewControllerBasedStatusBarAppearance' key to the info.plist and set it to a boolean of NO. See the instructions on github or the example project included with the control for help."];
        }
    }
    
    //otherwise, set the value
    _hideStatusBarWhenScrolling = hideStatusBarWhenScrolling;
    
    if (hideStatusBarWhenScrolling){
        //set the status bar style to light because the background it shares with the pagedots is black. You could do both of these in viewDidLoad, but doing it here just ensures that it still gets set if someone changed the property after viewDidLoad was called.
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
        
    }
}





@end


================================================
FILE: ociney/libs/SliddingController/TTScrollViewWrapper.h
================================================
//
//  TTScrollViewWrapper.h
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 20/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface TTScrollViewWrapper : UIView{
    UIScrollView *scrollView;
}

- (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll;

@end


================================================
FILE: ociney/libs/SliddingController/TTScrollViewWrapper.m
================================================
//
//  TTScrollViewWrapper.m
//  UIScrollSlidingPages
//
//  The purpose of this class is purely to be a wrapper that you can put a UIScrollView inside, and it will pass all it's touch events to the UIScrollView. This is so you can turn the ClipToBounds property of the UIScrollView off (so that a paged scroller still shows items to the left and right such as in the topScroller title), but you can still drag anywhere along the ScrollViewWrapper, and the drag gets passed to the scrollView.
//
//  Created by Thomas Thorpe on 20/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTScrollViewWrapper.h"

@implementation TTScrollViewWrapper

- (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll
{
    self = [super initWithFrame:frame];
    if (self) {
        scrollView = scroll;
    }
    return self;
}

//This method means that when anything hits inside of this view, it will actually pass on the hit to scrollView instead.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if ([self pointInside:point withEvent:event])
    {
		return scrollView;
	}
	return nil;
}


@end


================================================
FILE: ociney/libs/SliddingController/TTSliddingPageDelegate.h
================================================
//
//  TTSliddingPageDelegate.h
//  UIScrollSlidingPages
//
//  Created by John Doran on 06/12/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//
/*
 Copyright (c) 2013 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */
#import <Foundation/Foundation.h>

@protocol TTSliddingPageDelegate <NSObject>

-(void)didScrollToViewAtIndex:(NSUInteger)index;

@end


================================================
FILE: ociney/libs/SliddingController/TTSlidingPage.h
================================================
//
//  TTSlidingPage.h
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface TTSlidingPage : NSObject

//if your view has a controller associated with it, you should use this initialiser and pass the view controller. This will make sure it gets retained and messages are passed to it correctly. 
-(id)initWithContentViewController:(UIViewController *)contentViewController;

//if you use this method and just pass in a content view as a UIView, you must keep your own reference to the view controller, otherwise it might get deallocated and things will start going weird. Use this constructor at your own risk. 
-(id)initWithContentView:(UIView *)contentView;


//the view controller for the content area. Preferbale to just setting a view
@property(strong, nonatomic) UIViewController *contentViewController;

//The view to go in the content area. You should only use this if you are keeping your own reference to the view controller. Use at your own risk.
@property(strong, nonatomic) UIView *contentView;

@end


================================================
FILE: ociney/libs/SliddingController/TTSlidingPage.m
================================================
//
//  TTSlidingPage.m
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTSlidingPage.h"

@implementation TTSlidingPage

-(id)initWithContentViewController:(UIViewController *)contentViewController
{
    self = [super init];
    if(self)
    {
        self.contentViewController = contentViewController;
    }
    return (self);
}


-(id)initWithContentView:(UIView *)contentView
{
    self = [super init];
    if(self)
    {
        self.contentView = contentView;
    }
    return (self);
}

-(void)setContentViewController:(UIViewController *)contentViewController{
    _contentViewController = contentViewController;
    if (contentViewController != nil){
        self.contentView = contentViewController.view;
    }
}

@end


================================================
FILE: ociney/libs/SliddingController/TTSlidingPageTitle.h
================================================
//
//  TTSlidingPageTitle.h
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 29/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface TTSlidingPageTitle : NSObject

-(id)initWithHeaderText:(NSString*)headerText;
-(id)initWithHeaderImage:(UIImage*)headerImage;

//The title text to go in the nav bar
@property(strong, nonatomic) NSString *headerText;

//An image to use in the nav bar (if you set this, the title text will not be used)
@property(strong, nonatomic) UIImage *headerImage;

@end


================================================
FILE: ociney/libs/SliddingController/TTSlidingPageTitle.m
================================================
//
//  TTSlidingPageTitle.m
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 29/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTSlidingPageTitle.h"

@implementation TTSlidingPageTitle

-(id)initWithHeaderText:(NSString*)headerText{
    self = [super init];
    if(self)
    {
        self.headerText = headerText;
    }
    return (self);
}

-(id)initWithHeaderImage:(UIImage*)headerImage{
    self = [super init];
    if(self)
    {
        self.headerImage = headerImage;
    }
    return (self);
}

@end


================================================
FILE: ociney/libs/SliddingController/TTSlidingPagesDataSource.h
================================================
//
//  TTSlidingPagesDataSource.h
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <Foundation/Foundation.h>
@class TTScrollSlidingPagesController;
@class TTSlidingPage;
@class TTSlidingPageTitle;

@protocol TTSlidingPagesDataSource <NSObject>

-(int)numberOfPagesForSlidingPagesViewController:(TTScrollSlidingPagesController *)source;

-(TTSlidingPage *)pageForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index;
-(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index;

@optional
/**  @method widthForPageOnSlidingPagesViewController:atIndex
 *   @brief - This should NOT be used when paging is disabled.  - An optional method to specify the width of one of your pages, if you don't want it to be the full width of the control.
 *   This should NOT be used when paging is disabled - An optional method to specify the width of one of your pages, if you don't implement this method each page will just be the width of the TTScrollSlidingPagesController view.**/
-(int)widthForPageOnSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index;


@end


================================================
FILE: ociney/libs/SliddingController/TTUIScrollViewSlidingPages.h
================================================
//
//  TTUIScrollViewSlidingPages.h
//  TomThorpe
//
//  Created by Thomas Thorpe on 10/05/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTScrollSlidingPagesController.h"
#import "TTSlidingPage.h"
#import "TTSlidingPageTitle.h"

================================================
FILE: ociney/libs/Slider/TTBlackTriangle.h
================================================
//
//  TTBlackTriangle.h
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 16/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface TTBlackTriangle : UIView

- (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor;

@end


================================================
FILE: ociney/libs/Slider/TTBlackTriangle.m
================================================
//
//  TTBlackTriangle.m
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 16/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

#import "TTBlackTriangle.h"

@implementation TTBlackTriangle
{
    UIColor * color;
}

- (id)initWithFrame:(CGRect)frame color:(UIColor *)sColor
{
    color = sColor;
    self = [super initWithFrame:frame];
    if (self) {
        [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

-(void)drawRect:(CGRect)rect
{
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    
    CGContextClearRect(ctx, rect);
    
    CGContextBeginPath(ctx);
    CGContextMoveToPoint   (ctx, CGRectGetMinX(rect), CGRectGetMinY(rect));  // top left
    CGContextAddLineToPoint(ctx, CGRectGetMaxX(rect), CGRectGetMinY(rect));  // top right
    CGContextAddLineToPoint(ctx, CGRectGetMidX(rect), CGRectGetMaxY(rect));  // mid bottom
    CGContextClosePath(ctx);
    
    CGContextSetFillColorWithColor(ctx, color.CGColor);
    CGContextFillPath(ctx);
}

@end


================================================
FILE: ociney/libs/Slider/TTScrollSlidingPagesController.h
================================================
//
//  TTSlidingPagesController.h
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <UIKit/UIKit.h>
#import "TTSlidingPagesDataSource.h"
#import "TTSliddingPageDelegate.h"
#import "OCAppDelegate.h"
@class TTScrollViewWrapper;

@interface TTScrollSlidingPagesController : UIViewController<UIScrollViewDelegate>{
    int currentPageBeforeRotation;
    bool viewDidLoadHasBeenCalled;
    bool viewDidAppearHasBeenCalled;
    UIPageControl *pageControl;
    TTScrollViewWrapper *topScrollViewWrapper;
    UIScrollView *bottomScrollView, *topScrollView;
    UILabel * skip;
    OCAppDelegate * appDelegate;

}


-(void)didRotate;
/**Don't use anything above this. Feel free to use anything below!*/


-(void)reloadPages;
-(void)scrollToPage:(int)page animated:(BOOL)animated;
-(int)getCurrentDisplayedPage;
-(int)getXPositionOfPage:(int)page;



@property (nonatomic, weak) id<TTSlidingPagesDataSource> dataSource;

@property (nonatomic, weak) id<TTSliddingPageDelegate> delegate;

/** @property titleScrollerHidden
 *  @brief Whether the title scroller bar is hidden or not.
 *  Whether the title scroller bar is hidden or not. Set this to YES if you only want the pages, and don't want the titles at the top of the page. For now even if this is set to YES you will still need to implement the `-(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController *)source atIndex:(int)index` method in your datasource class, but you can just return nil for everything. Default is NO.  **/
@property (nonatomic) bool titleScrollerHidden;

/**  @property titleScrollerHeight
 *   @brief The height of the top scroller
 *   The height of the top navigation scroller (the one with the header texts or images in). If not set, this will default to 50px.  **/
@property (nonatomic) int titleScrollerHeight;

/**  @property titleScrollerItemWidth
 *   @brief The width of each item in the top scroller
 *   The width of each individual item in the top scroller. The wider it is, the less of the previous and next items you'll see, the narrower it is the more of the previous and next items you'll see but the more likely you won't have enough width for your title! Default if not set is 150px  **/
@property (nonatomic) int titleScrollerItemWidth;

/**  @property titleScrollerBackgroundColour
 *   @brief The background colour of the top scroller
 *   The background colour of the top scroller. If you want it to be a texture image, you can use [UIColor colorWithPatternImage]. If not set, the default is a black diamonds pattern (credit: from http://subtlepatterns.com/ as long as you copy the diagmonds.png files within the Images folder in the same folder as this source). **/
@property (nonatomic, strong) UIColor *titleScrollerBackgroundColour;

/**  @property titleScrollerBackgroundColour
 *   @brief The colour of the text in the top scroller
 *   The colour of the text in the top scroller. If not set, the default will be white. **/
@property (nonatomic, strong) UIColor *titleScrollerTextColour;

/** @property titleScrollerInActiveTextColour
 *  @brief The colour of the inactive headings in the header area
 *  The colour of the inactive text in the top scroller. If not set, the default will be white. **/
@property (nonatomic, strong) UIColor *titleScrollerInActiveTextColour;

/** @property titleScrollerTextDropShadowColour
 *  @brief The colour of the drop shadow for the heading text
 *  The colour of the drop shadow for the heading text. If not set, the default will be black. **/
@property (nonatomic, strong) UIColor *titleScrollerTextDropShadowColour;

/** @property titleScrollerTextFont
 *  @brief The font for the text in the header area
 *  The font for the text in the header area. If not set, the default will be the bold system font. **/
@property (nonatomic, strong) UIFont *titleScrollerTextFont;

/** @property titleScrollerBottomEdgeColour
 *  @brief The colour of the border on the bottom edge of the header area
 *  The colour of the border on the bottom edge of the header area. If not set, the default will be transparent. **/
@property (nonatomic, strong) UIColor *titleScrollerBottomEdgeColour;

/** @property titleScrollerBottomEdgeHeight
 *  @brief The height of the border on the bottom edge of the header area
 *  The height of the border on the bottom edge of the header area. If not set, the default will be 3. **/
@property (nonatomic) int titleScrollerBottomEdgeHeight;

/**  @property triangleBackgroundColour
 *   @brief The colour of the triangle in the top scroller
 *   The colour of the triangle in the top scroller. If not set, the default will be black. **/
@property (nonatomic, strong) UIColor *triangleBackgroundColour;

/**  @property disableTopScrollerShadow
 *   @brief Disables the shadow effect on the top header scroller
 *   If set to YES the shadow effect on the top header scroller will be disabled. Default is NO. **/
@property (nonatomic) BOOL disableTitleScrollerShadow;

/**  @property disableUIPageControl
 *   @brief Disables the UIPageControl (the page dots) at the top of the screen
 *   If set to YES the UIPageControl at the top of the screen will not be added. Default is NO. **/
@property (nonatomic) BOOL disableUIPageControl;

/**  @property initialPageNumber
 *   @brief Sets the scroller to scroll to a specific page initially
 *   Sets the scroller to scroll to a specific page initially (either on the first load, or afrer calling reloadPages). Default is 0. **/
@property (nonatomic) int initialPageNumber;

/**  @property pagingEnabled
 *   @brief Whether the content view "snaps" to each page. Dont set this to NO if you implement widthForPageOnSlidingPagesViewController:atIndex in the delegate as it won't work properly!
 *   Whether the content view "snaps" to each page (YES), or if the scroll is continous (NO). Default is YES. **/
@property (nonatomic) BOOL pagingEnabled;

/**  @property zoomOutAnimationDisabled
 *   @brief Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO.
 *   Whether the "zoom out" effect that happens as you scroll from page to page should be disabled. Default is NO **/
@property (nonatomic) bool zoomOutAnimationDisabled;

/**  @property hideStatusBarWhenScrolling
 *   @brief Intended for use in iOS7+ and when the UIScrollSlidingPages control is full screen. 
 
    The new behaviour of iOS7 can result in the status bar overlapping the top of the UIScrollSlidingPages. If you set this property to YES, the page dots at the top of the screen will be hidden until the user starts scrolling, at which point the status bar is replaced with the page number dots until the user stops scrolling. 
 
    If you set this to YES, you also need to add the "UIViewControllerBasedStatusBarAppearance" key as a BOOLEAN in info.plist and set it to NO, the app will throw an exception to alert you of this if you don't.  
 
    If you use this in anything less than iOS7 it won't make sense unless in your view hierarchy you make sure the status bar overlaps the TTScrollSlidingPagesController. So unless you do that, it's probably best to enable this property conditionally if the device is iOS7+
 
 *   Default is NO
 **/
@property (nonatomic) bool hideStatusBarWhenScrolling;



@end


================================================
FILE: ociney/libs/Slider/TTScrollSlidingPagesController.m
================================================
//
//  TTSlidingPagesController.m
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTScrollSlidingPagesController.h"
#import "TTSlidingPage.h"
#import "TTSlidingPageTitle.h"
#import <QuartzCore/QuartzCore.h>
#import "TTBlackTriangle.h"
#import "TTScrollViewWrapper.h"
#import "Color+Hex.h"
#import "Constantes.h"
#import "OCAppDelegate.h"

@interface TTScrollSlidingPagesController ()

@end

@implementation TTScrollSlidingPagesController

/**
 Initalises the control and sets all the default values for the user-settable properties.
 */
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        viewDidLoadHasBeenCalled = NO;
        //set defaults
        self.titleScrollerHidden = NO;
        self.titleScrollerHeight = 50;
        self.titleScrollerItemWidth = 150;
        
        UIImage *backgroundImage = [UIImage imageNamed:@"diagmonds.png"];
        if (backgroundImage != nil){
            self.titleScrollerBackgroundColour = [UIColor colorWithPatternImage:backgroundImage];
        } else {
            self.titleScrollerBackgroundColour = [UIColor blackColor];
        }
        
        self.titleScrollerTextColour = [UIColor whiteColor];
        self.titleScrollerInActiveTextColour = [UIColor whiteColor];
        self.titleScrollerTextDropShadowColour = [UIColor blackColor];
        self.titleScrollerTextFont = [UIFont boldSystemFontOfSize:19];
        self.titleScrollerBottomEdgeHeight = 3;
        self.titleScrollerBottomEdgeColour = [UIColor clearColor];
        self.triangleBackgroundColour = [UIColor blackColor];
        self.disableTitleScrollerShadow = NO;
        self.disableUIPageControl = NO;
        self.initialPageNumber = 0;
        self.pagingEnabled = YES;
        self.zoomOutAnimationDisabled = NO;
        self.hideStatusBarWhenScrolling = NO;
    }
    return self;
}

/**
 Initialse the top and bottom scrollers (but don't populate them with pages yet)
 */
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    viewDidLoadHasBeenCalled = YES;
    
    int nextYPosition = self.view.frame.size.height - 30;
    int pageDotsControlHeight = 0;

    appDelegate = ((OCAppDelegate*)[[UIApplication sharedApplication] delegate]);

    TTBlackTriangle *triangle;
    if (!self.titleScrollerHidden){
        //add a triangle view to point to the currently selected page from the header
        int triangleWidth = 30;
        int triangleHeight = 10;
        triangle = [[TTBlackTriangle alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2-(triangleWidth/2), nextYPosition/*start at the top of the nextYPosition, but dont increment the yposition, so this means the triangle sits on top of the topscroller and cuts into it a bit*/, triangleWidth, triangleHeight) color:self.triangleBackgroundColour];
        triangle.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        [self.view addSubview:triangle];
        
        //set up the top scroller (for the nav titles to go in) - it is one frame wide, but has clipToBounds turned off to enable you to see the next and previous items in the scroller. We wrap it in an outer uiview so that the background colour can be set on that and span the entire view (because the width of the topScrollView is only one frame wide and centered).
        topScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.titleScrollerItemWidth, self.titleScrollerHeight)];
        topScrollView.center = CGPointMake(self.view.center.x, topScrollView.center.y); //center it horizontally
        topScrollView.pagingEnabled = YES;
        topScrollView.clipsToBounds = NO;
        topScrollView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        topScrollView.showsVerticalScrollIndicator = NO;
        topScrollView.showsHorizontalScrollIndicator = NO;
        topScrollView.directionalLockEnabled = YES;
        topScrollView.backgroundColor = [UIColor clearColor];
        topScrollView.pagingEnabled = self.pagingEnabled;
        topScrollView.delegate = self; //move the bottom scroller proportionally as you drag the top.
        topScrollViewWrapper = [[TTScrollViewWrapper alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, self.titleScrollerHeight) andUIScrollView:topScrollView];//make the view to put the scroll view inside which will allow the background colour, and allow dragging from anywhere in this wrapper to be passed to the scrollview.
        topScrollViewWrapper.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        topScrollViewWrapper.backgroundColor = self.titleScrollerBackgroundColour;
        //pass touch events from the wrapper onto the scrollview (so you can drag from the entire width, as the scrollview itself only lives in the very centre, but with clipToBounds turned off)
        
        //single tap to switch to different item
        UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(topScrollViewTapped:)];
        singleTap.numberOfTapsRequired = 1;
        singleTap.numberOfTouchesRequired = 1;
        [topScrollViewWrapper addGestureRecognizer: singleTap];
        
        [topScrollViewWrapper addSubview:topScrollView];//put the top scroll view in the wrapper.
        [self.view addSubview:topScrollViewWrapper]; //put the wrapper in this view.
        nextYPosition += self.titleScrollerHeight;
        
        UIView *barView = [[UIView alloc] initWithFrame:CGRectMake(0, CGRectGetHeight(topScrollViewWrapper.frame) - self.titleScrollerBottomEdgeHeight, CGRectGetWidth(topScrollViewWrapper.frame), self.titleScrollerBottomEdgeHeight)];
        barView.backgroundColor = self.titleScrollerBottomEdgeColour;
        [topScrollViewWrapper addSubview:barView];
        [topScrollViewWrapper bringSubviewToFront:barView];
    }
    
    
    //set up the bottom scroller (for the content to go in)
    bottomScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    bottomScrollView.pagingEnabled = self.pagingEnabled;
    bottomScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
    bottomScrollView.showsVerticalScrollIndicator = NO;
    bottomScrollView.showsHorizontalScrollIndicator = NO;
    bottomScrollView.directionalLockEnabled = YES;
    bottomScrollView.delegate = self; //move the top scroller proportionally as you drag the bottom.
    bottomScrollView.alwaysBounceVertical = NO;
    [self.view addSubview:bottomScrollView];
    
    if (!self.disableUIPageControl){
        //create and add the UIPageControl
        CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
        int statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); // the height of the status bar will be the smaller value. Can't guarantee it's the height property because if the app starts in landscape sometimes the height is actually the width property :|
        pageDotsControlHeight = statusBarHeight;
        pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, nextYPosition, self.view.frame.size.width, pageDotsControlHeight)];
        pageControl.backgroundColor = [UIColor clearColor];
        pageControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
        [pageControl addTarget:self action:@selector(pageControlChangedPage:) forControlEvents:UIControlEventValueChanged];
        [self.view addSubview:pageControl];
        
        nextYPosition += pageDotsControlHeight;
        
        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [button setTitleColor:[UIColor colorFromHexString:WHITE50] forState:UIControlStateNormal];
        [button addTarget:self
                   action:@selector(skip:)
         forControlEvents:UIControlEventTouchUpInside];
        button.titleLabel.font =[UIFont fontWithName:@"Roboto-Black" size:12];
        [button setTitle:NSLocalizedString(@"skip", nil) forState:UIControlStateNormal];
        button.frame = CGRectMake(self.view.frame.size.width - 62, self.view.frame.size.height - 59, 55, 80);
        [self.view addSubview:button];
         }
    
    //add the drop shadow on the top scroller (if enabled) and bring the view to the front
    if (!self.titleScrollerHidden && !self.disableTitleScrollerShadow){
        topScrollViewWrapper.layer.masksToBounds = NO;
        topScrollViewWrapper.layer.shadowOffset = CGSizeMake(0, 4);
        topScrollViewWrapper.layer.shadowRadius = 4;
        topScrollViewWrapper.layer.shadowOpacity = 0.3;
        
        //Add shadow path (better performance)
        CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:topScrollViewWrapper.bounds].CGPath;
        [topScrollViewWrapper.layer setShadowPath:shadowPath];
        //rasterize (also due to the better performance)
        topScrollViewWrapper.layer.shouldRasterize = YES;
        topScrollViewWrapper.layer.rasterizationScale = [UIScreen mainScreen].scale;
        
        [self.view bringSubviewToFront:topScrollViewWrapper];//bring view to sit on top so you can see the shadow!
    }
    
    if (triangle != nil){
        [self.view bringSubviewToFront:triangle];
    }
    
    if (self.hideStatusBarWhenScrolling){
        //hide the page dots initially
        pageControl.alpha = 0;
    }

}

-(void)viewDidAppear:(BOOL)animated{
    if (!viewDidAppearHasBeenCalled){
        viewDidAppearHasBeenCalled = YES;
        [self reloadPages];
    }
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/**
 Goes through the datasource and finds all the pages, then populates the topScrollView and bottomScrollView with all the pages and headers.
 
 It clears any of the views in both scrollViews first, so if you need to reload all the pages with new data from the dataSource for some reason, you can call this method.
 */
-(void)reloadPages{
    if (self.dataSource == nil){
        [NSException raise:@"TTSlidingPagesController data source missing" format:@"There was no data source set for the TTSlidingPagesControlller. You must set the .dataSource property on TTSlidingPagesController to an object instance that implements TTSlidingPagesDataSource, also make sure you do this before the view will be loaded (so before you add it as a subview to any other view that is about to appear)"];
    }
    
    //remove any existing items from the subviews
    [topScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    [bottomScrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    
    //remove any existing items from the view hierarchy
    for (UIViewController* subViewController in self.childViewControllers){
        [subViewController willMoveToParentViewController:nil];
        [subViewController removeFromParentViewController];
    }
    
    //get the number of pages
    int numOfPages = [self.dataSource numberOfPagesForSlidingPagesViewController:self];
    
    //keep track of where next to put items in each scroller
    int nextXPosition = 0;
    int nextTopScrollerXPosition = 0;
    
    //loop through each page and add it to the scroller
    for (int i=0; i<numOfPages; i++){
        //top scroller (nav) add----
        TTSlidingPageTitle *title = [self.dataSource titleForSlidingPagesViewController:self atIndex:i];
        UIView *topItem;
        if (title == nil){
            //do nothing, just empty view
            NSLog(@"TTScrollSlidingPagesController Notice: An empty title object was returned in the titleForSlidingPagesViewController method of the datasource. Titles should be instances of TTSlidingPageTitle. An empty view is being put in it's place.");
            topItem = [[UIView alloc] init];
        } else if (![title isKindOfClass:[TTSlidingPageTitle class]]){ //if someone has implemented the datasource wrong tell them
            [NSException raise:@"TTScrollSlidingPagesController Wrong Title Type" format:@"TTScrollSlidingPagesController: Titles should be instances of TTSlidingPageTitle, one was returned that wasn't a TTSlidingPageTitle. Did you implement the titleForSlidingPagesViewController method in the datasource correctly and with the right return type?"];
        }
        else if (title.headerImage != nil){
            UIImageView *imageView = [[UIImageView alloc] init];
            imageView.contentMode = UIViewContentModeScaleAspectFit;
            imageView.image = title.headerImage;
            topItem = (UIView *)imageView;
        } else {
            UILabel *label = [[UILabel alloc] init];
            label.text = title.headerText;
            label.textAlignment = NSTextAlignmentCenter;
            label.adjustsFontSizeToFitWidth = YES;
            label.textColor = self.titleScrollerInActiveTextColour;
            label.font = self.titleScrollerTextFont;
            label.backgroundColor = [UIColor clearColor];
            
            //add subtle drop shadow
            label.layer.shadowColor = [self.titleScrollerTextDropShadowColour CGColor];
            label.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);
            label.layer.shadowRadius = 2.0f;
            label.layer.shadowOpacity = 1.0f;
            
            //set view as the top item
            topItem = (UIView *)label;
        }
        topItem.frame = CGRectMake(nextTopScrollerXPosition, 0, topScrollView.frame.size.width, topScrollView.frame.size.height);
        [topScrollView addSubview:topItem];
        nextTopScrollerXPosition = nextTopScrollerXPosition + topItem.frame.size.width;
        
        
        //bottom scroller add-----
        //set the default width of the page
        int pageWidth = bottomScrollView.frame.size.width;
        //if the datasource implements the widthForPageOnSlidingPagesViewController:atIndex method, use it to override the width of the page
        if ([self.dataSource respondsToSelector:@selector(widthForPageOnSlidingPagesViewController:atIndex:)] ){
            pageWidth = [self.dataSource widthForPageOnSlidingPagesViewController:self atIndex:i];
        }
        
        TTSlidingPage *page = [self.dataSource pageForSlidingPagesViewController:self atIndex:i];//get the page
        if (page == nil || ![page isKindOfClass:[TTSlidingPage class]]){
            [NSException raise:@"TTScrollSlidingPagesController Wrong Page Content Type" format:@"TTScrollSlidingPagesController: Page contents should be instances of TTSlidingPage, one was returned that was either nil, or wasn't a TTSlidingPage. Make sure your pageForSlidingPagesViewController method in the datasource always returns a TTSlidingPage instance for each page requested."];
        }
        UIView *contentView = page.contentView;
        
        //make a container view (putting it inside a container view because if the contentView uses any autolayout it doesn't work well with the .transform property that the zoom animation uses. The container view shields it from this).
        UIView *containerView = [[UIView alloc] init];
        
        //put the container view in the right position, y is always 0, x is incremented with each item you add (it is a horizontal scroller).
        containerView.frame = CGRectMake(nextXPosition, 0, pageWidth, bottomScrollView.frame.size.height);
        nextXPosition = nextXPosition + containerView.frame.size.width;
        
        //put the content view inside the container view
        [containerView addSubview:contentView];
        
        //add the container view to the scroll view
        [bottomScrollView addSubview:containerView];
        
        
        if (page.contentViewController != nil){
            [self addChildViewController:page.contentViewController];
            [page.contentViewController didMoveToParentViewController:self];
        }
        
    }
    
    //now set the content size of the scroller to be as wide as nextXPosition (we can know that nextXPosition is also the width of the scroller)
    topScrollView.contentSize = CGSizeMake(nextTopScrollerXPosition, topScrollView.frame.size.height);
    bottomScrollView.contentSize = CGSizeMake(nextXPosition, bottomScrollView.frame.size.height);
    
    int initialPage = self.initialPageNumber;
    
    if (!self.disableUIPageControl){
        //set the number of dots on the page control, and set the initial selected dot
        pageControl.numberOfPages = numOfPages;
        pageControl.currentPage = initialPage;
    }
    
    //scroll to the initialpage
    [self scrollToPage:initialPage animated:NO];
}


/**
 Gets number of the page currently displayed in the bottom scroller (zero based - so starting at 0 for the first page).
 
 @return Returns the number of the page currently displayed in the bottom scroller (zero based - so starting at 0 for the first page).
 */
-(int)getCurrentDisplayedPage{
    //sum through all the views until you get to a position that matches the offset then that's what page youre on (each view can be a different width)
    int page = 0;
    int currentXPosition = 0;
    while (currentXPosition <= bottomScrollView.contentOffset.x && currentXPosition < bottomScrollView.contentSize.width){
        currentXPosition += [self getWidthOfPage:page];
        
        if (currentXPosition <= bottomScrollView.contentOffset.x){
            page++;
        }
    }
    
    return page;
}

/**
 Gets the x position of the requested page in the bottom scroller. For example, if you ask for page 5, and page 5 starts at the contentOffset 520px in the bottom scroller, this will return 520.
 
 @param page The page number requested.
 @return Returns the x position of the requested page in the bottom scroller
 */
-(int)getXPositionOfPage:(int)page{
    //each view could in theory have a different width
    int currentTotal = 0;
    for (int curPage = 0; curPage < page; curPage++){
        currentTotal += [self getWidthOfPage:curPage];
    }
    
    return currentTotal;
}

/**
 Gets the width of a specific page in the bottom scroll view. Most of the time this will be the width of the scrollview itself, but if you have widthForPageOnSlidingPagesViewController implemented on the datasource it might be different - hence this method.
 
 @param page The page number requested.
 @return Returns the width of the page requested.
 */
-(int)getWidthOfPage:(int)page {
    int pageWidth = bottomScrollView.frame.size.width;
    if ([self.dataSource respondsToSelector:@selector(widthForPageOnSlidingPagesViewController:atIndex:)]){
        pageWidth = [self.dataSource widthForPageOnSlidingPagesViewController:self atIndex:page];
    }
    return pageWidth;
}

/**
 Gets the page based on an X position in the topScrollView. For example, if you pass in 100 and each topScrollView width is 50, then this would return page 2.
 
 @param page The X position in the topScrollView
 @return Returns the page. For example, if you pass in 100 and each topScrollView width is 50, then this would return page 2.
 */
-(int)getTopScrollViewPageForXPosition:(int)xPosition{
    return xPosition / self.titleScrollerItemWidth;
}

/**
 Sets the active and inactive colors of the heading text labels
 
 @param page The X position of the active page index
 */
- (void)updateHeaderTextColour:(int)page {
    NSArray *vs = [topScrollView subviews];
    int title = 0;
    for (UIView *v in vs) {
        if(title == page && [v isKindOfClass:[UILabel class]]){
            ((UILabel *) v).textColor = self.titleScrollerTextColour;
        } else if([v isKindOfClass:[UILabel class]]) {
            ((UILabel *) v).textColor = self.titleScrollerInActiveTextColour;
        }
        
        title++;
    }
}

/**
 Scrolls the bottom scorller (content scroller) to a particular page number.
 
 @param page The page number to scroll to.
 @param animated Whether the scroll should be animated to move along to the page (YES) or just directly scroll to the page (NO)
 */
-(void)scrollToPage:(int)page animated:(BOOL)animated{
    //keep track of the current page (for the rotation if it ever happens)
    currentPageBeforeRotation = page;
    
    //scroll to the page
    [bottomScrollView setContentOffset: CGPointMake([self getXPositionOfPage:page],0) animated:animated];
    
    if (!animated){
        //if the scroll is not animated, we also need to move the topScrollView - we don't want (if it's animated, it'll call the scrollViewDidScroll delegate which keeps everything in sync, so calling it twice would mess things up).
        [topScrollView setContentOffset: CGPointMake(page * topScrollView.frame.size.width, 0) animated:animated];
    }
    
    //update the pagedots pagenumber
    if (!self.disableUIPageControl){
        pageControl.currentPage = page;
    }
    
    [self updateHeaderTextColour:page];
}




/**
 Handler for the gesture recogniser on the top scrollview wrapper. When the topscrollview wrapper is tapped, this works out the tap position and scrolls the view to that page.
 */
- (void)topScrollViewTapped:(id)sender {
    //get the point that was tapped within the context of the topScrollView (not the wrapper)
    CGPoint point = [sender locationInView:topScrollView];
    
    //we need to add on the contentOffset of the topScrollView
    //int position = point.x + topScrollView.contentOffset.x;
    
    //find out what page in the topscroller would be at that x location
    int page = [self getTopScrollViewPageForXPosition:point.x];
    
    //if not already on the page and the page is within the bounds of the pages we have, scroll to the page!
    if ([self getCurrentDisplayedPage] != page && page < [bottomScrollView.subviews count]){
        [self scrollToPage:page animated:YES];
    }
    
}

/**If YES, hides the status bar and shows the page dots.
 *If NO, shows the status bar and hides the page dots.
 But only if the self.hideStatusBarWhenScrolling property is set to YES, and the disableUIPageControl is NO.
 */
-(void)setStatusBarReplacedWithPageDots:(BOOL)statusBarHidden{
    if (self.hideStatusBarWhenScrolling && !self.disableUIPageControl){
        //hide the status bar and show the page dots control
        [[UIApplication sharedApplication] setStatusBarHidden:statusBarHidden withAnimation:UIStatusBarAnimationFade];
        float pageControlAlpha = statusBarHidden ? 1 : 0;
        [UIView animateWithDuration:0.3 animations:^{
            pageControl.alpha = pageControlAlpha;
        }];
    }
}


#pragma mark Some delegate methods for handling rotation.

-(void)didRotate{
    currentPageBeforeRotation = [self getCurrentDisplayedPage];
}


-(void)viewDidLayoutSubviews{
    //this will get called when the screen rotates, at which point we need to fix the frames of all the subviews to be the new correct x position horizontally. The autolayout mask will automatically change the width for us.
    
    if (!self.titleScrollerHidden && !self.disableTitleScrollerShadow){
        //Fix the shadow path now the bounds might have changed.
        CGPathRef shadowPath = [UIBezierPath bezierPathWithRect:topScrollViewWrapper.bounds].CGPath;
        [topScrollViewWrapper.layer setShadowPath:shadowPath];
    }
    
    //reposition the subviews and set the new contentsize width
    CGRect frame;
    int nextXPosition = 0;
    int page = 0;
    for (UIView *view in bottomScrollView.subviews) {
        view.transform = CGAffineTransformIdentity;
        frame = view.frame;
        frame.size.width = [self getWidthOfPage:page];
        frame.size.height = bottomScrollView.frame.size.height;
        frame.origin.x = nextXPosition;
        frame.origin.y = 0;
        page++;
        nextXPosition += frame.size.width;
        view.frame = frame;
    }
    bottomScrollView.contentSize = CGSizeMake(nextXPosition, bottomScrollView.frame.size.height);
    
    //set it back to the same page as it was before (the contentoffset will be different now the widths are different)
    int contentOffsetWidth = [self getXPositionOfPage:currentPageBeforeRotation];
    bottomScrollView.contentOffset = CGPointMake(contentOffsetWidth, 0);
    
}

#pragma mark UIScrollView delegate

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
    [self setStatusBarReplacedWithPageDots:YES];
}


- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (bottomScrollView.subviews.count == 0){
        return; //there are no pages in the bottom scroll view so we couldn't have scrolled. This probably happened during a rotation before the pages had been created (E.g if the app starts in landscape mode)
    }
    
    int currentPage = [self getCurrentDisplayedPage];
    
    if (!self.zoomOutAnimationDisabled){
        //Do a zoom out effect on the current view and next view depending on the amount scrolled
        double minimumZoom = 0.93;
        double zoomSpeed = 1000;//increase this number to slow down the zoom
        UIView *currentView = [bottomScrollView.subviews objectAtIndex:currentPage];
        UIView *nextView;
        if (currentPage < [bottomScrollView.subviews count]-1){
            nextView = [bottomScrollView.subviews objectAtIndex:currentPage+1];
        }
        
        //currentView zooms out as scroll left
        int distanceFromPageOrigin = bottomScrollView.contentOffset.x - [self getXPositionOfPage:currentPage]; //find out how far the scroll is away from the start of the page, and use this to adjust the transform of the currentView
        if (distanceFromPageOrigin < 0) {distanceFromPageOrigin = 0;}
        double scaleAmount = 1-(distanceFromPageOrigin/zoomSpeed);
        if (scaleAmount < minimumZoom ){scaleAmount = minimumZoom;}
        currentView.transform = CGAffineTransformScale(CGAffineTransformIdentity, scaleAmount, scaleAmount);
        
        //nextView zooms in as scroll left
        if (nextView != nil){
            //find out how far the scroll is away from the start of the next page, and use this to adjust the transform of the nextView
            distanceFromPageOrigin = (bottomScrollView.contentOffset.x - [self getXPositionOfPage:currentPage+1]) * -1;//multiply by minus 1 to get the distance to the next page (because otherwise the result would be -300 for example, as in 300 away from the next page)
            if (distanceFromPageOrigin < 0) {distanceFromPageOrigin = 0;}
            scaleAmount = 1-(distanceFromPageOrigin/zoomSpeed);
            if (scaleAmount < minimumZoom ){scaleAmount = minimumZoom;}
            nextView.transform = CGAffineTransformScale(CGAffineTransformIdentity, scaleAmount, scaleAmount);
        }
    }
    
    
    if (scrollView == topScrollView){
        //translate the top scroll to the bottom scroll
        
        //get the page number of the scroll item (e.g third header = 3rd page).
        int pageNumber =  [self getTopScrollViewPageForXPosition:topScrollView.contentOffset.x];
        
        //get the width of the bottom scroller item at that page
        int bottomPageWidth = [self getWidthOfPage:pageNumber];
        
        //work out the start of that page number in the bottom scroller (e.g if the 3rd bottom scroller page starts at 520px, then it's 520)
        int bottomPageStart = [self getXPositionOfPage:pageNumber];
        
        //work out the percent through the header you have scrolled in the top scroller
        int startOfTopPage = pageNumber * self.titleScrollerItemWidth;
        float percentOfTop = (topScrollView.contentOffset.x - startOfTopPage) / self.titleScrollerItemWidth;
        
        //translate that to the percent through the bottom scroller page to scroll, by doing the (percent through the top header * the bottom width) + the bottomPageStart.
        int bottomScrollOffset = (percentOfTop * bottomPageWidth) + bottomPageStart;
        
        bottomScrollView.delegate = nil;
        bottomScrollView.contentOffset = CGPointMake(bottomScrollOffset, 0);
        bottomScrollView.delegate = self;
    }
    else if (scrollView == bottomScrollView){
        //translate the bottom scroll to the top scroll. The bottom scroll items can in theory be different widths so it's a bit more complicated.
        
        //get the x position of the page in the top scroller
        int topXPosition = self.titleScrollerItemWidth * currentPage;
        
        //work out the percentage past this page the view currently is, by getting the xPosition of the next page and seeing how close it is
        float currentPageStartXPosition = [self getXPositionOfPage:currentPage]; //subtract the current page's start x position from both the current offset and next page's start position, to mean that we're on a base level. So for example if we're on page 1 so that the currentPageStartXPosition is 320, and the current offset is 330, the next page xPosition is 640, then 330-320 - 10, and 640-320 - 320. So we're 10 pixels into 320, so roughly 3%.
        float nextPagesXPosition = [self getXPositionOfPage:currentPage+1];
        float percentageTowardsNextPage = (scrollView.contentOffset.x-currentPageStartXPosition) / (nextPagesXPosition-currentPageStartXPosition);
        //multiply the percentage towards the next page that you are, by the width of each topScroller item, and add it to the topXPosition
        
        float addToTopXPosition = percentageTowardsNextPage * self.titleScrollerItemWidth;
        topXPosition = topXPosition + roundf(addToTopXPosition);
        
        topScrollView.delegate = nil;
        topScrollView.contentOffset = CGPointMake(topXPosition, 0);
        topScrollView.delegate = self;
    }
    
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    int currentPage = [self getCurrentDisplayedPage];
    
    [self setStatusBarReplacedWithPageDots:NO];
    
    //store the page you were on so if you have a rotate event, or you come back to this view you know what page to start at. (for example from a navigation controller), the viewDidLayoutSubviews method will know which page to navigate to (for example if the screen was portrait when you left, then you changed to landscape, and navigate back, then viewDidLayoutSubviews will need to change all the sizes of the views, but still know what page to set the offset to)
    currentPageBeforeRotation = [self getCurrentDisplayedPage];
    
    
    //update the pagedots pagenuber
    if (!self.disableUIPageControl){
        //set the correct page on the pagedots
        pageControl.currentPage = currentPage;
    }
    
    [self updateHeaderTextColour:currentPage];
  
    //call the delegate to tell him you've scrolled to another page
    if([self.delegate respondsToSelector:@selector(didScrollToViewAtIndex:)]){
      [self.delegate didScrollToViewAtIndex:currentPage];
    }
  
    /*Just do a quick check, that if the paging enabled property is YES (paging is enabled), the user should not define widthForPageOnSlidingPagesViewController on the datasource delegate because scrollviews do not cope well with paging being enabled for scrollviews where each subview is not full width! */
    if (self.pagingEnabled == YES && [self.dataSource respondsToSelector:@selector(widthForPageOnSlidingPagesViewController:atIndex:)]){
        NSLog(@"Warning: TTScrollSlidingPagesController. You have paging enabled in the TTScrollSlidingPagesController (pagingEnabled is either not set, or specifically set to YES), but you have also implemented widthForPageOnSlidingPagesViewController:atIndex:. ScrollViews do not cope well with paging being disabled when items have custom widths. You may get weird behaviour with your paging, in which case you should either disable paging (set pagingEnabled to NO) and keep widthForPageOnSlidingPagesViewController:atIndex: implented, or not implement widthForPageOnSlidingPagesViewController:atIndex: in your datasource for the TTScrollSlidingPagesController instance.");
    }
}

#pragma mark UIPageControl page changed listener we set up on it
-(void)pageControlChangedPage:(id)sender
{
    //if not already on the page and the page is within the bounds of the pages we have, scroll to the page!

    NSInteger page = pageControl.currentPage;

    if ([self getCurrentDisplayedPage] != page && page < [bottomScrollView.subviews count]){
        [self scrollToPage:page animated:YES];
    }
}

#pragma mark property setters - for when need to do fancy things as well as set the value

-(void)setDataSource:(id<TTSlidingPagesDataSource>)dataSource{
    _dataSource = dataSource;
//    if (self.isViewLoaded){
//        [self reloadPages];
//    }
}

-(void)setPagingEnabled:(BOOL)pagingEnabled{
    _pagingEnabled = pagingEnabled;
    if (bottomScrollView != nil){
        bottomScrollView.pagingEnabled = pagingEnabled;
    }
}

#pragma mark Setters for properties to warn someone if they attempt to set a property after viewDidLoad has already been called (they won't work if so!)
-(void)raiseErrorIfViewDidLoadHasBeenCalled{
    if (viewDidLoadHasBeenCalled)
    {
        [NSException raise:@"TTSlidingPagesController set custom property too late" format:@"The app attempted to set one of the custom properties on TTSlidingPagesController (such as TitleScrollerHeight, TitleScrollerItemWidth etc.) after viewDidLoad has already been loaded. This won't work, you need to set the properties before viewDidLoad has been called - so before you access the .view property or set the dataSource. It is best to set the custom properties immediately after calling init on TTSlidingPagesController"];
    }
}
-(void)setTitleScrollerHidden:(bool)titleScrollerHidden{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerHidden = titleScrollerHidden;
}
-(void)setTitleScrollerHeight:(int)titleScrollerHeight{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerHeight = titleScrollerHeight;
}
-(void)setTitleScrollerItemWidth:(int)titleScrollerItemWidth{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerItemWidth = titleScrollerItemWidth;
}
-(void)setTitleScrollerBackgroundColour:(UIColor *)titleScrollerBackgroundColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerBackgroundColour = titleScrollerBackgroundColour;
}
-(void)setTriangleBackgroundColour:(UIColor *)triangleBackgroundColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _triangleBackgroundColour = triangleBackgroundColour;
}
-(void)setTitleScrollerTextColour:(UIColor *)titleScrollerTextColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerTextColour = titleScrollerTextColour;
}

-(void)setTitleScrollerInActiveTextColour:(UIColor *)titleScrollerNonActiveTextColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerInActiveTextColour = titleScrollerNonActiveTextColour;
}
-(void)setTitleScrollerTextFont:(UIFont *)titleScrollerTextFont{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerTextFont = titleScrollerTextFont;
}
-(void)setTitleScrollerTextDropShadowColour:(UIColor *)titleScrollerTextDropShadowColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerTextDropShadowColour = titleScrollerTextDropShadowColour;
}
-(void)setTitleScrollerBottomEdgeColour:(UIColor *)titleScrollerBottomEdgeColour{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _titleScrollerBottomEdgeColour = titleScrollerBottomEdgeColour;
}

-(void)setDisableTitleScrollerShadow:(BOOL)disableTitleScrollerShadow{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _disableTitleScrollerShadow = disableTitleScrollerShadow;
}
-(void)setDisableUIPageControl:(BOOL)disableUIPageControl{
    [self raiseErrorIfViewDidLoadHasBeenCalled];
    _disableUIPageControl = disableUIPageControl;
}
-(void)setHideStatusBarWhenScrolling:(bool)hideStatusBarWhenScrolling{
    if (hideStatusBarWhenScrolling){
        //check the info.plist required key has been set and throw an exception if not
        NSNumber *statusBarKey = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"];
        if (statusBarKey == nil || [statusBarKey isEqualToNumber:@1 ]){
            [NSException raise:@"TTScrollSlidingPagesController: Status Bar 'UIViewControllerBasedStatusBarAppearance' key missing from info.plist" format:@"The 'hideStarusBarWhenScrolling' property on the TTScrollSlidingPagesController is set to yes. This makes the page control (the page number dots) and the status bar share the same space at the top of the screen, and hide the status bar as the user changes pages. To do this, however you need to add the 'UIViewControllerBasedStatusBarAppearance' key to the info.plist and set it to a boolean of NO. See the instructions on github or the example project included with the control for help."];
        }
    }
    
    //otherwise, set the value
    _hideStatusBarWhenScrolling = hideStatusBarWhenScrolling;
    
    if (hideStatusBarWhenScrolling){
        //set the status bar style to light because the background it shares with the pagedots is black. You could do both of these in viewDidLoad, but doing it here just ensures that it still gets set if someone changed the property after viewDidLoad was called.
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
        
    }
}

-(void)skip:(id)sender
{
    //[appDelegate lancerConnexion];
}




@end


================================================
FILE: ociney/libs/Slider/TTScrollViewWrapper.h
================================================
//
//  TTScrollViewWrapper.h
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 20/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface TTScrollViewWrapper : UIView{
    UIScrollView *scrollView;
}

- (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll;

@end


================================================
FILE: ociney/libs/Slider/TTScrollViewWrapper.m
================================================
//
//  TTScrollViewWrapper.m
//  UIScrollSlidingPages
//
//  The purpose of this class is purely to be a wrapper that you can put a UIScrollView inside, and it will pass all it's touch events to the UIScrollView. This is so you can turn the ClipToBounds property of the UIScrollView off (so that a paged scroller still shows items to the left and right such as in the topScroller title), but you can still drag anywhere along the ScrollViewWrapper, and the drag gets passed to the scrollView.
//
//  Created by Thomas Thorpe on 20/04/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTScrollViewWrapper.h"

@implementation TTScrollViewWrapper

- (id)initWithFrame:(CGRect)frame andUIScrollView: (UIScrollView *)scroll
{
    self = [super initWithFrame:frame];
    if (self) {
        scrollView = scroll;
    }
    return self;
}

//This method means that when anything hits inside of this view, it will actually pass on the hit to scrollView instead.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if ([self pointInside:point withEvent:event])
    {
		return scrollView;
	}
	return nil;
}


@end


================================================
FILE: ociney/libs/Slider/TTSliddingPageDelegate.h
================================================
//
//  TTSliddingPageDelegate.h
//  UIScrollSlidingPages
//
//  Created by John Doran on 06/12/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//
/*
 Copyright (c) 2013 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */
#import <Foundation/Foundation.h>

@protocol TTSliddingPageDelegate <NSObject>

-(void)didScrollToViewAtIndex:(NSUInteger)index;

@end


================================================
FILE: ociney/libs/Slider/TTSlidingPage.h
================================================
//
//  TTSlidingPage.h
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface TTSlidingPage : NSObject

//if your view has a controller associated with it, you should use this initialiser and pass the view controller. This will make sure it gets retained and messages are passed to it correctly. 
-(id)initWithContentViewController:(UIViewController *)contentViewController;

//if you use this method and just pass in a content view as a UIView, you must keep your own reference to the view controller, otherwise it might get deallocated and things will start going weird. Use this constructor at your own risk. 
-(id)initWithContentView:(UIView *)contentView;


//the view controller for the content area. Preferbale to just setting a view
@property(strong, nonatomic) UIViewController *contentViewController;

//The view to go in the content area. You should only use this if you are keeping your own reference to the view controller. Use at your own risk.
@property(strong, nonatomic) UIView *contentView;

@end


================================================
FILE: ociney/libs/Slider/TTSlidingPage.m
================================================
//
//  TTSlidingPage.m
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTSlidingPage.h"

@implementation TTSlidingPage

-(id)initWithContentViewController:(UIViewController *)contentViewController
{
    self = [super init];
    if(self)
    {
        self.contentViewController = contentViewController;
    }
    return (self);
}


-(id)initWithContentView:(UIView *)contentView
{
    self = [super init];
    if(self)
    {
        self.contentView = contentView;
    }
    return (self);
}

-(void)setContentViewController:(UIViewController *)contentViewController{
    _contentViewController = contentViewController;
    if (contentViewController != nil){
        self.contentView = contentViewController.view;
    }
}

@end


================================================
FILE: ociney/libs/Slider/TTSlidingPageTitle.h
================================================
//
//  TTSlidingPageTitle.h
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 29/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface TTSlidingPageTitle : NSObject

-(id)initWithHeaderText:(NSString*)headerText;
-(id)initWithHeaderImage:(UIImage*)headerImage;

//The title text to go in the nav bar
@property(strong, nonatomic) NSString *headerText;

//An image to use in the nav bar (if you set this, the title text will not be used)
@property(strong, nonatomic) UIImage *headerImage;

@end


================================================
FILE: ociney/libs/Slider/TTSlidingPageTitle.m
================================================
//
//  TTSlidingPageTitle.m
//  UIScrollSlidingPages
//
//  Created by Thomas Thorpe on 29/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTSlidingPageTitle.h"

@implementation TTSlidingPageTitle

-(id)initWithHeaderText:(NSString*)headerText{
    self = [super init];
    if(self)
    {
        self.headerText = headerText;
    }
    return (self);
}

-(id)initWithHeaderImage:(UIImage*)headerImage{
    self = [super init];
    if(self)
    {
        self.headerImage = headerImage;
    }
    return (self);
}

@end


================================================
FILE: ociney/libs/Slider/TTSlidingPagesDataSource.h
================================================
//
//  TTSlidingPagesDataSource.h
//  UIScrollViewSlidingPages
//
//  Created by Thomas Thorpe on 27/03/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import <Foundation/Foundation.h>
@class TTScrollSlidingPagesController;
@class TTSlidingPage;
@class TTSlidingPageTitle;

@protocol TTSlidingPagesDataSource <NSObject>

-(int)numberOfPagesForSlidingPagesViewController:(TTScrollSlidingPagesController *)source;

-(TTSlidingPage *)pageForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index;
-(TTSlidingPageTitle *)titleForSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index;

@optional
/**  @method widthForPageOnSlidingPagesViewController:atIndex
 *   @brief - This should NOT be used when paging is disabled.  - An optional method to specify the width of one of your pages, if you don't want it to be the full width of the control.
 *   This should NOT be used when paging is disabled - An optional method to specify the width of one of your pages, if you don't implement this method each page will just be the width of the TTScrollSlidingPagesController view.**/
-(int)widthForPageOnSlidingPagesViewController:(TTScrollSlidingPagesController*)source atIndex:(int)index;


@end


================================================
FILE: ociney/libs/Slider/TTUIScrollViewSlidingPages.h
================================================
//
//  TTUIScrollViewSlidingPages.h
//  TomThorpe
//
//  Created by Thomas Thorpe on 10/05/2013.
//  Copyright (c) 2013 Thomas Thorpe. All rights reserved.
//

/*
 Copyright (c) 2012 Tom Thorpe. All rights reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
 the Software without restriction, including without limitation the rights to
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
 of the Software, and to permit persons to whom the Software is furnished to do
 so, subject to the following conditions:
 
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */

#import "TTScrollSlidingPagesController.h"
#import "TTSlidingPage.h"
#import "TTSlidingPageTitle.h"

================================================
FILE: ociney/main.m
================================================
//
//  main.m
//  ociney
//
//  Created by Florent Champigny on 21/10/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import <UIKit/UIKit.h>

#import "OCAppDelegate.h"

int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([OCAppDelegate class]));
    }
}


================================================
FILE: ociney/ociney-Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleDisplayName</key>
	<string>${PRODUCT_NAME}</string>
	<key>CFBundleExecutable</key>
	<string>${EXECUTABLE_NAME}</string>
	<key>CFBundleIdentifier</key>
	<string>com.bdc.$(PRODUCT_NAME:rfc1034identifier)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>${PRODUCT_NAME}</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.1</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1.1</string>
	<key>Fabric</key>
	<dict>
		<key>APIKey</key>
		<string>29cbd600bb8183011201895a931db91e93f2d614</string>
		<key>Kits</key>
		<array>
			<dict>
				<key>KitInfo</key>
				<dict/>
				<key>KitName</key>
				<string>Crashlytics</string>
			</dict>
		</array>
	</dict>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>NSLocationAlwaysUsageDescription</key>
	<string>Location is required to find out where you are</string>
	<key>NSLocationWhenInUseUsageDescription</key>
	<string>Location is required to find out where you are</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UIViewControllerBasedStatusBarAppearance</key>
	<false/>
</dict>
</plist>


================================================
FILE: ociney/ociney-Prefix.pch
================================================
//
//  Prefix header
//
//  The contents of this file are implicitly included at the beginning of every source file.
//

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif


================================================
FILE: ociney/res/Base.lproj/Localizable.strings
================================================
"date_naissance"="Date de naissance :";
"lieu_naissance"="Lieu de naissance :";
"activites"="Activités :";

================================================
FILE: ociney/src/Controller/FeedSmall.h
================================================
//
//  FeedSmall.h
//  ociney
//
//  Created by Kevin De Jesus Ferreira on 02/01/2015.
//  Copyright (c) 2015 bdc. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "JSONModel.h"
#import "ModelObject.h"
#import "Movie.h"
#import "TheaterShowtime.h"
#import "Theater.h"
#import "Review.h"
#import "Media.h"
#import "Protocole.h"

@interface FeedSmall : JSONModel

@property (strong, nonatomic) NSString* updated;
@property (assign, nonatomic) int page;
@property (assign, nonatomic) int count;
@property (assign, nonatomic) int totalResults;
@property (strong, nonatomic) NSArray<ModelObject> * results;
@property (strong, nonatomic) NSArray<Movie> * movie;
@property (strong, nonatomic) NSArray<TheaterShowtime> * theaterShowtimes;
@property (strong, nonatomic) NSArray<Theater> * theater;
@property (strong, nonatomic) NSArray<Review> * review;
@property (strong, nonatomic) NSArray<Media> * media;
@property (strong, nonatomic) NSArray<PersonSmall>* person;

@end





================================================
FILE: ociney/src/Controller/FeedSmall.m
================================================
//
//  FeedSmall.m
//  ociney
//
//  Created by Kevin De Jesus Ferreira on 02/01/2015.
//  Copyright (c) 2015 bdc. All rights reserved.
//

#import "FeedSmall.h"

@implementation FeedSmall

+(BOOL)propertyIsOptional:(NSString*)propertyName
{
    return YES;
}

@end


================================================
FILE: ociney/src/Controller/LeftViewController.h
================================================
//
//  LeftViewController.h
//  ociney
//
//  Created by Kevin De Jesus Ferreira on 24/10/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface LeftViewController : UIViewController

@property (strong,nonatomic) UIView * content;
@property (strong,nonatomic) UIView * gradientView;

@property (strong,nonatomic) CAGradientLayer * gradient;


@end


================================================
FILE: ociney/src/Controller/LeftViewController.m
================================================
//
//  LeftViewController.m
//  ociney
//
//  Created by Kevin De Jesus Ferreira on 24/10/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import "LeftViewController.h"
#import "Color+Hex.h"
#import "OCAppDelegate.h"
#import "Constantes.h"

@interface LeftViewController (){
    OCAppDelegate * appDelegate;
    NSInteger tagSelectionner;
    BOOL first;
    UIButton * films;
    UIButton * stars;
    UIButton * salles;
    UIButton * credits;
    UIButton * favoris;

    int buttonY;
}

@end

#define HEIGHT_BUTTON 45.0
#define FONT_SIZE_BUTTON 19
#define FONT_NORMAL THIN
#define FONT_SELECTED BOLD

@implementation LeftViewController



- (void)viewDidLoad {
    
    [super viewDidLoad];
    buttonY = 5;
    
    appDelegate = (OCAppDelegate *)[[UIApplication sharedApplication] delegate];
    
    [self charger];
    first = YES;
}


-(void) viewWillAppear:(BOOL)animated{
    
    //[appDelegate activeFond:YES andColor:[UIColor colorFromHexString:BLACK_70]];
    
    if(first){
        [self remplirVue];
        [self itemSelectionner:films];
    }
    else
        [self updateVue];
}

-(void) charger{
    tagSelectionner = FILMS_MENU;
}


-(void) remplirVue{
    
    first = false;
    
    
    self.content = [[UIView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)];
    
    {
        self.gradientView = [[UIView alloc]initWithFrame:CGRectMake(0.0f, 0.0f, self.content.frame.size.width,self.content.frame.size.height)];
        [self.content addSubview:self.gradientView];
        
        self.gradient = [CAGradientLayer layer];
        self.gradient.colors = @[(id) [[UIColor colorFromHexString:@"#333333ff"] CGColor], (id) [[UIColor colorFromHexString:@"#555555ff"] CGColor]];
        [self.gradientView.layer insertSublayer:self.gradient atIndex:0];
        self.gradient.frame = self.gradientView.bounds;

    }
    
    
    {
        films = [self createButton:@"Films" andImage:@"ic_drawer_films.png" andTag:FILMS_MENU];
    }
    
    {
        salles = [self createButton:@"Salles" andImage:@"ic_drawer_salles.png" andTag:SALLES_MENU];
    }
    
    {
        stars = [self createButton:@"Stars" andImage:@"ic_drawer_stars.png" andTag:STARTS_MENU];
    }
    
    /*
    {
        favoris = [self createButton:@"Favoris" andImage:@"ic_drawer_favoris.png" andTag:FAVORIS_MENU];
    }
     */
    
    {
        credits = [self createButton:@"Crédits" andImage:@"ic_drawer_credits.png" andTag:CREDITS_MENU];
    }
    
    [self.view addSubview:self.content];
    
}


-(UIButton *) createButton:(NSString *)textLabel
                  andImage:(NSString*)imageName
                    andTag:(int)tag
{
    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom];
    
    
    // Permet d'ajouter des actions en fonction des états du bouton
    [button addTarget:self
               action:@selector(changeColor:)
     forControlEvents:UIControlEventTouchDown];
    
    [button addTarget:self
               action:@selector(changeClearColor:)
     forControlEvents:UIControlEventTouchCancel];
    
    [button addTarget:self
               action:@selector(lancerItemMenu:)
     forControlEvents:UIControlEventTouchUpInside];
    
    [button addTarget:self
               action:@selector(changeClearColor:)
     forControlEvents:UIControlEventTouchUpOutside];
    
    [button setTitle:textLabel forState:UIControlStateNormal];
    button.frame = CGRectMake(0,buttonY, self.view.bounds.size.width, HEIGHT_BUTTON);
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    
    // Permet de changer la couleur du texte en fonction du touch
    [button setTitleColor:[UIColor colorFromHexString:WHITE95] forState:UIControlStateNormal];
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
    
    // Permet de mettre du padding à gauche
    [button.titleLabel setFont:[UIFont fontWithName:FONT_NORMAL size:19]];
    [button setTitleColor:[UIColor colorFromHexString:WHITE95] forState:UIControlStateNormal];
    button.titleLabel.center = CGPointMake(button.titleLabel.center.x, button.frame.size.height/2);
    [button setTitleEdgeInsets:UIEdgeInsetsMake(0.0, 60.0, 0.0, 0.0)];
    
    // Permet de changer la couleur de fond
    [button setBackgroundColor:[UIColor clearColor]];
    
    UIImageView *image = [[UIImageView alloc]initWithFrame:CGRectMake(10,0, 30, 30)];
    image.center = CGPointMake(image.center.x, button.frame.size.height/2);
    image.image = [UIImage imageNamed:imageName];
    image.contentMode = UIViewContentModeScaleAspectFit;
    [button addSubview:image];
    button.tag = tag;
    
    buttonY += (HEIGHT_BUTTON+3);
    
    [self.content addSubview:button];
    
    return  button;
    
}

-(void)updateVue{
    [self resetAllItems];
    [self itemSelectionner:[self sendByTag:tagSelectionner]];
}


-(UIButton *)sendByTag:(NSInteger)tag{
    
    switch (tag) {
        case FILMS_MENU:
            return films;
        case STARTS_MENU:
            return stars;
        case SALLES_MENU:
            return salles;
        case CREDITS_MENU:
            return credits;
        case FAVORIS_MENU:
            return favoris;
    }
    
    return nil;
}



- (IBAction)changeClearColor:(UIButton *)sender
{
    tagSelectionner = (NSInteger)[sender tag];
    
    [sender setBackgroundColor:[UIColor clearColor]];
}

- (IBAction)changeColor:(UIButton *)sender{
    
    //[sender setBackgroundColor:[UIColor colorFromHexString:GRAY_CELL]];
}


-(IBAction)lancerItemMenu:(UIButton *)sender{
    [self changeClearColor:sender];
    
        [self resetAllItems];
        [self itemSelectionner:sender];
        
        [appDelegate toggleLeftDrawer];
        [appDelegate changeTopViewController:[sender tag]];
    
}


-(void) resetAllItems
{
    UIFont *font = [UIFont fontWithName:FONT_NORMAL size:FONT_SIZE_BUTTON];
    UIColor *color = [UIColor colorFromHexString:WHITE95];
    
    
    [films.titleLabel setFont:font];
    [films setTitleColor:color forState:UIControlStateNormal];
    
    [stars.titleLabel setFont:font];
    [stars setTitleColor:color forState:UIControlStateNormal];
    
    
    [salles.titleLabel setFont:font];
    [salles setTitleColor:color forState:UIControlStateNormal];
    
    [favoris.titleLabel setFont:font];
    [favoris setTitleColor:color forState:UIControlStateNormal];
    
    [credits.titleLabel setFont:font];
    [credits setTitleColor:color forState:UIControlStateNormal];
}


-(void) itemSelectionner:(UIButton *)sender{
    
    /*
    switch (sender.tag) {
        case FILMS_MENU:
        {
            [sender.titleLabel setFont:[UIFont fontWithName:FONT_SELECTED size:FONT_SIZE_BUTTON]];
        }
            break;
            
        case STARTS_MENU:
        {
        }
            break;
    }
    [sender setTitleColor:[UIColor colorFromHexString:WHITE95] forState:UIControlStateNormal];
     
     */
    
    [sender.titleLabel setFont:[UIFont fontWithName:FONT_SELECTED size:FONT_SIZE_BUTTON]];

}

@end


================================================
FILE: ociney/src/Controller/ListSallesController.h
================================================
//
//  ListSallesController.h
//  ociney
//
//  Created by Kevin De Jesus Ferreira on 29/11/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "OCListViewController.h"
#import "OCLoadTheatersTask.h"
#import <CoreLocation/CoreLocation.h>
#import "OCEmptyViewGPS.h"

@interface ListSallesController : OCListViewController<OCLoadTheatersTaskDelegate>

@property (strong, nonatomic) OCLoadTheatersTask *task;
@property (strong,nonatomic)  CLLocationManager *locationManager;

@property (strong,nonatomic) NSArray * salleDepart;

@property (strong,nonatomic) OCEmptyViewGPS * empty_gps;

@end


================================================
FILE: ociney/src/Controller/ListSallesController.m
================================================
//
//  ListSallesController.m
//  ociney
//
//  Created by Kevin De Jesus Ferreira on 29/11/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import "ListSallesController.h"
#import "OCAppDelegate.h"
#import "SalleCell.h"
#import "RechercheTaskTheater.h"
#import "Color+Hex.h"
#import "Constantes.h"
#import "OCTheaterDetailController.h"
#import "AnalyticsKit.h"

#define IDENTIFIER_SALLE @"salles"

#import <QuartzCore/QuartzCore.h>


@interface ListSallesController ()<CLLocationManagerDelegate,CancelSearchDelegate,RechercheTaskTheaterDelegate>

@end

@implementation ListSallesController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [AnalyticsKit logScreen:@"ListSalles"];
    
    self.titleView = @"Salles";
    self.appDelegate.placeholderSearch = @"Rechercher une salle";
    self.appDelegate.task = [[RechercheTaskTheater alloc]initWithDelegate:self];
    self.appDelegate.task.cancelDelegate = self;

    self.empty_gps = [[OCEmptyViewGPS alloc]initWithFrame:CGRectZero];
    self.empty_gps.hidden = YES;
    
    [self.view addSubview:self.empty_gps];
    
    if ([CLLocationManager locationServicesEnabled]) {
        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.distanceFilter = kCLDistanceFilterNone;
        self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
        self.locationManager.delegate = self;
        
        if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            //[self.locationManager requestWhenInUseAuthorization];
            [self.locationManager requestAlwaysAuthorization];
        }
        
        [self.locationManager startUpdatingLocation];
        
    }else{
        NSLog(@"GPS PAS ACTIVE");
    }
    
    
    
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    
    
    [[self navigationController] setNavigationBarHidden:NO animated:YES];
    
    self.navigationController.navigationBar.opaque = YES;
    self.navigationController.navigationBar.translucent = NO;
    self.navigationItem.hidesBackButton = YES;
    
    self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
    self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
    [self.navigationController.navigationBar
     setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
 
    self.empty_gps.frame = self.view.bounds;
    [self.empty_gps positionner];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_SALLE];
    
    if(cell == nil){
        [tableView registerNib:[UINib nibWithNibName:@"SalleCell" bundle:nil] forCellReuseIdentifier:IDENTIFIER_SALLE];
        cell = [tableView dequeueReusableCellWithIdentifier:IDENTIFIER_SALLE];
        [cell awakeFromNib];
    }
    
    cell.contentView.frame = CGRectMake(cell.contentView.frame.origin.x,
                                        cell.contentView.frame.origin.y,
                                        self.tableView.frame.size.width,
                                        cell.contentView.frame.size.height);
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    return cell;
}


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return SALLE_CELL_HEIGHT;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:
(NSIndexPath *)indexPath{
    
    SalleCell *s = (SalleCell*)cell;
    
    [s chargerAvecSalle:self.array[indexPath.row]];
    
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [super onClick];
    
    OCTheaterDetailController *controller = [[OCTheaterDetailController alloc] init];
    UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
    controller.viewCinema = [[UIImageView alloc]initWithImage:[ListSallesController imageWithView:[cell contentView]]];
    controller.cinema = [self.array objectAtIndex:indexPath.row];
    
    [self.navigationController pushViewController:controller animated:YES];
    
}

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    
    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
    
    UIGraphicsEndImageContext();
    
    return img;
}


-(void) locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *) newLocation
           fromLocation: (CLLocation *) oldLocation{
}

- (void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    [self afficherEmptyView:YES];
    self.empty_gps.hidden = NO;
    [self.locationManager stopUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations{
    
    
    if(locations.count > 0){
        self.locationManager.delegate = nil;
        [self.locationManager stopUpdatingLocation];
        
        self.empty_gps.hidden = YES;
 
        CLLocation* loc = locations[0];
        
        OCAppDelegate* app = (OCAppDelegate*)[UIApplication sharedApplication].delegate;
        app.myLocationGPS =loc;
        
        NSString *lat = [NSString stringWithFormat:@"%f",loc.coordinate.latitude];
        NSString *longitude = [NSString stringWithFormat:@"%f",loc.coordinate.longitude];
        
        if(DEBUG){
            lat = @"48.85568";
            longitude = @"2.339401";
        }
        
        self.task = [[OCLoadTheatersTask alloc]initWithDelegate:self];
        [self.task execute:@[lat,longitude]];
    }
    
}

#pragma mark - OCLoadTheatersTaskDelegate

-(void)onTheatersListRecu:(OCLoadTheatersTask*)task theatherList:(NSArray *)theatherList{
    [self afficherEmptyView:NO];

    [self.array addObjectsFromArray:theatherList];
    
    self.salleDepart = [self.array copy];
    [self.tableView reloadData];
    
}

-(void)onTheatersListResultatVide:(OCLoadTheatersTask*)task{
    if(self.page == 1){
        [self afficherEmptyView:YES];
    }
}


-(void)erreurReseau:(AsyncTask*)task
{
    
}

-(void)afficherChargement:(AsyncTask*)task afficher:(BOOL)afficher
{
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:afficher];

}

#pragma mark - CancelSearchDelegate

-(void)onCancelSearch{
    
    if([self.salleDepart count] != 0){
        [self afficherEmptyView:NO];
    }
    
    self.loadMore = YES;
    self.page = 1;
    self.searchOn = NO;

    [self.array removeAllObjects];
    [self.array addObjectsFromArray:self.salleDepart];
    
    self.task = [[OCLoadTheatersTask alloc]initWithDelegate:self];
    [self.task execute:@[@"47.346699",@"1.294519"]];
    
    
}

#pragma mark - RechercheTaskTheaterDelegate


-(void)onRechercheTheaterRecu:(RechercheTaskTheater*)task theaters:(NSArray *)listCinemas{
    
    [self afficherEmptyView:NO];
    self.empty_gps.hidden = YES;

    if(!self.searchOn){
        self.page = 1;
        self.loadMore = YES;
        [self.array removeAllObjects];
    }
    
    self.searchOn = YES;
    
    [self.array addObjectsFromArray:listCinemas];
    [self.tableView reloadData];
}

-(void)onRechercheTheaterVide:(RechercheTaskTheater*)task{
    if(self.page == 1){
        [self afficherEmptyView:YES];
        self.empty_gps.hidden = NO;

    }
}

@end


================================================
FILE: ociney/src/Controller/MovieDetailController.h
================================================
//
//  MovieDetailController.h
//  ociney
//
//  Created by Kevin De Jesus Ferreira on 01/11/2014.
//  Copyright (c) 2014 bdc. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "GTAppMenuController.h"
#import "Movie.h"
#import "HeaderMovieDetail.h"
#import "MovieDetailContent.h"
#import "LoadMovieFullTask.h"
#import "OCDoubleController.h"
#import "OCLoader.h"
#import "OCMovieViewPager.h"
#import "OCLoadShowTimesTask.h"
#import "MovieDetailTheaterList.h"
#import "OCMovieBandeAnnonceSlider.h"
#import "OCMovieDelegates.h"
#import "OCMovieDetailStarList.h"

@interface MovieDetailController : OCDoubleController<LoadMovieFullTaskDelegate,OCLoadShowTimesDelegate,onPanDelegate,MovideDetailContentDelegate,MovieDetailTheaterListDelegate,OCMovieBandeAnnonceSliderDelegate,OCMovieStarListDelegate>

@property (strong, nonatomic) Movie *movie;
@property (strong,nonatomic) HeaderMovieDetail * headerMovieDetail;
@property (strong,nonatomic) MovieDetailContent * contentMovie;
@property (strong,nonatomic) MovieDetailTheaterList * theaterList;
@property (strong,nonatomic) OCMovieDetailStarList * starList;

@property (strong,nonatomic) OCMovieViewPager *viewPager;
@property (strong,nonatomic) OCMovieBandeAnnonceSlider *viewPagerBa;

@property (strong,nonatomic) CAGradientLayer * gradient100;
@property (strong,nonatomic) U
Download .txt
gitextract_j85k_784/

├── .gitignore
├── Crashlytics.framework/
│   ├── Versions/
│   │   └── A/
│   │       ├── Crashlytics
│   │       ├── Headers/
│   │       │   └── Crashlytics.h
│   │       ├── Modules/
│   │       │   └── module.modulemap
│   │       └── Resources/
│   │           └── Info.plist
│   ├── run
│   └── submit
├── Fabric.framework/
│   ├── Versions/
│   │   └── A/
│   │       ├── Fabric
│   │       ├── Headers/
│   │       │   └── Fabric.h
│   │       ├── Modules/
│   │       │   └── module.modulemap
│   │       └── Resources/
│   │           └── Info.plist
│   └── run
├── Podfile
├── README.md
├── ociney/
│   ├── Base.lproj/
│   │   └── Main.storyboard
│   ├── Images.xcassets/
│   │   ├── AppIcon.appiconset/
│   │   │   └── Contents.json
│   │   └── LaunchImage.launchimage/
│   │       └── Contents.json
│   ├── OCAppDelegate.h
│   ├── OCAppDelegate.m
│   ├── OCSplashViewController.h
│   ├── OCSplashViewController.m
│   ├── en.lproj/
│   │   └── InfoPlist.strings
│   ├── libs/
│   │   ├── GTAppMenuController/
│   │   │   ├── GTAppMenuController.h
│   │   │   └── GTAppMenuController.m
│   │   ├── SliddingController/
│   │   │   ├── TTBlackTriangle.h
│   │   │   ├── TTBlackTriangle.m
│   │   │   ├── TTScrollSlidingPagesController.h
│   │   │   ├── TTScrollSlidingPagesController.m
│   │   │   ├── TTScrollViewWrapper.h
│   │   │   ├── TTScrollViewWrapper.m
│   │   │   ├── TTSliddingPageDelegate.h
│   │   │   ├── TTSlidingPage.h
│   │   │   ├── TTSlidingPage.m
│   │   │   ├── TTSlidingPageTitle.h
│   │   │   ├── TTSlidingPageTitle.m
│   │   │   ├── TTSlidingPagesDataSource.h
│   │   │   └── TTUIScrollViewSlidingPages.h
│   │   └── Slider/
│   │       ├── TTBlackTriangle.h
│   │       ├── TTBlackTriangle.m
│   │       ├── TTScrollSlidingPagesController.h
│   │       ├── TTScrollSlidingPagesController.m
│   │       ├── TTScrollViewWrapper.h
│   │       ├── TTScrollViewWrapper.m
│   │       ├── TTSliddingPageDelegate.h
│   │       ├── TTSlidingPage.h
│   │       ├── TTSlidingPage.m
│   │       ├── TTSlidingPageTitle.h
│   │       ├── TTSlidingPageTitle.m
│   │       ├── TTSlidingPagesDataSource.h
│   │       └── TTUIScrollViewSlidingPages.h
│   ├── main.m
│   ├── ociney-Info.plist
│   ├── ociney-Prefix.pch
│   ├── res/
│   │   └── Base.lproj/
│   │       └── Localizable.strings
│   └── src/
│       ├── Controller/
│       │   ├── FeedSmall.h
│       │   ├── FeedSmall.m
│       │   ├── LeftViewController.h
│       │   ├── LeftViewController.m
│       │   ├── ListSallesController.h
│       │   ├── ListSallesController.m
│       │   ├── MovieDetailController.h
│       │   ├── MovieDetailController.m
│       │   ├── OCCreditsViewController.h
│       │   ├── OCCreditsViewController.m
│       │   ├── OCDoubleController.h
│       │   ├── OCDoubleController.m
│       │   ├── OCListMovieViewController.h
│       │   ├── OCListMovieViewController.m
│       │   ├── OCListViewController.h
│       │   ├── OCListViewController.m
│       │   ├── OCPosterController.h
│       │   ├── OCPosterController.m
│       │   ├── OCRechercheSearchBarController.h
│       │   ├── OCRechercheSearchBarController.m
│       │   ├── OCStarDetailViewController.h
│       │   ├── OCStarDetailViewController.m
│       │   ├── OCStarListController.h
│       │   ├── OCStarListController.m
│       │   ├── OCTheaterDetailController.h
│       │   ├── OCTheaterDetailController.m
│       │   ├── OCTheaterDetailMovieController.h
│       │   ├── OCTheaterDetailMovieController.m
│       │   ├── SlidingImageControllerController.h
│       │   └── SlidingImageControllerController.m
│       ├── Modele/
│       │   ├── AllocineResponse.h
│       │   ├── AllocineResponse.m
│       │   ├── AllocineResponseSmall.h
│       │   ├── AllocineResponseSmall.m
│       │   ├── CastMember.h
│       │   ├── CastMember.m
│       │   ├── CastingShort.h
│       │   ├── CastingShort.m
│       │   ├── DefaultMedia.h
│       │   ├── DefaultMedia.m
│       │   ├── Distributor.h
│       │   ├── Distributor.m
│       │   ├── Feature.h
│       │   ├── Feature.m
│       │   ├── Feed.h
│       │   ├── Feed.m
│       │   ├── Geoloc.h
│       │   ├── Geoloc.m
│       │   ├── HelpfulNegativeReview.h
│       │   ├── HelpfulNegativeReview.m
│       │   ├── HelpfulPositiveReview.h
│       │   ├── HelpfulPositiveReview.m
│       │   ├── Horaires.h
│       │   ├── Horaires.m
│       │   ├── Link.h
│       │   ├── Link.m
│       │   ├── Media.h
│       │   ├── Media.m
│       │   ├── ModelObject.h
│       │   ├── ModelObject.m
│       │   ├── Movie.h
│       │   ├── Movie.m
│       │   ├── MovieShowtime.h
│       │   ├── MovieShowtime.m
│       │   ├── MovieType.h
│       │   ├── MovieType.m
│       │   ├── Name.h
│       │   ├── Name.m
│       │   ├── News.h
│       │   ├── News.m
│       │   ├── NewsSource.h
│       │   ├── NewsSource.m
│       │   ├── OnShow.h
│       │   ├── OnShow.m
│       │   ├── Participation.h
│       │   ├── Participation.m
│       │   ├── Person.h
│       │   ├── Person.m
│       │   ├── PersonFull.h
│       │   ├── PersonFull.m
│       │   ├── PersonSmall.h
│       │   ├── PersonSmall.m
│       │   ├── Picture.h
│       │   ├── Picture.m
│       │   ├── Place.h
│       │   ├── Place.m
│       │   ├── Poster.h
│       │   ├── Poster.m
│       │   ├── Protocole.h
│       │   ├── Publication.h
│       │   ├── Publication.m
│       │   ├── Release.h
│       │   ├── Release.m
│       │   ├── Rendition.h
│       │   ├── Rendition.m
│       │   ├── Review.h
│       │   ├── Review.m
│       │   ├── Scr.h
│       │   ├── Scr.m
│       │   ├── Statistics.h
│       │   ├── Statistics.m
│       │   ├── Subject.h
│       │   ├── Subject.m
│       │   ├── Theater.h
│       │   ├── Theater.m
│       │   ├── TheaterShowtime.h
│       │   ├── TheaterShowtime.m
│       │   ├── Thumbnail.h
│       │   ├── Thumbnail.m
│       │   ├── Trailer.h
│       │   ├── Trailer.m
│       │   ├── Trivium.h
│       │   ├── Trivium.m
│       │   ├── Version.h
│       │   ├── Version.m
│       │   ├── Writer.h
│       │   └── Writer.m
│       ├── Service/
│       │   ├── AllocineService.h
│       │   ├── AllocineService.m
│       │   ├── ServiceSecurity.h
│       │   └── ServiceSecurity.m
│       ├── Task/
│       │   ├── AsyncTask.h
│       │   ├── AsyncTask.m
│       │   ├── LoadBandeAnnonceFilmTask.h
│       │   ├── LoadBandeAnnonceFilmTask.m
│       │   ├── LoadMovieFullTask.h
│       │   ├── LoadMovieFullTask.m
│       │   ├── OCLoadMoviesTask.h
│       │   ├── OCLoadMoviesTask.m
│       │   ├── OCLoadPersonTask.h
│       │   ├── OCLoadPersonTask.m
│       │   ├── OCLoadShowTimesTask.h
│       │   ├── OCLoadShowTimesTask.m
│       │   ├── OCLoadStarsTask.h
│       │   ├── OCLoadStarsTask.m
│       │   ├── OCLoadTheaterMoviesTask.h
│       │   ├── OCLoadTheaterMoviesTask.m
│       │   ├── OCLoadTheatersTask.h
│       │   ├── OCLoadTheatersTask.m
│       │   ├── RechercheTask.h
│       │   ├── RechercheTask.m
│       │   ├── RechercheTaskMovie.h
│       │   ├── RechercheTaskMovie.m
│       │   ├── RechercheTaskStar.h
│       │   ├── RechercheTaskStar.m
│       │   ├── RechercheTaskTheater.h
│       │   └── RechercheTaskTheater.m
│       ├── Utils/
│       │   ├── Color+Hex.h
│       │   ├── Color+Hex.m
│       │   ├── Constantes.h
│       │   ├── DateUtils.h
│       │   ├── DateUtils.m
│       │   ├── UIImage+Blur.h
│       │   └── UIImage+Blur.m
│       └── View/
│           ├── CellTheaterHoraires.h
│           ├── CellTheaterHoraires.m
│           ├── HeaderMovieDetail.h
│           ├── HeaderMovieDetail.m
│           ├── HeaderStarDetail.h
│           ├── HeaderStarDetail.m
│           ├── MovieDetailContent.h
│           ├── MovieDetailContent.m
│           ├── MovieDetailTheaterList.h
│           ├── MovieDetailTheaterList.m
│           ├── OCCastMember.h
│           ├── OCCastMember.m
│           ├── OCEmptyView.h
│           ├── OCEmptyView.m
│           ├── OCEmptyViewGPS.h
│           ├── OCEmptyViewGPS.m
│           ├── OCFilmoElement.h
│           ├── OCFilmoElement.m
│           ├── OCFilmoGridLayout.h
│           ├── OCFilmoGridLayout.m
│           ├── OCHeaderVersionView.h
│           ├── OCHeaderVersionView.m
│           ├── OCLoader.h
│           ├── OCLoader.m
│           ├── OCMovieBandeAnnonceSlider.h
│           ├── OCMovieBandeAnnonceSlider.m
│           ├── OCMovieBandeAnnonceSliderElement.h
│           ├── OCMovieBandeAnnonceSliderElement.m
│           ├── OCMovieDelegates.h
│           ├── OCMovieDetailStarList.h
│           ├── OCMovieDetailStarList.m
│           ├── OCMovieViewPager.h
│           ├── OCMovieViewPager.m
│           ├── OCStarFilmoGrid.h
│           ├── OCStarFilmoGrid.m
│           ├── OCStarPhoto.h
│           ├── OCStarPhoto.m
│           ├── OCStarViewPager.h
│           ├── OCStarViewPager.m
│           ├── PosterView.h
│           ├── PosterView.m
│           ├── StarDetail.h
│           ├── StarDetail.m
│           ├── StarDetailDelegate.h
│           ├── StarDetailPhotos.h
│           ├── StarDetailPhotos.m
│           ├── TheaterDetailMovieBackground.h
│           ├── TheaterDetailMovieBackground.m
│           ├── TheaterDetailMovieForeground.h
│           ├── TheaterDetailMovieForeground.m
│           ├── TheaterDetailMoviePageHoraires.h
│           ├── TheaterDetailMoviePageHoraires.m
│           ├── ViewPager.h
│           ├── ViewPager.m
│           └── cell/
│               ├── OCMovieCell.h
│               ├── OCMovieCell.m
│               ├── OCMovieCell.xib
│               ├── OCStarCell.h
│               ├── OCStarCell.m
│               ├── OCStarCell.xib
│               ├── SalleCell.h
│               ├── SalleCell.m
│               └── SalleCell.xib
├── ociney.xcodeproj/
│   ├── project.pbxproj
│   └── project.xcworkspace/
│       └── contents.xcworkspacedata
├── ociney.xcworkspace/
│   └── contents.xcworkspacedata
└── ocineyTests/
    ├── en.lproj/
    │   └── InfoPlist.strings
    ├── ocineyTests-Info.plist
    └── ocineyTests.m
Download .txt
SYMBOL INDEX (4 symbols across 4 files)

FILE: ociney/libs/SliddingController/TTScrollSlidingPagesController.h
  function interface (line 37) | interface TTScrollSlidingPagesController : UIViewController<UIScrollView...

FILE: ociney/libs/SliddingController/TTScrollViewWrapper.h
  function interface (line 11) | interface TTScrollViewWrapper : UIView{

FILE: ociney/libs/Slider/TTScrollSlidingPagesController.h
  function interface (line 37) | interface TTScrollSlidingPagesController : UIViewController<UIScrollView...

FILE: ociney/libs/Slider/TTScrollViewWrapper.h
  function interface (line 11) | interface TTScrollViewWrapper : UIView{
Condensed preview — 277 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (762K chars).
[
  {
    "path": ".gitignore",
    "chars": 492,
    "preview": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!defau"
  },
  {
    "path": "Crashlytics.framework/Versions/A/Headers/Crashlytics.h",
    "chars": 8033,
    "preview": "//\n//  Crashlytics.h\n//  Crashlytics\n//\n//  Copyright 2013 Crashlytics, Inc. All rights reserved.\n//\n\n#import <Foundatio"
  },
  {
    "path": "Crashlytics.framework/Versions/A/Modules/module.modulemap",
    "chars": 103,
    "preview": "framework module Crashlytics {\n  umbrella header \"Crashlytics.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "Crashlytics.framework/Versions/A/Resources/Info.plist",
    "chars": 923,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Fabric.framework/Versions/A/Headers/Fabric.h",
    "chars": 2023,
    "preview": "//\n//  Fabric.h\n//\n//  Copyright (c) 2014 Twitter. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n/**\n *  F"
  },
  {
    "path": "Fabric.framework/Versions/A/Modules/module.modulemap",
    "chars": 98,
    "preview": "framework module Fabric {\n    umbrella header \"Fabric.h\"\n\n    export *\n    module * { export * }\n}"
  },
  {
    "path": "Fabric.framework/Versions/A/Resources/Info.plist",
    "chars": 902,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Podfile",
    "chars": 482,
    "preview": "# Uncomment this line to define a global platform for your project\nplatform :ios, \"8.1\"\n\ntarget \"ociney\" do\n\npod 'AFNetw"
  },
  {
    "path": "README.md",
    "chars": 2544,
    "preview": "# OCiney\n\nOCiney is a sample app available on iTune :  https://itunes.apple.com/us/app/id955480687\nI was firstly built t"
  },
  {
    "path": "ociney/Base.lproj/Main.storyboard",
    "chars": 1586,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "ociney/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2495,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" "
  },
  {
    "path": "ociney/Images.xcassets/LaunchImage.launchimage/Contents.json",
    "chars": 442,
    "preview": "{\n  \"images\" : [\n    {\n      \"orientation\" : \"portrait\",\n      \"idiom\" : \"iphone\",\n      \"extent\" : \"full-screen\",\n     "
  },
  {
    "path": "ociney/OCAppDelegate.h",
    "chars": 1577,
    "preview": "//\n//  OCAppDelegate.h\n//  ociney\n//\n//  Created by Florent Champigny on 21/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/OCAppDelegate.m",
    "chars": 11629,
    "preview": "//\n//  OCAppDelegate.m\n//  ociney\n//\n//  Created by Florent Champigny on 21/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/OCSplashViewController.h",
    "chars": 336,
    "preview": "//\n//  OCViewController.h\n//  ociney\n//\n//  Created by Florent Champigny on 21/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/OCSplashViewController.m",
    "chars": 4140,
    "preview": "//\n//  OCViewController.m\n//  ociney\n//\n//  Created by Florent Champigny on 21/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/en.lproj/InfoPlist.strings",
    "chars": 45,
    "preview": "/* Localized versions of Info.plist keys */\n\n"
  },
  {
    "path": "ociney/libs/GTAppMenuController/GTAppMenuController.h",
    "chars": 370,
    "preview": "//\n//  GTMainViewController.h\n//  GTAppMenuController\n//\n//  Created by Gianluca Tursi on 24/05/14.\n//  Copyright (c) 20"
  },
  {
    "path": "ociney/libs/GTAppMenuController/GTAppMenuController.m",
    "chars": 4420,
    "preview": "//\n//  GTMainViewController.m\n//  GTAppMenuController\n//\n//  Created by Gianluca Tursi on 24/05/14.\n//  Copyright (c) 20"
  },
  {
    "path": "ociney/libs/SliddingController/TTBlackTriangle.h",
    "chars": 287,
    "preview": "//\n//  TTBlackTriangle.h\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 16/04/2013.\n//  Copyright (c) 2013 "
  },
  {
    "path": "ociney/libs/SliddingController/TTBlackTriangle.m",
    "chars": 1194,
    "preview": "//\n//  TTBlackTriangle.m\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 16/04/2013.\n//  Copyright (c) 2013 "
  },
  {
    "path": "ociney/libs/SliddingController/TTScrollSlidingPagesController.h",
    "chars": 8466,
    "preview": "//\n//  TTSlidingPagesController.h\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyri"
  },
  {
    "path": "ociney/libs/SliddingController/TTScrollSlidingPagesController.m",
    "chars": 38895,
    "preview": "//\n//  TTSlidingPagesController.m\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyri"
  },
  {
    "path": "ociney/libs/SliddingController/TTScrollViewWrapper.h",
    "chars": 344,
    "preview": "//\n//  TTScrollViewWrapper.h\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 20/04/2013.\n//  Copyright (c) 2"
  },
  {
    "path": "ociney/libs/SliddingController/TTScrollViewWrapper.m",
    "chars": 2250,
    "preview": "//\n//  TTScrollViewWrapper.m\n//  UIScrollSlidingPages\n//\n//  The purpose of this class is purely to be a wrapper that yo"
  },
  {
    "path": "ociney/libs/SliddingController/TTSliddingPageDelegate.h",
    "chars": 1400,
    "preview": "//\n//  TTSliddingPageDelegate.h\n//  UIScrollSlidingPages\n//\n//  Created by John Doran on 06/12/2013.\n//  Copyright (c) 2"
  },
  {
    "path": "ociney/libs/SliddingController/TTSlidingPage.h",
    "chars": 2272,
    "preview": "//\n//  TTSlidingPage.h\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/libs/SliddingController/TTSlidingPage.m",
    "chars": 1931,
    "preview": "//\n//  TTSlidingPage.m\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/libs/SliddingController/TTSlidingPageTitle.h",
    "chars": 1694,
    "preview": "//\n//  TTSlidingPageTitle.h\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 29/03/2013.\n//  Copyright (c) 20"
  },
  {
    "path": "ociney/libs/SliddingController/TTSlidingPageTitle.m",
    "chars": 1656,
    "preview": "//\n//  TTSlidingPageTitle.m\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 29/03/2013.\n//  Copyright (c) 20"
  },
  {
    "path": "ociney/libs/SliddingController/TTSlidingPagesDataSource.h",
    "chars": 2373,
    "preview": "//\n//  TTSlidingPagesDataSource.h\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyri"
  },
  {
    "path": "ociney/libs/SliddingController/TTUIScrollViewSlidingPages.h",
    "chars": 1362,
    "preview": "//\n//  TTUIScrollViewSlidingPages.h\n//  TomThorpe\n//\n//  Created by Thomas Thorpe on 10/05/2013.\n//  Copyright (c) 2013 "
  },
  {
    "path": "ociney/libs/Slider/TTBlackTriangle.h",
    "chars": 287,
    "preview": "//\n//  TTBlackTriangle.h\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 16/04/2013.\n//  Copyright (c) 2013 "
  },
  {
    "path": "ociney/libs/Slider/TTBlackTriangle.m",
    "chars": 1194,
    "preview": "//\n//  TTBlackTriangle.m\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 16/04/2013.\n//  Copyright (c) 2013 "
  },
  {
    "path": "ociney/libs/Slider/TTScrollSlidingPagesController.h",
    "chars": 8466,
    "preview": "//\n//  TTSlidingPagesController.h\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyri"
  },
  {
    "path": "ociney/libs/Slider/TTScrollSlidingPagesController.m",
    "chars": 38948,
    "preview": "//\n//  TTSlidingPagesController.m\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyri"
  },
  {
    "path": "ociney/libs/Slider/TTScrollViewWrapper.h",
    "chars": 344,
    "preview": "//\n//  TTScrollViewWrapper.h\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 20/04/2013.\n//  Copyright (c) 2"
  },
  {
    "path": "ociney/libs/Slider/TTScrollViewWrapper.m",
    "chars": 2250,
    "preview": "//\n//  TTScrollViewWrapper.m\n//  UIScrollSlidingPages\n//\n//  The purpose of this class is purely to be a wrapper that yo"
  },
  {
    "path": "ociney/libs/Slider/TTSliddingPageDelegate.h",
    "chars": 1400,
    "preview": "//\n//  TTSliddingPageDelegate.h\n//  UIScrollSlidingPages\n//\n//  Created by John Doran on 06/12/2013.\n//  Copyright (c) 2"
  },
  {
    "path": "ociney/libs/Slider/TTSlidingPage.h",
    "chars": 2272,
    "preview": "//\n//  TTSlidingPage.h\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/libs/Slider/TTSlidingPage.m",
    "chars": 1931,
    "preview": "//\n//  TTSlidingPage.m\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/libs/Slider/TTSlidingPageTitle.h",
    "chars": 1694,
    "preview": "//\n//  TTSlidingPageTitle.h\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 29/03/2013.\n//  Copyright (c) 20"
  },
  {
    "path": "ociney/libs/Slider/TTSlidingPageTitle.m",
    "chars": 1656,
    "preview": "//\n//  TTSlidingPageTitle.m\n//  UIScrollSlidingPages\n//\n//  Created by Thomas Thorpe on 29/03/2013.\n//  Copyright (c) 20"
  },
  {
    "path": "ociney/libs/Slider/TTSlidingPagesDataSource.h",
    "chars": 2373,
    "preview": "//\n//  TTSlidingPagesDataSource.h\n//  UIScrollViewSlidingPages\n//\n//  Created by Thomas Thorpe on 27/03/2013.\n//  Copyri"
  },
  {
    "path": "ociney/libs/Slider/TTUIScrollViewSlidingPages.h",
    "chars": 1362,
    "preview": "//\n//  TTUIScrollViewSlidingPages.h\n//  TomThorpe\n//\n//  Created by Thomas Thorpe on 10/05/2013.\n//  Copyright (c) 2013 "
  },
  {
    "path": "ociney/main.m",
    "chars": 341,
    "preview": "//\n//  main.m\n//  ociney\n//\n//  Created by Florent Champigny on 21/10/2014.\n//  Copyright (c) 2014 bdc. All rights reser"
  },
  {
    "path": "ociney/ociney-Info.plist",
    "chars": 1717,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ociney/ociney-Prefix.pch",
    "chars": 344,
    "preview": "//\n//  Prefix header\n//\n//  The contents of this file are implicitly included at the beginning of every source file.\n//\n"
  },
  {
    "path": "ociney/res/Base.lproj/Localizable.strings",
    "chars": 106,
    "preview": "\"date_naissance\"=\"Date de naissance :\";\n\"lieu_naissance\"=\"Lieu de naissance :\";\n\"activites\"=\"Activités :\";"
  },
  {
    "path": "ociney/src/Controller/FeedSmall.h",
    "chars": 986,
    "preview": "//\n//  FeedSmall.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/01/2015.\n//  Copyright (c) 2015 bdc. All r"
  },
  {
    "path": "ociney/src/Controller/FeedSmall.m",
    "chars": 266,
    "preview": "//\n//  FeedSmall.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/01/2015.\n//  Copyright (c) 2015 bdc. All r"
  },
  {
    "path": "ociney/src/Controller/LeftViewController.h",
    "chars": 388,
    "preview": "//\n//  LeftViewController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 24/10/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Controller/LeftViewController.m",
    "chars": 7066,
    "preview": "//\n//  LeftViewController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 24/10/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Controller/ListSallesController.h",
    "chars": 628,
    "preview": "//\n//  ListSallesController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/11/2014.\n//  Copyright (c) 2014"
  },
  {
    "path": "ociney/src/Controller/ListSallesController.m",
    "chars": 7560,
    "preview": "//\n//  ListSallesController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/11/2014.\n//  Copyright (c) 2014"
  },
  {
    "path": "ociney/src/Controller/MovieDetailController.h",
    "chars": 1548,
    "preview": "//\n//  MovieDetailController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 01/11/2014.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Controller/MovieDetailController.m",
    "chars": 11710,
    "preview": "//\n//  MovieDetailController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 01/11/2014.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Controller/OCCreditsViewController.h",
    "chars": 529,
    "preview": "//\n//  OCCreditsViewController.h\n//  ociney\n//\n//  Created by florent champigny on 02/01/2015.\n//  Copyright (c) 2015 bd"
  },
  {
    "path": "ociney/src/Controller/OCCreditsViewController.m",
    "chars": 4440,
    "preview": "//\n//  OCCreditsViewController.m\n//  ociney\n//\n//  Created by florent champigny on 02/01/2015.\n//  Copyright (c) 2015 bd"
  },
  {
    "path": "ociney/src/Controller/OCDoubleController.h",
    "chars": 898,
    "preview": "//\n//  OCDoubleController.h\n//  ociney\n//\n//  Created by florent champigny on 24/11/2014.\n//  Copyright (c) 2014 bdc. Al"
  },
  {
    "path": "ociney/src/Controller/OCDoubleController.m",
    "chars": 7377,
    "preview": "//\n//  OCDoubleController.m\n//  ociney\n//\n//  Created by florent champigny on 24/11/2014.\n//  Copyright (c) 2014 bdc. Al"
  },
  {
    "path": "ociney/src/Controller/OCListMovieViewController.h",
    "chars": 536,
    "preview": "//\n//  OCMovieControllerViewController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 24/10/2014.\n//  Copyrig"
  },
  {
    "path": "ociney/src/Controller/OCListMovieViewController.m",
    "chars": 5665,
    "preview": "//\n//  OCMovieControllerViewController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 24/10/2014.\n//  Copyrig"
  },
  {
    "path": "ociney/src/Controller/OCListViewController.h",
    "chars": 788,
    "preview": "//\n//  OCListControllerViewController.h\n//  ociney\n//\n//  Created by florent champigny on 25/11/2014.\n//  Copyright (c) "
  },
  {
    "path": "ociney/src/Controller/OCListViewController.m",
    "chars": 2555,
    "preview": "//\n//  OCListControllerViewController.m\n//  ociney\n//\n//  Created by florent champigny on 25/11/2014.\n//  Copyright (c) "
  },
  {
    "path": "ociney/src/Controller/OCPosterController.h",
    "chars": 574,
    "preview": "//\n//  OCPosterController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 05/12/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Controller/OCPosterController.m",
    "chars": 860,
    "preview": "//\n//  OCPosterController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 05/12/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Controller/OCRechercheSearchBarController.h",
    "chars": 433,
    "preview": "//\n//  OCRechercheSearchBarController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 23/12/2014.\n//  Copyrigh"
  },
  {
    "path": "ociney/src/Controller/OCRechercheSearchBarController.m",
    "chars": 920,
    "preview": "//\n//  OCRechercheSearchBarController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 23/12/2014.\n//  Copyrigh"
  },
  {
    "path": "ociney/src/Controller/OCStarDetailViewController.h",
    "chars": 971,
    "preview": "//\n//  OCStarDetailViewController.h\n//  ociney\n//\n//  Created by florent champigny on 21/11/2014.\n//  Copyright (c) 2014"
  },
  {
    "path": "ociney/src/Controller/OCStarDetailViewController.m",
    "chars": 6446,
    "preview": "//\n//  OCStarDetailViewController.m\n//  ociney\n//\n//  Created by florent champigny on 21/11/2014.\n//  Copyright (c) 2014"
  },
  {
    "path": "ociney/src/Controller/OCStarListController.h",
    "chars": 451,
    "preview": "//\n//  OCStarController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc"
  },
  {
    "path": "ociney/src/Controller/OCStarListController.m",
    "chars": 4991,
    "preview": "//\n//  OCStarController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc"
  },
  {
    "path": "ociney/src/Controller/OCTheaterDetailController.h",
    "chars": 695,
    "preview": "//\n//  OCTheaterDetailController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/12/2014.\n//  Copyright (c)"
  },
  {
    "path": "ociney/src/Controller/OCTheaterDetailController.m",
    "chars": 5447,
    "preview": "//\n//  OCTheaterDetailController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/12/2014.\n//  Copyright (c)"
  },
  {
    "path": "ociney/src/Controller/OCTheaterDetailMovieController.h",
    "chars": 723,
    "preview": "//\n//  OCTheaterDetailMovieController.h\n//  ociney\n//\n//  Created by florent champigny on 30/12/2014.\n//  Copyright (c) "
  },
  {
    "path": "ociney/src/Controller/OCTheaterDetailMovieController.m",
    "chars": 3747,
    "preview": "//\n//  OCTheaterDetailMovieController.m\n//  ociney\n//\n//  Created by florent champigny on 30/12/2014.\n//  Copyright (c) "
  },
  {
    "path": "ociney/src/Controller/SlidingImageControllerController.h",
    "chars": 393,
    "preview": "//\n//  SlidingImageControllerController.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 22/12/2014.\n//  Copyri"
  },
  {
    "path": "ociney/src/Controller/SlidingImageControllerController.m",
    "chars": 2513,
    "preview": "//\n//  SlidingImageControllerController.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 22/12/2014.\n//  Copyri"
  },
  {
    "path": "ociney/src/Modele/AllocineResponse.h",
    "chars": 617,
    "preview": "//\n//  AllocineResponse.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc"
  },
  {
    "path": "ociney/src/Modele/AllocineResponse.m",
    "chars": 288,
    "preview": "//\n//  AllocineResponse.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc"
  },
  {
    "path": "ociney/src/Modele/AllocineResponseSmall.h",
    "chars": 534,
    "preview": "//\n//  AllocineResponseSmall.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/01/2015.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Modele/AllocineResponseSmall.m",
    "chars": 303,
    "preview": "//\n//  AllocineResponseSmall.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/01/2015.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Modele/CastMember.h",
    "chars": 506,
    "preview": "//\n//  CastMember.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/CastMember.m",
    "chars": 269,
    "preview": "//\n//  CastMember.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/CastingShort.h",
    "chars": 342,
    "preview": "//\n//  CastingShort.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. Al"
  },
  {
    "path": "ociney/src/Modele/CastingShort.m",
    "chars": 275,
    "preview": "//\n//  CastingShort.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. Al"
  },
  {
    "path": "ociney/src/Modele/DefaultMedia.h",
    "chars": 342,
    "preview": "//\n//  DefaultMedia.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. Al"
  },
  {
    "path": "ociney/src/Modele/DefaultMedia.m",
    "chars": 275,
    "preview": "//\n//  DefaultMedia.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. Al"
  },
  {
    "path": "ociney/src/Modele/Distributor.h",
    "chars": 328,
    "preview": "//\n//  Distributor.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/Distributor.m",
    "chars": 272,
    "preview": "//\n//  Distributor.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/Feature.h",
    "chars": 576,
    "preview": "//\n//  Feature.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Feature.m",
    "chars": 264,
    "preview": "//\n//  Feature.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Feed.h",
    "chars": 972,
    "preview": "//\n//  Feed.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/Feed.m",
    "chars": 252,
    "preview": "//\n//  Feed.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/Geoloc.h",
    "chars": 317,
    "preview": "//\n//  Geoloc.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Geoloc.m",
    "chars": 477,
    "preview": "//\n//  Geoloc.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/HelpfulNegativeReview.h",
    "chars": 512,
    "preview": "//\n//  HelpfulNegativeReview.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Modele/HelpfulNegativeReview.m",
    "chars": 306,
    "preview": "//\n//  HelpfulNegativeReview.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Modele/HelpfulPositiveReview.h",
    "chars": 511,
    "preview": "//\n//  HelpfulPositiveReview.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Modele/HelpfulPositiveReview.m",
    "chars": 302,
    "preview": "//\n//  HelpfulPositiveReview.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 201"
  },
  {
    "path": "ociney/src/Modele/Horaires.h",
    "chars": 584,
    "preview": "//\n//  Horaires.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All ri"
  },
  {
    "path": "ociney/src/Modele/Horaires.m",
    "chars": 1292,
    "preview": "//\n//  Horaires.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All ri"
  },
  {
    "path": "ociney/src/Modele/Link.h",
    "chars": 363,
    "preview": "//\n//  Link.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/Link.m",
    "chars": 252,
    "preview": "//\n//  Link.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/Media.h",
    "chars": 956,
    "preview": "//\n//  Media.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All right"
  },
  {
    "path": "ociney/src/Modele/Media.m",
    "chars": 555,
    "preview": "//\n//  Media.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All right"
  },
  {
    "path": "ociney/src/Modele/ModelObject.h",
    "chars": 497,
    "preview": "//\n//  ModelObject.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/ModelObject.m",
    "chars": 272,
    "preview": "//\n//  ModelObject.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/Movie.h",
    "chars": 3066,
    "preview": "//\n//  Movie.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All right"
  },
  {
    "path": "ociney/src/Modele/Movie.m",
    "chars": 4065,
    "preview": "//\n//  Movie.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All right"
  },
  {
    "path": "ociney/src/Modele/MovieShowtime.h",
    "chars": 697,
    "preview": "//\n//  MovieShowtime.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. A"
  },
  {
    "path": "ociney/src/Modele/MovieShowtime.m",
    "chars": 278,
    "preview": "//\n//  MovieShowtime.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. A"
  },
  {
    "path": "ociney/src/Modele/MovieType.h",
    "chars": 364,
    "preview": "//\n//  MovieType.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All r"
  },
  {
    "path": "ociney/src/Modele/MovieType.m",
    "chars": 266,
    "preview": "//\n//  MovieType.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All r"
  },
  {
    "path": "ociney/src/Modele/Name.h",
    "chars": 346,
    "preview": "//\n//  Name.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/Name.m",
    "chars": 348,
    "preview": "//\n//  Name.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/News.h",
    "chars": 575,
    "preview": "//\n//  News.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/News.m",
    "chars": 251,
    "preview": "//\n//  News.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights"
  },
  {
    "path": "ociney/src/Modele/NewsSource.h",
    "chars": 370,
    "preview": "//\n//  NewsSource.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/NewsSource.m",
    "chars": 269,
    "preview": "//\n//  NewsSource.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/OnShow.h",
    "chars": 294,
    "preview": "//\n//  OnShow.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/OnShow.m",
    "chars": 257,
    "preview": "//\n//  OnShow.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Participation.h",
    "chars": 454,
    "preview": "//\n//  Participation.h\n//  ociney\n//\n//  Created by florent champigny on 23/12/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Participation.m",
    "chars": 272,
    "preview": "//\n//  Participation.m\n//  ociney\n//\n//  Created by florent champigny on 23/12/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Person.h",
    "chars": 1422,
    "preview": "//\n//  Person.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Person.m",
    "chars": 335,
    "preview": "//\n//  Person.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/PersonFull.h",
    "chars": 510,
    "preview": "//\n//  PersonFull.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/PersonFull.m",
    "chars": 1799,
    "preview": "//\n//  PersonFull.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/PersonSmall.h",
    "chars": 1286,
    "preview": "//\n//  PersonSmall.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/PersonSmall.m",
    "chars": 323,
    "preview": "//\n//  PersonSmall.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/Picture.h",
    "chars": 371,
    "preview": "//\n//  Picture.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Picture.m",
    "chars": 260,
    "preview": "//\n//  Picture.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Place.h",
    "chars": 337,
    "preview": "//\n//  Place.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All right"
  },
  {
    "path": "ociney/src/Modele/Place.m",
    "chars": 254,
    "preview": "//\n//  Place.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All right"
  },
  {
    "path": "ociney/src/Modele/Poster.h",
    "chars": 371,
    "preview": "//\n//  Poster.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Poster.m",
    "chars": 257,
    "preview": "//\n//  Poster.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Protocole.h",
    "chars": 673,
    "preview": "//\n//  Whatter.h\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champign"
  },
  {
    "path": "ociney/src/Modele/Publication.h",
    "chars": 293,
    "preview": "//\n//  Publication.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/Publication.m",
    "chars": 272,
    "preview": "//\n//  Publication.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All"
  },
  {
    "path": "ociney/src/Modele/Release.h",
    "chars": 590,
    "preview": "//\n//  Release.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Release.m",
    "chars": 867,
    "preview": "//\n//  Release.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Rendition.h",
    "chars": 720,
    "preview": "//\n//  Rendition.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All r"
  },
  {
    "path": "ociney/src/Modele/Rendition.m",
    "chars": 266,
    "preview": "//\n//  Rendition.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All r"
  },
  {
    "path": "ociney/src/Modele/Review.h",
    "chars": 811,
    "preview": "//\n//  Review.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Review.m",
    "chars": 257,
    "preview": "//\n//  Review.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Scr.h",
    "chars": 369,
    "preview": "//\n//  Scr.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights "
  },
  {
    "path": "ociney/src/Modele/Scr.m",
    "chars": 249,
    "preview": "//\n//  Scr.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rights "
  },
  {
    "path": "ociney/src/Modele/Statistics.h",
    "chars": 1894,
    "preview": "//\n//  Statistics.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/Statistics.m",
    "chars": 269,
    "preview": "//\n//  Statistics.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All "
  },
  {
    "path": "ociney/src/Modele/Subject.h",
    "chars": 299,
    "preview": "//\n//  Subject.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Subject.m",
    "chars": 260,
    "preview": "//\n//  Subject.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Theater.h",
    "chars": 1271,
    "preview": "//\n//  Theater.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Theater.m",
    "chars": 4774,
    "preview": "//\n//  Theater.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/TheaterShowtime.h",
    "chars": 560,
    "preview": "//\n//  TheaterShowtime.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc."
  },
  {
    "path": "ociney/src/Modele/TheaterShowtime.m",
    "chars": 2995,
    "preview": "//\n//  TheaterShowtime.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc."
  },
  {
    "path": "ociney/src/Modele/Thumbnail.h",
    "chars": 283,
    "preview": "//\n//  Thumbnail.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All r"
  },
  {
    "path": "ociney/src/Modele/Thumbnail.m",
    "chars": 266,
    "preview": "//\n//  Thumbnail.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All r"
  },
  {
    "path": "ociney/src/Modele/Trailer.h",
    "chars": 365,
    "preview": "//\n//  Trailer.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Trailer.m",
    "chars": 260,
    "preview": "//\n//  Trailer.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Trivium.h",
    "chars": 446,
    "preview": "//\n//  Trivium.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Trivium.m",
    "chars": 260,
    "preview": "//\n//  Trivium.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Version.h",
    "chars": 406,
    "preview": "//\n//  Version.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Version.m",
    "chars": 260,
    "preview": "//\n//  Version.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All rig"
  },
  {
    "path": "ociney/src/Modele/Writer.h",
    "chars": 372,
    "preview": "//\n//  Writer.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Modele/Writer.m",
    "chars": 261,
    "preview": "//\n//  Writer.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 27/10/2014.\n//  Copyright (c) 2014 bdc. All righ"
  },
  {
    "path": "ociney/src/Service/AllocineService.h",
    "chars": 1828,
    "preview": "//\n//  Service.h\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champign"
  },
  {
    "path": "ociney/src/Service/AllocineService.m",
    "chars": 5265,
    "preview": "//\n//  Service.m\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champign"
  },
  {
    "path": "ociney/src/Service/ServiceSecurity.h",
    "chars": 505,
    "preview": "//\n//  ServiceSecurity.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 25/10/2014.\n//  Copyright (c) 2014 bdc."
  },
  {
    "path": "ociney/src/Service/ServiceSecurity.m",
    "chars": 3758,
    "preview": "//\n//  ServiceSecurity.m\n//  Ociney\n//\n//  Created by Kevin De Jesus Ferreira on 25/10/2014.\n//\n\n#import \"ServiceSecurit"
  },
  {
    "path": "ociney/src/Task/AsyncTask.h",
    "chars": 821,
    "preview": "//\n//  AsyncTask.h\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champi"
  },
  {
    "path": "ociney/src/Task/AsyncTask.m",
    "chars": 1495,
    "preview": "//\n//  AsyncTask.m\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champi"
  },
  {
    "path": "ociney/src/Task/LoadBandeAnnonceFilmTask.h",
    "chars": 616,
    "preview": "//\n//  LoadBandeAnnonceFilmTask.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 31/12/2014.\n//  Copyright (c) "
  },
  {
    "path": "ociney/src/Task/LoadBandeAnnonceFilmTask.m",
    "chars": 1243,
    "preview": "//\n//  LoadBandeAnnonceFilmTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 31/12/2014.\n//  Copyright (c) "
  },
  {
    "path": "ociney/src/Task/LoadMovieFullTask.h",
    "chars": 585,
    "preview": "//\n//  LoadMovieFullTask.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 05/11/2014.\n//  Copyright (c) 2014 bd"
  },
  {
    "path": "ociney/src/Task/LoadMovieFullTask.m",
    "chars": 1946,
    "preview": "//\n//  LoadMovieFullTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 05/11/2014.\n//  Copyright (c) 2014 bd"
  },
  {
    "path": "ociney/src/Task/OCLoadMoviesTask.h",
    "chars": 572,
    "preview": "//\n//  OCLoadMoviesTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 26/10/2014.\n//  Copyright (c) 2014 bdc"
  },
  {
    "path": "ociney/src/Task/OCLoadMoviesTask.m",
    "chars": 1420,
    "preview": "//\n//  OCLoadMoviesTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 26/10/2014.\n//  Copyright (c) 2014 bdc"
  },
  {
    "path": "ociney/src/Task/OCLoadPersonTask.h",
    "chars": 534,
    "preview": "//\n//  OCLoadPersonTask.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc"
  },
  {
    "path": "ociney/src/Task/OCLoadPersonTask.m",
    "chars": 1112,
    "preview": "//\n//  OCLoadStarsTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc."
  },
  {
    "path": "ociney/src/Task/OCLoadShowTimesTask.h",
    "chars": 482,
    "preview": "#import <Foundation/Foundation.h>\n#import \"AsyncTask.h\"\n#import \"Theater.h\"\n#import \"AllocineResponse.h\"\n\n@class OCLoadS"
  },
  {
    "path": "ociney/src/Task/OCLoadShowTimesTask.m",
    "chars": 7071,
    "preview": "//\n//  OCLoadShowTimesTask.m\n//  ociney\n//\n//  Created by Florent on 31/12/2014.\n//  Copyright (c) 2014 bdc. All rights "
  },
  {
    "path": "ociney/src/Task/OCLoadStarsTask.h",
    "chars": 595,
    "preview": "//\n//  OCLoadStarsTask.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc."
  },
  {
    "path": "ociney/src/Task/OCLoadStarsTask.m",
    "chars": 1318,
    "preview": "//\n//  OCLoadStarsTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/10/2014.\n//  Copyright (c) 2014 bdc."
  },
  {
    "path": "ociney/src/Task/OCLoadTheaterMoviesTask.h",
    "chars": 624,
    "preview": "//\n//  OCLoadTheaterMoviesTask.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 08/12/2014.\n//  Copyright (c) 2"
  },
  {
    "path": "ociney/src/Task/OCLoadTheaterMoviesTask.m",
    "chars": 1646,
    "preview": "//\n//  OCLoadTheaterMoviesTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 08/12/2014.\n//  Copyright (c) 2"
  },
  {
    "path": "ociney/src/Task/OCLoadTheatersTask.h",
    "chars": 600,
    "preview": "//\n//  OCLoadTheatersTask.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/11/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Task/OCLoadTheatersTask.m",
    "chars": 1638,
    "preview": "//\n//  OCLoadTheatersTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 29/11/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Task/RechercheTask.h",
    "chars": 421,
    "preview": "//\n//  RechercheTask.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 21/11/2014.\n//  Copyright (c) 2014 bdc. A"
  },
  {
    "path": "ociney/src/Task/RechercheTask.m",
    "chars": 207,
    "preview": "//\n//  RechercheTask.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 21/11/2014.\n//  Copyright (c) 2014 bdc. A"
  },
  {
    "path": "ociney/src/Task/RechercheTaskMovie.h",
    "chars": 564,
    "preview": "//\n//  RechercheTaskMovie.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 21/11/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Task/RechercheTaskMovie.m",
    "chars": 1469,
    "preview": "//\n//  RechercheTaskMovie.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 21/11/2014.\n//  Copyright (c) 2014 b"
  },
  {
    "path": "ociney/src/Task/RechercheTaskStar.h",
    "chars": 556,
    "preview": "//\n//  RechercheTaskStar.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/01/2015.\n//  Copyright (c) 2015 bd"
  },
  {
    "path": "ociney/src/Task/RechercheTaskStar.m",
    "chars": 1500,
    "preview": "//\n//  RechercheTaskStar.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/01/2015.\n//  Copyright (c) 2015 bd"
  },
  {
    "path": "ociney/src/Task/RechercheTaskTheater.h",
    "chars": 589,
    "preview": "//\n//  RechercheTaskTheater.h\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/12/2014.\n//  Copyright (c) 2014"
  },
  {
    "path": "ociney/src/Task/RechercheTaskTheater.m",
    "chars": 1448,
    "preview": "//\n//  RechercheTaskTheater.m\n//  ociney\n//\n//  Created by Kevin De Jesus Ferreira on 02/12/2014.\n//  Copyright (c) 2014"
  },
  {
    "path": "ociney/src/Utils/Color+Hex.h",
    "chars": 318,
    "preview": "//\n//  ColorUtils.h\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champ"
  },
  {
    "path": "ociney/src/Utils/Color+Hex.m",
    "chars": 1355,
    "preview": "//\n//  ColorUtils.m\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champ"
  },
  {
    "path": "ociney/src/Utils/Constantes.h",
    "chars": 2220,
    "preview": "//  Constantes.h\n//  WhatWhat\n//\n//  Created by Florent Champigny on 14/08/2014.\n//  Copyright (c) 2014 Florent Champign"
  },
  {
    "path": "ociney/src/Utils/DateUtils.h",
    "chars": 295,
    "preview": "//\n//  DateUtils.h\n//  ociney\n//\n//  Created by florent champigny on 22/12/2014.\n//  Copyright (c) 2014 bdc. All rights "
  }
]

// ... and 77 more files (download for full content)

About this extraction

This page contains the full source code of the florent37/OCiney-iOS GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 277 files (696.8 KB), approximately 195.9k tokens, and a symbol index with 4 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!