From ef4c98cdbb5394520eb68ae3d23f1b0a31b7a803 Mon Sep 17 00:00:00 2001 From: Siqi LIU Date: Tue, 30 Jul 2013 23:54:59 +0200 Subject: [PATCH] add iPad specific files & ressources Change-Id: I1bf6b4f1476ea668ea9973d8b8dfab8779cdabbc --- ios/iosremote/UserDefaults.plist | 10 + ios/iosremote/iPad_autosize.storyboard | 576 ++++++++++++++++++ ios/iosremote/iosremote/AppDelegate_ipad.h | 16 + ios/iosremote/iosremote/AppDelegate_ipad.m | 16 + ios/iosremote/iosremote/ControlVariables.h | 43 ++ ios/iosremote/iosremote/HorizontalSlideCell.h | 16 + ios/iosremote/iosremote/HorizontalSlideCell.m | 65 ++ .../iosremote/MainSplitViewController.h | 17 + .../iosremote/MainSplitViewController.m | 80 +++ ios/iosremote/iosremote/arrow_left.png | Bin 0 -> 3695 bytes ios/iosremote/iosremote/arrow_left@2x.png | Bin 0 -> 5511 bytes ios/iosremote/iosremote/arrow_right.png | Bin 0 -> 3693 bytes ios/iosremote/iosremote/arrow_right@2x.png | Bin 0 -> 5469 bytes ...oDismissKeyboardNavigationViewController.h | 13 + ...oDismissKeyboardNavigationViewController.m | 43 ++ ios/iosremote/iosremote/server_list_vc_ipad.h | 15 + ios/iosremote/iosremote/server_list_vc_ipad.m | 46 ++ .../iosremote/slideShowPreviewTable_vc_ipad.h | 21 + .../iosremote/slideShowPreviewTable_vc_ipad.m | 73 +++ .../slideShowPreviewTable_vc_iphone.h | 14 + .../slideShowPreviewTable_vc_iphone.m | 39 ++ .../iosremote/slideShowSwipeInList_ipad.h | 13 + .../iosremote/slideShowSwipeInList_ipad.m | 168 +++++ .../iosremote/slideShowSwipeInList_iphone.h | 12 + .../iosremote/slideShowSwipeInList_iphone.m | 183 ++++++ ios/iosremote/iosremote/slideShow_vc_iphone.h | 31 + ios/iosremote/iosremote/slideShow_vc_iphone.m | 401 ++++++++++++ ios/iosremote/iosremote/stopWatch.h | 31 + ios/iosremote/iosremote/stopWatch.m | 148 +++++ ios/iosremote/iosremote_ipad_icon.png | Bin 0 -> 8180 bytes ios/iosremote/iosremote_ipad_icon@2x.png | Bin 0 -> 6657 bytes ios/iosremote/iosremote_iphone_icon.png | Bin 0 -> 7206 bytes ios/iosremote/iosremote_iphone_icon@2x.png | Bin 0 -> 10861 bytes ios/iosremote/libO_icon.png | Bin 0 -> 29805 bytes ios/iosremote/nextButton_normal.png | Bin 0 -> 3600 bytes ios/iosremote/nextButton_normal@2x.png | Bin 0 -> 4704 bytes ios/iosremote/nextButton_pressed.png | Bin 0 -> 3487 bytes ios/iosremote/nextButton_pressed@2x.png | Bin 0 -> 4454 bytes ios/iosremote/previousButton_normal.png | Bin 0 -> 3592 bytes ios/iosremote/previousButton_normal@2x.png | Bin 0 -> 4655 bytes ios/iosremote/previousButton_pressed.png | Bin 0 -> 3482 bytes ios/iosremote/previousButton_pressed@2x.png | Bin 0 -> 4454 bytes ios/iosremote/slideshowRail.png | Bin 0 -> 4120 bytes ios/iosremote/slideshowRail@2x.png | Bin 0 -> 6306 bytes 44 files changed, 2090 insertions(+) create mode 100644 ios/iosremote/UserDefaults.plist create mode 100644 ios/iosremote/iPad_autosize.storyboard create mode 100644 ios/iosremote/iosremote/AppDelegate_ipad.h create mode 100644 ios/iosremote/iosremote/AppDelegate_ipad.m create mode 100644 ios/iosremote/iosremote/ControlVariables.h create mode 100644 ios/iosremote/iosremote/HorizontalSlideCell.h create mode 100644 ios/iosremote/iosremote/HorizontalSlideCell.m create mode 100644 ios/iosremote/iosremote/MainSplitViewController.h create mode 100644 ios/iosremote/iosremote/MainSplitViewController.m create mode 100644 ios/iosremote/iosremote/arrow_left.png create mode 100644 ios/iosremote/iosremote/arrow_left@2x.png create mode 100644 ios/iosremote/iosremote/arrow_right.png create mode 100644 ios/iosremote/iosremote/arrow_right@2x.png create mode 100644 ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h create mode 100644 ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m create mode 100644 ios/iosremote/iosremote/server_list_vc_ipad.h create mode 100644 ios/iosremote/iosremote/server_list_vc_ipad.m create mode 100644 ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h create mode 100644 ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m create mode 100644 ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h create mode 100644 ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m create mode 100644 ios/iosremote/iosremote/slideShowSwipeInList_ipad.h create mode 100644 ios/iosremote/iosremote/slideShowSwipeInList_ipad.m create mode 100644 ios/iosremote/iosremote/slideShowSwipeInList_iphone.h create mode 100644 ios/iosremote/iosremote/slideShowSwipeInList_iphone.m create mode 100644 ios/iosremote/iosremote/slideShow_vc_iphone.h create mode 100644 ios/iosremote/iosremote/slideShow_vc_iphone.m create mode 100644 ios/iosremote/iosremote/stopWatch.h create mode 100644 ios/iosremote/iosremote/stopWatch.m create mode 100644 ios/iosremote/iosremote_ipad_icon.png create mode 100644 ios/iosremote/iosremote_ipad_icon@2x.png create mode 100644 ios/iosremote/iosremote_iphone_icon.png create mode 100644 ios/iosremote/iosremote_iphone_icon@2x.png create mode 100644 ios/iosremote/libO_icon.png create mode 100644 ios/iosremote/nextButton_normal.png create mode 100644 ios/iosremote/nextButton_normal@2x.png create mode 100644 ios/iosremote/nextButton_pressed.png create mode 100644 ios/iosremote/nextButton_pressed@2x.png create mode 100644 ios/iosremote/previousButton_normal.png create mode 100644 ios/iosremote/previousButton_normal@2x.png create mode 100644 ios/iosremote/previousButton_pressed.png create mode 100644 ios/iosremote/previousButton_pressed@2x.png create mode 100644 ios/iosremote/slideshowRail.png create mode 100644 ios/iosremote/slideshowRail@2x.png diff --git a/ios/iosremote/UserDefaults.plist b/ios/iosremote/UserDefaults.plist new file mode 100644 index 000000000000..d7714cf2f31d --- /dev/null +++ b/ios/iosremote/UserDefaults.plist @@ -0,0 +1,10 @@ + + + + + TOUCH_POINTER_ENABLED + + TIMER_AUTOSTART_ENABLED + + + diff --git a/ios/iosremote/iPad_autosize.storyboard b/ios/iosremote/iPad_autosize.storyboard new file mode 100644 index 000000000000..2028340308d6 --- /dev/null +++ b/ios/iosremote/iPad_autosize.storyboard @@ -0,0 +1,576 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ios/iosremote/iosremote/AppDelegate_ipad.h b/ios/iosremote/iosremote/AppDelegate_ipad.h new file mode 100644 index 000000000000..0c120c466c43 --- /dev/null +++ b/ios/iosremote/iosremote/AppDelegate_ipad.h @@ -0,0 +1,16 @@ +// +// AppDelegate_ipad.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "AppDelegate.h" + +@class BasePresentationViewController; +@class MainSplitViewController; + +@interface AppDelegate_ipad : AppDelegate + +@end diff --git a/ios/iosremote/iosremote/AppDelegate_ipad.m b/ios/iosremote/iosremote/AppDelegate_ipad.m new file mode 100644 index 000000000000..ad5f2b787e91 --- /dev/null +++ b/ios/iosremote/iosremote/AppDelegate_ipad.m @@ -0,0 +1,16 @@ +// +// AppDelegate_ipad.m +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "AppDelegate_ipad.h" +#import "slideShowSwipeInList_ipad.h" +#import "MainSplitViewController.h" +#import "BasePresentationViewController.h" + +@implementation AppDelegate_ipad + +@end diff --git a/ios/iosremote/iosremote/ControlVariables.h b/ios/iosremote/iosremote/ControlVariables.h new file mode 100644 index 000000000000..b96e5b7afab0 --- /dev/null +++ b/ios/iosremote/iosremote/ControlVariables.h @@ -0,0 +1,43 @@ +// +// ControlVariables.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#ifndef iosremote_ControlVariables_h +#define iosremote_ControlVariables_h + +// Width (or length before rotation) of the table view embedded within another table view's row +#define kTableLength 768 + +// Width of the cells of the embedded table view (after rotation, which means it controls the rowHeight property) +#define kCellWidth 172 +// Height of the cells of the embedded table view (after rotation, which would be the table's width) +#define kCellHeight 129 + +// Padding for the Cell containing the article image and title +#define kArticleCellVerticalInnerPadding 6 +#define kArticleCellHorizontalInnerPadding 7 + +// Padding for the title label in an article's cell +#define kArticleTitleLabelPadding 10 + +// Vertical padding for the embedded table view within the row +#define kRowVerticalPadding 1 +// Horizontal padding for the embedded table view within the row +#define kRowHorizontalPadding 1 + +// The background color of the vertical table view +#define kVerticalTableBackgroundColor [UIColor colorWithRed:0.58823529 green:0.58823529 blue:0.58823529 alpha:1.0] + +// Background color for the horizontal table view (the one embedded inside the rows of our vertical table) +#define kHorizontalTableBackgroundColor [UIColor blackColor] + +// The background color on the horizontal table view for when we select a particular cell +#define kHorizontalTableSelectedBackgroundColor [UIColor colorWithRed:0.0 green:0.59607843 blue:0.37254902 alpha:1.0] + +#define kHorizontalTableCellHighlightedBackgroundColor [UIColor colorWithRed:0 green:0.4745098 blue:0.29019808 alpha:0.9] + +#endif diff --git a/ios/iosremote/iosremote/HorizontalSlideCell.h b/ios/iosremote/iosremote/HorizontalSlideCell.h new file mode 100644 index 000000000000..599a1d03076a --- /dev/null +++ b/ios/iosremote/iosremote/HorizontalSlideCell.h @@ -0,0 +1,16 @@ +// +// HorizontalSlideCell.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import + +@interface HorizontalSlideCell : UITableViewCell + +@property (strong, nonatomic) UIImageView *thumbnail; +@property (strong, nonatomic) UILabel *numberLabel; + +@end diff --git a/ios/iosremote/iosremote/HorizontalSlideCell.m b/ios/iosremote/iosremote/HorizontalSlideCell.m new file mode 100644 index 000000000000..e114095f3579 --- /dev/null +++ b/ios/iosremote/iosremote/HorizontalSlideCell.m @@ -0,0 +1,65 @@ +// +// HorizontalSlideCell.m +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "HorizontalSlideCell.h" +#import "ControlVariables.h" + +@implementation HorizontalSlideCell + +@synthesize thumbnail = _thumbnail; +@synthesize numberLabel = _numberLabel; + +- (NSString *)reuseIdentifier +{ + return @"HorizontalTableSlideCell"; +} + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if (self) { + // Initialization code + } + return self; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + + self.thumbnail = [[UIImageView alloc] initWithFrame:CGRectMake(kArticleCellHorizontalInnerPadding, kArticleCellVerticalInnerPadding, kCellWidth - kArticleCellHorizontalInnerPadding * 2, kCellHeight - kArticleCellVerticalInnerPadding * 2)]; + self.thumbnail.opaque = YES; + + [self.contentView addSubview:self.thumbnail]; + + self.numberLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.thumbnail.frame.size.width * 0.8, self.thumbnail.frame.size.height * 0.8, self.thumbnail.frame.size.width * 0.2, self.thumbnail.frame.size.height * 0.2)]; + self.numberLabel.opaque = YES; + self.numberLabel.backgroundColor = kHorizontalTableCellHighlightedBackgroundColor; + self.numberLabel.textColor = [UIColor whiteColor]; + self.numberLabel.font = [UIFont boldSystemFontOfSize:11]; + self.numberLabel.textAlignment = UITextAlignmentCenter; + self.numberLabel.numberOfLines = 1; + [self.thumbnail addSubview:self.numberLabel]; + + self.backgroundColor = [UIColor colorWithRed:0 green:0.40784314 blue:0.21568627 alpha:1.0]; + self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.thumbnail.frame]; + self.selectedBackgroundView.backgroundColor = kHorizontalTableSelectedBackgroundColor; + + self.transform = CGAffineTransformMakeRotation(M_PI * 0.5); + + return self; +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated +{ + [super setSelected:selected animated:animated]; + + // Configure the view for the selected state +} + +@end diff --git a/ios/iosremote/iosremote/MainSplitViewController.h b/ios/iosremote/iosremote/MainSplitViewController.h new file mode 100644 index 000000000000..2ae6eff403af --- /dev/null +++ b/ios/iosremote/iosremote/MainSplitViewController.h @@ -0,0 +1,17 @@ +// +// PresentationViewController.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import +#import "slideShowPreviewTable_vc_ipad.h" + +@interface MainSplitViewController : UISplitViewController + +- (void) didReceivePresentationStarted; + +@property (strong, nonatomic) UIViewController * splitController; +@end diff --git a/ios/iosremote/iosremote/MainSplitViewController.m b/ios/iosremote/iosremote/MainSplitViewController.m new file mode 100644 index 000000000000..fbb8b0203828 --- /dev/null +++ b/ios/iosremote/iosremote/MainSplitViewController.m @@ -0,0 +1,80 @@ +// +// PresentationViewController.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "MainSplitViewController.h" +#import "server_list_vc_ipad.h" +#import "CommunicationManager.h" +#import "BasePresentationViewController.h" +#import "slideShowSwipeInList_ipad.h" +#import +#import + +@interface MainSplitViewController () + +@property UINavigationController * masterViewController; +@property BasePresentationViewController * detailViewController; + +@end + +@implementation MainSplitViewController + +# pragma mark - System defaults + +- (BOOL) shouldAutorotate +{ + return YES; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return YES; +} + + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + [[[[UIApplication sharedApplication] delegate] window] setRootViewController:self]; + // Do any additional setup after loading the view. + + self.detailViewController = [self.viewControllers objectAtIndex:1]; + self.masterViewController = [self.viewControllers objectAtIndex:0]; + + self.delegate = self.detailViewController; +} + +-(void) viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void) didReceivePresentationStarted +{ + [self.detailViewController hideMaster:NO]; + [self dismissViewControllerAnimated:YES completion:nil]; +// [(UITableView *)[(slideShowSwipeInList_ipad *)[[self viewControllers] objectAtIndex:2] view] reloadData]; + [(slideShowSwipeInList_ipad *)[(UINavigationController *)[[self viewControllers] objectAtIndex:0] topViewController] didReceivePresentationStarted]; + [(BasePresentationViewController *)[[self viewControllers] objectAtIndex:1] setWelcomePageVisible:NO]; +} + +@end diff --git a/ios/iosremote/iosremote/arrow_left.png b/ios/iosremote/iosremote/arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..d99560fea1b6c1960f6a9b35294110668aa0061a GIT binary patch literal 3695 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 N002ovPDHLkV1fvX4rc%W literal 0 HcmV?d00001 diff --git a/ios/iosremote/iosremote/arrow_left@2x.png b/ios/iosremote/iosremote/arrow_left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dba2497f936d2a7128a79f992808b39cb5e9315b GIT binary patch literal 5511 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 JPDHLkV1nH&cKrYV literal 0 HcmV?d00001 diff --git a/ios/iosremote/iosremote/arrow_right.png b/ios/iosremote/iosremote/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..e271d4655f8e0be28a7b9be192bb47c137f050f4 GIT binary patch literal 3693 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 LNkvXXu0mjfDDDYy literal 0 HcmV?d00001 diff --git a/ios/iosremote/iosremote/arrow_right@2x.png b/ios/iosremote/iosremote/arrow_right@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..44be9d652a0084afae672a16472762ebfdaf3810 GIT binary patch literal 5469 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 TJTI*D00000NkvXXu0mjfhXY{e literal 0 HcmV?d00001 diff --git a/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h new file mode 100644 index 000000000000..93d1da1c2d7e --- /dev/null +++ b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.h @@ -0,0 +1,13 @@ +// +// autoDismissKeyboardNavigationViewController.h +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import + +@interface autoDismissKeyboardNavigationViewController : UINavigationController + +@end diff --git a/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m new file mode 100644 index 000000000000..fb6039815102 --- /dev/null +++ b/ios/iosremote/iosremote/autoDismissKeyboardNavigationViewController.m @@ -0,0 +1,43 @@ +// +// autoDismissKeyboardNavigationViewController.m +// iosremote +// +// Created by Siqi Liu on 7/28/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "autoDismissKeyboardNavigationViewController.h" + +@interface autoDismissKeyboardNavigationViewController () + +@end + +@implementation autoDismissKeyboardNavigationViewController + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (BOOL)disablesAutomaticKeyboardDismissal +{ + return NO; +} + +@end diff --git a/ios/iosremote/iosremote/server_list_vc_ipad.h b/ios/iosremote/iosremote/server_list_vc_ipad.h new file mode 100644 index 000000000000..2fb881ec4143 --- /dev/null +++ b/ios/iosremote/iosremote/server_list_vc_ipad.h @@ -0,0 +1,15 @@ +// +// server_list_vc_ipad.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "serverList_vc.h" + +@interface server_list_vc_ipad : server_list_vc + +- (IBAction)cancelModalView:(id)sender; + +@end diff --git a/ios/iosremote/iosremote/server_list_vc_ipad.m b/ios/iosremote/iosremote/server_list_vc_ipad.m new file mode 100644 index 000000000000..bb4dea61728d --- /dev/null +++ b/ios/iosremote/iosremote/server_list_vc_ipad.m @@ -0,0 +1,46 @@ +// +// server_list_vc_ipad.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "server_list_vc_ipad.h" + +@interface server_list_vc_ipad () + +@end + +@implementation server_list_vc_ipad + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)viewDidUnload { + [super viewDidUnload]; +} + +#pragma mark - Actions +- (IBAction)cancelModalView:(id)sender { + [self.presentingViewController dismissModalViewControllerAnimated:YES]; +} +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h new file mode 100644 index 000000000000..ded75b0ec920 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.h @@ -0,0 +1,21 @@ +// +// slideShowPreview_vc~ipad.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowPreviewTable_vc.h" + +@protocol MainSplitViewControllerProtocol + +- (void) didReceivePresentationStarted; + +@end + +@interface slideShowPreviewTable_vc_ipad : slideShowPreviewTable_vc + +@property (strong, nonatomic) id delegate; + +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m new file mode 100644 index 000000000000..93474628d57c --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_ipad.m @@ -0,0 +1,73 @@ +// +// slideShowPreview_vc~ipad.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowPreviewTable_vc_ipad.h" +#import "slideShowPreviewTable_vc.h" +#import "CommunicationManager.h" +#import "CommandTransmitter.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" +#import "MainSplitViewController.h" + +@interface slideShowPreviewTable_vc_ipad () + +@end + +@implementation slideShowPreviewTable_vc_ipad + +#pragma mark - System defaults + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void) viewDidLoad +{ + [super viewDidLoad]; + if (self.navigationController) + self.delegate = (MainSplitViewController *) self.navigationController.presentingViewController; + else + self.delegate = (MainSplitViewController *) self.presentingViewController; + NSLog(@"%@", [self.delegate class]); + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + self.optionsArray = [NSArray arrayWithObjects:OPTION_TIMER, nil]; + } else + self.optionsArray = [NSArray arrayWithObjects:OPTION_TIMER, OPTION_POINTER, nil]; + self.comManager = [CommunicationManager sharedComManager]; + self.comManager.delegate = self; +} + +- (void) viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + if ([self.comManager.interpreter.slideShow size] > 0){ + NSLog(@"3"); + [self.delegate didReceivePresentationStarted]; + } + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + self.slideShowStartObserver = [[NSNotificationCenter defaultCenter] addObserverForName:STATUS_CONNECTED_SLIDESHOW_RUNNING + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self.delegate didReceivePresentationStarted]; + }]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + + +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h new file mode 100644 index 000000000000..1f2d5d5c81f1 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.h @@ -0,0 +1,14 @@ +// +// slideShowPreview_vc~iphone.h +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import +#import "slideShowPreviewTable_vc.h" + +@interface slideShowPreviewTable_vc_iphone : slideShowPreviewTable_vc + +@end diff --git a/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m new file mode 100644 index 000000000000..51cf96a4d638 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowPreviewTable_vc_iphone.m @@ -0,0 +1,39 @@ +// +// slideShowPreview_vc~iphone.m +// iosremote +// +// Created by Siqi Liu on 7/26/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowPreviewTable_vc_iphone.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" + +@implementation slideShowPreviewTable_vc_iphone + +- (void) viewDidLoad +{ + [super viewDidLoad]; + self.optionsArray = [NSArray arrayWithObjects:OPTION_TIMER, OPTION_POINTER, nil]; + self.comManager = [CommunicationManager sharedComManager]; + self.comManager.delegate = self; +} + +- (void) viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + if ([self.comManager.interpreter.slideShow size] > 0){ + [self performSegueWithIdentifier:@"slideShowSegue" sender:self]; + } + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + self.slideShowStartObserver = [[NSNotificationCenter defaultCenter] addObserverForName:STATUS_CONNECTED_SLIDESHOW_RUNNING + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self performSegueWithIdentifier:@"slideShowSegue" sender:self]; + }]; +} + +@end diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_ipad.h b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.h new file mode 100644 index 000000000000..3bb1a5d5cd7a --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.h @@ -0,0 +1,13 @@ +// +// slideShowSwipeInList~ipad.h +// iosremote +// +// Created by Siqi Liu on 7/27/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +@interface slideShowSwipeInList_ipad : UITableViewController + +- (void) didReceivePresentationStarted; + +@end \ No newline at end of file diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_ipad.m b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.m new file mode 100644 index 000000000000..77c6258ff188 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_ipad.m @@ -0,0 +1,168 @@ +// +// slideShowSwipeInList~ipad.m +// iosremote +// +// Created by Siqi Liu on 7/27/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "slideShowSwipeInList_ipad.h" +#import "CommunicationManager.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" +#import "CommandTransmitter.h" +#import "SWRevealViewController.h" +#import "slideShowPreviewTable_vc.h" +#import + +@interface slideShowSwipeInList_ipad () + +@property (nonatomic, strong) CommunicationManager *comManager; +@property (nonatomic, strong) SlideShow *slideshow; +@property (nonatomic, strong) id slideChangedObserver; + +@end + +@implementation slideShowSwipeInList_ipad + +@synthesize comManager = _comManager; +@synthesize slideshow = _slideshow; +@synthesize slideChangedObserver = _slideChangedObserver; + +dispatch_queue_t backgroundQueue; + +- (void) handleBack:(id)sender +{ + [self.comManager.transmitter stopPresentation]; + [self.tableView reloadData]; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (SlideShow *)slideshow +{ + return self.comManager.interpreter.slideShow; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + self.comManager = [CommunicationManager sharedComManager]; + self.slideshow.secondaryDelegate = self; + + UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop Presentation" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(handleBack:)]; + [backButton setTintColor:[UIColor redColor]]; + self.navigationItem.leftBarButtonItem = backButton; + + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + self.slideChangedObserver =[center addObserverForName:MSG_SLIDE_CHANGED + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + if ([self.tableView numberOfRowsInSection:0] > 0){ + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.slideshow.currentSlide inSection:0]; + [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone]; + [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; + } + }]; + UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"slideshowRail"]]; + [bgImageView setFrame:self.tableView.frame]; + + self.tableView.backgroundView = bgImageView; +} + +- (void)viewDidUnload +{ + [[NSNotificationCenter defaultCenter] removeObserver:self.slideChangedObserver]; + [super viewDidUnload]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void) viewWillAppear:(BOOL)animated +{ + [self.tableView reloadData]; + [super viewWillAppear:animated]; +} + +- (void) viewDidAppear:(BOOL)animated +{ + if ([self.comManager.interpreter.slideShow size] > 0) { + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.slideshow.currentSlide + inSection:0]; + [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; + [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; + } +} + +- (void) didReceivePresentationStarted +{ + self.slideshow.secondaryDelegate = self; + [self.tableView reloadData]; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 1; +} + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + return [self.slideshow size]; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + return @"Slides"; +} + + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"slide"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; + UILabel * slideNumber = (UILabel *)[cell viewWithTag:2]; + + // Starting 20, all tags are used for thumbnails in this sidebar + [cell setTag:20+indexPath.row]; + [self.slideshow getContentAtIndex:indexPath.row forView:cell]; + [slideNumber setText:[NSString stringWithFormat:@"%u", indexPath.row+1]]; + return cell; +} + +- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ + // Otherwise selection will disable background color and make slide number unreadable + if(cell.selected){ + UILabel *label = (UILabel *)[cell viewWithTag:2]; + if ([label backgroundColor]!=[UIColor lightGrayColor]) { + [label setBackgroundColor:[UIColor lightGrayColor]]; + } + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + [self.comManager.transmitter gotoSlide:indexPath.row]; + [[[self.tableView cellForRowAtIndexPath:indexPath] viewWithTag:2] setBackgroundColor:[UIColor lightGrayColor]]; +} + +@end diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_iphone.h b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.h new file mode 100644 index 000000000000..2953e59591cb --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.h @@ -0,0 +1,12 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#import + +@interface slideShowSwipeInList : UITableViewController + +@end diff --git a/ios/iosremote/iosremote/slideShowSwipeInList_iphone.m b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.m new file mode 100644 index 000000000000..67db07ac3a36 --- /dev/null +++ b/ios/iosremote/iosremote/slideShowSwipeInList_iphone.m @@ -0,0 +1,183 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#import "slideShowSwipeInList_iphone.h" +#import "CommunicationManager.h" +#import "CommandInterpreter.h" +#import "SlideShow.h" +#import "CommandTransmitter.h" +#import "SWRevealViewController.h" +#import "slideShowPreviewTable_vc.h" +#import "ControlVariables.h" +#import "stopWatch.h" +#import + +@interface slideShowSwipeInList () + +@property (nonatomic, strong) CommunicationManager *comManager; +@property (nonatomic, strong) SlideShow *slideshow; +@property (nonatomic, strong) stopWatch *stopWatch; + +@end + +@implementation slideShowSwipeInList + +@synthesize comManager = _comManager; +@synthesize slideshow = _slideshow; + +dispatch_queue_t backgroundQueue; + +- (void) viewDidLoad +{ + [super viewDidLoad]; + + self.comManager = [CommunicationManager sharedComManager]; + self.slideshow = self.comManager.interpreter.slideShow; + self.slideshow.secondaryDelegate = self; + + self.clearsSelectionOnViewWillAppear = NO; + + self.stopWatch = [[stopWatch alloc] init]; + if ([[NSUserDefaults standardUserDefaults] boolForKey:KEY_TIMER]) { + [self.stopWatch start]; + } + + UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"slideshowRail.png"]]; + [tempImageView setFrame:self.tableView.frame]; + + self.tableView.backgroundView = tempImageView; +} + +- (void) viewDidAppear:(BOOL)animated +{ + if (!self.stopWatch.set) { + [self.stopWatch setupWithTableViewCell:[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]]; + } + [self.stopWatch updateStartButtonIcon]; + if ([self.comManager.interpreter.slideShow size] > 0) { + [self.stopWatch updateStartButtonIcon]; + NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.slideshow.currentSlide + inSection:1]; + [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; + [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO]; + } +} + +- (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender +{ + // configure the segue. + // in this case we dont swap out the front view controller, which is a UINavigationController. + // but we could.. + if ( [segue isKindOfClass: [SWRevealViewControllerSegue class]] ) + { + SWRevealViewControllerSegue* rvcs = (SWRevealViewControllerSegue*) segue; + + SWRevealViewController* rvc = self.revealViewController; + NSAssert( rvc != nil, @"oops! must have a revealViewController" ); + + NSAssert( [rvc.frontViewController isKindOfClass: [UINavigationController class]], @"oops! for this segue we want a permanent navigation controller in the front!" ); + + rvcs.performBlock = ^(SWRevealViewControllerSegue* rvc_segue, UIViewController* svc, UIViewController* dvc) { + + UINavigationController* nc = (UINavigationController*)rvc.frontViewController; + [nc setViewControllers: @[ dvc ] animated: YES ]; + + [rvc setFrontViewPosition: FrontViewPositionLeft animated: YES]; + }; + } +} + + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + return 2; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + // Section one used for stopwatch + if (section == 0) + return 1; + else + return [self.slideshow size]; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + switch (section) { + case 0: + return @"Stop Watch"; + break; + case 1: + return @"Slides"; + default: + break; + } + return nil; +} + +- (void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath +{ + [self performSegueWithIdentifier: @"sw_customized_segue" sender: [tableView cellForRowAtIndexPath: indexPath]]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section == 0) { + static NSString *CellIdentifier = @"stopWatch"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; + [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; + cell.contentView.backgroundColor = [UIColor whiteColor]; + return cell; + } else { + static NSString *CellIdentifier = @"slide"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; + UILabel * slideNumber = (UILabel *)[cell viewWithTag:2]; + + // Starting 20, all tags are used for thumbnails in this sidebar + [cell setTag:20+indexPath.row]; + [self.slideshow getContentAtIndex:indexPath.row forView:cell]; + [slideNumber setText:[NSString stringWithFormat:@"%u", indexPath.row+1]]; + + + cell.backgroundColor = [UIColor colorWithRed:0 green:0.40784314 blue:0.21568627 alpha:1.0]; + + return cell; + } +} + +- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ + // Otherwise selection will disable background color and make slide number unreadable + if(indexPath.section == 1 && cell.selected){ + UILabel *label = (UILabel *)[cell viewWithTag:2]; + if ([label backgroundColor]!=[UIColor lightGrayColor]) { + [label setBackgroundColor:[UIColor lightGrayColor]]; + } + } +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.section == 0) + return; + [self.comManager.transmitter gotoSlide:indexPath.row]; + [[[self.tableView cellForRowAtIndexPath:indexPath] viewWithTag:2] setBackgroundColor:[UIColor lightGrayColor]]; + [self.revealViewController revealToggle: self]; +} + + +- (void)viewDidUnload { + [self setStopWatch:nil]; + [super viewDidUnload]; +} + +@end diff --git a/ios/iosremote/iosremote/slideShow_vc_iphone.h b/ios/iosremote/iosremote/slideShow_vc_iphone.h new file mode 100644 index 000000000000..67f3b6026c91 --- /dev/null +++ b/ios/iosremote/iosremote/slideShow_vc_iphone.h @@ -0,0 +1,31 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#import +#import "SlideShow.h" + +@interface slideShow_vc : UIViewController + +- (IBAction)nextSlideAction:(id)sender; +- (IBAction)previousSlideAction:(id)sender; +- (IBAction)pointerAction:(id)sender; +- (IBAction)accPointerAction:(id)sender; + +@property (weak, nonatomic) IBOutlet UIView *notesView; +@property (weak, nonatomic) IBOutlet UIWebView *lecturer_notes; +@property (weak, nonatomic) IBOutlet UIImageView *slideView; +@property (weak, nonatomic) IBOutlet UIImageView *secondarySlideView; +@property (weak, nonatomic) IBOutlet UILabel *slideNumber; + +@property (weak, nonatomic) IBOutlet UIView *movingPointer; +@property (weak, nonatomic) IBOutlet UIImageView *touchPointerImage; +@property (weak, nonatomic) IBOutlet UIView *blockingView; +@property (weak, nonatomic) IBOutlet UIView *bottomView; +@property (weak, nonatomic) IBOutlet UIButton *pointerBtn; + +@end diff --git a/ios/iosremote/iosremote/slideShow_vc_iphone.m b/ios/iosremote/iosremote/slideShow_vc_iphone.m new file mode 100644 index 000000000000..6ddde90409d9 --- /dev/null +++ b/ios/iosremote/iosremote/slideShow_vc_iphone.m @@ -0,0 +1,401 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#import "slideShow_vc_iphone.h" +#import "SlideShow.h" +#import "UIViewTransitionCategory.h" +#import "CommunicationManager.h" +#import "SWRevealViewController.h" +#import "CommandInterpreter.h" +#import "CommandTransmitter.h" +#import "slideShowPreviewTable_vc.h" +#import +#import + + +#define CURRENT_SLIDE_IMAGEVIEW 1 +#define NEXT_SLIDE_IMAGEVIEW 2 +#define TOUCH_POINTER_VIEW 3 +#define CURRENT_SLIDE_NOTES 4 + +@interface slideShow_vc () + +@property (nonatomic, strong) CommunicationManager *comManager; +@property (nonatomic, strong) id slideShowImageNoteReadyObserver; +@property (nonatomic, strong) id slideShowFinishedObserver; +@property (nonatomic, strong) SlideShow* slideshow; + +@property BOOL pointerCalibrationOn; +@property CGPoint refLeftUpperGravity; +@property CGPoint refRightUpperGravity; +@property CGPoint refRightLowerGravity; + +// SWReveal Controller +@property (readwrite) IBOutlet UIBarButtonItem* revealButtonItem; + +@property int count; + +@end + +@implementation slideShow_vc + +@synthesize comManager = _comManager; +@synthesize slideShowImageNoteReadyObserver = _slideShowImageNoteReadyObserver; +@synthesize slideShowFinishedObserver = _slideShowFinishedObserver; +@synthesize slideshow = _slideshow; + +#pragma mark - Pointer + +- (CMMotionManager *)motionManager +{ + CMMotionManager *motionManager = nil; + + id appDelegate = [UIApplication sharedApplication].delegate; + + if ([appDelegate respondsToSelector:@selector(motionManager)]) { + motionManager = [appDelegate motionManager]; + } + + return motionManager; +} + +- (void)startMotionDetect +{ + // __block float stepMoveFactorX = 5; + // __block float stepMoveFactorY = 5; + // __block double refX, refY; + + [self.motionManager + startAccelerometerUpdatesToQueue:[[NSOperationQueue alloc] init] + withHandler:^(CMAccelerometerData *data, NSError *error) + { + + dispatch_async(dispatch_get_main_queue(), + ^{ + CGRect rect = self.movingPointer.frame; + NSLog(@"x:%f y:%f z:%f", data.acceleration.x, data.acceleration.y, data.acceleration.z); + // Used to calibrate pointer based on initial position + // if (self.pointerCalibrationOn){ + // refX = data.acceleration.x; + // refY = data.acceleration.y; + // self.pointerCalibrationOn = NO; + // } + // float movetoX = rect.origin.x + ((data.acceleration.x - refX) * stepMoveFactorX); + + float movetoX = self.touchPointerImage.frame.origin.x + self.touchPointerImage.frame.size.width * ABS(data.acceleration.x - self.refLeftUpperGravity.x) / ABS(self.refRightUpperGravity.x - self.refLeftUpperGravity.x); + float maxX = self.touchPointerImage.frame.origin.x + self.touchPointerImage.frame.size.width - rect.size.width; + + // float movetoY = (rect.origin.y) + ((data.acceleration.y - refY) * stepMoveFactorY); + float movetoY = self.touchPointerImage.frame.origin.y + self.touchPointerImage.frame.size.height * ABS(data.acceleration.y - self.refRightUpperGravity.y) / ABS(self.refRightLowerGravity.y - self.refRightUpperGravity.y); + float maxY = self.touchPointerImage.frame.origin.y + self.touchPointerImage.frame.size.height; + + if ( movetoX > self.touchPointerImage.frame.origin.x && movetoX < maxX ) { + rect.origin.x = movetoX; + }; + + if ( movetoY > self.touchPointerImage.frame.origin.y && movetoY < maxY ) { + rect.origin.y = movetoY; + }; + + [UIView animateWithDuration:0 delay:0 + options:UIViewAnimationOptionCurveEaseIn + animations:^{ + self.movingPointer.frame = rect; + } + completion:nil + ]; + }); + }]; +} + +- (IBAction)accPointerAction:(id)sender{ + BOOL acc = [[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER]; + if (!acc) { + static BOOL pointer = NO; + if (!pointer){ + [self startMotionDetect]; + [self.movingPointer setHidden:NO]; + } + else { + [self.motionManager stopAccelerometerUpdates]; + self.pointerCalibrationOn = NO; + [self.movingPointer setHidden:YES]; + } + pointer = !pointer; + } +} + +- (IBAction)pointerAction:(id)sender { + if (self.count == 0 || self.count == 1){ + CGPoint p; + p.x = [self.motionManager accelerometerData].acceleration.x; + p.y = [self.motionManager accelerometerData].acceleration.y; + self.refLeftUpperGravity = p; + if (self.count == 1) { + UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration" + message:@"Upper left corner calibrated, now point your device to the upper right corner of the screen and click Pointer button again" + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:@"Help", nil]; + [message show]; + } + ++self.count; + } else if (self.count == 2 || self.count == 3) { + CGPoint p; + p.x = [self.motionManager accelerometerData].acceleration.x; + p.y = [self.motionManager accelerometerData].acceleration.y; + self.refRightUpperGravity = p; + if (self.count == 3) { + UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration" + message:@"Upper right corner calibrated, now point your device to the lower right corner of the screen and click Pointer button again!" + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:@"Help", nil]; + [message show]; + } + ++self.count; + } else if (self.count == 4 || self.count == 5) { + CGPoint p; + p.x = [self.motionManager accelerometerData].acceleration.x; + p.y = [self.motionManager accelerometerData].acceleration.y; + self.refRightLowerGravity = p; + if (self.count == 5) { + UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Calibration" + message:@"Lower right corner calibrated, enjoy your pointer!" + delegate:nil + cancelButtonTitle:@"OK" + otherButtonTitles:@"Help", nil]; + [message show]; + } + ++self.count; + } else { + if ([self.touchPointerImage isHidden]){ + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage]; + CGPoint p = self.view.center; + p.y -= 50; + self.touchPointerImage.center = p; + } + [self.touchPointerImage fadeInfadeOutwithDuration:0.0 maxAlpha:1.0]; + [self.blockingView fadeInfadeOutwithDuration:0.0 maxAlpha:0.7]; + } +} + +- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { + UITouch *touch = [[event allTouches] anyObject]; + if (!self.touchPointerImage.isHidden){ + CGPoint loc = [touch locationInView:self.touchPointerImage]; + if (loc.x >= 0 && loc.x <= self.touchPointerImage.frame.size.width + && loc.y >= 0 && loc.y <= self.touchPointerImage.frame.size.height){ + CGPoint pointerInPercentage; + pointerInPercentage.x = loc.x / self.touchPointerImage.frame.size.width; + pointerInPercentage.y = loc.y / self.touchPointerImage.frame.size.height; + [self.comManager.transmitter setPointerVisibleAt:pointerInPercentage]; + + CGPoint p; + p.x = loc.x + self.touchPointerImage.frame.origin.x; + p.y = loc.y + self.touchPointerImage.frame.origin.y; + self.movingPointer.center = p; + [self.movingPointer setHidden:NO]; + } + } + + if ([touch view] == self.secondarySlideView) + { + // Change to the next slide when secondary slide is clicked + [self.comManager.transmitter gotoSlide:self.slideshow.currentSlide + 1]; + } +} + +- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event +{ + if (!self.touchPointerImage.isHidden){ + UITouch *touch = [[event allTouches] anyObject]; + CGPoint loc = [touch locationInView:self.touchPointerImage]; + if (loc.x >= 0 && loc.x <= self.touchPointerImage.frame.size.width + && loc.y >= self.movingPointer.frame.size.height && loc.y <= self.touchPointerImage.frame.size.height - self.movingPointer.frame.size.height) + { + CGPoint pointerInPercentage; + pointerInPercentage.x = loc.x / self.touchPointerImage.frame.size.width; + pointerInPercentage.y = loc.y / self.touchPointerImage.frame.size.height; + [self.comManager.transmitter pointerCoordination:pointerInPercentage]; + + CGPoint p; + p.x = loc.x + self.touchPointerImage.frame.origin.x; + p.y = loc.y + self.touchPointerImage.frame.origin.y; + self.movingPointer.center = p; + } + } +} + +- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event +{ + [self.movingPointer setHidden:YES]; + [self.comManager.transmitter setPointerDismissed]; +} + +#pragma mark - System defaults + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation +{ + return (interfaceOrientation == UIInterfaceOrientationPortrait); +} + +- (NSUInteger) supportedInterfaceOrientations +{ + return UIInterfaceOrientationMaskPortrait; +} + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (SlideShow *)slideshow +{ + return self.comManager.interpreter.slideShow; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + // Unique tag assignment. Don't use 0 as it's default. 0-10 for central VC + [self.slideView setTag:CURRENT_SLIDE_IMAGEVIEW]; + [self.secondarySlideView setTag:NEXT_SLIDE_IMAGEVIEW]; + [self.lecturer_notes setTag:CURRENT_SLIDE_NOTES]; + [self.touchPointerImage setTag:TOUCH_POINTER_VIEW]; + + self.comManager = [CommunicationManager sharedComManager]; + self.slideshow.delegate = self; + + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage]; + [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]]; + + + UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Stop Presentation" + style:UIBarButtonItemStyleBordered + target:self + action:@selector(handleBack:)]; + [backButton setTintColor:[UIColor redColor]]; + self.revealViewController.navigationItem.leftBarButtonItem = backButton; + + self.revealButtonItem = [[UIBarButtonItem alloc] initWithImage: [UIImage imageNamed:@"more_icon.png"] + style:UIBarButtonItemStyleBordered + target:self.revealViewController + action:@selector( revealToggle: )]; + self.revealViewController.navigationItem.rightBarButtonItem = self.revealButtonItem; + [self.navigationController.navigationBar addGestureRecognizer: self.revealViewController.panGestureRecognizer]; + + self.pointerCalibrationOn = NO; + self.movingPointer.layer.cornerRadius = 3; + + BOOL acc = [[NSUserDefaults standardUserDefaults] boolForKey:KEY_POINTER]; + if (!acc) { + // Hook up acc detection + [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpOutside]; + [self.pointerBtn addTarget:self action:@selector(pointerAction:) forControlEvents:UIControlEventTouchUpInside]; + } else { + // Disable all calibration functions for acc based pointer + self.count = INT_MAX; + } +} + +- (void) handleBack:(id)sender +{ + [self.comManager.transmitter stopPresentation]; + [self.navigationController popViewControllerAnimated:YES]; +} + + +- (void) viewDidAppear:(BOOL)animated +{ + NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; + NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; + + self.slideShowImageNoteReadyObserver =[center addObserverForName:MSG_SLIDE_CHANGED + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.slideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.touchPointerImage]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide+1 forView:self.secondarySlideView]; + [self.slideshow getContentAtIndex:self.slideshow.currentSlide forView:self.lecturer_notes]; + [self.slideNumber setText:[NSString stringWithFormat:@"%u/%u", [self.slideshow currentSlide]+1, [self.slideshow size]]]; + + }]; + + self.slideShowFinishedObserver = [center addObserverForName:STATUS_CONNECTED_NOSLIDESHOW + object:nil + queue:mainQueue + usingBlock:^(NSNotification *note) { + [self.navigationController popViewControllerAnimated:YES]; + }]; + self.slideView.layer.shadowColor = [[UIColor blackColor] CGColor]; + self.slideView.layer.shadowOpacity = 0.5; + self.slideView.layer.shadowRadius = 4.0; + self.slideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f); + self.slideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.slideView.bounds].CGPath; + self.slideView.clipsToBounds = NO; + + self.secondarySlideView.layer.shadowColor = [[UIColor blackColor] CGColor]; + self.secondarySlideView.layer.shadowOpacity = 0.5; + self.secondarySlideView.layer.shadowRadius = 4.0; + self.secondarySlideView.layer.shadowOffset = CGSizeMake(3.0f, 3.0f); + self.secondarySlideView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.secondarySlideView.bounds].CGPath; + self.secondarySlideView.clipsToBounds = NO; + + // We calibrate once when presentation starts. needs a users alert to inform users to point at the center of the screen at the beginning + self.pointerCalibrationOn = YES; + + [super viewDidAppear:animated]; +} + +- (void) viewDidDisappear:(BOOL)animated +{ + self.count = 0; + [[NSNotificationCenter defaultCenter] removeObserver:self.slideShowFinishedObserver]; + [[NSNotificationCenter defaultCenter] removeObserver:self.slideShowImageNoteReadyObserver]; + [super viewDidDisappear:animated]; +} + + + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)viewDidUnload { + [self setLecturer_notes:nil]; + [self setSlideView:nil]; + [self setSlideNumber:nil]; + [self setSecondarySlideView:nil]; + [self setNotesView:nil]; + [self setMovingPointer:nil]; + [self setBlockingView:nil]; + [self setBottomView:nil]; + [self setPointerBtn:nil]; + [super viewDidUnload]; +} + +- (IBAction)nextSlideAction:(id)sender { + [[self.comManager transmitter] nextTransition]; +} + +- (IBAction)previousSlideAction:(id)sender { + [[self.comManager transmitter] previousTransition]; +} + +@end diff --git a/ios/iosremote/iosremote/stopWatch.h b/ios/iosremote/iosremote/stopWatch.h new file mode 100644 index 000000000000..bd0edde8e6ef --- /dev/null +++ b/ios/iosremote/iosremote/stopWatch.h @@ -0,0 +1,31 @@ +// +// stopWatch.h +// iosremote +// +// Created by Siqi Liu on 7/29/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import + +#define TIMER_STATE_RUNNING 0 +#define TIMER_STATE_PAUSED 1 +#define TIMER_STATE_CLEARED 2 + +@interface stopWatch : NSObject + +// StopWatch +@property (strong, nonatomic) NSTimer *stopWatchTimer; +@property (strong, nonatomic) NSDate *startDate; +@property BOOL set; + +- (stopWatch *) initWithStartButton:(UIButton *)startButton + ClearButton:(UIButton *)clearButton + TimeLabel:(UILabel *)timeLabel; +- (void) setupWithTableViewCell:(UITableViewCell *)cell; + +- (void) start; +- (void) clear; +- (void) updateStartButtonIcon; + +@end diff --git a/ios/iosremote/iosremote/stopWatch.m b/ios/iosremote/iosremote/stopWatch.m new file mode 100644 index 000000000000..b955a12d1f87 --- /dev/null +++ b/ios/iosremote/iosremote/stopWatch.m @@ -0,0 +1,148 @@ +// +// stopWatch.m +// iosremote +// +// Created by Siqi Liu on 7/29/13. +// Copyright (c) 2013 libreoffice. All rights reserved. +// + +#import "stopWatch.h" + +@interface stopWatch () + +@property NSTimeInterval lastInterval; +@property int state; +@property (weak, nonatomic) UIButton * startButton; +@property (weak, nonatomic) UIButton * clearButton; +@property (weak, nonatomic) UILabel * timeLabel; + +@end + +@implementation stopWatch +@synthesize startButton = _startButton; +@synthesize clearButton = _clearButton; +@synthesize timeLabel = _timeLabel; + +@synthesize lastInterval = _lastInterval; + +- (stopWatch *) init +{ + self = [super init]; + self.state = TIMER_STATE_CLEARED; + self.set = NO; + return self; +} + +- (stopWatch *) initWithStartButton:(UIButton *)startButton + ClearButton:(UIButton *)clearButton + TimeLabel:(UILabel *)timeLabel +{ + self = [self init]; + + self.startButton = startButton; + self.clearButton = clearButton; + self.timeLabel = timeLabel; + + [self setupActions]; + return self; +} + +- (void) setupWithTableViewCell:(UITableViewCell *)cell +{ + self.startButton = (UIButton *)[cell viewWithTag:2]; + self.clearButton = (UIButton *)[cell viewWithTag:3]; + self.timeLabel = (UILabel *)[cell viewWithTag:1]; + + [self setupActions]; +} + +- (void) setupActions +{ + [self.startButton addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside]; + [self.clearButton addTarget:self action:@selector(clear) forControlEvents:UIControlEventTouchUpInside]; + self.set = YES; +} + +- (void)updateTimer +{ + // Create date from the elapsed time + NSDate *currentDate = [NSDate date]; + NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.startDate] + self.lastInterval; + NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; + + // Create a date formatter + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setDateFormat:@"HH:mm:ss"]; + [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; + + // Format the elapsed time and set it to the label + NSString *timeString = [dateFormatter stringFromDate:timerDate]; + self.timeLabel.text = timeString; +} + + +- (void) start +{ + switch (self.state) { + case TIMER_STATE_RUNNING: + self.state = TIMER_STATE_PAUSED; + [self.stopWatchTimer invalidate]; + self.lastInterval += [[NSDate date] timeIntervalSinceDate:self.startDate]; + break; + case TIMER_STATE_PAUSED: + self.state = TIMER_STATE_RUNNING; + self.startDate = [NSDate date]; + self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 + target:self + selector:@selector(updateTimer) + userInfo:nil + repeats:YES]; + break; + case TIMER_STATE_CLEARED: + self.state = TIMER_STATE_RUNNING; + self.startDate = [NSDate date]; + // Create the stop watch timer that fires every 100 ms + self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 + target:self + selector:@selector(updateTimer) + userInfo:nil + repeats:YES]; + break; + default: + break; + } + + [self updateStartButtonIcon]; +} + +- (void) updateStartButtonIcon +{ + switch (self.state) { + case TIMER_STATE_RUNNING: + [self.startButton setImage:[UIImage imageNamed:@"timer_pause_btn"] forState:UIControlStateNormal]; + break; + case TIMER_STATE_PAUSED: + [self.startButton setImage:[UIImage imageNamed:@"timer_resume_btn"] forState:UIControlStateNormal]; + break; + case TIMER_STATE_CLEARED: + [self.startButton setImage:[UIImage imageNamed:@"timer_start_btn"] forState:UIControlStateNormal]; + break; + default: + break; + } +} + +- (void) clear +{ + [self.stopWatchTimer invalidate]; + self.stopWatchTimer = nil; + self.startDate = [NSDate date]; + self.lastInterval = 0; + self.state = TIMER_STATE_CLEARED; + + [self.startButton setImage:[UIImage imageNamed:@"timer_start_btn"] forState:UIControlStateNormal]; + [self updateTimer]; +} + +@end + diff --git a/ios/iosremote/iosremote_ipad_icon.png b/ios/iosremote/iosremote_ipad_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..859d53a879412ffbed781710a70a91c8c60c6d7b GIT binary patch literal 8180 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 literal 0 HcmV?d00001 diff --git a/ios/iosremote/iosremote_iphone_icon.png b/ios/iosremote/iosremote_iphone_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e976b082bc01dcb8f92e1e1afa56f80d6ded5fa7 GIT binary patch literal 7206 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 literal 0 HcmV?d00001 diff --git a/ios/iosremote/iosremote_iphone_icon@2x.png b/ios/iosremote/iosremote_iphone_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cb045bc0cf56c812cae69e93181280deb3470a8b GIT binary patch literal 10861 zcmWkzV|ZLk7~ZI{Z5s_6+fFu4n#Q*6rm?xPjmB1ECyi}8X{@{V$DH}G&vSOp%=f*T z2o)u1WCQ{P004k2DT%63&*}>e()(imfT+LSV&`x^95!!k*L)8>pzOGBN4FXV5R>6&+ z=@g(P0*rp5VTcTdh9hWVVWVfsXbc1|Ajo8g@8;39T8Ku5>qcpO=eZI4rOR@B%{x_?AiIlw}4+y8K;^Oi?b$9ja13pg zfdKT5r%a~F|K-4HO_?F^xV_%qCExvHTPJ3OOOIv_zfX~smPv^za|ER@g#-W)JkR!h z@Ce5r9q#WOnjhI-{TnR!u(@`i5F)?X`sj>?ga)7~O<%1V92_h{ISxbocI&Yz*8{9- z0xY+l^*Pqy^K=nryq}}Ic-}-va`IJ11c-?c5D_n^jq|%$_o9S8Id&Yjqx>JhzkaNF zUjv*nL_pQOg(2@wM)vMCz}Ta4XfZbX$0N#*;n0BhSo+yr&bseR*pWBd5v?i|io;%Q zzyt~M(Ue_`lK}P`($shOBoAaj)i32^xS&{Q3L_cL#K0o5lW;6miop@*BFJ(v>jZrn%3Ee< zEZ&&!A}{f4BV_E6Z;_qSY{^0Os!;QgZX#`Eqy&*ec`mcAoT&PNsRcH(1dSwufz1V_ zv+~Dot^mKtSd+k6HWc&d6{GLbVUmUs+5|MiI3@?$T$*uQCdAs@?%0IAIYw7-RFF}D znCEamexm)c4UUhO)>hCKFQY!EY{Y1X(}EBA$@YhqBB@Ndk=h&MdBD?{uP$C&s*2{4 zoP<1w`Ufovra_Vn70PJhz7hgCbv(N)qO6U~nhbN1T9MFSG^;EHnzMMj(an9h`oJo( zw1k#;)Oh8@*U|p{7A(HO@LdJ?0xDopGKL(NneYL0aW1B+}$+VfYzc$CPCr2kC|2&Y8 ze<6nq%NWz)+u-})m*TbHe+4O&z|5tAM$}oC*a<-v>8R-r8rlpG48GV2V;CuXDViz% zDMuCR8ZH{b3tkn7>XjO(l|MB7N~AOzRQAf@=W!|*%84~P%D>f20X=|mD$}Y4h1~}4 z!7nDr^}j-;@_xw_s++V7;m45U46&QtXp1d6YeJnd*`zBP>(xJ>E4ahF61so&QBV_i zsW7iHPcY9ubee=f8LHd9=3U8>nUNydOzQDOS zTfK5~%ofRJ%D(5b<9l?2Z~xY=+8)}z<~DsQG-q<=bpn4sc8_whF)Mv<_pk6C_w;J< zYL=9nl@sn;JiaX(kID5!yveamx>f7!_0OF$^l{7fgaOOKS=mC`R+`H&i#;w+Tp{x+ z2O{Gt&P}s*8v!F@EB3Xbfuh0vZu-e&n+)^z*~U57iHQ-W^{VBn(eqf|g)EyKqwbZ? zwYQkiV#%yQxu|bZ!>OyOzT+^dim8uP>6${CUYhrsOI5Oq-_MxN>=w0bRS2~*kuv!* z$D7NlGph&OGwrspcCq5<|I**9*{`ylznvqTXPkez;C(Q9pnkA>m?oYe!XRGccjfnW zc6FO@w{`41E85}gFCQrHKhd%vw8(eKzT?6zk&hq8NOMoaRkJINEVa+|9#1(SxNQI1 zGQl1VtK-!FJ2`tSNtd)H}VFS|6e^v_-V(bpgDKXiV) zc9AGIWYOd-vf7QT4d`umjr$n#2??6LOr1ap4GBT!dgq39mvmEX33gNZFZzT0Vc&9I z`CrE0iy^@y>ySDp zIrQS*5ZVbL?NSFoI_HmbQgxjr&2R_*J&T6D$U#Fa<4@vm7oJG)y{S=$0_P0ll016wOv zgFM5YByZ9%TrsKOFCz8_mInkQ_FN#3Y%@5r_A}H|T}^5Z)(hHj4^O7Xb36oexOC!u zc|y}M(&~i|Lde8azTzn#l-es2W8VJE3{{rwE{G{mt!rtO6G%MF)=YWe+2HpRf3f_f zEaf)D0j~^X^h&@_Y@@tW)Rb7*dA@6$~ z+Kmw=g^fM#Q$D-gtzp}SD$Eu(0&7%Ia1_3lF?#CZ>3O!wbjj$>b8MM^oIX<`2IKg4 z#s5}m{oSzK>Zxw?rVng4^|ZSF>o;yWUZ47|va1c$xV83Lzl{Zk z{4FjPXAIWjOes$u9k;Lfr`u+NZIoiFab=yhpr;wYfSY1a9~9$zZ|v z-pg)vbyKco?BY!3tmw?X>QSesR<6rhbYbS#HF7oKP0RtIft}o@YrePjee7i8 zml4;6-b8cN+HL-~!Uyl{0R3^z_v*@)?iHHV#hwihpF5NgVr>4+tK{>}CPq&!n=VPe zd;7na!5eV|#)R!XhyEL_(jLl#IdMM4KClmxS7+9)4z}yHJw5gCcEE2jBr<%C2bqBm ztC<%W9!-wA3@Cp@5Bg}gN_>6xRF3nf`q%p>w?F|c_i$%2UW|YFdfcj*3+?g*^SiE& zqYJZ%e-KM|w|x3vvF(|-4Rgh5<>Y143En*K2Pf^7nwI8dD+vqEgVwzs72ZHL`l|X} z7UI)6!nm%N3M~eYqj#G}ar)Ptj{hhgjn}AK*`V1ZrIW zDW37qUd;u(SobctEIlo;=;wNMT@9TRw%F5b5Vcab-#@uOT;O^jTq>;Vd&ha!zICs@ zpTfSNo(432)S30#Z9f_I8cz4?pkATChvj@Ef6j&N{FR=NUZ9ksjET!8B_%{A=(;tX zO4=!{FU6c5^Vj_JI&-N!+Iru8m7msrTfRnoj+*YN@hZP_zN##*O6EI5h+S_|gFYT!%!1K`8)$G(%QGRNZs+Jln%n{Sovi+%nNM z$Eld1D#}SoF7hun$Pi~~*~_G~Dk-Z|>A_ZM)30IF>#=A#0@H-Q&SV$E!i2U%>D$Ww zK&I*3Vk|Lkbom#xpYdp9XyFwsG3HVPF(n&5Tf*jeoHEOBRCv)O#P4^R{4V2ZDn|*goA_>yM)AFGKLEdq#D7)<3%now>)nDMNy6`KvOe3 zgAA2qNl^ESjwW*qkJK;H)!SCf5bwksyR^GkBTH%l+%$FV?`8d$1r1D@Xq47_w(GCu z+3>+gJ0)?AHn%KG91Ek}?C%T?rD}YFb1Vp_3g?7Iy<0s=gByTMmr%O|l;ac7j1CAZ zy!J4C{o$r~oD7=iv!FNM*bKXo=65WsVM1R`gS(q<=pK@$@v|M67A!S{pl$}{YZa<#X3@C6}MnW1@k`NNnfl>E*dKYvm3v7 z3{+`Ch5XEEJ*?_NSaK!#{v_y|Di(aR&8td1LWD?+-*iXwZybh}dqe40X{6 z!-cY~fRG@O%w=gHZigffx0J8+=DuxfC*m~hB)oA4xS?%E*u(b*34=r0aCf91a5*ee zak@S#Px}!#X*wQ}$%PbBwy5lOWWUJrJq_kiVVZ~}>r;PGLs-nB5vp{zh-0zuv9h~= zRq`x-2juqt1zMp1KFYR_>0qcwvUyii@cgRgu&xUgL+NKjP0L@7%rG1wrTnIJ$Idi? zq!2@ak=2c@Z9|U>ZByDM`<3d$hG~OAWfTGNTY)a21+Hw^BVoCq1!-2C-u%{M#edh9 z3oT_QtNdR~FXMy4!}V@{*O>_l*Z3ez%H&u8CbtP)NdMS8poc#@F|c^=2?}&w`OH5* z#z27hRS3d^!xfuvhd@2I>XVN$$15nG|9^|_lV7CW9vrQY6P?mq9ZR>?z1=Ak>`>qY zy}UB35jU@Pz#*4^W55R4qg6&nB6#t!(?A&q@ZtwW=}7kT^$kj=3^=}+vN)A6jkKzB zJLEhQPA>>b0;h2r4yLRGSU*)eaY%zKJ>({6yuEy{Jjy1?v%NM->!yNFRI)m~4mCd9 zK2c?IN;yh97@mhZ!>)A^;D;c2uxax>!%MBZ<+FR-kw(5ls$o#s(hxdiJu^0ICfsB-X*IXcTB+0RJkXKW3))J0$tf>ae&8dT)LH`l-K zpLf@Yg8rIE55M_$DR9cR~%2Uk!`72mP1JIfqAoeBm$s3JDIEDWWbdm7xy1$Xpg>PDK|go+s@yx>%n zw0{CiD@MHJbMWA-Nx?k=fk;JJK_r84E%@tD$jzs}5+*=nn)7Pd8z(SRYNiW(*@p}C z!b!(P5#**yhZ>g>yXj3|$QUR+l0BW-SsKER)dmQ%oLRX)ttYw{V>+ zhO4-RgFC=~sO3D;9W5F*0s1E6ksBFFArT%up)0#X#ncTg{YOKbvla|&yAAxXPrM{= zOJK4DNP{{cYzg?3GmH={5;Qn$yv4p4-4SD~N3S#}%Zii7`}Zf4+z6#@hJjV01ibjn z%3ODnm^_3|~&$5r)c*iE>XK~G23S8efVaM6h_5oF2EPO-#F zA#(alDritTziB@)z{Ggdl;%*;T;pbvGgP^*%?+yQ!}_)P*UI62csi%7F zL4D9X5^|KSiPcV|D!LBKLWunRexoIGlcJ&5EW>5MBO{oShA8wJkjNy}rHZO$Jx^pn}{ll4@$+YGIUg0Z3k!Q^R2#!seb~K^*CpNFR-5 z$MM9~|AM9(3ys1)$cz2TTKxkMWjbiv1o&Os5SdZa1t#)Ybh}{&y}D6%Xi*}kSjA(f zTLmwH?tPsxB5ZoDLK`hbijlPbn0H-am)j%NPk>Ci- zu3>G#OB{rWZlj1N3LE%b`cHxXhua5%^_x%mng7l)=$N2q`71mEi!Q7kZS1!E8(+xgE)9n^A5bFW=FIWks*IvkzLYgZ?-28U&Xt+IMXAEHRQ2wA=$nJPv$v=V{fLbbABFNA)+gpaK6a26x+2eZ3rC#zf#Dqt z#+UNb^+5yWk5KwpXHBfy!=YVNBjwENqa?k1$FnDXqqpodzXmW?sW~CP`nV?%Cza*p zCscCUlEFY1crytKTxZp9Z8nE$vqu*2u+YVtsSZ_p&mdx^jZNt1+fkCzcp;VoE!)9%nQ`w9^7M3SA z=F)4LGzW@@Lj@WWjM_4wN@MM;zr=TU4zRh!jH?kk><0555~5T!gD0`>MqSakbQXd0 z$i%E=uG4>Layj}c`8+VfpKm}>QiD3FlK36zY4{icoh=FCK~QA{pkhfz?PI+^VC@eE z_p4Vu{#Bsp7fJTgY8%SCjGPoiT<-`q`xMs;DEuW8taQIBrjL#ZU7p$T#ncuj`W)3b z&#Vn>5p4B|Nc_o}|N9A9v6f>{RjJtGn>?b{??%hP`0o{jd>YyOvIGPqD@xzvN-dz^ z$`XU^k3*#Dk+5Fb1S6?ND1V#=3f1e49;Snaqz4KyL{ufTfjdF|9GDxM`sJ2HmKldGaR(M?UzT~hY-pFb`c za<4qAKOeCVUtDcU+Z5rKo`U_=({Yh@p&m9E{tT-YV z5+WkpjW&ofU`K^x;x!vqzgWrdfhjLlSJq~dNcbyAR$WK6kY_EV?mU7P&=YIzFU89dHZ!43~r;n3&BXYDJgc1TuGaS`67zz(qBBj zNS$v-^OKgpq!OCay*5LkqB&!jnH>t{4i&n}^9dC^ri*5P3I^;Gqnmr4*k4@`aYWkF zZ5*NHhDa|8I9C1bA{W7&2?nQKl`K$`{sq5f45vjz?f034SySQhC@r(de87X-MG4p6 ztWnXNm~&s-+fp4hZ$iIOq3+I$JMjDWKiW_&BtcW3?@P*`TuE~iT;9`6R_al^O<471 z*Wa;4SaA#;hNloqvTJC#GbBJ}l8gOnAbk3yc*q`H0hkz&iODfj<6t5B$D0OuW2?nc7_JZew3hjAjXZmhwIQ58+Ps*fu%oR!`|PBV7CHxDf2-*u_>+)bHO zTm=q&tLkHZ=Hzj2hR8Mp4R4C|)5%+ZpheKUx-6z8Z!yBLZm2~p`POVXDGzs?L@2o< z89Hxbfhz-enK9_D>ec_s5HJN6a2G;)~QTsk;NNw`t?|@bk{h`PGAl+$Y4*CPs_95 z6YR0pqPo_UM%gFsI_&MlP$SR4t#Ar|tAK)oN;eK&cD5<)Q)H&1IUpj8`(VdE*PJ}Jn3Y*A)COv#C}+Ti-q^p7S9Jlc;>gp1vLN1?I*RJ$_}pQ*@Nf>T zsMDL^hzkaq1{HOPH_9?-mX~5cTz+zkAjgbtM2WkDrQ$^F^xO7j&t=_#)`g*q&^Yw4$ zaUX-;*OzKswDfG@ua$h4+R9L{Z%rYtCSzNPXc7_NVqKZG}lk9YA#7Bi^EVE0iH_y+ctaDy4@OIa- znc|gyL~-rePwQ^2-hRWiN0Gnjm^7V+)J4YzJJ0WxR5_pSuqF`ZN7IE9yj%_4TLy|I z%Kdrx5G;eCI-G?kvgb7XLh|I`EJMLVi+w{dN!E)y-oiPLkf2YSEL(hnHlNlKiR;>T zgTvQnsmGDi6;Eao{&RD;6qF(yHxsy_@zqj?&}ocFt*y_irno~G-^k&p#t54{08K_{ z%L5BK=>L}1iK%$V{<+t+TLq@p(z7>%zKdclW#eTmQd+-OJGcWw0HD#T6J6@93TaU6*r~qNW^U!wm+5 zJD=L7YCN{N+EtRj)`9Fb={JAC(vn_EK3%#=pj^EXFb5R5QRNnYYxuy%1>ZM#}6r zxu4mkgKKBF4HP6o17;GMS&8npK(MjEt~tTdm1mX5NyV-<1&i5C zy>HiRls!d)tKeg%z`MSJ&6UKExNO_`0mhf>HYEA!sI7nQM#^WJN};4Q)w+4g7FLcmK)tsQOwqpojMs zaZDe3;@`x<13ak_Sf;r*^@R8Y_GEB2s&i|Lx|g~#;UC1pe{I=0M>)Vw%D3drg$RXcB3xTW<0^%> zv~H$_^DM*M`;dK(N7L85<)^<0tmVG3Po zdZ6M#T$}aA0Z7T=W%|cVUQWx=RPEi~z32v?tx+gTIMpd77FQbbMJtpNSweKonu3dU zd98_1e+jMV5eFAc@CNBOW~sQfe;D*si<9NSAu2Dn&{XOn^7+}Syu1OXds22$&COZA zu(-&6cjQ+U>&#wU#-2azeyAa2WDyjEnOnR4m_m_iZZ31Jddmyl#Qm%?1hQE)xZ{xx zcd=~DatcxUvnLdg6ta|}bU3@Ur5__7mjua`$qmVBi`JyzRVz4U5&E~3zU%Y7tg%=d z7ygQ+-+%(ahst7*$PSuJS^Vgu(EX$MHXR{+-7@#pY&~v^^qoshe@;iYH7kX>a%HhO z0<0;W=}2$q*SbA0Su)67B{={=MR$+hFmj}=@M%r61&%Y;{E`jfiBb-gl*dYyEM z&>(R2Gy5r85to-#&es0T%9dgOv-^jzK`P$PVJ%pAH3eoWR3=6J2k$d&qEv9nrrOV4 zQT5S3JU;YyT~YL4!E5|gaT=~{KQu(RKzJq2{`jr_qZC|{L-u2P4>zPnK4*vO{n2E< zOI>KW(>D7~u4OT#CvY_G_j!s%QOGJ{O{WlJEL^YI}+@wGaV~QVqxO0uXA9-srtbj6c2+ho2a9jrBB@g zPPZe=imHdsk_Nz0P6OhhSqxd_NyVY5gGmYgz44}kZ1M;PFI^+nj_TcwP9)v$qLQ;7 z?^9}$&36DeI|IW6r&dava>a&z*tuVrb(HP<6P3M50vUiwLn@f+m(KbrurG zbVqmrgoy!ILeDI_V5y?D=EydVEHVWsaJyFUZAzMY;`>4vsVuYw25K~eGh@#C>|NM} zxS9Ca%1u3YQnM)pB(T66o8yYRS-AKdh+SmHO78;s#a)yLn5s(AE|@kHJe5=dqpO)S z;UqfZspsyI_mN}SHBrzsXno?;7V45ZAr9iw95&#=A-evo(#QG}KOnfy{yZ`ynZxLJ zr5|jcHg_T&D#9>4oCF5Cy`zHJ13;LqM6&$mioAw4KEB3=%q;D6)cUOEbXk^;q@Z_~ zcs9uQmr=aK18`1b@SVRK95CkbA5LR&tZYh0KhlUXUHd~$2db;-doUyS^@|@8*Yd{_ z!D#}Oe>a&?q71Szs9~Flf|XI(z1G~k$6>)V`jW~2Q2j;cwAd%jkjYb@kQZdZuM&On zcvZ;j>^%<@vAEAMNjK&P3&u)AmIm0yP7f*m<=JlR(o^H;sd0Z>TmPhV9OX3K{Vyj{ z49l!NhE6y~7uIW2H#sJ)8p=v79mS9=3FJ{Z(l8@amaz9hA#h)Kxgx2osGKr4);TW^ znH(qUL#MTT*|ICCj)MMW_-TC^iBWWLu77-@j(H-mi)8}0)%>@eEMr^=dzLOgg&Y)4 z_bI-=s>~VXD-maPS*<(}L14F|cw$G|3Y&Y|CarWkYQa3LoaPrxh^PfTt2I}<`=azf zA}%oiP)M|z`Q6JX3NNUXU`Nz&hwHl?7)|v$6SE&~X0zY$BAJjp;ZN8S+Y@DyPYD)d z3W`TR-s-@YC^ZxIMOtEEITyd%-QKc!V71$_-?Ouhd4G8#pU-e$(I<-87$64lzXRL9 zo0?Jp#p^-hPOMuU;m@0r|EOP<*E@4Ih_C*l@hRvP;Y+HIsu5Ym5)-S5b0mfbr*q}w zZ*wCHA01!@P;6zPE|JBHd4B|&AD2t8)<5XDyAA4*&Pw8HKOkZ-$O8b zpKG((73BOG`@7T+_NvjI2JNm8U)S2XzU;@txdRwS@!$`=ag7Plgw|)9WA^e*u(W-@ zX9nLRz(BL4f{j7j^BpKtI9FNW83`QGEzj2nB?%6nL^mhRVDMl`o4X$UerI781M37r z#A!tg*;Duj_sapQ3@MEw11%90s+LnD#S`Kxa8iOP7}Gh|9`S!@`M^1YW7SvQKIQiO z1Bu%>em)5-B-mG+YGU5NDZqlh29L%gUU(tIzDUM-`XAF_EFry{ICZ!4{lK17;tM_A z*|~6r^0LH?(_h}GNo%Y~O!d@Jgb?8LO%Xdd27W#PrXJkG?Xu@ycj^d#UI)y`-K)Oq-^Fov>Buruzh_x&4O(Z;psrWxGg{h=MQFj<5KSKwnqw2 zSRaZ zpNHNV&91kt#5aQXUPyZQ{yVvjm;b9o&G5neUJDLxKNFE>M!$b{#t7%t-gkNnbfrJx zdu6<<8?76__1a#syjY(=NMv@RYD{l^VzaB_p+BXNKcNZ?o$hw?P%HP_m5jTNqv{8T zGbFctIU6M{^Fk1%w;%i{aDfY^;LI5uNI7+uqF34$kLV_z>^(~JpG3NU_jr%(FWUSR a2E>Rnshv2@$bfJ30kV=x5;bCm!T$llg!L`} literal 0 HcmV?d00001 diff --git a/ios/iosremote/libO_icon.png b/ios/iosremote/libO_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..34bd3dbbb3aae7f5c9d2a6764ef1bc155f1385aa GIT binary patch literal 29805 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 F{{i^kRJH&B literal 0 HcmV?d00001 diff --git a/ios/iosremote/nextButton_normal.png b/ios/iosremote/nextButton_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..b3a48886da662bdfe4cedea96945d1bdd86d0769 GIT binary patch literal 3600 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 YcoyimTl$UT&W{c-(0y>PUfVwIKQ&ytE&u=k literal 0 HcmV?d00001 diff --git a/ios/iosremote/nextButton_normal@2x.png b/ios/iosremote/nextButton_normal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dbe6dbd58a04e3134e337110ecaa1cd02c0a98c4 GIT binary patch literal 4704 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 literal 0 HcmV?d00001 diff --git a/ios/iosremote/nextButton_pressed.png b/ios/iosremote/nextButton_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..8ed46c1c51713811e7477ac8391e64140f876986 GIT binary patch literal 3487 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 OaPO|ZR;9+Hr~d_QfKkH$ literal 0 HcmV?d00001 diff --git a/ios/iosremote/previousButton_normal.png b/ios/iosremote/previousButton_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..6292ac9acb0f05f10a6f11ae38a5eea24262e868 GIT binary patch literal 3592 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 Q|BekXF|@c@r|+8ZKc-v96#xJL literal 0 HcmV?d00001 diff --git a/ios/iosremote/previousButton_normal@2x.png b/ios/iosremote/previousButton_normal@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f2ac7fd9b3537684cf74ffe9106cbb678ff6a9 GIT binary patch literal 4655 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 HY@h!JYZ8AZ literal 0 HcmV?d00001 diff --git a/ios/iosremote/previousButton_pressed.png b/ios/iosremote/previousButton_pressed.png new file mode 100644 index 0000000000000000000000000000000000000000..5759e70bc6bf425af46215bc591f9931b6012f0f GIT binary patch literal 3482 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 bsynd9(#8Ig&gI}re?Uh||51a6ZS;Qt`OTbs literal 0 HcmV?d00001 diff --git a/ios/iosremote/previousButton_pressed@2x.png b/ios/iosremote/previousButton_pressed@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7c10564226e093c58b0340dc1e520ece4d3d08d5 GIT binary patch literal 4454 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 literal 0 HcmV?d00001