[Libreoffice-commits] core.git: 4 commits - ios/iosremote

Siqi LIU me at siqi.fr
Sat Sep 21 07:20:34 PDT 2013


 dev/null                                                                         |binary
 ios/iosremote/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m       |    2 
 ios/iosremote/PopoverView.h                                                      |  208 -
 ios/iosremote/PopoverView.m                                                      | 1055 --------
 ios/iosremote/PopoverView/PopoverView.h                                          |  208 +
 ios/iosremote/PopoverView/PopoverView.m                                          | 1055 ++++++++
 ios/iosremote/PopoverView/PopoverViewCompatibility.h                             |   29 
 ios/iosremote/PopoverView/PopoverView_Configuration.h                            |  128 +
 ios/iosremote/PopoverViewCompatibility.h                                         |   29 
 ios/iosremote/PopoverView_Configuration.h                                        |  128 -
 ios/iosremote/SWRevealViewController/SWRevealViewController.h                    |  180 +
 ios/iosremote/SWRevealViewController/SWRevealViewController.m                    | 1257 ++++++++++
 ios/iosremote/ServerListViewController~ipad.h                                    |   15 
 ios/iosremote/ServerListViewController~ipad.m                                    |   46 
 ios/iosremote/TestFlightSDK1.2.6/release_notes.md                                |    2 
 ios/iosremote/UIBarButtonItem+Theme.h                                            |   15 
 ios/iosremote/UIBarButtonItem+Theme.m                                            |   47 
 ios/iosremote/UINavigationController+Theme.h                                     |   15 
 ios/iosremote/UINavigationController+Theme.m                                     |   23 
 ios/iosremote/UIView+Shadowing.h                                                 |   16 
 ios/iosremote/UIView+Shadowing.m                                                 |   34 
 ios/iosremote/WalkThroughContainerViewController.h                               |   15 
 ios/iosremote/WalkThroughContainerViewController.m                               |  109 
 ios/iosremote/en.lproj/iPad_autosize.storyboard                                  |   93 
 ios/iosremote/en.lproj/iPad_autosize_old.storyboard                              |   93 
 ios/iosremote/fr.lproj/iPad_autosize.storyboard                                  |   97 
 ios/iosremote/fr.lproj/iPad_autosize_old.storyboard                              |   97 
 ios/iosremote/iosremote.xcodeproj/project.pbxproj                                |  407 +--
 ios/iosremote/iosremote/AboutViewController.h                                    |   15 
 ios/iosremote/iosremote/AboutViewController.m                                    |   48 
 ios/iosremote/iosremote/AppDelegate.h                                            |   21 
 ios/iosremote/iosremote/AppDelegate.m                                            |  107 
 ios/iosremote/iosremote/AppDelegate_ipad.h                                       |   16 
 ios/iosremote/iosremote/AppDelegate_ipad.m                                       |   16 
 ios/iosremote/iosremote/Base64.h                                                 |   16 
 ios/iosremote/iosremote/Base64.m                                                 |   23 
 ios/iosremote/iosremote/BasePresentationViewController.h                         |   58 
 ios/iosremote/iosremote/BasePresentationViewController.m                         |  588 ----
 ios/iosremote/iosremote/Categories/AutoDismissKeyboardNavigationViewController.h |   14 
 ios/iosremote/iosremote/Categories/AutoDismissKeyboardNavigationViewController.m |   43 
 ios/iosremote/iosremote/Categories/NSString+Base64.h                             |   16 
 ios/iosremote/iosremote/Categories/NSString+Base64.m                             |   23 
 ios/iosremote/iosremote/Categories/UIBarButtonItem+Theme.h                       |   15 
 ios/iosremote/iosremote/Categories/UIBarButtonItem+Theme.m                       |   47 
 ios/iosremote/iosremote/Categories/UIImage+Resize.m                              |  186 +
 ios/iosremote/iosremote/Categories/UIImageView+setImageAnimated.h                |   16 
 ios/iosremote/iosremote/Categories/UIImageView+setImageAnimated.m                |   30 
 ios/iosremote/iosremote/Categories/UINavigationController+Theme.h                |   13 
 ios/iosremote/iosremote/Categories/UINavigationController+Theme.m                |   22 
 ios/iosremote/iosremote/Categories/UIView+FadeInFadeOut.h                        |   13 
 ios/iosremote/iosremote/Categories/UIView+FadeInFadeOut.m                        |   33 
 ios/iosremote/iosremote/Categories/UIView+Shadowing.h                            |   16 
 ios/iosremote/iosremote/Categories/UIView+Shadowing.m                            |   34 
 ios/iosremote/iosremote/Categories/UIViewController+LibOStyling.h                |   28 
 ios/iosremote/iosremote/Categories/UIViewController+LibOStyling.m                |   72 
 ios/iosremote/iosremote/Classes/AboutViewController.h                            |   15 
 ios/iosremote/iosremote/Classes/AboutViewController.m                            |   48 
 ios/iosremote/iosremote/Classes/AppDelegate.h                                    |   21 
 ios/iosremote/iosremote/Classes/AppDelegate.m                                    |  107 
 ios/iosremote/iosremote/Classes/AppDelegate~ipad.h                               |   16 
 ios/iosremote/iosremote/Classes/AppDelegate~ipad.m                               |   16 
 ios/iosremote/iosremote/Classes/BasePresentationViewController.h                 |   58 
 ios/iosremote/iosremote/Classes/BasePresentationViewController.m                 |  586 ++++
 ios/iosremote/iosremote/Classes/ControlVariables.h                               |   53 
 ios/iosremote/iosremote/Classes/EditableTableViewCell.h                          |   14 
 ios/iosremote/iosremote/Classes/EditableTableViewCell.m                          |   55 
 ios/iosremote/iosremote/Classes/HorizontalSlideCell.h                            |   16 
 ios/iosremote/iosremote/Classes/HorizontalSlideCell.m                            |   64 
 ios/iosremote/iosremote/Classes/LibONavigationController.h                       |   13 
 ios/iosremote/iosremote/Classes/LibONavigationController.m                       |   44 
 ios/iosremote/iosremote/Classes/MainSplitViewController.h                        |   17 
 ios/iosremote/iosremote/Classes/MainSplitViewController.m                        |   79 
 ios/iosremote/iosremote/Classes/NewServerViewController.h                        |   42 
 ios/iosremote/iosremote/Classes/NewServerViewController.m                        |  253 ++
 ios/iosremote/iosremote/Classes/PinValidationViewController.h                    |   16 
 ios/iosremote/iosremote/Classes/PinValidationViewController.m                    |   77 
 ios/iosremote/iosremote/Classes/SWReavealMainController.h                        |   13 
 ios/iosremote/iosremote/Classes/SWReavealMainController.m                        |   38 
 ios/iosremote/iosremote/Classes/ServerListViewController.h                       |   20 
 ios/iosremote/iosremote/Classes/ServerListViewController.m                       |  536 ++++
 ios/iosremote/iosremote/Classes/SlideShowPreviewViewController.h                 |   30 
 ios/iosremote/iosremote/Classes/SlideShowPreviewViewController.m                 |  107 
 ios/iosremote/iosremote/Classes/SlideShowPreviewViewController~ipad.h            |   21 
 ios/iosremote/iosremote/Classes/SlideShowPreviewViewController~ipad.m            |   86 
 ios/iosremote/iosremote/Classes/SlideShowPreviewViewController~iphone.h          |   14 
 ios/iosremote/iosremote/Classes/SlideShowPreviewViewController~iphone.m          |   58 
 ios/iosremote/iosremote/Classes/SlideShowSwipeInList~ipad.h                      |   13 
 ios/iosremote/iosremote/Classes/SlideShowSwipeInList~ipad.m                      |  155 +
 ios/iosremote/iosremote/Classes/SlideShowSwipeInList~iphone.h                    |   18 
 ios/iosremote/iosremote/Classes/SlideShowSwipeInList~iphone.m                    |  307 ++
 ios/iosremote/iosremote/Classes/SlideShowViewController.h                        |   22 
 ios/iosremote/iosremote/Classes/SlideShowViewController.m                        |   82 
 ios/iosremote/iosremote/Classes/SlideShowViewController~iphone.h                 |   30 
 ios/iosremote/iosremote/Classes/SlideShowViewController~iphone.m                 |  311 ++
 ios/iosremote/iosremote/Classes/StopWatch.h                                      |   47 
 ios/iosremote/iosremote/Classes/StopWatch.m                                      |  175 +
 ios/iosremote/iosremote/Classes/Timer.h                                          |   46 
 ios/iosremote/iosremote/Classes/Timer.m                                          |  230 +
 ios/iosremote/iosremote/Classes/WalkThroughContainerViewController.h             |   15 
 ios/iosremote/iosremote/Classes/WalkThroughContainerViewController.m             |  109 
 ios/iosremote/iosremote/Classes/WalkThroughPageViewController.h                  |   22 
 ios/iosremote/iosremote/Classes/WalkThroughPageViewController.m                  |   87 
 ios/iosremote/iosremote/Classes/slideShow_vc.m                                   |  146 +
 ios/iosremote/iosremote/Communication/Client.h                                   |   10 
 ios/iosremote/iosremote/Communication/Client.m                                   |    2 
 ios/iosremote/iosremote/Communication/CommandInterpreter.m                       |    2 
 ios/iosremote/iosremote/Communication/CommunicationManager.h                     |    1 
 ios/iosremote/iosremote/Communication/CommunicationManager.m                     |    6 
 ios/iosremote/iosremote/Communication/SlideShow.m                                |    4 
 ios/iosremote/iosremote/Communication/pinValidation_vc.h                         |   16 
 ios/iosremote/iosremote/Communication/pinValidation_vc.m                         |   77 
 ios/iosremote/iosremote/ControlVariables.h                                       |   53 
 ios/iosremote/iosremote/EditableTableViewCell.h                                  |   14 
 ios/iosremote/iosremote/EditableTableViewCell.m                                  |   55 
 ios/iosremote/iosremote/HorizontalSlideCell.h                                    |   16 
 ios/iosremote/iosremote/HorizontalSlideCell.m                                    |   64 
 ios/iosremote/iosremote/LibONavigationController.h                               |   13 
 ios/iosremote/iosremote/LibONavigationController.m                               |   44 
 ios/iosremote/iosremote/MainSplitViewController.h                                |   17 
 ios/iosremote/iosremote/MainSplitViewController.m                                |   80 
 ios/iosremote/iosremote/Ressources/WTConnectionHotspot.png                       |binary
 ios/iosremote/iosremote/Ressources/WTPairing.png                                 |binary
 ios/iosremote/iosremote/Ressources/WTPairingScreenshot.png                       |binary
 ios/iosremote/iosremote/Ressources/WTconnecting.png                              |binary
 ios/iosremote/iosremote/Ressources/WTconnection.png                              |binary
 ios/iosremote/iosremote/Ressources/WTcontrol~ipad.png                            |binary
 ios/iosremote/iosremote/Ressources/WTcontrol~iphone.png                          |binary
 ios/iosremote/iosremote/Ressources/add.png                                       |binary
 ios/iosremote/iosremote/Ressources/add at 2x.png                                    |binary
 ios/iosremote/iosremote/Ressources/backButton.png                                |binary
 ios/iosremote/iosremote/Ressources/backButton at 2x.png                             |binary
 ios/iosremote/iosremote/Ressources/buttonBackground.png                          |binary
 ios/iosremote/iosremote/Ressources/buttonBackground at 2x.png                       |binary
 ios/iosremote/iosremote/Ressources/forwardButton.png                             |binary
 ios/iosremote/iosremote/Ressources/forwardButton at 2x.png                          |binary
 ios/iosremote/iosremote/Ressources/gear_transparent_bg.png                       |binary
 ios/iosremote/iosremote/Ressources/gear_transparent_bg at 2x.png                    |binary
 ios/iosremote/iosremote/Ressources/impress.jpeg                                  |binary
 ios/iosremote/iosremote/Ressources/iosremote_ipad_icon.png                       |binary
 ios/iosremote/iosremote/Ressources/iosremote_ipad_icon at 2x.png                    |binary
 ios/iosremote/iosremote/Ressources/iosremote_iphone_icon.png                     |binary
 ios/iosremote/iosremote/Ressources/iosremote_iphone_icon at 2x.png                  |binary
 ios/iosremote/iosremote/Ressources/libreoffice_logo.png                          |binary
 ios/iosremote/iosremote/Ressources/more_icon.png                                 |binary
 ios/iosremote/iosremote/Ressources/more_icon at 2x.png                              |binary
 ios/iosremote/iosremote/Ressources/more_ipad.png                                 |binary
 ios/iosremote/iosremote/Ressources/more_ipad at 2x.png                              |binary
 ios/iosremote/iosremote/Ressources/navBarBackground.png                          |binary
 ios/iosremote/iosremote/Ressources/navBarBackground at 2x.png                       |binary
 ios/iosremote/iosremote/Ressources/navBarButtonNormal at 2x.png                     |binary
 ios/iosremote/iosremote/Ressources/nextButton_normal.png                         |binary
 ios/iosremote/iosremote/Ressources/nextButton_normal at 2x.png                      |binary
 ios/iosremote/iosremote/Ressources/nextButton_pressed.png                        |binary
 ios/iosremote/iosremote/Ressources/nextButton_pressed at 2x.png                     |binary
 ios/iosremote/iosremote/Ressources/pointer.png                                   |binary
 ios/iosremote/iosremote/Ressources/pointer_pushed.png                            |binary
 ios/iosremote/iosremote/Ressources/previousButton_normal.png                     |binary
 ios/iosremote/iosremote/Ressources/previousButton_normal at 2x.png                  |binary
 ios/iosremote/iosremote/Ressources/previousButton_pressed.png                    |binary
 ios/iosremote/iosremote/Ressources/previousButton_pressed at 2x.png                 |binary
 ios/iosremote/iosremote/Ressources/pushed_next_button.png                        |binary
 ios/iosremote/iosremote/Ressources/pushed_previous_button.png                    |binary
 ios/iosremote/iosremote/Ressources/released_next_button.png                      |binary
 ios/iosremote/iosremote/Ressources/released_previous_button.png                  |binary
 ios/iosremote/iosremote/Ressources/slide_finished.png                            |binary
 ios/iosremote/iosremote/Ressources/timer_clear_btn.png                           |binary
 ios/iosremote/iosremote/Ressources/timer_clear_btn at 2x.png                        |binary
 ios/iosremote/iosremote/Ressources/timer_clear_btn_dark.png                      |binary
 ios/iosremote/iosremote/Ressources/timer_pause_btn.png                           |binary
 ios/iosremote/iosremote/Ressources/timer_pause_btn at 2x.png                        |binary
 ios/iosremote/iosremote/Ressources/timer_pause_btn_dark.png                      |binary
 ios/iosremote/iosremote/Ressources/timer_pause_btn_dark at 2x.png                   |binary
 ios/iosremote/iosremote/Ressources/timer_settime_btn.png                         |binary
 ios/iosremote/iosremote/Ressources/timer_settime_btn at 2x.png                      |binary
 ios/iosremote/iosremote/Ressources/timer_settime_btn_dark.png                    |binary
 ios/iosremote/iosremote/Ressources/timer_settime_btn_dark at 2x.png                 |binary
 ios/iosremote/iosremote/Ressources/timer_start_btn.png                           |binary
 ios/iosremote/iosremote/Ressources/timer_start_btn at 2x.png                        |binary
 ios/iosremote/iosremote/Ressources/timer_start_btn_dark.png                      |binary
 ios/iosremote/iosremote/Ressources/timer_start_btn_dark at 2x.png                   |binary
 ios/iosremote/iosremote/SWReavealMainController.h                                |   13 
 ios/iosremote/iosremote/SWReavealMainController.m                                |   38 
 ios/iosremote/iosremote/SWRevealViewController/SWRevealViewController.h          |  180 -
 ios/iosremote/iosremote/SWRevealViewController/SWRevealViewController.m          | 1255 ---------
 ios/iosremote/iosremote/Timer.h                                                  |   46 
 ios/iosremote/iosremote/Timer.m                                                  |  230 -
 ios/iosremote/iosremote/UIImage+Resize.m                                         |  186 -
 ios/iosremote/iosremote/UIImage-categories/UIImage+Alpha.h                       |   11 
 ios/iosremote/iosremote/UIImage-categories/UIImage+Alpha.m                       |  127 -
 ios/iosremote/iosremote/UIImage-categories/UIImage+Resize.h                      |   18 
 ios/iosremote/iosremote/UIImage-categories/UIImage+Resize.m                      |  188 -
 ios/iosremote/iosremote/UIImage-categories/UIImage+RoundedCorner.h               |    9 
 ios/iosremote/iosremote/UIImage-categories/UIImage+RoundedCorner.m               |   58 
 ios/iosremote/iosremote/UIImageView+setImageAnimated.h                           |   16 
 ios/iosremote/iosremote/UIImageView+setImageAnimated.m                           |   30 
 ios/iosremote/iosremote/UIViewController+LibOStyling.h                           |   28 
 ios/iosremote/iosremote/UIViewController+LibOStyling.m                           |   72 
 ios/iosremote/iosremote/UIViewTransitionCategory.h                               |   13 
 ios/iosremote/iosremote/UIViewTransitionCategory.m                               |   33 
 ios/iosremote/iosremote/Views/WalkThroughPageViewController.xib                  |  470 +++
 ios/iosremote/iosremote/Views/WalkThroughPageViewMainImageController.xib         |  401 +++
 ios/iosremote/iosremote/WalkThroughPageViewController.h                          |   22 
 ios/iosremote/iosremote/WalkThroughPageViewController.m                          |   87 
 ios/iosremote/iosremote/WalkThroughPageViewController.xib                        |  472 ---
 ios/iosremote/iosremote/WalkThroughPageViewMainImageController.xib               |  407 ---
 ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h            |   14 
 ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m            |   43 
 ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard                      |  192 -
 ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard                  |  192 -
 ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard                      |  188 -
 ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard                  |  188 -
 ios/iosremote/iosremote/libreoffice_sdremoteViewController.h                     |   19 
 ios/iosremote/iosremote/libreoffice_sdremoteViewController.m                     |   85 
 ios/iosremote/iosremote/newServer_vc.h                                           |   42 
 ios/iosremote/iosremote/newServer_vc.m                                           |  253 --
 ios/iosremote/iosremote/serverList_vc.h                                          |   20 
 ios/iosremote/iosremote/serverList_vc.m                                          |  542 ----
 ios/iosremote/iosremote/server_list_vc_ipad.h                                    |   15 
 ios/iosremote/iosremote/server_list_vc_ipad.m                                    |   46 
 ios/iosremote/iosremote/slideShowPreviewTable_vc.h                               |   30 
 ios/iosremote/iosremote/slideShowPreviewTable_vc.m                               |  107 
 ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h                          |   21 
 ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m                          |   86 
 ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h                        |   14 
 ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m                        |   58 
 ios/iosremote/iosremote/slideShowSwipeInList_ipad.h                              |   13 
 ios/iosremote/iosremote/slideShowSwipeInList_ipad.m                              |  155 -
 ios/iosremote/iosremote/slideShowSwipeInList_iphone.h                            |   18 
 ios/iosremote/iosremote/slideShowSwipeInList_iphone.m                            |  305 --
 ios/iosremote/iosremote/slideShowViewController.h                                |   22 
 ios/iosremote/iosremote/slideShowViewController.m                                |   82 
 ios/iosremote/iosremote/slideShow_vc                                             |  146 -
 ios/iosremote/iosremote/slideShow_vc_iphone.h                                    |   30 
 ios/iosremote/iosremote/slideShow_vc_iphone.m                                    |  310 --
 ios/iosremote/iosremote/stopWatch.h                                              |   38 
 ios/iosremote/iosremote/stopWatch.m                                              |  175 -
 ios/iosremote/iosremote/touchPointer_vc.h                                        |   17 
 ios/iosremote/iosremote/touchPointer_vc.m                                        |   61 
 ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard                 |  188 -
 ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard             |  188 -
 ios/iosremote/zh-Hans.lproj/iPad_autosize.storyboard                             |   97 
 ios/iosremote/zh-Hans.lproj/iPad_autosize_old.storyboard                         |   97 
 242 files changed, 9572 insertions(+), 10689 deletions(-)

