FLEXGlobalsEntry.h 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. //
  2. // FLEXGlobalsEntry.h
  3. // FLEX
  4. //
  5. // Created by Javier Soto on 7/26/14.
  6. // Copyright (c) 2014 f. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. #import "FLEXTableViewSection.h"
  10. @class FLEXGlobalsTableViewController;
  11. typedef NS_ENUM(NSUInteger, FLEXGlobalsRow) {
  12. FLEXGlobalsRowProcessInfo,
  13. FLEXGlobalsRowNetworkHistory,
  14. FLEXGlobalsRowSystemLog,
  15. FLEXGlobalsRowLiveObjects,
  16. FLEXGlobalsRowAddressInspector,
  17. FLEXGlobalsRowCookies,
  18. FLEXGlobalsRowSystemLibraries,
  19. FLEXGlobalsRowAppClasses,
  20. FLEXGlobalsRowAppKeyChainItems,
  21. FLEXGlobalsRowAppDelegate,
  22. FLEXGlobalsRowRootViewController,
  23. FLEXGlobalsRowUserDefaults,
  24. FLEXGlobalsRowMainBundle,
  25. FLEXGlobalsRowBrowseBundle,
  26. FLEXGlobalsRowBrowseContainer,
  27. FLEXGlobalsRowApplication,
  28. FLEXGlobalsRowKeyWindow,
  29. FLEXGlobalsRowMainScreen,
  30. FLEXGlobalsRowCurrentDevice,
  31. FLEXGlobalsRowPasteboard,
  32. FLEXGlobalsRowCount
  33. };
  34. typedef NSString *(^FLEXGlobalsEntryNameFuture)(void);
  35. /// Simply return a view controller to be pushed on the navigation stack
  36. typedef UIViewController *(^FLEXGlobalsTableViewControllerViewControllerFuture)(void);
  37. /// Do something like present an alert, then use the host
  38. /// view controller to present or push another view controller.
  39. typedef void (^FLEXGlobalsTableViewControllerRowAction)(FLEXGlobalsTableViewController *host);
  40. /// For view controllers to conform to to indicate they support being used
  41. /// in the globals table view controller. These methods help create concrete entries.
  42. ///
  43. /// Previously, the concrete entries relied on "futures" for the view controller and title.
  44. /// With this protocol, the conforming class itself can act as a future, since the methods
  45. /// will not be invoked until the title and view controller / row action are needed.
  46. @protocol FLEXGlobalsEntry <NSObject>
  47. + (NSString *)globalsEntryTitle:(FLEXGlobalsRow)row;
  48. // Must respond to at least one of the below
  49. @optional
  50. + (UIViewController *)globalsEntryViewController:(FLEXGlobalsRow)row;
  51. + (FLEXGlobalsTableViewControllerRowAction)globalsEntryRowAction:(FLEXGlobalsRow)row;
  52. @end
  53. @interface FLEXGlobalsEntry : NSObject <FLEXPatternMatching>
  54. @property (nonatomic, readonly) FLEXGlobalsEntryNameFuture entryNameFuture;
  55. @property (nonatomic, readonly) FLEXGlobalsTableViewControllerViewControllerFuture viewControllerFuture;
  56. @property (nonatomic, readonly) FLEXGlobalsTableViewControllerRowAction rowAction;
  57. + (instancetype)entryWithEntry:(Class<FLEXGlobalsEntry>)entry row:(FLEXGlobalsRow)row;
  58. + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture viewControllerFuture:(FLEXGlobalsTableViewControllerViewControllerFuture)viewControllerFuture;
  59. + (instancetype)entryWithNameFuture:(FLEXGlobalsEntryNameFuture)nameFuture action:(FLEXGlobalsTableViewControllerRowAction)rowSelectedAction;
  60. @end
  61. @interface NSObject (FLEXGlobalsEntry)
  62. /// @return The result of passing self to +[FLEXGlobalsEntry entryWithEntry:]
  63. /// if the class conforms to FLEXGlobalsEntry, else, nil.
  64. + (FLEXGlobalsEntry *)flex_concreteGlobalsEntry:(FLEXGlobalsRow)row;
  65. @end