hostile-takeover/game/iphone/webviewcontroller.mm
2016-01-01 14:30:49 -08:00

176 lines
6.1 KiB
Plaintext

#import "game/iphone/webviewcontroller.h"
@implementation WebViewController
- (id)init:(id<WebViewControllerDelegate>)delegate parent:(UIView *)parent {
parent_ = parent;
[parent_ retain];
delegate_ = delegate;
[delegate_ retain];
view_ = nil;
webView_ = nil;
activityView_ = nil;
backButton_ = nil;
forwardButton_ = nil;
[self loadView];
return self;
}
- (void)dealloc {
[webView_ release];
[activityView_ release];
[backButton_ release];
[forwardButton_ release];
[view_ release];
[delegate_ release];
[parent_ release];
[super dealloc];
}
- (void)loadView {
// Create parent view for web view and toolbar
CGRect frame = CGRectMake(0, 0, parent_.frame.size.width,
parent_.frame.size.height);
UIView *parentView = [[[UIView alloc] initWithFrame:frame] autorelease];
parentView.autoresizesSubviews = YES;
parentView.autoresizingMask = UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleWidth;
// Create toolbar
UIToolbar *toolbar = [[[UIToolbar alloc] initWithFrame:CGRectZero] autorelease];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleWidth;
toolbar.autoresizesSubviews = YES;
[parentView addSubview: toolbar];
// Add buttons to toolbar
UIBarButtonItem *spacer0 = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil] autorelease];
spacer0.width = 10;
UIImage *backImage = [UIImage imageNamed:@"NavBackSmall.png"];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:backImage forState:UIControlStateNormal];
[backButton addTarget:self action:@selector(onBack)
forControlEvents:UIControlEventTouchUpInside];
backButton.enabled = NO;
backButton.showsTouchWhenHighlighted = YES;
UIBarButtonItem *backBarButton = [[[UIBarButtonItem alloc]
initWithCustomView:backButton] autorelease];
UIBarButtonItem *spacer1 = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil action:nil] autorelease];
UIImage *forwardImage = [UIImage imageNamed:@"NavForwardSmall.png"];
UIButton *forwardButton = [UIButton buttonWithType:UIButtonTypeCustom];
[forwardButton setImage:forwardImage forState:UIControlStateNormal];
[forwardButton addTarget:self action:@selector(onForward)
forControlEvents:UIControlEventTouchUpInside];
forwardButton.enabled = NO;
forwardButton.showsTouchWhenHighlighted = YES;
UIBarButtonItem *forwardBarButton = [[[UIBarButtonItem alloc]
initWithCustomView:forwardButton] autorelease];
UIBarButtonItem *spacer2 = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil action:nil] autorelease];
UIActivityIndicatorView *activityView = [[[UIActivityIndicatorView alloc]
initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleWhite]
autorelease];
UIBarButtonItem *activityBarButton = [[[UIBarButtonItem alloc]
initWithCustomView:activityView] autorelease];
UIBarButtonItem *spacer3 = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil action:nil] autorelease];
UIBarButtonItem *doneBarButton = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self action:@selector(onDone)] autorelease];
NSArray *array = [NSArray arrayWithObjects: spacer0, backBarButton, spacer1,
forwardBarButton, spacer2, activityBarButton, spacer3,
doneBarButton, nil];
[toolbar setItems:array animated:NO];
[toolbar sizeToFit];
// Need to set bounds for these or they won't hittest
backButton.bounds = CGRectMake(0, 0, backImage.size.width,
toolbar.frame.size.height);
forwardButton.bounds = CGRectMake(0, 0, forwardImage.size.width,
toolbar.frame.size.height);
// Create web view
frame.size.height -= toolbar.frame.size.height;
UIWebView *webView = [[[UIWebView alloc] initWithFrame:frame] autorelease];
webView.backgroundColor = [UIColor whiteColor];
webView.scalesPageToFit = YES;
webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleHeight);
webView.delegate = self;
[parentView addSubview: webView];
// Position toolbar
CGRect toolbar_frame = toolbar.frame;
CGRect parent_frame = parentView.bounds;
toolbar_frame.origin.y = parent_frame.size.height -
toolbar_frame.size.height;
toolbar.frame = toolbar_frame;
// Keep these around
view_ = parentView;
[view_ retain];
webView_ = webView;
[webView_ retain];
activityView_ = activityView;
[activityView_ retain];
backButton_ = backButton;
[backButton_ retain];
forwardButton_ = forwardButton;
[forwardButton_ retain];
}
- (void)show {
[parent_ addSubview:view_];
}
- (void)onDone {
[view_ removeFromSuperview];
[delegate_ onDone:self];
}
- (void)loadDocument:(NSString *)url withTitle:(NSString *)title {
NSURLRequest *req = [NSURLRequest requestWithURL:
[NSURL URLWithString:url]];
[webView_ loadRequest:req];
}
- (void)setDocument:(NSString *)doc {
[webView_ loadHTMLString:doc baseURL:nil];
}
- (void)updateNavButtons {
backButton_.enabled = webView_.canGoBack;
forwardButton_.enabled = webView_.canGoForward;
}
- (void)webViewDidStartLoad:(UIWebView *)webview {
[activityView_ startAnimating];
[self updateNavButtons];
}
- (void)webViewDidFinishLoad:(UIWebView *)webview {
[activityView_ stopAnimating];
[self updateNavButtons];
}
- (void)onBack {
[webView_ goBack];
}
- (void)onForward {
[webView_ goForward];
}
- (void)webView:(UIWebView *)webview didFailLoadWithError:(NSError *)error {
[webView_ loadHTMLString:@"<html><body style=\"font-size:25px;\"><b>Timed out loading page.</b></body></html>" baseURL:nil];
}
@end