New commits:
commit 6d29bafee442ebb2a60da4dfe8f4b5f63eb04b0d
Author: Siqi LIU <me at siqi.fr>
Date:   Sat Sep 21 16:13:07 2013 +0200

    iOS datepicker background issues
    
    Change-Id: I532d3b854ff3b66048b40decd2d9232ab9720151

diff --git a/ios/iosremote/SWRevealViewController/SWRevealViewController.m b/ios/iosremote/SWRevealViewController/SWRevealViewController.m
index feab034..de861f6 100755
--- a/ios/iosremote/SWRevealViewController/SWRevealViewController.m
+++ b/ios/iosremote/SWRevealViewController/SWRevealViewController.m
@@ -404,7 +404,7 @@ const int FrontViewPositionNone = 0xff;
     }
     CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height-216-44, 320, 44);
     CGRect datePickerTargetFrame = CGRectMake(0, self.view.bounds.size.height-216, 320, 216);
-    
+
     UIView *darkView = [[UIView alloc] initWithFrame:self.view.bounds];
     darkView.alpha = 0;
     darkView.backgroundColor = [UIColor blackColor];
@@ -412,9 +412,11 @@ const int FrontViewPositionNone = 0xff;
     UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissDatePicker:)];
     [darkView addGestureRecognizer:tapGesture];
     [self.view addSubview:darkView];
+    darkView.alpha = 0.5;
     
     UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height+44, 320, 216)];
     datePicker.tag = 90;
+    datePicker.backgroundColor = [UIColor whiteColor];
     [datePicker setDatePickerMode:UIDatePickerModeCountDownTimer];
     [datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];
     [self.view addSubview:datePicker];
@@ -430,7 +432,7 @@ const int FrontViewPositionNone = 0xff;
     [UIView beginAnimations:@"MoveIn" context:nil];
     toolBar.frame = toolbarTargetFrame;
     datePicker.frame = datePickerTargetFrame;
-    darkView.alpha = 0.5;
+
     [UIView commitAnimations];
 }
 
diff --git a/ios/iosremote/en.lproj/iPad_autosize.storyboard b/ios/iosremote/en.lproj/iPad_autosize.storyboard
index 963d990..da90368 100644
--- a/ios/iosremote/en.lproj/iPad_autosize.storyboard
+++ b/ios/iosremote/en.lproj/iPad_autosize.storyboard
@@ -623,11 +623,9 @@
     </scenes>
     <resources>
         <image name="Default.png" width="320" height="480"/>
-        <image name="Default.png" width="320" height="480"/>
         <image name="WTPairingScreenshot.png" width="474" height="312"/>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
-        <image name="buttonBackground.png" width="45" height="45"/>
         <image name="more_icon.png" width="30" height="30"/>
         <image name="more_ipad.png" width="60" height="60"/>
         <image name="nextButton_normal.png" width="42" height="230"/>
@@ -635,10 +633,8 @@
         <image name="previousButton_normal.png" width="42" height="230"/>
         <image name="previousButton_pressed.png" width="42" height="230"/>
         <image name="timer_clear_btn_dark.png" width="60" height="60"/>
-        <image name="timer_clear_btn_dark.png" width="60" height="60"/>
         <image name="timer_settime_btn.png" width="60" height="60"/>
         <image name="timer_start_btn_dark.png" width="60" height="60"/>
-        <image name="timer_start_btn_dark.png" width="60" height="60"/>
     </resources>
     <color key="tintColor" red="1" green="0.50196078430000002" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
     <simulatedMetricsContainer key="defaultSimulatedMetrics">
diff --git a/ios/iosremote/en.lproj/iPad_autosize_old.storyboard b/ios/iosremote/en.lproj/iPad_autosize_old.storyboard
index 963d990..da90368 100644
--- a/ios/iosremote/en.lproj/iPad_autosize_old.storyboard
+++ b/ios/iosremote/en.lproj/iPad_autosize_old.storyboard
@@ -623,11 +623,9 @@
     </scenes>
     <resources>
         <image name="Default.png" width="320" height="480"/>
-        <image name="Default.png" width="320" height="480"/>
         <image name="WTPairingScreenshot.png" width="474" height="312"/>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
