]> git.saurik.com Git - cydia.git/commitdiff
New settings view. Moar awesome. Crashes in a weird way. Hard.
authorGrant Paul <chpwn@chpwn.com>
Sun, 3 Oct 2010 08:13:45 +0000 (01:13 -0700)
committerJay Freeman <saurik@Jay-Freemans-MacBook-Pro.local>
Mon, 4 Oct 2010 07:12:21 +0000 (00:12 -0700)
Cydia.mm

index 6c316248af7320b769bb45d9b2bb9f23193af0d2..b8bdb0ef305ffd13d24788665f5d246ee62467eb 100644 (file)
--- a/Cydia.mm
+++ b/Cydia.mm
@@ -1253,7 +1253,7 @@ bool isSectionVisible(NSString *section) {
 - (void) distUpgrade;
 - (void) updateData;
 - (void) syncData;
 - (void) distUpgrade;
 - (void) updateData;
 - (void) syncData;
-- (void) askForSettings;
+- (void) showSettings;
 - (UIProgressHUD *) addProgressHUD;
 - (void) removeProgressHUD:(UIProgressHUD *)hud;
 - (UIViewController *) pageForPackage:(NSString *)name;
 - (UIProgressHUD *) addProgressHUD;
 - (void) removeProgressHUD:(UIProgressHUD *)hud;
 - (UIViewController *) pageForPackage:(NSString *)name;
@@ -4155,7 +4155,8 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
         [self loadURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"confirm" ofType:@"html"]]];
 
         UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]
         [self loadURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"confirm" ofType:@"html"]]];
 
         UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]
-            initWithTitle:UCLocalize("CANCEL")//[NSString stringWithFormat:UCLocalize("SLASH_DELIMITED"), UCLocalize("CANCEL"), UCLocalize("QUEUE")]
+            initWithTitle:UCLocalize("CANCEL")
+            // OLD: [NSString stringWithFormat:UCLocalize("SLASH_DELIMITED"), UCLocalize("CANCEL"), UCLocalize("QUEUE")]
             style:UIBarButtonItemStylePlain
             target:self
             action:@selector(cancelButtonClicked)
             style:UIBarButtonItemStylePlain
             target:self
             action:@selector(cancelButtonClicked)
@@ -6392,8 +6393,7 @@ bool DepSubstrate(const pkgCache::VerIterator &iterator) {
 }
 
 - (void) settingsButtonClicked {
 }
 
 - (void) settingsButtonClicked {
-    [delegate_ askForSettings];
-    [delegate_ updateData];
+    [delegate_ showSettings];
 }
 
 #if !AlwaysReload
 }
 
 #if !AlwaysReload
@@ -7467,6 +7467,140 @@ freeing the view controllers on tab change */
     [self loadURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"signature" ofType:@"html"]]];
 }
 
     [self loadURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"signature" ofType:@"html"]]];
 }
 
+@end
+/* }}} */
+/* Role Controller {{{ */
+@interface RoleController : CYViewController {
+    _transient Database *database_;
+    id roledelegate_;
+    UITableView *table_;
+    UISegmentedControl *segment_;
+    UIView *container_;
+}
+@end
+
+@implementation RoleController
+- (void) dealloc {
+    [table_ release];
+    [segment_ release];
+    [container_ release];
+    
+    [super dealloc];
+}
+
+- (id) initWithDatabase:(Database *)database delegate:(id)delegate {
+    if ((self = [super init])) {
+        database_ = database;
+        roledelegate_ = delegate;
+        
+        [[self navigationItem] setTitle:UCLocalize("WHO_ARE_YOU")];
+        
+        NSArray *items = [NSArray arrayWithObjects:
+            UCLocalize("USER"), 
+            UCLocalize("HACKER"),
+            UCLocalize("DEVELOPER"),
+        nil];
+        segment_ = [[UISegmentedControl alloc] initWithItems:items];
+        container_ = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [[self view] frame].size.width, 44.0f)];
+        [container_ addSubview:segment_];
+        CGFloat width = [[self view] frame].size.width;
+        [segment_ setFrame:CGRectMake(width / 32.0f, 0, width - (width / 32.0f * 2.0f), 44.0f)];
+        
+        int index = -1;
+        if ([Role_ isEqualToString:@"User"]) index = 0;
+        if ([Role_ isEqualToString:@"Hacker"]) index = 1;
+        if ([Role_ isEqualToString:@"Developer"]) index = 2;
+        if (index != -1) {
+            [segment_ setSelectedSegmentIndex:index];
+            [self showDoneButton];
+        }
+        
+        [segment_ addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged];
+        
+        table_ = [[UITableView alloc] initWithFrame:[[self view] bounds] style:UITableViewStyleGrouped];
+        [table_ setAutoresizingMask:UIViewAutoresizingFlexibleBoth];
+        [table_ setDelegate:self];
+        [table_ setDataSource:self];
+        [[self view] addSubview:table_];
+        [table_ reloadData];
+    } return self;
+}
+
+- (void) save {
+    switch ([segment_ selectedSegmentIndex]) {
+        case 0: Role_ = @"User"; break;
+        case 1: Role_ = @"Hacker"; break;
+        case 2: Role_ = @"Developer"; break;
+
+        _nodefault
+    }
+
+    Settings_ = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+        Role_, @"Role",
+    nil];
+
+    [Metadata_ setObject:Settings_ forKey:@"Settings"];
+
+    Changed_ = true;
+    
+    [delegate_ updateData];
+}
+
+- (void) segmentChanged:(UISegmentedControl *)control {
+    [self showDoneButton];
+}
+
+- (void) doneButtonClicked {
+    [self save];
+    [[self navigationController] dismissModalViewControllerAnimated:YES];
+}
+
+- (void) showDoneButton {
+    UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]
+        initWithTitle:UCLocalize("DONE")
+        style:UIBarButtonItemStyleDone
+        target:self
+        action:@selector(doneButtonClicked)
+    ];
+    [[self navigationItem] setRightBarButtonItem:rightItem animated:[[self navigationItem] rightBarButtonItem] == nil];
+    [rightItem release];
+}
+
+- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
+    return 5;
+}
+
+- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return 0; // :(
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return nil; // This method is required by the protocol.
+}
+
+- (NSString *) tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
+    if (section == 1) 
+        return UCLocalize("ROLE_EX");
+    if (section == 4) 
+        return [NSString stringWithFormat:
+            @"%@: %@\n%@: %@\n%@: %@",
+            UCLocalize("USER"), UCLocalize("USER_EX"), 
+            UCLocalize("HACKER"), UCLocalize("HACKER_EX"), 
+            UCLocalize("DEVELOPER"), UCLocalize("DEVELOPER_EX")
+        ];
+    else return nil;
+}
+
+- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
+    if (section == 3) return 44.0f;
+    else return 0;
+}
+
+- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
+    if (section == 3) return container_;
+    else return nil;
+}
+
 @end
 /* }}} */
 
 @end
 /* }}} */
 
