mirror of
				https://github.com/SoPat712/YTLitePlus.git
				synced 2025-10-31 04:44:14 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
	
	
| //
 | |
| //  FLEXTabList.m
 | |
| //  FLEX
 | |
| //
 | |
| //  Created by Tanner on 2/1/20.
 | |
| //  Copyright © 2020 FLEX Team. All rights reserved.
 | |
| //
 | |
| 
 | |
| #import "FLEXTabList.h"
 | |
| #import "FLEXUtility.h"
 | |
| 
 | |
| @interface FLEXTabList () {
 | |
|     NSMutableArray *_openTabs;
 | |
|     NSMutableArray *_openTabSnapshots;
 | |
| }
 | |
| @end
 | |
| #pragma mark -
 | |
| @implementation FLEXTabList
 | |
| 
 | |
| #pragma mark Initialization
 | |
| 
 | |
| + (FLEXTabList *)sharedList {
 | |
|     static FLEXTabList *sharedList = nil;
 | |
|     static dispatch_once_t onceToken;
 | |
|     dispatch_once(&onceToken, ^{
 | |
|         sharedList = [self new];
 | |
|     });
 | |
|     
 | |
|     return sharedList;
 | |
| }
 | |
| 
 | |
| - (id)init {
 | |
|     self = [super init];
 | |
|     if (self) {
 | |
|         _openTabs = [NSMutableArray new];
 | |
|         _openTabSnapshots = [NSMutableArray new];
 | |
|         _activeTabIndex = NSNotFound;
 | |
|     }
 | |
|     
 | |
|     return self;
 | |
| }
 | |
| 
 | |
| 
 | |
| #pragma mark Private
 | |
| 
 | |
| - (void)chooseNewActiveTab {
 | |
|     if (self.openTabs.count) {
 | |
|         self.activeTabIndex = self.openTabs.count - 1;
 | |
|     } else {
 | |
|         self.activeTabIndex = NSNotFound;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| #pragma mark Public
 | |
| 
 | |
| - (void)setActiveTabIndex:(NSInteger)idx {
 | |
|     NSParameterAssert(idx < self.openTabs.count || idx == NSNotFound);
 | |
|     if (_activeTabIndex == idx) return;
 | |
|     
 | |
|     _activeTabIndex = idx;
 | |
|     _activeTab = (idx == NSNotFound) ? nil : self.openTabs[idx];
 | |
| }
 | |
| 
 | |
| - (void)addTab:(UINavigationController *)newTab {
 | |
|     NSParameterAssert(newTab);
 | |
|     
 | |
|     // Update snapshot of the last active tab
 | |
|     if (self.activeTab) {
 | |
|         [self updateSnapshotForActiveTab];
 | |
|     }
 | |
|     
 | |
|     // Add new tab and snapshot,
 | |
|     // update active tab and index
 | |
|     [_openTabs addObject:newTab];
 | |
|     [_openTabSnapshots addObject:[FLEXUtility previewImageForView:newTab.view]];
 | |
|     _activeTab = newTab;
 | |
|     _activeTabIndex = self.openTabs.count - 1;
 | |
| }
 | |
| 
 | |
| - (void)closeTab:(UINavigationController *)tab {
 | |
|     NSParameterAssert(tab);
 | |
|     NSInteger idx = [self.openTabs indexOfObject:tab];
 | |
|     if (idx != NSNotFound) {
 | |
|         [self closeTabAtIndex:idx];
 | |
|     }
 | |
| }
 | |
| 
 | |
| - (void)closeTabAtIndex:(NSInteger)idx {
 | |
|     NSParameterAssert(idx < self.openTabs.count);
 | |
|     
 | |
|     // Remove old tab and snapshot
 | |
|     [_openTabs removeObjectAtIndex:idx];
 | |
|     [_openTabSnapshots removeObjectAtIndex:idx];
 | |
|     
 | |
|     // Update active tab and index if needed
 | |
|     if (self.activeTabIndex == idx) {
 | |
|         [self chooseNewActiveTab];
 | |
|     }
 | |
| }
 | |
| 
 | |
| - (void)closeTabsAtIndexes:(NSIndexSet *)indexes {
 | |
|     // Remove old tabs and snapshot
 | |
|     [_openTabs removeObjectsAtIndexes:indexes];
 | |
|     [_openTabSnapshots removeObjectsAtIndexes:indexes];
 | |
|     
 | |
|     // Update active tab and index if needed
 | |
|     if ([indexes containsIndex:self.activeTabIndex]) {
 | |
|         [self chooseNewActiveTab];
 | |
|     }
 | |
| }
 | |
| 
 | |
| - (void)closeActiveTab {
 | |
|     [self closeTab:self.activeTab];
 | |
| }
 | |
| 
 | |
| - (void)closeAllTabs {
 | |
|     // Remove tabs and snapshots
 | |
|     [_openTabs removeAllObjects];
 | |
|     [_openTabSnapshots removeAllObjects];
 | |
|     
 | |
|     // Update active tab index
 | |
|     self.activeTabIndex = NSNotFound;
 | |
| }
 | |
| 
 | |
| - (void)updateSnapshotForActiveTab {
 | |
|     if (self.activeTabIndex != NSNotFound) {
 | |
|         UIImage *newSnapshot = [FLEXUtility previewImageForView:self.activeTab.view];
 | |
|         [_openTabSnapshots replaceObjectAtIndex:self.activeTabIndex withObject:newSnapshot];
 | |
|     }
 | |
| }
 | |
| 
 | |
| @end
 | 
