duminică, 5 februarie 2012

iCarousel monotouch binding code

Objective-c header file:

#ifndef AH_RETAIN
#if __has_feature(objc_arc)
#define AH_RETAIN(x) x
#define AH_RELEASE(x)
#define AH_AUTORELEASE(x) x
#define AH_SUPER_DEALLOC
#else
#define __AH_WEAK
#define AH_WEAK assign
#define AH_RETAIN(x) [x retain]
#define AH_RELEASE(x) [x release]
#define AH_AUTORELEASE(x) [x autorelease]
#define AH_SUPER_DEALLOC [super dealloc]
#endif
#endif

//  Weak reference support

#ifndef AH_WEAK
#if defined __IPHONE_OS_VERSION_MIN_REQUIRED
#if __IPHONE_OS_VERSION_MIN_REQUIRED > __IPHONE_4_3
#define __AH_WEAK __weak
#define AH_WEAK weak
#else
#define __AH_WEAK __unsafe_unretained
#define AH_WEAK unsafe_unretained
#endif
#elif defined __MAC_OS_X_VERSION_MIN_REQUIRED
#if __MAC_OS_X_VERSION_MIN_REQUIRED > __MAC_10_6
#define __AH_WEAK __weak
#define AH_WEAK weak
#else
#define __AH_WEAK __unsafe_unretained
#define AH_WEAK unsafe_unretained
#endif
#endif
#endif

//  ARC Helper ends


#ifdef USING_CHAMELEON
#define ICAROUSEL_IOS
#elif defined __IPHONE_OS_VERSION_MAX_ALLOWED
#define ICAROUSEL_IOS
typedef CGRect NSRect;
typedef CGSize NSSize;
#else
#define ICAROUSEL_MACOS
#endif


#import 
#ifdef ICAROUSEL_IOS
#import 
#else
#import 
typedef NSView UIView;
#endif


typedef enum
{
    iCarouselTypeLinear = 0,
    iCarouselTypeRotary,
    iCarouselTypeInvertedRotary,
    iCarouselTypeCylinder,
    iCarouselTypeInvertedCylinder,
    iCarouselTypeWheel,
    iCarouselTypeInvertedWheel,
    iCarouselTypeCoverFlow,
    iCarouselTypeCoverFlow2,
    iCarouselTypeTimeMachine,
    iCarouselTypeInvertedTimeMachine,
    iCarouselTypeCustom
}
iCarouselType;


typedef enum
{
    iCarouselTranformOptionCount = 0,
    iCarouselTranformOptionArc,
 iCarouselTranformOptionAngle,
    iCarouselTranformOptionRadius,
    iCarouselTranformOptionTilt,
    iCarouselTranformOptionSpacing
}
iCarouselTranformOption;


@protocol iCarouselDataSource, iCarouselDelegate;

@interface iCarousel : UIView

//required for 32-bit Macs
#ifdef __i386__
{
 @private
 
    id __AH_WEAK delegate;
    id __AH_WEAK dataSource;
    iCarouselType type;
    CGFloat perspective;
    NSInteger numberOfItems;
    NSInteger numberOfPlaceholders;
 NSInteger numberOfPlaceholdersToShow;
    NSInteger numberOfVisibleItems;
    UIView *contentView;
    NSDictionary *itemViews;
    NSMutableSet *itemViewPool;
    NSMutableSet *placeholderViewPool;
    NSInteger previousItemIndex;
    CGFloat itemWidth;
    CGFloat scrollOffset;
    CGFloat offsetMultiplier;
    CGFloat startVelocity;
    id __unsafe_unretained timer;
    BOOL decelerating;
    BOOL scrollEnabled;
    CGFloat decelerationRate;
    BOOL bounces;
    CGSize contentOffset;
    CGSize viewpointOffset;
    CGFloat startOffset;
    CGFloat endOffset;
    NSTimeInterval scrollDuration;
    NSTimeInterval startTime;
    BOOL scrolling;
    CGFloat previousTranslation;
 BOOL centerItemWhenSelected;
 BOOL shouldWrap;
 BOOL dragging;
    BOOL didDrag;
    CGFloat scrollSpeed;
    CGFloat bounceDistance;
    NSTimeInterval toggleTime;
    CGFloat toggle;
    BOOL stopAtItemBoundary;
    BOOL scrollToItemBoundary;
    BOOL useDisplayLink;
 BOOL vertical;
    BOOL ignorePerpendicularSwipes;
}
#endif

