blob: f19ce762196a59836279c39c3737dc1508eb8c7c [file] [log] [blame]
yangsu@google.com2e20c242011-07-07 19:26:42 +00001#import "SkAlertPrompt.h"
yangsu@google.com2eff7e22011-06-24 15:57:30 +00002#import "SkUIDetailViewController.h"
yangsu@google.com2e20c242011-07-07 19:26:42 +00003#include "SampleApp.h"
4#include "SkApplication.h"
5#include "SkCGUtils.h"
6#include "SkData.h"
7#include "SkWindow.h"
yangsu@google.com2eff7e22011-06-24 15:57:30 +00008
9@implementation SkUIDetailViewController
10@synthesize fNavigationBar, fPrintButton;
11
yangsu@google.com2e20c242011-07-07 19:26:42 +000012//Overwritten from UIViewController
yangsu@google.com2eff7e22011-06-24 15:57:30 +000013- (void)viewDidLoad {
14 [super viewDidLoad];
yangsu@google.com2e20c242011-07-07 19:26:42 +000015
yangsu@google.com2eff7e22011-06-24 15:57:30 +000016 fSkUIView = (SkUIView_shell*)self.view;
17 fSkUIView.fTitle = fNavigationBar.topItem;
yangsu@google.com2e20c242011-07-07 19:26:42 +000018
yangsu@google.com2eff7e22011-06-24 15:57:30 +000019 application_init();
yangsu@google.com2e20c242011-07-07 19:26:42 +000020 fWind = (SampleWindow*)create_sk_window(self.view, NULL, NULL);
yangsu@google.com2eff7e22011-06-24 15:57:30 +000021 CGSize s = self.view.bounds.size;
22 fWind->resize(s.width, s.height);
23 [fSkUIView setSkWindow:(SkOSWindow*)fWind];
yangsu@google.com2e20c242011-07-07 19:26:42 +000024
25 [NSTimer scheduledTimerWithTimeInterval:0.001 target:self
26 selector:@selector(redraw) userInfo:nil
yangsu@google.com2eff7e22011-06-24 15:57:30 +000027 repeats:YES];
28}
29
yangsu@google.com2e20c242011-07-07 19:26:42 +000030- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
31 return YES; // Overriden to allow auto rotation for any direction
32}
33
yangsu@google.com2eff7e22011-06-24 15:57:30 +000034- (void)dealloc {
35 [fNavigationBar release];
36 [fPrintButton release];
37 application_term();
38 delete fWind;
39 [super dealloc];
40}
41
yangsu@google.com2e20c242011-07-07 19:26:42 +000042//Instance Methods
yangsu@google.com2eff7e22011-06-24 15:57:30 +000043- (void)redraw {
44 [self.view setNeedsDisplay];
45}
46
47- (void)populateRoot:(SkUIRootViewController*)rootVC {
48 for (int i = 0; i < fWind->sampleCount(); ++i) {
49 [rootVC addItem:[NSString stringWithUTF8String:fWind->getSampleTitle(i).c_str()]];
50 }
51}
52
53- (void)goToItem:(NSUInteger)index {
yangsu@google.com2e20c242011-07-07 19:26:42 +000054 fWind->goToSample(index);
55}
56
57//UI actions
58- (IBAction)usePipe:(id)sender {
59 //fWind->togglePipe();
yangsu@google.com2eff7e22011-06-24 15:57:30 +000060}
61
62- (IBAction)printContent:(id)sender {
63 UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
64 UIPrintInfo *printInfo = [UIPrintInfo printInfo];
65 printInfo.jobName = @"Skia iOS SampleApp";
66 printInfo.duplex = UIPrintInfoDuplexLongEdge;
yangsu@google.com2eff7e22011-06-24 15:57:30 +000067 printInfo.outputType = UIPrintInfoOutputGeneral;
68 fWind->saveToPdf();
69 [self.view drawRect:self.view.bounds];
70 fData = fWind->getPDFData();
71 NSData* data = [NSData dataWithBytesNoCopy:(void*)fData->data() length:fData->size()];
yangsu@google.com2eff7e22011-06-24 15:57:30 +000072 controller.printInfo = printInfo;
yangsu@google.com2e20c242011-07-07 19:26:42 +000073 controller.printingItem = data;
yangsu@google.com2eff7e22011-06-24 15:57:30 +000074 //Add ref because data pointer retains a pointer to data
75 fData->ref();
yangsu@google.com2e20c242011-07-07 19:26:42 +000076
yangsu@google.com2eff7e22011-06-24 15:57:30 +000077 void (^SkCompletionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
78 ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
79 fData->unref();
80 if (!completed && error)
81 NSLog(@"FAILED! due to error in domain %@ with error code %u",
82 error.domain, error.code);
83 };
yangsu@google.com2e20c242011-07-07 19:26:42 +000084
yangsu@google.com2eff7e22011-06-24 15:57:30 +000085 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
86 [controller presentFromBarButtonItem:fPrintButton animated:YES
87 completionHandler:SkCompletionHandler];
88 } else {
89 [controller presentAnimated:YES completionHandler:SkCompletionHandler];
90 }
91}
92
yangsu@google.com2e20c242011-07-07 19:26:42 +000093- (IBAction)enterServerIP:(id)sender {
94 SkAlertPrompt *prompt = [[SkAlertPrompt alloc] initWithTitle:@"Enter Server IP:"
95 message:@"\n"
96 delegate:self
97 cancelButtonTitle:@"Cancel"
98 otherButtonTitles:@"Enter", nil];
99 // show the dialog box
100 [prompt show];
101 [prompt release];
yangsu@google.com2eff7e22011-06-24 15:57:30 +0000102}
103
yangsu@google.com2e20c242011-07-07 19:26:42 +0000104// manage popup
105- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
106{
107 if (buttonIndex != [alertView cancelButtonIndex])
108 {
109 NSString *entered = [(SkAlertPrompt*)alertView enteredText];
110 //fWind->setServerIP([entered UTF8String]);
111 }
112}
113//Popover Management
yangsu@google.com2eff7e22011-06-24 15:57:30 +0000114- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
115 // Add the popover button to the left navigation item.
116 [fNavigationBar.topItem setLeftBarButtonItem:barButtonItem animated:NO];
117}
118
119
120- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
121 // Remove the popover button.
122 [fNavigationBar.topItem setLeftBarButtonItem:nil animated:NO];
123}
yangsu@google.com2eff7e22011-06-24 15:57:30 +0000124@end