summaryrefslogtreecommitdiff
path: root/CyteKit/ViewController.mm
blob: a573150d1b2ee48b272e2da0240f73f821bc94be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/* Cydia - iPhone UIKit Front-End for Debian APT
 * Copyright (C) 2008-2013  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/ViewController.h"

#include <Foundation/Foundation.h>
#include <UIKit/UIKit.h>

#include "iPhonePrivate.h"

extern bool IsWildcat_;

@implementation UIViewController (Cydia)

- (BOOL) hasLoaded {
    return YES;
}

- (void) reloadData {
    [self view];
}

- (void) unloadData {
    if (UIViewController *modal = [self modalViewController])
        [modal unloadData];
}

- (UIViewController *) parentOrPresentingViewController {
    if (UIViewController *parent = [self parentViewController])
        return parent;
    if ([self respondsToSelector:@selector(presentingViewController)])
        return [self presentingViewController];
    return nil;
}

@end

@implementation CyteViewController

- (void) setDelegate:(id)delegate {
    delegate_ = delegate;
}

- (id) delegate {
    return delegate_;
}

- (void) viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Load on first appearance. We don't need to set the loaded flag here
    // because it is set for us the first time -reloadData is called.
    if (![self hasLoaded])
        [self reloadData];
}

- (BOOL) hasLoaded {
    return loaded_;
}

- (void) releaseSubviews {
    loaded_ = NO;
}

- (void) setView:(UIView *)view {
    // Nasty hack for 2.x-compatibility. In 3.0+, we can and
    // should just override -viewDidUnload instead.
    if (view == nil)
        [self releaseSubviews];

    [super setView:view];
}

- (void) reloadData {
    [super reloadData];

    // This is called automatically on the first appearance of a controller,
    // or any other time it needs to reload the information shown. However (!),
    // this is not called by any tab bar or navigation controller's -reloadData
    // method unless this controller returns YES from -hadLoaded.
    loaded_ = YES;
}

- (void) unloadData {
    loaded_ = NO;
    [super unloadData];
}

- (NSURL *) navigationURL {
    return nil;
}

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return IsWildcat_ || orientation == UIInterfaceOrientationPortrait;
}

- (NSUInteger) supportedInterfaceOrientations {
    return IsWildcat_ ? UIInterfaceOrientationMaskAll : UIInterfaceOrientationMaskPortrait;
}

- (BOOL) shouldAutorotate {
    return YES;
}

- (void) setPageColor:(UIColor *)color {
    if (color == nil) {
        color = [UIColor groupTableViewBackgroundColor];
        // on iOS 6 they removed groupTableViewBackgroundColor (it is present on iOS 5 and iOS 6)
        if ([color isEqual:[UIColor clearColor]]) {
            if (!IsWildcat_) // on devices that aren't iPads, we can just fall back to pinStripeColor
                color = [UIColor pinStripeColor];
            else // I don't remember where I got this color, but it is only an approximation of a gradient
                color = [UIColor colorWithRed:(215.0/255.0) green:(217.0/255.0) blue:(223.0/255.0) alpha:1.0];
        }
    } color_ = color;
}

@end