#include "iPhonePrivate.h"
#include <Menes/ObjectHandle.h>
-@implementation UITabBarController (Cydia)
-
-@end
-
@implementation CyteTabBarController {
_transient UIViewController *transient_;
_H<UIViewController> remembered_;
return items;
}
+- (void) addViewControllers:(id)no, ... {
+ va_list args;
+ va_start(args, no);
+
+ NSMutableArray *controllers([NSMutableArray array]);
+
+ for (;;) {
+ auto title(va_arg(args, NSString *));
+ if (title == nil)
+ break;
+
+ UINavigationController *controller([[[UINavigationController alloc] init] autorelease]);
+ [controllers addObject:controller];
+
+ auto legacy(va_arg(args, NSString *));
+ auto normal(va_arg(args, NSString *));
+ auto select(va_arg(args, NSString *));
+
+ if (kCFCoreFoundationVersionNumber < 800)
+ [controller setTabBarItem:[[[UITabBarItem alloc] initWithTitle:title image:[UIImage imageNamed:legacy] tag:0] autorelease]];
+ else
+ [controller setTabBarItem:[[[UITabBarItem alloc] initWithTitle:title image:[UIImage imageNamed:normal] selectedImage:[UIImage imageNamed:select]] autorelease]];
+ }
+
+ va_end(args);
+
+ [self setViewControllers:controllers];
+}
+
- (void) didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
--- /dev/null
+/* Cydia - iPhone UIKit Front-End for Debian APT
+ * Copyright (C) 2008-2015 Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cydia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cydia is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cydia. If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#ifndef CyteKit_Window_H
+#define CyteKit_Window_H
+
+#include <UIKit/UIKit.h>
+
+@interface CyteWindow : UIWindow
+
+- (void) unloadData;
+
+@end
+
+#endif//CyteKit_Window_H
--- /dev/null
+/* Cydia - iPhone UIKit Front-End for Debian APT
+ * Copyright (C) 2008-2015 Jay Freeman (saurik)
+*/
+
+/* GNU General Public License, Version 3 {{{ */
+/*
+ * Cydia is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation, either version 3 of the License,
+ * or (at your option) any later version.
+ *
+ * Cydia is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Cydia. If not, see <http://www.gnu.org/licenses/>.
+**/
+/* }}} */
+
+#include "CyteKit/UCPlatform.h"
+
+#include "CyteKit/ViewController.h"
+#include "CyteKit/Window.h"
+
+#include "iPhonePrivate.h"
+#include <Menes/ObjectHandle.h>
+
+@implementation CyteWindow {
+ _transient UIViewController *root_;
+}
+
+- (void) setRootViewController:(UIViewController *)controller {
+ if ([super respondsToSelector:@selector(setRootViewController:)])
+ [super setRootViewController:controller];
+ else {
+ [self addSubview:[controller view]];
+ [[root_ view] removeFromSuperview];
+ }
+
+ root_ = controller;
+}
+
+- (void) unloadData {
+ [root_ unloadData];
+}
+
+@end
}
- (void) unload {
- [delegate_ performSelectorOnMainThread:@selector(unloadData) withObject:nil waitUntilDone:NO];
+ [[indirect_ rootViewController] performSelectorOnMainThread:@selector(unloadData) withObject:nil waitUntilDone:NO];
}
- (void) setScrollAlwaysBounceVertical:(NSNumber *)value {
[self getKeyboardCurve:&curve duration:&duration forNotification:notification];
CGRect kbframe = CGRectMake(Retina(center.x - bounds.size.width / 2), Retina(center.y - bounds.size.height / 2), bounds.size.width, bounds.size.height);
- UIViewController *base = self;
- while ([base parentOrPresentingViewController] != nil)
- base = [base parentOrPresentingViewController];
+ UIViewController *base([self rootViewController]);
CGRect viewframe = [[base view] convertRect:[list_ frame] fromView:[list_ superview]];
CGRect intersection = CGRectIntersection(viewframe, kbframe);
DatabaseDelegate,
CydiaDelegate
> {
- _H<UIWindow> window_;
+ _H<CyteWindow> window_;
_H<CydiaTabBarController> tabbar_;
_H<CyteTabBarController> emulated_;
_H<AppCacheController> appcache_;
return [controllers objectAtIndex:3];
}
-- (void) unloadData {
- [tabbar_ unloadData];
-}
-
- (void) _updateData {
[self _saveConfig];
- [self unloadData];
+ [window_ unloadData];
UINavigationController *navigation = [self queueNavigationController];
if (emulated_ == nil)
return;
- if ([window_ respondsToSelector:@selector(setRootViewController:)])
- [window_ setRootViewController:tabbar_];
- else {
- [window_ addSubview:[tabbar_ view]];
- [[emulated_ view] removeFromSuperview];
- }
-
+ [window_ setRootViewController:tabbar_];
emulated_ = nil;
+
[window_ setUserInteractionEnabled:YES];
}
[self reloadSpringBoard];
}
-- (void) setupViewControllers {
- tabbar_ = [[[CydiaTabBarController alloc] initWithDatabase:database_] autorelease];
-
- NSMutableArray *items;
- if (kCFCoreFoundationVersionNumber < 800) {
- items = [NSMutableArray arrayWithObjects:
- [[[UITabBarItem alloc] initWithTitle:@"Cydia" image:[UIImage imageNamed:@"home.png"] tag:0] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("SOURCES") image:[UIImage imageNamed:@"install.png"] tag:0] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("CHANGES") image:[UIImage imageNamed:@"changes.png"] tag:0] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("INSTALLED") image:[UIImage imageNamed:@"manage.png"] tag:0] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("SEARCH") image:[UIImage imageNamed:@"search.png"] tag:0] autorelease],
- nil];
- } else {
- items = [NSMutableArray arrayWithObjects:
- [[[UITabBarItem alloc] initWithTitle:@"Cydia" image:[UIImage imageNamed:@"home7.png"] selectedImage:[UIImage imageNamed:@"home7s.png"]] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("SOURCES") image:[UIImage imageNamed:@"install7.png"] selectedImage:[UIImage imageNamed:@"install7s.png"]] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("CHANGES") image:[UIImage imageNamed:@"changes7.png"] selectedImage:[UIImage imageNamed:@"changes7s.png"]] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("INSTALLED") image:[UIImage imageNamed:@"manage7.png"] selectedImage:[UIImage imageNamed:@"manage7s.png"]] autorelease],
- [[[UITabBarItem alloc] initWithTitle:UCLocalize("SEARCH") image:[UIImage imageNamed:@"search7.png"] selectedImage:[UIImage imageNamed:@"search7s.png"]] autorelease],
- nil];
- }
-
- NSMutableArray *controllers([NSMutableArray array]);
- for (UITabBarItem *item in items) {
- UINavigationController *controller([[[UINavigationController alloc] init] autorelease]);
- [controller setTabBarItem:item];
- [controllers addObject:controller];
- }
- [tabbar_ setViewControllers:controllers];
-
- [tabbar_ setUpdateDelegate:self];
-}
-
- (void) applicationDidFinishLaunching:(id)unused {
[super applicationDidFinishLaunching:unused];
_trace();
appcache_ = [[[AppCacheController alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/appcache/", UI_]]] autorelease];
[appcache_ reloadData];
- window_ = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
+ window_ = [[[CyteWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
[window_ orderFront:self];
[window_ makeKey:self];
[window_ setHidden:NO];
[database_ setDelegate:self];
[window_ setUserInteractionEnabled:NO];
- [self setupViewControllers];
+
+ tabbar_ = [[[CydiaTabBarController alloc] initWithDatabase:database_] autorelease];
+
+ [tabbar_ addViewControllers:nil,
+ @"Cydia", @"home.png", @"home7.png", @"home7s.png",
+ UCLocalize("SOURCES"), @"install.png", @"install7.png", @"install7s.png",
+ UCLocalize("CHANGES"), @"changes.png", @"changes7.png", @"changes7s.png",
+ UCLocalize("INSTALLED"), @"manage.png", @"manage7.png", @"manage7s.png",
+ UCLocalize("SEARCH"), @"search.png", @"search7.png", @"search7s.png",
+ nil];
+
+ [tabbar_ setUpdateDelegate:self];
CydiaLoadingViewController *loading([[[CydiaLoadingViewController alloc] init] autorelease]);
UINavigationController *navigation([[[UINavigationController alloc] init] autorelease]);
if ([emulated_ respondsToSelector:@selector(concealTabBarSelection)])
[emulated_ concealTabBarSelection];
- if ([window_ respondsToSelector:@selector(setRootViewController:)])
- [window_ setRootViewController:emulated_];
- else
- [window_ addSubview:[emulated_ view]];
+ [window_ setRootViewController:emulated_];
[self performSelector:@selector(loadData) withObject:nil afterDelay:0];
_trace();