├── .gitignore ├── LICENSE.txt ├── MTIBulbView.h ├── MTIBulbView.m ├── MacDemo ├── AppController.h ├── AppController.m ├── BulbIcon.icns ├── BulbIcon.png ├── BulbIcon.psd ├── BulbIcon.tif ├── BulbScreen.xcodeproj │ ├── TemplateIcon.icns │ ├── project.pbxproj │ ├── ryanmorlok.mode1v3 │ └── ryanmorlok.pbxuser ├── BulbScreen_Prefix.pch ├── English.lproj │ ├── InfoPlist.strings │ └── MainMenu.xib ├── Info.plist ├── main.m └── version.plist ├── README.md ├── iPhoneDemo ├── AppController.h ├── AppController.m ├── BulbIcon.png ├── BulbIcon.psd ├── BulbScreen.xcodeproj │ ├── project.pbxproj │ ├── ryanmorlok.mode1v3 │ └── ryanmorlok.pbxuser ├── BulbViewiPhone-Info.plist ├── BulbViewiPhone_Prefix.pch ├── Classes │ ├── FlipsideView.h │ ├── FlipsideView.m │ ├── FlipsideViewController.h │ ├── FlipsideViewController.m │ ├── LcdiPhoneAppDelegate.h │ ├── LcdiPhoneAppDelegate.m │ ├── MainView.h │ ├── MainView.m │ ├── MainViewController.h │ └── MainViewController.m ├── FlipsideView.xib ├── LICENSE.txt ├── MainView.xib ├── MainWindow.xib └── main.m └── images ├── BulbViewLogo.png ├── MacOS.png └── iOS.png /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | iPhoneDemo/build 3 | MacDemo/build 4 | **/.DS_Store -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2009 Ryan Morlok 2 | http://softwareblog.morlok.net 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. -------------------------------------------------------------------------------- /MTIBulbView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MTIBulbView.h 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | #if TARGET_OS_IPHONE 19 | #import 20 | #else 21 | #import 22 | #endif 23 | 24 | typedef enum { 25 | MTIBulbViewAlignLeft =-1, 26 | MTIBulbViewAlignCenter = 0, 27 | MTIBulbViewAlignRight = 1 28 | } MTIBulbViewAlignment; 29 | 30 | #if TARGET_OS_IPHONE 31 | @interface MTIBulbView : UIView { 32 | #else 33 | @interface MTIBulbView : NSView { 34 | #endif 35 | 36 | CGColorRef litColor; 37 | CGColorRef dimColor; 38 | NSString *text; 39 | MTIBulbViewAlignment alignment; 40 | } 41 | 42 | @property(nonatomic) CGColorRef litColor; 43 | @property(nonatomic) CGColorRef dimColor; 44 | @property(nonatomic, retain) NSString *text; 45 | @property(nonatomic) MTIBulbViewAlignment alignment; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /MTIBulbView.m: -------------------------------------------------------------------------------- 1 | // 2 | // MTIBulbView.m 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | #import "MTIBulbView.h" 20 | 21 | #define NUM_BULBS_VERTICAL 7 22 | 23 | #define BULB_UNSCALED_DIAMETER 9.0 24 | #define BULB_UNSCALED_SPACE 1.0 25 | 26 | #define MAKEBYTE(b0, b1, b2, b3, b4, b5, b6) (b0 << 0 | b1 << 1 | b2 << 2 | b3 << 3 | b4 << 4 | b5 << 5 | b6 << 6) 27 | 28 | void setBulbsForCol(char* bulbArray, NSUInteger curCol, NSUInteger numCols, char byte) 29 | { 30 | if( curCol >= numCols ) 31 | return; 32 | bulbArray[curCol] = byte; 33 | } 34 | 35 | void setBulbsForChar(char* bulbArray, char c, NSUInteger *curCol, NSUInteger numCols) 36 | { 37 | if( c >= 'a' && c <= 'z' ) 38 | c = 'A' + (c - 'a'); 39 | 40 | switch (c) { 41 | case '0' : 42 | { 43 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 44 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 45 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 46 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 47 | break; 48 | } 49 | case '1' : 50 | { 51 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 52 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 53 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 54 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 55 | break; 56 | } 57 | case '2' : 58 | { 59 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 0, 0, 1) ); 60 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 61 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 62 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 1, 1, 1) ); 63 | break; 64 | } 65 | case '3' : 66 | { 67 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 68 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 69 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 70 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 71 | break; 72 | } 73 | case '4' : 74 | { 75 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 1, 1, 0) ); 76 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 77 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 78 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 79 | break; 80 | } 81 | case '5' : 82 | { 83 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 1, 1, 1) ); 84 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 85 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 86 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 0, 0, 1) ); 87 | break; 88 | } 89 | case '6' : 90 | { 91 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 92 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 93 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 94 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 0, 0, 1) ); 95 | break; 96 | } 97 | case '7' : 98 | { 99 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 100 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 101 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 102 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 103 | break; 104 | } 105 | case '8' : 106 | { 107 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 108 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 109 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 110 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 111 | break; 112 | } 113 | case '9' : 114 | { 115 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 1, 1, 1) ); 116 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 117 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 118 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 119 | break; 120 | } 121 | case 'A' : 122 | { 123 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 0) ); 124 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 125 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 126 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 0) ); 127 | break; 128 | } 129 | case 'B' : 130 | { 131 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 132 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 133 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 134 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 1, 1, 0) ); 135 | break; 136 | } 137 | case 'C' : 138 | { 139 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 140 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 141 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 142 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 143 | break; 144 | } 145 | case 'D' : 146 | { 147 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 148 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 149 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 150 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 151 | break; 152 | } 153 | case 'E' : 154 | { 155 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 156 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 157 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 158 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 159 | break; 160 | } 161 | case 'F' : 162 | { 163 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 164 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 165 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 166 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 167 | break; 168 | } 169 | case 'G' : 170 | { 171 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 172 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 173 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 174 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 0, 1, 0) ); 175 | break; 176 | } 177 | case 'H' : 178 | { 179 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 180 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 181 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 182 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 183 | break; 184 | } 185 | case 'I' : 186 | { 187 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 188 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 189 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 190 | break; 191 | } 192 | case 'J' : 193 | { 194 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 0, 0) ); 195 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 196 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 197 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 1) ); 198 | break; 199 | } 200 | case 'K' : 201 | { 202 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 203 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 204 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 1, 0) ); 205 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 206 | break; 207 | } 208 | case 'L' : 209 | { 210 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 211 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 212 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 213 | break; 214 | } 215 | case 'M' : 216 | { 217 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 218 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 0) ); 219 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 0, 0) ); 220 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 0) ); 221 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 222 | break; 223 | } 224 | case 'N' : 225 | { 226 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 227 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 0) ); 228 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 229 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 0, 0, 0) ); 230 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 231 | break; 232 | } 233 | case 'O' : 234 | { 235 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 236 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 237 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 238 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 239 | break; 240 | } 241 | case 'P' : 242 | { 243 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 244 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 245 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 246 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 0) ); 247 | break; 248 | } 249 | case 'Q' : 250 | { 251 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 1, 1, 1, 0) ); 252 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 0, 1) ); 253 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 0, 1) ); 254 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 1, 1, 1, 0) ); 255 | break; 256 | } 257 | case 'R' : 258 | { 259 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 260 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 1, 0, 0, 1) ); 261 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 1, 0, 0, 1) ); 262 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 1, 1, 0) ); 263 | break; 264 | } 265 | case 'S' : 266 | { 267 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 1, 1, 0) ); 268 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 269 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 270 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 0, 1, 0) ); 271 | break; 272 | } 273 | case 'T' : 274 | { 275 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 276 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 277 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 278 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 279 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 280 | break; 281 | } 282 | case 'U' : 283 | { 284 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 1) ); 285 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 286 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 287 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 1) ); 288 | break; 289 | } 290 | case 'V' : 291 | { 292 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 1) ); 293 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 0, 0, 0) ); 294 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 295 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 0, 0, 0) ); 296 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 1) ); 297 | break; 298 | } 299 | case 'W' : 300 | { 301 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 302 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 0, 0) ); 303 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 0, 0, 0) ); 304 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 0, 0) ); 305 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 306 | break; 307 | } 308 | case 'X' : 309 | { 310 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 311 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 1, 1, 0) ); 312 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 313 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 1, 1, 0) ); 314 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 315 | break; 316 | } 317 | case 'Y' : 318 | { 319 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 320 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 0) ); 321 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 0, 0, 0) ); 322 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 0) ); 323 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 324 | break; 325 | } 326 | case 'Z' : 327 | { 328 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 0, 0, 0, 0, 1) ); 329 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 0, 0, 0, 1) ); 330 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 331 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 1, 0, 1) ); 332 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 1, 1) ); 333 | break; 334 | } 335 | case '!' : 336 | { 337 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 1, 1, 1, 1) ); 338 | break; 339 | } 340 | case '@' : 341 | { 342 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 343 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 344 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 0, 0, 1) ); 345 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 0, 1, 0, 1) ); 346 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 1, 1, 0) ); 347 | break; 348 | } 349 | case '#' : 350 | { 351 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 352 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 353 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 354 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 355 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 356 | break; 357 | } 358 | case '$' : 359 | { 360 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 0, 0) ); 361 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 1, 0, 1, 0) ); 362 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 363 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 1, 0, 1, 0) ); 364 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 0, 0, 0) ); 365 | break; 366 | } 367 | case '%' : 368 | { 369 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 1, 1) ); 370 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 0, 1, 1) ); 371 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 372 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 0, 0, 1, 1, 0) ); 373 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 0, 0, 0, 0, 1) ); 374 | break; 375 | } 376 | case '^' : 377 | { 378 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 0) ); 379 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 1) ); 380 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 0) ); 381 | break; 382 | } 383 | case '&' : 384 | { 385 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 0, 1, 0) ); 386 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 1, 1, 0, 1) ); 387 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 1, 0, 0, 1) ); 388 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 1, 0) ); 389 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 0, 0, 0, 0) ); 390 | break; 391 | } 392 | case '*' : 393 | { 394 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 1) ); 395 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 1, 1, 0) ); 396 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 1, 1, 0) ); 397 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 1) ); 398 | break; 399 | } 400 | case ')' : 401 | { 402 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 403 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 404 | break; 405 | } 406 | case '(' : 407 | { 408 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 1, 1, 1, 0) ); 409 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 410 | break; 411 | } 412 | case '"' : 413 | { 414 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 1) ); 415 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 416 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 1) ); 417 | break; 418 | } 419 | case '\'' : 420 | { 421 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 1) ); 422 | break; 423 | } 424 | case ':' : 425 | { 426 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 0, 1, 0) ); 427 | break; 428 | } 429 | case ';' : 430 | { 431 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 0, 1, 0) ); 432 | break; 433 | } 434 | case '_' : 435 | { 436 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 437 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 438 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 439 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 440 | break; 441 | } 442 | case '-' : 443 | { 444 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 445 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 446 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 447 | break; 448 | } 449 | case '+' : 450 | { 451 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 452 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 1, 1, 0, 0) ); 453 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 454 | break; 455 | } 456 | case '=' : 457 | { 458 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 459 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 460 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 461 | break; 462 | } 463 | case '|' : 464 | { 465 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 466 | break; 467 | } 468 | case '\\' : 469 | { 470 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 1) ); 471 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 1, 1, 0, 0) ); 472 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 0, 0, 0, 0, 0) ); 473 | break; 474 | } 475 | case '}' : 476 | { 477 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 478 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 1, 1, 0) ); 479 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 480 | break; 481 | } 482 | case '{' : 483 | { 484 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 485 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 1, 0, 1, 1, 0) ); 486 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 487 | break; 488 | } 489 | case ']' : 490 | { 491 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 492 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 493 | break; 494 | } 495 | case '[' : 496 | { 497 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 1, 1, 1, 1, 1) ); 498 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 499 | break; 500 | } 501 | case '>' : 502 | { 503 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 504 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 1, 0) ); 505 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 506 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 507 | break; 508 | } 509 | case '<' : 510 | { 511 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 0) ); 512 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 0, 1, 0, 0) ); 513 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 1, 0) ); 514 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 1) ); 515 | break; 516 | } 517 | case '.' : 518 | { 519 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 520 | break; 521 | } 522 | case ',' : 523 | { 524 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 0, 0, 0, 0, 0) ); 525 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 1, 0, 0, 0, 0, 0) ); 526 | break; 527 | } 528 | case '/' : 529 | { 530 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 1, 0, 0, 0, 0, 0) ); 531 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 1, 1, 1, 0, 0) ); 532 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 1) ); 533 | break; 534 | } 535 | case ' ' : 536 | { 537 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 538 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 539 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 540 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 0, 0) ); 541 | break; 542 | } 543 | case '?' : 544 | { 545 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 0) ); 546 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 1, 0, 0, 1) ); 547 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 548 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 0) ); 549 | break; 550 | } 551 | default : 552 | { 553 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 0, 1, 0) ); 554 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(1, 0, 1, 1, 0, 0, 1) ); 555 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 1, 0, 0, 1) ); 556 | setBulbsForCol(bulbArray, (*curCol)++, numCols, MAKEBYTE(0, 0, 0, 0, 1, 1, 0) ); 557 | break; 558 | } 559 | } 560 | } 561 | 562 | void DrawCol(CGContextRef context, CGColorRef litColor, CGColorRef dimColor, char bulb) 563 | { 564 | CGContextSaveGState(context); 565 | 566 | CGContextSetFillColorWithColor(context, (bulb & (0x1 << 0) ? litColor : dimColor)); 567 | CGContextFillEllipseInRect(context, CGRectMake(0, 0.0*(BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE), BULB_UNSCALED_DIAMETER, BULB_UNSCALED_DIAMETER)); 568 | CGContextSetFillColorWithColor(context, (bulb & (0x1 << 1) ? litColor : dimColor)); 569 | CGContextFillEllipseInRect(context, CGRectMake(0, 1.0*(BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE), BULB_UNSCALED_DIAMETER, BULB_UNSCALED_DIAMETER)); 570 | CGContextSetFillColorWithColor(context, (bulb & (0x1 << 2) ? litColor : dimColor)); 571 | CGContextFillEllipseInRect(context, CGRectMake(0, 2.0*(BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE), BULB_UNSCALED_DIAMETER, BULB_UNSCALED_DIAMETER)); 572 | CGContextSetFillColorWithColor(context, (bulb & (0x1 << 3) ? litColor : dimColor)); 573 | CGContextFillEllipseInRect(context, CGRectMake(0, 3.0*(BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE), BULB_UNSCALED_DIAMETER, BULB_UNSCALED_DIAMETER)); 574 | CGContextSetFillColorWithColor(context, (bulb & (0x1 << 4) ? litColor : dimColor)); 575 | CGContextFillEllipseInRect(context, CGRectMake(0, 4.0*(BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE), BULB_UNSCALED_DIAMETER, BULB_UNSCALED_DIAMETER)); 576 | CGContextSetFillColorWithColor(context, (bulb & (0x1 << 5) ? litColor : dimColor)); 577 | CGContextFillEllipseInRect(context, CGRectMake(0, 5.0*(BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE), BULB_UNSCALED_DIAMETER, BULB_UNSCALED_DIAMETER)); 578 | CGContextSetFillColorWithColor(context, (bulb & (0x1 << 6) ? litColor : dimColor)); 579 | CGContextFillEllipseInRect(context, CGRectMake(0, 6.0*(BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE), BULB_UNSCALED_DIAMETER, BULB_UNSCALED_DIAMETER)); 580 | 581 | CGContextRestoreGState(context); 582 | } 583 | 584 | @implementation MTIBulbView 585 | 586 | #pragma mark Private Methods 587 | 588 | - (CGFloat) getScaleFactor 589 | { 590 | return [self bounds].size.height / ( ((CGFloat)(NUM_BULBS_VERTICAL-1) * BULB_UNSCALED_SPACE) + ((CGFloat)(NUM_BULBS_VERTICAL * BULB_UNSCALED_DIAMETER)) ); 591 | } 592 | 593 | - (CGAffineTransform) scaleTranformForFrame 594 | { 595 | // Compute how much we should scale our drawing based on the 596 | // needed height versus the height that is available. 597 | CGFloat scale = [self getScaleFactor]; 598 | return CGAffineTransformMakeScale(scale, scale); 599 | } 600 | 601 | - (NSInteger) getVisibleCols 602 | { 603 | // Compute number of possible columns based on the diameter 604 | // of each bulb and the space bewteen them. 605 | CGFloat scale = [self getScaleFactor]; 606 | return (NSInteger)((([self bounds].size.width/scale) + BULB_UNSCALED_SPACE) / (BULB_UNSCALED_SPACE + BULB_UNSCALED_DIAMETER)); 607 | } 608 | 609 | #pragma mark Public Methods 610 | 611 | @synthesize litColor; 612 | @synthesize dimColor; 613 | @synthesize text; 614 | @synthesize alignment; 615 | 616 | - (void) setLitColor:(CGColorRef)color 617 | { 618 | if( color == litColor ) 619 | return; 620 | 621 | [self willChangeValueForKey:@"litColor"]; 622 | CGColorRelease(litColor); 623 | 624 | litColor = CGColorRetain(color); 625 | [self didChangeValueForKey:@"litColor"]; 626 | 627 | #if TARGET_OS_IPHONE 628 | [self setNeedsDisplay]; 629 | #else 630 | [self setNeedsDisplay:YES]; 631 | #endif 632 | } 633 | 634 | - (void) setDimColor:(CGColorRef)color 635 | { 636 | if( color == dimColor ) 637 | return; 638 | 639 | [self willChangeValueForKey:@"dimColor"]; 640 | CGColorRelease(dimColor); 641 | 642 | dimColor = CGColorRetain(color); 643 | [self didChangeValueForKey:@"dimColor"]; 644 | 645 | #if TARGET_OS_IPHONE 646 | [self setNeedsDisplay]; 647 | #else 648 | [self setNeedsDisplay:YES]; 649 | #endif 650 | } 651 | 652 | - (void) setText:(NSString*)t 653 | { 654 | if( text == t ) 655 | return; 656 | 657 | [self willChangeValueForKey:@"text"]; 658 | [text release]; 659 | text = [t retain]; 660 | [self didChangeValueForKey:@"text"]; 661 | 662 | #if TARGET_OS_IPHONE 663 | [self setNeedsDisplay]; 664 | #else 665 | [self setNeedsDisplay:YES]; 666 | #endif 667 | } 668 | 669 | - (void) setAlignment:(MTIBulbViewAlignment)align 670 | { 671 | [self willChangeValueForKey:@"alignment"]; 672 | alignment = align; 673 | [self didChangeValueForKey:@"alignment"]; 674 | 675 | #if TARGET_OS_IPHONE 676 | [self setNeedsDisplay]; 677 | #else 678 | [self setNeedsDisplay:YES]; 679 | #endif 680 | } 681 | 682 | #if TARGET_OS_IPHONE 683 | - (id)initWithFrame:(CGRect)frame { 684 | #else 685 | - (id)initWithFrame:(NSRect)frame { 686 | #endif 687 | self = [super initWithFrame:frame]; 688 | if (self) { 689 | // Nothing to see here... 690 | } 691 | return self; 692 | } 693 | 694 | - (void)drawBulbs:(char*)bulbArray length:(NSUInteger)length context:(CGContextRef)context 695 | { 696 | // Draw the digits 697 | for(NSUInteger i = 0; i < length; i++) { 698 | if( i > 0 ) 699 | CGContextTranslateCTM(context, BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE, 0); 700 | 701 | DrawCol(context, litColor, dimColor, bulbArray[i]); 702 | } 703 | } 704 | 705 | #if TARGET_OS_IPHONE 706 | - (void)drawRect:(CGRect)rect { 707 | CGContextRef myContext = UIGraphicsGetCurrentContext(); 708 | 709 | // Transform coordinate system to account for different origin points 710 | CGContextTranslateCTM(myContext, 0.0, rect.size.height); 711 | CGContextScaleCTM(myContext, 1.0, -1.0); 712 | #else 713 | - (void)drawRect:(NSRect)rect { 714 | CGContextRef myContext = [[NSGraphicsContext currentContext] graphicsPort]; 715 | #endif 716 | 717 | // Get the number of bulb columns that are visible 718 | NSUInteger totalCols = [self getVisibleCols]; 719 | 720 | if( totalCols <= 0 ) 721 | return; 722 | 723 | // Allocate an array to hold the lit state of the bulbs 724 | // Each column of bulbs is stored as a byte bitmask 725 | char *bulbArray = malloc(totalCols * sizeof(char)); 726 | memset(bulbArray, 0, totalCols * sizeof(char)); 727 | 728 | // Fill the array with bulb states 729 | NSUInteger curCol = 0; 730 | NSUInteger curChar = 0; 731 | while( curCol < totalCols 732 | && curChar < text.length ) { 733 | 734 | // Set the char in the bit array (updates curCol as cols added) 735 | setBulbsForChar(bulbArray, [text characterAtIndex:curChar++], &curCol, totalCols); 736 | 737 | // Add spacing col if we have more characters 738 | if( curChar < text.length ) 739 | curCol++; 740 | } 741 | 742 | // Scale the drawing for the current size of the view 743 | CGContextConcatCTM(myContext, [self scaleTranformForFrame]); 744 | 745 | NSUInteger colsBefore = 0; 746 | NSUInteger middleCols = (curCol < totalCols ? curCol : totalCols); 747 | NSUInteger colsAfter = 0; 748 | switch (alignment) { 749 | case MTIBulbViewAlignLeft: 750 | colsBefore = 0; 751 | colsAfter = totalCols - middleCols; 752 | break; 753 | case MTIBulbViewAlignCenter: 754 | colsBefore = (totalCols - middleCols) / 2; 755 | colsAfter = totalCols - (colsBefore + middleCols); 756 | break; 757 | case MTIBulbViewAlignRight: 758 | colsBefore = totalCols - middleCols; 759 | colsAfter = 0; 760 | break; 761 | } 762 | 763 | for(int i = 0; i < colsBefore; i++) { 764 | if( i > 0 ) 765 | CGContextTranslateCTM(myContext, BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE, 0); 766 | 767 | DrawCol(myContext, litColor, dimColor, (char)0); 768 | } 769 | 770 | if( colsBefore > 0 771 | && totalCols > colsBefore ) 772 | CGContextTranslateCTM(myContext, BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE, 0); 773 | 774 | // Draw the bulbs 775 | [self drawBulbs:bulbArray length:middleCols context:myContext]; 776 | 777 | if( colsAfter > 0 778 | && totalCols > (colsBefore + middleCols) ) 779 | CGContextTranslateCTM(myContext, BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE, 0); 780 | 781 | for(int i = 0; i < colsAfter; i++) { 782 | if( i > 0 ) 783 | CGContextTranslateCTM(myContext, BULB_UNSCALED_DIAMETER + BULB_UNSCALED_SPACE, 0); 784 | 785 | DrawCol(myContext, litColor, dimColor, (char)0); 786 | } 787 | 788 | free(bulbArray); 789 | } 790 | 791 | - (void)dealloc 792 | { 793 | [text release]; 794 | CGColorRelease(litColor); 795 | CGColorRelease(dimColor); 796 | 797 | text = nil; 798 | litColor = NULL; 799 | dimColor = NULL; 800 | 801 | [super dealloc]; 802 | } 803 | @end 804 | -------------------------------------------------------------------------------- /MacDemo/AppController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppController.h 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | #import 20 | 21 | @class MTIBulbView; 22 | 23 | @interface AppController : NSObject { 24 | MTIBulbView *bulbView; 25 | NSTimer *timer; 26 | BOOL showAlphabet; 27 | } 28 | 29 | @property (nonatomic, retain) IBOutlet MTIBulbView *bulbView; 30 | @property (nonatomic) BOOL showAlphabet; 31 | 32 | - (void)tick:(NSTimer*)t; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /MacDemo/AppController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppController.m 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | #import "AppController.h" 20 | #import "MTIBulbView.h" 21 | 22 | 23 | @implementation AppController 24 | 25 | @synthesize bulbView; 26 | @synthesize showAlphabet; 27 | 28 | - (void)awakeFromNib 29 | { 30 | bulbView.litColor = CGColorCreateGenericRGB(1.0, 0.0, 0.0, 1.0); 31 | bulbView.dimColor = CGColorCreateGenericRGB(0.90625, 0.80, 0.80, 1.0); 32 | bulbView.text = @"00:00:00"; 33 | 34 | timer = [NSTimer scheduledTimerWithTimeInterval:0.25 35 | target:self 36 | selector:@selector(tick:) 37 | userInfo:NULL 38 | repeats:YES]; 39 | [self tick:timer]; 40 | } 41 | 42 | - (void)tick:(NSTimer*)t 43 | { 44 | if( showAlphabet ) { 45 | [bulbView setText:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-_=+{}[]:;\"'<>,./?\\|"]; 46 | } else { 47 | NSDate *now = [NSDate date]; 48 | NSString *timeString = [now descriptionWithCalendarFormat:@"%H:%M:%S" 49 | timeZone:nil 50 | locale:[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]]; 51 | [bulbView setText:timeString]; 52 | } 53 | } 54 | 55 | - (void) dealloc 56 | { 57 | [timer invalidate]; 58 | [super dealloc]; 59 | } 60 | @end 61 | -------------------------------------------------------------------------------- /MacDemo/BulbIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/MacDemo/BulbIcon.icns -------------------------------------------------------------------------------- /MacDemo/BulbIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/MacDemo/BulbIcon.png -------------------------------------------------------------------------------- /MacDemo/BulbIcon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/MacDemo/BulbIcon.psd -------------------------------------------------------------------------------- /MacDemo/BulbIcon.tif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/MacDemo/BulbIcon.tif -------------------------------------------------------------------------------- /MacDemo/BulbScreen.xcodeproj/TemplateIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/MacDemo/BulbScreen.xcodeproj/TemplateIcon.icns -------------------------------------------------------------------------------- /MacDemo/BulbScreen.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 45; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1B182F1D0FCB119B008ED63F /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B182F1C0FCB119B008ED63F /* AppController.m */; }; 11 | 1B7727B10FE8B16C00D2964E /* MTIBulbView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B7727AF0FE8B16C00D2964E /* MTIBulbView.m */; }; 12 | 1B7727B70FE8BF0700D2964E /* BulbIcon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 1B7727B60FE8BF0700D2964E /* BulbIcon.icns */; }; 13 | 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; }; 14 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; }; 15 | 8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; }; 16 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; }; 21 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 22 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 23 | 1B182F1B0FCB119B008ED63F /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; 24 | 1B182F1C0FCB119B008ED63F /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; 25 | 1B7727AF0FE8B16C00D2964E /* MTIBulbView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTIBulbView.m; path = ../MTIBulbView.m; sourceTree = SOURCE_ROOT; }; 26 | 1B7727B00FE8B16C00D2964E /* MTIBulbView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTIBulbView.h; path = ../MTIBulbView.h; sourceTree = SOURCE_ROOT; }; 27 | 1B7727B60FE8BF0700D2964E /* BulbIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = BulbIcon.icns; sourceTree = ""; }; 28 | 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; }; 29 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 30 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 31 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 32 | 32CA4F630368D1EE00C91783 /* BulbScreen_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BulbScreen_Prefix.pch; sourceTree = ""; }; 33 | 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 34 | 8D1107320486CEB800E47090 /* Bulb Screen.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Bulb Screen.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | 8D11072E0486CEB800E47090 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXFrameworksBuildPhase section */ 47 | 48 | /* Begin PBXGroup section */ 49 | 080E96DDFE201D6D7F000001 /* Classes */ = { 50 | isa = PBXGroup; 51 | children = ( 52 | 1B182F1B0FCB119B008ED63F /* AppController.h */, 53 | 1B182F1C0FCB119B008ED63F /* AppController.m */, 54 | ); 55 | name = Classes; 56 | sourceTree = ""; 57 | }; 58 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = { 59 | isa = PBXGroup; 60 | children = ( 61 | 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 62 | ); 63 | name = "Linked Frameworks"; 64 | sourceTree = ""; 65 | }; 66 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = { 67 | isa = PBXGroup; 68 | children = ( 69 | 29B97324FDCFA39411CA2CEA /* AppKit.framework */, 70 | 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */, 71 | 29B97325FDCFA39411CA2CEA /* Foundation.framework */, 72 | ); 73 | name = "Other Frameworks"; 74 | sourceTree = ""; 75 | }; 76 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 8D1107320486CEB800E47090 /* Bulb Screen.app */, 80 | ); 81 | name = Products; 82 | sourceTree = ""; 83 | }; 84 | 1B7727AE0FE8B14900D2964E /* BulbView */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | 1B7727AF0FE8B16C00D2964E /* MTIBulbView.m */, 88 | 1B7727B00FE8B16C00D2964E /* MTIBulbView.h */, 89 | ); 90 | name = BulbView; 91 | sourceTree = ""; 92 | }; 93 | 29B97314FDCFA39411CA2CEA /* LcdScreen */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | 1B7727AE0FE8B14900D2964E /* BulbView */, 97 | 080E96DDFE201D6D7F000001 /* Classes */, 98 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 99 | 29B97317FDCFA39411CA2CEA /* Resources */, 100 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 101 | 19C28FACFE9D520D11CA2CBB /* Products */, 102 | ); 103 | name = LcdScreen; 104 | sourceTree = ""; 105 | }; 106 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 107 | isa = PBXGroup; 108 | children = ( 109 | 32CA4F630368D1EE00C91783 /* BulbScreen_Prefix.pch */, 110 | 29B97316FDCFA39411CA2CEA /* main.m */, 111 | ); 112 | name = "Other Sources"; 113 | sourceTree = ""; 114 | }; 115 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 116 | isa = PBXGroup; 117 | children = ( 118 | 1B7727B60FE8BF0700D2964E /* BulbIcon.icns */, 119 | 8D1107310486CEB800E47090 /* Info.plist */, 120 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */, 121 | 1DDD58140DA1D0A300B32029 /* MainMenu.xib */, 122 | ); 123 | name = Resources; 124 | sourceTree = ""; 125 | }; 126 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */, 130 | 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */, 131 | ); 132 | name = Frameworks; 133 | sourceTree = ""; 134 | }; 135 | /* End PBXGroup section */ 136 | 137 | /* Begin PBXNativeTarget section */ 138 | 8D1107260486CEB800E47090 /* BulbScreen */ = { 139 | isa = PBXNativeTarget; 140 | buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "BulbScreen" */; 141 | buildPhases = ( 142 | 8D1107290486CEB800E47090 /* Resources */, 143 | 8D11072C0486CEB800E47090 /* Sources */, 144 | 8D11072E0486CEB800E47090 /* Frameworks */, 145 | ); 146 | buildRules = ( 147 | ); 148 | dependencies = ( 149 | ); 150 | name = BulbScreen; 151 | productInstallPath = "$(HOME)/Applications"; 152 | productName = LcdScreen; 153 | productReference = 8D1107320486CEB800E47090 /* Bulb Screen.app */; 154 | productType = "com.apple.product-type.application"; 155 | }; 156 | /* End PBXNativeTarget section */ 157 | 158 | /* Begin PBXProject section */ 159 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 160 | isa = PBXProject; 161 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "BulbScreen" */; 162 | compatibilityVersion = "Xcode 3.1"; 163 | hasScannedForEncodings = 1; 164 | mainGroup = 29B97314FDCFA39411CA2CEA /* LcdScreen */; 165 | projectDirPath = ""; 166 | projectRoot = ""; 167 | targets = ( 168 | 8D1107260486CEB800E47090 /* BulbScreen */, 169 | ); 170 | }; 171 | /* End PBXProject section */ 172 | 173 | /* Begin PBXResourcesBuildPhase section */ 174 | 8D1107290486CEB800E47090 /* Resources */ = { 175 | isa = PBXResourcesBuildPhase; 176 | buildActionMask = 2147483647; 177 | files = ( 178 | 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */, 179 | 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */, 180 | 1B7727B70FE8BF0700D2964E /* BulbIcon.icns in Resources */, 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | }; 184 | /* End PBXResourcesBuildPhase section */ 185 | 186 | /* Begin PBXSourcesBuildPhase section */ 187 | 8D11072C0486CEB800E47090 /* Sources */ = { 188 | isa = PBXSourcesBuildPhase; 189 | buildActionMask = 2147483647; 190 | files = ( 191 | 8D11072D0486CEB800E47090 /* main.m in Sources */, 192 | 1B182F1D0FCB119B008ED63F /* AppController.m in Sources */, 193 | 1B7727B10FE8B16C00D2964E /* MTIBulbView.m in Sources */, 194 | ); 195 | runOnlyForDeploymentPostprocessing = 0; 196 | }; 197 | /* End PBXSourcesBuildPhase section */ 198 | 199 | /* Begin PBXVariantGroup section */ 200 | 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = { 201 | isa = PBXVariantGroup; 202 | children = ( 203 | 089C165DFE840E0CC02AAC07 /* English */, 204 | ); 205 | name = InfoPlist.strings; 206 | sourceTree = ""; 207 | }; 208 | 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = { 209 | isa = PBXVariantGroup; 210 | children = ( 211 | 1DDD58150DA1D0A300B32029 /* English */, 212 | ); 213 | name = MainMenu.xib; 214 | sourceTree = ""; 215 | }; 216 | /* End PBXVariantGroup section */ 217 | 218 | /* Begin XCBuildConfiguration section */ 219 | C01FCF4B08A954540054247B /* Debug */ = { 220 | isa = XCBuildConfiguration; 221 | buildSettings = { 222 | ALWAYS_SEARCH_USER_PATHS = NO; 223 | COPY_PHASE_STRIP = NO; 224 | GCC_DYNAMIC_NO_PIC = NO; 225 | GCC_ENABLE_FIX_AND_CONTINUE = YES; 226 | GCC_MODEL_TUNING = G5; 227 | GCC_OPTIMIZATION_LEVEL = 0; 228 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 229 | GCC_PREFIX_HEADER = BulbScreen_Prefix.pch; 230 | INFOPLIST_FILE = Info.plist; 231 | INSTALL_PATH = "$(HOME)/Applications"; 232 | PRODUCT_NAME = "Bulb Screen"; 233 | }; 234 | name = Debug; 235 | }; 236 | C01FCF4C08A954540054247B /* Release */ = { 237 | isa = XCBuildConfiguration; 238 | buildSettings = { 239 | ALWAYS_SEARCH_USER_PATHS = NO; 240 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 241 | GCC_MODEL_TUNING = G5; 242 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 243 | GCC_PREFIX_HEADER = BulbScreen_Prefix.pch; 244 | INFOPLIST_FILE = Info.plist; 245 | INSTALL_PATH = "$(HOME)/Applications"; 246 | PRODUCT_NAME = "Bulb Screen"; 247 | }; 248 | name = Release; 249 | }; 250 | C01FCF4F08A954540054247B /* Debug */ = { 251 | isa = XCBuildConfiguration; 252 | buildSettings = { 253 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 254 | GCC_C_LANGUAGE_STANDARD = c99; 255 | GCC_OPTIMIZATION_LEVEL = 0; 256 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 257 | GCC_WARN_UNUSED_VARIABLE = YES; 258 | ONLY_ACTIVE_ARCH = YES; 259 | PREBINDING = NO; 260 | SDKROOT = macosx10.5; 261 | }; 262 | name = Debug; 263 | }; 264 | C01FCF5008A954540054247B /* Release */ = { 265 | isa = XCBuildConfiguration; 266 | buildSettings = { 267 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 268 | GCC_C_LANGUAGE_STANDARD = c99; 269 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 270 | GCC_WARN_UNUSED_VARIABLE = YES; 271 | PREBINDING = NO; 272 | SDKROOT = macosx10.5; 273 | }; 274 | name = Release; 275 | }; 276 | /* End XCBuildConfiguration section */ 277 | 278 | /* Begin XCConfigurationList section */ 279 | C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "BulbScreen" */ = { 280 | isa = XCConfigurationList; 281 | buildConfigurations = ( 282 | C01FCF4B08A954540054247B /* Debug */, 283 | C01FCF4C08A954540054247B /* Release */, 284 | ); 285 | defaultConfigurationIsVisible = 0; 286 | defaultConfigurationName = Release; 287 | }; 288 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "BulbScreen" */ = { 289 | isa = XCConfigurationList; 290 | buildConfigurations = ( 291 | C01FCF4F08A954540054247B /* Debug */, 292 | C01FCF5008A954540054247B /* Release */, 293 | ); 294 | defaultConfigurationIsVisible = 0; 295 | defaultConfigurationName = Release; 296 | }; 297 | /* End XCConfigurationList section */ 298 | }; 299 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 300 | } 301 | -------------------------------------------------------------------------------- /MacDemo/BulbScreen.xcodeproj/ryanmorlok.mode1v3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActivePerspectiveName 6 | Project 7 | AllowedModules 8 | 9 | 10 | BundleLoadPath 11 | 12 | MaxInstances 13 | n 14 | Module 15 | PBXSmartGroupTreeModule 16 | Name 17 | Groups and Files Outline View 18 | 19 | 20 | BundleLoadPath 21 | 22 | MaxInstances 23 | n 24 | Module 25 | PBXNavigatorGroup 26 | Name 27 | Editor 28 | 29 | 30 | BundleLoadPath 31 | 32 | MaxInstances 33 | n 34 | Module 35 | XCTaskListModule 36 | Name 37 | Task List 38 | 39 | 40 | BundleLoadPath 41 | 42 | MaxInstances 43 | n 44 | Module 45 | XCDetailModule 46 | Name 47 | File and Smart Group Detail Viewer 48 | 49 | 50 | BundleLoadPath 51 | 52 | MaxInstances 53 | 1 54 | Module 55 | PBXBuildResultsModule 56 | Name 57 | Detailed Build Results Viewer 58 | 59 | 60 | BundleLoadPath 61 | 62 | MaxInstances 63 | 1 64 | Module 65 | PBXProjectFindModule 66 | Name 67 | Project Batch Find Tool 68 | 69 | 70 | BundleLoadPath 71 | 72 | MaxInstances 73 | n 74 | Module 75 | XCProjectFormatConflictsModule 76 | Name 77 | Project Format Conflicts List 78 | 79 | 80 | BundleLoadPath 81 | 82 | MaxInstances 83 | n 84 | Module 85 | PBXBookmarksModule 86 | Name 87 | Bookmarks Tool 88 | 89 | 90 | BundleLoadPath 91 | 92 | MaxInstances 93 | n 94 | Module 95 | PBXClassBrowserModule 96 | Name 97 | Class Browser 98 | 99 | 100 | BundleLoadPath 101 | 102 | MaxInstances 103 | n 104 | Module 105 | PBXCVSModule 106 | Name 107 | Source Code Control Tool 108 | 109 | 110 | BundleLoadPath 111 | 112 | MaxInstances 113 | n 114 | Module 115 | PBXDebugBreakpointsModule 116 | Name 117 | Debug Breakpoints Tool 118 | 119 | 120 | BundleLoadPath 121 | 122 | MaxInstances 123 | n 124 | Module 125 | XCDockableInspector 126 | Name 127 | Inspector 128 | 129 | 130 | BundleLoadPath 131 | 132 | MaxInstances 133 | n 134 | Module 135 | PBXOpenQuicklyModule 136 | Name 137 | Open Quickly Tool 138 | 139 | 140 | BundleLoadPath 141 | 142 | MaxInstances 143 | 1 144 | Module 145 | PBXDebugSessionModule 146 | Name 147 | Debugger 148 | 149 | 150 | BundleLoadPath 151 | 152 | MaxInstances 153 | 1 154 | Module 155 | PBXDebugCLIModule 156 | Name 157 | Debug Console 158 | 159 | 160 | BundleLoadPath 161 | 162 | MaxInstances 163 | n 164 | Module 165 | XCSnapshotModule 166 | Name 167 | Snapshots Tool 168 | 169 | 170 | BundlePath 171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources 172 | Description 173 | DefaultDescriptionKey 174 | DockingSystemVisible 175 | 176 | Extension 177 | mode1v3 178 | FavBarConfig 179 | 180 | PBXProjectModuleGUID 181 | 1B6009140FC25E9C0068D87F 182 | XCBarModuleItemNames 183 | 184 | XCBarModuleItems 185 | 186 | 187 | FirstTimeWindowDisplayed 188 | 189 | Identifier 190 | com.apple.perspectives.project.mode1v3 191 | MajorVersion 192 | 33 193 | MinorVersion 194 | 0 195 | Name 196 | Default 197 | Notifications 198 | 199 | OpenEditors 200 | 201 | PerspectiveWidths 202 | 203 | -1 204 | -1 205 | 206 | Perspectives 207 | 208 | 209 | ChosenToolbarItems 210 | 211 | active-combo-popup 212 | action 213 | NSToolbarFlexibleSpaceItem 214 | build-and-go 215 | com.apple.ide.PBXToolbarStopButton 216 | get-info 217 | NSToolbarFlexibleSpaceItem 218 | com.apple.pbx.toolbar.searchfield 219 | 220 | ControllerClassBaseName 221 | 222 | IconName 223 | WindowOfProjectWithEditor 224 | Identifier 225 | perspective.project 226 | IsVertical 227 | 228 | Layout 229 | 230 | 231 | BecomeActive 232 | 233 | ContentConfiguration 234 | 235 | PBXBottomSmartGroupGIDs 236 | 237 | 1C37FBAC04509CD000000102 238 | 1C37FAAC04509CD000000102 239 | 1C08E77C0454961000C914BD 240 | 1C37FABC05509CD000000102 241 | 1C37FABC05539CD112110102 242 | E2644B35053B69B200211256 243 | 1C37FABC04509CD000100104 244 | 1CC0EA4004350EF90044410B 245 | 1CC0EA4004350EF90041110B 246 | 247 | PBXProjectModuleGUID 248 | 1CE0B1FE06471DED0097A5F4 249 | PBXProjectModuleLabel 250 | Files 251 | PBXProjectStructureProvided 252 | yes 253 | PBXSmartGroupTreeModuleColumnData 254 | 255 | PBXSmartGroupTreeModuleColumnWidthsKey 256 | 257 | 406 258 | 259 | PBXSmartGroupTreeModuleColumnsKey_v4 260 | 261 | MainColumn 262 | 263 | 264 | PBXSmartGroupTreeModuleOutlineStateKey_v7 265 | 266 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 267 | 268 | 29B97314FDCFA39411CA2CEA 269 | 1B7727AE0FE8B14900D2964E 270 | 080E96DDFE201D6D7F000001 271 | 29B97317FDCFA39411CA2CEA 272 | 19C28FACFE9D520D11CA2CBB 273 | 1C37FBAC04509CD000000102 274 | 1C37FABC05509CD000000102 275 | 276 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 277 | 278 | 279 | 10 280 | 8 281 | 0 282 | 283 | 284 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 285 | {{0, 0}, {406, 914}} 286 | 287 | PBXTopSmartGroupGIDs 288 | 289 | XCIncludePerspectivesSwitch 290 | 291 | XCSharingToken 292 | com.apple.Xcode.GFSharingToken 293 | 294 | GeometryConfiguration 295 | 296 | Frame 297 | {{0, 0}, {423, 932}} 298 | GroupTreeTableConfiguration 299 | 300 | MainColumn 301 | 406 302 | 303 | RubberWindowFrame 304 | 1964 55 1451 973 1680 -30 1920 1080 305 | 306 | Module 307 | PBXSmartGroupTreeModule 308 | Proportion 309 | 423pt 310 | 311 | 312 | Dock 313 | 314 | 315 | ContentConfiguration 316 | 317 | PBXProjectModuleGUID 318 | 1CE0B20306471E060097A5F4 319 | PBXProjectModuleLabel 320 | Info.plist 321 | PBXSplitModuleInNavigatorKey 322 | 323 | Split0 324 | 325 | PBXProjectModuleGUID 326 | 1CE0B20406471E060097A5F4 327 | PBXProjectModuleLabel 328 | Info.plist 329 | _historyCapacity 330 | 0 331 | bookmark 332 | 1B875AB90FEA0540002F2732 333 | history 334 | 335 | 1B182F090FCAF429008ED63F 336 | 1BC6639E0FD8DDDA002411C9 337 | 1BC6639F0FD8DDDA002411C9 338 | 1BE8CEC30FE1FFC800514D0B 339 | 1B7727B90FE8BF3B00D2964E 340 | 1B7727BA0FE8BF3B00D2964E 341 | 1B7727D30FE9EE6E00D2964E 342 | 343 | prevStack 344 | 345 | 1B182F0C0FCAF429008ED63F 346 | 1B182F130FCAF429008ED63F 347 | 1B182F2F0FCB1593008ED63F 348 | 1B182F380FCB1593008ED63F 349 | 1B182F3C0FCB1593008ED63F 350 | 1B182F3D0FCB1593008ED63F 351 | 1B7727BD0FE8BF3B00D2964E 352 | 353 | 354 | SplitCount 355 | 1 356 | 357 | StatusBarVisibility 358 | 359 | 360 | GeometryConfiguration 361 | 362 | Frame 363 | {{0, 0}, {1023, 754}} 364 | RubberWindowFrame 365 | 1964 55 1451 973 1680 -30 1920 1080 366 | 367 | Module 368 | PBXNavigatorGroup 369 | Proportion 370 | 754pt 371 | 372 | 373 | ContentConfiguration 374 | 375 | PBXProjectModuleGUID 376 | 1CE0B20506471E060097A5F4 377 | PBXProjectModuleLabel 378 | Detail 379 | 380 | GeometryConfiguration 381 | 382 | Frame 383 | {{0, 759}, {1023, 173}} 384 | RubberWindowFrame 385 | 1964 55 1451 973 1680 -30 1920 1080 386 | 387 | Module 388 | XCDetailModule 389 | Proportion 390 | 173pt 391 | 392 | 393 | Proportion 394 | 1023pt 395 | 396 | 397 | Name 398 | Project 399 | ServiceClasses 400 | 401 | XCModuleDock 402 | PBXSmartGroupTreeModule 403 | XCModuleDock 404 | PBXNavigatorGroup 405 | XCDetailModule 406 | 407 | TableOfContents 408 | 409 | 1B875AAF0FEA050F002F2732 410 | 1CE0B1FE06471DED0097A5F4 411 | 1B875AB00FEA050F002F2732 412 | 1CE0B20306471E060097A5F4 413 | 1CE0B20506471E060097A5F4 414 | 415 | ToolbarConfiguration 416 | xcode.toolbar.config.defaultV3 417 | 418 | 419 | ControllerClassBaseName 420 | 421 | IconName 422 | WindowOfProject 423 | Identifier 424 | perspective.morph 425 | IsVertical 426 | 0 427 | Layout 428 | 429 | 430 | BecomeActive 431 | 1 432 | ContentConfiguration 433 | 434 | PBXBottomSmartGroupGIDs 435 | 436 | 1C37FBAC04509CD000000102 437 | 1C37FAAC04509CD000000102 438 | 1C08E77C0454961000C914BD 439 | 1C37FABC05509CD000000102 440 | 1C37FABC05539CD112110102 441 | E2644B35053B69B200211256 442 | 1C37FABC04509CD000100104 443 | 1CC0EA4004350EF90044410B 444 | 1CC0EA4004350EF90041110B 445 | 446 | PBXProjectModuleGUID 447 | 11E0B1FE06471DED0097A5F4 448 | PBXProjectModuleLabel 449 | Files 450 | PBXProjectStructureProvided 451 | yes 452 | PBXSmartGroupTreeModuleColumnData 453 | 454 | PBXSmartGroupTreeModuleColumnWidthsKey 455 | 456 | 186 457 | 458 | PBXSmartGroupTreeModuleColumnsKey_v4 459 | 460 | MainColumn 461 | 462 | 463 | PBXSmartGroupTreeModuleOutlineStateKey_v7 464 | 465 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 466 | 467 | 29B97314FDCFA39411CA2CEA 468 | 1C37FABC05509CD000000102 469 | 470 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 471 | 472 | 473 | 0 474 | 475 | 476 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 477 | {{0, 0}, {186, 337}} 478 | 479 | PBXTopSmartGroupGIDs 480 | 481 | XCIncludePerspectivesSwitch 482 | 1 483 | XCSharingToken 484 | com.apple.Xcode.GFSharingToken 485 | 486 | GeometryConfiguration 487 | 488 | Frame 489 | {{0, 0}, {203, 355}} 490 | GroupTreeTableConfiguration 491 | 492 | MainColumn 493 | 186 494 | 495 | RubberWindowFrame 496 | 373 269 690 397 0 0 1440 878 497 | 498 | Module 499 | PBXSmartGroupTreeModule 500 | Proportion 501 | 100% 502 | 503 | 504 | Name 505 | Morph 506 | PreferredWidth 507 | 300 508 | ServiceClasses 509 | 510 | XCModuleDock 511 | PBXSmartGroupTreeModule 512 | 513 | TableOfContents 514 | 515 | 11E0B1FE06471DED0097A5F4 516 | 517 | ToolbarConfiguration 518 | xcode.toolbar.config.default.shortV3 519 | 520 | 521 | PerspectivesBarVisible 522 | 523 | ShelfIsVisible 524 | 525 | SourceDescription 526 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' 527 | StatusbarIsVisible 528 | 529 | TimeStamp 530 | 0.0 531 | ToolbarDisplayMode 532 | 1 533 | ToolbarIsVisible 534 | 535 | ToolbarSizeMode 536 | 1 537 | Type 538 | Perspectives 539 | UpdateMessage 540 | The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? 541 | WindowJustification 542 | 5 543 | WindowOrderList 544 | 545 | 1CD10A99069EF8BA00B06720 546 | 1B6009540FC519740068D87F 547 | 1C78EAAD065D492600B07095 548 | /Users/ryanmorlok/Development/BulbScreen/MacDemo/BulbScreen.xcodeproj 549 | 550 | WindowString 551 | 1964 55 1451 973 1680 -30 1920 1080 552 | WindowToolsV3 553 | 554 | 555 | FirstTimeWindowDisplayed 556 | 557 | Identifier 558 | windowTool.build 559 | IsVertical 560 | 561 | Layout 562 | 563 | 564 | Dock 565 | 566 | 567 | ContentConfiguration 568 | 569 | PBXProjectModuleGUID 570 | 1CD0528F0623707200166675 571 | PBXProjectModuleLabel 572 | 573 | StatusBarVisibility 574 | 575 | 576 | GeometryConfiguration 577 | 578 | Frame 579 | {{0, 0}, {973, 312}} 580 | RubberWindowFrame 581 | 121 401 973 594 0 0 1680 1028 582 | 583 | Module 584 | PBXNavigatorGroup 585 | Proportion 586 | 312pt 587 | 588 | 589 | ContentConfiguration 590 | 591 | PBXProjectModuleGUID 592 | XCMainBuildResultsModuleGUID 593 | PBXProjectModuleLabel 594 | Build 595 | XCBuildResultsTrigger_Collapse 596 | 1021 597 | XCBuildResultsTrigger_Open 598 | 1011 599 | 600 | GeometryConfiguration 601 | 602 | Frame 603 | {{0, 317}, {973, 236}} 604 | RubberWindowFrame 605 | 121 401 973 594 0 0 1680 1028 606 | 607 | Module 608 | PBXBuildResultsModule 609 | Proportion 610 | 236pt 611 | 612 | 613 | Proportion 614 | 553pt 615 | 616 | 617 | Name 618 | Build Results 619 | ServiceClasses 620 | 621 | PBXBuildResultsModule 622 | 623 | StatusbarIsVisible 624 | 625 | TableOfContents 626 | 627 | 1B6009540FC519740068D87F 628 | 1B875AB10FEA050F002F2732 629 | 1CD0528F0623707200166675 630 | XCMainBuildResultsModuleGUID 631 | 632 | ToolbarConfiguration 633 | xcode.toolbar.config.buildV3 634 | WindowString 635 | 121 401 973 594 0 0 1680 1028 636 | WindowToolGUID 637 | 1B6009540FC519740068D87F 638 | WindowToolIsVisible 639 | 640 | 641 | 642 | FirstTimeWindowDisplayed 643 | 644 | Identifier 645 | windowTool.debugger 646 | IsVertical 647 | 648 | Layout 649 | 650 | 651 | Dock 652 | 653 | 654 | ContentConfiguration 655 | 656 | Debugger 657 | 658 | HorizontalSplitView 659 | 660 | _collapsingFrameDimension 661 | 0.0 662 | _indexOfCollapsedView 663 | 0 664 | _percentageOfCollapsedView 665 | 0.0 666 | isCollapsed 667 | yes 668 | sizes 669 | 670 | {{0, 0}, {316, 203}} 671 | {{316, 0}, {378, 203}} 672 | 673 | 674 | VerticalSplitView 675 | 676 | _collapsingFrameDimension 677 | 0.0 678 | _indexOfCollapsedView 679 | 0 680 | _percentageOfCollapsedView 681 | 0.0 682 | isCollapsed 683 | yes 684 | sizes 685 | 686 | {{0, 0}, {694, 203}} 687 | {{0, 203}, {694, 178}} 688 | 689 | 690 | 691 | LauncherConfigVersion 692 | 8 693 | PBXProjectModuleGUID 694 | 1C162984064C10D400B95A72 695 | PBXProjectModuleLabel 696 | Debug - GLUTExamples (Underwater) 697 | 698 | GeometryConfiguration 699 | 700 | DebugConsoleVisible 701 | None 702 | DebugConsoleWindowFrame 703 | {{200, 200}, {500, 300}} 704 | DebugSTDIOWindowFrame 705 | {{200, 200}, {500, 300}} 706 | Frame 707 | {{0, 0}, {694, 381}} 708 | PBXDebugSessionStackFrameViewKey 709 | 710 | DebugVariablesTableConfiguration 711 | 712 | Name 713 | 120 714 | Value 715 | 85 716 | Summary 717 | 148 718 | 719 | Frame 720 | {{316, 0}, {378, 203}} 721 | RubberWindowFrame 722 | 1842 590 694 422 1680 -30 1920 1080 723 | 724 | RubberWindowFrame 725 | 1842 590 694 422 1680 -30 1920 1080 726 | 727 | Module 728 | PBXDebugSessionModule 729 | Proportion 730 | 381pt 731 | 732 | 733 | Proportion 734 | 381pt 735 | 736 | 737 | Name 738 | Debugger 739 | ServiceClasses 740 | 741 | PBXDebugSessionModule 742 | 743 | StatusbarIsVisible 744 | 745 | TableOfContents 746 | 747 | 1CD10A99069EF8BA00B06720 748 | 1B875AB20FEA050F002F2732 749 | 1C162984064C10D400B95A72 750 | 1B875AB30FEA050F002F2732 751 | 1B875AB40FEA050F002F2732 752 | 1B875AB50FEA050F002F2732 753 | 1B875AB60FEA050F002F2732 754 | 1B875AB70FEA050F002F2732 755 | 756 | ToolbarConfiguration 757 | xcode.toolbar.config.debugV3 758 | WindowString 759 | 1842 590 694 422 1680 -30 1920 1080 760 | WindowToolGUID 761 | 1CD10A99069EF8BA00B06720 762 | WindowToolIsVisible 763 | 764 | 765 | 766 | FirstTimeWindowDisplayed 767 | 768 | Identifier 769 | windowTool.find 770 | IsVertical 771 | 772 | Layout 773 | 774 | 775 | Dock 776 | 777 | 778 | Dock 779 | 780 | 781 | ContentConfiguration 782 | 783 | PBXProjectModuleGUID 784 | 1CDD528C0622207200134675 785 | PBXProjectModuleLabel 786 | 787 | StatusBarVisibility 788 | 789 | 790 | GeometryConfiguration 791 | 792 | Frame 793 | {{0, 0}, {1216, 218}} 794 | RubberWindowFrame 795 | 1883 161 1216 864 1680 -30 1920 1080 796 | 797 | Module 798 | PBXNavigatorGroup 799 | Proportion 800 | 1216pt 801 | 802 | 803 | Proportion 804 | 218pt 805 | 806 | 807 | BecomeActive 808 | 809 | ContentConfiguration 810 | 811 | PBXProjectModuleGUID 812 | 1CD0528E0623707200166675 813 | PBXProjectModuleLabel 814 | Project Find 815 | 816 | GeometryConfiguration 817 | 818 | Frame 819 | {{0, 223}, {1216, 600}} 820 | RubberWindowFrame 821 | 1883 161 1216 864 1680 -30 1920 1080 822 | 823 | Module 824 | PBXProjectFindModule 825 | Proportion 826 | 600pt 827 | 828 | 829 | Proportion 830 | 823pt 831 | 832 | 833 | Name 834 | Project Find 835 | ServiceClasses 836 | 837 | PBXProjectFindModule 838 | 839 | StatusbarIsVisible 840 | 841 | TableOfContents 842 | 843 | 1C530D57069F1CE1000CFCEE 844 | 1BE8CE6A0FE1EF0D00514D0B 845 | 1BE8CE6B0FE1EF0D00514D0B 846 | 1CDD528C0622207200134675 847 | 1CD0528E0623707200166675 848 | 849 | WindowString 850 | 1883 161 1216 864 1680 -30 1920 1080 851 | WindowToolGUID 852 | 1C530D57069F1CE1000CFCEE 853 | WindowToolIsVisible 854 | 855 | 856 | 857 | Identifier 858 | MENUSEPARATOR 859 | 860 | 861 | FirstTimeWindowDisplayed 862 | 863 | Identifier 864 | windowTool.debuggerConsole 865 | IsVertical 866 | 867 | Layout 868 | 869 | 870 | Dock 871 | 872 | 873 | BecomeActive 874 | 875 | ContentConfiguration 876 | 877 | PBXProjectModuleGUID 878 | 1C78EAAC065D492600B07095 879 | PBXProjectModuleLabel 880 | Debugger Console 881 | 882 | GeometryConfiguration 883 | 884 | Frame 885 | {{0, 0}, {1332, 533}} 886 | RubberWindowFrame 887 | 43 269 1332 574 0 0 1680 1028 888 | 889 | Module 890 | PBXDebugCLIModule 891 | Proportion 892 | 533pt 893 | 894 | 895 | Proportion 896 | 533pt 897 | 898 | 899 | Name 900 | Debugger Console 901 | ServiceClasses 902 | 903 | PBXDebugCLIModule 904 | 905 | StatusbarIsVisible 906 | 907 | TableOfContents 908 | 909 | 1C78EAAD065D492600B07095 910 | 1B875AB80FEA050F002F2732 911 | 1C78EAAC065D492600B07095 912 | 913 | ToolbarConfiguration 914 | xcode.toolbar.config.consoleV3 915 | WindowString 916 | 43 269 1332 574 0 0 1680 1028 917 | WindowToolGUID 918 | 1C78EAAD065D492600B07095 919 | WindowToolIsVisible 920 | 921 | 922 | 923 | Identifier 924 | windowTool.snapshots 925 | Layout 926 | 927 | 928 | Dock 929 | 930 | 931 | Module 932 | XCSnapshotModule 933 | Proportion 934 | 100% 935 | 936 | 937 | Proportion 938 | 100% 939 | 940 | 941 | Name 942 | Snapshots 943 | ServiceClasses 944 | 945 | XCSnapshotModule 946 | 947 | StatusbarIsVisible 948 | Yes 949 | ToolbarConfiguration 950 | xcode.toolbar.config.snapshots 951 | WindowString 952 | 315 824 300 550 0 0 1440 878 953 | WindowToolIsVisible 954 | Yes 955 | 956 | 957 | Identifier 958 | windowTool.scm 959 | Layout 960 | 961 | 962 | Dock 963 | 964 | 965 | ContentConfiguration 966 | 967 | PBXProjectModuleGUID 968 | 1C78EAB2065D492600B07095 969 | PBXProjectModuleLabel 970 | <No Editor> 971 | PBXSplitModuleInNavigatorKey 972 | 973 | Split0 974 | 975 | PBXProjectModuleGUID 976 | 1C78EAB3065D492600B07095 977 | 978 | SplitCount 979 | 1 980 | 981 | StatusBarVisibility 982 | 1 983 | 984 | GeometryConfiguration 985 | 986 | Frame 987 | {{0, 0}, {452, 0}} 988 | RubberWindowFrame 989 | 743 379 452 308 0 0 1280 1002 990 | 991 | Module 992 | PBXNavigatorGroup 993 | Proportion 994 | 0pt 995 | 996 | 997 | BecomeActive 998 | 1 999 | ContentConfiguration 1000 | 1001 | PBXProjectModuleGUID 1002 | 1CD052920623707200166675 1003 | PBXProjectModuleLabel 1004 | SCM 1005 | 1006 | GeometryConfiguration 1007 | 1008 | ConsoleFrame 1009 | {{0, 259}, {452, 0}} 1010 | Frame 1011 | {{0, 7}, {452, 259}} 1012 | RubberWindowFrame 1013 | 743 379 452 308 0 0 1280 1002 1014 | TableConfiguration 1015 | 1016 | Status 1017 | 30 1018 | FileName 1019 | 199 1020 | Path 1021 | 197.0950012207031 1022 | 1023 | TableFrame 1024 | {{0, 0}, {452, 250}} 1025 | 1026 | Module 1027 | PBXCVSModule 1028 | Proportion 1029 | 262pt 1030 | 1031 | 1032 | Proportion 1033 | 266pt 1034 | 1035 | 1036 | Name 1037 | SCM 1038 | ServiceClasses 1039 | 1040 | PBXCVSModule 1041 | 1042 | StatusbarIsVisible 1043 | 1 1044 | TableOfContents 1045 | 1046 | 1C78EAB4065D492600B07095 1047 | 1C78EAB5065D492600B07095 1048 | 1C78EAB2065D492600B07095 1049 | 1CD052920623707200166675 1050 | 1051 | ToolbarConfiguration 1052 | xcode.toolbar.config.scm 1053 | WindowString 1054 | 743 379 452 308 0 0 1280 1002 1055 | 1056 | 1057 | Identifier 1058 | windowTool.breakpoints 1059 | IsVertical 1060 | 0 1061 | Layout 1062 | 1063 | 1064 | Dock 1065 | 1066 | 1067 | BecomeActive 1068 | 1 1069 | ContentConfiguration 1070 | 1071 | PBXBottomSmartGroupGIDs 1072 | 1073 | 1C77FABC04509CD000000102 1074 | 1075 | PBXProjectModuleGUID 1076 | 1CE0B1FE06471DED0097A5F4 1077 | PBXProjectModuleLabel 1078 | Files 1079 | PBXProjectStructureProvided 1080 | no 1081 | PBXSmartGroupTreeModuleColumnData 1082 | 1083 | PBXSmartGroupTreeModuleColumnWidthsKey 1084 | 1085 | 168 1086 | 1087 | PBXSmartGroupTreeModuleColumnsKey_v4 1088 | 1089 | MainColumn 1090 | 1091 | 1092 | PBXSmartGroupTreeModuleOutlineStateKey_v7 1093 | 1094 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 1095 | 1096 | 1C77FABC04509CD000000102 1097 | 1098 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 1099 | 1100 | 1101 | 0 1102 | 1103 | 1104 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 1105 | {{0, 0}, {168, 350}} 1106 | 1107 | PBXTopSmartGroupGIDs 1108 | 1109 | XCIncludePerspectivesSwitch 1110 | 0 1111 | 1112 | GeometryConfiguration 1113 | 1114 | Frame 1115 | {{0, 0}, {185, 368}} 1116 | GroupTreeTableConfiguration 1117 | 1118 | MainColumn 1119 | 168 1120 | 1121 | RubberWindowFrame 1122 | 315 424 744 409 0 0 1440 878 1123 | 1124 | Module 1125 | PBXSmartGroupTreeModule 1126 | Proportion 1127 | 185pt 1128 | 1129 | 1130 | ContentConfiguration 1131 | 1132 | PBXProjectModuleGUID 1133 | 1CA1AED706398EBD00589147 1134 | PBXProjectModuleLabel 1135 | Detail 1136 | 1137 | GeometryConfiguration 1138 | 1139 | Frame 1140 | {{190, 0}, {554, 368}} 1141 | RubberWindowFrame 1142 | 315 424 744 409 0 0 1440 878 1143 | 1144 | Module 1145 | XCDetailModule 1146 | Proportion 1147 | 554pt 1148 | 1149 | 1150 | Proportion 1151 | 368pt 1152 | 1153 | 1154 | MajorVersion 1155 | 3 1156 | MinorVersion 1157 | 0 1158 | Name 1159 | Breakpoints 1160 | ServiceClasses 1161 | 1162 | PBXSmartGroupTreeModule 1163 | XCDetailModule 1164 | 1165 | StatusbarIsVisible 1166 | 1 1167 | TableOfContents 1168 | 1169 | 1CDDB66807F98D9800BB5817 1170 | 1CDDB66907F98D9800BB5817 1171 | 1CE0B1FE06471DED0097A5F4 1172 | 1CA1AED706398EBD00589147 1173 | 1174 | ToolbarConfiguration 1175 | xcode.toolbar.config.breakpointsV3 1176 | WindowString 1177 | 315 424 744 409 0 0 1440 878 1178 | WindowToolGUID 1179 | 1CDDB66807F98D9800BB5817 1180 | WindowToolIsVisible 1181 | 1 1182 | 1183 | 1184 | Identifier 1185 | windowTool.debugAnimator 1186 | Layout 1187 | 1188 | 1189 | Dock 1190 | 1191 | 1192 | Module 1193 | PBXNavigatorGroup 1194 | Proportion 1195 | 100% 1196 | 1197 | 1198 | Proportion 1199 | 100% 1200 | 1201 | 1202 | Name 1203 | Debug Visualizer 1204 | ServiceClasses 1205 | 1206 | PBXNavigatorGroup 1207 | 1208 | StatusbarIsVisible 1209 | 1 1210 | ToolbarConfiguration 1211 | xcode.toolbar.config.debugAnimatorV3 1212 | WindowString 1213 | 100 100 700 500 0 0 1280 1002 1214 | 1215 | 1216 | Identifier 1217 | windowTool.bookmarks 1218 | Layout 1219 | 1220 | 1221 | Dock 1222 | 1223 | 1224 | Module 1225 | PBXBookmarksModule 1226 | Proportion 1227 | 100% 1228 | 1229 | 1230 | Proportion 1231 | 100% 1232 | 1233 | 1234 | Name 1235 | Bookmarks 1236 | ServiceClasses 1237 | 1238 | PBXBookmarksModule 1239 | 1240 | StatusbarIsVisible 1241 | 0 1242 | WindowString 1243 | 538 42 401 187 0 0 1280 1002 1244 | 1245 | 1246 | Identifier 1247 | windowTool.projectFormatConflicts 1248 | Layout 1249 | 1250 | 1251 | Dock 1252 | 1253 | 1254 | Module 1255 | XCProjectFormatConflictsModule 1256 | Proportion 1257 | 100% 1258 | 1259 | 1260 | Proportion 1261 | 100% 1262 | 1263 | 1264 | Name 1265 | Project Format Conflicts 1266 | ServiceClasses 1267 | 1268 | XCProjectFormatConflictsModule 1269 | 1270 | StatusbarIsVisible 1271 | 0 1272 | WindowContentMinSize 1273 | 450 300 1274 | WindowString 1275 | 50 850 472 307 0 0 1440 877 1276 | 1277 | 1278 | Identifier 1279 | windowTool.classBrowser 1280 | Layout 1281 | 1282 | 1283 | Dock 1284 | 1285 | 1286 | BecomeActive 1287 | 1 1288 | ContentConfiguration 1289 | 1290 | OptionsSetName 1291 | Hierarchy, all classes 1292 | PBXProjectModuleGUID 1293 | 1CA6456E063B45B4001379D8 1294 | PBXProjectModuleLabel 1295 | Class Browser - NSObject 1296 | 1297 | GeometryConfiguration 1298 | 1299 | ClassesFrame 1300 | {{0, 0}, {374, 96}} 1301 | ClassesTreeTableConfiguration 1302 | 1303 | PBXClassNameColumnIdentifier 1304 | 208 1305 | PBXClassBookColumnIdentifier 1306 | 22 1307 | 1308 | Frame 1309 | {{0, 0}, {630, 331}} 1310 | MembersFrame 1311 | {{0, 105}, {374, 395}} 1312 | MembersTreeTableConfiguration 1313 | 1314 | PBXMemberTypeIconColumnIdentifier 1315 | 22 1316 | PBXMemberNameColumnIdentifier 1317 | 216 1318 | PBXMemberTypeColumnIdentifier 1319 | 97 1320 | PBXMemberBookColumnIdentifier 1321 | 22 1322 | 1323 | PBXModuleWindowStatusBarHidden2 1324 | 1 1325 | RubberWindowFrame 1326 | 385 179 630 352 0 0 1440 878 1327 | 1328 | Module 1329 | PBXClassBrowserModule 1330 | Proportion 1331 | 332pt 1332 | 1333 | 1334 | Proportion 1335 | 332pt 1336 | 1337 | 1338 | Name 1339 | Class Browser 1340 | ServiceClasses 1341 | 1342 | PBXClassBrowserModule 1343 | 1344 | StatusbarIsVisible 1345 | 0 1346 | TableOfContents 1347 | 1348 | 1C0AD2AF069F1E9B00FABCE6 1349 | 1C0AD2B0069F1E9B00FABCE6 1350 | 1CA6456E063B45B4001379D8 1351 | 1352 | ToolbarConfiguration 1353 | xcode.toolbar.config.classbrowser 1354 | WindowString 1355 | 385 179 630 352 0 0 1440 878 1356 | WindowToolGUID 1357 | 1C0AD2AF069F1E9B00FABCE6 1358 | WindowToolIsVisible 1359 | 0 1360 | 1361 | 1362 | Identifier 1363 | windowTool.refactoring 1364 | IncludeInToolsMenu 1365 | 0 1366 | Layout 1367 | 1368 | 1369 | Dock 1370 | 1371 | 1372 | BecomeActive 1373 | 1 1374 | GeometryConfiguration 1375 | 1376 | Frame 1377 | {0, 0}, {500, 335} 1378 | RubberWindowFrame 1379 | {0, 0}, {500, 335} 1380 | 1381 | Module 1382 | XCRefactoringModule 1383 | Proportion 1384 | 100% 1385 | 1386 | 1387 | Proportion 1388 | 100% 1389 | 1390 | 1391 | Name 1392 | Refactoring 1393 | ServiceClasses 1394 | 1395 | XCRefactoringModule 1396 | 1397 | WindowString 1398 | 200 200 500 356 0 0 1920 1200 1399 | 1400 | 1401 | 1402 | 1403 | -------------------------------------------------------------------------------- /MacDemo/BulbScreen.xcodeproj/ryanmorlok.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 089C165DFE840E0CC02AAC07 /* English */ = { 4 | uiCtxt = { 5 | sepNavIntBoundsRect = "{{0, 0}, {962, 733}}"; 6 | sepNavSelRange = "{0, 0}"; 7 | sepNavVisRange = "{0, 45}"; 8 | sepNavWindowFrame = "{{15, 79}, {1285, 944}}"; 9 | }; 10 | }; 11 | 1B182F090FCAF429008ED63F /* PBXTextBookmark */ = { 12 | isa = PBXTextBookmark; 13 | fRef = 089C165DFE840E0CC02AAC07 /* English */; 14 | name = "InfoPlist.strings: 1"; 15 | rLen = 0; 16 | rLoc = 0; 17 | rType = 0; 18 | vrLen = 45; 19 | vrLoc = 0; 20 | }; 21 | 1B182F0C0FCAF429008ED63F /* PlistBookmark */ = { 22 | isa = PlistBookmark; 23 | fRef = 8D1107310486CEB800E47090 /* Info.plist */; 24 | fallbackIsa = PBXBookmark; 25 | isK = 0; 26 | kPath = ( 27 | CFBundleIconFile, 28 | ); 29 | name = /Users/ryanmorlok/Development/LcdScreen/Info.plist; 30 | rLen = 0; 31 | rLoc = 2147483647; 32 | }; 33 | 1B182F130FCAF429008ED63F /* PBXTextBookmark */ = { 34 | isa = PBXTextBookmark; 35 | fRef = 089C165DFE840E0CC02AAC07 /* English */; 36 | name = "InfoPlist.strings: 1"; 37 | rLen = 0; 38 | rLoc = 0; 39 | rType = 0; 40 | vrLen = 45; 41 | vrLoc = 0; 42 | }; 43 | 1B182F1B0FCB119B008ED63F /* AppController.h */ = { 44 | uiCtxt = { 45 | sepNavIntBoundsRect = "{{0, 0}, {962, 722}}"; 46 | sepNavSelRange = "{901, 0}"; 47 | sepNavVisRange = "{0, 934}"; 48 | }; 49 | }; 50 | 1B182F1C0FCB119B008ED63F /* AppController.m */ = { 51 | uiCtxt = { 52 | sepNavIntBoundsRect = "{{0, 0}, {962, 854}}"; 53 | sepNavSelRange = "{1343, 0}"; 54 | sepNavVisRange = "{271, 1411}"; 55 | }; 56 | }; 57 | 1B182F2F0FCB1593008ED63F /* PBXTextBookmark */ = { 58 | isa = PBXTextBookmark; 59 | fRef = 29B97316FDCFA39411CA2CEA /* main.m */; 60 | name = "main.m: 1"; 61 | rLen = 0; 62 | rLoc = 0; 63 | rType = 0; 64 | vrLen = 256; 65 | vrLoc = 0; 66 | }; 67 | 1B182F380FCB1593008ED63F /* PBXTextBookmark */ = { 68 | isa = PBXTextBookmark; 69 | fRef = 32CA4F630368D1EE00C91783 /* BulbScreen_Prefix.pch */; 70 | name = "LcdScreen_Prefix.pch: 1"; 71 | rLen = 0; 72 | rLoc = 0; 73 | rType = 0; 74 | vrLen = 149; 75 | vrLoc = 0; 76 | }; 77 | 1B182F3C0FCB1593008ED63F /* PBXTextBookmark */ = { 78 | isa = PBXTextBookmark; 79 | fRef = 1B182F1B0FCB119B008ED63F /* AppController.h */; 80 | name = "AppController.h: 17"; 81 | rLen = 26; 82 | rLoc = 902; 83 | rType = 0; 84 | vrLen = 291; 85 | vrLoc = 0; 86 | }; 87 | 1B182F3D0FCB1593008ED63F /* PBXTextBookmark */ = { 88 | isa = PBXTextBookmark; 89 | fRef = 1B182F1C0FCB119B008ED63F /* AppController.m */; 90 | name = "AppController.m: 18"; 91 | rLen = 0; 92 | rLoc = 1581; 93 | rType = 0; 94 | vrLen = 273; 95 | vrLoc = 0; 96 | }; 97 | 1B6009070FC25E9A0068D87F /* BulbScreen */ = { 98 | isa = PBXExecutable; 99 | activeArgIndices = ( 100 | ); 101 | argumentStrings = ( 102 | ); 103 | autoAttachOnCrash = 1; 104 | breakpointsEnabled = 0; 105 | configStateDict = { 106 | }; 107 | customDataFormattersEnabled = 1; 108 | debuggerPlugin = GDBDebugging; 109 | disassemblyDisplayState = 0; 110 | dylibVariantSuffix = ""; 111 | enableDebugStr = 1; 112 | environmentEntries = ( 113 | ); 114 | executableSystemSymbolLevel = 0; 115 | executableUserSymbolLevel = 0; 116 | libgmallocEnabled = 0; 117 | name = BulbScreen; 118 | savedGlobals = { 119 | }; 120 | sourceDirectories = ( 121 | ); 122 | variableFormatDictionary = { 123 | }; 124 | }; 125 | 1B6009150FC25E9C0068D87F /* Source Control */ = { 126 | isa = PBXSourceControlManager; 127 | fallbackIsa = XCSourceControlManager; 128 | isSCMEnabled = 0; 129 | scmConfiguration = { 130 | }; 131 | }; 132 | 1B6009160FC25E9C0068D87F /* Code sense */ = { 133 | isa = PBXCodeSenseManager; 134 | indexTemplatePath = ""; 135 | }; 136 | 1B7727B90FE8BF3B00D2964E /* PBXTextBookmark */ = { 137 | isa = PBXTextBookmark; 138 | fRef = 1B182F1C0FCB119B008ED63F /* AppController.m */; 139 | name = "AppController.m: 45"; 140 | rLen = 0; 141 | rLoc = 1343; 142 | rType = 0; 143 | vrLen = 1411; 144 | vrLoc = 271; 145 | }; 146 | 1B7727BA0FE8BF3B00D2964E /* PBXBookmark */ = { 147 | isa = PBXBookmark; 148 | fRef = 1B7727B60FE8BF0700D2964E /* BulbIcon.icns */; 149 | }; 150 | 1B7727BD0FE8BF3B00D2964E /* PBXBookmark */ = { 151 | isa = PBXBookmark; 152 | fRef = 1B7727B60FE8BF0700D2964E /* BulbIcon.icns */; 153 | }; 154 | 1B7727D30FE9EE6E00D2964E /* PlistBookmark */ = { 155 | isa = PlistBookmark; 156 | fRef = 8D1107310486CEB800E47090 /* Info.plist */; 157 | fallbackIsa = PBXBookmark; 158 | isK = 0; 159 | kPath = ( 160 | ); 161 | name = /Users/ryanmorlok/Development/BulbScreen/MacDemo/Info.plist; 162 | rLen = 0; 163 | rLoc = 2147483647; 164 | }; 165 | 1B875AB90FEA0540002F2732 /* PlistBookmark */ = { 166 | isa = PlistBookmark; 167 | fRef = 8D1107310486CEB800E47090 /* Info.plist */; 168 | fallbackIsa = PBXBookmark; 169 | isK = 0; 170 | kPath = ( 171 | ); 172 | name = /Users/ryanmorlok/Development/BulbScreen/MacDemo/Info.plist; 173 | rLen = 0; 174 | rLoc = 2147483647; 175 | }; 176 | 1BC6639E0FD8DDDA002411C9 /* PBXTextBookmark */ = { 177 | isa = PBXTextBookmark; 178 | fRef = 29B97316FDCFA39411CA2CEA /* main.m */; 179 | name = "main.m: 4"; 180 | rLen = 0; 181 | rLoc = 80; 182 | rType = 0; 183 | vrLen = 762; 184 | vrLoc = 0; 185 | }; 186 | 1BC6639F0FD8DDDA002411C9 /* PBXTextBookmark */ = { 187 | isa = PBXTextBookmark; 188 | fRef = 32CA4F630368D1EE00C91783 /* BulbScreen_Prefix.pch */; 189 | name = "BulbScreen_Prefix.pch: 1"; 190 | rLen = 0; 191 | rLoc = 0; 192 | rType = 0; 193 | vrLen = 151; 194 | vrLoc = 0; 195 | }; 196 | 1BE8CEC30FE1FFC800514D0B /* PBXTextBookmark */ = { 197 | isa = PBXTextBookmark; 198 | fRef = 1B182F1B0FCB119B008ED63F /* AppController.h */; 199 | name = "AppController.h: 31"; 200 | rLen = 0; 201 | rLoc = 901; 202 | rType = 0; 203 | vrLen = 934; 204 | vrLoc = 0; 205 | }; 206 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 207 | activeBuildConfigurationName = Debug; 208 | activeExecutable = 1B6009070FC25E9A0068D87F /* BulbScreen */; 209 | activeTarget = 8D1107260486CEB800E47090 /* BulbScreen */; 210 | addToTargets = ( 211 | 8D1107260486CEB800E47090 /* BulbScreen */, 212 | ); 213 | breakpoints = ( 214 | ); 215 | codeSenseManager = 1B6009160FC25E9C0068D87F /* Code sense */; 216 | executables = ( 217 | 1B6009070FC25E9A0068D87F /* BulbScreen */, 218 | ); 219 | perUserDictionary = { 220 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 221 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 222 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 223 | PBXFileTableDataSourceColumnWidthsKey = ( 224 | 20, 225 | 784, 226 | 20, 227 | 48, 228 | 43, 229 | 43, 230 | 20, 231 | ); 232 | PBXFileTableDataSourceColumnsKey = ( 233 | PBXFileDataSource_FiletypeID, 234 | PBXFileDataSource_Filename_ColumnID, 235 | PBXFileDataSource_Built_ColumnID, 236 | PBXFileDataSource_ObjectSize_ColumnID, 237 | PBXFileDataSource_Errors_ColumnID, 238 | PBXFileDataSource_Warnings_ColumnID, 239 | PBXFileDataSource_Target_ColumnID, 240 | ); 241 | }; 242 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 243 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 244 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 245 | PBXFileTableDataSourceColumnWidthsKey = ( 246 | 20, 247 | 744, 248 | 60, 249 | 20, 250 | 48, 251 | 43, 252 | 43, 253 | ); 254 | PBXFileTableDataSourceColumnsKey = ( 255 | PBXFileDataSource_FiletypeID, 256 | PBXFileDataSource_Filename_ColumnID, 257 | PBXTargetDataSource_PrimaryAttribute, 258 | PBXFileDataSource_Built_ColumnID, 259 | PBXFileDataSource_ObjectSize_ColumnID, 260 | PBXFileDataSource_Errors_ColumnID, 261 | PBXFileDataSource_Warnings_ColumnID, 262 | ); 263 | }; 264 | PBXPerProjectTemplateStateSaveDate = 266994939; 265 | PBXWorkspaceStateSaveDate = 266994939; 266 | }; 267 | perUserProjectItems = { 268 | 1B182F090FCAF429008ED63F /* PBXTextBookmark */ = 1B182F090FCAF429008ED63F /* PBXTextBookmark */; 269 | 1B182F0C0FCAF429008ED63F /* PlistBookmark */ = 1B182F0C0FCAF429008ED63F /* PlistBookmark */; 270 | 1B182F130FCAF429008ED63F /* PBXTextBookmark */ = 1B182F130FCAF429008ED63F /* PBXTextBookmark */; 271 | 1B182F2F0FCB1593008ED63F /* PBXTextBookmark */ = 1B182F2F0FCB1593008ED63F /* PBXTextBookmark */; 272 | 1B182F380FCB1593008ED63F /* PBXTextBookmark */ = 1B182F380FCB1593008ED63F /* PBXTextBookmark */; 273 | 1B182F3C0FCB1593008ED63F /* PBXTextBookmark */ = 1B182F3C0FCB1593008ED63F /* PBXTextBookmark */; 274 | 1B182F3D0FCB1593008ED63F /* PBXTextBookmark */ = 1B182F3D0FCB1593008ED63F /* PBXTextBookmark */; 275 | 1B7727B90FE8BF3B00D2964E /* PBXTextBookmark */ = 1B7727B90FE8BF3B00D2964E /* PBXTextBookmark */; 276 | 1B7727BA0FE8BF3B00D2964E /* PBXBookmark */ = 1B7727BA0FE8BF3B00D2964E /* PBXBookmark */; 277 | 1B7727BD0FE8BF3B00D2964E /* PBXBookmark */ = 1B7727BD0FE8BF3B00D2964E /* PBXBookmark */; 278 | 1B7727D30FE9EE6E00D2964E /* PlistBookmark */ = 1B7727D30FE9EE6E00D2964E /* PlistBookmark */; 279 | 1B875AB90FEA0540002F2732 /* PlistBookmark */ = 1B875AB90FEA0540002F2732 /* PlistBookmark */; 280 | 1BC6639E0FD8DDDA002411C9 /* PBXTextBookmark */ = 1BC6639E0FD8DDDA002411C9 /* PBXTextBookmark */; 281 | 1BC6639F0FD8DDDA002411C9 /* PBXTextBookmark */ = 1BC6639F0FD8DDDA002411C9 /* PBXTextBookmark */; 282 | 1BE8CEC30FE1FFC800514D0B /* PBXTextBookmark */ = 1BE8CEC30FE1FFC800514D0B /* PBXTextBookmark */; 283 | }; 284 | sourceControlManager = 1B6009150FC25E9C0068D87F /* Source Control */; 285 | userBuildSettings = { 286 | }; 287 | }; 288 | 29B97316FDCFA39411CA2CEA /* main.m */ = { 289 | uiCtxt = { 290 | sepNavIntBoundsRect = "{{0, 0}, {962, 756}}"; 291 | sepNavSelRange = "{80, 0}"; 292 | sepNavVisRange = "{0, 762}"; 293 | }; 294 | }; 295 | 32CA4F630368D1EE00C91783 /* BulbScreen_Prefix.pch */ = { 296 | uiCtxt = { 297 | sepNavIntBoundsRect = "{{0, 0}, {1155, 163}}"; 298 | sepNavSelRange = "{80, 0}"; 299 | sepNavVisRange = "{0, 151}"; 300 | }; 301 | }; 302 | 8D1107260486CEB800E47090 /* BulbScreen */ = { 303 | activeExec = 0; 304 | executables = ( 305 | 1B6009070FC25E9A0068D87F /* BulbScreen */, 306 | ); 307 | }; 308 | } 309 | -------------------------------------------------------------------------------- /MacDemo/BulbScreen_Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'BulbScreen' target in the 'BulbScreen' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /MacDemo/English.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/MacDemo/English.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /MacDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | NSHumanReadableCopyright 10 | 11 | CFBundleIconFile 12 | BulbIcon.icns 13 | CFBundleDisplayName 14 | Bulb Icon 15 | CFBundleIdentifier 16 | com.morlok.${PRODUCT_NAME:identifier} 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | ${PRODUCT_NAME} 21 | CFBundlePackageType 22 | APPL 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 1.0 27 | NSMainNibFile 28 | MainMenu 29 | NSPrincipalClass 30 | NSApplication 31 | 32 | 33 | -------------------------------------------------------------------------------- /MacDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | #import 20 | 21 | int main(int argc, char *argv[]) 22 | { 23 | return NSApplicationMain(argc, (const char **) argv); 24 | } 25 | -------------------------------------------------------------------------------- /MacDemo/version.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildVersion 6 | 2 7 | CFBundleVersion 8 | 1.0 9 | ProjectName 10 | DevToolsWizardTemplates 11 | SourceVersion 12 | 11600000 13 | 14 | 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BulbView 2 | 3 | ![BulbView Logo](images/BulbViewLogo.png) 4 | 5 | A Cocoa/UIKit view to display text like light-up bulbs on a sports scoreboard. 6 | 7 | ![](images/iOS.png) 8 | 9 | ![](images/MacOS.png) -------------------------------------------------------------------------------- /iPhoneDemo/AppController.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppController.h 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | #import 20 | 21 | @class MTIBulbView; 22 | 23 | @interface AppController : NSObject { 24 | IBOutlet MTIBulbView *bulbView; 25 | NSTimer *timer; 26 | } 27 | 28 | - (void)tick:(NSTimer*)t; 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /iPhoneDemo/AppController.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppController.m 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | #import "AppController.h" 20 | #import "MTIBulbView.h" 21 | 22 | 23 | @implementation AppController 24 | 25 | - (void)awakeFromNib 26 | { 27 | CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); 28 | const CGFloat red[] = {1.0, 0.0, 0.0, 1.0}; 29 | const CGFloat clearRed[] = {1.0, 0.0, 0.0, 0.15}; 30 | bulbView.litColor = CGColorCreate(rgb, red); 31 | bulbView.dimColor = CGColorCreate(rgb, clearRed); 32 | CGColorSpaceRelease(rgb); 33 | 34 | bulbView.text = @"00:00:00"; 35 | 36 | timer = [NSTimer scheduledTimerWithTimeInterval:0.25 37 | target:self 38 | selector:@selector(tick:) 39 | userInfo:NULL 40 | repeats:YES]; 41 | [self tick:timer]; 42 | } 43 | 44 | - (void)tick:(NSTimer*)t 45 | { 46 | NSDate *now = [NSDate date]; 47 | NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 48 | [dateFormatter setDateFormat:@"HH:mm:ss"]; 49 | NSString *timeString = [dateFormatter stringFromDate:now]; 50 | [bulbView setText:timeString]; 51 | } 52 | 53 | - (void) dealloc 54 | { 55 | [timer invalidate]; 56 | [super dealloc]; 57 | } 58 | @end 59 | -------------------------------------------------------------------------------- /iPhoneDemo/BulbIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/iPhoneDemo/BulbIcon.png -------------------------------------------------------------------------------- /iPhoneDemo/BulbIcon.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/iPhoneDemo/BulbIcon.psd -------------------------------------------------------------------------------- /iPhoneDemo/BulbScreen.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 45; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1B7727E40FE9EF9E00D2964E /* MTIBulbView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B7727E20FE9EF9E00D2964E /* MTIBulbView.m */; }; 11 | 1B7727FA0FE9F19B00D2964E /* BulbIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 1B7727F90FE9F19B00D2964E /* BulbIcon.png */; }; 12 | 1BF6B2F00FCCF06D00782FF4 /* AppController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BF6B2EE0FCCF06D00782FF4 /* AppController.m */; }; 13 | 1D3623260D0F684500981E51 /* LcdiPhoneAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* LcdiPhoneAppDelegate.m */; }; 14 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; }; 15 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; 16 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 17 | 280E754D0DD40C5E005A515E /* FlipsideView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 280E754A0DD40C5E005A515E /* FlipsideView.xib */; }; 18 | 280E754E0DD40C5E005A515E /* MainView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 280E754B0DD40C5E005A515E /* MainView.xib */; }; 19 | 280E754F0DD40C5E005A515E /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 280E754C0DD40C5E005A515E /* MainWindow.xib */; }; 20 | 288765590DF743DE002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765580DF743DE002DB57D /* CoreGraphics.framework */; }; 21 | 289233A60DB2D0840083E9F9 /* FlipsideView.m in Sources */ = {isa = PBXBuildFile; fileRef = 289233A30DB2D0840083E9F9 /* FlipsideView.m */; }; 22 | 289233A70DB2D0840083E9F9 /* MainView.m in Sources */ = {isa = PBXBuildFile; fileRef = 289233A50DB2D0840083E9F9 /* MainView.m */; }; 23 | 289233AE0DB2D0DB0083E9F9 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 289233A90DB2D0DB0083E9F9 /* MainViewController.m */; }; 24 | 289233B00DB2D0DB0083E9F9 /* FlipsideViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 289233AD0DB2D0DB0083E9F9 /* FlipsideViewController.m */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | 1B7727E20FE9EF9E00D2964E /* MTIBulbView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MTIBulbView.m; path = ../MTIBulbView.m; sourceTree = SOURCE_ROOT; }; 29 | 1B7727E30FE9EF9E00D2964E /* MTIBulbView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MTIBulbView.h; path = ../MTIBulbView.h; sourceTree = SOURCE_ROOT; }; 30 | 1B7727F90FE9F19B00D2964E /* BulbIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = BulbIcon.png; sourceTree = ""; }; 31 | 1BF6B2EE0FCCF06D00782FF4 /* AppController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppController.m; sourceTree = ""; }; 32 | 1BF6B2EF0FCCF06D00782FF4 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppController.h; sourceTree = ""; }; 33 | 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 34 | 1D3623240D0F684500981E51 /* LcdiPhoneAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LcdiPhoneAppDelegate.h; sourceTree = ""; }; 35 | 1D3623250D0F684500981E51 /* LcdiPhoneAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LcdiPhoneAppDelegate.m; sourceTree = ""; }; 36 | 1D6058910D05DD3D006BFB54 /* Bulb View.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Bulb View.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 38 | 280E754A0DD40C5E005A515E /* FlipsideView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = FlipsideView.xib; sourceTree = ""; }; 39 | 280E754B0DD40C5E005A515E /* MainView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainView.xib; sourceTree = ""; }; 40 | 280E754C0DD40C5E005A515E /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = ""; }; 41 | 288765580DF743DE002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 42 | 289233A20DB2D0840083E9F9 /* FlipsideView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FlipsideView.h; path = Classes/FlipsideView.h; sourceTree = ""; }; 43 | 289233A30DB2D0840083E9F9 /* FlipsideView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FlipsideView.m; path = Classes/FlipsideView.m; sourceTree = ""; }; 44 | 289233A40DB2D0840083E9F9 /* MainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainView.h; path = Classes/MainView.h; sourceTree = ""; }; 45 | 289233A50DB2D0840083E9F9 /* MainView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MainView.m; path = Classes/MainView.m; sourceTree = ""; }; 46 | 289233A80DB2D0DB0083E9F9 /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainViewController.h; path = Classes/MainViewController.h; sourceTree = ""; }; 47 | 289233A90DB2D0DB0083E9F9 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = MainViewController.m; path = Classes/MainViewController.m; sourceTree = ""; }; 48 | 289233AC0DB2D0DB0083E9F9 /* FlipsideViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FlipsideViewController.h; path = Classes/FlipsideViewController.h; sourceTree = ""; }; 49 | 289233AD0DB2D0DB0083E9F9 /* FlipsideViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FlipsideViewController.m; path = Classes/FlipsideViewController.m; sourceTree = ""; }; 50 | 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 51 | 32CA4F630368D1EE00C91783 /* BulbViewiPhone_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BulbViewiPhone_Prefix.pch; sourceTree = ""; }; 52 | 8D1107310486CEB800E47090 /* BulbViewiPhone-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "BulbViewiPhone-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; 53 | /* End PBXFileReference section */ 54 | 55 | /* Begin PBXFrameworksBuildPhase section */ 56 | 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { 57 | isa = PBXFrameworksBuildPhase; 58 | buildActionMask = 2147483647; 59 | files = ( 60 | 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, 61 | 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, 62 | 288765590DF743DE002DB57D /* CoreGraphics.framework in Frameworks */, 63 | ); 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | /* End PBXFrameworksBuildPhase section */ 67 | 68 | /* Begin PBXGroup section */ 69 | 080E96DDFE201D6D7F000001 /* Application Delegate */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | 1D3623240D0F684500981E51 /* LcdiPhoneAppDelegate.h */, 73 | 1D3623250D0F684500981E51 /* LcdiPhoneAppDelegate.m */, 74 | ); 75 | name = "Application Delegate"; 76 | path = Classes; 77 | sourceTree = ""; 78 | }; 79 | 19C28FACFE9D520D11CA2CBB /* Products */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 1D6058910D05DD3D006BFB54 /* Bulb View.app */, 83 | ); 84 | name = Products; 85 | sourceTree = ""; 86 | }; 87 | 281C6CD70DB2D82200F60ACC /* Flipside View */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 289233A20DB2D0840083E9F9 /* FlipsideView.h */, 91 | 289233A30DB2D0840083E9F9 /* FlipsideView.m */, 92 | 289233AC0DB2D0DB0083E9F9 /* FlipsideViewController.h */, 93 | 289233AD0DB2D0DB0083E9F9 /* FlipsideViewController.m */, 94 | ); 95 | name = "Flipside View"; 96 | sourceTree = ""; 97 | }; 98 | 289233A00DB2D0730083E9F9 /* Main View */ = { 99 | isa = PBXGroup; 100 | children = ( 101 | 289233A40DB2D0840083E9F9 /* MainView.h */, 102 | 289233A50DB2D0840083E9F9 /* MainView.m */, 103 | 289233A80DB2D0DB0083E9F9 /* MainViewController.h */, 104 | 289233A90DB2D0DB0083E9F9 /* MainViewController.m */, 105 | ); 106 | name = "Main View"; 107 | sourceTree = ""; 108 | }; 109 | 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { 110 | isa = PBXGroup; 111 | children = ( 112 | 289233A00DB2D0730083E9F9 /* Main View */, 113 | 281C6CD70DB2D82200F60ACC /* Flipside View */, 114 | 080E96DDFE201D6D7F000001 /* Application Delegate */, 115 | 29B97315FDCFA39411CA2CEA /* Other Sources */, 116 | 29B97317FDCFA39411CA2CEA /* Resources */, 117 | 29B97323FDCFA39411CA2CEA /* Frameworks */, 118 | 19C28FACFE9D520D11CA2CBB /* Products */, 119 | ); 120 | name = CustomTemplate; 121 | sourceTree = ""; 122 | }; 123 | 29B97315FDCFA39411CA2CEA /* Other Sources */ = { 124 | isa = PBXGroup; 125 | children = ( 126 | 1B7727E20FE9EF9E00D2964E /* MTIBulbView.m */, 127 | 1B7727E30FE9EF9E00D2964E /* MTIBulbView.h */, 128 | 1BF6B2EE0FCCF06D00782FF4 /* AppController.m */, 129 | 1BF6B2EF0FCCF06D00782FF4 /* AppController.h */, 130 | 32CA4F630368D1EE00C91783 /* BulbViewiPhone_Prefix.pch */, 131 | 29B97316FDCFA39411CA2CEA /* main.m */, 132 | ); 133 | name = "Other Sources"; 134 | sourceTree = ""; 135 | }; 136 | 29B97317FDCFA39411CA2CEA /* Resources */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 1B7727F90FE9F19B00D2964E /* BulbIcon.png */, 140 | 280E754A0DD40C5E005A515E /* FlipsideView.xib */, 141 | 280E754B0DD40C5E005A515E /* MainView.xib */, 142 | 280E754C0DD40C5E005A515E /* MainWindow.xib */, 143 | 8D1107310486CEB800E47090 /* BulbViewiPhone-Info.plist */, 144 | ); 145 | name = Resources; 146 | sourceTree = ""; 147 | }; 148 | 29B97323FDCFA39411CA2CEA /* Frameworks */ = { 149 | isa = PBXGroup; 150 | children = ( 151 | 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, 152 | 1D30AB110D05D00D00671497 /* Foundation.framework */, 153 | 288765580DF743DE002DB57D /* CoreGraphics.framework */, 154 | ); 155 | name = Frameworks; 156 | sourceTree = ""; 157 | }; 158 | /* End PBXGroup section */ 159 | 160 | /* Begin PBXNativeTarget section */ 161 | 1D6058900D05DD3D006BFB54 /* Bulb View iPhone Demo */ = { 162 | isa = PBXNativeTarget; 163 | buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Bulb View iPhone Demo" */; 164 | buildPhases = ( 165 | 1D60588D0D05DD3D006BFB54 /* Resources */, 166 | 1D60588E0D05DD3D006BFB54 /* Sources */, 167 | 1D60588F0D05DD3D006BFB54 /* Frameworks */, 168 | ); 169 | buildRules = ( 170 | ); 171 | dependencies = ( 172 | ); 173 | name = "Bulb View iPhone Demo"; 174 | productName = LcdiPhone; 175 | productReference = 1D6058910D05DD3D006BFB54 /* Bulb View.app */; 176 | productType = "com.apple.product-type.application"; 177 | }; 178 | /* End PBXNativeTarget section */ 179 | 180 | /* Begin PBXProject section */ 181 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 182 | isa = PBXProject; 183 | buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "BulbScreen" */; 184 | compatibilityVersion = "Xcode 3.1"; 185 | hasScannedForEncodings = 1; 186 | knownRegions = ( 187 | English, 188 | Japanese, 189 | French, 190 | German, 191 | en, 192 | ); 193 | mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; 194 | projectDirPath = ""; 195 | projectRoot = ""; 196 | targets = ( 197 | 1D6058900D05DD3D006BFB54 /* Bulb View iPhone Demo */, 198 | ); 199 | }; 200 | /* End PBXProject section */ 201 | 202 | /* Begin PBXResourcesBuildPhase section */ 203 | 1D60588D0D05DD3D006BFB54 /* Resources */ = { 204 | isa = PBXResourcesBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 280E754D0DD40C5E005A515E /* FlipsideView.xib in Resources */, 208 | 280E754E0DD40C5E005A515E /* MainView.xib in Resources */, 209 | 280E754F0DD40C5E005A515E /* MainWindow.xib in Resources */, 210 | 1B7727FA0FE9F19B00D2964E /* BulbIcon.png in Resources */, 211 | ); 212 | runOnlyForDeploymentPostprocessing = 0; 213 | }; 214 | /* End PBXResourcesBuildPhase section */ 215 | 216 | /* Begin PBXSourcesBuildPhase section */ 217 | 1D60588E0D05DD3D006BFB54 /* Sources */ = { 218 | isa = PBXSourcesBuildPhase; 219 | buildActionMask = 2147483647; 220 | files = ( 221 | 1D60589B0D05DD56006BFB54 /* main.m in Sources */, 222 | 1D3623260D0F684500981E51 /* LcdiPhoneAppDelegate.m in Sources */, 223 | 289233A60DB2D0840083E9F9 /* FlipsideView.m in Sources */, 224 | 289233A70DB2D0840083E9F9 /* MainView.m in Sources */, 225 | 289233AE0DB2D0DB0083E9F9 /* MainViewController.m in Sources */, 226 | 289233B00DB2D0DB0083E9F9 /* FlipsideViewController.m in Sources */, 227 | 1BF6B2F00FCCF06D00782FF4 /* AppController.m in Sources */, 228 | 1B7727E40FE9EF9E00D2964E /* MTIBulbView.m in Sources */, 229 | ); 230 | runOnlyForDeploymentPostprocessing = 0; 231 | }; 232 | /* End PBXSourcesBuildPhase section */ 233 | 234 | /* Begin XCBuildConfiguration section */ 235 | 1D6058940D05DD3E006BFB54 /* Debug */ = { 236 | isa = XCBuildConfiguration; 237 | buildSettings = { 238 | ALWAYS_SEARCH_USER_PATHS = NO; 239 | COPY_PHASE_STRIP = NO; 240 | GCC_DYNAMIC_NO_PIC = NO; 241 | GCC_OPTIMIZATION_LEVEL = 0; 242 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 243 | GCC_PREFIX_HEADER = BulbViewiPhone_Prefix.pch; 244 | INFOPLIST_FILE = "BulbViewiPhone-Info.plist"; 245 | ONLY_ACTIVE_ARCH = YES; 246 | PRODUCT_NAME = "Bulb View"; 247 | }; 248 | name = Debug; 249 | }; 250 | 1D6058950D05DD3E006BFB54 /* Release */ = { 251 | isa = XCBuildConfiguration; 252 | buildSettings = { 253 | ALWAYS_SEARCH_USER_PATHS = NO; 254 | COPY_PHASE_STRIP = YES; 255 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 256 | GCC_PREFIX_HEADER = BulbViewiPhone_Prefix.pch; 257 | INFOPLIST_FILE = "BulbViewiPhone-Info.plist"; 258 | ONLY_ACTIVE_ARCH = YES; 259 | PRODUCT_NAME = "Bulb View"; 260 | }; 261 | name = Release; 262 | }; 263 | C01FCF4F08A954540054247B /* Debug */ = { 264 | isa = XCBuildConfiguration; 265 | buildSettings = { 266 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 267 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 268 | GCC_C_LANGUAGE_STANDARD = c99; 269 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 270 | GCC_WARN_UNUSED_VARIABLE = YES; 271 | ONLY_ACTIVE_ARCH = YES; 272 | PREBINDING = NO; 273 | SDKROOT = iphoneos3.0; 274 | }; 275 | name = Debug; 276 | }; 277 | C01FCF5008A954540054247B /* Release */ = { 278 | isa = XCBuildConfiguration; 279 | buildSettings = { 280 | ARCHS = "$(ARCHS_STANDARD_32_BIT)"; 281 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 282 | GCC_C_LANGUAGE_STANDARD = c99; 283 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 284 | GCC_WARN_UNUSED_VARIABLE = YES; 285 | PREBINDING = NO; 286 | SDKROOT = iphoneos3.0; 287 | }; 288 | name = Release; 289 | }; 290 | /* End XCBuildConfiguration section */ 291 | 292 | /* Begin XCConfigurationList section */ 293 | 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "Bulb View iPhone Demo" */ = { 294 | isa = XCConfigurationList; 295 | buildConfigurations = ( 296 | 1D6058940D05DD3E006BFB54 /* Debug */, 297 | 1D6058950D05DD3E006BFB54 /* Release */, 298 | ); 299 | defaultConfigurationIsVisible = 0; 300 | defaultConfigurationName = Release; 301 | }; 302 | C01FCF4E08A954540054247B /* Build configuration list for PBXProject "BulbScreen" */ = { 303 | isa = XCConfigurationList; 304 | buildConfigurations = ( 305 | C01FCF4F08A954540054247B /* Debug */, 306 | C01FCF5008A954540054247B /* Release */, 307 | ); 308 | defaultConfigurationIsVisible = 0; 309 | defaultConfigurationName = Release; 310 | }; 311 | /* End XCConfigurationList section */ 312 | }; 313 | rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; 314 | } 315 | -------------------------------------------------------------------------------- /iPhoneDemo/BulbScreen.xcodeproj/ryanmorlok.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 1B7727E20FE9EF9E00D2964E /* MTIBulbView.m */ = { 4 | uiCtxt = { 5 | sepNavIntBoundsRect = "{{0, 0}, {1226, 11401}}"; 6 | sepNavSelRange = "{31236, 0}"; 7 | sepNavVisRange = "{28528, 1940}"; 8 | sepNavWindowFrame = "{{2555, 30}, {1285, 944}}"; 9 | }; 10 | }; 11 | 1B7727E30FE9EF9E00D2964E /* MTIBulbView.h */ = { 12 | uiCtxt = { 13 | sepNavIntBoundsRect = "{{0, 0}, {1226, 816}}"; 14 | sepNavSelRange = "{1245, 0}"; 15 | sepNavVisRange = "{0, 1245}"; 16 | sepNavWindowFrame = "{{2222, 58}, {1285, 944}}"; 17 | }; 18 | }; 19 | 1B7728080FE9F85900D2964E /* PlistBookmark */ = { 20 | isa = PlistBookmark; 21 | fRef = 8D1107310486CEB800E47090 /* BulbViewiPhone-Info.plist */; 22 | fallbackIsa = PBXBookmark; 23 | isK = 0; 24 | kPath = ( 25 | ); 26 | name = "/Users/ryanmorlok/Development/BulbScreen/iPhoneDemo/BulbViewiPhone-Info.plist"; 27 | rLen = 0; 28 | rLoc = 2147483647; 29 | }; 30 | 1BB6F86F1173D2B900764FF8 /* PBXTextBookmark */ = { 31 | isa = PBXTextBookmark; 32 | fRef = 29B97316FDCFA39411CA2CEA /* main.m */; 33 | name = "main.m: 18"; 34 | rLen = 0; 35 | rLoc = 640; 36 | rType = 0; 37 | vrLen = 871; 38 | vrLoc = 0; 39 | }; 40 | 1BB6F8871173D5E300764FF8 /* PBXTextBookmark */ = { 41 | isa = PBXTextBookmark; 42 | fRef = 1B7727E30FE9EF9E00D2964E /* MTIBulbView.h */; 43 | name = "MTIBulbView.h: 48"; 44 | rLen = 0; 45 | rLoc = 1245; 46 | rType = 0; 47 | vrLen = 1138; 48 | vrLoc = 3; 49 | }; 50 | 1BB6F8891173D5E300764FF8 /* PBXTextBookmark */ = { 51 | isa = PBXTextBookmark; 52 | fRef = 1B7727E20FE9EF9E00D2964E /* MTIBulbView.m */; 53 | name = "MTIBulbView.m: 804"; 54 | rLen = 0; 55 | rLoc = 31236; 56 | rType = 0; 57 | vrLen = 1940; 58 | vrLoc = 28528; 59 | }; 60 | 1BB6F88A1173D5E300764FF8 /* PBXTextBookmark */ = { 61 | isa = PBXTextBookmark; 62 | fRef = 1B7727E30FE9EF9E00D2964E /* MTIBulbView.h */; 63 | name = "MTIBulbView.h: 48"; 64 | rLen = 0; 65 | rLoc = 1245; 66 | rType = 0; 67 | vrLen = 1245; 68 | vrLoc = 0; 69 | }; 70 | 1BB6F968117A6B0000764FF8 /* PBXTextBookmark */ = { 71 | isa = PBXTextBookmark; 72 | fRef = 1BF6B2EE0FCCF06D00782FF4 /* AppController.m */; 73 | name = "AppController.m: 27"; 74 | rLen = 272; 75 | rLoc = 757; 76 | rType = 0; 77 | vrLen = 985; 78 | vrLoc = 646; 79 | }; 80 | 1BB6F969117A6B0000764FF8 /* PBXTextBookmark */ = { 81 | isa = PBXTextBookmark; 82 | fRef = 1BF6B2EF0FCCF06D00782FF4 /* AppController.h */; 83 | name = "AppController.h: 24"; 84 | rLen = 0; 85 | rLoc = 761; 86 | rType = 0; 87 | vrLen = 819; 88 | vrLoc = 0; 89 | }; 90 | 1BB6F96C117A6B0000764FF8 /* PBXTextBookmark */ = { 91 | isa = PBXTextBookmark; 92 | fRef = 1B7727E30FE9EF9E00D2964E /* MTIBulbView.h */; 93 | name = "MTIBulbView.h: 48"; 94 | rLen = 0; 95 | rLoc = 1245; 96 | rType = 0; 97 | vrLen = 1245; 98 | vrLoc = 0; 99 | }; 100 | 1BB6F96D117A6B0000764FF8 /* PBXTextBookmark */ = { 101 | isa = PBXTextBookmark; 102 | fRef = 1B7727E20FE9EF9E00D2964E /* MTIBulbView.m */; 103 | name = "MTIBulbView.m: 804"; 104 | rLen = 0; 105 | rLoc = 31236; 106 | rType = 0; 107 | vrLen = 1940; 108 | vrLoc = 28528; 109 | }; 110 | 1BC5E2B10FEA04C40083AD5D /* PBXTextBookmark */ = { 111 | isa = PBXTextBookmark; 112 | fRef = 289233A40DB2D0840083E9F9 /* MainView.h */; 113 | name = "MainView.h: 18"; 114 | rLen = 0; 115 | rLoc = 644; 116 | rType = 0; 117 | vrLen = 710; 118 | vrLoc = 0; 119 | }; 120 | 1BC5E2B20FEA04C40083AD5D /* PBXTextBookmark */ = { 121 | isa = PBXTextBookmark; 122 | fRef = 289233A50DB2D0840083E9F9 /* MainView.m */; 123 | name = "MainView.m: 18"; 124 | rLen = 0; 125 | rLoc = 644; 126 | rType = 0; 127 | vrLen = 937; 128 | vrLoc = 0; 129 | }; 130 | 1BC5E2B30FEA04C40083AD5D /* PBXTextBookmark */ = { 131 | isa = PBXTextBookmark; 132 | fRef = 289233A80DB2D0DB0083E9F9 /* MainViewController.h */; 133 | name = "MainViewController.h: 18"; 134 | rLen = 0; 135 | rLoc = 654; 136 | rType = 0; 137 | vrLen = 833; 138 | vrLoc = 0; 139 | }; 140 | 1BC5E2B40FEA04C40083AD5D /* PBXTextBookmark */ = { 141 | isa = PBXTextBookmark; 142 | fRef = 289233A90DB2D0DB0083E9F9 /* MainViewController.m */; 143 | name = "MainViewController.m: 18"; 144 | rLen = 0; 145 | rLoc = 654; 146 | rType = 0; 147 | vrLen = 1118; 148 | vrLoc = 0; 149 | }; 150 | 1BC5E2B50FEA04C40083AD5D /* PBXTextBookmark */ = { 151 | isa = PBXTextBookmark; 152 | fRef = 1B7727E20FE9EF9E00D2964E /* MTIBulbView.m */; 153 | name = "MTIBulbView.m: 711"; 154 | rLen = 0; 155 | rLoc = 28783; 156 | rType = 0; 157 | vrLen = 1286; 158 | vrLoc = 28274; 159 | }; 160 | 1BC5E2B80FEA04C40083AD5D /* PBXTextBookmark */ = { 161 | isa = PBXTextBookmark; 162 | fRef = 1BF6B2EF0FCCF06D00782FF4 /* AppController.h */; 163 | name = "AppController.h: 24"; 164 | rLen = 0; 165 | rLoc = 761; 166 | rType = 0; 167 | vrLen = 819; 168 | vrLoc = 0; 169 | }; 170 | 1BC5E2B90FEA04C40083AD5D /* PBXTextBookmark */ = { 171 | isa = PBXTextBookmark; 172 | fRef = 32CA4F630368D1EE00C91783 /* BulbViewiPhone_Prefix.pch */; 173 | name = "BulbViewiPhone_Prefix.pch: 16"; 174 | rLen = 0; 175 | rLoc = 626; 176 | rType = 0; 177 | vrLen = 961; 178 | vrLoc = 0; 179 | }; 180 | 1BF6B2BB0FCCECD100782FF4 /* Bulb View iPhone Demo */ = { 181 | isa = PBXExecutable; 182 | activeArgIndices = ( 183 | ); 184 | argumentStrings = ( 185 | ); 186 | autoAttachOnCrash = 1; 187 | breakpointsEnabled = 0; 188 | configStateDict = { 189 | }; 190 | customDataFormattersEnabled = 1; 191 | dataTipCustomDataFormattersEnabled = 1; 192 | dataTipShowTypeColumn = 1; 193 | dataTipSortType = 0; 194 | debuggerPlugin = GDBDebugging; 195 | disassemblyDisplayState = 0; 196 | dylibVariantSuffix = ""; 197 | enableDebugStr = 1; 198 | environmentEntries = ( 199 | ); 200 | executableSystemSymbolLevel = 0; 201 | executableUserSymbolLevel = 0; 202 | libgmallocEnabled = 0; 203 | name = "Bulb View iPhone Demo"; 204 | savedGlobals = { 205 | }; 206 | showTypeColumn = 0; 207 | sourceDirectories = ( 208 | ); 209 | variableFormatDictionary = { 210 | }; 211 | }; 212 | 1BF6B2D70FCCECE600782FF4 /* Source Control */ = { 213 | isa = PBXSourceControlManager; 214 | fallbackIsa = XCSourceControlManager; 215 | isSCMEnabled = 0; 216 | scmConfiguration = { 217 | repositoryNamesForRoots = { 218 | "" = ""; 219 | }; 220 | }; 221 | }; 222 | 1BF6B2D80FCCECE600782FF4 /* Code sense */ = { 223 | isa = PBXCodeSenseManager; 224 | indexTemplatePath = ""; 225 | }; 226 | 1BF6B2EE0FCCF06D00782FF4 /* AppController.m */ = { 227 | uiCtxt = { 228 | sepNavIntBoundsRect = "{{0, 0}, {1261, 767}}"; 229 | sepNavSelRange = "{757, 272}"; 230 | sepNavVisRange = "{646, 985}"; 231 | sepNavWindowFrame = "{{96, 87}, {1285, 944}}"; 232 | }; 233 | }; 234 | 1BF6B2EF0FCCF06D00782FF4 /* AppController.h */ = { 235 | uiCtxt = { 236 | sepNavIntBoundsRect = "{{0, 0}, {1261, 537}}"; 237 | sepNavSelRange = "{761, 0}"; 238 | sepNavVisRange = "{0, 819}"; 239 | sepNavWindowFrame = "{{2016, 47}, {1285, 944}}"; 240 | }; 241 | }; 242 | 1D6058900D05DD3D006BFB54 /* Bulb View iPhone Demo */ = { 243 | activeExec = 0; 244 | executables = ( 245 | 1BF6B2BB0FCCECD100782FF4 /* Bulb View iPhone Demo */, 246 | ); 247 | }; 248 | 289233A40DB2D0840083E9F9 /* MainView.h */ = { 249 | uiCtxt = { 250 | sepNavIntBoundsRect = "{{0, 0}, {1261, 563}}"; 251 | sepNavSelRange = "{644, 0}"; 252 | sepNavVisRange = "{0, 710}"; 253 | }; 254 | }; 255 | 289233A50DB2D0840083E9F9 /* MainView.m */ = { 256 | uiCtxt = { 257 | sepNavIntBoundsRect = "{{0, 0}, {1261, 588}}"; 258 | sepNavSelRange = "{644, 0}"; 259 | sepNavVisRange = "{0, 937}"; 260 | }; 261 | }; 262 | 289233A80DB2D0DB0083E9F9 /* MainViewController.h */ = { 263 | uiCtxt = { 264 | sepNavIntBoundsRect = "{{0, 0}, {1261, 563}}"; 265 | sepNavSelRange = "{654, 0}"; 266 | sepNavVisRange = "{0, 833}"; 267 | }; 268 | }; 269 | 289233A90DB2D0DB0083E9F9 /* MainViewController.m */ = { 270 | uiCtxt = { 271 | sepNavIntBoundsRect = "{{0, 0}, {1261, 1358}}"; 272 | sepNavSelRange = "{654, 0}"; 273 | sepNavVisRange = "{0, 1118}"; 274 | }; 275 | }; 276 | 29B97313FDCFA39411CA2CEA /* Project object */ = { 277 | activeBuildConfigurationName = Debug; 278 | activeExecutable = 1BF6B2BB0FCCECD100782FF4 /* Bulb View iPhone Demo */; 279 | activeTarget = 1D6058900D05DD3D006BFB54 /* Bulb View iPhone Demo */; 280 | addToTargets = ( 281 | 1D6058900D05DD3D006BFB54 /* Bulb View iPhone Demo */, 282 | ); 283 | breakpoints = ( 284 | ); 285 | codeSenseManager = 1BF6B2D80FCCECE600782FF4 /* Code sense */; 286 | executables = ( 287 | 1BF6B2BB0FCCECD100782FF4 /* Bulb View iPhone Demo */, 288 | ); 289 | perUserDictionary = { 290 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 291 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 292 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 293 | PBXFileTableDataSourceColumnWidthsKey = ( 294 | 20, 295 | 1083, 296 | 20, 297 | 48, 298 | 43, 299 | 43, 300 | 20, 301 | ); 302 | PBXFileTableDataSourceColumnsKey = ( 303 | PBXFileDataSource_FiletypeID, 304 | PBXFileDataSource_Filename_ColumnID, 305 | PBXFileDataSource_Built_ColumnID, 306 | PBXFileDataSource_ObjectSize_ColumnID, 307 | PBXFileDataSource_Errors_ColumnID, 308 | PBXFileDataSource_Warnings_ColumnID, 309 | PBXFileDataSource_Target_ColumnID, 310 | ); 311 | }; 312 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 313 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 314 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 315 | PBXFileTableDataSourceColumnWidthsKey = ( 316 | 20, 317 | 1043, 318 | 60, 319 | 20, 320 | 48, 321 | 43, 322 | 43, 323 | ); 324 | PBXFileTableDataSourceColumnsKey = ( 325 | PBXFileDataSource_FiletypeID, 326 | PBXFileDataSource_Filename_ColumnID, 327 | PBXTargetDataSource_PrimaryAttribute, 328 | PBXFileDataSource_Built_ColumnID, 329 | PBXFileDataSource_ObjectSize_ColumnID, 330 | PBXFileDataSource_Errors_ColumnID, 331 | PBXFileDataSource_Warnings_ColumnID, 332 | ); 333 | }; 334 | PBXPerProjectTemplateStateSaveDate = 292804236; 335 | PBXWorkspaceStateSaveDate = 292804236; 336 | }; 337 | perUserProjectItems = { 338 | 1B7728080FE9F85900D2964E /* PlistBookmark */ = 1B7728080FE9F85900D2964E /* PlistBookmark */; 339 | 1BB6F86F1173D2B900764FF8 /* PBXTextBookmark */ = 1BB6F86F1173D2B900764FF8 /* PBXTextBookmark */; 340 | 1BB6F8871173D5E300764FF8 /* PBXTextBookmark */ = 1BB6F8871173D5E300764FF8 /* PBXTextBookmark */; 341 | 1BB6F8891173D5E300764FF8 /* PBXTextBookmark */ = 1BB6F8891173D5E300764FF8 /* PBXTextBookmark */; 342 | 1BB6F88A1173D5E300764FF8 /* PBXTextBookmark */ = 1BB6F88A1173D5E300764FF8 /* PBXTextBookmark */; 343 | 1BB6F968117A6B0000764FF8 /* PBXTextBookmark */ = 1BB6F968117A6B0000764FF8 /* PBXTextBookmark */; 344 | 1BB6F969117A6B0000764FF8 /* PBXTextBookmark */ = 1BB6F969117A6B0000764FF8 /* PBXTextBookmark */; 345 | 1BB6F96C117A6B0000764FF8 /* PBXTextBookmark */ = 1BB6F96C117A6B0000764FF8 /* PBXTextBookmark */; 346 | 1BB6F96D117A6B0000764FF8 /* PBXTextBookmark */ = 1BB6F96D117A6B0000764FF8 /* PBXTextBookmark */; 347 | 1BC5E2B10FEA04C40083AD5D /* PBXTextBookmark */ = 1BC5E2B10FEA04C40083AD5D /* PBXTextBookmark */; 348 | 1BC5E2B20FEA04C40083AD5D /* PBXTextBookmark */ = 1BC5E2B20FEA04C40083AD5D /* PBXTextBookmark */; 349 | 1BC5E2B30FEA04C40083AD5D /* PBXTextBookmark */ = 1BC5E2B30FEA04C40083AD5D /* PBXTextBookmark */; 350 | 1BC5E2B40FEA04C40083AD5D /* PBXTextBookmark */ = 1BC5E2B40FEA04C40083AD5D /* PBXTextBookmark */; 351 | 1BC5E2B50FEA04C40083AD5D /* PBXTextBookmark */ = 1BC5E2B50FEA04C40083AD5D /* PBXTextBookmark */; 352 | 1BC5E2B80FEA04C40083AD5D /* PBXTextBookmark */ = 1BC5E2B80FEA04C40083AD5D /* PBXTextBookmark */; 353 | 1BC5E2B90FEA04C40083AD5D /* PBXTextBookmark */ = 1BC5E2B90FEA04C40083AD5D /* PBXTextBookmark */; 354 | }; 355 | sourceControlManager = 1BF6B2D70FCCECE600782FF4 /* Source Control */; 356 | userBuildSettings = { 357 | }; 358 | }; 359 | 29B97316FDCFA39411CA2CEA /* main.m */ = { 360 | uiCtxt = { 361 | sepNavIntBoundsRect = "{{0, 0}, {1261, 551}}"; 362 | sepNavSelRange = "{640, 0}"; 363 | sepNavVisRange = "{0, 871}"; 364 | sepNavWindowFrame = "{{15, 109}, {1285, 944}}"; 365 | }; 366 | }; 367 | 32CA4F630368D1EE00C91783 /* BulbViewiPhone_Prefix.pch */ = { 368 | uiCtxt = { 369 | sepNavIntBoundsRect = "{{0, 0}, {1261, 563}}"; 370 | sepNavSelRange = "{626, 0}"; 371 | sepNavVisRange = "{0, 961}"; 372 | sepNavWindowFrame = "{{1990, 11}, {1285, 944}}"; 373 | }; 374 | }; 375 | 8D1107310486CEB800E47090 /* BulbViewiPhone-Info.plist */ = { 376 | uiCtxt = { 377 | sepNavWindowFrame = "{{61, 67}, {1285, 944}}"; 378 | }; 379 | }; 380 | } 381 | -------------------------------------------------------------------------------- /iPhoneDemo/BulbViewiPhone-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | BulbIcon.png 13 | CFBundleIdentifier 14 | com.morlok.${PRODUCT_NAME:rfc1034identifier} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | NSMainNibFile 28 | MainWindow 29 | 30 | 31 | -------------------------------------------------------------------------------- /iPhoneDemo/BulbViewiPhone_Prefix.pch: -------------------------------------------------------------------------------- 1 | // Copyright 2009 Ryan Morlok 2 | // http://softwareblog.morlok.net/ 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. 15 | // 16 | 17 | // 18 | // Prefix header for all source files of the 'BulbViewiPhone' target in the 'BulbViewiPhone' project 19 | // 20 | #import 21 | 22 | #ifndef __IPHONE_3_0 23 | #warning "This project uses features only available in iPhone SDK 3.0 and later." 24 | #endif 25 | 26 | 27 | #ifdef __OBJC__ 28 | #import 29 | #import 30 | #endif 31 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/FlipsideView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlipsideView.h 3 | // LcdiPhone 4 | // 5 | // Created by Ryan Morlok on 5/26/09. 6 | // Copyright Morlok Technologies 2009. All rights reserved. 7 | // 8 | 9 | @interface FlipsideView : UIView { 10 | 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/FlipsideView.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlipsideView.m 3 | // LcdiPhone 4 | // 5 | // Created by Ryan Morlok on 5/26/09. 6 | // Copyright Morlok Technologies 2009. All rights reserved. 7 | // 8 | 9 | #import "FlipsideView.h" 10 | 11 | @implementation FlipsideView 12 | 13 | 14 | - (id)initWithFrame:(CGRect)frame { 15 | if (self = [super initWithFrame:frame]) { 16 | // Initialization code 17 | } 18 | return self; 19 | } 20 | 21 | 22 | - (void)drawRect:(CGRect)rect { 23 | // Drawing code 24 | } 25 | 26 | 27 | - (void)dealloc { 28 | [super dealloc]; 29 | } 30 | 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/FlipsideViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FlipsideViewController.h 3 | // LcdiPhone 4 | // 5 | // Created by Ryan Morlok on 5/26/09. 6 | // Copyright Morlok Technologies 2009. All rights reserved. 7 | // 8 | 9 | @protocol FlipsideViewControllerDelegate; 10 | 11 | 12 | @interface FlipsideViewController : UIViewController { 13 | id delegate; 14 | } 15 | 16 | @property (nonatomic, assign) id delegate; 17 | - (IBAction)done; 18 | 19 | @end 20 | 21 | 22 | @protocol FlipsideViewControllerDelegate 23 | - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller; 24 | @end 25 | 26 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/FlipsideViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FlipsideViewController.m 3 | // LcdiPhone 4 | // 5 | // Created by Ryan Morlok on 5/26/09. 6 | // Copyright Morlok Technologies 2009. All rights reserved. 7 | // 8 | 9 | #import "FlipsideViewController.h" 10 | 11 | 12 | @implementation FlipsideViewController 13 | 14 | @synthesize delegate; 15 | 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor]; 20 | } 21 | 22 | 23 | - (IBAction)done { 24 | [self.delegate flipsideViewControllerDidFinish:self]; 25 | } 26 | 27 | 28 | /* 29 | // Override to allow orientations other than the default portrait orientation. 30 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 31 | // Return YES for supported orientations 32 | return (interfaceOrientation == UIInterfaceOrientationPortrait); 33 | } 34 | */ 35 | 36 | - (void)didReceiveMemoryWarning { 37 | // Releases the view if it doesn't have a superview. 38 | [super didReceiveMemoryWarning]; 39 | 40 | // Release any cached data, images, etc that aren't in use. 41 | } 42 | 43 | - (void)viewDidUnload { 44 | // Release any retained subviews of the main view. 45 | // e.g. self.myOutlet = nil; 46 | } 47 | 48 | 49 | - (void)dealloc { 50 | [super dealloc]; 51 | } 52 | 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/LcdiPhoneAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // LcdiPhoneAppDelegate.h 3 | // LcdiPhone 4 | // 5 | // Created by Ryan Morlok on 5/26/09. 6 | // Copyright Morlok Technologies 2009. All rights reserved. 7 | // 8 | 9 | @class MainViewController; 10 | 11 | @interface LcdiPhoneAppDelegate : NSObject { 12 | UIWindow *window; 13 | MainViewController *mainViewController; 14 | } 15 | 16 | @property (nonatomic, retain) IBOutlet UIWindow *window; 17 | @property (nonatomic, retain) MainViewController *mainViewController; 18 | 19 | @end 20 | 21 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/LcdiPhoneAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // LcdiPhoneAppDelegate.m 3 | // LcdiPhone 4 | // 5 | // Created by Ryan Morlok on 5/26/09. 6 | // Copyright Morlok Technologies 2009. All rights reserved. 7 | // 8 | 9 | #import "LcdiPhoneAppDelegate.h" 10 | #import "MainViewController.h" 11 | 12 | @implementation LcdiPhoneAppDelegate 13 | 14 | 15 | @synthesize window; 16 | @synthesize mainViewController; 17 | 18 | 19 | - (void)applicationDidFinishLaunching:(UIApplication *)application { 20 | 21 | MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil]; 22 | self.mainViewController = aController; 23 | [aController release]; 24 | 25 | mainViewController.view.frame = [UIScreen mainScreen].applicationFrame; 26 | [window addSubview:[mainViewController view]]; 27 | [window makeKeyAndVisible]; 28 | } 29 | 30 | 31 | - (void)dealloc { 32 | [mainViewController release]; 33 | [window release]; 34 | [super dealloc]; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/MainView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MainView.h 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | #import 20 | 21 | @interface MainView : UIView { 22 | 23 | } 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/MainView.m: -------------------------------------------------------------------------------- 1 | // 2 | // MainView.m 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | #import "MainView.h" 19 | 20 | @implementation MainView 21 | 22 | 23 | - (id)initWithFrame:(CGRect)frame { 24 | if (self = [super initWithFrame:frame]) { 25 | // Initialization code 26 | } 27 | return self; 28 | } 29 | 30 | 31 | - (void)drawRect:(CGRect)rect { 32 | // Drawing code 33 | } 34 | 35 | 36 | - (void)dealloc { 37 | [super dealloc]; 38 | } 39 | 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/MainViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MainViewController.h 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | #import "FlipsideViewController.h" 19 | 20 | @interface MainViewController : UIViewController { 21 | IBOutlet UIView *bulbView; 22 | } 23 | 24 | - (IBAction)showInfo; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /iPhoneDemo/Classes/MainViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MainViewController.m 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | #import "MainViewController.h" 19 | #import "MainView.h" 20 | 21 | 22 | @implementation MainViewController 23 | 24 | 25 | - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 26 | if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 27 | // Custom initialization 28 | } 29 | return self; 30 | } 31 | 32 | 33 | /* 34 | // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 35 | - (void)viewDidLoad { 36 | [super viewDidLoad]; 37 | } 38 | */ 39 | 40 | 41 | 42 | // Override to allow orientations other than the default portrait orientation. 43 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 44 | return YES; 45 | } 46 | 47 | 48 | - (void)flipsideViewControllerDidFinish:(FlipsideViewController *)controller { 49 | 50 | [self dismissModalViewControllerAnimated:YES]; 51 | } 52 | 53 | 54 | - (IBAction)showInfo { 55 | 56 | FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil]; 57 | controller.delegate = self; 58 | 59 | controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 60 | [self presentModalViewController:controller animated:YES]; 61 | 62 | [controller release]; 63 | } 64 | 65 | -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation 66 | duration:(NSTimeInterval)duration { 67 | CGRect appFrame; 68 | appFrame.origin = CGPointMake(0.0f, 0.0f); 69 | if ((orientation == UIInterfaceOrientationLandscapeLeft) || 70 | (orientation == UIInterfaceOrientationLandscapeRight)) 71 | appFrame = CGRectMake(7, 90, 470, 92); 72 | else 73 | appFrame = CGRectMake(40, 179, 280, 50); 74 | 75 | [bulbView setFrame:appFrame]; 76 | } 77 | 78 | - (void)didReceiveMemoryWarning { 79 | // Releases the view if it doesn't have a superview. 80 | [super didReceiveMemoryWarning]; 81 | 82 | // Release any cached data, images, etc that aren't in use. 83 | } 84 | 85 | - (void)viewDidUnload { 86 | // Release any retained subviews of the main view. 87 | // e.g. self.myOutlet = nil; 88 | } 89 | 90 | 91 | - (void)dealloc { 92 | [super dealloc]; 93 | } 94 | 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /iPhoneDemo/FlipsideView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 768 5 | 9J61 6 | 677 7 | 949.46 8 | 353.00 9 | 10 | YES 11 | 12 | 13 | 14 | YES 15 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 16 | 17 | 18 | YES 19 | 20 | YES 21 | 22 | 23 | YES 24 | 25 | 26 | 27 | YES 28 | 29 | IBFilesOwner 30 | 31 | 32 | IBFirstResponder 33 | 34 | 35 | 36 | 274 37 | 38 | YES 39 | 40 | 41 | 290 42 | {320, 44} 43 | 44 | NO 45 | NO 46 | 1 47 | 48 | YES 49 | 50 | 51 | Bulb View iPhone Demo 52 | 53 | 1 54 | 0 55 | 56 | 57 | 58 | 59 | 60 | 61 | 292 62 | {{87, 80}, {145, 21}} 63 | 64 | NO 65 | YES 66 | NO 67 | MTIBulbView Demo 68 | 69 | 1 70 | MSAxIDEAA 71 | 72 | 73 | 1 74 | 1.000000e+01 75 | 76 | 77 | 78 | 292 79 | {{138, 109}, {42, 21}} 80 | 81 | NO 82 | YES 83 | NO 84 | by 85 | 86 | 87 | 1 88 | 8.000000e+00 89 | 1 90 | 91 | 92 | 93 | 292 94 | {{111, 152}, {97, 21}} 95 | 96 | NO 97 | YES 98 | NO 99 | Ryan Morlok 100 | 101 | 102 | 1 103 | 1.000000e+01 104 | 105 | 106 | 107 | 292 108 | {{48, 181}, {224, 21}} 109 | 110 | NO 111 | YES 112 | NO 113 | http://softwareblog.morlok.net 114 | 115 | 116 | 1 117 | 1.000000e+01 118 | 119 | 120 | {320, 460} 121 | 122 | 123 | 1 124 | MCAwIDAAA 125 | 126 | NO 127 | 128 | 2 129 | 130 | 131 | 132 | 133 | 134 | YES 135 | 136 | 137 | view 138 | 139 | 140 | 141 | 41 142 | 143 | 144 | 145 | done 146 | 147 | 148 | 149 | 45 150 | 151 | 152 | 153 | 154 | YES 155 | 156 | 0 157 | 158 | YES 159 | 160 | 161 | 162 | 163 | 164 | -1 165 | 166 | 167 | RmlsZSdzIE93bmVyA 168 | 169 | 170 | -2 171 | 172 | 173 | 174 | 175 | 40 176 | 177 | 178 | YES 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 42 189 | 190 | 191 | YES 192 | 193 | 194 | 195 | 196 | 197 | 43 198 | 199 | 200 | YES 201 | 202 | 203 | 204 | 205 | 206 | 44 207 | 208 | 209 | 210 | 211 | 46 212 | 213 | 214 | 215 | 216 | 47 217 | 218 | 219 | 220 | 221 | 48 222 | 223 | 224 | 225 | 226 | 49 227 | 228 | 229 | 230 | 231 | 232 | 233 | YES 234 | 235 | YES 236 | -1.CustomClassName 237 | -2.CustomClassName 238 | 40.CustomClassName 239 | 40.IBEditorWindowLastContentRect 240 | 40.IBPluginDependency 241 | 42.IBPluginDependency 242 | 43.IBPluginDependency 243 | 44.IBPluginDependency 244 | 46.IBPluginDependency 245 | 47.IBPluginDependency 246 | 48.IBPluginDependency 247 | 49.IBPluginDependency 248 | 249 | 250 | YES 251 | FlipsideViewController 252 | UIResponder 253 | FlipsideView 254 | {{390, 228}, {320, 480}} 255 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 256 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 257 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 258 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 259 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 260 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 261 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 262 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 263 | 264 | 265 | 266 | YES 267 | 268 | YES 269 | 270 | 271 | YES 272 | 273 | 274 | 275 | 276 | YES 277 | 278 | YES 279 | 280 | 281 | YES 282 | 283 | 284 | 285 | 49 286 | 287 | 288 | 289 | YES 290 | 291 | FlipsideView 292 | UIView 293 | 294 | IBProjectSource 295 | Classes/FlipsideView.h 296 | 297 | 298 | 299 | FlipsideViewController 300 | UIViewController 301 | 302 | done 303 | id 304 | 305 | 306 | delegate 307 | id 308 | 309 | 310 | IBProjectSource 311 | Classes/FlipsideViewController.h 312 | 313 | 314 | 315 | 316 | 0 317 | BulbScreen.xcodeproj 318 | 3 319 | 320 | 321 | -------------------------------------------------------------------------------- /iPhoneDemo/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2009 Ryan Morlok 2 | http://softwareblog.morlok.net 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. -------------------------------------------------------------------------------- /iPhoneDemo/MainView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 768 5 | 9J61 6 | 677 7 | 949.46 8 | 353.00 9 | 10 | YES 11 | 12 | 13 | 14 | YES 15 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 16 | 17 | 18 | YES 19 | 20 | YES 21 | 22 | 23 | YES 24 | 25 | 26 | 27 | YES 28 | 29 | IBFilesOwner 30 | 31 | 32 | IBFirstResponder 33 | 34 | 35 | 36 | 274 37 | 38 | YES 39 | 40 | 41 | 292 42 | {{282, 421}, {18, 19}} 43 | 44 | NO 45 | NO 46 | 0 47 | 0 48 | 49 | Helvetica-Bold 50 | 1.500000e+01 51 | 16 52 | 53 | 3 54 | YES 55 | 56 | 1 57 | MSAxIDEAA 58 | 59 | 60 | 1 61 | MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA 62 | 63 | 64 | 65 | 66 | 292 67 | {{20, 168}, {280, 50}} 68 | 69 | 70 | 1 71 | MCAwIDAAA 72 | 73 | NO 74 | 75 | 76 | {320, 460} 77 | 78 | 79 | NO 80 | 81 | 2 82 | 83 | 84 | 85 | 86 | 87 | 88 | YES 89 | 90 | 91 | view 92 | 93 | 94 | 95 | 35 96 | 97 | 98 | 99 | showInfo 100 | 101 | 102 | 7 103 | 104 | 37 105 | 106 | 107 | 108 | bulbView 109 | 110 | 111 | 112 | 42 113 | 114 | 115 | 116 | bulbView 117 | 118 | 119 | 120 | 43 121 | 122 | 123 | 124 | 125 | YES 126 | 127 | 0 128 | 129 | YES 130 | 131 | 132 | 133 | 134 | 135 | -1 136 | 137 | 138 | RmlsZSdzIE93bmVyA 139 | 140 | 141 | -2 142 | 143 | 144 | 145 | 146 | 34 147 | 148 | 149 | YES 150 | 151 | 152 | 153 | 154 | 155 | 156 | 36 157 | 158 | 159 | 160 | 161 | 38 162 | 163 | 164 | 165 | 166 | 39 167 | 168 | 169 | 170 | 171 | 172 | 173 | YES 174 | 175 | YES 176 | -1.CustomClassName 177 | -2.CustomClassName 178 | 34.CustomClassName 179 | 34.IBEditorWindowLastContentRect 180 | 34.IBPluginDependency 181 | 36.IBPluginDependency 182 | 38.CustomClassName 183 | 38.IBPluginDependency 184 | 39.CustomClassName 185 | 39.IBPluginDependency 186 | 187 | 188 | YES 189 | MainViewController 190 | UIResponder 191 | MainView 192 | {{319, 448}, {320, 480}} 193 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 194 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 195 | MTIBulbView 196 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 197 | AppController 198 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 199 | 200 | 201 | 202 | YES 203 | 204 | YES 205 | 206 | 207 | YES 208 | 209 | 210 | 211 | 212 | YES 213 | 214 | YES 215 | 216 | 217 | YES 218 | 219 | 220 | 221 | 43 222 | 223 | 224 | 225 | YES 226 | 227 | AppController 228 | NSObject 229 | 230 | bulbView 231 | MTIBulbView 232 | 233 | 234 | IBProjectSource 235 | AppController.h 236 | 237 | 238 | 239 | MTIBulbView 240 | UIView 241 | 242 | IBProjectSource 243 | ../MTIBulbView.h 244 | 245 | 246 | 247 | MainView 248 | UIView 249 | 250 | IBProjectSource 251 | Classes/MainView.h 252 | 253 | 254 | 255 | MainViewController 256 | UIViewController 257 | 258 | showInfo 259 | id 260 | 261 | 262 | bulbView 263 | UIView 264 | 265 | 266 | IBProjectSource 267 | Classes/MainViewController.h 268 | 269 | 270 | 271 | 272 | 0 273 | BulbScreen.xcodeproj 274 | 3 275 | 276 | 277 | -------------------------------------------------------------------------------- /iPhoneDemo/MainWindow.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 768 5 | 10A288 6 | 715 7 | 1010 8 | 411.00 9 | 10 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 11 | 46 12 | 13 | 14 | YES 15 | 16 | 17 | 18 | YES 19 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 20 | 21 | 22 | YES 23 | 24 | YES 25 | 26 | 27 | YES 28 | 29 | 30 | 31 | YES 32 | 33 | IBFilesOwner 34 | 35 | 36 | IBFirstResponder 37 | 38 | 39 | 40 | 41 | 1316 42 | 43 | {320, 480} 44 | 45 | 46 | 1 47 | MCAwIDAAA 48 | 49 | NO 50 | YES 51 | 52 | 53 | 54 | 55 | 56 | YES 57 | 58 | 59 | delegate 60 | 61 | 62 | 63 | 4 64 | 65 | 66 | 67 | window 68 | 69 | 70 | 71 | 5 72 | 73 | 74 | 75 | 76 | YES 77 | 78 | 0 79 | 80 | 81 | 82 | 83 | 84 | 2 85 | 86 | 87 | YES 88 | 89 | 90 | 91 | 92 | -1 93 | 94 | 95 | File's Owner 96 | 97 | 98 | 3 99 | 100 | 101 | 102 | 103 | -2 104 | 105 | 106 | 107 | 108 | 109 | 110 | YES 111 | 112 | YES 113 | -1.CustomClassName 114 | -2.CustomClassName 115 | 2.IBAttributePlaceholdersKey 116 | 2.IBEditorWindowLastContentRect 117 | 2.IBPluginDependency 118 | 3.CustomClassName 119 | 3.IBPluginDependency 120 | 121 | 122 | YES 123 | UIApplication 124 | UIResponder 125 | 126 | YES 127 | 128 | 129 | YES 130 | 131 | 132 | {{733, 526}, {320, 480}} 133 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 134 | LcdiPhoneAppDelegate 135 | com.apple.InterfaceBuilder.IBCocoaTouchPlugin 136 | 137 | 138 | 139 | YES 140 | 141 | 142 | YES 143 | 144 | 145 | 146 | 147 | YES 148 | 149 | 150 | YES 151 | 152 | 153 | 154 | 21 155 | 156 | 157 | 158 | YES 159 | 160 | LcdiPhoneAppDelegate 161 | NSObject 162 | 163 | window 164 | UIWindow 165 | 166 | 167 | IBProjectSource 168 | Classes/LcdiPhoneAppDelegate.h 169 | 170 | 171 | 172 | 173 | 0 174 | 175 | com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 176 | 177 | 178 | YES 179 | LcdiPhone.xcodeproj 180 | 3 181 | 182 | 183 | -------------------------------------------------------------------------------- /iPhoneDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Copyright 2009 Ryan Morlok 4 | // http://softwareblog.morlok.net/ 5 | // 6 | // Licensed under the Apache License, Version 2.0 (the "License"); 7 | // you may not use this file except in compliance with the License. 8 | // You may obtain a copy of the License at 9 | // 10 | // http://www.apache.org/licenses/LICENSE-2.0 11 | // 12 | // Unless required by applicable law or agreed to in writing, software 13 | // distributed under the License is distributed on an "AS IS" BASIS, 14 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | // See the License for the specific language governing permissions and 16 | // limitations under the License. 17 | // 18 | 19 | 20 | #import 21 | 22 | int main(int argc, char *argv[]) { 23 | 24 | NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 25 | int retVal = UIApplicationMain(argc, argv, nil, nil); 26 | [pool release]; 27 | return retVal; 28 | } 29 | -------------------------------------------------------------------------------- /images/BulbViewLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/images/BulbViewLogo.png -------------------------------------------------------------------------------- /images/MacOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/images/MacOS.png -------------------------------------------------------------------------------- /images/iOS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rmorlok/BulbView/b2299a470e41134de7069bebba8ac9a4aa816c24/images/iOS.png --------------------------------------------------------------------------------