VLCSidebarController.m 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*****************************************************************************
  2. * VLCSidebarController.m
  3. * VLC for iOS
  4. *****************************************************************************
  5. * Copyright (c) 2015 VideoLAN. All rights reserved.
  6. * $Id$
  7. *
  8. * Author: Felix Paul Kühne <fkuehne # videolan.org>
  9. *
  10. * Refer to the COPYING file of the official project for license.
  11. *****************************************************************************/
  12. #import "VLCSidebarController.h"
  13. #import "VLCMenuTableViewController.h"
  14. #import "UIViewController+RESideMenu.h"
  15. #import "RESideMenu.h"
  16. @interface VLCSidebarController()
  17. {
  18. RESideMenu *_sideMenuViewController;
  19. VLCMenuTableViewController *_menuViewController;
  20. UIViewController *_contentViewController;
  21. BOOL _menuVisible;
  22. }
  23. @end
  24. @implementation VLCSidebarController
  25. + (instancetype)sharedInstance
  26. {
  27. static VLCSidebarController *sharedInstance = nil;
  28. static dispatch_once_t pred;
  29. dispatch_once(&pred, ^{
  30. sharedInstance = [VLCSidebarController new];
  31. });
  32. return sharedInstance;
  33. }
  34. - (instancetype)init
  35. {
  36. self = [super init];
  37. if (!self)
  38. return self;
  39. _menuViewController = [[VLCMenuTableViewController alloc] initWithNibName:nil bundle:nil];
  40. if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionLeftToRight) {
  41. _sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:nil
  42. leftMenuViewController:_menuViewController
  43. rightMenuViewController:nil];
  44. } else {
  45. _sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:nil
  46. leftMenuViewController:nil
  47. rightMenuViewController:_menuViewController];
  48. }
  49. _sideMenuViewController.backgroundImage = [UIImage imageNamed:@"menu-background"];
  50. return self;
  51. }
  52. #pragma mark - VC handling
  53. - (UIViewController *)fullViewController
  54. {
  55. return _sideMenuViewController;
  56. }
  57. - (void)setContentViewController:(UIViewController *)contentViewController
  58. {
  59. contentViewController.view.backgroundColor = [UIColor VLCMenuBackgroundColor];
  60. _sideMenuViewController.contentViewController = contentViewController;
  61. }
  62. - (UIViewController *)contentViewController
  63. {
  64. return _sideMenuViewController.contentViewController;
  65. }
  66. #pragma mark - actual work
  67. - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath scrollPosition:(UITableViewScrollPosition)scrollPosition
  68. {
  69. [_menuViewController selectRowAtIndexPath:indexPath
  70. animated:NO
  71. scrollPosition:scrollPosition];
  72. }
  73. - (void)hideSidebar
  74. {
  75. _menuVisible = NO;
  76. [_sideMenuViewController hideMenuViewController];
  77. }
  78. - (void)toggleSidebar
  79. {
  80. _menuVisible = YES;
  81. if ([UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionLeftToRight) {
  82. [_sideMenuViewController presentLeftMenuViewController];
  83. } else {
  84. [_sideMenuViewController presentRightMenuViewController];
  85. }
  86. }
  87. - (void)resizeContentView
  88. {
  89. if (_menuVisible) {
  90. [self hideSidebar];
  91. [self toggleSidebar];
  92. }
  93. }
  94. @end