-        <image name="buttonBackground.png" width="45" height="45"/>
         <image name="more_icon.png" width="30" height="30"/>
         <image name="more_ipad.png" width="60" height="60"/>
         <image name="nextButton_normal.png" width="42" height="230"/>
@@ -635,10 +633,8 @@
         <image name="previousButton_normal.png" width="42" height="230"/>
         <image name="previousButton_pressed.png" width="42" height="230"/>
         <image name="timer_clear_btn_dark.png" width="60" height="60"/>
-        <image name="timer_clear_btn_dark.png" width="60" height="60"/>
         <image name="timer_settime_btn.png" width="60" height="60"/>
         <image name="timer_start_btn_dark.png" width="60" height="60"/>
-        <image name="timer_start_btn_dark.png" width="60" height="60"/>
     </resources>
     <color key="tintColor" red="1" green="0.50196078430000002" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
     <simulatedMetricsContainer key="defaultSimulatedMetrics">
diff --git a/ios/iosremote/iosremote/Classes/BasePresentationViewController.m b/ios/iosremote/iosremote/Classes/BasePresentationViewController.m
index 8f58f53..04f68af 100644
--- a/ios/iosremote/iosremote/Classes/BasePresentationViewController.m
+++ b/ios/iosremote/iosremote/Classes/BasePresentationViewController.m
@@ -565,7 +565,6 @@ static BOOL isBlank = NO;
     popoverView.backgroundColor = [UIColor blackColor];
     
     UIDatePicker *datePicker=[[UIDatePicker alloc]init];//Date picker
-    datePicker.frame=CGRectMake(0,44,320, 216);
     datePicker.datePickerMode = UIDatePickerModeCountDownTimer;
     [datePicker setTag:10];
     [datePicker addTarget:self action:@selector(changeDate:) forControlEvents:UIControlEventValueChanged];
@@ -575,7 +574,12 @@ static BOOL isBlank = NO;
     self.popoverTimePickerController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
     self.popoverTimePickerController.delegate = self;
     
-    [self.popoverTimePickerController setPopoverContentSize:CGSizeMake(320, 264) animated:NO];
+    // iOS7's time picker has default clearcolor background
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
+        datePicker.backgroundColor = [UIColor whiteColor];
+    }
+    datePicker.frame=CGRectMake(0,0,320, 216);
+    [self.popoverTimePickerController setPopoverContentSize:CGSizeMake(320, 216) animated:NO];
     [self.popoverTimePickerController presentPopoverFromRect:self.timerSetTimeButton.frame inView:self.timerView permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
 }
 
diff --git a/ios/iosremote/iosremote/Classes/ServerListViewController.m b/ios/iosremote/iosremote/Classes/ServerListViewController.m
index e9e6583..76b2565 100644
--- a/ios/iosremote/iosremote/Classes/ServerListViewController.m
+++ b/ios/iosremote/iosremote/Classes/ServerListViewController.m
@@ -236,12 +236,6 @@
 - (void)viewDidLoad
 {
     [super viewDidLoad];
-    // Uncomment the following line to preserve selection between presentations.
-    // self.clearsSelectionOnViewWillAppear = NO;
-    
-    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
-    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
-    
     
     self.center = [NSNotificationCenter defaultCenter];
     self.comManager = [CommunicationManager sharedComManager];
diff --git a/ios/iosremote/iosremote/Classes/StopWatch.h b/ios/iosremote/iosremote/Classes/StopWatch.h
index 0c4c5c5..caeacdd 100644
--- a/ios/iosremote/iosremote/Classes/StopWatch.h
+++ b/ios/iosremote/iosremote/Classes/StopWatch.h
@@ -18,6 +18,10 @@
 
 @end
 
+/**
+ This class controls the behavior of stopwatch timing widget.
+ **/
+
 @interface StopWatch : NSObject
 
 // StopWatch
@@ -26,13 +30,18 @@
 @property BOOL set;
 @property (weak, nonatomic) id<StopWatchDelegate> delegate;
 
+// initialzie Stopwatch with relative UIButton/UILabel elements
 - (StopWatch *) initWithStartButton:(UIButton *)startButton
                         ClearButton:(UIButton *)clearButton
                           TimeLabel:(UILabel *)timeLabel;
+// initialzie Stopwatch with a tableviewCell which contains relative UIButton/UILabel elements
 - (void) setupWithTableViewCell:(UITableViewCell *)cell;
 
+// Start/Pause/Resume the stopwatch
 - (void) start;
+// Stop the stopwatch and update seconds left to its original value
 - (void) clear;
+// Keep start button icon up-to-date with respect to its current state
 - (void) updateStartButtonIcon;
 
 @end
diff --git a/ios/iosremote/iosremote/Communication/Client.h b/ios/iosremote/iosremote/Communication/Client.h
index 12a3641..cc01ee5 100644
--- a/ios/iosremote/iosremote/Communication/Client.h
+++ b/ios/iosremote/iosremote/Communication/Client.h
@@ -19,18 +19,20 @@
 @property (nonatomic, strong) NSString* name;
 @property (nonatomic, strong) Server* server;
 
+// Connect to the server stored in [server]
 - (void) connect;
+// Disconnect from server
 - (void) disconnect;
-
 - (id) initWithServer:(Server*)server
             managedBy:(CommunicationManager*)manager
         interpretedBy:(CommandInterpreter*)receiver;
-
+// Send a command (command by transmitter) to the server, base64 encoded
 - (void) sendCommand:(NSString *)aCommand;
-
+// Attempt to connect with a time out.
 - (void)startConnectionTimeoutTimerwithInterval:(double) interval;
+// Stop connection timeout timer
 - (void)stopConnectionTimeoutTimer;
-
+// Delegate method, handle stream events and transfer events to CommandInterpreter
 -(void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode;
 
 @end
\ No newline at end of file
diff --git a/ios/iosremote/iosremote/Communication/CommunicationManager.h b/ios/iosremote/iosremote/Communication/CommunicationManager.h
index 1e24503..20a89d9 100644
--- a/ios/iosremote/iosremote/Communication/CommunicationManager.h
+++ b/ios/iosremote/iosremote/Communication/CommunicationManager.h
@@ -62,6 +62,7 @@ enum ConnectionState : NSInteger {
     CONNECTED
 };
 
+//
 enum SearchState : NSInteger {
     WAITING,
     SEARCHING
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard
index 8531b3a..8e031e8 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="60" height="60"/>
+        <image name="more_icon.png" width="30" height="30"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard
index 8531b3a..8e031e8 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="60" height="60"/>
+        <image name="more_icon.png" width="30" height="30"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard
index df7e1a0..20ab7aa 100644
--- a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard
+++ b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard
@@ -609,7 +609,7 @@ Contrôle Distant</string>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="60" height="60"/>
+        <image name="more_icon.png" width="30" height="30"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard
index df7e1a0..20ab7aa 100644
--- a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard
+++ b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard
@@ -609,7 +609,7 @@ Contrôle Distant</string>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="60" height="60"/>
+        <image name="more_icon.png" width="30" height="30"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard
index c9b496ba..2dd03bb 100644
--- a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard
+++ b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="60" height="60"/>
+        <image name="more_icon.png" width="30" height="30"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard
index c9b496ba..2dd03bb 100644
--- a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard
+++ b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="60" height="60"/>
+        <image name="more_icon.png" width="30" height="30"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
commit b95acb2bdcc6bc7c09a806157361c83142858d97
Author: Siqi LIU <me at siqi.fr>
Date:   Sat Sep 21 13:01:01 2013 +0200

    higher resolution for menu icon
    
    Change-Id: I5d1f1e0cacdabef5a84c6ab506f5b1cc21bb6b67

diff --git a/ios/iosremote/en.lproj/iPad_autosize.storyboard b/ios/iosremote/en.lproj/iPad_autosize.storyboard
index 57700f3..963d990 100644
--- a/ios/iosremote/en.lproj/iPad_autosize.storyboard
+++ b/ios/iosremote/en.lproj/iPad_autosize.storyboard
@@ -107,7 +107,7 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Please enter the pin code above in Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="4" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9zr-53-YfP">
-                                <rect key="frame" x="115" y="442" width="320" height="94.000000000000014"/>
+                                <rect key="frame" x="115" y="442" width="320" height="94"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -623,9 +623,11 @@
     </scenes>
     <resources>
         <image name="Default.png" width="320" height="480"/>
+        <image name="Default.png" width="320" height="480"/>
         <image name="WTPairingScreenshot.png" width="474" height="312"/>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
+        <image name="buttonBackground.png" width="45" height="45"/>
         <image name="more_icon.png" width="30" height="30"/>
         <image name="more_ipad.png" width="60" height="60"/>
         <image name="nextButton_normal.png" width="42" height="230"/>
@@ -633,8 +635,10 @@
         <image name="previousButton_normal.png" width="42" height="230"/>
         <image name="previousButton_pressed.png" width="42" height="230"/>
         <image name="timer_clear_btn_dark.png" width="60" height="60"/>
+        <image name="timer_clear_btn_dark.png" width="60" height="60"/>
         <image name="timer_settime_btn.png" width="60" height="60"/>
         <image name="timer_start_btn_dark.png" width="60" height="60"/>
+        <image name="timer_start_btn_dark.png" width="60" height="60"/>
     </resources>
     <color key="tintColor" red="1" green="0.50196078430000002" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
     <simulatedMetricsContainer key="defaultSimulatedMetrics">
diff --git a/ios/iosremote/en.lproj/iPad_autosize_old.storyboard b/ios/iosremote/en.lproj/iPad_autosize_old.storyboard
index 57700f3..963d990 100644
--- a/ios/iosremote/en.lproj/iPad_autosize_old.storyboard
+++ b/ios/iosremote/en.lproj/iPad_autosize_old.storyboard
@@ -107,7 +107,7 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Please enter the pin code above in Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="4" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9zr-53-YfP">
-                                <rect key="frame" x="115" y="442" width="320" height="94.000000000000014"/>
+                                <rect key="frame" x="115" y="442" width="320" height="94"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -623,9 +623,11 @@
     </scenes>
     <resources>
         <image name="Default.png" width="320" height="480"/>
+        <image name="Default.png" width="320" height="480"/>
         <image name="WTPairingScreenshot.png" width="474" height="312"/>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
+        <image name="buttonBackground.png" width="45" height="45"/>
         <image name="more_icon.png" width="30" height="30"/>
         <image name="more_ipad.png" width="60" height="60"/>
         <image name="nextButton_normal.png" width="42" height="230"/>
@@ -633,8 +635,10 @@
         <image name="previousButton_normal.png" width="42" height="230"/>
         <image name="previousButton_pressed.png" width="42" height="230"/>
         <image name="timer_clear_btn_dark.png" width="60" height="60"/>
+        <image name="timer_clear_btn_dark.png" width="60" height="60"/>
         <image name="timer_settime_btn.png" width="60" height="60"/>
         <image name="timer_start_btn_dark.png" width="60" height="60"/>
+        <image name="timer_start_btn_dark.png" width="60" height="60"/>
     </resources>
     <color key="tintColor" red="1" green="0.50196078430000002" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
     <simulatedMetricsContainer key="defaultSimulatedMetrics">
diff --git a/ios/iosremote/iosremote.xcodeproj/project.pbxproj b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
index 33fce69..e124e5f 100644
--- a/ios/iosremote/iosremote.xcodeproj/project.pbxproj
+++ b/ios/iosremote/iosremote.xcodeproj/project.pbxproj
@@ -100,6 +100,8 @@
 		8C3A648D17DCBE9E004A77D9 /* timer_settime_btn_dark at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C3A648617DCBE9E004A77D9 /* timer_settime_btn_dark at 2x.png */; };
 		8C3A648E17DCBE9E004A77D9 /* timer_start_btn_dark.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C3A648717DCBE9E004A77D9 /* timer_start_btn_dark.png */; };
 		8C8C7FB017EDA9330022A6BD /* UINavigationController+Theme.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C8C7FAF17EDA9330022A6BD /* UINavigationController+Theme.m */; };