@@ -8145,40 +8279,10 @@ static _finline void _setHomePage(Cydia *self) {
     tag_ = tag;
 }
 
     tag_ = tag;
 }
 
-- (void) askForSettings {
-    NSString *parenthetical(UCLocalize("PARENTHETICAL"));
-
-    CYActionSheet *role([[[CYActionSheet alloc]
-        initWithTitle:UCLocalize("WHO_ARE_YOU")
-        buttons:[NSArray arrayWithObjects:
-            [NSString stringWithFormat:parenthetical, UCLocalize("USER"), UCLocalize("USER_EX")],
-            [NSString stringWithFormat:parenthetical, UCLocalize("HACKER"), UCLocalize("HACKER_EX")],
-            [NSString stringWithFormat:parenthetical, UCLocalize("DEVELOPER"), UCLocalize("DEVELOPER_EX")],
-        nil]
-        defaultButtonIndex:-1
-    ] autorelease]);
-
-    [role setMessage:UCLocalize("ROLE_EX")];
-
-    int button([role yieldToPopupAlertAnimated:YES]);
-
-    switch (button) {
-        case 1: Role_ = @"User"; break;
-        case 2: Role_ = @"Hacker"; break;
-        case 3: Role_ = @"Developer"; break;
-
-        _nodefault
-    }
-
-    Settings_ = [NSMutableDictionary dictionaryWithObjectsAndKeys:
-        Role_, @"Role",
-    nil];
-
-    [Metadata_ setObject:Settings_ forKey:@"Settings"];
-
-    Changed_ = true;
-
-    [role dismiss];
+- (void) showSettings {
+    RoleController *role = [[RoleController alloc] initWithDatabase:database_ delegate:self];
+    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:role];
+    [container_ presentModalViewController:nav animated:YES];
 }
 
 - (void) setPackageController:(PackageController *)view {
 }
 
 - (void) setPackageController:(PackageController *)view {
@@ -8465,7 +8569,7 @@ static _finline void _setHomePage(Cydia *self) {
     }
 
     if (Role_ == nil)
     }
 
     if (Role_ == nil)
-        [self askForSettings];
+        [self showSettings];
 
     _trace();
 
 
     _trace();
 
@@ -8732,7 +8836,8 @@ int main(int argc, char *argv[]) { _pooled
     if (Metadata_ == NULL)
         Metadata_ = [NSMutableDictionary dictionaryWithCapacity:2];
     else {
     if (Metadata_ == NULL)
         Metadata_ = [NSMutableDictionary dictionaryWithCapacity:2];
     else {
-        Settings_ = [Metadata_ objectForKey:@"Settings"];
+        
+        Role_ = [Metadata_ objectForKey:@"Settings"];
 
         Packages_ = [Metadata_ objectForKey:@"Packages"];
         Sections_ = [Metadata_ objectForKey:@"Sections"];
 
         Packages_ = [Metadata_ objectForKey:@"Packages"];
         Sections_ = [Metadata_ objectForKey:@"Sections"];