aboutsummaryrefslogtreecommitdiff
path: root/samples/Objective-C/PlaygroundViewController.m
diff options
context:
space:
mode:
Diffstat (limited to 'samples/Objective-C/PlaygroundViewController.m')
-rw-r--r--samples/Objective-C/PlaygroundViewController.m200
1 files changed, 200 insertions, 0 deletions
diff --git a/samples/Objective-C/PlaygroundViewController.m b/samples/Objective-C/PlaygroundViewController.m
new file mode 100644
index 0000000..5d52d91
--- /dev/null
+++ b/samples/Objective-C/PlaygroundViewController.m
@@ -0,0 +1,200 @@
+//
+// Copyright 2009-2011 Facebook
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#import "PlaygroundViewController.h"
+
+#import <Three20Core/NSDataAdditions.h>
+
+static const CGFloat kFramePadding = 10;
+static const CGFloat kElementSpacing = 5;
+static const CGFloat kGroupSpacing = 10;
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////////////////
+@implementation PlaygroundViewController
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat) addHeader:(NSString*)text yOffset:(CGFloat)yOffset {
+ UILabel* label = [[UILabel alloc] initWithFrame:CGRectZero];
+ label.text = text;
+ label.font = [UIFont systemFontOfSize:20];
+ label.numberOfLines = 0;
+
+ CGRect frame = label.frame;
+ frame.origin.x = kFramePadding;
+ frame.origin.y = yOffset;
+ frame.size.width = 320 - kFramePadding * 2;
+ frame.size.height = [text sizeWithFont:label.font
+ constrainedToSize:CGSizeMake(frame.size.width, 10000)].height;
+ label.frame = frame;
+
+ [_scrollView addSubview:label];
+
+ yOffset += label.frame.size.height + kElementSpacing;
+
+ TT_RELEASE_SAFELY(label);
+
+ return yOffset;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (CGFloat) addText:(NSString*)text yOffset:(CGFloat)yOffset {
+ UILabel* label = [[UILabel alloc] initWithFrame:CGRectZero];
+ label.text = text;
+ label.numberOfLines = 0;
+
+ CGRect frame = label.frame;
+ frame.origin.x = kFramePadding;
+ frame.origin.y = yOffset;
+ frame.size.width = 320 - kFramePadding * 2;
+ frame.size.height = [text sizeWithFont:label.font
+ constrainedToSize:CGSizeMake(frame.size.width, 10000)].height;
+ label.frame = frame;
+
+ [_scrollView addSubview:label];
+
+ yOffset += label.frame.size.height + kElementSpacing;
+
+ TT_RELEASE_SAFELY(label);
+
+ return yOffset;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void) loadView {
+ [super loadView];
+
+ _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
+ _scrollView.autoresizingMask =
+ UIViewAutoresizingFlexibleWidth
+ | UIViewAutoresizingFlexibleHeight;
+
+ [self.view addSubview:_scrollView];
+
+ CGFloat yOffset = kFramePadding;
+
+ yOffset = [self addHeader:NSLocalizedString(@"TTDebug", @"") yOffset:yOffset];
+
+ {
+ UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+ [button setTitle:NSLocalizedString(@"Debug test", @"") forState:UIControlStateNormal];
+ [button addTarget: self
+ action: @selector(debugTestAction)
+ forControlEvents: UIControlEventTouchUpInside];
+ [button sizeToFit];
+
+ CGRect frame = button.frame;
+ frame.origin.x = kFramePadding;
+ frame.origin.y = yOffset;
+ button.frame = frame;
+
+ [_scrollView addSubview:button];
+
+ yOffset += frame.size.height;
+ }
+
+ yOffset += kGroupSpacing;
+
+ yOffset = [self addHeader:NSLocalizedString(@"TTGlobalCoreLocale", @"") yOffset:yOffset];
+ yOffset = [self addText:[NSString stringWithFormat:NSLocalizedString(@"Current locale: %@", @""),
+ [TTCurrentLocale()
+ displayNameForKey:NSLocaleIdentifier
+ value:[TTCurrentLocale() localeIdentifier]]]
+ yOffset:yOffset];
+ yOffset += kGroupSpacing;
+
+ yOffset = [self addHeader:NSLocalizedString(@"TTGlobalCorePaths", @"") yOffset:yOffset];
+ yOffset = [self addText:[NSString stringWithFormat:NSLocalizedString(@"Bundle path: %@", @""),
+ TTPathForBundleResource(@"Icon.png")]
+ yOffset:yOffset];
+ yOffset = [self addText:[NSString stringWithFormat:NSLocalizedString(@"Document path: %@", @""),
+ TTPathForDocumentsResource(@"document.pdf")]
+ yOffset:yOffset];
+ yOffset += kGroupSpacing;
+
+ yOffset = [self addHeader:NSLocalizedString(@"NSDataAdditions", @"") yOffset:yOffset];
+ yOffset = [self addText:[NSString stringWithFormat:NSLocalizedString(@"MD5 Hash of \"Three20\": %@", @""),
+ [[@"Three20" dataUsingEncoding:NSUTF8StringEncoding] md5Hash]]
+ yOffset:yOffset];
+ yOffset += kGroupSpacing;
+
+ [_scrollView setContentSize:CGSizeMake(320, yOffset)];
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void) viewDidUnload {
+ [super viewDidUnload];
+
+ TT_RELEASE_SAFELY(_scrollView);
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void) viewDidAppear:(BOOL)animated {
+ [super viewDidAppear:animated];
+
+ [_scrollView flashScrollIndicators];
+}
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+- (void) debugTestAction {
+#ifdef DEBUG
+ NSLog(@"Three20 debug logging is currently...ON");
+#else
+ NSLog(@"Three20 debug logging is currently...OFF");
+#endif
+
+ // This will print the current method name.
+ TTDPRINTMETHODNAME();
+
+ TTDPRINT(@"Showing TTDPRINT.");
+ TTDPRINT(@"-----------------");
+ TTDPRINT(@"Showing TTD log levels <= %d", TTMAXLOGLEVEL);
+ TTDERROR(@"This is TTDERROR, level %d.", TTLOGLEVEL_ERROR);
+ TTDWARNING(@"This is TTDWARNING, level %d.", TTLOGLEVEL_WARNING);
+ TTDINFO(@"This is TTDINFO, level %d.", TTLOGLEVEL_INFO);
+
+ TTDPRINT(@"");
+ TTDPRINT(@"Showing TTDCONDITIONLOG.");
+ TTDPRINT(@"------------------------");
+ TTDCONDITIONLOG(true, @"This will always display because the condition is \"true\"");
+ TTDCONDITIONLOG(false, @"This will never display because the condition is \"false\"");
+ TTDCONDITIONLOG(rand()%2, @"This will randomly display because the condition is \"rand()%2\"");
+
+ TTDPRINT(@"");
+ TTDPRINT(@"Showing TTDASSERT.");
+ TTDPRINT(@"------------------");
+ // Should do nothing at all.
+ TTDASSERT(true);
+
+ // This will jump you into the debugger in the simulator.
+ // Note that this isn't a crash! Simply the equivalent of setting
+ // a breakpoint in the debugger, but programmatically. These TTDASSERTs
+ // will be completely stripped away from your final product, assuming
+ // you don't declare the DEBUG preprocessor macro (and you shouldn't in
+ // your final product).
+ TTDASSERT(false);
+}
+
+
+@end