From da6e84f39120e8822053c2412b391117eed52bd1 Mon Sep 17 00:00:00 2001 From: Ahmed Hamdy Date: Wed, 9 Jul 2014 22:41:53 +0200 Subject: [PATCH] Support uploadMulti Images add Custom picker and Upload multi Images at Once --- fileUploader.xcodeproj/project.pbxproj | 95 ++++ .../xcshareddata/fileUploader.xccheckout | 41 ++ .../UserInterfaceState.xcuserstate | Bin 0 -> 15521 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 39 ++ .../xcschemes/fileUploader.xcscheme | 86 ++++ .../xcschemes/xcschememanagement.plist | 22 + .../ELCImagePicker/ELCAlbumPickerController.h | 22 + .../ELCImagePicker/ELCAlbumPickerController.m | 162 +++++++ .../Classes/ELCImagePicker/ELCAsset.h | 29 ++ .../Classes/ELCImagePicker/ELCAsset.m | 49 ++ .../Classes/ELCImagePicker/ELCAssetCell.h | 15 + .../Classes/ELCImagePicker/ELCAssetCell.m | 117 +++++ .../ELCAssetPickerFilterDelegate.h | 12 + .../ELCAssetSelectionDelegate.h | 18 + .../ELCImagePicker/ELCAssetTablePicker.h | 31 ++ .../ELCImagePicker/ELCAssetTablePicker.m | 217 +++++++++ .../ELCImagePicker/ELCImagePickerController.h | 48 ++ .../ELCImagePicker/ELCImagePickerController.m | 122 +++++ .../Resources/ELCAlbumPickerController.xib | 374 +++++++++++++++ .../Resources/ELCAssetPicker.xib | 435 ++++++++++++++++++ .../Resources/ELCAssetTablePicker.xib | 422 +++++++++++++++++ .../ELCImagePicker/Resources/Overlay.png | Bin 0 -> 2719 bytes .../ELCImagePicker/Resources/Overlay@2x.png | Bin 0 -> 6568 bytes .../Classes/ELCImagePickerDemoAppDelegate.h | 19 + .../Classes/ELCImagePickerDemoAppDelegate.m | 84 ++++ .../ELCImagePickerDemoViewController.h | 25 + .../ELCImagePickerDemoViewController.m | 128 ++++++ fileUploader/fileUploadDemoViewController.h | 5 +- fileUploader/fileUploadDemoViewController.m | 59 ++- 29 files changed, 2667 insertions(+), 9 deletions(-) create mode 100644 fileUploader.xcodeproj/project.xcworkspace/xcshareddata/fileUploader.xccheckout create mode 100644 fileUploader.xcodeproj/project.xcworkspace/xcuserdata/binaryboy.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/fileUploader.xcscheme create mode 100644 fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.h create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.m create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAsset.h create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAsset.m create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAssetCell.h create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAssetCell.m create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAssetPickerFilterDelegate.h create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAssetSelectionDelegate.h create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.h create mode 100755 fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.m create mode 100755 fileUploader/Classes/ELCImagePicker/ELCImagePickerController.h create mode 100755 fileUploader/Classes/ELCImagePicker/ELCImagePickerController.m create mode 100755 fileUploader/Classes/ELCImagePicker/Resources/ELCAlbumPickerController.xib create mode 100755 fileUploader/Classes/ELCImagePicker/Resources/ELCAssetPicker.xib create mode 100755 fileUploader/Classes/ELCImagePicker/Resources/ELCAssetTablePicker.xib create mode 100755 fileUploader/Classes/ELCImagePicker/Resources/Overlay.png create mode 100755 fileUploader/Classes/ELCImagePicker/Resources/Overlay@2x.png create mode 100755 fileUploader/Classes/ELCImagePickerDemoAppDelegate.h create mode 100755 fileUploader/Classes/ELCImagePickerDemoAppDelegate.m create mode 100755 fileUploader/Classes/ELCImagePickerDemoViewController.h create mode 100755 fileUploader/Classes/ELCImagePickerDemoViewController.m diff --git a/fileUploader.xcodeproj/project.pbxproj b/fileUploader.xcodeproj/project.pbxproj index cd28549..0c92ef6 100644 --- a/fileUploader.xcodeproj/project.pbxproj +++ b/fileUploader.xcodeproj/project.pbxproj @@ -7,6 +7,19 @@ objects = { /* Begin PBXBuildFile section */ + 3D4679C9196DDABC00B142B5 /* ELCAlbumPickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679B4196DDABC00B142B5 /* ELCAlbumPickerController.m */; }; + 3D4679CA196DDABC00B142B5 /* ELCAsset.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679B6196DDABC00B142B5 /* ELCAsset.m */; }; + 3D4679CB196DDABC00B142B5 /* ELCAssetCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679B8196DDABC00B142B5 /* ELCAssetCell.m */; }; + 3D4679CC196DDABC00B142B5 /* ELCAssetTablePicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679BC196DDABC00B142B5 /* ELCAssetTablePicker.m */; }; + 3D4679CD196DDABC00B142B5 /* ELCImagePickerController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679BE196DDABC00B142B5 /* ELCImagePickerController.m */; }; + 3D4679CE196DDABC00B142B5 /* ELCAlbumPickerController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C0196DDABC00B142B5 /* ELCAlbumPickerController.xib */; }; + 3D4679CF196DDABC00B142B5 /* ELCAssetPicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C1196DDABC00B142B5 /* ELCAssetPicker.xib */; }; + 3D4679D0196DDABC00B142B5 /* ELCAssetTablePicker.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C2196DDABC00B142B5 /* ELCAssetTablePicker.xib */; }; + 3D4679D1196DDABC00B142B5 /* Overlay.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C3196DDABC00B142B5 /* Overlay.png */; }; + 3D4679D2196DDABC00B142B5 /* Overlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3D4679C4196DDABC00B142B5 /* Overlay@2x.png */; }; + 3D4679D3196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679C6196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m */; }; + 3D4679D4196DDABC00B142B5 /* ELCImagePickerDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D4679C8196DDABC00B142B5 /* ELCImagePickerDemoViewController.m */; }; + 3D4679D6196DDD7000B142B5 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D4679D5196DDD7000B142B5 /* AssetsLibrary.framework */; }; 6D2FB3AB155819D9006FB7AD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D2FB3AA155819D9006FB7AD /* UIKit.framework */; }; 6D2FB3AD155819D9006FB7AD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D2FB3AC155819D9006FB7AD /* Foundation.framework */; }; 6D2FB3AF155819D9006FB7AD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D2FB3AE155819D9006FB7AD /* CoreGraphics.framework */; }; @@ -31,6 +44,28 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 3D4679B3196DDABC00B142B5 /* ELCAlbumPickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAlbumPickerController.h; sourceTree = ""; }; + 3D4679B4196DDABC00B142B5 /* ELCAlbumPickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAlbumPickerController.m; sourceTree = ""; }; + 3D4679B5196DDABC00B142B5 /* ELCAsset.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAsset.h; sourceTree = ""; }; + 3D4679B6196DDABC00B142B5 /* ELCAsset.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAsset.m; sourceTree = ""; }; + 3D4679B7196DDABC00B142B5 /* ELCAssetCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetCell.h; sourceTree = ""; }; + 3D4679B8196DDABC00B142B5 /* ELCAssetCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAssetCell.m; sourceTree = ""; }; + 3D4679B9196DDABC00B142B5 /* ELCAssetPickerFilterDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetPickerFilterDelegate.h; sourceTree = ""; }; + 3D4679BA196DDABC00B142B5 /* ELCAssetSelectionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetSelectionDelegate.h; sourceTree = ""; }; + 3D4679BB196DDABC00B142B5 /* ELCAssetTablePicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCAssetTablePicker.h; sourceTree = ""; }; + 3D4679BC196DDABC00B142B5 /* ELCAssetTablePicker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCAssetTablePicker.m; sourceTree = ""; }; + 3D4679BD196DDABC00B142B5 /* ELCImagePickerController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCImagePickerController.h; sourceTree = ""; }; + 3D4679BE196DDABC00B142B5 /* ELCImagePickerController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCImagePickerController.m; sourceTree = ""; }; + 3D4679C0196DDABC00B142B5 /* ELCAlbumPickerController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCAlbumPickerController.xib; sourceTree = ""; }; + 3D4679C1196DDABC00B142B5 /* ELCAssetPicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCAssetPicker.xib; sourceTree = ""; }; + 3D4679C2196DDABC00B142B5 /* ELCAssetTablePicker.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELCAssetTablePicker.xib; sourceTree = ""; }; + 3D4679C3196DDABC00B142B5 /* Overlay.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Overlay.png; sourceTree = ""; }; + 3D4679C4196DDABC00B142B5 /* Overlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Overlay@2x.png"; sourceTree = ""; }; + 3D4679C5196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCImagePickerDemoAppDelegate.h; sourceTree = ""; }; + 3D4679C6196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCImagePickerDemoAppDelegate.m; sourceTree = ""; }; + 3D4679C7196DDABC00B142B5 /* ELCImagePickerDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCImagePickerDemoViewController.h; sourceTree = ""; }; + 3D4679C8196DDABC00B142B5 /* ELCImagePickerDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCImagePickerDemoViewController.m; sourceTree = ""; }; + 3D4679D5196DDD7000B142B5 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = System/Library/Frameworks/AssetsLibrary.framework; sourceTree = SDKROOT; }; 6D2FB3A6155819D9006FB7AD /* fileUploader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = fileUploader.app; sourceTree = BUILT_PRODUCTS_DIR; }; 6D2FB3AA155819D9006FB7AD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 6D2FB3AC155819D9006FB7AD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -74,6 +109,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 3D4679D6196DDD7000B142B5 /* AssetsLibrary.framework in Frameworks */, 6D2FB3EE15581B2C006FB7AD /* SystemConfiguration.framework in Frameworks */, 6D2FB3EC15581B0B006FB7AD /* CFNetwork.framework in Frameworks */, 6D2FB3EA15581AF0006FB7AD /* Security.framework in Frameworks */, @@ -86,6 +122,51 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 3D4679B1196DDABC00B142B5 /* CustomPickerClasses */ = { + isa = PBXGroup; + children = ( + 3D4679B2196DDABC00B142B5 /* ELCImagePicker */, + 3D4679C5196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.h */, + 3D4679C6196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m */, + 3D4679C7196DDABC00B142B5 /* ELCImagePickerDemoViewController.h */, + 3D4679C8196DDABC00B142B5 /* ELCImagePickerDemoViewController.m */, + ); + name = CustomPickerClasses; + path = Classes; + sourceTree = ""; + }; + 3D4679B2196DDABC00B142B5 /* ELCImagePicker */ = { + isa = PBXGroup; + children = ( + 3D4679B3196DDABC00B142B5 /* ELCAlbumPickerController.h */, + 3D4679B4196DDABC00B142B5 /* ELCAlbumPickerController.m */, + 3D4679B5196DDABC00B142B5 /* ELCAsset.h */, + 3D4679B6196DDABC00B142B5 /* ELCAsset.m */, + 3D4679B7196DDABC00B142B5 /* ELCAssetCell.h */, + 3D4679B8196DDABC00B142B5 /* ELCAssetCell.m */, + 3D4679B9196DDABC00B142B5 /* ELCAssetPickerFilterDelegate.h */, + 3D4679BA196DDABC00B142B5 /* ELCAssetSelectionDelegate.h */, + 3D4679BB196DDABC00B142B5 /* ELCAssetTablePicker.h */, + 3D4679BC196DDABC00B142B5 /* ELCAssetTablePicker.m */, + 3D4679BD196DDABC00B142B5 /* ELCImagePickerController.h */, + 3D4679BE196DDABC00B142B5 /* ELCImagePickerController.m */, + 3D4679BF196DDABC00B142B5 /* Resources */, + ); + path = ELCImagePicker; + sourceTree = ""; + }; + 3D4679BF196DDABC00B142B5 /* Resources */ = { + isa = PBXGroup; + children = ( + 3D4679C0196DDABC00B142B5 /* ELCAlbumPickerController.xib */, + 3D4679C1196DDABC00B142B5 /* ELCAssetPicker.xib */, + 3D4679C2196DDABC00B142B5 /* ELCAssetTablePicker.xib */, + 3D4679C3196DDABC00B142B5 /* Overlay.png */, + 3D4679C4196DDABC00B142B5 /* Overlay@2x.png */, + ); + path = Resources; + sourceTree = ""; + }; 6D2FB39B155819D9006FB7AD = { isa = PBXGroup; children = ( @@ -111,6 +192,7 @@ 6D2FB3A9155819D9006FB7AD /* Frameworks */ = { isa = PBXGroup; children = ( + 3D4679D5196DDD7000B142B5 /* AssetsLibrary.framework */, 6D2FB3AA155819D9006FB7AD /* UIKit.framework */, 6D2FB3AC155819D9006FB7AD /* Foundation.framework */, 6D2FB3AE155819D9006FB7AD /* CoreGraphics.framework */, @@ -128,6 +210,7 @@ 6D2FB40E15582939006FB7AD /* fileUploadEngine.h */, 6D2FB40F15582939006FB7AD /* fileUploadEngine.m */, 6D2FB3C0155819D9006FB7AD /* fileUploadDemoViewController.m */, + 3D4679B1196DDABC00B142B5 /* CustomPickerClasses */, 6D2FB3B1155819D9006FB7AD /* Supporting Files */, ); path = fileUploader; @@ -236,9 +319,14 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 3D4679D0196DDABC00B142B5 /* ELCAssetTablePicker.xib in Resources */, + 3D4679CE196DDABC00B142B5 /* ELCAlbumPickerController.xib in Resources */, + 3D4679D1196DDABC00B142B5 /* Overlay.png in Resources */, 6D2FB3B5155819D9006FB7AD /* InfoPlist.strings in Resources */, 6D2FB3BE155819D9006FB7AD /* MainStoryboard.storyboard in Resources */, + 3D4679D2196DDABC00B142B5 /* Overlay@2x.png in Resources */, 6DAF3F5B166BC6F400CE584A /* Default-568h@2x.png in Resources */, + 3D4679CF196DDABC00B142B5 /* ELCAssetPicker.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -250,17 +338,24 @@ buildActionMask = 2147483647; files = ( 6D2FB3B7155819D9006FB7AD /* main.m in Sources */, + 3D4679CA196DDABC00B142B5 /* ELCAsset.m in Sources */, 6D2FB3BB155819D9006FB7AD /* fileUploadDemoAppDelegate.m in Sources */, 6D2FB3C1155819D9006FB7AD /* fileUploadDemoViewController.m in Sources */, 6D2FB41015582939006FB7AD /* fileUploadEngine.m in Sources */, + 3D4679CB196DDABC00B142B5 /* ELCAssetCell.m in Sources */, 6D2FB42B15596952006FB7AD /* NSDate+RFC1123.m in Sources */, + 3D4679D4196DDABC00B142B5 /* ELCImagePickerDemoViewController.m in Sources */, 6D2FB42C15596952006FB7AD /* NSDictionary+RequestEncoding.m in Sources */, 6D2FB42D15596952006FB7AD /* NSString+MKNetworkKitAdditions.m in Sources */, 6D2FB42E15596952006FB7AD /* UIAlertView+MKNetworkKitAdditions.m in Sources */, + 3D4679CC196DDABC00B142B5 /* ELCAssetTablePicker.m in Sources */, 6D2FB42F15596952006FB7AD /* MKNetworkEngine.m in Sources */, + 3D4679D3196DDABC00B142B5 /* ELCImagePickerDemoAppDelegate.m in Sources */, + 3D4679C9196DDABC00B142B5 /* ELCAlbumPickerController.m in Sources */, 6D2FB43015596952006FB7AD /* MKNetworkOperation.m in Sources */, 6D2FB43115596952006FB7AD /* Reachability.m in Sources */, 6DAF3F5F166BC73200CE584A /* NSData+MKBase64.m in Sources */, + 3D4679CD196DDABC00B142B5 /* ELCImagePickerController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/fileUploader.xcodeproj/project.xcworkspace/xcshareddata/fileUploader.xccheckout b/fileUploader.xcodeproj/project.xcworkspace/xcshareddata/fileUploader.xccheckout new file mode 100644 index 0000000..cd31086 --- /dev/null +++ b/fileUploader.xcodeproj/project.xcworkspace/xcshareddata/fileUploader.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + CA0945FB-903C-456F-956C-8783505CCD5C + IDESourceControlProjectName + fileUploader + IDESourceControlProjectOriginsDictionary + + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + https://github.com/dimohamdy/fileUploader.git + + IDESourceControlProjectPath + fileUploader.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + ../.. + + IDESourceControlProjectURL + https://github.com/dimohamdy/fileUploader.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 8C9324D4-37F9-4C67-84FB-0DD295F9516C + IDESourceControlWCCName + fileUploader + + + + diff --git a/fileUploader.xcodeproj/project.xcworkspace/xcuserdata/binaryboy.xcuserdatad/UserInterfaceState.xcuserstate b/fileUploader.xcodeproj/project.xcworkspace/xcuserdata/binaryboy.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..e45e282e98bc5f00b2f1a48f94dc18b79b071f8e GIT binary patch literal 15521 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 literal 0 HcmV?d00001 diff --git a/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..8154775 --- /dev/null +++ b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,39 @@ + + + + + + + + + + + + + diff --git a/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/fileUploader.xcscheme b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/fileUploader.xcscheme new file mode 100644 index 0000000..89a0955 --- /dev/null +++ b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/fileUploader.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/xcschememanagement.plist b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..60465f2 --- /dev/null +++ b/fileUploader.xcodeproj/xcuserdata/binaryboy.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + fileUploader.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 6D2FB3A5155819D9006FB7AD + + primary + + + + + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.h b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.h new file mode 100755 index 0000000..5b864bb --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.h @@ -0,0 +1,22 @@ +// +// AlbumPickerController.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import +#import +#import "ELCAssetSelectionDelegate.h" +#import "ELCAssetPickerFilterDelegate.h" + +@interface ELCAlbumPickerController : UITableViewController + +@property (nonatomic, weak) id parent; +@property (nonatomic, strong) NSMutableArray *assetGroups; + +// optional, can be used to filter the assets displayed +@property (nonatomic, weak) id assetPickerFilterDelegate; + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.m b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.m new file mode 100755 index 0000000..870d05d --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAlbumPickerController.m @@ -0,0 +1,162 @@ +// +// AlbumPickerController.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAlbumPickerController.h" +#import "ELCImagePickerController.h" +#import "ELCAssetTablePicker.h" + +@interface ELCAlbumPickerController () + +@property (nonatomic, strong) ALAssetsLibrary *library; + +@end + +@implementation ELCAlbumPickerController + +//Using auto synthesizers + +#pragma mark - +#pragma mark View lifecycle + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + [self.navigationItem setTitle:@"Loading..."]; + + UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self.parent action:@selector(cancelImagePicker)]; + [self.navigationItem setRightBarButtonItem:cancelButton]; + + NSMutableArray *tempArray = [[NSMutableArray alloc] init]; + self.assetGroups = tempArray; + + ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init]; + self.library = assetLibrary; + + // Load Albums into assetGroups + dispatch_async(dispatch_get_main_queue(), ^ + { + @autoreleasepool { + + // Group enumerator Block + void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) + { + if (group == nil) { + return; + } + + // added fix for camera albums order + NSString *sGroupPropertyName = (NSString *)[group valueForProperty:ALAssetsGroupPropertyName]; + NSUInteger nType = [[group valueForProperty:ALAssetsGroupPropertyType] intValue]; + + if ([[sGroupPropertyName lowercaseString] isEqualToString:@"camera roll"] && nType == ALAssetsGroupSavedPhotos) { + [self.assetGroups insertObject:group atIndex:0]; + } + else { + [self.assetGroups addObject:group]; + } + + // Reload albums + [self performSelectorOnMainThread:@selector(reloadTableView) withObject:nil waitUntilDone:YES]; + }; + + // Group Enumerator Failure Block + void (^assetGroupEnumberatorFailure)(NSError *) = ^(NSError *error) { + + UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Album Error: %@ - %@", [error localizedDescription], [error localizedRecoverySuggestion]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; + [alert show]; + + NSLog(@"A problem occured %@", [error description]); + }; + + // Enumerate Albums + [self.library enumerateGroupsWithTypes:ALAssetsGroupAll + usingBlock:assetGroupEnumerator + failureBlock:assetGroupEnumberatorFailure]; + + } + }); +} + +- (void)reloadTableView +{ + [self.tableView reloadData]; + [self.navigationItem setTitle:@"Select an Album"]; +} + +- (BOOL)shouldSelectAsset:(ELCAsset *)asset previousCount:(NSUInteger)previousCount +{ + return [self.parent shouldSelectAsset:asset previousCount:previousCount]; +} + +- (void)selectedAssets:(NSArray*)assets +{ + [_parent selectedAssets:assets]; +} + +#pragma mark - +#pragma mark Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + // Return the number of rows in the section. + return [self.assetGroups count]; +} + + +// Customize the appearance of table view cells. +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Cell"; + + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + if (cell == nil) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + // Get count + ALAssetsGroup *g = (ALAssetsGroup*)[self.assetGroups objectAtIndex:indexPath.row]; + [g setAssetsFilter:[ALAssetsFilter allPhotos]]; + NSInteger gCount = [g numberOfAssets]; + + cell.textLabel.text = [NSString stringWithFormat:@"%@ (%ld)",[g valueForProperty:ALAssetsGroupPropertyName], (long)gCount]; + [cell.imageView setImage:[UIImage imageWithCGImage:[(ALAssetsGroup*)[self.assetGroups objectAtIndex:indexPath.row] posterImage]]]; + [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; + + return cell; +} + +#pragma mark - +#pragma mark Table view delegate + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath +{ + ELCAssetTablePicker *picker = [[ELCAssetTablePicker alloc] initWithNibName: nil bundle: nil]; + picker.parent = self; + + picker.assetGroup = [self.assetGroups objectAtIndex:indexPath.row]; + [picker.assetGroup setAssetsFilter:[ALAssetsFilter allPhotos]]; + + picker.assetPickerFilterDelegate = self.assetPickerFilterDelegate; + + [self.navigationController pushViewController:picker animated:YES]; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 57; +} + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAsset.h b/fileUploader/Classes/ELCImagePicker/ELCAsset.h new file mode 100755 index 0000000..ebef368 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAsset.h @@ -0,0 +1,29 @@ +// +// Asset.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import +#import + +@class ELCAsset; + +@protocol ELCAssetDelegate + +@optional +- (void)assetSelected:(ELCAsset *)asset; +- (BOOL)shouldSelectAsset:(ELCAsset *)asset; +@end + + +@interface ELCAsset : NSObject + +@property (nonatomic, strong) ALAsset *asset; +@property (nonatomic, weak) id parent; +@property (nonatomic, assign) BOOL selected; + +- (id)initWithAsset:(ALAsset *)asset; + +@end \ No newline at end of file diff --git a/fileUploader/Classes/ELCImagePicker/ELCAsset.m b/fileUploader/Classes/ELCImagePicker/ELCAsset.m new file mode 100755 index 0000000..12413af --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAsset.m @@ -0,0 +1,49 @@ +// +// Asset.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAsset.h" +#import "ELCAssetTablePicker.h" + +@implementation ELCAsset + +//Using auto synthesizers + +- (id)initWithAsset:(ALAsset*)asset +{ + self = [super init]; + if (self) { + self.asset = asset; + _selected = NO; + } + return self; +} + +- (void)toggleSelection +{ + self.selected = !self.selected; +} + +- (void)setSelected:(BOOL)selected +{ + if (selected) { + if ([_parent respondsToSelector:@selector(shouldSelectAsset:)]) { + if (![_parent shouldSelectAsset:self]) { + return; + } + } + } + _selected = selected; + if (selected) { + if (_parent != nil && [_parent respondsToSelector:@selector(assetSelected:)]) { + [_parent assetSelected:self]; + } + } +} + + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetCell.h b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.h new file mode 100755 index 0000000..b907156 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.h @@ -0,0 +1,15 @@ +// +// AssetCell.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import + + +@interface ELCAssetCell : UITableViewCell + +- (void)setAssets:(NSArray *)assets; + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetCell.m b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.m new file mode 100755 index 0000000..2a6706a --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetCell.m @@ -0,0 +1,117 @@ +// +// AssetCell.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAssetCell.h" +#import "ELCAsset.h" + +@interface ELCAssetCell () + +@property (nonatomic, strong) NSArray *rowAssets; +@property (nonatomic, strong) NSMutableArray *imageViewArray; +@property (nonatomic, strong) NSMutableArray *overlayViewArray; + +@end + +@implementation ELCAssetCell + +//Using auto synthesizers + +- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier +{ + self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; + if (self) { + UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(cellTapped:)]; + [self addGestureRecognizer:tapRecognizer]; + + NSMutableArray *mutableArray = [[NSMutableArray alloc] initWithCapacity:4]; + self.imageViewArray = mutableArray; + + NSMutableArray *overlayArray = [[NSMutableArray alloc] initWithCapacity:4]; + self.overlayViewArray = overlayArray; + } + return self; +} + +- (void)setAssets:(NSArray *)assets +{ + self.rowAssets = assets; + for (UIImageView *view in _imageViewArray) { + [view removeFromSuperview]; + } + for (UIImageView *view in _overlayViewArray) { + [view removeFromSuperview]; + } + //set up a pointer here so we don't keep calling [UIImage imageNamed:] if creating overlays + UIImage *overlayImage = nil; + for (int i = 0; i < [_rowAssets count]; ++i) { + + ELCAsset *asset = [_rowAssets objectAtIndex:i]; + + if (i < [_imageViewArray count]) { + UIImageView *imageView = [_imageViewArray objectAtIndex:i]; + imageView.image = [UIImage imageWithCGImage:asset.asset.thumbnail]; + } else { + UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithCGImage:asset.asset.thumbnail]]; + [_imageViewArray addObject:imageView]; + } + + if (i < [_overlayViewArray count]) { + UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; + overlayView.hidden = asset.selected ? NO : YES; + } else { + if (overlayImage == nil) { + overlayImage = [UIImage imageNamed:@"Overlay.png"]; + } + UIImageView *overlayView = [[UIImageView alloc] initWithImage:overlayImage]; + [_overlayViewArray addObject:overlayView]; + overlayView.hidden = asset.selected ? NO : YES; + } + } +} + +- (void)cellTapped:(UITapGestureRecognizer *)tapRecognizer +{ + CGPoint point = [tapRecognizer locationInView:self]; + CGFloat totalWidth = self.rowAssets.count * 75 + (self.rowAssets.count - 1) * 4; + CGFloat startX = (self.bounds.size.width - totalWidth) / 2; + + CGRect frame = CGRectMake(startX, 2, 75, 75); + + for (int i = 0; i < [_rowAssets count]; ++i) { + if (CGRectContainsPoint(frame, point)) { + ELCAsset *asset = [_rowAssets objectAtIndex:i]; + asset.selected = !asset.selected; + UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; + overlayView.hidden = !asset.selected; + break; + } + frame.origin.x = frame.origin.x + frame.size.width + 4; + } +} + +- (void)layoutSubviews +{ + CGFloat totalWidth = self.rowAssets.count * 75 + (self.rowAssets.count - 1) * 4; + CGFloat startX = (self.bounds.size.width - totalWidth) / 2; + + CGRect frame = CGRectMake(startX, 2, 75, 75); + + for (int i = 0; i < [_rowAssets count]; ++i) { + UIImageView *imageView = [_imageViewArray objectAtIndex:i]; + [imageView setFrame:frame]; + [self addSubview:imageView]; + + UIImageView *overlayView = [_overlayViewArray objectAtIndex:i]; + [overlayView setFrame:frame]; + [self addSubview:overlayView]; + + frame.origin.x = frame.origin.x + frame.size.width + 4; + } +} + + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetPickerFilterDelegate.h b/fileUploader/Classes/ELCImagePicker/ELCAssetPickerFilterDelegate.h new file mode 100755 index 0000000..478c256 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetPickerFilterDelegate.h @@ -0,0 +1,12 @@ +// +// ELCAssetPickerFilterDelegate.h + +@class ELCAsset; +@class ELCAssetTablePicker; + +@protocol ELCAssetPickerFilterDelegate + +// respond YES/NO to filter out (not show the asset) +-(BOOL)assetTablePicker:(ELCAssetTablePicker *)picker isAssetFilteredOut:(ELCAsset *)elcAsset; + +@end \ No newline at end of file diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetSelectionDelegate.h b/fileUploader/Classes/ELCImagePicker/ELCAssetSelectionDelegate.h new file mode 100755 index 0000000..47d85d7 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetSelectionDelegate.h @@ -0,0 +1,18 @@ +// +// ELCAssetSelectionDelegate.h +// ELCImagePickerDemo +// +// Created by JN on 9/6/12. +// Copyright (c) 2012 ELC Technologies. All rights reserved. +// + +#import + +@class ELCAsset; + +@protocol ELCAssetSelectionDelegate + +- (void)selectedAssets:(NSArray *)assets; +- (BOOL)shouldSelectAsset:(ELCAsset *)asset previousCount:(NSUInteger)previousCount; + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.h b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.h new file mode 100755 index 0000000..8148ef6 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.h @@ -0,0 +1,31 @@ +// +// ELCAssetTablePicker.h +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import +#import +#import "ELCAsset.h" +#import "ELCAssetSelectionDelegate.h" +#import "ELCAssetPickerFilterDelegate.h" + +@interface ELCAssetTablePicker : UITableViewController + +@property (nonatomic, weak) id parent; +@property (nonatomic, strong) ALAssetsGroup *assetGroup; +@property (nonatomic, strong) NSMutableArray *elcAssets; +@property (nonatomic, strong) IBOutlet UILabel *selectedAssetsLabel; +@property (nonatomic, assign) BOOL singleSelection; +@property (nonatomic, assign) BOOL immediateReturn; + +// optional, can be used to filter the assets displayed +@property(nonatomic, weak) id assetPickerFilterDelegate; + +- (int)totalSelectedAssets; +- (void)preparePhotos; + +- (void)doneAction:(id)sender; + +@end \ No newline at end of file diff --git a/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.m b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.m new file mode 100755 index 0000000..f7a5a5a --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCAssetTablePicker.m @@ -0,0 +1,217 @@ +// +// ELCAssetTablePicker.m +// +// Created by ELC on 2/15/11. +// Copyright 2011 ELC Technologies. All rights reserved. +// + +#import "ELCAssetTablePicker.h" +#import "ELCAssetCell.h" +#import "ELCAsset.h" +#import "ELCAlbumPickerController.h" + +@interface ELCAssetTablePicker () + +@property (nonatomic, assign) int columns; + +@end + +@implementation ELCAssetTablePicker + +//Using auto synthesizers + +- (id)init +{ + self = [super init]; + if (self) { + //Sets a reasonable default bigger then 0 for columns + //So that we don't have a divide by 0 scenario + self.columns = 4; + } + return self; +} + +- (void)viewDidLoad +{ + [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; + [self.tableView setAllowsSelection:NO]; + + NSMutableArray *tempArray = [[NSMutableArray alloc] init]; + self.elcAssets = tempArray; + + if (self.immediateReturn) { + + } else { + UIBarButtonItem *doneButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)]; + [self.navigationItem setRightBarButtonItem:doneButtonItem]; + [self.navigationItem setTitle:@"Loading..."]; + } + + [self performSelectorInBackground:@selector(preparePhotos) withObject:nil]; +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + self.columns = self.view.bounds.size.width / 80; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation +{ + return YES; +} + +- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation +{ + [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; + self.columns = self.view.bounds.size.width / 80; + [self.tableView reloadData]; +} + +- (void)preparePhotos +{ + @autoreleasepool { + + [self.assetGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { + + if (result == nil) { + return; + } + + ELCAsset *elcAsset = [[ELCAsset alloc] initWithAsset:result]; + [elcAsset setParent:self]; + + BOOL isAssetFiltered = NO; + if (self.assetPickerFilterDelegate && + [self.assetPickerFilterDelegate respondsToSelector:@selector(assetTablePicker:isAssetFilteredOut:)]) + { + isAssetFiltered = [self.assetPickerFilterDelegate assetTablePicker:self isAssetFilteredOut:(ELCAsset*)elcAsset]; + } + + if (!isAssetFiltered) { + [self.elcAssets addObject:elcAsset]; + } + + }]; + + dispatch_sync(dispatch_get_main_queue(), ^{ + [self.tableView reloadData]; + // scroll to bottom + long section = [self numberOfSectionsInTableView:self.tableView] - 1; + long row = [self tableView:self.tableView numberOfRowsInSection:section] - 1; + if (section >= 0 && row >= 0) { + NSIndexPath *ip = [NSIndexPath indexPathForRow:row + inSection:section]; + [self.tableView scrollToRowAtIndexPath:ip + atScrollPosition:UITableViewScrollPositionBottom + animated:NO]; + } + + [self.navigationItem setTitle:self.singleSelection ? @"Pick Photo" : @"Pick Photos"]; + }); + } +} + +- (void)doneAction:(id)sender +{ + NSMutableArray *selectedAssetsImages = [[NSMutableArray alloc] init]; + + for (ELCAsset *elcAsset in self.elcAssets) { + if ([elcAsset selected]) { + [selectedAssetsImages addObject:[elcAsset asset]]; + } + } + [self.parent selectedAssets:selectedAssetsImages]; +} + + +- (BOOL)shouldSelectAsset:(ELCAsset *)asset +{ + NSUInteger selectionCount = 0; + for (ELCAsset *elcAsset in self.elcAssets) { + if (elcAsset.selected) selectionCount++; + } + BOOL shouldSelect = YES; + if ([self.parent respondsToSelector:@selector(shouldSelectAsset:previousCount:)]) { + shouldSelect = [self.parent shouldSelectAsset:asset previousCount:selectionCount]; + } + return shouldSelect; +} + +- (void)assetSelected:(ELCAsset *)asset +{ + if (self.singleSelection) { + + for (ELCAsset *elcAsset in self.elcAssets) { + if (asset != elcAsset) { + elcAsset.selected = NO; + } + } + } + if (self.immediateReturn) { + NSArray *singleAssetArray = @[asset.asset]; + [(NSObject *)self.parent performSelector:@selector(selectedAssets:) withObject:singleAssetArray afterDelay:0]; + } +} + +#pragma mark UITableViewDataSource Delegate Methods + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView +{ + // Return the number of sections. + return 1; +} + + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section +{ + if (self.columns <= 0) { //Sometimes called before we know how many columns we have + self.columns = 4; + } + NSInteger numRows = ceil([self.elcAssets count] / (float)self.columns); + return numRows; +} + +- (NSArray *)assetsForIndexPath:(NSIndexPath *)path +{ + long index = path.row * self.columns; + long length = MIN(self.columns, [self.elcAssets count] - index); + return [self.elcAssets subarrayWithRange:NSMakeRange(index, length)]; +} + +// Customize the appearance of table view cells. +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + static NSString *CellIdentifier = @"Cell"; + + ELCAssetCell *cell = (ELCAssetCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; + + if (cell == nil) { + cell = [[ELCAssetCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; + } + + [cell setAssets:[self assetsForIndexPath:indexPath]]; + + return cell; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath +{ + return 79; +} + +- (int)totalSelectedAssets +{ + int count = 0; + + for (ELCAsset *asset in self.elcAssets) { + if (asset.selected) { + count++; + } + } + + return count; +} + + +@end diff --git a/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.h b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.h new file mode 100755 index 0000000..0d1b54e --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.h @@ -0,0 +1,48 @@ +// +// ELCImagePickerController.h +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import +#import "ELCAssetSelectionDelegate.h" + +@class ELCImagePickerController; +@class ELCAlbumPickerController; + +@protocol ELCImagePickerControllerDelegate + +/** + * Called with the picker the images were selected from, as well as an array of dictionary's + * containing keys for ALAssetPropertyLocation, ALAssetPropertyType, + * UIImagePickerControllerOriginalImage, and UIImagePickerControllerReferenceURL. + * @param picker + * @param info An NSArray containing dictionary's with the key UIImagePickerControllerOriginalImage, which is a rotated, and sized for the screen 'default representation' of the image selected. If you want to get the original image, use the UIImagePickerControllerReferenceURL key. + */ +- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info; + +/** + * Called when image selection was cancelled, by tapping the 'Cancel' BarButtonItem. + */ +- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker; + +@end + +@interface ELCImagePickerController : UINavigationController + +@property (nonatomic, weak) id imagePickerDelegate; +@property (nonatomic, assign) NSInteger maximumImagesCount; + +/** + * YES if the picker should return the original image, + * or NO for an image suitable for displaying full screen on the device. + */ +@property (nonatomic, assign) BOOL returnsOriginalImage; + +- (id)initImagePicker; +- (void)cancelImagePicker; + +@end + diff --git a/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.m b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.m new file mode 100755 index 0000000..1567e90 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/ELCImagePickerController.m @@ -0,0 +1,122 @@ +// +// ELCImagePickerController.m +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import "ELCImagePickerController.h" +#import "ELCAsset.h" +#import "ELCAssetCell.h" +#import "ELCAssetTablePicker.h" +#import "ELCAlbumPickerController.h" +#import + +@implementation ELCImagePickerController + +//Using auto synthesizers + +- (id)initImagePicker +{ + ELCAlbumPickerController *albumPicker = [[ELCAlbumPickerController alloc] initWithStyle:UITableViewStylePlain]; + + self = [super initWithRootViewController:albumPicker]; + if (self) { + self.maximumImagesCount = 4; + [albumPicker setParent:self]; + } + return self; +} + +- (id)initWithRootViewController:(UIViewController *)rootViewController +{ + self = [super initWithRootViewController:rootViewController]; + if (self) { + self.maximumImagesCount = 4; + } + return self; +} + +- (void)cancelImagePicker +{ + if ([_imagePickerDelegate respondsToSelector:@selector(elcImagePickerControllerDidCancel:)]) { + [_imagePickerDelegate performSelector:@selector(elcImagePickerControllerDidCancel:) withObject:self]; + } +} + +- (BOOL)shouldSelectAsset:(ELCAsset *)asset previousCount:(NSUInteger)previousCount +{ + BOOL shouldSelect = previousCount < self.maximumImagesCount; + if (!shouldSelect) { + NSString *title = [NSString stringWithFormat:NSLocalizedString(@"Only %d photos please!", nil), self.maximumImagesCount]; + NSString *message = [NSString stringWithFormat:NSLocalizedString(@"You can only send %d photos at a time.", nil), self.maximumImagesCount]; + [[[UIAlertView alloc] initWithTitle:title + message:message + delegate:nil + cancelButtonTitle:nil + otherButtonTitles:NSLocalizedString(@"Okay", nil), nil] show]; + } + return shouldSelect; +} + +- (void)selectedAssets:(NSArray *)assets +{ + NSMutableArray *returnArray = [[NSMutableArray alloc] init]; + + for(ALAsset *asset in assets) { + id obj = [asset valueForProperty:ALAssetPropertyType]; + if (!obj) { + continue; + } + NSMutableDictionary *workingDictionary = [[NSMutableDictionary alloc] init]; + + CLLocation* wgs84Location = [asset valueForProperty:ALAssetPropertyLocation]; + if (wgs84Location) { + [workingDictionary setObject:wgs84Location forKey:ALAssetPropertyLocation]; + } + + [workingDictionary setObject:obj forKey:UIImagePickerControllerMediaType]; + + //This method returns nil for assets from a shared photo stream that are not yet available locally. If the asset becomes available in the future, an ALAssetsLibraryChangedNotification notification is posted. + ALAssetRepresentation *assetRep = [asset defaultRepresentation]; + + if(assetRep != nil) { + CGImageRef imgRef = nil; + //defaultRepresentation returns image as it appears in photo picker, rotated and sized, + //so use UIImageOrientationUp when creating our image below. + UIImageOrientation orientation = UIImageOrientationUp; + + if (_returnsOriginalImage) { + imgRef = [assetRep fullResolutionImage]; + orientation = [assetRep orientation]; + } else { + imgRef = [assetRep fullScreenImage]; + } + UIImage *img = [UIImage imageWithCGImage:imgRef + scale:1.0f + orientation:orientation]; + [workingDictionary setObject:img forKey:UIImagePickerControllerOriginalImage]; + [workingDictionary setObject:[[asset valueForProperty:ALAssetPropertyURLs] valueForKey:[[[asset valueForProperty:ALAssetPropertyURLs] allKeys] objectAtIndex:0]] forKey:UIImagePickerControllerReferenceURL]; + + [returnArray addObject:workingDictionary]; + } + + } + if (_imagePickerDelegate != nil && [_imagePickerDelegate respondsToSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:)]) { + [_imagePickerDelegate performSelector:@selector(elcImagePickerController:didFinishPickingMediaWithInfo:) withObject:self withObject:returnArray]; + } else { + [self popToRootViewControllerAnimated:NO]; + } +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation +{ + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return YES; + } else { + return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; + } +} + +@end diff --git a/fileUploader/Classes/ELCImagePicker/Resources/ELCAlbumPickerController.xib b/fileUploader/Classes/ELCImagePicker/Resources/ELCAlbumPickerController.xib new file mode 100755 index 0000000..4170520 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/Resources/ELCAlbumPickerController.xib @@ -0,0 +1,374 @@ + + + + 1024 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + {320, 416} + + + 3 + MQA + + NO + YES + NO + + + NO + + IBCocoaTouchFramework + NO + 1 + 0 + YES + 44 + 22 + 22 + + + + + YES + + + view + + + + 5 + + + + dataSource + + + + 6 + + + + delegate + + + + 7 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 4.IBEditorWindowLastContentRect + 4.IBPluginDependency + + + YES + AlbumPickerController + UIResponder + {{329, 504}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 7 + + + + YES + + AlbumPickerController + UITableViewController + + IBProjectSource + Classes/AlbumPickerController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewController + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITableViewController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../ELCImagePickerDemo.xcodeproj + 3 + 123 + + diff --git a/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetPicker.xib b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetPicker.xib new file mode 100755 index 0000000..5d5e2b5 --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetPicker.xib @@ -0,0 +1,435 @@ + + + + 1024 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + YES + + + 268 + {320, 416} + + + 1 + MSAxIDEAA + + YES + YES + IBCocoaTouchFramework + + + {320, 416} + + + 3 + MQA + + 2 + + + + + NO + + IBCocoaTouchFramework + + + + + YES + + + view + + + + 3 + + + + scrollview + + + + 7 + + + + + YES + + 0 + + + + + + 1 + + + YES + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + YES + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 1.IBEditorWindowLastContentRect + 1.IBPluginDependency + 6.IBPluginDependency + 6.IBViewBoundsToFrameTransform + + + YES + AssetPicker + UIResponder + {{575, 376}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + P4AAAL+AAAAAAAAAw88AAA + + + + + YES + + + YES + + + + + YES + + + YES + + + + 15 + + + + YES + + AssetPicker + UIViewController + + dismiss: + id + + + dismiss: + + dismiss: + id + + + + YES + + YES + parent + scrollview + selectedAssetsLabel + + + YES + id + UIScrollView + UILabel + + + + YES + + YES + parent + scrollview + selectedAssetsLabel + + + YES + + parent + id + + + scrollview + UIScrollView + + + selectedAssetsLabel + UILabel + + + + + IBProjectSource + Classes/ELCImagePickerController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../ELCImagePickerDemo.xcodeproj + 3 + 123 + + diff --git a/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetTablePicker.xib b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetTablePicker.xib new file mode 100755 index 0000000..e59456c --- /dev/null +++ b/fileUploader/Classes/ELCImagePicker/Resources/ELCAssetTablePicker.xib @@ -0,0 +1,422 @@ + + + + 1024 + 10F569 + 804 + 1038.29 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 123 + + + YES + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + {320, 436} + + + 3 + MQA + + YES + + NO + + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + + YES + + + view + + + + 3 + + + + dataSource + + + + 4 + + + + delegate + + + + 5 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 2.IBEditorWindowLastContentRect + 2.IBPluginDependency + + + YES + AssetTablePicker + UIResponder + {{0, 526}, {320, 480}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 5 + + + + YES + + AssetTablePicker + UITableViewController + + dismiss: + id + + + dismiss: + + dismiss: + id + + + + YES + + YES + parent + selectedAssetsLabel + + + YES + id + UILabel + + + + YES + + YES + parent + selectedAssetsLabel + + + YES + + parent + id + + + selectedAssetsLabel + UILabel + + + + + IBProjectSource + Classes/ELCImagePickerController.h + + + + + YES + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSError.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSFileManager.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueCoding.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyValueObserving.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSKeyedArchiver.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSObject.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSRunLoop.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSThread.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURL.h + + + + NSObject + + IBFrameworkSource + Foundation.framework/Headers/NSURLConnection.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIAccessibility.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UINibLoading.h + + + + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UIResponder.h + + + + UILabel + UIView + + IBFrameworkSource + UIKit.framework/Headers/UILabel.h + + + + UIResponder + NSObject + + + + UIScrollView + UIView + + IBFrameworkSource + UIKit.framework/Headers/UIScrollView.h + + + + UISearchBar + UIView + + IBFrameworkSource + UIKit.framework/Headers/UISearchBar.h + + + + UISearchDisplayController + NSObject + + IBFrameworkSource + UIKit.framework/Headers/UISearchDisplayController.h + + + + UITableView + UIScrollView + + IBFrameworkSource + UIKit.framework/Headers/UITableView.h + + + + UITableViewController + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITableViewController.h + + + + UIView + + IBFrameworkSource + UIKit.framework/Headers/UITextField.h + + + + UIView + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIView.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UINavigationController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UIPopoverController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UISplitViewController.h + + + + UIViewController + + IBFrameworkSource + UIKit.framework/Headers/UITabBarController.h + + + + UIViewController + UIResponder + + IBFrameworkSource + UIKit.framework/Headers/UIViewController.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../ELCImagePickerDemo.xcodeproj + 3 + 123 + + diff --git a/fileUploader/Classes/ELCImagePicker/Resources/Overlay.png b/fileUploader/Classes/ELCImagePicker/Resources/Overlay.png new file mode 100755 index 0000000000000000000000000000000000000000..a86f47f3a8a9fdf5f80ef3d34e79a1ba20bd1fe6 GIT binary patch literal 2719 zcmV;Q3Sjk#P)002t}1^@s6I8J)%0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU+K}keGRCwC#oNH_x)fLD8vpf5kecFz_ zw%1uZvE$GX0;wS+Z46QqkV0D^B9vCB@S&6Ieur_W5fv-d7M%OdBJ3eRc&*ydT^;#&G z%Rd3&r>?+ipVZvc7ex9JtaJ<3`C-|_3M8im>%6VZd~6nn&)zIp7Ay;v1Khsw+FILM>x03nfJc&C{G2Syg;YA7iOgu_cmKM3Lu1@^~E8|avWlRl=tjW&SG&D5iCHK0dqod<8 zvJjpa)Idlvo@b*~uXID+IDOzIE0F zQMctXwBCFpyg|Qv>lIgY9`EkrI7uTH3Wn?1=sym%2zfpMdqW88@A)CBH>@*&9y)aB zC_VTtx$**8Sb^a$w=C1uSv;wQg$0oUxqD`2Ce+#4xtT#_28Pl7qkFM1G6qjmBkXP$ z^r8w)RZ%K%FMw(a*s1pp4-}4>;6>#O1S8isRESq(FXptr^O1XB5 z$K%eC(Gl=rG>b8%a*Myn{}`*)57APG^KxAG#Yi~bNPlfYuAQ(eCXNdk$!&w z?z$By<>U$|l>n(r&|DOO22b~4ASmJ9J&)q9-|q)@?!c@lKpmaL;NAm^v<8dIU9pL=!ZNzkLX)n z#(1Q;Im9|x7wa@-1MHqrZX@X#mV?A){{Y97-~Y1 z3fEH~^dqzJ65RdMyOw0V`^*cN{nIO`yPzE!SzcM!NLIh`S}+ilSO@E3owSxTpJh?W zASkk8qZ-TM_xYU05+)jhPNjfYpx}MtD8}onaqaU@p|`C8FAa4eJ#q@~6f(H^i9PUC zs`}W_D2{#q2N05Jolbs@*AfNWmAjl()(uDlVefL z^`6A2WXJV;9>Q0*U4;j`|Bb+{x8QeBvGo_f!KE8FewZYvzj^B&D9drsy2dCqGVc!| zKRaV&%*Dn!Sl4n`qS;_kb~4^P#gihf{)K?EiNJldsUQ%7 zY&nVM?O(%+j!TTO?&IAvtb=u#8I)lxPu`i^5al*WOOz=BzFjsxB_;ML@;%ub|}d?B=ckRvJ2Nd_afSE zxye{}vMiR#vRMb~GA%4_6i2k`>gr-763MM=FHf>efwrL26oMM+}QIDzOeIV zVxl3VOd_XzfP5)RRy0K}H%VhtC?Svb9XsjS6Gpsa8hiKcon=`plV!6G)@9lQ3*K|$ zW2`_RPzpDNnp7!-o$K#pChP?YH0FSlhbNzWt@=ka(vT6R*6ARR|@rhtG8uim6ySlTp zvu6E87fH>Lh?C-v5pEKRgg!AfrS_dZEgv~@BteViWPN@8LUT)Vx~;V>)z;Rw5DteG zc0rC;%dE=Wr#rkGKq=nFhpD_#H#s%wnVgvP(KRqXKkvd%UN&xms^{+Xd zPR%2E)IcyGQ^w0hRz@-79!&fdwmj`y3{d9*X!;@kw;FD&qiK>ECMFOD2 zVlgR^Ot`ZPS(mKHyv<^(e2*@I~NB^A#y36@$TGkzCY(#BR4N zM&XlSv584WrDnp$lcPy8IDt~VKp;TwsgVn!pcFKQwfq-D7?#WJ(#aKh?FZ_1%6c{e zE}jPzGg28=y0XqR?cXWoNfIo+3IqdWB|=aO8oxnP+16QlZqW)CuZzp5Pf=m~1>FA# ZFaY6KNbr3Qoq7NO002ovPDHLkV1fd)L&*RD literal 0 HcmV?d00001 diff --git a/fileUploader/Classes/ELCImagePicker/Resources/Overlay@2x.png b/fileUploader/Classes/ELCImagePicker/Resources/Overlay@2x.png new file mode 100755 index 0000000000000000000000000000000000000000..a6fd78c57b22523c5841e6efdfcc3d7a381ff438 GIT binary patch literal 6568 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 literal 0 HcmV?d00001 diff --git a/fileUploader/Classes/ELCImagePickerDemoAppDelegate.h b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.h new file mode 100755 index 0000000..9f14d5c --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.h @@ -0,0 +1,19 @@ +// +// ELCImagePickerDemoAppDelegate.h +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import + +@class ELCImagePickerDemoViewController; + +@interface ELCImagePickerDemoAppDelegate : NSObject + +@property (nonatomic, strong) IBOutlet UIWindow *window; +@property (nonatomic, strong) IBOutlet ELCImagePickerDemoViewController *viewController; + +@end + diff --git a/fileUploader/Classes/ELCImagePickerDemoAppDelegate.m b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.m new file mode 100755 index 0000000..5069e9c --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoAppDelegate.m @@ -0,0 +1,84 @@ +// +// ELCImagePickerDemoAppDelegate.m +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import "ELCImagePickerDemoAppDelegate.h" +#import "ELCImagePickerDemoViewController.h" + +@implementation ELCImagePickerDemoAppDelegate + +//Using generated synthesizers + +#pragma mark - +#pragma mark Application lifecycle + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + // Override point for customization after application launch. + + self.window.rootViewController = _viewController; + [self.window makeKeyAndVisible]; + + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application +{ + /* + Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + */ +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + /* + Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + If your application supports background execution, called instead of applicationWillTerminate: when the user quits. + */ +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + /* + Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. + */ +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + /* + Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + */ +} + + +- (void)applicationWillTerminate:(UIApplication *)application +{ + /* + Called when the application is about to terminate. + See also applicationDidEnterBackground:. + */ +} + + +#pragma mark - +#pragma mark Memory management + +- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application +{ + /* + Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. + */ +} + + +@end diff --git a/fileUploader/Classes/ELCImagePickerDemoViewController.h b/fileUploader/Classes/ELCImagePickerDemoViewController.h new file mode 100755 index 0000000..fa4f1eb --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoViewController.h @@ -0,0 +1,25 @@ +// +// ELCImagePickerDemoViewController.h +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import +#import "ELCImagePickerController.h" + +@interface ELCImagePickerDemoViewController : UIViewController + +@property (nonatomic, strong) IBOutlet UIScrollView *scrollView; +@property (nonatomic, copy) NSArray *chosenImages; + +// the default picker controller +- (IBAction)launchController; + +// a special picker controller that limits itself to a single album, and lets the user +// pick just one image from that album. +- (IBAction)launchSpecialController; + +@end + diff --git a/fileUploader/Classes/ELCImagePickerDemoViewController.m b/fileUploader/Classes/ELCImagePickerDemoViewController.m new file mode 100755 index 0000000..174f1f1 --- /dev/null +++ b/fileUploader/Classes/ELCImagePickerDemoViewController.m @@ -0,0 +1,128 @@ +// +// ELCImagePickerDemoViewController.m +// ELCImagePickerDemo +// +// Created by ELC on 9/9/10. +// Copyright 2010 ELC Technologies. All rights reserved. +// + +#import "ELCImagePickerDemoAppDelegate.h" +#import "ELCImagePickerDemoViewController.h" +#import "ELCImagePickerController.h" +#import "ELCAlbumPickerController.h" +#import "ELCAssetTablePicker.h" + +@interface ELCImagePickerDemoViewController () + +@property (nonatomic, strong) ALAssetsLibrary *specialLibrary; + +@end + +@implementation ELCImagePickerDemoViewController + +//Using generated synthesizers + +- (IBAction)launchController +{ + ELCImagePickerController *elcPicker = [[ELCImagePickerController alloc] initImagePicker]; + elcPicker.maximumImagesCount = 4; + elcPicker.returnsOriginalImage = NO; //Only return the fullScreenImage, not the fullResolutionImage + elcPicker.imagePickerDelegate = self; + + [self presentViewController:elcPicker animated:YES completion:nil]; + +} + +- (IBAction)launchSpecialController +{ + ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; + self.specialLibrary = library; + NSMutableArray *groups = [NSMutableArray array]; + [_specialLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { + if (group) { + [groups addObject:group]; + } else { + // this is the end + [self displayPickerForGroup:[groups objectAtIndex:0]]; + } + } failureBlock:^(NSError *error) { + self.chosenImages = nil; + UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Album Error: %@ - %@", [error localizedDescription], [error localizedRecoverySuggestion]] delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; + [alert show]; + + NSLog(@"A problem occured %@", [error description]); + // an error here means that the asset groups were inaccessable. + // Maybe the user or system preferences refused access. + }]; +} + +- (void)displayPickerForGroup:(ALAssetsGroup *)group +{ + ELCAssetTablePicker *tablePicker = [[ELCAssetTablePicker alloc] initWithStyle:UITableViewStylePlain]; + tablePicker.singleSelection = YES; + tablePicker.immediateReturn = YES; + + ELCImagePickerController *elcPicker = [[ELCImagePickerController alloc] initWithRootViewController:tablePicker]; + elcPicker.maximumImagesCount = 1; + elcPicker.imagePickerDelegate = self; + elcPicker.returnsOriginalImage = NO; //Only return the fullScreenImage, not the fullResolutionImage + tablePicker.parent = elcPicker; + + // Move me + tablePicker.assetGroup = group; + [tablePicker.assetGroup setAssetsFilter:[ALAssetsFilter allAssets]]; + + [self presentViewController:elcPicker animated:YES completion:nil]; +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation +{ + if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { + return YES; + } else { + return toInterfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; + } +} + +#pragma mark ELCImagePickerControllerDelegate Methods + +- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info +{ + [self dismissViewControllerAnimated:YES completion:nil]; + + for (UIView *v in [_scrollView subviews]) { + [v removeFromSuperview]; + } + + CGRect workingFrame = _scrollView.frame; + workingFrame.origin.x = 0; + + NSMutableArray *images = [NSMutableArray arrayWithCapacity:[info count]]; + + for (NSDictionary *dict in info) { + + UIImage *image = [dict objectForKey:UIImagePickerControllerOriginalImage]; + [images addObject:image]; + + UIImageView *imageview = [[UIImageView alloc] initWithImage:image]; + [imageview setContentMode:UIViewContentModeScaleAspectFit]; + imageview.frame = workingFrame; + + [_scrollView addSubview:imageview]; + + workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width; + } + + self.chosenImages = images; + + [_scrollView setPagingEnabled:YES]; + [_scrollView setContentSize:CGSizeMake(workingFrame.origin.x, workingFrame.size.height)]; +} + +- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker +{ + [self dismissViewControllerAnimated:YES completion:nil]; +} + + +@end diff --git a/fileUploader/fileUploadDemoViewController.h b/fileUploader/fileUploadDemoViewController.h index d16247d..bd061f6 100644 --- a/fileUploader/fileUploadDemoViewController.h +++ b/fileUploader/fileUploadDemoViewController.h @@ -8,8 +8,9 @@ #import #import "fileUploadEngine.h" - -@interface fileUploadDemoViewController : UIViewController +#import "ELCAssetSelectionDelegate.h" +#import "ELCImagePickerController.h" +@interface fileUploadDemoViewController : UIViewController @property (strong, nonatomic) fileUploadEngine *flUploadEngine; @property (strong, nonatomic) MKNetworkOperation *flOperation; diff --git a/fileUploader/fileUploadDemoViewController.m b/fileUploader/fileUploadDemoViewController.m index 26ae371..5a61ee5 100644 --- a/fileUploader/fileUploadDemoViewController.m +++ b/fileUploader/fileUploadDemoViewController.m @@ -7,12 +7,14 @@ // #import "fileUploadDemoViewController.h" - +#import "ELCImagePickerController.h" @interface fileUploadDemoViewController () @end -@implementation fileUploadDemoViewController +@implementation fileUploadDemoViewController{ + ELCImagePickerController *imagePicker; +} @synthesize flUploadEngine = _flUploadEngine; @synthesize flOperation = _flOperation; @@ -21,12 +23,18 @@ - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. + // Create the image picker + imagePicker = [[ELCImagePickerController alloc] initImagePicker]; + imagePicker.maximumImagesCount = 4; //Set the maximum number of images to select, defaults to 4 + imagePicker.returnsOriginalImage = NO; //Only return the fullScreenImage, not the fullResolutionImage + imagePicker.imagePickerDelegate = self; } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. + } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation @@ -73,11 +81,12 @@ - (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)b case 1: { if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { - UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; - imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; - imagePicker.delegate = self; - imagePicker.allowsEditing = NO; - [self presentModalViewController:imagePicker animated:YES]; +// UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; +// imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; +// imagePicker.delegate = self; +// imagePicker.allowsEditing = NO; +// [self presentModalViewController:imagePicker animated:YES]; + [self presentViewController:imagePicker animated:YES completion:nil]; } else { UIAlertView *alert; @@ -91,7 +100,43 @@ - (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)b } } } +- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info{ + [self dismissModalViewControllerAnimated:YES]; + for (NSDictionary*dic in info) { + [self uploadImageUsingDicInfo:dic]; + } + +} +-(void)uploadImageUsingDicInfo:(NSDictionary*)dicInfo{ + NSData *image = UIImageJPEGRepresentation([dicInfo objectForKey:UIImagePickerControllerOriginalImage], 0.1); + + self.flUploadEngine = [[fileUploadEngine alloc] initWithHostName:@"posttestserver.com" customHeaderFields:nil]; + + NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys: + @"testApp", @"appID", + nil]; + self.flOperation = [self.flUploadEngine postDataToServer:postParams path:@"/post.php"]; + [self.flOperation addData:image forKey:@"userfl" mimeType:@"image/jpeg" fileName:@"upload.jpg"]; + + [self.flOperation addCompletionHandler:^(MKNetworkOperation* operation) { + NSLog(@"%@", [operation responseString]); + /* + This is where you handle a successful 200 response + */ + } + errorHandler:^(MKNetworkOperation *errorOp, NSError* error) { + NSLog(@"%@", error); + UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" + message:[error localizedDescription] + delegate:nil + cancelButtonTitle:@"Dismiss" + otherButtonTitles:nil]; + [alert show]; + }]; + + [self.flUploadEngine enqueueOperation:self.flOperation ]; +} - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissModalViewControllerAnimated:YES];