mirror of
https://github.com/SoPat712/YTLitePlus.git
synced 2025-08-24 19:38:54 -04:00
added files via upload
This commit is contained in:
154
Tweaks/FLEX/ViewHierarchy/FLEXHierarchyViewController.m
Normal file
154
Tweaks/FLEX/ViewHierarchy/FLEXHierarchyViewController.m
Normal file
@@ -0,0 +1,154 @@
|
||||
//
|
||||
// FLEXHierarchyViewController.m
|
||||
// FLEX
|
||||
//
|
||||
// Created by Tanner Bennett on 1/9/20.
|
||||
// Copyright © 2020 FLEX Team. All rights reserved.
|
||||
//
|
||||
|
||||
#import "FLEXHierarchyViewController.h"
|
||||
#import "FLEXHierarchyTableViewController.h"
|
||||
#import "FHSViewController.h"
|
||||
#import "FLEXUtility.h"
|
||||
#import "FLEXTabList.h"
|
||||
#import "FLEXResources.h"
|
||||
#import "UIBarButtonItem+FLEX.h"
|
||||
|
||||
typedef NS_ENUM(NSUInteger, FLEXHierarchyViewMode) {
|
||||
FLEXHierarchyViewModeTree = 1,
|
||||
FLEXHierarchyViewMode3DSnapshot
|
||||
};
|
||||
|
||||
@interface FLEXHierarchyViewController ()
|
||||
@property (nonatomic, readonly, weak) id<FLEXHierarchyDelegate> hierarchyDelegate;
|
||||
@property (nonatomic, readonly) FHSViewController *snapshotViewController;
|
||||
@property (nonatomic, readonly) FLEXHierarchyTableViewController *treeViewController;
|
||||
|
||||
@property (nonatomic) FLEXHierarchyViewMode mode;
|
||||
|
||||
@property (nonatomic, readonly) UIView *selectedView;
|
||||
@end
|
||||
|
||||
@implementation FLEXHierarchyViewController
|
||||
|
||||
#pragma mark - Initialization
|
||||
|
||||
+ (instancetype)delegate:(id<FLEXHierarchyDelegate>)delegate {
|
||||
return [self delegate:delegate viewsAtTap:nil selectedView:nil];
|
||||
}
|
||||
|
||||
+ (instancetype)delegate:(id<FLEXHierarchyDelegate>)delegate
|
||||
viewsAtTap:(NSArray<UIView *> *)viewsAtTap
|
||||
selectedView:(UIView *)selectedView {
|
||||
return [[self alloc] initWithDelegate:delegate viewsAtTap:viewsAtTap selectedView:selectedView];
|
||||
}
|
||||
|
||||
- (id)initWithDelegate:(id)delegate viewsAtTap:(NSArray<UIView *> *)viewsAtTap selectedView:(UIView *)view {
|
||||
self = [super init];
|
||||
if (self) {
|
||||
NSArray<UIWindow *> *allWindows = FLEXUtility.allWindows;
|
||||
_hierarchyDelegate = delegate;
|
||||
_treeViewController = [FLEXHierarchyTableViewController
|
||||
windows:allWindows viewsAtTap:viewsAtTap selectedView:view
|
||||
];
|
||||
|
||||
if (viewsAtTap) {
|
||||
_snapshotViewController = [FHSViewController snapshotViewsAtTap:viewsAtTap selectedView:view];
|
||||
} else {
|
||||
_snapshotViewController = [FHSViewController snapshotWindows:allWindows];
|
||||
}
|
||||
|
||||
self.modalPresentationStyle = UIModalPresentationFullScreen;
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Lifecycle
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
// 3D toggle button
|
||||
self.treeViewController.navigationItem.leftBarButtonItem = [UIBarButtonItem
|
||||
flex_itemWithImage:FLEXResources.toggle3DIcon target:self action:@selector(toggleHierarchyMode)
|
||||
];
|
||||
|
||||
// Dismiss when tree view row is selected
|
||||
__weak id<FLEXHierarchyDelegate> delegate = self.hierarchyDelegate;
|
||||
self.treeViewController.didSelectRowAction = ^(UIView *selectedView) {
|
||||
[delegate viewHierarchyDidDismiss:selectedView];
|
||||
};
|
||||
|
||||
// Start of in tree view
|
||||
_mode = FLEXHierarchyViewModeTree;
|
||||
[self pushViewController:self.treeViewController animated:NO];
|
||||
}
|
||||
|
||||
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
|
||||
// Done button: manually added here because the hierarhcy screens need to actually pass
|
||||
// data back to the explorer view controller so that it can highlight selected views
|
||||
viewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
|
||||
initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donePressed)
|
||||
];
|
||||
|
||||
[super pushViewController:viewController animated:animated];
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (void)donePressed {
|
||||
// We need to manually close ourselves here because
|
||||
// FLEXNavigationController doesn't ever close tabs itself
|
||||
[FLEXTabList.sharedList closeTab:self];
|
||||
[self.hierarchyDelegate viewHierarchyDidDismiss:self.selectedView];
|
||||
}
|
||||
|
||||
- (void)toggleHierarchyMode {
|
||||
switch (self.mode) {
|
||||
case FLEXHierarchyViewModeTree:
|
||||
self.mode = FLEXHierarchyViewMode3DSnapshot;
|
||||
break;
|
||||
case FLEXHierarchyViewMode3DSnapshot:
|
||||
self.mode = FLEXHierarchyViewModeTree;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setMode:(FLEXHierarchyViewMode)mode {
|
||||
if (mode != _mode) {
|
||||
// The tree view controller is our top stack view controller, and
|
||||
// changing the mode simply pushes the snapshot view. In the future,
|
||||
// I would like to have the 3D toggle button transparently switch
|
||||
// between two views instead of pushing a new view controller.
|
||||
// This way the views should share the search controller somehow.
|
||||
switch (mode) {
|
||||
case FLEXHierarchyViewModeTree:
|
||||
[self popViewControllerAnimated:NO];
|
||||
self.toolbarHidden = YES;
|
||||
self.treeViewController.selectedView = self.selectedView;
|
||||
break;
|
||||
case FLEXHierarchyViewMode3DSnapshot:
|
||||
[self pushViewController:self.snapshotViewController animated:NO];
|
||||
self.toolbarHidden = NO;
|
||||
self.snapshotViewController.selectedView = self.selectedView;
|
||||
break;
|
||||
}
|
||||
|
||||
// Change this last so that self.selectedView works right above
|
||||
_mode = mode;
|
||||
}
|
||||
}
|
||||
|
||||
- (UIView *)selectedView {
|
||||
switch (self.mode) {
|
||||
case FLEXHierarchyViewModeTree:
|
||||
return self.treeViewController.selectedView;
|
||||
case FLEXHierarchyViewMode3DSnapshot:
|
||||
return self.snapshotViewController.selectedView;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
Reference in New Issue
Block a user