f3493f0e1f
http://codereview.appspot.com/4843041/ http://codereview.appspot.com/4826061/ http://codereview.appspot.com/4832044/ http://codereview.appspot.com/4798055/ git-svn-id: http://skia.googlecode.com/svn/trunk@2058 2bbb7eff-a529-9590-31e7-b0007b416f81
176 lines
6.8 KiB
Plaintext
176 lines
6.8 KiB
Plaintext
#import "SkAlertPrompt.h"
|
|
#import "SkUIDetailViewController.h"
|
|
#include "SampleApp.h"
|
|
#include "SkCGUtils.h"
|
|
#include "SkData.h"
|
|
#include "SkOSMenu.h"
|
|
@implementation SkUIDetailViewController
|
|
@synthesize fPrintButton, fOptionsButton, fPopOverController, fOptionsController;
|
|
|
|
//Overwritten from UIViewController
|
|
- (void)viewDidLoad {
|
|
[super viewDidLoad];
|
|
|
|
fSkUIView = (SkUIView*)self.view;
|
|
|
|
fWind = (SampleWindow*)fSkUIView.fWind;
|
|
fSkUIView.fTitleItem = self.navigationItem;
|
|
|
|
[self createButtons];
|
|
|
|
UISwipeGestureRecognizer* swipe = [[UISwipeGestureRecognizer alloc]
|
|
initWithTarget:self
|
|
action:@selector(handleSwipe:)];
|
|
[self.navigationController.navigationBar addGestureRecognizer:swipe];
|
|
[swipe release];
|
|
swipe = [[UISwipeGestureRecognizer alloc]
|
|
initWithTarget:self
|
|
action:@selector(handleSwipe:)];
|
|
swipe.direction = UISwipeGestureRecognizerDirectionLeft;
|
|
[self.navigationController.navigationBar addGestureRecognizer:swipe];
|
|
[swipe release];
|
|
|
|
fOptionsController = [[SkOptionsTableViewController alloc]
|
|
initWithStyle:UITableViewStyleGrouped];
|
|
fSkUIView.fOptionsDelegate = fOptionsController;
|
|
[fOptionsController registerMenus:fWind->getMenus()];
|
|
|
|
}
|
|
|
|
- (void)createButtons {
|
|
UIToolbar* toolbar = [[UIToolbar alloc]
|
|
initWithFrame:CGRectMake(0, 0, 125, 45)];
|
|
[toolbar setBarStyle: UIBarStyleBlackOpaque];
|
|
|
|
UIBarButtonItem* flexibleSpace = [[UIBarButtonItem alloc]
|
|
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
|
|
target:nil
|
|
action:nil];
|
|
|
|
fOptionsButton = [[UIBarButtonItem alloc]
|
|
initWithTitle:@"Options"
|
|
style:UIBarButtonItemStylePlain
|
|
target:self
|
|
action:@selector(presentOptions)];
|
|
UIBarButtonItem* fixedSpace = [[UIBarButtonItem alloc]
|
|
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
|
|
target:nil
|
|
action:nil];
|
|
fixedSpace.width = 10;
|
|
|
|
fPrintButton = [[UIBarButtonItem alloc]
|
|
initWithBarButtonSystemItem:UIBarButtonSystemItemAction
|
|
target:self
|
|
action:@selector(printContent)];
|
|
fPrintButton.style = UIBarButtonItemStylePlain;
|
|
|
|
[toolbar setItems:[NSArray arrayWithObjects:flexibleSpace, fOptionsButton, fixedSpace, fPrintButton, nil]
|
|
animated:NO];
|
|
|
|
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
|
|
initWithCustomView:toolbar];
|
|
[flexibleSpace release];
|
|
[fixedSpace release];
|
|
[toolbar release];
|
|
}
|
|
|
|
- (void)handleSwipe:(UISwipeGestureRecognizer *)sender {
|
|
if (UISwipeGestureRecognizerDirectionRight == sender.direction)
|
|
fWind->previousSample();
|
|
else
|
|
fWind->nextSample();
|
|
}
|
|
|
|
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
|
|
return YES; // Overriden to allow auto rotation for any direction
|
|
}
|
|
|
|
- (void)dealloc {
|
|
[fPrintButton release];
|
|
[fOptionsButton release];
|
|
[fPopOverController release];
|
|
[fOptionsController release];
|
|
[super dealloc];
|
|
}
|
|
|
|
//Instance Methods
|
|
- (void)populateRoot:(SkUIRootViewController*)rootVC {
|
|
for (int i = 0; i < fWind->sampleCount(); ++i) {
|
|
[rootVC addItem:[NSString stringWithUTF8String:fWind->getSampleTitle(i).c_str()]];
|
|
}
|
|
}
|
|
|
|
- (void)goToItem:(NSUInteger)index {
|
|
fWind->goToSample(index);
|
|
}
|
|
|
|
- (void)printContent {
|
|
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
|
|
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
|
|
printInfo.jobName = @"Skia iOS SampleApp";
|
|
printInfo.duplex = UIPrintInfoDuplexLongEdge;
|
|
printInfo.outputType = UIPrintInfoOutputGeneral;
|
|
fWind->saveToPdf();
|
|
[fSkUIView forceRedraw];
|
|
fData = fWind->getPDFData();
|
|
NSData* data = [NSData dataWithBytesNoCopy:(void*)fData->data() length:fData->size()];
|
|
controller.printInfo = printInfo;
|
|
controller.printingItem = data;
|
|
//Add ref because data pointer retains a pointer to data
|
|
fData->ref();
|
|
|
|
void (^SkCompletionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
|
|
^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
|
|
fData->unref();
|
|
if (!completed && error)
|
|
NSLog(@"FAILED! due to error in domain %@ with error code %u",
|
|
error.domain, error.code);
|
|
};
|
|
|
|
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
|
|
[controller presentFromBarButtonItem:fPrintButton animated:YES
|
|
completionHandler:SkCompletionHandler];
|
|
} else {
|
|
[controller presentAnimated:YES completionHandler:SkCompletionHandler];
|
|
}
|
|
}
|
|
|
|
- (void)presentOptions {
|
|
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
|
|
if (nil == fPopOverController) {
|
|
UINavigationController* navigation = [[UINavigationController alloc]
|
|
initWithRootViewController:fOptionsController];
|
|
navigation.navigationBar.topItem.title = @"Options";
|
|
fPopOverController = [[UIPopoverController alloc] initWithContentViewController:navigation];
|
|
[navigation release];
|
|
}
|
|
|
|
if (fPopOverController.isPopoverVisible)
|
|
[fPopOverController dismissPopoverAnimated:YES];
|
|
else
|
|
[fPopOverController presentPopoverFromBarButtonItem:fOptionsButton
|
|
permittedArrowDirections:UIPopoverArrowDirectionAny
|
|
animated:YES];
|
|
|
|
} else {
|
|
UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
|
|
style:UIBarButtonItemStyleBordered
|
|
target:nil
|
|
action:nil];
|
|
self.navigationItem.backBarButtonItem = backButton;
|
|
[backButton release];
|
|
[self.navigationController pushViewController:fOptionsController animated:YES];
|
|
self.navigationController.navigationBar.topItem.title = @"Options";
|
|
}
|
|
}
|
|
|
|
//Popover Management
|
|
- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
|
|
[self.navigationItem setLeftBarButtonItem:barButtonItem animated:NO];
|
|
}
|
|
|
|
- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
|
|
[self.navigationItem setLeftBarButtonItem:nil animated:NO];
|
|
}
|
|
|
|
@end |