+		8C8C7FB317EDAFD20022A6BD /* more_ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C8C7FB117EDAFD20022A6BD /* more_ipad.png */; };
+		8C8C7FB417EDAFD20022A6BD /* more_ipad at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C8C7FB217EDAFD20022A6BD /* more_ipad at 2x.png */; };
 		8C94E69617CF7BF000B4848D /* WTPairingScreenshot.png in Resources */ = {isa = PBXBuildFile; fileRef = 8C94E69517CF7BF000B4848D /* WTPairingScreenshot.png */; };
 		8CAD658517A2E84A00CFB661 /* MainSplitViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CAD658417A2E84A00CFB661 /* MainSplitViewController.m */; };
 		8CAD658817A2EDB200CFB661 /* SlideShowPreviewViewController~ipad.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CAD658717A2EDB200CFB661 /* SlideShowPreviewViewController~ipad.m */; };
@@ -108,8 +110,6 @@
 		8CAD65A017A3F76300CFB661 /* SlideShowSwipeInList~ipad.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CAD659F17A3F76300CFB661 /* SlideShowSwipeInList~ipad.m */; };
 		8CAF3DDF17D0DFFD00F931E5 /* WTcontrol~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CAF3DDD17D0DFFD00F931E5 /* WTcontrol~ipad.png */; };
 		8CAF3DE017D0DFFD00F931E5 /* WTcontrol~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CAF3DDE17D0DFFD00F931E5 /* WTcontrol~iphone.png */; };
-		8CAF3DE317D1D5D700F931E5 /* more_ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CAF3DE117D1D5D600F931E5 /* more_ipad.png */; };
-		8CAF3DE417D1D5D700F931E5 /* more_ipad at 2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8CAF3DE217D1D5D700F931E5 /* more_ipad at 2x.png */; };
 		8CBF9DEB17DDBFA70044D949 /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CBF9DC417DDBFA70044D949 /* IASKAppSettingsViewController.m */; };
 		8CBF9DEC17DDBFA70044D949 /* IASKAppSettingsWebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CBF9DC617DDBFA70044D949 /* IASKAppSettingsWebViewController.m */; };
 		8CBF9DED17DDBFA70044D949 /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CBF9DC817DDBFA70044D949 /* IASKSpecifierValuesViewController.m */; };
