├── StackPanel ├── en.lproj │ ├── InfoPlist.strings │ └── MainWindow.xib ├── StackPanel-Prefix.pch ├── main.m ├── StackPanelAppDelegate.h ├── StackPanel-Info.plist ├── StackPanelAppDelegate.m ├── StackPanel.h └── StackPanel.m ├── stackpanel.png ├── .gitignore ├── README.markdown └── StackPanel.xcodeproj └── project.pbxproj /StackPanel/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /stackpanel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaronbrethorst/StackPanel/HEAD/stackpanel.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | StackPanel.xcodeproj/project.xcworkspace 3 | StackPanel.xcodeproj/xcuserdata 4 | StackPanel.xcodeproj/project.xcworkspace/xcuserdata 5 | -------------------------------------------------------------------------------- /StackPanel/StackPanel-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'StackPanel' target in the 'StackPanel' project 3 | // 4 | 5 | #import 6 | 7 | #ifndef __IPHONE_3_0 8 | #warning "This project uses features only available in iPhone SDK 3.0 and later." 9 | #endif 10 | 11 | #ifdef __OBJC__ 12 | #import 13 | #import 14 | #endif 15 | -------------------------------------------------------------------------------- /StackPanel/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // StackPanel 4 | // 5 | // Created by Aaron Brethorst on 3/14/11. 6 | // Copyright 2011 Structlab LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 14 | int retVal = UIApplicationMain(argc, argv, nil, nil); 15 | [pool release]; 16 | return retVal; 17 | } 18 | -------------------------------------------------------------------------------- /StackPanel/StackPanelAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // StackPanelAppDelegate.h 3 | // StackPanel 4 | // 5 | // Created by Aaron Brethorst on 3/14/11. 6 | // Copyright 2011 Structlab LLC. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "StackPanel.h" 11 | 12 | @interface StackPanelAppDelegate : NSObject 13 | { 14 | StackPanel *stackPanel; 15 | } 16 | @property(nonatomic,retain) IBOutlet StackPanel *stackPanel; 17 | @property (nonatomic, retain) IBOutlet UIWindow *window; 18 | - (IBAction)deleteTopItem:(id)sender; 19 | @end 20 | -------------------------------------------------------------------------------- /StackPanel/StackPanel-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | 13 | CFBundleIdentifier 14 | com.structlab.${PRODUCT_NAME:rfc1034identifier} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.0 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 1.0 27 | LSRequiresIPhoneOS 28 | 29 | NSMainNibFile 30 | MainWindow 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /StackPanel/StackPanelAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // StackPanelAppDelegate.m 3 | // StackPanel 4 | // 5 | // Created by Aaron Brethorst on 3/14/11. 6 | // Copyright 2011 Structlab LLC. All rights reserved. 7 | // 8 | 9 | #import "StackPanelAppDelegate.h" 10 | 11 | @implementation StackPanelAppDelegate 12 | 13 | @synthesize stackPanel; 14 | @synthesize window=_window; 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | for (int i=0; i<10; i++) 19 | { 20 | UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, (50 * i) + 50)]; 21 | label.textAlignment = UITextAlignmentCenter; 22 | label.text = [NSString stringWithFormat:@"%@", [label description]]; 23 | label.textColor = [UIColor whiteColor]; 24 | label.numberOfLines = 0; 25 | label.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; 26 | label.backgroundColor = i%2 == 0 ? [UIColor redColor] : [UIColor blueColor]; 27 | [self.stackPanel addStackedView:label reload:NO]; 28 | } 29 | [self.stackPanel reloadStack]; 30 | 31 | [self.window makeKeyAndVisible]; 32 | return YES; 33 | } 34 | 35 | - (IBAction)deleteTopItem:(id)sender 36 | { 37 | [self.stackPanel removeStackedViewAtIndex:0 animation:UITableViewRowAnimationNone]; 38 | } 39 | 40 | - (void)dealloc 41 | { 42 | [stackPanel release]; 43 | [_window release]; 44 | [super dealloc]; 45 | } 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /README.markdown: -------------------------------------------------------------------------------- 1 | StackPanel 2 | ==== 3 | 4 | StackPanel allows you to easily build scrollable collections of vertically oriented UIViews. Use it in scenarios where you'd like to be able to stack views (like in a UITableView), but without the overhead or hassle of managing a UITableView. 5 | 6 | ![Screenshot of StackPanel](https://github.com/aaronbrethorst/StackPanel/raw/master/stackpanel.png) 7 | 8 | MIT License 9 | ==== 10 | 11 | Copyright (c) 2011 Aaron Brethorst 12 | 13 | Permission is hereby granted, free of charge, to any person obtaining a copy 14 | of this software and associated documentation files (the "Software"), to deal 15 | in the Software without restriction, including without limitation the rights 16 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 | copies of the Software, and to permit persons to whom the Software is 18 | furnished to do so, subject to the following conditions: 19 | 20 | The above copyright notice and this permission notice shall be included in 21 | all copies or substantial portions of the Software. 22 | 23 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 29 | THE SOFTWARE. 30 | 31 | ![](http://www.cocoacontrols.com/analytics/aaronbrethorst/stackpanel.png) -------------------------------------------------------------------------------- /StackPanel/StackPanel.h: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2011 Aaron Brethorst 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import 23 | 24 | @class StackPanel; 25 | @protocol StackPanelDelegate 26 | @optional 27 | - (void)stackPanel:(StackPanel*)aPanel didSelectView:(UIView*)aView; 28 | @end 29 | 30 | @interface StackPanel : UIView 31 | { 32 | UITableView *tableView; 33 | NSMutableArray *cells; 34 | 35 | id delegate; 36 | } 37 | @property(nonatomic,assign) id delegate; 38 | 39 | // Add 40 | - (void)addStackedView:(UIView*)v; 41 | - (void)addStackedView:(UIView *)v reload:(BOOL)yn; 42 | - (void)addStackedViews:(NSArray*)a; 43 | 44 | // Remove 45 | - (void)removeStackedViewAtIndex:(NSInteger)index; 46 | - (void)removeStackedViewAtIndex:(NSInteger)index animation:(UITableViewRowAnimation)rowAnimation; 47 | - (void)removeStackedView:(UIView*)aView; 48 | - (void)removeStackedView:(UIView*)aView animation:(UITableViewRowAnimation)rowAnimation; 49 | 50 | - (void)reloadStack; 51 | @end -------------------------------------------------------------------------------- /StackPanel/StackPanel.m: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright (c) 2011 Aaron Brethorst 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in 12 | // all copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | // THE SOFTWARE. 21 | 22 | #import "StackPanel.h" 23 | 24 | @interface StackPanel () 25 | - (void)configureView; 26 | @end 27 | 28 | @implementation StackPanel 29 | @synthesize delegate; 30 | 31 | - (id)initWithFrame:(CGRect)frame 32 | { 33 | if ((self = [super initWithFrame:frame])) 34 | { 35 | [self configureView]; 36 | } 37 | 38 | return self; 39 | } 40 | 41 | - (id)initWithCoder:(NSCoder *)aDecoder 42 | { 43 | if ((self = [super initWithCoder:aDecoder])) 44 | { 45 | [self configureView]; 46 | } 47 | 48 | return self; 49 | } 50 | 51 | - (void)dealloc 52 | { 53 | self.delegate = nil; 54 | [cells release]; 55 | [tableView release]; 56 | [super dealloc]; 57 | } 58 | 59 | #pragma mark - 60 | #pragma mark Private 61 | 62 | - (void)configureView 63 | { 64 | self.delegate = nil; 65 | cells = [[NSMutableArray alloc] init]; 66 | 67 | tableView = [[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain]; 68 | tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 69 | tableView.dataSource = self; 70 | tableView.delegate = self; 71 | tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 72 | [self addSubview:tableView]; 73 | } 74 | 75 | #pragma mark - 76 | #pragma mark Public Methods 77 | 78 | - (void)setBackgroundColor:(UIColor *)backgroundColor 79 | { 80 | [super setBackgroundColor:backgroundColor]; 81 | tableView.backgroundColor = backgroundColor; 82 | } 83 | 84 | - (void)addStackedView:(UIView *)v 85 | { 86 | [self addStackedView:v reload:YES]; 87 | } 88 | 89 | - (void)addStackedView:(UIView *)v reload:(BOOL)yn 90 | { 91 | assert(nil != v); 92 | 93 | UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@""]; 94 | cell.selectionStyle = UITableViewCellSelectionStyleNone; 95 | CGRect cellFrame = cell.frame; 96 | cellFrame.size = v.frame.size; 97 | cell.frame = cellFrame; 98 | [cell.contentView addSubview:v]; 99 | 100 | [cells addObject:cell]; 101 | 102 | [cell release]; 103 | 104 | if (yn) 105 | { 106 | [tableView reloadData]; 107 | } 108 | } 109 | 110 | - (void)addStackedViews:(NSArray*)a 111 | { 112 | for (UIView *v in a) 113 | { 114 | [self addStackedView:v reload:NO]; 115 | } 116 | 117 | [tableView reloadData]; 118 | } 119 | 120 | - (void)removeStackedViewAtIndex:(NSInteger)index 121 | { 122 | [self removeStackedViewAtIndex:index animation:UITableViewRowAnimationNone]; 123 | } 124 | 125 | - (void)removeStackedViewAtIndex:(NSInteger)index animation:(UITableViewRowAnimation)rowAnimation 126 | { 127 | if ([cells count] > index) 128 | { 129 | [cells removeObjectAtIndex:index]; 130 | } 131 | 132 | [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]] 133 | withRowAnimation:rowAnimation]; 134 | } 135 | 136 | - (void)removeStackedView:(UIView*)aView 137 | { 138 | [self removeStackedView:aView animation:UITableViewRowAnimationNone]; 139 | } 140 | 141 | - (void)removeStackedView:(UIView*)aView animation:(UITableViewRowAnimation)rowAnimation 142 | { 143 | for (int i=0; i<[cells count]; i++) 144 | { 145 | UITableViewCell *cell = [cells objectAtIndex:i]; 146 | if (aView == [cell.contentView.subviews objectAtIndex:0]) 147 | { 148 | [self removeStackedViewAtIndex:i animation:rowAnimation]; 149 | } 150 | } 151 | } 152 | 153 | - (void)reloadStack 154 | { 155 | [tableView reloadData]; 156 | } 157 | 158 | #pragma mark - 159 | #pragma mark UITableViewDataSource/UITableViewDelegate 160 | 161 | - (NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section 162 | { 163 | return [cells count]; 164 | } 165 | 166 | - (CGFloat)tableView:(UITableView *)tv heightForRowAtIndexPath:(NSIndexPath *)indexPath 167 | { 168 | UIView *v = [cells objectAtIndex:indexPath.row]; 169 | return v.frame.size.height; 170 | } 171 | 172 | - (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath 173 | { 174 | return [cells objectAtIndex:indexPath.row]; 175 | } 176 | 177 | - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 178 | { 179 | SEL selector = @selector(stackPanel:didSelectView:); 180 | if (self.delegate && [self.delegate respondsToSelector:selector]) 181 | { 182 | UITableViewCell *tappedCell = [cells objectAtIndex:indexPath.row]; 183 | UIView *tappedView = [tappedCell.contentView.subviews objectAtIndex:0]; 184 | [self.delegate performSelector:selector withObject:self withObject:tappedView]; 185 | } 186 | } 187 | 188 | @end 189 | -------------------------------------------------------------------------------- /StackPanel.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 9327C101132EC47C00124B15 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9327C100132EC47C00124B15 /* UIKit.framework */; }; 11 | 9327C103132EC47C00124B15 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9327C102132EC47C00124B15 /* Foundation.framework */; }; 12 | 9327C105132EC47C00124B15 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9327C104132EC47C00124B15 /* CoreGraphics.framework */; }; 13 | 9327C10B132EC47C00124B15 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9327C109132EC47C00124B15 /* InfoPlist.strings */; }; 14 | 9327C10E132EC47C00124B15 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9327C10D132EC47C00124B15 /* main.m */; }; 15 | 9327C111132EC47C00124B15 /* StackPanelAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9327C110132EC47C00124B15 /* StackPanelAppDelegate.m */; }; 16 | 9327C114132EC47C00124B15 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9327C112132EC47C00124B15 /* MainWindow.xib */; }; 17 | 9327C11C132EC4A800124B15 /* StackPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = 9327C11B132EC4A800124B15 /* StackPanel.m */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 9327C0FC132EC47C00124B15 /* StackPanel.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StackPanel.app; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 9327C100132EC47C00124B15 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 23 | 9327C102132EC47C00124B15 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 24 | 9327C104132EC47C00124B15 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 25 | 9327C108132EC47C00124B15 /* StackPanel-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "StackPanel-Info.plist"; sourceTree = ""; }; 26 | 9327C10A132EC47C00124B15 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 27 | 9327C10C132EC47C00124B15 /* StackPanel-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "StackPanel-Prefix.pch"; sourceTree = ""; }; 28 | 9327C10D132EC47C00124B15 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 29 | 9327C10F132EC47C00124B15 /* StackPanelAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StackPanelAppDelegate.h; sourceTree = ""; }; 30 | 9327C110132EC47C00124B15 /* StackPanelAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StackPanelAppDelegate.m; sourceTree = ""; }; 31 | 9327C113132EC47C00124B15 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainWindow.xib; sourceTree = ""; }; 32 | 9327C11A132EC4A800124B15 /* StackPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StackPanel.h; sourceTree = ""; }; 33 | 9327C11B132EC4A800124B15 /* StackPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StackPanel.m; sourceTree = ""; }; 34 | /* End PBXFileReference section */ 35 | 36 | /* Begin PBXFrameworksBuildPhase section */ 37 | 9327C0F9132EC47C00124B15 /* Frameworks */ = { 38 | isa = PBXFrameworksBuildPhase; 39 | buildActionMask = 2147483647; 40 | files = ( 41 | 9327C101132EC47C00124B15 /* UIKit.framework in Frameworks */, 42 | 9327C103132EC47C00124B15 /* Foundation.framework in Frameworks */, 43 | 9327C105132EC47C00124B15 /* CoreGraphics.framework in Frameworks */, 44 | ); 45 | runOnlyForDeploymentPostprocessing = 0; 46 | }; 47 | /* End PBXFrameworksBuildPhase section */ 48 | 49 | /* Begin PBXGroup section */ 50 | 9327C0F1132EC47B00124B15 = { 51 | isa = PBXGroup; 52 | children = ( 53 | 9327C106132EC47C00124B15 /* StackPanel */, 54 | 9327C0FF132EC47C00124B15 /* Frameworks */, 55 | 9327C0FD132EC47C00124B15 /* Products */, 56 | ); 57 | sourceTree = ""; 58 | }; 59 | 9327C0FD132EC47C00124B15 /* Products */ = { 60 | isa = PBXGroup; 61 | children = ( 62 | 9327C0FC132EC47C00124B15 /* StackPanel.app */, 63 | ); 64 | name = Products; 65 | sourceTree = ""; 66 | }; 67 | 9327C0FF132EC47C00124B15 /* Frameworks */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | 9327C100132EC47C00124B15 /* UIKit.framework */, 71 | 9327C102132EC47C00124B15 /* Foundation.framework */, 72 | 9327C104132EC47C00124B15 /* CoreGraphics.framework */, 73 | ); 74 | name = Frameworks; 75 | sourceTree = ""; 76 | }; 77 | 9327C106132EC47C00124B15 /* StackPanel */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | 9327C10F132EC47C00124B15 /* StackPanelAppDelegate.h */, 81 | 9327C110132EC47C00124B15 /* StackPanelAppDelegate.m */, 82 | 9327C112132EC47C00124B15 /* MainWindow.xib */, 83 | 9327C107132EC47C00124B15 /* Supporting Files */, 84 | 9327C11A132EC4A800124B15 /* StackPanel.h */, 85 | 9327C11B132EC4A800124B15 /* StackPanel.m */, 86 | ); 87 | path = StackPanel; 88 | sourceTree = ""; 89 | }; 90 | 9327C107132EC47C00124B15 /* Supporting Files */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | 9327C108132EC47C00124B15 /* StackPanel-Info.plist */, 94 | 9327C109132EC47C00124B15 /* InfoPlist.strings */, 95 | 9327C10C132EC47C00124B15 /* StackPanel-Prefix.pch */, 96 | 9327C10D132EC47C00124B15 /* main.m */, 97 | ); 98 | name = "Supporting Files"; 99 | sourceTree = ""; 100 | }; 101 | /* End PBXGroup section */ 102 | 103 | /* Begin PBXNativeTarget section */ 104 | 9327C0FB132EC47C00124B15 /* StackPanel */ = { 105 | isa = PBXNativeTarget; 106 | buildConfigurationList = 9327C117132EC47C00124B15 /* Build configuration list for PBXNativeTarget "StackPanel" */; 107 | buildPhases = ( 108 | 9327C0F8132EC47C00124B15 /* Sources */, 109 | 9327C0F9132EC47C00124B15 /* Frameworks */, 110 | 9327C0FA132EC47C00124B15 /* Resources */, 111 | ); 112 | buildRules = ( 113 | ); 114 | dependencies = ( 115 | ); 116 | name = StackPanel; 117 | productName = StackPanel; 118 | productReference = 9327C0FC132EC47C00124B15 /* StackPanel.app */; 119 | productType = "com.apple.product-type.application"; 120 | }; 121 | /* End PBXNativeTarget section */ 122 | 123 | /* Begin PBXProject section */ 124 | 9327C0F3132EC47B00124B15 /* Project object */ = { 125 | isa = PBXProject; 126 | attributes = { 127 | ORGANIZATIONNAME = "Structlab LLC"; 128 | }; 129 | buildConfigurationList = 9327C0F6132EC47B00124B15 /* Build configuration list for PBXProject "StackPanel" */; 130 | compatibilityVersion = "Xcode 3.2"; 131 | developmentRegion = English; 132 | hasScannedForEncodings = 0; 133 | knownRegions = ( 134 | en, 135 | ); 136 | mainGroup = 9327C0F1132EC47B00124B15; 137 | productRefGroup = 9327C0FD132EC47C00124B15 /* Products */; 138 | projectDirPath = ""; 139 | projectRoot = ""; 140 | targets = ( 141 | 9327C0FB132EC47C00124B15 /* StackPanel */, 142 | ); 143 | }; 144 | /* End PBXProject section */ 145 | 146 | /* Begin PBXResourcesBuildPhase section */ 147 | 9327C0FA132EC47C00124B15 /* Resources */ = { 148 | isa = PBXResourcesBuildPhase; 149 | buildActionMask = 2147483647; 150 | files = ( 151 | 9327C10B132EC47C00124B15 /* InfoPlist.strings in Resources */, 152 | 9327C114132EC47C00124B15 /* MainWindow.xib in Resources */, 153 | ); 154 | runOnlyForDeploymentPostprocessing = 0; 155 | }; 156 | /* End PBXResourcesBuildPhase section */ 157 | 158 | /* Begin PBXSourcesBuildPhase section */ 159 | 9327C0F8132EC47C00124B15 /* Sources */ = { 160 | isa = PBXSourcesBuildPhase; 161 | buildActionMask = 2147483647; 162 | files = ( 163 | 9327C10E132EC47C00124B15 /* main.m in Sources */, 164 | 9327C111132EC47C00124B15 /* StackPanelAppDelegate.m in Sources */, 165 | 9327C11C132EC4A800124B15 /* StackPanel.m in Sources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXSourcesBuildPhase section */ 170 | 171 | /* Begin PBXVariantGroup section */ 172 | 9327C109132EC47C00124B15 /* InfoPlist.strings */ = { 173 | isa = PBXVariantGroup; 174 | children = ( 175 | 9327C10A132EC47C00124B15 /* en */, 176 | ); 177 | name = InfoPlist.strings; 178 | sourceTree = ""; 179 | }; 180 | 9327C112132EC47C00124B15 /* MainWindow.xib */ = { 181 | isa = PBXVariantGroup; 182 | children = ( 183 | 9327C113132EC47C00124B15 /* en */, 184 | ); 185 | name = MainWindow.xib; 186 | sourceTree = ""; 187 | }; 188 | /* End PBXVariantGroup section */ 189 | 190 | /* Begin XCBuildConfiguration section */ 191 | 9327C115132EC47C00124B15 /* Debug */ = { 192 | isa = XCBuildConfiguration; 193 | buildSettings = { 194 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 195 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 196 | GCC_C_LANGUAGE_STANDARD = gnu99; 197 | GCC_OPTIMIZATION_LEVEL = 0; 198 | GCC_PREPROCESSOR_DEFINITIONS = DEBUG; 199 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 200 | GCC_VERSION = com.apple.compilers.llvmgcc42; 201 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 202 | GCC_WARN_UNUSED_VARIABLE = YES; 203 | IPHONEOS_DEPLOYMENT_TARGET = 4.3; 204 | SDKROOT = iphoneos; 205 | }; 206 | name = Debug; 207 | }; 208 | 9327C116132EC47C00124B15 /* Release */ = { 209 | isa = XCBuildConfiguration; 210 | buildSettings = { 211 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 212 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 213 | GCC_C_LANGUAGE_STANDARD = gnu99; 214 | GCC_VERSION = com.apple.compilers.llvmgcc42; 215 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 216 | GCC_WARN_UNUSED_VARIABLE = YES; 217 | IPHONEOS_DEPLOYMENT_TARGET = 4.3; 218 | OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; 219 | SDKROOT = iphoneos; 220 | }; 221 | name = Release; 222 | }; 223 | 9327C118132EC47C00124B15 /* Debug */ = { 224 | isa = XCBuildConfiguration; 225 | buildSettings = { 226 | ALWAYS_SEARCH_USER_PATHS = NO; 227 | COPY_PHASE_STRIP = NO; 228 | GCC_DYNAMIC_NO_PIC = NO; 229 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 230 | GCC_PREFIX_HEADER = "StackPanel/StackPanel-Prefix.pch"; 231 | INFOPLIST_FILE = "StackPanel/StackPanel-Info.plist"; 232 | PRODUCT_NAME = "$(TARGET_NAME)"; 233 | WRAPPER_EXTENSION = app; 234 | }; 235 | name = Debug; 236 | }; 237 | 9327C119132EC47C00124B15 /* Release */ = { 238 | isa = XCBuildConfiguration; 239 | buildSettings = { 240 | ALWAYS_SEARCH_USER_PATHS = NO; 241 | COPY_PHASE_STRIP = YES; 242 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 243 | GCC_PREFIX_HEADER = "StackPanel/StackPanel-Prefix.pch"; 244 | INFOPLIST_FILE = "StackPanel/StackPanel-Info.plist"; 245 | PRODUCT_NAME = "$(TARGET_NAME)"; 246 | VALIDATE_PRODUCT = YES; 247 | WRAPPER_EXTENSION = app; 248 | }; 249 | name = Release; 250 | }; 251 | /* End XCBuildConfiguration section */ 252 | 253 | /* Begin XCConfigurationList section */ 254 | 9327C0F6132EC47B00124B15 /* Build configuration list for PBXProject "StackPanel" */ = { 255 | isa = XCConfigurationList; 256 | buildConfigurations = ( 257 | 9327C115132EC47C00124B15 /* Debug */, 258 | 9327C116132EC47C00124B15 /* Release */, 259 | ); 260 | defaultConfigurationIsVisible = 0; 261 | defaultConfigurationName = Release; 262 | }; 263 | 9327C117132EC47C00124B15 /* Build configuration list for PBXNativeTarget "StackPanel" */ = { 264 | isa = XCConfigurationList; 265 | buildConfigurations = ( 266 | 9327C118132EC47C00124B15 /* Debug */, 267 | 9327C119132EC47C00124B15 /* Release */, 268 | ); 269 | defaultConfigurationIsVisible = 0; 270 | defaultConfigurationName = Release; 271 | }; 272 | /* End XCConfigurationList section */ 273 | }; 274 | rootObject = 9327C0F3132EC47B00124B15 /* Project object */; 275 | } 276 | -------------------------------------------------------------------------------- /StackPanel/en.lproj/MainWindow.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1056 5 | 10J567 6 | 1305 7 | 1038.35 8 | 462.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 300 12 | 13 | 14 | YES 15 | IBProxyObject 16 | IBUIBarButtonItem 17 | IBUICustomObject 18 | IBUIWindow 19 | IBUINavigationBar 20 | IBUINavigationItem 21 | IBUIView 22 | 23 | 24 | YES 25 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 26 | 27 | 28 | YES 29 | 30 | YES 31 | 32 | 33 | 34 | 35 | YES 36 | 37 | IBFilesOwner 38 | IBCocoaTouchFramework 39 | 40 | 41 | IBFirstResponder 42 | IBCocoaTouchFramework 43 | 44 | 45 | IBCocoaTouchFramework 46 | 47 | 48 | 49 | 1316 50 | 51 | YES 52 | 53 | 54 | 1298 55 | {{0, 64}, {320, 416}} 56 | 57 | 58 | 59 | 60 | 3 61 | MQA 62 | 63 | 2 64 | 65 | 66 | IBCocoaTouchFramework 67 | 68 | 69 | 70 | 1314 71 | {{0, 20}, {320, 44}} 72 | 73 | 74 | 75 | IBCocoaTouchFramework 76 | 77 | YES 78 | 79 | 80 | StackPanel 81 | 82 | Delete Top Item 83 | IBCocoaTouchFramework 84 | 1 85 | 86 | 87 | IBCocoaTouchFramework 88 | 89 | 90 | 91 | 92 | 93 | {320, 480} 94 | 95 | 96 | 97 | 98 | 1 99 | MSAxIDEAA 100 | 101 | NO 102 | NO 103 | 104 | IBCocoaTouchFramework 105 | YES 106 | 107 | 108 | 109 | 110 | YES 111 | 112 | 113 | delegate 114 | 115 | 116 | 117 | 4 118 | 119 | 120 | 121 | window 122 | 123 | 124 | 125 | 5 126 | 127 | 128 | 129 | stackPanel 130 | 131 | 132 | 133 | 12 134 | 135 | 136 | 137 | deleteTopItem: 138 | 139 | 140 | 141 | 16 142 | 143 | 144 | 145 | 146 | YES 147 | 148 | 0 149 | 150 | 151 | 152 | 153 | 154 | 2 155 | 156 | 157 | YES 158 | 159 | 160 | 161 | 162 | 163 | 164 | -1 165 | 166 | 167 | File's Owner 168 | 169 | 170 | 3 171 | 172 | 173 | 174 | 175 | -2 176 | 177 | 178 | 179 | 180 | 10 181 | 182 | 183 | 184 | 185 | 13 186 | 187 | 188 | YES 189 | 190 | 191 | 192 | 193 | 194 | 14 195 | 196 | 197 | YES 198 | 199 | 200 | 201 | 202 | 203 | 15 204 | 205 | 206 | 207 | 208 | 209 | 210 | YES 211 | 212 | YES 213 | -1.CustomClassName 214 | -2.CustomClassName 215 | 10.CustomClassName 216 | 10.IBPluginDependency 217 | 13.IBPluginDependency 218 | 14.IBPluginDependency 219 | 15.IBPluginDependency 220 | 2.IBAttributePlaceholdersKey 221 | 2.IBEditorWindowLastContentRect 222 | 2.IBPluginDependency 223 | 3.CustomClassName 224 | 3.IBPluginDependency 225 | 226 | 227 | YES 228 | UIApplication 229 | UIResponder 230 | StackPanel 231 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 232 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 233 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 234 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 235 | 236 | YES 237 | 238 | 239 | 240 | {{198, 376}, {320, 480}} 241 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 242 | StackPanelAppDelegate 243 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 244 | 245 | 246 | 247 | YES 248 | 249 | 250 | 251 | 252 | 253 | YES 254 | 255 | 256 | 257 | 258 | 16 259 | 260 | 261 | 262 | YES 263 | 264 | StackPanel 265 | UIView 266 | 267 | IBProjectSource 268 | ./Classes/StackPanel.h 269 | 270 | 271 | 272 | StackPanelAppDelegate 273 | NSObject 274 | 275 | deleteTopItem: 276 | id 277 | 278 | 279 | deleteTopItem: 280 | 281 | deleteTopItem: 282 | id 283 | 284 | 285 | 286 | YES 287 | 288 | YES 289 | stackPanel 290 | window 291 | 292 | 293 | YES 294 | StackPanel 295 | UIWindow 296 | 297 | 298 | 299 | YES 300 | 301 | YES 302 | stackPanel 303 | window 304 | 305 | 306 | YES 307 | 308 | stackPanel 309 | StackPanel 310 | 311 | 312 | window 313 | UIWindow 314 | 315 | 316 | 317 | 318 | IBProjectSource 319 | ./Classes/StackPanelAppDelegate.h 320 | 321 | 322 | 323 | 324 | 0 325 | IBCocoaTouchFramework 326 | 327 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 328 | 329 | 330 | YES 331 | 3 332 | 300 333 | 334 | 335 | --------------------------------------------------------------------------------