appjam 0.1.8.9 → 0.1.8.10
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/appjam/generators/templates/blank/EiffelApplication.xcodeproj/project.pbxproj +114 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication.xcodeproj/project.xcworkspace/xcuserdata/eiffel.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/AppDelegate.m.tt +13 -1
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/CustomBadge.h +52 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/CustomBadge.m +241 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherItem.h +58 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherItem.m +227 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherPageControl.h +37 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherPageControl.m +117 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherScrollView.h +23 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherScrollView.m +42 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherView.h +70 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherView.m +830 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherViewController.h +38 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/components/MyLauncher/MyLauncherViewController.m +302 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/AESCrypt.h +37 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/AESCrypt.m +50 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/NSData+Base64.h +17 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/NSData+Base64.m +110 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/NSData+CommonCrypto.h +112 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/NSData+CommonCrypto.m +546 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/NSString+Base64.h +15 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/AESCrypt-ObjC/NSString+Base64.m +82 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCCrossHairView.h +16 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCCrossHairView.m +43 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCFrameView.h +55 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCFrameView.m +234 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCIntrospect.h +155 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCIntrospect.m +1654 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCIntrospectSettings.h +56 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCStatusBarOverlay.h +34 -0
- data/lib/appjam/generators/templates/blank/EiffelApplication/libs/toolkit/DCIntrospect/DCStatusBarOverlay.m +107 -0
- data/lib/appjam/version.rb +1 -1
- metadata +32 -3
@@ -55,6 +55,17 @@
|
|
55
55
|
C54DA6841714126000457BF3 /* AFRESTClient.m in Sources */ = {isa = PBXBuildFile; fileRef = C54DA67D1714126000457BF3 /* AFRESTClient.m */; };
|
56
56
|
C54DA6851714126000457BF3 /* NSString+InflectorKit.m in Sources */ = {isa = PBXBuildFile; fileRef = C54DA6801714126000457BF3 /* NSString+InflectorKit.m */; };
|
57
57
|
C54DA6861714126000457BF3 /* TTTStringInflector.m in Sources */ = {isa = PBXBuildFile; fileRef = C54DA6821714126000457BF3 /* TTTStringInflector.m */; };
|
58
|
+
C5BD358B1728B2A700509984 /* DCCrossHairView.m in Sources */ = {isa = PBXBuildFile; fileRef = C5BD35831728B2A700509984 /* DCCrossHairView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
59
|
+
C5BD358C1728B2A700509984 /* DCFrameView.m in Sources */ = {isa = PBXBuildFile; fileRef = C5BD35851728B2A700509984 /* DCFrameView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
60
|
+
C5BD358D1728B2A700509984 /* DCIntrospect.m in Sources */ = {isa = PBXBuildFile; fileRef = C5BD35871728B2A700509984 /* DCIntrospect.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
61
|
+
C5BD358E1728B2A700509984 /* DCStatusBarOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = C5BD358A1728B2A700509984 /* DCStatusBarOverlay.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
62
|
+
C5E068471728E4190056F1DD /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5E068461728E4190056F1DD /* OpenAL.framework */; };
|
63
|
+
C5E068B41728E6640056F1DD /* CustomBadge.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E068A91728E6640056F1DD /* CustomBadge.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
64
|
+
C5E068B51728E6640056F1DD /* MyLauncherItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E068AB1728E6640056F1DD /* MyLauncherItem.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
65
|
+
C5E068B61728E6640056F1DD /* MyLauncherPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E068AD1728E6640056F1DD /* MyLauncherPageControl.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
66
|
+
C5E068B71728E6640056F1DD /* MyLauncherScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E068AF1728E6640056F1DD /* MyLauncherScrollView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
67
|
+
C5E068B81728E6640056F1DD /* MyLauncherView.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E068B11728E6640056F1DD /* MyLauncherView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
68
|
+
C5E068B91728E6640056F1DD /* MyLauncherViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E068B31728E6640056F1DD /* MyLauncherViewController.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
|
58
69
|
C5FAFE11170B0EC300D83034 /* AwesomeMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FAFCCB170B0EC300D83034 /* AwesomeMenu.m */; };
|
59
70
|
C5FAFE12170B0EC300D83034 /* AwesomeMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FAFCCD170B0EC300D83034 /* AwesomeMenuItem.m */; };
|
60
71
|
C5FAFE13170B0EC300D83034 /* bg-addbutton-highlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = C5FAFCCF170B0EC300D83034 /* bg-addbutton-highlighted.png */; };
|
@@ -207,6 +218,10 @@
|
|
207
218
|
C5FAFEB3170B1A9700D83034 /* TFHpple.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FAFEAE170B1A9700D83034 /* TFHpple.m */; };
|
208
219
|
C5FAFEB4170B1A9700D83034 /* TFHppleElement.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FAFEB0170B1A9700D83034 /* TFHppleElement.m */; };
|
209
220
|
C5FAFEB5170B1A9700D83034 /* XPathQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FAFEB2170B1A9700D83034 /* XPathQuery.m */; };
|
221
|
+
C5FCC4751728DAA300D5E07F /* AESCrypt.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FCC46D1728DAA300D5E07F /* AESCrypt.m */; };
|
222
|
+
C5FCC4761728DAA300D5E07F /* NSData+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FCC46F1728DAA300D5E07F /* NSData+Base64.m */; };
|
223
|
+
C5FCC4771728DAA300D5E07F /* NSData+CommonCrypto.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FCC4711728DAA300D5E07F /* NSData+CommonCrypto.m */; };
|
224
|
+
C5FCC4781728DAA300D5E07F /* NSString+Base64.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FCC4731728DAA300D5E07F /* NSString+Base64.m */; };
|
210
225
|
/* End PBXBuildFile section */
|
211
226
|
|
212
227
|
/* Begin PBXContainerItemProxy section */
|
@@ -277,6 +292,28 @@
|
|
277
292
|
C54DA6801714126000457BF3 /* NSString+InflectorKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+InflectorKit.m"; sourceTree = "<group>"; };
|
278
293
|
C54DA6811714126000457BF3 /* TTTStringInflector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TTTStringInflector.h; sourceTree = "<group>"; };
|
279
294
|
C54DA6821714126000457BF3 /* TTTStringInflector.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TTTStringInflector.m; sourceTree = "<group>"; };
|
295
|
+
C5BD35821728B2A700509984 /* DCCrossHairView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCCrossHairView.h; sourceTree = "<group>"; };
|
296
|
+
C5BD35831728B2A700509984 /* DCCrossHairView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCCrossHairView.m; sourceTree = "<group>"; };
|
297
|
+
C5BD35841728B2A700509984 /* DCFrameView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCFrameView.h; sourceTree = "<group>"; };
|
298
|
+
C5BD35851728B2A700509984 /* DCFrameView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCFrameView.m; sourceTree = "<group>"; };
|
299
|
+
C5BD35861728B2A700509984 /* DCIntrospect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCIntrospect.h; sourceTree = "<group>"; };
|
300
|
+
C5BD35871728B2A700509984 /* DCIntrospect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCIntrospect.m; sourceTree = "<group>"; };
|
301
|
+
C5BD35881728B2A700509984 /* DCIntrospectSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCIntrospectSettings.h; sourceTree = "<group>"; };
|
302
|
+
C5BD35891728B2A700509984 /* DCStatusBarOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCStatusBarOverlay.h; sourceTree = "<group>"; };
|
303
|
+
C5BD358A1728B2A700509984 /* DCStatusBarOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCStatusBarOverlay.m; sourceTree = "<group>"; };
|
304
|
+
C5E068461728E4190056F1DD /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
|
305
|
+
C5E068A81728E6640056F1DD /* CustomBadge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomBadge.h; sourceTree = "<group>"; };
|
306
|
+
C5E068A91728E6640056F1DD /* CustomBadge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomBadge.m; sourceTree = "<group>"; };
|
307
|
+
C5E068AA1728E6640056F1DD /* MyLauncherItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyLauncherItem.h; sourceTree = "<group>"; };
|
308
|
+
C5E068AB1728E6640056F1DD /* MyLauncherItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyLauncherItem.m; sourceTree = "<group>"; };
|
309
|
+
C5E068AC1728E6640056F1DD /* MyLauncherPageControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyLauncherPageControl.h; sourceTree = "<group>"; };
|
310
|
+
C5E068AD1728E6640056F1DD /* MyLauncherPageControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyLauncherPageControl.m; sourceTree = "<group>"; };
|
311
|
+
C5E068AE1728E6640056F1DD /* MyLauncherScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyLauncherScrollView.h; sourceTree = "<group>"; };
|
312
|
+
C5E068AF1728E6640056F1DD /* MyLauncherScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyLauncherScrollView.m; sourceTree = "<group>"; };
|
313
|
+
C5E068B01728E6640056F1DD /* MyLauncherView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyLauncherView.h; sourceTree = "<group>"; };
|
314
|
+
C5E068B11728E6640056F1DD /* MyLauncherView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyLauncherView.m; sourceTree = "<group>"; };
|
315
|
+
C5E068B21728E6640056F1DD /* MyLauncherViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyLauncherViewController.h; sourceTree = "<group>"; };
|
316
|
+
C5E068B31728E6640056F1DD /* MyLauncherViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MyLauncherViewController.m; sourceTree = "<group>"; };
|
280
317
|
C5FAFCCA170B0EC300D83034 /* AwesomeMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AwesomeMenu.h; sourceTree = "<group>"; };
|
281
318
|
C5FAFCCB170B0EC300D83034 /* AwesomeMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AwesomeMenu.m; sourceTree = "<group>"; };
|
282
319
|
C5FAFCCC170B0EC300D83034 /* AwesomeMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AwesomeMenuItem.h; sourceTree = "<group>"; };
|
@@ -565,6 +602,14 @@
|
|
565
602
|
C5FAFEB0170B1A9700D83034 /* TFHppleElement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TFHppleElement.m; sourceTree = "<group>"; };
|
566
603
|
C5FAFEB1170B1A9700D83034 /* XPathQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XPathQuery.h; sourceTree = "<group>"; };
|
567
604
|
C5FAFEB2170B1A9700D83034 /* XPathQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XPathQuery.m; sourceTree = "<group>"; };
|
605
|
+
C5FCC46C1728DAA300D5E07F /* AESCrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AESCrypt.h; sourceTree = "<group>"; };
|
606
|
+
C5FCC46D1728DAA300D5E07F /* AESCrypt.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AESCrypt.m; sourceTree = "<group>"; };
|
607
|
+
C5FCC46E1728DAA300D5E07F /* NSData+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+Base64.h"; sourceTree = "<group>"; };
|
608
|
+
C5FCC46F1728DAA300D5E07F /* NSData+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+Base64.m"; sourceTree = "<group>"; };
|
609
|
+
C5FCC4701728DAA300D5E07F /* NSData+CommonCrypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+CommonCrypto.h"; sourceTree = "<group>"; };
|
610
|
+
C5FCC4711728DAA300D5E07F /* NSData+CommonCrypto.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+CommonCrypto.m"; sourceTree = "<group>"; };
|
611
|
+
C5FCC4721728DAA300D5E07F /* NSString+Base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Base64.h"; sourceTree = "<group>"; };
|
612
|
+
C5FCC4731728DAA300D5E07F /* NSString+Base64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Base64.m"; sourceTree = "<group>"; };
|
568
613
|
/* End PBXFileReference section */
|
569
614
|
|
570
615
|
/* Begin PBXFrameworksBuildPhase section */
|
@@ -572,6 +617,7 @@
|
|
572
617
|
isa = PBXFrameworksBuildPhase;
|
573
618
|
buildActionMask = 2147483647;
|
574
619
|
files = (
|
620
|
+
C5E068471728E4190056F1DD /* OpenAL.framework in Frameworks */,
|
575
621
|
C52562981705AE2000AC76A2 /* libsqlite3.dylib in Frameworks */,
|
576
622
|
C52562991705AE2000AC76A2 /* libxml2.dylib in Frameworks */,
|
577
623
|
C525629A1705AE2000AC76A2 /* libz.dylib in Frameworks */,
|
@@ -644,6 +690,7 @@
|
|
644
690
|
C52562951705AE2000AC76A2 /* libsqlite3.dylib */,
|
645
691
|
C52562961705AE2000AC76A2 /* libxml2.dylib */,
|
646
692
|
C52562971705AE2000AC76A2 /* libz.dylib */,
|
693
|
+
C5E068461728E4190056F1DD /* OpenAL.framework */,
|
647
694
|
C54DA67317140B0B00457BF3 /* CoreFoundation.framework */,
|
648
695
|
C52562691705ADF000AC76A2 /* Accelerate.framework */,
|
649
696
|
C525626A1705ADF000AC76A2 /* AudioToolbox.framework */,
|
@@ -778,9 +825,45 @@
|
|
778
825
|
path = InflectorKit;
|
779
826
|
sourceTree = "<group>";
|
780
827
|
};
|
828
|
+
C5BD35811728B2A700509984 /* DCIntrospect */ = {
|
829
|
+
isa = PBXGroup;
|
830
|
+
children = (
|
831
|
+
C5BD35821728B2A700509984 /* DCCrossHairView.h */,
|
832
|
+
C5BD35831728B2A700509984 /* DCCrossHairView.m */,
|
833
|
+
C5BD35841728B2A700509984 /* DCFrameView.h */,
|
834
|
+
C5BD35851728B2A700509984 /* DCFrameView.m */,
|
835
|
+
C5BD35861728B2A700509984 /* DCIntrospect.h */,
|
836
|
+
C5BD35871728B2A700509984 /* DCIntrospect.m */,
|
837
|
+
C5BD35881728B2A700509984 /* DCIntrospectSettings.h */,
|
838
|
+
C5BD35891728B2A700509984 /* DCStatusBarOverlay.h */,
|
839
|
+
C5BD358A1728B2A700509984 /* DCStatusBarOverlay.m */,
|
840
|
+
);
|
841
|
+
path = DCIntrospect;
|
842
|
+
sourceTree = "<group>";
|
843
|
+
};
|
844
|
+
C5E068A71728E6640056F1DD /* MyLauncher */ = {
|
845
|
+
isa = PBXGroup;
|
846
|
+
children = (
|
847
|
+
C5E068A81728E6640056F1DD /* CustomBadge.h */,
|
848
|
+
C5E068A91728E6640056F1DD /* CustomBadge.m */,
|
849
|
+
C5E068AA1728E6640056F1DD /* MyLauncherItem.h */,
|
850
|
+
C5E068AB1728E6640056F1DD /* MyLauncherItem.m */,
|
851
|
+
C5E068AC1728E6640056F1DD /* MyLauncherPageControl.h */,
|
852
|
+
C5E068AD1728E6640056F1DD /* MyLauncherPageControl.m */,
|
853
|
+
C5E068AE1728E6640056F1DD /* MyLauncherScrollView.h */,
|
854
|
+
C5E068AF1728E6640056F1DD /* MyLauncherScrollView.m */,
|
855
|
+
C5E068B01728E6640056F1DD /* MyLauncherView.h */,
|
856
|
+
C5E068B11728E6640056F1DD /* MyLauncherView.m */,
|
857
|
+
C5E068B21728E6640056F1DD /* MyLauncherViewController.h */,
|
858
|
+
C5E068B31728E6640056F1DD /* MyLauncherViewController.m */,
|
859
|
+
);
|
860
|
+
path = MyLauncher;
|
861
|
+
sourceTree = "<group>";
|
862
|
+
};
|
781
863
|
C5FAFCC8170B0EC300D83034 /* components */ = {
|
782
864
|
isa = PBXGroup;
|
783
865
|
children = (
|
866
|
+
C5E068A71728E6640056F1DD /* MyLauncher */,
|
784
867
|
C54DA67517140C7000457BF3 /* FXLabel */,
|
785
868
|
C5FAFCC9170B0EC300D83034 /* AwesomeMenu */,
|
786
869
|
C5FAFCDD170B0EC300D83034 /* CMPopTipView */,
|
@@ -1043,6 +1126,8 @@
|
|
1043
1126
|
C5FAFD59170B0EC300D83034 /* toolkit */ = {
|
1044
1127
|
isa = PBXGroup;
|
1045
1128
|
children = (
|
1129
|
+
C5FCC46A1728DAA300D5E07F /* AESCrypt-ObjC */,
|
1130
|
+
C5BD35811728B2A700509984 /* DCIntrospect */,
|
1046
1131
|
C5FAFEAC170B1A9700D83034 /* hpple */,
|
1047
1132
|
C5FAFD5A170B0EC300D83034 /* CocoaAsyncSocket */,
|
1048
1133
|
C5FAFD5D170B0EC300D83034 /* CocoaHTTPServer */,
|
@@ -1402,6 +1487,21 @@
|
|
1402
1487
|
path = hpple;
|
1403
1488
|
sourceTree = "<group>";
|
1404
1489
|
};
|
1490
|
+
C5FCC46A1728DAA300D5E07F /* AESCrypt-ObjC */ = {
|
1491
|
+
isa = PBXGroup;
|
1492
|
+
children = (
|
1493
|
+
C5FCC46C1728DAA300D5E07F /* AESCrypt.h */,
|
1494
|
+
C5FCC46D1728DAA300D5E07F /* AESCrypt.m */,
|
1495
|
+
C5FCC46E1728DAA300D5E07F /* NSData+Base64.h */,
|
1496
|
+
C5FCC46F1728DAA300D5E07F /* NSData+Base64.m */,
|
1497
|
+
C5FCC4701728DAA300D5E07F /* NSData+CommonCrypto.h */,
|
1498
|
+
C5FCC4711728DAA300D5E07F /* NSData+CommonCrypto.m */,
|
1499
|
+
C5FCC4721728DAA300D5E07F /* NSString+Base64.h */,
|
1500
|
+
C5FCC4731728DAA300D5E07F /* NSString+Base64.m */,
|
1501
|
+
);
|
1502
|
+
path = "AESCrypt-ObjC";
|
1503
|
+
sourceTree = "<group>";
|
1504
|
+
};
|
1405
1505
|
/* End PBXGroup section */
|
1406
1506
|
|
1407
1507
|
/* Begin PBXNativeTarget section */
|
@@ -1671,6 +1771,20 @@
|
|
1671
1771
|
C54DA6841714126000457BF3 /* AFRESTClient.m in Sources */,
|
1672
1772
|
C54DA6851714126000457BF3 /* NSString+InflectorKit.m in Sources */,
|
1673
1773
|
C54DA6861714126000457BF3 /* TTTStringInflector.m in Sources */,
|
1774
|
+
C5BD358B1728B2A700509984 /* DCCrossHairView.m in Sources */,
|
1775
|
+
C5BD358C1728B2A700509984 /* DCFrameView.m in Sources */,
|
1776
|
+
C5BD358D1728B2A700509984 /* DCIntrospect.m in Sources */,
|
1777
|
+
C5BD358E1728B2A700509984 /* DCStatusBarOverlay.m in Sources */,
|
1778
|
+
C5FCC4751728DAA300D5E07F /* AESCrypt.m in Sources */,
|
1779
|
+
C5FCC4761728DAA300D5E07F /* NSData+Base64.m in Sources */,
|
1780
|
+
C5FCC4771728DAA300D5E07F /* NSData+CommonCrypto.m in Sources */,
|
1781
|
+
C5FCC4781728DAA300D5E07F /* NSString+Base64.m in Sources */,
|
1782
|
+
C5E068B41728E6640056F1DD /* CustomBadge.m in Sources */,
|
1783
|
+
C5E068B51728E6640056F1DD /* MyLauncherItem.m in Sources */,
|
1784
|
+
C5E068B61728E6640056F1DD /* MyLauncherPageControl.m in Sources */,
|
1785
|
+
C5E068B71728E6640056F1DD /* MyLauncherScrollView.m in Sources */,
|
1786
|
+
C5E068B81728E6640056F1DD /* MyLauncherView.m in Sources */,
|
1787
|
+
C5E068B91728E6640056F1DD /* MyLauncherViewController.m in Sources */,
|
1674
1788
|
);
|
1675
1789
|
runOnlyForDeploymentPostprocessing = 0;
|
1676
1790
|
};
|
Binary file
|
@@ -7,6 +7,7 @@
|
|
7
7
|
//
|
8
8
|
|
9
9
|
#import "AppDelegate.h"
|
10
|
+
#import "DCIntrospect.h"
|
10
11
|
|
11
12
|
@implementation AppDelegate
|
12
13
|
|
@@ -23,10 +24,21 @@ static const int ddLogLevel = LOG_LEVEL_VERBOSE;
|
|
23
24
|
|
24
25
|
DDLogVerbose(@"Start App");
|
25
26
|
DLog(@"didFinishLaunching...");
|
27
|
+
|
26
28
|
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
27
|
-
// Override point for customization after application launch.
|
28
29
|
self.window.backgroundColor = [UIColor whiteColor];
|
29
30
|
[self.window makeKeyAndVisible];
|
31
|
+
|
32
|
+
// press space bar to toggle debug state
|
33
|
+
// press '?' to show help
|
34
|
+
// press 'o' to show outline
|
35
|
+
// press 'O' to show background
|
36
|
+
// press 'p' to show view properties
|
37
|
+
|
38
|
+
#if TARGET_IPHONE_SIMULATOR
|
39
|
+
[[DCIntrospect sharedIntrospector] start];
|
40
|
+
#endif
|
41
|
+
|
30
42
|
return YES;
|
31
43
|
}
|
32
44
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
/*
|
2
|
+
CustomBadge.h
|
3
|
+
|
4
|
+
*** Description: ***
|
5
|
+
With this class you can draw a typical iOS badge indicator with a custom text on any view.
|
6
|
+
Please use the allocator customBadgeWithString the create a new badge.
|
7
|
+
In this version you can modfiy the color inside the badge (insetColor),
|
8
|
+
the color of the frame (frameColor), the color of the text and you can
|
9
|
+
tell the class if you want a frame around the badge.
|
10
|
+
|
11
|
+
*** License & Copyright ***
|
12
|
+
Created by Sascha Marc Paulus www.spaulus.com on 04/2011. Version 2.0
|
13
|
+
This tiny class can be used for free in private and commercial applications.
|
14
|
+
Please feel free to modify, extend or distribution this class.
|
15
|
+
If you modify it: Please send me your modified version of the class.
|
16
|
+
A commercial distribution of this class is not allowed.
|
17
|
+
|
18
|
+
If you have any questions please feel free to contact me (open@spaulus.com).
|
19
|
+
*/
|
20
|
+
|
21
|
+
|
22
|
+
#import <UIKit/UIKit.h>
|
23
|
+
#import <QuartzCore/QuartzCore.h>
|
24
|
+
|
25
|
+
@interface CustomBadge : UIView {
|
26
|
+
|
27
|
+
NSString *badgeText;
|
28
|
+
UIColor *badgeTextColor;
|
29
|
+
UIColor *badgeInsetColor;
|
30
|
+
UIColor *badgeFrameColor;
|
31
|
+
BOOL badgeFrame;
|
32
|
+
BOOL badgeShining;
|
33
|
+
CGFloat badgeCornerRoundness;
|
34
|
+
CGFloat badgeScaleFactor;
|
35
|
+
}
|
36
|
+
|
37
|
+
@property(nonatomic,strong) NSString *badgeText;
|
38
|
+
@property(nonatomic,strong) UIColor *badgeTextColor;
|
39
|
+
@property(nonatomic,strong) UIColor *badgeInsetColor;
|
40
|
+
@property(nonatomic,strong) UIColor *badgeFrameColor;
|
41
|
+
|
42
|
+
@property(nonatomic,readwrite) BOOL badgeFrame;
|
43
|
+
@property(nonatomic,readwrite) BOOL badgeShining;
|
44
|
+
|
45
|
+
@property(nonatomic,readwrite) CGFloat badgeCornerRoundness;
|
46
|
+
@property(nonatomic,readwrite) CGFloat badgeScaleFactor;
|
47
|
+
|
48
|
+
+ (CustomBadge*) customBadgeWithString:(NSString *)badgeString;
|
49
|
+
+ (CustomBadge*) customBadgeWithString:(NSString *)badgeString withStringColor:(UIColor*)stringColor withInsetColor:(UIColor*)insetColor withBadgeFrame:(BOOL)badgeFrameYesNo withBadgeFrameColor:(UIColor*)frameColor withScale:(CGFloat)scale withShining:(BOOL)shining;
|
50
|
+
- (void) autoBadgeSizeWithString:(NSString *)badgeString;
|
51
|
+
|
52
|
+
@end
|
@@ -0,0 +1,241 @@
|
|
1
|
+
/*
|
2
|
+
CustomBadge.m
|
3
|
+
|
4
|
+
*** Description: ***
|
5
|
+
With this class you can draw a typical iOS badge indicator with a custom text on any view.
|
6
|
+
Please use the allocator customBadgeWithString the create a new badge.
|
7
|
+
In this version you can modfiy the color inside the badge (insetColor),
|
8
|
+
the color of the frame (frameColor), the color of the text and you can
|
9
|
+
tell the class if you want a frame around the badge.
|
10
|
+
|
11
|
+
*** License & Copyright ***
|
12
|
+
Created by Sascha Marc Paulus www.spaulus.com on 04/2011. Version 2.0
|
13
|
+
This tiny class can be used for free in private and commercial applications.
|
14
|
+
Please feel free to modify, extend or distribution this class.
|
15
|
+
If you modify it: Please send me your modified version of the class.
|
16
|
+
A commercial distribution of this class is not allowed.
|
17
|
+
|
18
|
+
If you have any questions please feel free to contact me (open@spaulus.com).
|
19
|
+
*/
|
20
|
+
|
21
|
+
|
22
|
+
#import "CustomBadge.h"
|
23
|
+
|
24
|
+
@interface CustomBadge()
|
25
|
+
- (void) drawRoundedRectWithContext:(CGContextRef)context withRect:(CGRect)rect;
|
26
|
+
- (void) drawFrameWithContext:(CGContextRef)context withRect:(CGRect)rect;
|
27
|
+
@end
|
28
|
+
|
29
|
+
@implementation CustomBadge
|
30
|
+
|
31
|
+
@synthesize badgeText;
|
32
|
+
@synthesize badgeTextColor;
|
33
|
+
@synthesize badgeInsetColor;
|
34
|
+
@synthesize badgeFrameColor;
|
35
|
+
@synthesize badgeFrame;
|
36
|
+
@synthesize badgeCornerRoundness;
|
37
|
+
@synthesize badgeScaleFactor;
|
38
|
+
@synthesize badgeShining;
|
39
|
+
|
40
|
+
// I recommend to use the allocator customBadgeWithString
|
41
|
+
- (id) initWithString:(NSString *)badgeString withScale:(CGFloat)scale withShining:(BOOL)shining
|
42
|
+
{
|
43
|
+
self = [super initWithFrame:CGRectMake(0, 0, 25, 25)];
|
44
|
+
if(self!=nil) {
|
45
|
+
self.contentScaleFactor = [[UIScreen mainScreen] scale];
|
46
|
+
self.backgroundColor = [UIColor clearColor];
|
47
|
+
self.badgeText = badgeString;
|
48
|
+
self.badgeTextColor = [UIColor whiteColor];
|
49
|
+
self.badgeFrame = YES;
|
50
|
+
self.badgeFrameColor = [UIColor whiteColor];
|
51
|
+
self.badgeInsetColor = [UIColor redColor];
|
52
|
+
self.badgeCornerRoundness = 0.4;
|
53
|
+
self.badgeScaleFactor = scale;
|
54
|
+
self.badgeShining = shining;
|
55
|
+
[self autoBadgeSizeWithString:badgeString];
|
56
|
+
}
|
57
|
+
return self;
|
58
|
+
}
|
59
|
+
|
60
|
+
// I recommend to use the allocator customBadgeWithString
|
61
|
+
- (id) initWithString:(NSString *)badgeString withStringColor:(UIColor*)stringColor withInsetColor:(UIColor*)insetColor withBadgeFrame:(BOOL)badgeFrameYesNo withBadgeFrameColor:(UIColor*)frameColor withScale:(CGFloat)scale withShining:(BOOL)shining
|
62
|
+
{
|
63
|
+
self = [super initWithFrame:CGRectMake(0, 0, 25, 25)];
|
64
|
+
if(self!=nil) {
|
65
|
+
self.contentScaleFactor = [[UIScreen mainScreen] scale];
|
66
|
+
self.backgroundColor = [UIColor clearColor];
|
67
|
+
self.badgeText = badgeString;
|
68
|
+
self.badgeTextColor = stringColor;
|
69
|
+
self.badgeFrame = badgeFrameYesNo;
|
70
|
+
self.badgeFrameColor = frameColor;
|
71
|
+
self.badgeInsetColor = insetColor;
|
72
|
+
self.badgeCornerRoundness = 0.40;
|
73
|
+
self.badgeScaleFactor = scale;
|
74
|
+
self.badgeShining = shining;
|
75
|
+
[self autoBadgeSizeWithString:badgeString];
|
76
|
+
}
|
77
|
+
return self;
|
78
|
+
}
|
79
|
+
|
80
|
+
|
81
|
+
// Use this method if you want to change the badge text after the first rendering
|
82
|
+
- (void) autoBadgeSizeWithString:(NSString *)badgeString
|
83
|
+
{
|
84
|
+
CGSize retValue;
|
85
|
+
CGFloat rectWidth, rectHeight;
|
86
|
+
CGSize stringSize = [badgeString sizeWithFont:[UIFont boldSystemFontOfSize:12]];
|
87
|
+
CGFloat flexSpace;
|
88
|
+
if ([badgeString length]>=2) {
|
89
|
+
flexSpace = [badgeString length];
|
90
|
+
rectWidth = 25 + (stringSize.width + flexSpace); rectHeight = 25;
|
91
|
+
retValue = CGSizeMake(rectWidth*badgeScaleFactor, rectHeight*badgeScaleFactor);
|
92
|
+
} else {
|
93
|
+
retValue = CGSizeMake(25*badgeScaleFactor, 25*badgeScaleFactor);
|
94
|
+
}
|
95
|
+
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, retValue.width, retValue.height);
|
96
|
+
self.badgeText = badgeString;
|
97
|
+
[self setNeedsDisplay];
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
// Creates a Badge with a given Text
|
102
|
+
+ (CustomBadge*) customBadgeWithString:(NSString *)badgeString
|
103
|
+
{
|
104
|
+
return [[self alloc] initWithString:badgeString withScale:1.0 withShining:YES];
|
105
|
+
}
|
106
|
+
|
107
|
+
|
108
|
+
// Creates a Badge with a given Text, Text Color, Inset Color, Frame (YES/NO) and Frame Color
|
109
|
+
+ (CustomBadge*) customBadgeWithString:(NSString *)badgeString withStringColor:(UIColor*)stringColor withInsetColor:(UIColor*)insetColor withBadgeFrame:(BOOL)badgeFrameYesNo withBadgeFrameColor:(UIColor*)frameColor withScale:(CGFloat)scale withShining:(BOOL)shining
|
110
|
+
{
|
111
|
+
return [[self alloc] initWithString:badgeString withStringColor:stringColor withInsetColor:insetColor withBadgeFrame:badgeFrameYesNo withBadgeFrameColor:frameColor withScale:scale withShining:shining];
|
112
|
+
}
|
113
|
+
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
|
118
|
+
// Draws the Badge with Quartz
|
119
|
+
-(void) drawRoundedRectWithContext:(CGContextRef)context withRect:(CGRect)rect
|
120
|
+
{
|
121
|
+
CGContextSaveGState(context);
|
122
|
+
|
123
|
+
CGFloat radius = CGRectGetMaxY(rect)*self.badgeCornerRoundness;
|
124
|
+
CGFloat puffer = CGRectGetMaxY(rect)*0.10;
|
125
|
+
CGFloat maxX = CGRectGetMaxX(rect) - puffer;
|
126
|
+
CGFloat maxY = CGRectGetMaxY(rect) - puffer;
|
127
|
+
CGFloat minX = CGRectGetMinX(rect) + puffer;
|
128
|
+
CGFloat minY = CGRectGetMinY(rect) + puffer;
|
129
|
+
|
130
|
+
CGContextBeginPath(context);
|
131
|
+
CGContextSetFillColorWithColor(context, [self.badgeInsetColor CGColor]);
|
132
|
+
CGContextAddArc(context, maxX-radius, minY+radius, radius, M_PI+(M_PI/2), 0, 0);
|
133
|
+
CGContextAddArc(context, maxX-radius, maxY-radius, radius, 0, M_PI/2, 0);
|
134
|
+
CGContextAddArc(context, minX+radius, maxY-radius, radius, M_PI/2, M_PI, 0);
|
135
|
+
CGContextAddArc(context, minX+radius, minY+radius, radius, M_PI, M_PI+M_PI/2, 0);
|
136
|
+
CGContextSetShadowWithColor(context, CGSizeMake(1.0,1.0), 3, [[UIColor blackColor] CGColor]);
|
137
|
+
CGContextClosePath(context);
|
138
|
+
CGContextFillPath(context);
|
139
|
+
|
140
|
+
CGContextRestoreGState(context);
|
141
|
+
|
142
|
+
}
|
143
|
+
|
144
|
+
// Draws the Badge Shine with Quartz
|
145
|
+
-(void) drawShineWithContext:(CGContextRef)context withRect:(CGRect)rect
|
146
|
+
{
|
147
|
+
CGContextSaveGState(context);
|
148
|
+
|
149
|
+
CGFloat radius = CGRectGetMaxY(rect)*self.badgeCornerRoundness;
|
150
|
+
CGFloat puffer = CGRectGetMaxY(rect)*0.10;
|
151
|
+
CGFloat maxX = CGRectGetMaxX(rect) - puffer;
|
152
|
+
CGFloat maxY = CGRectGetMaxY(rect) - puffer;
|
153
|
+
CGFloat minX = CGRectGetMinX(rect) + puffer;
|
154
|
+
CGFloat minY = CGRectGetMinY(rect) + puffer;
|
155
|
+
CGContextBeginPath(context);
|
156
|
+
CGContextAddArc(context, maxX-radius, minY+radius, radius, M_PI+(M_PI/2), 0, 0);
|
157
|
+
CGContextAddArc(context, maxX-radius, maxY-radius, radius, 0, M_PI/2, 0);
|
158
|
+
CGContextAddArc(context, minX+radius, maxY-radius, radius, M_PI/2, M_PI, 0);
|
159
|
+
CGContextAddArc(context, minX+radius, minY+radius, radius, M_PI, M_PI+M_PI/2, 0);
|
160
|
+
CGContextClip(context);
|
161
|
+
//CGContextClosePath(context);
|
162
|
+
|
163
|
+
|
164
|
+
size_t num_locations = 2;
|
165
|
+
CGFloat locations[2] = { 0.0, 0.4 };
|
166
|
+
CGFloat components[8] = { 0.92, 0.92, 0.92, 1.0, 0.82, 0.82, 0.82, 0.4 };
|
167
|
+
|
168
|
+
CGColorSpaceRef cspace;
|
169
|
+
CGGradientRef gradient;
|
170
|
+
cspace = CGColorSpaceCreateDeviceRGB();
|
171
|
+
gradient = CGGradientCreateWithColorComponents (cspace, components, locations, num_locations);
|
172
|
+
|
173
|
+
CGPoint sPoint, ePoint;
|
174
|
+
sPoint.x = 0;
|
175
|
+
sPoint.y = 0;
|
176
|
+
ePoint.x = 0;
|
177
|
+
ePoint.y = maxY;
|
178
|
+
CGContextDrawLinearGradient (context, gradient, sPoint, ePoint, 0);
|
179
|
+
|
180
|
+
CGColorSpaceRelease(cspace);
|
181
|
+
CGGradientRelease(gradient);
|
182
|
+
|
183
|
+
CGContextRestoreGState(context);
|
184
|
+
}
|
185
|
+
|
186
|
+
|
187
|
+
// Draws the Badge Frame with Quartz
|
188
|
+
-(void) drawFrameWithContext:(CGContextRef)context withRect:(CGRect)rect
|
189
|
+
{
|
190
|
+
CGFloat radius = CGRectGetMaxY(rect)*self.badgeCornerRoundness;
|
191
|
+
CGFloat puffer = CGRectGetMaxY(rect)*0.10;
|
192
|
+
|
193
|
+
CGFloat maxX = CGRectGetMaxX(rect) - puffer;
|
194
|
+
CGFloat maxY = CGRectGetMaxY(rect) - puffer;
|
195
|
+
CGFloat minX = CGRectGetMinX(rect) + puffer;
|
196
|
+
CGFloat minY = CGRectGetMinY(rect) + puffer;
|
197
|
+
|
198
|
+
|
199
|
+
CGContextBeginPath(context);
|
200
|
+
CGFloat lineSize = 2;
|
201
|
+
if(self.badgeScaleFactor>1) {
|
202
|
+
lineSize += self.badgeScaleFactor*0.25;
|
203
|
+
}
|
204
|
+
CGContextSetLineWidth(context, lineSize);
|
205
|
+
CGContextSetStrokeColorWithColor(context, [self.badgeFrameColor CGColor]);
|
206
|
+
CGContextAddArc(context, maxX-radius, minY+radius, radius, M_PI+(M_PI/2), 0, 0);
|
207
|
+
CGContextAddArc(context, maxX-radius, maxY-radius, radius, 0, M_PI/2, 0);
|
208
|
+
CGContextAddArc(context, minX+radius, maxY-radius, radius, M_PI/2, M_PI, 0);
|
209
|
+
CGContextAddArc(context, minX+radius, minY+radius, radius, M_PI, M_PI+M_PI/2, 0);
|
210
|
+
CGContextClosePath(context);
|
211
|
+
CGContextStrokePath(context);
|
212
|
+
}
|
213
|
+
|
214
|
+
|
215
|
+
- (void)drawRect:(CGRect)rect {
|
216
|
+
|
217
|
+
CGContextRef context = UIGraphicsGetCurrentContext();
|
218
|
+
[self drawRoundedRectWithContext:context withRect:rect];
|
219
|
+
|
220
|
+
if(self.badgeShining) {
|
221
|
+
[self drawShineWithContext:context withRect:rect];
|
222
|
+
}
|
223
|
+
|
224
|
+
if (self.badgeFrame) {
|
225
|
+
[self drawFrameWithContext:context withRect:rect];
|
226
|
+
}
|
227
|
+
|
228
|
+
if ([self.badgeText length]>0) {
|
229
|
+
[badgeTextColor set];
|
230
|
+
CGFloat sizeOfFont = 13.5*badgeScaleFactor;
|
231
|
+
if ([self.badgeText length]<2) {
|
232
|
+
sizeOfFont += sizeOfFont*0.20;
|
233
|
+
}
|
234
|
+
UIFont *textFont = [UIFont boldSystemFontOfSize:sizeOfFont];
|
235
|
+
CGSize textSize = [self.badgeText sizeWithFont:textFont];
|
236
|
+
[self.badgeText drawAtPoint:CGPointMake((rect.size.width/2-textSize.width/2), (rect.size.height/2-textSize.height/2)) withFont:textFont];
|
237
|
+
}
|
238
|
+
|
239
|
+
}
|
240
|
+
|
241
|
+
@end
|