@property (nonatomic, AH_WEAK) IBOutlet id dataSource;
@property (nonatomic, AH_WEAK) IBOutlet id delegate;
@property (nonatomic, assign) iCarouselType type;
@property (nonatomic, assign) CGFloat perspective;
@property (nonatomic, assign) CGFloat decelerationRate;
@property (nonatomic, assign) CGFloat scrollSpeed;
@property (nonatomic, assign) CGFloat bounceDistance;
@property (nonatomic, assign) BOOL scrollEnabled;
@property (nonatomic, assign) BOOL bounces;
@property (nonatomic, readonly) CGFloat scrollOffset;
@property (nonatomic, readonly) CGFloat offsetMultiplier;
@property (nonatomic, assign) CGSize contentOffset;
@property (nonatomic, assign) CGSize viewpointOffset;
@property (nonatomic, readonly) NSInteger numberOfItems;
@property (nonatomic, readonly) NSInteger numberOfPlaceholders;
@property (nonatomic, readonly) NSInteger currentItemIndex;
@property (nonatomic, strong, readonly) UIView *currentItemView;
@property (nonatomic, strong, readonly) NSArray *indexesForVisibleItems;
@property (nonatomic, readonly) NSInteger numberOfVisibleItems;
@property (nonatomic, strong, readonly) NSArray *visibleItemViews;
@property (nonatomic, readonly) CGFloat itemWidth;
@property (nonatomic, strong, readonly) UIView *contentView;
@property (nonatomic, readonly) CGFloat toggle;
@property (nonatomic, assign) BOOL stopAtItemBoundary;
@property (nonatomic, assign) BOOL scrollToItemBoundary;
@property (nonatomic, assign) BOOL useDisplayLink;
@property (nonatomic, assign, getter = isVertical) BOOL vertical;
@property (nonatomic, assign) BOOL ignorePerpendicularSwipes;

- (void)scrollByNumberOfItems:(NSInteger)itemCount duration:(NSTimeInterval)duration;
- (void)scrollToItemAtIndex:(NSInteger)index duration:(NSTimeInterval)duration;
- (void)scrollToItemAtIndex:(NSInteger)index animated:(BOOL)animated;
- (void)removeItemAtIndex:(NSInteger)index animated:(BOOL)animated;
- (void)insertItemAtIndex:(NSInteger)index animated:(BOOL)animated;
- (void)reloadItemAtIndex:(NSInteger)index animated:(BOOL)animated;
- (UIView *)itemViewAtIndex:(NSInteger)index;
- (NSInteger)indexOfItemView:(UIView *)view;
- (NSInteger)indexOfItemViewOrSubview:(UIView *)view;
- (void)reloadData;

#ifdef ICAROUSEL_IOS

@property (nonatomic, assign) BOOL centerItemWhenSelected;

#endif

@end


@protocol iCarouselDataSource 

