From 4a155eb9bd11f584bdc3f3fe723acb9fc52ac282 Mon Sep 17 00:00:00 2001 From: lizj0505 Date: Tue, 16 Jul 2013 14:15:43 +0800 Subject: [PATCH] ui stucture adjusted && api for creation of projects and issues --- .../RedmineMobile.xcodeproj/project.pbxproj | 44 ++- .../RedmineMobile/Models/OZLModelIssue.h | 8 +- .../RedmineMobile/Models/OZLModelIssue.m | 61 +++- .../Models/OZLModelIssueCategory.h | 19 ++ .../Models/OZLModelIssueCategory.m | 29 ++ ...OZLModelStatus.h => OZLModelIssueStatus.h} | 4 +- ...OZLModelStatus.m => OZLModelIssueStatus.m} | 6 +- .../RedmineMobile/Models/OZLModelProject.h | 2 + .../RedmineMobile/Models/OZLModelProject.m | 15 + RedmineMobile/RedmineMobile/OZLAppDelegate.h | 4 +- RedmineMobile/RedmineMobile/OZLAppDelegate.m | 7 +- .../RedmineMobile/Utils/OZLNetwork.h | 10 +- .../RedmineMobile/Utils/OZLNetwork.m | 151 ++++++++- .../OZLAccountViewController.m | 23 +- .../OZLIssueCreateViewController.h | 15 + .../OZLIssueCreateViewController.m | 44 +++ .../OZLIssueCreateViewController.xib | 316 ++++++++++++++++++ .../OZLProjectCreateViewController.h | 15 + .../OZLProjectCreateViewController.m | 46 +++ .../OZLProjectCreateViewController.xib | 207 ++++++++++++ .../OZLProjectListViewController.h | 1 + .../OZLProjectListViewController.m | 30 +- .../OZLProjectListViewController.xib | 49 +-- .../OZLProjectViewController.h | 1 + .../OZLProjectViewController.m | 32 +- .../OZLProjectViewController.xib | 10 +- 26 files changed, 1040 insertions(+), 109 deletions(-) create mode 100644 RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.h create mode 100644 RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.m rename RedmineMobile/RedmineMobile/Models/{OZLModelStatus.h => OZLModelIssueStatus.h} (80%) rename RedmineMobile/RedmineMobile/Models/{OZLModelStatus.m => OZLModelIssueStatus.m} (78%) create mode 100644 RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.h create mode 100644 RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.m create mode 100644 RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.xib create mode 100644 RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.h create mode 100644 RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.m create mode 100644 RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.xib diff --git a/RedmineMobile/RedmineMobile.xcodeproj/project.pbxproj b/RedmineMobile/RedmineMobile.xcodeproj/project.pbxproj index 22ce12b..5cbe6cc 100644 --- a/RedmineMobile/RedmineMobile.xcodeproj/project.pbxproj +++ b/RedmineMobile/RedmineMobile.xcodeproj/project.pbxproj @@ -7,6 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 2B9968AB1794F71B0086F115 /* OZLModelIssueCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9968AA1794F71B0086F115 /* OZLModelIssueCategory.m */; }; + 2B9968AF1794FC0A0086F115 /* OZLProjectCreateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9968AD1794FC0A0086F115 /* OZLProjectCreateViewController.m */; }; + 2B9968B01794FC0A0086F115 /* OZLProjectCreateViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2B9968AE1794FC0A0086F115 /* OZLProjectCreateViewController.xib */; }; + 2B9968B417951A5C0086F115 /* OZLIssueCreateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9968B217951A5C0086F115 /* OZLIssueCreateViewController.m */; }; + 2B9968B517951A5C0086F115 /* OZLIssueCreateViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2B9968B317951A5C0086F115 /* OZLIssueCreateViewController.xib */; }; 2BCF880C1793A26A006FC859 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF880B1793A26A006FC859 /* MBProgressHUD.m */; }; 2BCF88101793ABA0006FC859 /* Reachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF880F1793ABA0006FC859 /* Reachability.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 2BCF88121793CB4F006FC859 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BCF88111793CB4F006FC859 /* CFNetwork.framework */; }; @@ -15,7 +20,7 @@ 2BCF88191793E353006FC859 /* OZLProjectDetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2BCF88171793E353006FC859 /* OZLProjectDetailViewController.xib */; }; 2BCF881E1793F3C8006FC859 /* OZLModelIssue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF881D1793F3C8006FC859 /* OZLModelIssue.m */; }; 2BCF88211793F478006FC859 /* OZLModelTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF88201793F478006FC859 /* OZLModelTracker.m */; }; - 2BCF88271793F4AA006FC859 /* OZLModelStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF88261793F4AA006FC859 /* OZLModelStatus.m */; }; + 2BCF88271793F4AA006FC859 /* OZLModelIssueStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF88261793F4AA006FC859 /* OZLModelIssueStatus.m */; }; 2BCF882A1793F4C9006FC859 /* OZLModelPriority.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF88291793F4C9006FC859 /* OZLModelPriority.m */; }; 2BCF88301793F5CE006FC859 /* OZLModelUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF882F1793F5CE006FC859 /* OZLModelUser.m */; }; 2BCF88341793FFD1006FC859 /* OZLIssueDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BCF88321793FFD0006FC859 /* OZLIssueDetailViewController.m */; }; @@ -55,6 +60,14 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 2B9968A91794F71B0086F115 /* OZLModelIssueCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelIssueCategory.h; path = Models/OZLModelIssueCategory.h; sourceTree = ""; }; + 2B9968AA1794F71B0086F115 /* OZLModelIssueCategory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLModelIssueCategory.m; path = Models/OZLModelIssueCategory.m; sourceTree = ""; }; + 2B9968AC1794FC0A0086F115 /* OZLProjectCreateViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLProjectCreateViewController.h; path = ViewControllers/OZLProjectCreateViewController.h; sourceTree = ""; }; + 2B9968AD1794FC0A0086F115 /* OZLProjectCreateViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLProjectCreateViewController.m; path = ViewControllers/OZLProjectCreateViewController.m; sourceTree = ""; }; + 2B9968AE1794FC0A0086F115 /* OZLProjectCreateViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = OZLProjectCreateViewController.xib; path = ViewControllers/OZLProjectCreateViewController.xib; sourceTree = ""; }; + 2B9968B117951A5C0086F115 /* OZLIssueCreateViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLIssueCreateViewController.h; path = ViewControllers/OZLIssueCreateViewController.h; sourceTree = ""; }; + 2B9968B217951A5C0086F115 /* OZLIssueCreateViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLIssueCreateViewController.m; path = ViewControllers/OZLIssueCreateViewController.m; sourceTree = ""; }; + 2B9968B317951A5C0086F115 /* OZLIssueCreateViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = OZLIssueCreateViewController.xib; path = ViewControllers/OZLIssueCreateViewController.xib; sourceTree = ""; }; 2BCF880A1793A26A006FC859 /* MBProgressHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; 2BCF880B1793A26A006FC859 /* MBProgressHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; 2BCF880E1793ABA0006FC859 /* Reachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Reachability.h; sourceTree = ""; }; @@ -68,8 +81,8 @@ 2BCF881D1793F3C8006FC859 /* OZLModelIssue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLModelIssue.m; path = Models/OZLModelIssue.m; sourceTree = ""; }; 2BCF881F1793F478006FC859 /* OZLModelTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelTracker.h; path = Models/OZLModelTracker.h; sourceTree = ""; }; 2BCF88201793F478006FC859 /* OZLModelTracker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLModelTracker.m; path = Models/OZLModelTracker.m; sourceTree = ""; }; - 2BCF88251793F4AA006FC859 /* OZLModelStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelStatus.h; path = Models/OZLModelStatus.h; sourceTree = ""; }; - 2BCF88261793F4AA006FC859 /* OZLModelStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLModelStatus.m; path = Models/OZLModelStatus.m; sourceTree = ""; }; + 2BCF88251793F4AA006FC859 /* OZLModelIssueStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelIssueStatus.h; path = Models/OZLModelIssueStatus.h; sourceTree = ""; }; + 2BCF88261793F4AA006FC859 /* OZLModelIssueStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLModelIssueStatus.m; path = Models/OZLModelIssueStatus.m; sourceTree = ""; }; 2BCF88281793F4C9006FC859 /* OZLModelPriority.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelPriority.h; path = Models/OZLModelPriority.h; sourceTree = ""; }; 2BCF88291793F4C9006FC859 /* OZLModelPriority.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLModelPriority.m; path = Models/OZLModelPriority.m; sourceTree = ""; }; 2BCF882E1793F5CE006FC859 /* OZLModelUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelUser.h; path = Models/OZLModelUser.h; sourceTree = ""; }; @@ -176,12 +189,12 @@ D5DB80A31792F4DE0081662A /* OZLProjectListViewController.h */, D5DB80A41792F4DE0081662A /* OZLProjectListViewController.m */, D5DB80A51792F4DE0081662A /* OZLProjectListViewController.xib */, - D5DB80A91792F6980081662A /* OZLProjectViewController.h */, - D5DB80AA1792F6980081662A /* OZLProjectViewController.m */, - D5DB80AB1792F6980081662A /* OZLProjectViewController.xib */, 2BCF88151793E352006FC859 /* OZLProjectDetailViewController.h */, 2BCF88161793E353006FC859 /* OZLProjectDetailViewController.m */, 2BCF88171793E353006FC859 /* OZLProjectDetailViewController.xib */, + 2B9968AC1794FC0A0086F115 /* OZLProjectCreateViewController.h */, + 2B9968AD1794FC0A0086F115 /* OZLProjectCreateViewController.m */, + 2B9968AE1794FC0A0086F115 /* OZLProjectCreateViewController.xib */, ); name = Project; sourceTree = ""; @@ -189,9 +202,15 @@ 2BCF881B1793EFB7006FC859 /* Issue */ = { isa = PBXGroup; children = ( + D5DB80A91792F6980081662A /* OZLProjectViewController.h */, + D5DB80AA1792F6980081662A /* OZLProjectViewController.m */, + D5DB80AB1792F6980081662A /* OZLProjectViewController.xib */, 2BCF88311793FFD0006FC859 /* OZLIssueDetailViewController.h */, 2BCF88321793FFD0006FC859 /* OZLIssueDetailViewController.m */, 2BCF88331793FFD1006FC859 /* OZLIssueDetailViewController.xib */, + 2B9968B117951A5C0086F115 /* OZLIssueCreateViewController.h */, + 2B9968B217951A5C0086F115 /* OZLIssueCreateViewController.m */, + 2B9968B317951A5C0086F115 /* OZLIssueCreateViewController.xib */, ); name = Issue; sourceTree = ""; @@ -349,8 +368,8 @@ D5DB80BF17931C580081662A /* Models */ = { isa = PBXGroup; children = ( - 2BCF88251793F4AA006FC859 /* OZLModelStatus.h */, - 2BCF88261793F4AA006FC859 /* OZLModelStatus.m */, + 2BCF88251793F4AA006FC859 /* OZLModelIssueStatus.h */, + 2BCF88261793F4AA006FC859 /* OZLModelIssueStatus.m */, D5DB80C017931C8B0081662A /* OZLModelProject.h */, D5DB80C117931C8B0081662A /* OZLModelProject.m */, 2BCF881C1793F3C8006FC859 /* OZLModelIssue.h */, @@ -361,6 +380,8 @@ 2BCF88291793F4C9006FC859 /* OZLModelPriority.m */, 2BCF882E1793F5CE006FC859 /* OZLModelUser.h */, 2BCF882F1793F5CE006FC859 /* OZLModelUser.m */, + 2B9968A91794F71B0086F115 /* OZLModelIssueCategory.h */, + 2B9968AA1794F71B0086F115 /* OZLModelIssueCategory.m */, ); name = Models; sourceTree = ""; @@ -426,6 +447,8 @@ D5DB80B61793016B0081662A /* OZLAccountViewController.xib in Resources */, 2BCF88191793E353006FC859 /* OZLProjectDetailViewController.xib in Resources */, 2BCF88351793FFD1006FC859 /* OZLIssueDetailViewController.xib in Resources */, + 2B9968B01794FC0A0086F115 /* OZLProjectCreateViewController.xib in Resources */, + 2B9968B517951A5C0086F115 /* OZLIssueCreateViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -463,10 +486,13 @@ 2BCF88181793E353006FC859 /* OZLProjectDetailViewController.m in Sources */, 2BCF881E1793F3C8006FC859 /* OZLModelIssue.m in Sources */, 2BCF88211793F478006FC859 /* OZLModelTracker.m in Sources */, - 2BCF88271793F4AA006FC859 /* OZLModelStatus.m in Sources */, + 2BCF88271793F4AA006FC859 /* OZLModelIssueStatus.m in Sources */, 2BCF882A1793F4C9006FC859 /* OZLModelPriority.m in Sources */, 2BCF88301793F5CE006FC859 /* OZLModelUser.m in Sources */, 2BCF88341793FFD1006FC859 /* OZLIssueDetailViewController.m in Sources */, + 2B9968AB1794F71B0086F115 /* OZLModelIssueCategory.m in Sources */, + 2B9968AF1794FC0A0086F115 /* OZLProjectCreateViewController.m in Sources */, + 2B9968B417951A5C0086F115 /* OZLIssueCreateViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelIssue.h b/RedmineMobile/RedmineMobile/Models/OZLModelIssue.h index 371020d..129c120 100644 --- a/RedmineMobile/RedmineMobile/Models/OZLModelIssue.h +++ b/RedmineMobile/RedmineMobile/Models/OZLModelIssue.h @@ -8,9 +8,10 @@ #import #import "OZLModelTracker.h" -#import "OZLModelStatus.h" +#import "OZLModelIssueStatus.h" #import "OZLModelUser.h" #import "OZLModelPriority.h" +#import "OZLModelIssueCategory.h" @interface OZLModelIssue : NSObject @@ -21,6 +22,8 @@ @property(nonatomic,strong) OZLModelUser* author; @property(nonatomic,strong) OZLModelUser* assignedTo; @property(nonatomic,strong) OZLModelPriority* priority; +@property(nonatomic,strong) OZLModelIssueStatus* status; +@property(nonatomic,strong) OZLModelIssueCategory* category; @property(nonatomic,strong) NSString* subject; @property(nonatomic,strong) NSString* description; @property(nonatomic,strong) NSString* startDate; @@ -28,7 +31,10 @@ @property(nonatomic,strong) NSString* createdOn; @property(nonatomic,strong) NSString* updatedOn; @property(nonatomic) float doneRatio; +@property(nonatomic) float spentHours; +@property(nonatomic,strong) NSString* notes;// used as paramter to update a issue -(id)initWithDictionary:(NSDictionary*)dic; +-(NSMutableDictionary*) toParametersDic; @end diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelIssue.m b/RedmineMobile/RedmineMobile/Models/OZLModelIssue.m index 74a9284..4eba26d 100644 --- a/RedmineMobile/RedmineMobile/Models/OZLModelIssue.m +++ b/RedmineMobile/RedmineMobile/Models/OZLModelIssue.m @@ -16,21 +16,6 @@ if (!self) { return nil; } - -// @property(nonatomic) int index; -// @property(nonatomic) int projectId; -// @property(nonatomic) int parentIssueId; -// @property(nonatomic,strong) OZLModelTracker* tracker; -// @property(nonatomic,strong) OZLModelUser* author; -// @property(nonatomic,strong) OZLModelUser* assignedTo; -// @property(nonatomic,strong) OZLModelPriority* priority; -// @property(nonatomic,strong) NSString* subject; -// @property(nonatomic,strong) NSString* description; -// @property(nonatomic,strong) NSString* startDate; -// @property(nonatomic,strong) NSString* dueDate; -// @property(nonatomic,strong) NSString* createdOn; -// @property(nonatomic,strong) NSString* updatedOn; -// @property(nonatomic) float doneRatio; _index = [[dic objectForKey:@"id"] intValue]; _projectId = [[[dic objectForKey:@"project"] objectForKey:@"id"] intValue]; id parent = [dic objectForKey:@"parent"]; @@ -55,6 +40,14 @@ if (priority != nil) { _priority = [[OZLModelPriority alloc] initWithDictionary:priority]; } + id status = [dic objectForKey:@"status"]; + if (status) { + _status = [[OZLModelIssueStatus alloc ] initWithDictionary:status]; + } + id category = [dic objectForKey:@"category"]; + if (status) { + _category = [[OZLModelIssueCategory alloc ] initWithDictionary:category]; + } _subject = [dic objectForKey:@"subject"]; _description = [dic objectForKey:@"description"]; _startDate = [dic objectForKey:@"start_date"]; @@ -62,7 +55,45 @@ _createdOn = [dic objectForKey:@"created_on"]; _updatedOn = [dic objectForKey:@"updated_on"]; _doneRatio = [[dic objectForKey:@"done_ratio"] floatValue]; + id spentHours = [dic objectForKey:@"spent_hours"]; + if (spentHours ) { + _spentHours = [spentHours floatValue]; + }else { + _spentHours = 0.0f; + } return self; } +-(NSMutableDictionary*) toParametersDic +{ + NSMutableDictionary* issueData = [[NSMutableDictionary alloc] init]; + if (_projectId > 0) { + [issueData setObject:[NSNumber numberWithInt:_projectId] forKey:@"project_id"]; + } + if (_tracker && _tracker.index > 0) { + [issueData setObject:[NSNumber numberWithInt:_tracker.index] forKey:@"tracker_id"]; + } + if (_status && _status.index > 0) { + [issueData setObject:[NSNumber numberWithInt:_status.index] forKey:@"status_id"]; + } + if (_priority && _priority.init > 0) { + [issueData setObject:[NSNumber numberWithInt:_priority.index] forKey:@"priority_id"]; + } + if (_subject.length > 0) { + [issueData setObject:_subject forKey:@"subject"]; + } + if (_description.length > 0) { + [issueData setObject:_description forKey:@"description"]; + } + if (_category && _category) { + [issueData setObject:[NSNumber numberWithInt:_category.index ] forKey:@"categroy_id"]; + } + if (_assignedTo && _assignedTo.index > 0) { + [issueData setObject:[NSNumber numberWithInt:_assignedTo.index] forKey:@"assigned_to_id"]; + } + if (_parentIssueId > 0) { + [issueData setObject:[NSNumber numberWithInt:_parentIssueId] forKey:@"parent_issue_id"]; + } + return [[NSMutableDictionary alloc] initWithObjectsAndKeys:issueData,@"issue",nil]; +} @end diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.h b/RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.h new file mode 100644 index 0000000..5da2e53 --- /dev/null +++ b/RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.h @@ -0,0 +1,19 @@ +// +// OZLModelIssueCategory.h +// RedmineMobile +// +// Created by lizhijie on 7/16/13. +// Copyright (c) 2013 Lee Zhijie. All rights reserved. +// + +#import + +@interface OZLModelIssueCategory : NSObject + +@property(nonatomic) int index; +@property(nonatomic,strong) NSString* name; + +-(id)initWithDictionary:(NSDictionary*)dic; +-(NSMutableDictionary*) toParametersDic; + +@end diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.m b/RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.m new file mode 100644 index 0000000..9d8e419 --- /dev/null +++ b/RedmineMobile/RedmineMobile/Models/OZLModelIssueCategory.m @@ -0,0 +1,29 @@ +// +// OZLModelIssueCategory.m +// RedmineMobile +// +// Created by lizhijie on 7/16/13. +// Copyright (c) 2013 Lee Zhijie. All rights reserved. +// + +#import "OZLModelIssueCategory.h" + +@implementation OZLModelIssueCategory + + +-(id)initWithDictionary:(NSDictionary*)dic +{ + self = [super init]; + if (!self) { + return nil; + } + _index = [[dic objectForKey:@"id"] intValue]; + _name = [dic objectForKey:@"name"]; + return self; +} +//-(NSMutableDictionary*) toParametersDic +//{ +// +//} + +@end diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelStatus.h b/RedmineMobile/RedmineMobile/Models/OZLModelIssueStatus.h similarity index 80% rename from RedmineMobile/RedmineMobile/Models/OZLModelStatus.h rename to RedmineMobile/RedmineMobile/Models/OZLModelIssueStatus.h index 843e15e..d529e03 100644 --- a/RedmineMobile/RedmineMobile/Models/OZLModelStatus.h +++ b/RedmineMobile/RedmineMobile/Models/OZLModelIssueStatus.h @@ -1,5 +1,5 @@ // -// OZLModelStatus.h +// OZLModelIssueStatus.h // RedmineMobile // // Created by lizhijie on 7/15/13. @@ -8,7 +8,7 @@ #import -@interface OZLModelStatus : NSObject +@interface OZLModelIssueStatus : NSObject @property(nonatomic) int index; @property(nonatomic, strong) NSString* name; diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelStatus.m b/RedmineMobile/RedmineMobile/Models/OZLModelIssueStatus.m similarity index 78% rename from RedmineMobile/RedmineMobile/Models/OZLModelStatus.m rename to RedmineMobile/RedmineMobile/Models/OZLModelIssueStatus.m index e61bb57..3e5c54d 100644 --- a/RedmineMobile/RedmineMobile/Models/OZLModelStatus.m +++ b/RedmineMobile/RedmineMobile/Models/OZLModelIssueStatus.m @@ -1,14 +1,14 @@ // -// OZLModelStatus.m +// OZLModelIssueStatus.m // RedmineMobile // // Created by lizhijie on 7/15/13. // Copyright (c) 2013 Lee Zhijie. All rights reserved. // -#import "OZLModelStatus.h" +#import "OZLModelIssueStatus.h" -@implementation OZLModelStatus +@implementation OZLModelIssueStatus -(id)initWithDictionary:(NSDictionary*)dic { diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelProject.h b/RedmineMobile/RedmineMobile/Models/OZLModelProject.h index 5879d9e..4c5281f 100644 --- a/RedmineMobile/RedmineMobile/Models/OZLModelProject.h +++ b/RedmineMobile/RedmineMobile/Models/OZLModelProject.h @@ -31,6 +31,7 @@ @interface OZLModelProject : NSObject @property(nonatomic) int index; +@property(nonatomic,strong) NSString* identifier; @property(nonatomic,strong) NSString* description; @property(nonatomic,strong) NSString* name; @property(nonatomic) int parentId; @@ -38,5 +39,6 @@ @property(nonatomic,strong) NSString* updatedOn; -(id)initWithDictionary:(NSDictionary*)dic; +-(NSMutableDictionary*) toParametersDic; @end diff --git a/RedmineMobile/RedmineMobile/Models/OZLModelProject.m b/RedmineMobile/RedmineMobile/Models/OZLModelProject.m index 8289380..23d4dd0 100644 --- a/RedmineMobile/RedmineMobile/Models/OZLModelProject.m +++ b/RedmineMobile/RedmineMobile/Models/OZLModelProject.m @@ -38,6 +38,7 @@ } _index = [[dic objectForKey:@"id"] intValue]; + _identifier = [dic objectForKey:@"identifier"]; _name = [dic objectForKey:@"name"]; _description = [dic objectForKey:@"description"]; _createdOn = [dic objectForKey:@"created_on"]; @@ -51,4 +52,18 @@ return self; } +-(NSMutableDictionary*) toParametersDic +{ + NSMutableDictionary* projectDic = [[NSMutableDictionary alloc] init]; + [projectDic setObject:_name forKey:@"name"]; + [projectDic setObject:_identifier forKey:@"identifier"]; + if (_description.length > 0) { + [projectDic setObject:_description forKey:@"description"]; + } + if (_parentId > 0) { + [projectDic setObject:[NSNumber numberWithInt:_parentId] forKey:@"parent"]; + } + + return [[NSMutableDictionary alloc] initWithObjectsAndKeys:projectDic,@"project",nil]; +} @end diff --git a/RedmineMobile/RedmineMobile/OZLAppDelegate.h b/RedmineMobile/RedmineMobile/OZLAppDelegate.h index 25d3931..0fe4dc8 100644 --- a/RedmineMobile/RedmineMobile/OZLAppDelegate.h +++ b/RedmineMobile/RedmineMobile/OZLAppDelegate.h @@ -32,6 +32,6 @@ @interface OZLAppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; -@property (strong, nonatomic) PPRevealSideViewController *revealSideViewController; - +//@property (strong, nonatomic) PPRevealSideViewController *revealSideViewController; +@property(strong, nonatomic) UINavigationController* navigationController; @end diff --git a/RedmineMobile/RedmineMobile/OZLAppDelegate.m b/RedmineMobile/RedmineMobile/OZLAppDelegate.m index cda406d..055353a 100644 --- a/RedmineMobile/RedmineMobile/OZLAppDelegate.m +++ b/RedmineMobile/RedmineMobile/OZLAppDelegate.m @@ -31,13 +31,14 @@ #import "OZLSingleton.h" #import "OZLModelProject.h" #import "OZLAccountViewController.h" +#import "OZLProjectListViewController.h" @implementation OZLAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = PP_AUTORELEASE([[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]); - +/* id main = nil; int lastProjectID = [[OZLSingleton sharedInstance] lastProjectID]; if (lastProjectID < 0) { @@ -58,6 +59,10 @@ PP_RELEASE(main); PP_RELEASE(nav); +*/ + OZLProjectListViewController* projectList = [[OZLProjectListViewController alloc] initWithNibName:@"OZLProjectListViewController" bundle:nil]; + _navigationController = [[UINavigationController alloc] initWithRootViewController:projectList]; + self.window.rootViewController = _navigationController; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; diff --git a/RedmineMobile/RedmineMobile/Utils/OZLNetwork.h b/RedmineMobile/RedmineMobile/Utils/OZLNetwork.h index 476b8af..eff58ca 100644 --- a/RedmineMobile/RedmineMobile/Utils/OZLNetwork.h +++ b/RedmineMobile/RedmineMobile/Utils/OZLNetwork.h @@ -30,7 +30,7 @@ #import "OZLModelProject.h" #import "OZLModelIssue.h" #import "OZLModelPriority.h" -#import "OZLModelStatus.h" +#import "OZLModelIssueStatus.h" #import "OZLModelTracker.h" #import "OZLModelUser.h" @@ -39,9 +39,17 @@ // project +(void)getProjectListWithParams:(NSDictionary*)params andBlock:(void (^)(NSArray *result, NSError *error))block; +(void)getDetailForProject:(int)projectid withParams:(NSDictionary*)params andBlock:(void (^)(OZLModelProject *result, NSError *error))block; ++(void)createProject:(OZLModelProject*)projectData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block; ++(void)updateProject:(OZLModelProject*)projectData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block; ++(void)deleteProject:(int)projectid withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block; + // issue +(void)getIssueListForProject:(int)projectid withParams:(NSDictionary*)params andBlock:(void (^)(NSArray *result, NSError *error))block; +(void)getDetailFoIssue:(int)issueid withParams:(NSDictionary*)params andBlock:(void (^)(OZLModelIssue *result, NSError *error))block; ++(void)createIssue:(OZLModelIssue*)issueData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block; ++(void)updateIssue:(OZLModelIssue*)issueData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block; ++(void)deleteIssue:(int)issueid withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block; + @end diff --git a/RedmineMobile/RedmineMobile/Utils/OZLNetwork.m b/RedmineMobile/RedmineMobile/Utils/OZLNetwork.m index 0e9d552..58d98f2 100644 --- a/RedmineMobile/RedmineMobile/Utils/OZLNetwork.m +++ b/RedmineMobile/RedmineMobile/Utils/OZLNetwork.m @@ -33,6 +33,8 @@ @implementation OZLNetwork +#pragma mark- +#pragma mark project api +(void)getProjectListWithParams:(NSDictionary*)params andBlock:(void (^)(NSArray *result, NSError *error))block; { NSString* path = @"/projects.json"; @@ -49,10 +51,8 @@ block(projects,nil); } - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - if (block) { block([NSArray array], error); } @@ -74,17 +74,89 @@ block(project,nil); } - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { - if (block) { block([NSArray array], error); } }]; } ++(void)createProject:(OZLModelProject*)projectData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block +{ + NSString* path = @"/projects.json"; + //project info + NSMutableDictionary* projectDic = [projectData toParametersDic]; + [projectDic addEntriesFromDictionary:params]; + + [[OZLNetworkBase sharedClient] postPath:path parameters:projectDic success:^(AFHTTPRequestOperation *operation, id responseObject) { + + if (block) { + NSLog(@"the repsonse:%@",responseObject); + int repondNumber = [responseObject intValue]; + block(repondNumber == 201,nil); + } + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + + if (block) { + block(NO, error); + } + + }]; +} ++(void)updateProject:(OZLModelProject*)projectData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block +{ + NSString* path = [NSString stringWithFormat:@"/projects/%d.json",projectData.index]; + + //project info + NSMutableDictionary* projectDic = [projectData toParametersDic]; + [projectDic addEntriesFromDictionary:params]; + + [[OZLNetworkBase sharedClient] putPath:path parameters:projectDic success:^(AFHTTPRequestOperation *operation, id responseObject) { + + if (block) { + NSLog(@"the repsonse:%@",responseObject); + int repondNumber = [responseObject intValue]; + block(repondNumber == 201,nil); + } + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + + + if (block) { + block(NO, error); + } + + }]; + +} ++(void)deleteProject:(int)projectid withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block +{ + NSString* path = [NSString stringWithFormat:@"/projects/%d.json",projectid]; + + [[OZLNetworkBase sharedClient] deletePath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { + + if (block) { + NSLog(@"the repsonse:%@",responseObject); + int repondNumber = [responseObject intValue]; + block(repondNumber == 201,nil); + } + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + + + if (block) { + block(NO, error); + } + + }]; + +} + +#pragma mark - +#pragma mark issue api +(void)getIssueListForProject:(int)projectid withParams:(NSDictionary*)params andBlock:(void (^)(NSArray *result, NSError *error))block { NSString* path = [NSString stringWithFormat:@"/issues.json"]; @@ -105,7 +177,6 @@ block(issues,nil); } - } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (block) { @@ -139,4 +210,74 @@ }]; } ++(void)createIssue:(OZLModelIssue*)issueData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block +{ + NSString* path = [NSString stringWithFormat:@"/issues.json"]; + + //project info + NSMutableDictionary* paramsDic = [[NSMutableDictionary alloc] initWithDictionary:params]; + [paramsDic addEntriesFromDictionary:[issueData toParametersDic]]; + + [[OZLNetworkBase sharedClient] postPath:path parameters:paramsDic success:^(AFHTTPRequestOperation *operation, id responseObject) { + + if (block) { + NSLog(@"the repsonse:%@",responseObject); + int repondNumber = [responseObject intValue]; + block(repondNumber == 201,nil); + } + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + + if (block) { + block(NO, error); + } + + }]; +} ++(void)updateIssue:(OZLModelIssue*)issueData withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block +{ + NSString* path = [NSString stringWithFormat:@"/issues/%d.json",issueData.index]; + + //project info + NSMutableDictionary* paramsDic = [[NSMutableDictionary alloc] initWithDictionary:params]; + [paramsDic addEntriesFromDictionary:[issueData toParametersDic]]; + + [[OZLNetworkBase sharedClient] putPath:path parameters:paramsDic success:^(AFHTTPRequestOperation *operation, id responseObject) { + + if (block) { + NSLog(@"the repsonse:%@",responseObject); + int repondNumber = [responseObject intValue]; + block(repondNumber == 201,nil); + } + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + + if (block) { + block(NO, error); + } + + }]; +} + ++(void)deleteIssue:(int)issueid withParams:(NSDictionary*)params andBlock:(void (^)(BOOL success, NSError *error))block +{ + NSString* path = [NSString stringWithFormat:@"/issues/%d.json",issueid]; + + [[OZLNetworkBase sharedClient] deletePath:path parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { + + if (block) { + NSLog(@"the repsonse:%@",responseObject); + int repondNumber = [responseObject intValue]; + block(repondNumber == 201,nil); + } + + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { + + if (block) { + block(NO, error); + } + + }]; +} + @end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLAccountViewController.m b/RedmineMobile/RedmineMobile/ViewControllers/OZLAccountViewController.m index 97c0309..66cf454 100644 --- a/RedmineMobile/RedmineMobile/ViewControllers/OZLAccountViewController.m +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLAccountViewController.m @@ -52,10 +52,10 @@ - (void)viewDidLoad { [super viewDidLoad]; - [self changeSideViewOffset:40]; - - UIBarButtonItem* projectListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(showLeft)]; - [self.navigationItem setLeftBarButtonItem:projectListBtn]; +// [self changeSideViewOffset:40]; + +// UIBarButtonItem* projectListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(showProjectList)]; +// [self.navigationItem setLeftBarButtonItem:projectListBtn]; _redmineHomeURL.text = [[OZLSingleton sharedInstance] redmineHomeURL]; _redmineUserKey.text = [[OZLSingleton sharedInstance] redmineUserKey]; @@ -75,11 +75,14 @@ [self performSelector:@selector(preloadLeft) withObject:nil afterDelay:0.3]; } -- (void) showLeft { - OZLProjectListViewController *c = [[OZLProjectListViewController alloc] initWithNibName:@"OZLProjectListViewController" bundle:nil]; - [c setNeedRefresh:YES]; - [self.revealSideViewController pushViewController:c onDirection:PPRevealSideDirectionLeft withOffset:_sideviewOffset animated:YES]; - PP_RELEASE(c); +- (void) showProjectList { + [self.navigationController popViewControllerAnimated:YES]; + +// OZLProjectListViewController *c = [[OZLProjectListViewController alloc] initWithNibName:@"OZLProjectListViewController" bundle:nil]; +// [c setNeedRefresh:YES]; +// UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:c]; +// [self.revealSideViewController pushViewController:navigationController onDirection:PPRevealSideDirectionLeft withOffset:_sideviewOffset animated:YES]; +// PP_RELEASE(c); } - (IBAction)changeSideViewOffset:(int)offset { @@ -109,6 +112,6 @@ [[OZLSingleton sharedInstance] setRedmineUserKey:_redmineUserKey.text]; [[OZLSingleton sharedInstance] setRedmineHomeURL:_redmineHomeURL.text]; - [self showLeft]; + [self showProjectList]; } @end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.h b/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.h new file mode 100644 index 0000000..e239033 --- /dev/null +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.h @@ -0,0 +1,15 @@ +// +// OZLIssueCreateViewController.h +// RedmineMobile +// +// Created by lizhijie on 7/16/13. +// Copyright (c) 2013 Lee Zhijie. All rights reserved. +// + +#import + +@interface OZLIssueCreateViewController : UIViewController +- (IBAction)onCancel:(id)sender; +- (IBAction)onSave:(id)sender; + +@end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.m b/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.m new file mode 100644 index 0000000..6e9f417 --- /dev/null +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.m @@ -0,0 +1,44 @@ +// +// OZLIssueCreateViewController.m +// RedmineMobile +// +// Created by lizhijie on 7/16/13. +// Copyright (c) 2013 Lee Zhijie. All rights reserved. +// + +#import "OZLIssueCreateViewController.h" + +@interface OZLIssueCreateViewController () + +@end + +@implementation OZLIssueCreateViewController + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view from its nib. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)onCancel:(id)sender { + [self dismissModalViewControllerAnimated:YES]; +} + +- (IBAction)onSave:(id)sender { +} +@end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.xib b/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.xib new file mode 100644 index 0000000..0ba1228 --- /dev/null +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLIssueCreateViewController.xib @@ -0,0 +1,316 @@ + + + + 1552 + 11G63 + 3084 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBNSLayoutConstraint + IBProxyObject + IBUIBarButtonItem + IBUINavigationBar + IBUINavigationItem + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 290 + {320, 44} + + + + _NS:9 + IBCocoaTouchFramework + + + + Title + + Cancel + IBCocoaTouchFramework + 1 + + + + Save + IBCocoaTouchFramework + 1 + + + IBCocoaTouchFramework + + + + + {{0, 20}, {320, 548}} + + + + + 3 + MQA + + 2 + + + + + IBUIScreenMetrics + + YES + + + + + + {320, 568} + {568, 320} + + + IBCocoaTouchFramework + Retina 4 Full Screen + 2 + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + onCancel: + + + + 11 + + + + onSave: + + + + 12 + + + + + + 0 + + + + + + 1 + + + + + + 6 + 0 + + 6 + 1 + + 0.0 + + 1000 + + 8 + 29 + 3 + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 8 + 29 + 3 + + + + 3 + 0 + + 3 + 1 + + 0.0 + + 1000 + + 8 + 29 + 3 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + + + + 5 + + + + + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + + + OZLIssueCreateViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 12 + + + + + NSLayoutConstraint + NSObject + + IBProjectSource + ./Classes/NSLayoutConstraint.h + + + + OZLIssueCreateViewController + UIViewController + + id + id + + + + onCancel: + id + + + onSave: + id + + + + IBProjectSource + ./Classes/OZLIssueCreateViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + YES + 2083 + + diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.h b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.h new file mode 100644 index 0000000..0308dac --- /dev/null +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.h @@ -0,0 +1,15 @@ +// +// OZLProjectCreateViewController.h +// RedmineMobile +// +// Created by lizhijie on 7/16/13. +// Copyright (c) 2013 Lee Zhijie. All rights reserved. +// + +#import + +@interface OZLProjectCreateViewController : UIViewController +- (IBAction)onCancel:(id)sender; +- (IBAction)onSave:(id)sender; + +@end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.m b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.m new file mode 100644 index 0000000..c2fee8d --- /dev/null +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.m @@ -0,0 +1,46 @@ +// +// OZLProjectCreateViewController.m +// RedmineMobile +// +// Created by lizhijie on 7/16/13. +// Copyright (c) 2013 Lee Zhijie. All rights reserved. +// + +#import "OZLProjectCreateViewController.h" + +@interface OZLProjectCreateViewController () + +@end + +@implementation OZLProjectCreateViewController + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + // Custom initialization + } + return self; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)onCancel:(id)sender { + + [self dismissModalViewControllerAnimated:YES]; +} + +- (IBAction)onSave:(id)sender { +} + +@end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.xib b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.xib new file mode 100644 index 0000000..41cb196 --- /dev/null +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectCreateViewController.xib @@ -0,0 +1,207 @@ + + + + 1552 + 11G63 + 3084 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBProxyObject + IBUIBarButtonItem + IBUINavigationBar + IBUINavigationItem + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 290 + {320, 44} + + + _NS:9 + IBCocoaTouchFramework + + + + Title + + Cancel + IBCocoaTouchFramework + 1 + + + + Save + IBCocoaTouchFramework + 1 + + + IBCocoaTouchFramework + + + + + {{0, 20}, {320, 548}} + + + + 3 + MQA + + 2 + + + + + IBUIScreenMetrics + + YES + + + + + + {320, 568} + {568, 320} + + + IBCocoaTouchFramework + Retina 4 Full Screen + 2 + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + onCancel: + + + + 10 + + + + onSave: + + + + 11 + + + + + + 0 + + + + + + 1 + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 4 + + + + + + + + 5 + + + + + + + + + 8 + + + + + 9 + + + + + + + OZLProjectCreateViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 11 + + + 0 + IBCocoaTouchFramework + YES + 3 + 2083 + + diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.h b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.h index 960535d..cb1b7da 100644 --- a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.h +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.h @@ -33,6 +33,7 @@ @property (nonatomic) BOOL needRefresh; @property (strong, nonatomic) IBOutlet UITableView *projectsTableview; - (IBAction)showAccountView:(id)sender; +- (IBAction)createProject:(id)sender; @end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.m b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.m index 9429daf..f743cf7 100644 --- a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.m +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.m @@ -30,6 +30,7 @@ #import "PPRevealSideViewController.h" #import "OZLProjectViewController.h" #import "OZLAccountViewController.h" +#import "OZLProjectCreateViewController.h" #import "OZLNetwork.h" #import "OZLModelProject.h" #import "MBProgressHUD.h" @@ -62,15 +63,16 @@ [self.view addSubview:_HUD]; _HUD.labelText = @"Refreshing..."; - UIBarButtonItem* accountBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:self action:@selector(showAccountView:)]; [self.navigationItem setLeftBarButtonItem:accountBtn]; + + [self.navigationItem setTitle:@"Projects"]; } -(void) viewWillAppear:(BOOL)animated { // if (_needRefresh) { - _needRefresh = NO; +// _needRefresh = NO; [_HUD show:YES]; // refresh project list @@ -94,17 +96,29 @@ OZLProjectViewController *c = [[OZLProjectViewController alloc] initWithNibName:@"OZLProjectViewController" bundle:nil]; [c setProjectData:project]; - UINavigationController *n = [[UINavigationController alloc] initWithRootViewController:c]; - [self.revealSideViewController popViewControllerWithNewCenterController:n - animated:YES]; + + [self.navigationController pushViewController:c animated:YES]; + +// UINavigationController *n = [[UINavigationController alloc] initWithRootViewController:c]; +// [self.revealSideViewController popViewControllerWithNewCenterController:n +// animated:YES]; } - (IBAction)showAccountView:(id)sender { OZLAccountViewController *c = [[OZLAccountViewController alloc] initWithNibName:@"OZLAccountViewController" bundle:nil]; - UINavigationController *n = [[UINavigationController alloc] initWithRootViewController:c]; - [self.revealSideViewController popViewControllerWithNewCenterController:n - animated:YES]; + + [self.navigationController pushViewController:c animated:YES]; + +// UINavigationController *n = [[UINavigationController alloc] initWithRootViewController:c]; +// [self.revealSideViewController popViewControllerWithNewCenterController:n +// animated:YES]; } + +- (IBAction)createProject:(id)sender { + OZLProjectCreateViewController* creator = [[OZLProjectCreateViewController alloc] initWithNibName:@"OZLProjectCreateViewController" bundle:nil]; + [self.navigationController presentModalViewController:creator animated:YES]; +} + - (void)viewDidUnload { [self setProjectsTableview:nil]; [super viewDidUnload]; diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.xib b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.xib index 8f9cb11..f3ede64 100644 --- a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.xib +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectListViewController.xib @@ -42,7 +42,6 @@ 274 {320, 460} - _NS:9 3 @@ -63,7 +62,6 @@ 266 {{0, 460}, {320, 44}} - _NS:9 NO NO @@ -80,8 +78,6 @@ {{0, 64}, {320, 504}} - - 3 MQA @@ -131,6 +127,14 @@ 20 + + + createProject: + + + + 23 + @@ -195,42 +199,9 @@ - 22 - - - - - OZLProjectListViewController - UIViewController - - showAccountView: - id - - - showAccountView: - - showAccountView: - id - - - - projectsTableview - UITableView - - - projectsTableview - - projectsTableview - UITableView - - - - IBProjectSource - ./Classes/OZLProjectListViewController.h - - - + 23 + 0 IBCocoaTouchFramework YES diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.h b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.h index 06029b5..e4ef196 100644 --- a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.h +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.h @@ -32,4 +32,5 @@ @interface OZLProjectViewController : UIViewController @property (weak, nonatomic) IBOutlet UITableView *issuesTableview; @property (nonatomic,strong) OZLModelProject* projectData; +- (IBAction)onNewIssue:(id)sender; @end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.m b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.m index bc8a6fe..a1ebddf 100644 --- a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.m +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.m @@ -33,6 +33,7 @@ #import "MBProgressHUD.h" #import "OZLProjectDetailViewController.h" #import "OZLIssueDetailViewController.h" +#import "OZLIssueCreateViewController.h" @interface OZLProjectViewController () { @@ -57,10 +58,10 @@ - (void)viewDidLoad { [super viewDidLoad]; - [self changeSideViewOffset:40]; +// [self changeSideViewOffset:40]; - UIBarButtonItem* projectListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:self action:@selector(showLeft)]; - [self.navigationItem setLeftBarButtonItem:projectListBtn]; +// UIBarButtonItem* projectListBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemOrganize target:self action:@selector(showProjectList)]; +// [self.navigationItem setLeftBarButtonItem:projectListBtn]; UIBarButtonItem* inforBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:self action:@selector(showProjectDetail)]; [self.navigationItem setRightBarButtonItem:inforBtn]; @@ -109,17 +110,20 @@ } - (void) preloadLeft { - OZLProjectListViewController *c = [[OZLProjectListViewController alloc] initWithNibName:@"OZLProjectListViewController" bundle:nil]; - [self.revealSideViewController preloadViewController:c - forSide:PPRevealSideDirectionLeft - withOffset:_sideviewOffset]; - PP_RELEASE(c); +// OZLProjectListViewController *c = [[OZLProjectListViewController alloc] initWithNibName:@"OZLProjectListViewController" bundle:nil]; +// [self.revealSideViewController preloadViewController:c +// forSide:PPRevealSideDirectionLeft +// withOffset:_sideviewOffset]; +// PP_RELEASE(c); } -- (void) showLeft { - OZLProjectListViewController *c = [[OZLProjectListViewController alloc] initWithNibName:@"OZLProjectListViewController" bundle:nil]; - [self.revealSideViewController pushViewController:c onDirection:PPRevealSideDirectionLeft withOffset:_sideviewOffset animated:YES]; - PP_RELEASE(c); +- (void) showProjectList { + [self.navigationController popViewControllerAnimated:YES]; + +// OZLProjectListViewController *c = [[OZLProjectListViewController alloc] initWithNibName:@"OZLProjectListViewController" bundle:nil]; +// UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:c]; +// [self.revealSideViewController pushViewController:navigationController onDirection:PPRevealSideDirectionLeft withOffset:_sideviewOffset animated:YES]; +// PP_RELEASE(c); } - (IBAction)changeSideViewOffset:(int)offset { @@ -230,4 +234,8 @@ } +- (IBAction)onNewIssue:(id)sender { + OZLIssueCreateViewController* creator = [[OZLIssueCreateViewController alloc] initWithNibName:@"OZLIssueCreateViewController" bundle:nil]; + [self.navigationController presentModalViewController:creator animated:YES]; +} @end diff --git a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.xib b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.xib index 052ced7..f54c05c 100644 --- a/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.xib +++ b/RedmineMobile/RedmineMobile/ViewControllers/OZLProjectViewController.xib @@ -129,6 +129,14 @@ 9 + + + onNewIssue: + + + + 12 + dataSource @@ -208,7 +216,7 @@ - 11 + 12 0