@@ -289,6 +289,8 @@
 		8C3A648717DCBE9E004A77D9 /* timer_start_btn_dark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = timer_start_btn_dark.png; sourceTree = "<group>"; };
 		8C8C7FAE17EDA9330022A6BD /* UINavigationController+Theme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UINavigationController+Theme.h"; path = "iosremote/Categories/UINavigationController+Theme.h"; sourceTree = "<group>"; };
 		8C8C7FAF17EDA9330022A6BD /* UINavigationController+Theme.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UINavigationController+Theme.m"; path = "iosremote/Categories/UINavigationController+Theme.m"; sourceTree = "<group>"; };
+		8C8C7FB117EDAFD20022A6BD /* more_ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = more_ipad.png; sourceTree = "<group>"; };
+		8C8C7FB217EDAFD20022A6BD /* more_ipad at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "more_ipad at 2x.png"; sourceTree = "<group>"; };
 		8C94E69517CF7BF000B4848D /* WTPairingScreenshot.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = WTPairingScreenshot.png; sourceTree = "<group>"; };
 		8CAD658317A2E84A00CFB661 /* MainSplitViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainSplitViewController.h; path = iosremote/Classes/MainSplitViewController.h; sourceTree = "<group>"; };
 		8CAD658417A2E84A00CFB661 /* MainSplitViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MainSplitViewController.m; path = iosremote/Classes/MainSplitViewController.m; sourceTree = "<group>"; };
@@ -302,8 +304,6 @@
 		8CAD659F17A3F76300CFB661 /* SlideShowSwipeInList~ipad.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "SlideShowSwipeInList~ipad.m"; path = "iosremote/Classes/SlideShowSwipeInList~ipad.m"; sourceTree = "<group>"; };
 		8CAF3DDD17D0DFFD00F931E5 /* WTcontrol~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "WTcontrol~ipad.png"; sourceTree = "<group>"; };
 		8CAF3DDE17D0DFFD00F931E5 /* WTcontrol~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "WTcontrol~iphone.png"; sourceTree = "<group>"; };
-		8CAF3DE117D1D5D600F931E5 /* more_ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = more_ipad.png; sourceTree = "<group>"; };
-		8CAF3DE217D1D5D700F931E5 /* more_ipad at 2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "more_ipad at 2x.png"; sourceTree = "<group>"; };
 		8CBF9DC317DDBFA70044D949 /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = "<group>"; };
 		8CBF9DC417DDBFA70044D949 /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = "<group>"; };
 		8CBF9DC517DDBFA70044D949 /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = "<group>"; };
@@ -469,6 +469,8 @@
 		8C06B31917B7EC62002F5CF8 /* assets */ = {
 			isa = PBXGroup;
 			children = (
+				8C8C7FB117EDAFD20022A6BD /* more_ipad.png */,
+				8C8C7FB217EDAFD20022A6BD /* more_ipad at 2x.png */,
 				8C2937BA17E837BA00C3B887 /* Default-568h at 2x.png */,
 				8C2937BB17E837BA00C3B887 /* Default.png */,
 				8C2937BC17E837BA00C3B887 /* Default at 2x.png */,
@@ -481,8 +483,6 @@
 				8C3A648717DCBE9E004A77D9 /* timer_start_btn_dark.png */,
 				8C23B46A17DB3B8600FB4DE6 /* timer_settime_btn.png */,
 				8C23B46B17DB3B8600FB4DE6 /* timer_settime_btn at 2x.png */,
-				8CAF3DE117D1D5D600F931E5 /* more_ipad.png */,
-				8CAF3DE217D1D5D700F931E5 /* more_ipad at 2x.png */,
 				8CAF3DDD17D0DFFD00F931E5 /* WTcontrol~ipad.png */,
 				8CAF3DDE17D0DFFD00F931E5 /* WTcontrol~iphone.png */,
 				8C94E69517CF7BF000B4848D /* WTPairingScreenshot.png */,
@@ -891,6 +891,7 @@
 				8C0DC83D17A4177C0099E5AE /* previousButton_pressed at 2x.png in Resources */,
 				8C0DC84217A4185A0099E5AE /* nextButton_normal.png in Resources */,
 				8C0DC84317A4185A0099E5AE /* nextButton_normal at 2x.png in Resources */,
+				8C8C7FB417EDAFD20022A6BD /* more_ipad at 2x.png in Resources */,
 				8C0DC84417A4185A0099E5AE /* previousButton_normal.png in Resources */,
 				8C0DC84517A4185A0099E5AE /* previousButton_normal at 2x.png in Resources */,
 				8C26E5C617A5539D007DA4B7 /* UserDefaults.plist in Resources */,
@@ -918,14 +919,13 @@
 				8C94E69617CF7BF000B4848D /* WTPairingScreenshot.png in Resources */,
 				8CAF3DDF17D0DFFD00F931E5 /* WTcontrol~ipad.png in Resources */,
 				8CAF3DE017D0DFFD00F931E5 /* WTcontrol~iphone.png in Resources */,
-				8CAF3DE317D1D5D700F931E5 /* more_ipad.png in Resources */,
-				8CAF3DE417D1D5D700F931E5 /* more_ipad at 2x.png in Resources */,
 				8C23B46C17DB3B8600FB4DE6 /* timer_settime_btn.png in Resources */,
 				8C23B46D17DB3B8600FB4DE6 /* timer_settime_btn at 2x.png in Resources */,
 				8C3A648817DCBE9E004A77D9 /* timer_clear_btn_dark.png in Resources */,
 				8C3A648A17DCBE9E004A77D9 /* timer_pause_btn_dark.png in Resources */,
 				8C3A648B17DCBE9E004A77D9 /* timer_pause_btn_dark at 2x.png in Resources */,
 				8C3A648C17DCBE9E004A77D9 /* timer_settime_btn_dark.png in Resources */,
+				8C8C7FB317EDAFD20022A6BD /* more_ipad.png in Resources */,
 				8C3A648D17DCBE9E004A77D9 /* timer_settime_btn_dark at 2x.png in Resources */,
 				8C3A648E17DCBE9E004A77D9 /* timer_start_btn_dark.png in Resources */,
 				8CBF9DFA17DDBFA70044D949 /* IASKAppSettingsView.xib in Resources */,
diff --git a/ios/iosremote/iosremote/Ressources/more_icon.png b/ios/iosremote/iosremote/Ressources/more_icon.png
index ac826b3..6d1419c 100644
Binary files a/ios/iosremote/iosremote/Ressources/more_icon.png and b/ios/iosremote/iosremote/Ressources/more_icon.png differ
diff --git a/ios/iosremote/iosremote/Ressources/more_icon at 2x.png b/ios/iosremote/iosremote/Ressources/more_icon at 2x.png
index 8ba3cf8..91b5027 100644
Binary files a/ios/iosremote/iosremote/Ressources/more_icon at 2x.png and b/ios/iosremote/iosremote/Ressources/more_icon at 2x.png differ
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard
index a1f8d5c..8531b3a 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize.storyboard
@@ -121,7 +121,7 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Please enter the pin code above in Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="upW-oF-qOa">
-                                <rect key="frame" x="29" y="418.99999999999994" width="271" height="65"/>
+                                <rect key="frame" x="29" y="419" width="271" height="65"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="30" height="30"/>
+        <image name="more_icon.png" width="60" height="60"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard
index a1f8d5c..8531b3a 100644
--- a/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard
+++ b/ios/iosremote/iosremote/en.lproj/iPhone_autoSize_old.storyboard
@@ -121,7 +121,7 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Please enter the pin code above in Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="upW-oF-qOa">
-                                <rect key="frame" x="29" y="418.99999999999994" width="271" height="65"/>
+                                <rect key="frame" x="29" y="419" width="271" height="65"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="30" height="30"/>
+        <image name="more_icon.png" width="60" height="60"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard
index ab31681..df7e1a0 100644
--- a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard
+++ b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize.storyboard
@@ -123,7 +123,7 @@ Contrôle Distant</string>
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Veuillez entrer le code ci-dessus dans le fenêtre Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="upW-oF-qOa">
-                                <rect key="frame" x="29" y="419.00000000000006" width="271" height="65"/>
+                                <rect key="frame" x="29" y="419" width="271" height="65"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -609,7 +609,7 @@ Contrôle Distant</string>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="30" height="30"/>
+        <image name="more_icon.png" width="60" height="60"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard
index ab31681..df7e1a0 100644
--- a/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard
+++ b/ios/iosremote/iosremote/fr.lproj/iPhone_autoSize_old.storyboard
@@ -123,7 +123,7 @@ Contrôle Distant</string>
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Veuillez entrer le code ci-dessus dans le fenêtre Impress - Slide Show - Impress Remote" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="upW-oF-qOa">
-                                <rect key="frame" x="29" y="419.00000000000006" width="271" height="65"/>
+                                <rect key="frame" x="29" y="419" width="271" height="65"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -609,7 +609,7 @@ Contrôle Distant</string>
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="30" height="30"/>
+        <image name="more_icon.png" width="60" height="60"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard
index a0d0c45..c9b496ba 100644
--- a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard
+++ b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize.storyboard
@@ -121,7 +121,7 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="请将以上pin码输入到LibreOffice Impress - 幻灯片播放 - Impress远程 中" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="upW-oF-qOa">
-                                <rect key="frame" x="29" y="419.00000000000006" width="271" height="65"/>
+                                <rect key="frame" x="29" y="419" width="271" height="65"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="30" height="30"/>
+        <image name="more_icon.png" width="60" height="60"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
diff --git a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard
index a0d0c45..c9b496ba 100644
--- a/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard
+++ b/ios/iosremote/iosremote/zh-Hans.lproj/iPhone_autoSize_old.storyboard
@@ -121,7 +121,7 @@
                                 <nil key="highlightedColor"/>
                             </label>
                             <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="请将以上pin码输入到LibreOffice Impress - 幻灯片播放 - Impress远程 中" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="upW-oF-qOa">
-                                <rect key="frame" x="29" y="419.00000000000006" width="271" height="65"/>
+                                <rect key="frame" x="29" y="419" width="271" height="65"/>
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
                                 <fontDescription key="fontDescription" name="Helvetica-Light" family="Helvetica" pointSize="15"/>
                                 <color key="textColor" name="alternateSelectedControlColor" catalog="System" colorSpace="catalog"/>
@@ -607,7 +607,7 @@
         <image name="add.png" width="30" height="30"/>
         <image name="buttonBackground.png" width="45" height="45"/>
         <image name="ic_launcher.png" width="16" height="16"/>
-        <image name="more_icon.png" width="30" height="30"/>
+        <image name="more_icon.png" width="60" height="60"/>
         <image name="pointer.png" width="143" height="147"/>
         <image name="pointer_pushed.png" width="143" height="147"/>
         <image name="pushed_next_button.png" width="315" height="220"/>
commit cd4333272dcdc76dcdb5e810c7b628d97cabcf91
Author: Siqi LIU <me at siqi.fr>
Date:   Sat Sep 21 12:36:55 2013 +0200

    fix iOS7 storyboard issues&popover position
    
    Change-Id: I6a3e03956b3616d2d43396843d852c5591423c9d

diff --git a/ios/iosremote/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m b/ios/iosremote/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m
index 7ae7af0..52afa88 100755
--- a/ios/iosremote/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m
+++ b/ios/iosremote/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m
@@ -358,7 +358,7 @@ CGRect IASKCGRectSwap(CGRect rect);
 	if ((title = [self tableView:tableView titleForHeaderInSection:section])) {
 		CGSize size = [title sizeWithFont:[UIFont boldSystemFontOfSize:[UIFont labelFontSize]]
 						constrainedToSize:CGSizeMake(tableView.frame.size.width - 2*kIASKHorizontalPaddingGroupTitles, INFINITY)
-							lineBreakMode:UILineBreakModeWordWrap];
+							lineBreakMode:NSLineBreakByWordWrapping];
 		return size.height+kIASKVerticalPaddingGroupTitles;
 	}
 	return 0;
diff --git a/ios/iosremote/PopoverView/PopoverView.h b/ios/iosremote/PopoverView/PopoverView.h
new file mode 100755
index 0000000..6766ab1
--- /dev/null
+++ b/ios/iosremote/PopoverView/PopoverView.h
@@ -0,0 +1,208 @@
+//
+//  PopoverView
+//  https://github.com/runway20/PopoverView
+//
+//(MIT Licensed)
+//
+//Copyright (c) 2012 Runway 20 Inc.
+//
+//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 "PopoverViewCompatibility.h"
+
+
+/**************** Support both ARC and non-ARC ********************/
+
+#ifndef SUPPORT_ARC
+#define SUPPORT_ARC
+
+#if __has_feature(objc_arc_weak)                //objc_arc_weak
+#define WEAK weak
+#define __WEAK __weak
+#define STRONG strong
+
+#define AUTORELEASE self
+#define RELEASE self
+#define RETAIN self
+#define CFTYPECAST(exp) (__bridge exp)
+#define TYPECAST(exp) (__bridge_transfer exp)
+#define CFRELEASE(exp) CFRelease(exp)
+#define DEALLOC self
+
+#elif __has_feature(objc_arc)                   //objc_arc
+#define WEAK unsafe_unretained
+#define __WEAK __unsafe_unretained
+#define STRONG strong
+
+#define AUTORELEASE self
+#define RELEASE self
+#define RETAIN self
+#define CFTYPECAST(exp) (__bridge exp)
+#define TYPECAST(exp) (__bridge_transfer exp)
+#define CFRELEASE(exp) CFRelease(exp)
+#define DEALLOC self
+
+#else                                           //none
+#define WEAK assign
+#define __WEAK
+#define STRONG retain
+
+#define AUTORELEASE autorelease
+#define RELEASE release
+#define RETAIN retain
+#define CFTYPECAST(exp) (exp)
+#define TYPECAST(exp) (exp)
+#define CFRELEASE(exp) CFRelease(exp)
+#define DEALLOC dealloc
+
+#endif
+#endif
+
+/******************************************************************/
+
+
+ at class PopoverView;
+
+ at protocol PopoverViewDelegate <NSObject>
+
+ at optional
+
+//Delegate receives this call as soon as the item has been selected
+- (void)popoverView:(PopoverView *)popoverView didSelectItemAtIndex:(NSInteger)index;
+
+//Delegate receives this call once the popover has begun the dismissal animation
+- (void)popoverViewDidDismiss:(PopoverView *)popoverView;
+
+ at end
+
+ at interface PopoverView : UIView {
+    CGRect boxFrame;
+    CGSize contentSize;
+    CGPoint arrowPoint;
+
+    BOOL above;
+
+    __WEAK id<PopoverViewDelegate> delegate;
+
+    UIView *parentView;
+
+    UIView *topView;
+
+    NSArray *subviewsArray;
+
+    NSArray *dividerRects;
+
+    UIView *contentView;
+
+    UIView *titleView;
+
+    UIActivityIndicatorView *activityIndicator;
+
+    //Instance variable that can change at runtime
+    BOOL showDividerRects;
+}
+
+ at property (nonatomic, STRONG) UIView *titleView;
+
+ at property (nonatomic, STRONG) UIView *contentView;
+
+ at property (nonatomic, STRONG) NSArray *subviewsArray;
+
+ at property (nonatomic, WEAK) id<PopoverViewDelegate> delegate;
+
+#pragma mark - Class Static Showing Methods
+
+//These are the main static methods you can use to display the popover.
+//Simply call [PopoverView show...] with your arguments, and the popover will be generated, added to the view stack, and notify you when it's done.
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withText:(NSString *)text delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withText:(NSString *)text delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withViewArray:(NSArray *)viewArray delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withViewArray:(NSArray *)viewArray delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withContentView:(UIView *)cView delegate:(id<PopoverViewDelegate>)delegate;
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withContentView:(UIView *)cView delegate:(id<PopoverViewDelegate>)delegate;
+
+#pragma mark - Instance Showing Methods
+
+//Adds/animates in the popover to the top of the view stack with the arrow pointing at the "point"
+//within the specified view.  The contentView will be added to the popover, and should have either
+//a clear color backgroundColor, or perhaps a rounded corner bg rect (radius 4.f if you're going to
+//round).
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withContentView:(UIView *)contentView;
+
+//Calls above method with a UILabel containing the text you deliver to this method.
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withText:(NSString *)text;
+
+//Calls top method with an array of UIView objects.  This method will stack these views vertically
+//with kBoxPadding padding between each view in the y-direction.
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withViewArray:(NSArray *)viewArray;
+
+//Does same as above, but adds a title label at top of the popover.
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withViewArray:(NSArray *)viewArray;
+
+//Calls the viewArray method with an array of UILabels created with the strings
+//in stringArray.  All contents of stringArray must be NSStrings.
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray;
+
+//This method does same as above, but with a title label at the top of the popover.
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray;
+
+//Draws a vertical list of the NSString elements of stringArray with UIImages
+//from imageArray placed centered above them.
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray;
+
+//Does the same as above, but with a title
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray;
+
+//Lays out the PopoverView at a point once all of the views have already been setup elsewhere
+- (void)layoutAtPoint:(CGPoint)point inView:(UIView *)view;
+
+#pragma mark - Other Interaction
+//This method animates the rotation of the PopoverView to a new point
+- (void)animateRotationToNewPoint:(CGPoint)point inView:(UIView *)view withDuration:(NSTimeInterval)duration;
+
+#pragma mark - Dismissal
+//Dismisses the view, and removes it from the view stack.
+- (void)dismiss;
+- (void)dismiss:(BOOL)animated;
+
+#pragma mark - Activity Indicator Methods
+
+//Shows the activity indicator, and changes the title (if the title is available, and is a UILabel).
+- (void)showActivityIndicatorWithMessage:(NSString *)msg;
+
+//Hides the activity indicator, and changes the title (if the title is available) to the msg
+- (void)hideActivityIndicatorWithMessage:(NSString *)msg;
+
+#pragma mark - Custom Image Showing
+
+//Animate in, and display the image provided here.
+- (void)showImage:(UIImage *)image withMessage:(NSString *)msg;
+
+#pragma mark - Error/Success Methods
+
+//Shows (and animates in) an error X in the contentView
+- (void)showError;
+
+//Shows (and animates in) a success checkmark in the contentView
+- (void)showSuccess;
+
+ at end
diff --git a/ios/iosremote/PopoverView/PopoverView.m b/ios/iosremote/PopoverView/PopoverView.m
new file mode 100755
index 0000000..4f810cf
--- /dev/null
+++ b/ios/iosremote/PopoverView/PopoverView.m
@@ -0,0 +1,1055 @@
+//
+//  PopoverView
+//  https://github.com/runway20/PopoverView
+//
+//(MIT Licensed)
+//
+//Copyright (c) 2012 Runway 20 Inc.
+//
+//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 "PopoverView.h"
+#import "PopoverView_Configuration.h"
+#import <QuartzCore/QuartzCore.h>
+
+#pragma mark - Implementation
+
+ at implementation PopoverView
+
+ at synthesize subviewsArray;
+ at synthesize contentView;
+ at synthesize titleView;
+ at synthesize delegate;
+
+#pragma mark - Static Methods
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withText:(NSString *)text delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withText:text];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withText:(NSString *)text delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withTitle:title withText:text];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withViewArray:(NSArray *)viewArray delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withViewArray:viewArray];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withViewArray:(NSArray *)viewArray delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withTitle:title withViewArray:viewArray];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withStringArray:stringArray];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withTitle:title withStringArray:stringArray];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withStringArray:stringArray withImageArray:imageArray];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withTitle:title withStringArray:stringArray withImageArray:imageArray];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withContentView:(UIView *)cView delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withTitle:title withContentView:cView];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
++ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withContentView:(UIView *)cView delegate:(id<PopoverViewDelegate>)delegate {
+    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
+    [popoverView showAtPoint:point inView:view withContentView:cView];
+    popoverView.delegate = delegate;
+    [popoverView RELEASE];
+    return popoverView;
+}
+
+#pragma mark - View Lifecycle
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        // Initialization code
+        
+        self.backgroundColor = [UIColor clearColor];
+        
+        self.titleView = nil;
+        self.contentView = nil;
+        
+        showDividerRects = kShowDividersBetweenViews;
+    }
+    return self;
+}
+
+- (void)dealloc
+{
+    self.subviewsArray = nil;
+    
+    if (dividerRects) {
+        [dividerRects RELEASE];
+        dividerRects = nil;
+    }
+    
+    self.contentView = nil;
+    self.titleView = nil;
+    
+    [super DEALLOC];
+}
+
+
+
+#pragma mark - Display methods
+
+// get the screen size, adjusted for orientation and status bar display
+// see http://stackoverflow.com/questions/7905432/how-to-get-orientation-dependent-height-and-width-of-the-screen/7905540#7905540
+- (CGSize) screenSize
+{
+    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
+    CGSize size = [UIScreen mainScreen].bounds.size;
+    UIApplication *application = [UIApplication sharedApplication];
+    if (UIInterfaceOrientationIsLandscape(orientation))
+    {
+        size = CGSizeMake(size.height, size.width);
+    }
+    if (application.statusBarHidden == NO)
+    {
+        size.height -= MIN(application.statusBarFrame.size.width, application.statusBarFrame.size.height);
+    }
+    return size;
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withText:(NSString *)text
+{
+    UIFont *font = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kSmallTextFontPad : kTextFontPhone;
+    
+    CGSize screenSize = [self screenSize];
+    CGSize textSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(screenSize.width - kHorizontalMargin*4.f, 1000.f) lineBreakMode:UILineBreakModeWordWrap];
+    
+    UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
+    textView.backgroundColor = [UIColor clearColor];
+    textView.userInteractionEnabled = NO;
+    [textView setNumberOfLines:0]; //This is so the label word wraps instead of cutting off the text
+    textView.font = font;
+    textView.textAlignment = kTextAlignmentLeft;
+    textView.textColor = kTextColor;
+    textView.text = text;
+    
+    [self showAtPoint:point inView:view withViewArray:[NSArray arrayWithObject:[textView AUTORELEASE]]];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withText:(NSString *)text
+{
+    UIFont *font = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kTextFontPad : kTextFontPhone;
+    
+    CGSize screenSize = [self screenSize];
+    CGSize textSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(screenSize.width - kHorizontalMargin*4.f, 1000.f) lineBreakMode:UILineBreakModeWordWrap];
+    
+    UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
+    textView.backgroundColor = [UIColor clearColor];
+    textView.userInteractionEnabled = NO;
+    [textView setNumberOfLines:0]; //This is so the label word wraps instead of cutting off the text
+    textView.font = font;
+    textView.textAlignment = kTextAlignment;
+    textView.textColor = kTextColor;
+    textView.text = text;
+    
+    [self showAtPoint:point inView:view withTitle:title withViewArray:[NSArray arrayWithObject:[textView AUTORELEASE]]];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withViewArray:(NSArray *)viewArray
+{
+    UIView *container = [[UIView alloc] initWithFrame:CGRectZero];
+    
+    float totalHeight = 0.f;
+    float totalWidth = 0.f;
+    
+    int i = 0;
+    
+    //Position each view the first time, and identify which view has the largest width that controls
+    //the sizing of the popover.
+    for (UIView *view in viewArray) {
+        
+        view.frame = CGRectMake(0, totalHeight, view.frame.size.width, view.frame.size.height);
+        //Only add padding below the view if it's not the last item
+        float padding = (i == viewArray.count-1) ? 0 : kBoxPadding;
+        
+        totalHeight += view.frame.size.height + padding;
+        
+        if (view.frame.size.width > totalWidth) {
+            totalWidth = view.frame.size.width;
+        }
+        
+        [container addSubview:view];
+        
+        i++;
+    }
+    
+    //If dividers are enabled, then we allocate the divider rect array.  This will hold NSValues
+    if (kShowDividersBetweenViews) {
+        dividerRects = [[NSMutableArray alloc] initWithCapacity:viewArray.count-1];
+    }
+    
+    container.frame = CGRectMake(0, 0, totalWidth, totalHeight);
+    
+    i = 0;
+    
+    totalHeight = 0;
+    
+    //Now we actually change the frame element for each subview, and center the views horizontally.
+    for (UIView *view in viewArray) {
+        if ([view autoresizingMask] == UIViewAutoresizingFlexibleWidth) {
+            //Now make sure all flexible views are the full width
+            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, totalWidth, view.frame.size.height);
+        } else {
+            //If the view is not flexible width, then we position it centered in the view
+            //without stretching it.
+            view.frame = CGRectMake(floorf(CGRectGetMinX(boxFrame) + totalWidth*0.5f - view.frame.size.width*0.5f), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
+        }
+        
+        //and if dividers are enabled, we record their position for the drawing methods
+        if (kShowDividersBetweenViews && i != viewArray.count-1) {
+            CGRect dividerRect = CGRectMake(view.frame.origin.x, floorf(view.frame.origin.y + view.frame.size.height + kBoxPadding*0.5f), view.frame.size.width, 0.5f);
+            
+            [((NSMutableArray *)dividerRects) addObject:[NSValue valueWithCGRect:dividerRect]];
+        }
+        
+        //Only add padding below the view if it's not the last item
+        float padding = (i == viewArray.count-1) ? 0.f : kBoxPadding;
+        
+        totalHeight += view.frame.size.height + padding;
+        
+        i++;
+    }
+    
+    self.subviewsArray = viewArray;
+    
+    [self showAtPoint:point inView:view withContentView:[container AUTORELEASE]];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withViewArray:(NSArray *)viewArray
+{
+    UIView *container = [[UIView alloc] initWithFrame:CGRectZero];
+    
+    //Create a label for the title text.
+    CGSize titleSize = [title sizeWithFont: UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kTitleFontPad : kTitleFontPhone];
+    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.f, 0.f, titleSize.width, titleSize.height)];
+    titleLabel.backgroundColor = [UIColor clearColor];
+    titleLabel.font = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kTitleFontPad : kTitleFontPhone;
+    titleLabel.textAlignment = UITextAlignmentCenter;
+    titleLabel.textColor = kTitleColor;
+    titleLabel.text = title;
+    
+    //Make sure that the title's label will have non-zero height.  If it has zero height, then we don't allocate any space
+    //for it in the positioning of the views.
+    float titleHeightOffset = (titleSize.height > 0.f ? kBoxPadding : 0.f);
+    
+    float totalHeight = titleSize.height + titleHeightOffset + kBoxPadding;
+    float totalWidth = titleSize.width;
+    
+    int i = 0;
+    
+    //Position each view the first time, and identify which view has the largest width that controls
+    //the sizing of the popover.
+    for (UIView *view in viewArray) {
+        
+        view.frame = CGRectMake(0, totalHeight, view.frame.size.width, view.frame.size.height);
+        
+        //Only add padding below the view if it's not the last item.
+        float padding = (i == viewArray.count-1) ? 0.f : kBoxPadding;
+        
+        totalHeight += view.frame.size.height + padding;
+        
+        if (view.frame.size.width > totalWidth) {
+            totalWidth = view.frame.size.width;
+        }
+        
+        [container addSubview:view];
+        
+        i++;
+    }
+    
+    //If dividers are enabled, then we allocate the divider rect array.  This will hold NSValues
+    if (kShowDividersBetweenViews) {
+        dividerRects = [[NSMutableArray alloc] initWithCapacity:viewArray.count-1];
+    }
+    
+    i = 0;
+    
+    for (UIView *view in viewArray) {
+        if ([view autoresizingMask] == UIViewAutoresizingFlexibleWidth) {
+            //Now make sure all flexible views are the full width
+            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, totalWidth, view.frame.size.height);
+        } else {
+            //If the view is not flexible width, then we position it centered in the view
+            //without stretching it.
+            view.frame = CGRectMake(floorf(CGRectGetMinX(boxFrame) + totalWidth*0.5f - view.frame.size.width*0.5f), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
+        }
+        
+        //and if dividers are enabled, we record their position for the drawing methods
+        if (kShowDividersBetweenViews && i != viewArray.count-1) {
+            CGRect dividerRect = CGRectMake(view.frame.origin.x, floorf(view.frame.origin.y + view.frame.size.height + kBoxPadding*0.5f), view.frame.size.width, 0.5f);
+            
+            [((NSMutableArray *)dividerRects) addObject:[NSValue valueWithCGRect:dividerRect]];
+        }
+        
+        i++;
+    }
+    
+    titleLabel.frame = CGRectMake(floorf(totalWidth*0.5f - titleSize.width*0.5f), 0, titleSize.width, titleSize.height);
+    
+    //Store the titleView as an instance variable if it is larger than 0 height (not an empty string)
+    if (titleSize.height > 0) {
+        self.titleView = titleLabel;
+    }
+    
+    [container addSubview:[titleLabel AUTORELEASE]];
+    
+    container.frame = CGRectMake(0, 0, totalWidth, totalHeight);
+    
+    self.subviewsArray = viewArray;
+    
+    [self showAtPoint:point inView:view withContentView:[container AUTORELEASE]];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray
+{
+    NSMutableArray *labelArray = [[NSMutableArray alloc] initWithCapacity:stringArray.count];
+    
+    UIFont *font = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kTextFontPad : kTextFontPhone;
+    
+    for (NSString *string in stringArray) {
+        CGSize textSize = [string sizeWithFont:font];
+        UIButton *textButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
+        textButton.backgroundColor = [UIColor clearColor];
+        textButton.titleLabel.font = font;
+        textButton.titleLabel.textAlignment = kTextAlignment;
+        textButton.titleLabel.textColor = kTextColor;
+        [textButton setTitle:string forState:UIControlStateNormal];
+        textButton.layer.cornerRadius = 4.f;
+        [textButton setTitleColor:kTextColor forState:UIControlStateNormal];
+        [textButton setTitleColor:kTextHighlightColor forState:UIControlStateHighlighted];
+        [textButton addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];
+        
+        [labelArray addObject:[textButton AUTORELEASE]];
+    }
+    
+    [self showAtPoint:point inView:view withViewArray:[labelArray AUTORELEASE]];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray
+ {
+    NSMutableArray *labelArray = [[NSMutableArray alloc] initWithCapacity:stringArray.count];
+    
+    UIFont *font = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kTextFontPad : kTextFontPhone;
+    
+    for (NSString *string in stringArray) {
+        CGSize textSize = [string sizeWithFont:font];
+        UIButton *textButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
+        textButton.backgroundColor = [UIColor clearColor];
+        textButton.titleLabel.font = font;
+        textButton.titleLabel.textAlignment = kTextAlignment;
+        textButton.titleLabel.textColor = kTextColor;
+        [textButton setTitle:string forState:UIControlStateNormal];
+        textButton.layer.cornerRadius = 4.f;
+        [textButton setTitleColor:kTextColor forState:UIControlStateNormal];
+        [textButton setTitleColor:kTextHighlightColor forState:UIControlStateHighlighted];
+        [textButton addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];
+        
+        [labelArray addObject:[textButton AUTORELEASE]];
+    }
+    
+    [self showAtPoint:point inView:view withTitle:title withViewArray:[labelArray AUTORELEASE]];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray
+{
+    //Here we do something pretty similar to the stringArray method above.
+    //We create an array of subviews that contains the strings and images centered above a label.
+    
+    NSAssert((stringArray.count == imageArray.count), @"stringArray.count should equal imageArray.count");
+    NSMutableArray* tempViewArray = [self makeTempViewsWithStrings:stringArray andImages:imageArray];
+    
+    [self showAtPoint:point inView:view withViewArray:tempViewArray];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray
+{
+    NSAssert((stringArray.count == imageArray.count), @"stringArray.count should equal imageArray.count");
+    NSMutableArray* tempViewArray = [self makeTempViewsWithStrings:stringArray andImages:imageArray];
+        
+    [self showAtPoint:point inView:view withTitle:title withViewArray:tempViewArray];
+}
+
+- (NSMutableArray*) makeTempViewsWithStrings:(NSArray *)stringArray andImages:(NSArray *)imageArray
+{
+    NSMutableArray *tempViewArray = [[NSMutableArray alloc] initWithCapacity:stringArray.count];
+    
+    UIFont *font = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? kTextFontPad : kTextFontPhone;
+    
+    for (int i = 0; i < stringArray.count; i++) {
+        NSString *string = [stringArray objectAtIndex:i];
+        
+        //First we build a label for the text to set in.
+        CGSize textSize = [string sizeWithFont:font];
+        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
+        label.backgroundColor = [UIColor clearColor];
+        label.font = font;
+        label.textAlignment = kTextAlignment;
+        label.textColor = kTextColor;
+        label.text = string;
+        label.layer.cornerRadius = 4.f;
+        
+        //Now we grab the image at the same index in the imageArray, and create
+        //a UIImageView for it.
+        UIImage *image = [imageArray objectAtIndex:i];
+        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
+        
+        //Take the larger of the two widths as the width for the container
+        float containerWidth = MAX(imageView.frame.size.width, label.frame.size.width);
+        float containerHeight = label.frame.size.height + kImageTopPadding + kImageBottomPadding + imageView.frame.size.height;
+        
+        //This container will hold both the image and the label
+        UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, containerWidth, containerHeight)];
+        
+        //Now we do the frame manipulations to put the imageView on top of the label, both centered
+        imageView.frame = CGRectMake(floorf(containerWidth*0.5f - imageView.frame.size.width*0.5f), kImageTopPadding, imageView.frame.size.width, imageView.frame.size.height);
+        label.frame = CGRectMake(floorf(containerWidth*0.5f - label.frame.size.width*0.5f), imageView.frame.size.height + kImageBottomPadding + kImageTopPadding, label.frame.size.width, label.frame.size.height);
+        
+        [containerView addSubview:imageView];
+        [containerView addSubview:label];
+        
+        [label RELEASE];
+        [imageView RELEASE];
+        
+        [tempViewArray addObject:containerView];
+        [containerView RELEASE];
+    }
+
+    return [tempViewArray AUTORELEASE];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withContentView:(UIView *)cView
+{
+    [self showAtPoint:point inView:view withTitle:title withViewArray:[NSArray arrayWithObject:cView]];
+}
+
+- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withContentView:(UIView *)cView {
+    
+    //NSLog(@"point:%f,%f", point.x, point.y);
+    
+    self.contentView = cView;
+    parentView = view;
+    
+    // get the top view
+    // http://stackoverflow.com/questions/3843411/getting-reference-to-the-top-most-view-window-in-ios-application/8045804#8045804
+    topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
+    
+    [self setupLayout:point inView:view];
+    
+    // Make the view small and transparent before animation
+    self.alpha = 0.f;
+    self.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
+    
+    // animate into full size
+    // First stage animates to 1.05x normal size, then second stage animates back down to 1x size.
+    // This two-stage animation creates a little "pop" on open.
+    [UIView animateWithDuration:0.2f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
+        self.alpha = 1.f;
+        self.transform = CGAffineTransformMakeScale(1.05f, 1.05f);
+    } completion:^(BOOL finished) {
+        [UIView animateWithDuration:0.08f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
+            self.transform = CGAffineTransformIdentity;
+        } completion:nil];
+    }];
+}
+
+- (void)layoutAtPoint:(CGPoint)point inView:(UIView *)view
+{
+    // make transparent
+    self.alpha = 0.f;
+    
+    [self setupLayout:point inView:view];
+    
+    // animate back to full opacity
+    [UIView animateWithDuration:0.2f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
+        self.alpha = 1.f;
+    } completion:nil];
+}
+
+-(void)setupLayout:(CGPoint)point inView:(UIView*)view
+{
+    CGPoint topPoint = [topView convertPoint:point fromView:view];
+
+    arrowPoint = topPoint;
+
+    //NSLog(@"arrowPoint:%f,%f", arrowPoint.x, arrowPoint.y);
+
+    CGRect topViewBounds = topView.bounds;
+    //NSLog(@"topViewBounds %@", NSStringFromCGRect(topViewBounds));
+
+    float contentHeight = contentView.frame.size.height;
+    float contentWidth = contentView.frame.size.width;
+
+    float padding = kBoxPadding;
+
+    float boxHeight = contentHeight + 2.f*padding;
+    float boxWidth = contentWidth + 2.f*padding;
+
+    float xOrigin = 0.f;
+
+    //Make sure the arrow point is within the drawable bounds for the popover.
+    if (arrowPoint.x + kArrowHeight > topViewBounds.size.width - kHorizontalMargin - kBoxRadius - kArrowHorizontalPadding) {//Too far to the right
+        arrowPoint.x = topViewBounds.size.width - kHorizontalMargin - kBoxRadius - kArrowHorizontalPadding - kArrowHeight;
+        //NSLog(@"Correcting Arrow Point because it's too far to the right");
+    } else if (arrowPoint.x - kArrowHeight < kHorizontalMargin + kBoxRadius + kArrowHorizontalPadding) {//Too far to the left
+        arrowPoint.x = kHorizontalMargin + kArrowHeight + kBoxRadius + kArrowHorizontalPadding;
+        //NSLog(@"Correcting Arrow Point because it's too far to the left");
+    }
+
+    //NSLog(@"arrowPoint:%f,%f", arrowPoint.x, arrowPoint.y);
+
+    xOrigin = floorf(arrowPoint.x - boxWidth*0.5f);
+
+    //Check to see if the centered xOrigin value puts the box outside of the normal range.
+    if (xOrigin < CGRectGetMinX(topViewBounds) + kHorizontalMargin) {
+        xOrigin = CGRectGetMinX(topViewBounds) + kHorizontalMargin;
+    } else if (xOrigin + boxWidth > CGRectGetMaxX(topViewBounds) - kHorizontalMargin) {
+        //Check to see if the positioning puts the box out of the window towards the left
+        xOrigin = CGRectGetMaxX(topViewBounds) - kHorizontalMargin - boxWidth;
+    }
+
+    float arrowHeight = kArrowHeight;
+
+    float topPadding = kTopMargin;
+
+    above = YES;
+
+    if (topPoint.y - contentHeight - arrowHeight - topPadding < CGRectGetMinY(topViewBounds)) {
+        //Position below because it won't fit above.
+        above = NO;
+        
+        boxFrame = CGRectMake(xOrigin, arrowPoint.y + arrowHeight, boxWidth, boxHeight);
+    } else {
+        //Position above.
+        above = YES;
+        
+        boxFrame = CGRectMake(xOrigin, arrowPoint.y - arrowHeight - boxHeight, boxWidth, boxHeight);
+    }
+
+    //NSLog(@"boxFrame:(%f,%f,%f,%f)", boxFrame.origin.x, boxFrame.origin.y, boxFrame.size.width, boxFrame.size.height);
+
+    CGRect contentFrame = CGRectMake(boxFrame.origin.x + padding, boxFrame.origin.y + padding, contentWidth, contentHeight);
+    contentView.frame = contentFrame;
+
+    //We set the anchorPoint here so the popover will "grow" out of the arrowPoint specified by the user.
+    //You have to set the anchorPoint before setting the frame, because the anchorPoint property will
+    //implicitly set the frame for the view, which we do not want.
+    self.layer.anchorPoint = CGPointMake(arrowPoint.x / topViewBounds.size.width, arrowPoint.y / topViewBounds.size.height);
+    self.frame = topViewBounds;
+    [self setNeedsDisplay];
+
+    [self addSubview:contentView];
+    [topView addSubview:self];
+
+    //Add a tap gesture recognizer to the large invisible view (self), which will detect taps anywhere on the screen.
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
+    tap.cancelsTouchesInView = NO; // Allow touches through to a UITableView or other touchable view, as suggested by Dimajp.
+    [self addGestureRecognizer:tap];
+    [tap RELEASE];
+
+    self.userInteractionEnabled = YES;
+}
+
+
+#pragma mark - Activity Indicator
+
+//Animates in a progress indicator, and removes
+- (void)showActivityIndicatorWithMessage:(NSString *)msg
+{
+    if ([titleView isKindOfClass:[UILabel class]]) {
+        ((UILabel *)titleView).text = msg;
+    }
+    
+    if (subviewsArray && (subviewsArray.count > 0)) {
+        [UIView animateWithDuration:0.2f animations:^{
+            for (UIView *view in subviewsArray) {
+                view.alpha = 0.f;
+            }
+        }];
+        
+        if (showDividerRects) {
+            showDividerRects = NO;
+            [self setNeedsDisplay];
+        }
+    }
+    
+    if (activityIndicator) {
+        [activityIndicator RELEASE];
+        [activityIndicator removeFromSuperview];
+        activityIndicator = nil;
+    }
+    
+    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
+    activityIndicator.frame = CGRectMake(CGRectGetMidX(contentView.bounds) - 10.f, CGRectGetMidY(contentView.bounds) - 10.f + 20.f, 20.f, 20.f);
+    [contentView addSubview:activityIndicator];
+    
+    [activityIndicator startAnimating];
+}
+
+- (void)hideActivityIndicatorWithMessage:(NSString *)msg
+{
+    if ([titleView isKindOfClass:[UILabel class]]) {
+        ((UILabel *)titleView).text = msg;
+    }
+    
+    [activityIndicator stopAnimating];
+    [UIView animateWithDuration:0.1f animations:^{
+        activityIndicator.alpha = 0.f;
+    } completion:^(BOOL finished) {
+        [activityIndicator RELEASE];
+        [activityIndicator removeFromSuperview];
+        activityIndicator = nil;
+    }];
+}
+
+- (void)showImage:(UIImage *)image withMessage:(NSString *)msg
+{
+    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
+    imageView.alpha = 0.f;
+    imageView.frame = CGRectMake(floorf(CGRectGetMidX(contentView.bounds) - image.size.width*0.5f), floorf(CGRectGetMidY(contentView.bounds) - image.size.height*0.5f + ((self.titleView) ? 20 : 0.f)), image.size.width, image.size.height);
+    imageView.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
+    
+    [contentView addSubview:[imageView AUTORELEASE]];
+    
+    if (subviewsArray && (subviewsArray.count > 0)) {
+        [UIView animateWithDuration:0.2f animations:^{
+            for (UIView *view in subviewsArray) {
+                view.alpha = 0.f;
+            }
+        }];
+        
+        if (showDividerRects) {
+            showDividerRects = NO;
+            [self setNeedsDisplay];
+        }
+    }
+    
+    if (msg) {
+        if ([titleView isKindOfClass:[UILabel class]]) {
+            ((UILabel *)titleView).text = msg;
+        }
+    }
+    
+    [UIView animateWithDuration:0.2f delay:0.2f options:UIViewAnimationOptionCurveEaseOut animations:^{
+        imageView.alpha = 1.f;
+        imageView.transform = CGAffineTransformIdentity;
+    } completion:^(BOOL finished) {
+        //[imageView removeFromSuperview];
+    }];
+}
+
+- (void)showError
+{
+    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"error"]];
+    imageView.alpha = 0.f;
+    imageView.frame = CGRectMake(CGRectGetMidX(contentView.bounds) - 20.f, CGRectGetMidY(contentView.bounds) - 20.f + ((self.titleView) ? 20 : 0.f), 40.f, 40.f);
+    imageView.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
+    
+    [contentView addSubview:[imageView AUTORELEASE]];
+    
+    if (subviewsArray && (subviewsArray.count > 0)) {
+        [UIView animateWithDuration:0.1f animations:^{
+            for (UIView *view in subviewsArray) {
+                view.alpha = 0.f;
+            }
+        }];
+        
+        if (showDividerRects) {
+            showDividerRects = NO;
+            [self setNeedsDisplay];
+        }
+    }
+    
+    [UIView animateWithDuration:0.1f delay:0.1f options:UIViewAnimationOptionCurveEaseOut animations:^{
+        imageView.alpha = 1.f;
+        imageView.transform = CGAffineTransformIdentity;
+    } completion:^(BOOL finished) {
+        //[imageView removeFromSuperview];
+    }];
+    
+}
+
+- (void)showSuccess
+{
+    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"success"]];
+    imageView.alpha = 0.f;
+    imageView.frame = CGRectMake(CGRectGetMidX(contentView.bounds) - 20.f, CGRectGetMidY(contentView.bounds) - 20.f + ((self.titleView) ? 20 : 0.f), 40.f, 40.f);
+    imageView.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
+    
+    [contentView addSubview:[imageView AUTORELEASE]];
+    
+    if (subviewsArray && (subviewsArray.count > 0)) {
+        [UIView animateWithDuration:0.1f animations:^{
+            for (UIView *view in subviewsArray) {
+                view.alpha = 0.f;
+            }
+        }];
+        
+        if (showDividerRects) {
+            showDividerRects = NO;
+            [self setNeedsDisplay];
+        }
+    }
+    
+    [UIView animateWithDuration:0.1f delay:0.1f options:UIViewAnimationOptionCurveEaseOut animations:^{
+        imageView.alpha = 1.f;
+        imageView.transform = CGAffineTransformIdentity;
+    } completion:^(BOOL finished) {
+        //[imageView removeFromSuperview];
+    }];
+    
+}
+
+#pragma mark - User Interaction
+
+- (void)tapped:(UITapGestureRecognizer *)tap
+{    
+    CGPoint point = [tap locationInView:contentView];
+    
+    //NSLog(@"point:(%f,%f)", point.x, point.y);
+    
+    BOOL found = NO;
+    
+    //NSLog(@"subviewsArray:%@", subviewsArray);
+    
+    for (int i = 0; i < subviewsArray.count && !found; i++) {
+        UIView *view = [subviewsArray objectAtIndex:i];
+        
+        //NSLog(@"Rect:(%f,%f,%f,%f)", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
+        
+        if (CGRectContainsPoint(view.frame, point)) {
+            //The tap was within this view, so we notify the delegate, and break the loop.
+            
+            found = YES;
+            
+            //NSLog(@"Tapped subview:%d", i);
+            
+            if ([view isKindOfClass:[UIButton class]]) {
+                return;
+            }
+            
+            if (delegate && [delegate respondsToSelector:@selector(popoverView:didSelectItemAtIndex:)]) {
+                [delegate popoverView:self didSelectItemAtIndex:i];
+            }
+            
+            break;
+        }
+    }
+    
+    if (!found && CGRectContainsPoint(contentView.bounds, point)) {
+        found = YES;
+        //NSLog(@"popover box contains point, ignoring user input");
+    }
+    
+    if (!found) {
+        [self dismiss:YES];
+    }
+    
+}
+
+- (void)didTapButton:(UIButton *)sender
+{
+    int index = [subviewsArray indexOfObject:sender];
+    
+    if (index == NSNotFound) {
+        return;
+    }
+    
+    if (delegate && [delegate respondsToSelector:@selector(popoverView:didSelectItemAtIndex:)]) {
+        [delegate popoverView:self didSelectItemAtIndex:index];
+    }
+}
+
+- (void)dismiss
+{
+    [self dismiss:YES];
+}
+
+- (void)dismiss:(BOOL)animated
+{
+    if (!animated)
+    {
+        [self dismissComplete];
+    }
+    else
+    {
+        [UIView animateWithDuration:0.3f animations:^{
+            self.alpha = 0.1f;
+            self.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
+        } completion:^(BOOL finished) {
+            [self dismissComplete];
+        }];
+    }
+}
+
+- (void)dismissComplete
+{
+    [self removeFromSuperview];
+    
+    if (self.delegate && [self.delegate respondsToSelector:@selector(popoverViewDidDismiss:)]) {
+        [delegate popoverViewDidDismiss:self];
+    }
+}
+
+- (void)animateRotationToNewPoint:(CGPoint)point inView:(UIView *)view withDuration:(NSTimeInterval)duration
+{
+    [self layoutAtPoint:point inView:view];
+}
+
+#pragma mark - Drawing Routines
+
+// Only override drawRect: if you perform custom drawing.
+// An empty implementation adversely affects performance during animation.
+- (void)drawRect:(CGRect)rect
+{
+    // Drawing code
+    
+    // Build the popover path
+    CGRect frame = boxFrame;
+    
+    float xMin = CGRectGetMinX(frame);
+    float yMin = CGRectGetMinY(frame);
+    
+    float xMax = CGRectGetMaxX(frame);
+    float yMax = CGRectGetMaxY(frame);
+    
+    float radius = kBoxRadius; //Radius of the curvature.
+    
+    float cpOffset = kCPOffset; //Control Point Offset.  Modifies how "curved" the corners are.
+    
+    
+    /*
+     LT2            RT1
+     LT1⌜⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⌝RT2
+     |               |
+     |    popover    |
+     |               |
+     LB2⌞_______________⌟RB1
+     LB1           RB2
+     
+     Traverse rectangle in clockwise order, starting at LT1
+     L = Left
+     R = Right
+     T = Top
+     B = Bottom
+     1,2 = order of traversal for any given corner
+     
+     */
+    
+    UIBezierPath *popoverPath = [UIBezierPath bezierPath];
+    [popoverPath moveToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)];//LT1
+    [popoverPath addCurveToPoint:CGPointMake(xMin + radius, yMin) controlPoint1:CGPointMake(xMin, yMin + radius - cpOffset) controlPoint2:CGPointMake(xMin + radius - cpOffset, yMin)];//LT2
+    
+    //If the popover is positioned below (!above) the arrowPoint, then we know that the arrow must be on the top of the popover.
+    //In this case, the arrow is located between LT2 and RT1
+    if (!above) {
+        [popoverPath addLineToPoint:CGPointMake(arrowPoint.x - kArrowHeight, yMin)];//left side
+        [popoverPath addCurveToPoint:arrowPoint controlPoint1:CGPointMake(arrowPoint.x - kArrowHeight + kArrowCurvature, yMin) controlPoint2:arrowPoint];//actual arrow point
+        [popoverPath addCurveToPoint:CGPointMake(arrowPoint.x + kArrowHeight, yMin) controlPoint1:arrowPoint controlPoint2:CGPointMake(arrowPoint.x + kArrowHeight - kArrowCurvature, yMin)];//right side
+    }
+    
+    [popoverPath addLineToPoint:CGPointMake(xMax - radius, yMin)];//RT1
+    [popoverPath addCurveToPoint:CGPointMake(xMax, yMin + radius) controlPoint1:CGPointMake(xMax - radius + cpOffset, yMin) controlPoint2:CGPointMake(xMax, yMin + radius - cpOffset)];//RT2
+    [popoverPath addLineToPoint:CGPointMake(xMax, yMax - radius)];//RB1
+    [popoverPath addCurveToPoint:CGPointMake(xMax - radius, yMax) controlPoint1:CGPointMake(xMax, yMax - radius + cpOffset) controlPoint2:CGPointMake(xMax - radius + cpOffset, yMax)];//RB2
+    
+    //If the popover is positioned above the arrowPoint, then we know that the arrow must be on the bottom of the popover.
+    //In this case, the arrow is located somewhere between LB1 and RB2
+    if (above) {
+        [popoverPath addLineToPoint:CGPointMake(arrowPoint.x + kArrowHeight, yMax)];//right side
+        [popoverPath addCurveToPoint:arrowPoint controlPoint1:CGPointMake(arrowPoint.x + kArrowHeight - kArrowCurvature, yMax) controlPoint2:arrowPoint];//arrow point
+        [popoverPath addCurveToPoint:CGPointMake(arrowPoint.x - kArrowHeight, yMax) controlPoint1:arrowPoint controlPoint2:CGPointMake(arrowPoint.x - kArrowHeight + kArrowCurvature, yMax)];
+    }
+    
+    [popoverPath addLineToPoint:CGPointMake(xMin + radius, yMax)];//LB1
+    [popoverPath addCurveToPoint:CGPointMake(xMin, yMax - radius) controlPoint1:CGPointMake(xMin + radius - cpOffset, yMax) controlPoint2:CGPointMake(xMin, yMax - radius + cpOffset)];//LB2
+    [popoverPath closePath];
+    
+    //// General Declarations
+    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    
+    //// Shadow Declarations
+    UIColor* shadow = [UIColor colorWithWhite:0.0f alpha:kShadowAlpha];
+    CGSize shadowOffset = CGSizeMake(0, 1);
+    CGFloat shadowBlurRadius = kShadowBlur;
+    
+    //// Gradient Declarations
+    NSArray* gradientColors = [NSArray arrayWithObjects:
+                               (id)kGradientTopColor.CGColor,
+                               (id)kGradientBottomColor.CGColor, nil];
+    CGFloat gradientLocations[] = {0, 1};
+    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFTYPECAST(CFArrayRef)gradientColors), gradientLocations);
+    
+    
+    //These floats are the top and bottom offsets for the gradient drawing so the drawing includes the arrows.
+    float bottomOffset = (above ? kArrowHeight : 0.f);
+    float topOffset = (!above ? kArrowHeight : 0.f);
+    
+    //Draw the actual gradient and shadow.
+    CGContextSaveGState(context);
+    CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
+    CGContextBeginTransparencyLayer(context, NULL);
+    [popoverPath addClip];
+    CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame) - topOffset), CGPointMake(CGRectGetMidX(frame), CGRectGetMaxY(frame) + bottomOffset), 0);
+    CGContextEndTransparencyLayer(context);
+    CGContextRestoreGState(context);
+    
+    //// Cleanup
+    CGGradientRelease(gradient);
+    CGColorSpaceRelease(colorSpace);
+    
+    
+    //Draw the title background
+    if (kDrawTitleGradient) {
+        //Calculate the height of the title bg
+        float titleBGHeight = -1;
+        
+        //NSLog(@"titleView:%@", titleView);
+        
+        if (titleView != nil) {
+            titleBGHeight = kBoxPadding*2.f + titleView.frame.size.height;
+        }
+        
+        
+        //Draw the title bg height, but only if we need to.
+        if (titleBGHeight > 0.f) {
+            CGPoint startingPoint = CGPointMake(xMin, yMin + titleBGHeight);
+            CGPoint endingPoint = CGPointMake(xMax, yMin + titleBGHeight);
+            
+            UIBezierPath *titleBGPath = [UIBezierPath bezierPath];
+            [titleBGPath moveToPoint:startingPoint];
+            [titleBGPath addLineToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)];//LT1
+            [titleBGPath addCurveToPoint:CGPointMake(xMin + radius, yMin) controlPoint1:CGPointMake(xMin, yMin + radius - cpOffset) controlPoint2:CGPointMake(xMin + radius - cpOffset, yMin)];//LT2
+            
+            //If the popover is positioned below (!above) the arrowPoint, then we know that the arrow must be on the top of the popover.
+            //In this case, the arrow is located between LT2 and RT1
+            if (!above) {
+                [titleBGPath addLineToPoint:CGPointMake(arrowPoint.x - kArrowHeight, yMin)];//left side
+                [titleBGPath addCurveToPoint:arrowPoint controlPoint1:CGPointMake(arrowPoint.x - kArrowHeight + kArrowCurvature, yMin) controlPoint2:arrowPoint];//actual arrow point
+                [titleBGPath addCurveToPoint:CGPointMake(arrowPoint.x + kArrowHeight, yMin) controlPoint1:arrowPoint controlPoint2:CGPointMake(arrowPoint.x + kArrowHeight - kArrowCurvature, yMin)];//right side
+            }
+            
+            [titleBGPath addLineToPoint:CGPointMake(xMax - radius, yMin)];//RT1
+            [titleBGPath addCurveToPoint:CGPointMake(xMax, yMin + radius) controlPoint1:CGPointMake(xMax - radius + cpOffset, yMin) controlPoint2:CGPointMake(xMax, yMin + radius - cpOffset)];//RT2
+            [titleBGPath addLineToPoint:endingPoint];
+            [titleBGPath addLineToPoint:startingPoint];
+            [titleBGPath closePath];
+            
+            //// General Declarations
+            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
+            CGContextRef context = UIGraphicsGetCurrentContext();
+            
+            //// Gradient Declarations
+            NSArray* gradientColors = [NSArray arrayWithObjects:
+                                       (id)kGradientTitleTopColor.CGColor,
+                                       (id)kGradientTitleBottomColor.CGColor, nil];
+            CGFloat gradientLocations[] = {0, 1};
+            CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFTYPECAST(CFArrayRef)gradientColors), gradientLocations);
+            
+            
+            //These floats are the top and bottom offsets for the gradient drawing so the drawing includes the arrows.
+            float topOffset = (!above ? kArrowHeight : 0.f);
+            
+            //Draw the actual gradient and shadow.
+            CGContextSaveGState(context);
+            CGContextBeginTransparencyLayer(context, NULL);
+            [titleBGPath addClip];
+            CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame) - topOffset), CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame) + titleBGHeight), 0);
+            CGContextEndTransparencyLayer(context);
+            CGContextRestoreGState(context);
+            
+            UIBezierPath *dividerLine = [UIBezierPath bezierPathWithRect:CGRectMake(startingPoint.x, startingPoint.y, (endingPoint.x - startingPoint.x), 0.5f)];
+            [[UIColor colorWithRed:0.741 green:0.741 blue:0.741 alpha:0.5f] setFill];
+            [dividerLine fill];
+            
+            //// Cleanup
+            CGGradientRelease(gradient);
+            CGColorSpaceRelease(colorSpace);
+        }
+    }
+    
+    
+    
+    //Draw the divider rects if we need to
+    {
+        if (kShowDividersBetweenViews && showDividerRects) {
+            if (dividerRects && dividerRects.count > 0) {
+                for (NSValue *value in dividerRects) {
+                    CGRect rect = value.CGRectValue;
+                    rect.origin.x += contentView.frame.origin.x;
+                    rect.origin.y += contentView.frame.origin.y;
+                    
+                    UIBezierPath *dividerPath = [UIBezierPath bezierPathWithRect:rect];
+                    [kDividerColor setFill];
+                    [dividerPath fill];
+                }
+            }
+        }
+    }
+    
+    //Draw border if we need to
+    //The border is done last because it needs to be drawn on top of everything else
+    if (kDrawBorder) {
+        [kBorderColor setStroke];
+        popoverPath.lineWidth = kBorderWidth;
+        [popoverPath stroke];
+    }
+    
+}
+
+ at end
diff --git a/ios/iosremote/PopoverView/PopoverViewCompatibility.h b/ios/iosremote/PopoverView/PopoverViewCompatibility.h
new file mode 100755
index 0000000..b53d9f9
--- /dev/null
+++ b/ios/iosremote/PopoverView/PopoverViewCompatibility.h
@@ -0,0 +1,29 @@
+//
+//  PopoverView
+//  https://github.com/runway20/PopoverView
+//
+//(MIT Licensed)
+//
+//Copyright (c) 2012 Runway 20 Inc.
+//
+//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.
+
+#ifndef popover_PopoverViewCompatibility_h
+#define popover_PopoverViewCompatibility_h
+

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list