- (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel;
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view;

@optional

- (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel;
- (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view;
- (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel;

//deprecated, use carousel:viewForItemAtIndex:reusingView: and carousel:placeholderViewAtIndex:reusingView: instead
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index __deprecated;
- (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index __deprecated;

@end


@protocol iCarouselDelegate 
@optional

- (void)carouselWillBeginScrollingAnimation:(iCarousel *)carousel;
- (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel;
- (void)carouselDidScroll:(iCarousel *)carousel;
- (void)carouselCurrentItemIndexUpdated:(iCarousel *)carousel;
- (void)carouselWillBeginDragging:(iCarousel *)carousel;
- (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate;
- (void)carouselWillBeginDecelerating:(iCarousel *)carousel;
- (void)carouselDidEndDecelerating:(iCarousel *)carousel;
- (CGFloat)carouselItemWidth:(iCarousel *)carousel;
- (CGFloat)carouselOffsetMultiplier:(iCarousel *)carousel;
- (BOOL)carouselShouldWrap:(iCarousel *)carousel;
- (CGFloat)carousel:(iCarousel *)carousel itemAlphaForOffset:(CGFloat)offset;
- (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform;
- (CGFloat)carousel:(iCarousel *)carousel valueForTransformOption:(iCarouselTranformOption)option withDefault:(CGFloat)value;

//deprecated, use transformForItemAtIndex:withOffset:baseTransform: instead
- (CATransform3D)carousel:(iCarousel *)carousel transformForItemView:(UIView *)view withOffset:(CGFloat)offset __deprecated;

#ifdef ICAROUSEL_IOS

- (BOOL)carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index;
- (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index;

#endif

@end

C# ApiDefinition.cs file:
using System;
using System.Drawing;
using MonoTouch.Foundation;
using MonoTouch.ObjCRuntime;
using MonoTouch.UIKit;
using MonoTouch.CoreGraphics;
using System.Collections.Generic;
using MonoTouch.CoreAnimation;

namespace iCarouselSharp
{
 [BaseType (typeof (UIView))]
 interface iCarousel
 {
  
  [Export ("initWithFrame:")]
  IntPtr Constructor (RectangleF frame);
  
  //@property (nonatomic, AH_WEAK) IBOutlet id dataSource;
  [Export ("dataSource")]
        iCarouselDataSource DataSource { get; set; }
  
  //@property (nonatomic, AH_WEAK) IBOutlet id delegate;
  [Wrap ("WeakDelegate")] 
        iCarouselDelegate Delegate { get; set; }
  
  //@property (nonatomic, AH_WEAK) IBOutlet id delegate;
  [Export ("delegate", ArgumentSemantic.Assign), NullAllowed]
        NSObject WeakDelegate { get; set; }
  
  //@property (nonatomic, assign) iCarouselType type;
  [Export ("type")]
  iCarouselType Type{ get; set; }
  
  /*@property (nonatomic, assign) CGFloat perspective;*/
  [Export ("perspective")]
  float Perspective{ get; set; }
  
  /*@property (nonatomic, assign) CGFloat decelerationRate;*/
  [Export ("decelerationRate")]
  float DecelerationRate{ get; set; }
  
  /*@property (nonatomic, assign) CGFloat scrollSpeed;*/
  [Export ("scrollSpeed")]
  float ScrollSpeed{ get; set; }
  
  /*@property (nonatomic, assign) CGFloat bounceDistance;*/
  [Export ("bounceDistance")]
  float BounceDistance{ get; set; }
  
  /*@property (nonatomic, assign) BOOL scrollEnabled;*/
  [Export ("scrollEnabled")]
  bool ScrollEnabled{ get; set; }
  
  /*@property (nonatomic, assign) BOOL bounces;*/
  [Export ("bounces")]
  bool Bounces{ get; set; }
  
  /*@property (nonatomic, readonly) CGFloat scrollOffset;*/
  [Export ("scrollOffset")]
  float ScrollOffset{ get; }
  
  /*@property (nonatomic, readonly) CGFloat offsetMultiplier;*/
  [Export ("offsetMultiplier")]
  float OffsetMultiplier{ get; }
  
  /*@property (nonatomic, assign) CGSize contentOffset;*/
  [Export ("contentOffset")]
  SizeF ContentOffset{ get; }
  
  /*@property (nonatomic, assign) CGSize viewpointOffset;*/
  [Export ("viewpointOffset")]
  SizeF ViewpointOffset{ get; set; }
  
  /*@property (nonatomic, readonly) NSInteger numberOfItems;*/
  [Export ("numberOfItems")]
  int NumberOfItems{ get; }
  
//  @property (nonatomic, readonly) NSInteger numberOfPlaceholders;
  [Export ("numberOfPlaceholders")]
  int NumberOfPlaceholders{ get; }
  
//  @property (nonatomic, readonly) NSInteger currentItemIndex;                 //!
  [Export ("currentItemIndex")]
  int CurrentItemIndex{ get; }
  
//  @property (nonatomic, strong, readonly) UIView *currentItemView;            //!
  [Export ("currentItemView")]
  int CurrentItemView{ get; }
  
//  @property (nonatomic, strong, readonly) NSArray *indexesForVisibleItems;    //!
  [Export ("indexesForVisibleItems")]
  NSArray IndexesForVisibleItems{ get; }
  
//  @property (nonatomic, readonly) NSInteger numberOfVisibleItems;
  [Export ("numberOfVisibleItems")]
  int NumberOfVisibleItems{ get; }
  
//  @property (nonatomic, strong, readonly) NSArray *visibleItemViews;          //!
  [Export ("visibleItemViews")]
  UIView[] VisibleItemViews{ get; }
  
//  @property (nonatomic, readonly) CGFloat itemWidth;
  [Export ("itemWidth")]
  float ItemWidth{ get; }
  
//  @property (nonatomic, strong, readonly) UIView *contentView;
  [Export ("contentView")]
  UIView VontentView{ get; }
  
//  @property (nonatomic, readonly) CGFloat toggle;
  [Export ("toggle")]
  float Toggle{ get; }
  
//  @property (nonatomic, assign) BOOL stopAtItemBoundary;
  [Export ("stopAtItemBoundary")]
  bool StopAtItemBoundary{ get; set; }
  
//  @property (nonatomic, assign) BOOL scrollToItemBoundary;
  [Export ("scrollToItemBoundary")]
  bool ScrollToItemBoundary{ get; set; }
  
//  @property (nonatomic, assign) BOOL useDisplayLink;
  [Export ("useDisplayLink")]
  bool UseDisplayLink{ get; set; }
  
//  @property (nonatomic, assign, getter = isVertical) BOOL vertical;
  [Export ("vertical")]
  bool Vertical{ [Bind ("isVertical")]get; set; }
  
//  @property (nonatomic, assign) BOOL ignorePerpendicularSwipes;
  [Export ("ignorePerpendicularSwipes")]
  bool IgnorePerpendicularSwipes{ get; set; }
  
//  @property (nonatomic, assign) BOOL centerItemWhenSelected;
  [Export ("centerItemWhenSelected")]
  bool CenterItemWhenSelected{ get; set; }
  
//  - (void)scrollByNumberOfItems:(NSInteger)itemCount duration:(NSTimeInterval)duration;
  [Export ("scrollByNumberOfItems:itemCount:duration:")]
  void scrollByNumberOfItems( int itemCount, double duration );
  
//  - (void)scrollToItemAtIndex:(NSInteger)index duration:(NSTimeInterval)duration;
  [Export ("scrollToItemAtIndex:index:duration:")]
  void scrollToItemAtIndex( int index, double duration );
  
//  - (void)scrollToItemAtIndex:(NSInteger)index animated:(BOOL)animated;
  [Export ("scrollToItemAtIndex:index:animated:")]
  void scrollToItemAtIndex( int index, bool animated );
  
//  - (void)removeItemAtIndex:(NSInteger)index animated:(BOOL)animated;
  [Export ("removeItemAtIndex:index:animated:")]
  void removeItemAtIndex( int index, bool animated );
  
//  - (void)insertItemAtIndex:(NSInteger)index animated:(BOOL)animated;
  [Export ("insertItemAtIndex:index:animated:")]
  void insertItemAtIndex( int index, bool animated );
  
//  - (void)reloadItemAtIndex:(NSInteger)index animated:(BOOL)animated;
  [Export ("reloadItemAtIndex:index:animated:")]
  void reloadItemAtIndex( int index, bool animated );
  
//  - (UIView *)itemViewAtIndex:(NSInteger)index;
  [Export ("itemViewAtIndex:")]
  UIView itemViewAtIndex( int index );
  
//  - (NSInteger)indexOfItemView:(UIView *)view;
  [Export ("indexOfItemView:")]
  int indexOfItemView( UIView view );
  
//  - (NSInteger)indexOfItemViewOrSubview:(UIView *)view;
  [Export ("indexOfItemViewOrSubview:")]
  int indexOfItemViewOrSubview( UIView view );
  
//  - (void)reloadData;
  [Export ("reloadData")]
  void reloadData();
  
 }
 
 [BaseType (typeof (NSObject))]
    [Model]
 interface iCarouselDataSource
 {
//  - (NSUInteger)numberOfItemsInCarousel:(iCarousel *)carousel;
  [Export ("numberOfItemsInCarousel:")]
  int numberOfItemsInCarousel( iCarousel carousel );
  
//  - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view;
  [Export ("carousel:viewForItemAtIndex:reusingView:")]
  UIView viewForItemAtIndex( iCarousel carousel, int index, UIView view );
  
//  @optional
//  
//  - (NSUInteger)numberOfPlaceholdersInCarousel:(iCarousel *)carousel;
//  - (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index reusingView:(UIView *)view;
  //- (NSUInteger)numberOfVisibleItemsInCarousel:(iCarousel *)carousel;
  [Export ("numberOfVisibleItemsInCarousel:")]
  int numberOfVisibleItemsInCarousel( iCarousel carousel );
//  
//  //deprecated, use carousel:viewForItemAtIndex:reusingView: and carousel:placeholderViewAtIndex:reusingView: instead
//  - (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index __deprecated;
  
//  - (UIView *)carousel:(iCarousel *)carousel placeholderViewAtIndex:(NSUInteger)index __deprecated;
 }
 
 [BaseType (typeof (NSObject))]
    [Model]
 interface iCarouselDelegate
 {
//  - (void)carouselWillBeginScrollingAnimation:(iCarousel *)carousel;
  [Export ("carouselWillBeginScrollingAnimation:")]
  void WillBeginScrollingAnimation( iCarousel carousel );
  
//  - (void)carouselDidEndScrollingAnimation:(iCarousel *)carousel;
  [Export ("carouselDidEndScrollingAnimation:")]
  void DidEndScrollingAnimation( iCarousel carousel );
  
//  - (void)carouselDidScroll:(iCarousel *)carousel;
  [Export ("carouselDidScroll:")]
  void DidScroll( iCarousel carousel );
  
//  - (void)carouselCurrentItemIndexUpdated:(iCarousel *)carousel;
  [Export ("carouselCurrentItemIndexUpdated:")]
  void CurrentItemIndexUpdated( iCarousel carousel );
  
//  - (void)carouselWillBeginDragging:(iCarousel *)carousel;
  [Export ("carouselWillBeginDragging:")]
  void WillBeginDragging( iCarousel carousel );
  
//  - (void)carouselDidEndDragging:(iCarousel *)carousel willDecelerate:(BOOL)decelerate;
  [Export ("carouselDidEndDragging:")]
  void DidEndDragging( iCarousel carousel );
  
//  - (void)carouselWillBeginDecelerating:(iCarousel *)carousel;
  [Export ("carouselWillBeginDecelerating:")]
  void WillBeginDecelerating( iCarousel carousel );
  
//  - (void)carouselDidEndDecelerating:(iCarousel *)carousel;
  [Export ("carouselDidEndDecelerating:")]
  void DidEndDecelerating( iCarousel carousel );
  
//  - (CGFloat)carouselItemWidth:(iCarousel *)carousel;
  [Export ("carouselItemWidth:")]
  float ItemWidth( iCarousel carousel );
  
//  - (CGFloat)carouselOffsetMultiplier:(iCarousel *)carousel;
  [Export ("carouselOffsetMultiplier:")]
  float OffsetMultiplier( iCarousel carousel );
  
//  - (BOOL)carouselShouldWrap:(iCarousel *)carousel;
  [Export ("carouselShouldWrap:")]
  bool ShouldWrap( iCarousel carousel );
  
//  - (CGFloat)carousel:(iCarousel *)carousel itemAlphaForOffset:(CGFloat)offset;
  [Export ("carousel:itemAlphaForOffset:")]
  float itemAlphaForOffset( iCarousel carousel, float offset );
  
//  - (CATransform3D)carousel:(iCarousel *)carousel itemTransformForOffset:(CGFloat)offset baseTransform:(CATransform3D)transform;
  [Export ("carousel:itemTransformForOffset:baseTransform:")]
  CATransform3D carousel( iCarousel carousel, float offset, CATransform3D transform );
  
//  - (CGFloat)carousel:(iCarousel *)carousel valueForTransformOption:(iCarouselTranformOption)option withDefault:(CGFloat)value;
  [Export ("carousel:valueForTransformOption:withDefault:")]
  float valueForTransformOption( iCarousel carousel, iCarouselTranformOption option, float withDefault );
  
//  - (BOOL)carousel:(iCarousel *)carousel shouldSelectItemAtIndex:(NSInteger)index;
  [Export ("carousel:shouldSelectItemAtIndex:")]
  bool shouldSelectItemAtIndex( iCarousel carousel, int index );
  
//  - (void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index;
  [Export ("carousel:didSelectItemAtIndex:")]
  void didSelectItemAtIndex( iCarousel carousel, int index );
  

 }
}