// // ICRTaskDetailContentView.m // XFFruit // // Created by Xummer on 4/12/15. // Copyright (c) 2015 Xummer. All rights reserved. // #import "ICRTaskDetailContentView.h" #define TASK_CONTENT_LABEL_VERTICAL_MARGIN (10.0f) #define TASK_CONTENT_LABEL_HORIZON_MARGIN (15.0f) #define TASK_CONTENT_LABEL_INNER_GAP (5.0f) @interface ICRTaskDetailContentView () { BOOL m_bIsAttach; } @property (strong, nonatomic) IBTUILabel *m_titleLabel; @property (strong, nonatomic) IBTUILabel *m_titleValueLabel; @property (strong, nonatomic) IBTUILabel *m_storeLabel; @property (strong, nonatomic) IBTUILabel *m_storeValueLabel; @property (strong, nonatomic) IBTUILabel *m_contentLabel; @property (strong, nonatomic) IBTUILabel *m_contentValueLabel; @property (strong, nonatomic) IBTUILabel *m_deadlineLabel; @property (strong, nonatomic) IBTUILabel *m_deadlineValueLabel; @property (strong, nonatomic) IBTUILabel *m_createTimeLabel; @property (strong, nonatomic) IBTUILabel *m_createTimeValueLabel; @property (strong, nonatomic) IBTUILabel *m_creatorLabel; @property (strong, nonatomic) IBTUILabel *m_creatorValueLabel; @property (strong, nonatomic) UIImageView *m_attachImageView; @end @implementation ICRTaskDetailContentView #pragma mark - Life Cycle - (instancetype)initWithIsAttach:(BOOL)bIsAttach { self = [super init]; if (!self) { return nil; } m_bIsAttach = bIsAttach; return self; } - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (!self) { return nil; } [self initSubviews]; return self; } - (void)layoutSubviews { [super layoutSubviews]; CGFloat fMaxW = self.width - 2 * TASK_CONTENT_LABEL_HORIZON_MARGIN; [_m_titleLabel sizeToFit]; _m_titleLabel.origin = (CGPoint){ .x = TASK_CONTENT_LABEL_HORIZON_MARGIN, .y = TASK_CONTENT_LABEL_VERTICAL_MARGIN }; [self updateFrameWithBaseView:_m_titleLabel ForView:_m_titleValueLabel]; [_m_storeLabel sizeToFit]; _m_storeLabel.origin = (CGPoint){ .x = _m_titleLabel.left, .y = _m_titleValueLabel.bottom + TASK_CONTENT_LABEL_INNER_GAP }; [self updateFrameWithBaseView:_m_storeLabel ForView:_m_storeValueLabel]; [_m_contentLabel sizeToFit]; _m_contentLabel.origin = (CGPoint){ .x = _m_titleLabel.left, .y = _m_storeValueLabel.bottom + TASK_CONTENT_LABEL_INNER_GAP }; [self updateFrameWithBaseView:_m_contentLabel ForView:_m_contentValueLabel]; [_m_deadlineLabel sizeToFit]; _m_deadlineLabel.origin = (CGPoint){ .x = _m_titleLabel.left, .y = _m_contentValueLabel.bottom + TASK_CONTENT_LABEL_INNER_GAP }; [self updateFrameWithBaseView:_m_deadlineLabel ForView:_m_deadlineValueLabel]; [_m_createTimeLabel sizeToFit]; _m_createTimeLabel.origin = (CGPoint){ .x = _m_titleLabel.left, .y = _m_deadlineValueLabel.bottom + TASK_CONTENT_LABEL_INNER_GAP }; [self updateFrameWithBaseView:_m_createTimeLabel ForView:_m_createTimeValueLabel]; [_m_creatorLabel sizeToFit]; _m_creatorLabel.origin = (CGPoint){ .x = _m_titleLabel.left, .y = _m_createTimeValueLabel.bottom + TASK_CONTENT_LABEL_INNER_GAP }; [self updateFrameWithBaseView:_m_creatorLabel ForView:_m_creatorValueLabel]; CGFloat dy = _m_creatorValueLabel.bottom + TASK_CONTENT_LABEL_INNER_GAP; if (!_m_attachImageView.hidden) { UIImage *image = _m_attachImageView.image; CGFloat hWRatio = image ? (image.size.height / image.size.width) : 1; _m_attachImageView.frame = (CGRect){ .origin.x = _m_titleLabel.left, .origin.y = dy, .size.width = fMaxW, .size.height = fMaxW * hWRatio }; dy = _m_attachImageView.bottom + TASK_CONTENT_LABEL_INNER_GAP; } if (!_m_startBtn.hidden) { CGFloat dx = TASK_CONTENT_LABEL_HORIZON_MARGIN; self.m_startBtn.frame = (CGRect){ .origin.x = dx, .origin.y = dy + 20, .size.width = fMaxW, .size.height = IBT_GROUP_CELL_BUTTON_HEIGHT }; dy = _m_startBtn.bottom + 20; } self.height = dy; } #pragma mark - Private Method - (void)initSubviews { self.m_titleLabel = [[self class] titleLabelWithText:[IBTCommon localizableString:@"Task Title"]]; [self addSubview:_m_titleLabel]; self.m_storeLabel = [[self class] titleLabelWithText:[IBTCommon localizableString:@"Store"]]; [self addSubview:_m_storeLabel]; self.m_contentLabel = [[self class] titleLabelWithText:[IBTCommon localizableString:@"Task Content"]]; [self addSubview:_m_contentLabel]; self.m_deadlineLabel = [[self class] titleLabelWithText:[IBTCommon localizableString:@"Task Deadline"]]; [self addSubview:_m_deadlineLabel]; self.m_createTimeLabel = [[self class] titleLabelWithText:[IBTCommon localizableString:@"Create Date"]]; [self addSubview:_m_createTimeLabel]; self.m_creatorLabel = [[self class] titleLabelWithText:[IBTCommon localizableString:@"Creator"]]; [self addSubview:_m_creatorLabel]; self.m_titleValueLabel = [[self class] valueLabel]; [self addSubview:_m_titleValueLabel]; self.m_storeValueLabel = [[self class] valueLabel]; [self addSubview:_m_storeValueLabel]; self.m_contentValueLabel = [[self class] valueLabel]; [self addSubview:_m_contentValueLabel]; self.m_deadlineValueLabel = [[self class] valueLabel]; [self addSubview:_m_deadlineValueLabel]; self.m_createTimeValueLabel = [[self class] valueLabel]; [self addSubview:_m_createTimeValueLabel]; self.m_creatorValueLabel = [[self class] valueLabel]; [self addSubview:_m_creatorValueLabel]; self.m_attachImageView = [[UIImageView alloc] init]; [self addSubview:_m_attachImageView]; self.m_startBtn = [IBTCustomButtom buttonWithTitle:[IBTCommon localizableString:@"Start Process"] color:ICR_ORANGE_BTN_COLOR target:nil action:nil]; [self addSubview:_m_startBtn]; } + (IBTUILabel *)titleLabelWithText:(NSString *)nsTitle { IBTUILabel *label = [[IBTUILabel alloc] init]; label.textAlignment = NSTextAlignmentLeft; label.textColor = [UIColor grayColor]; label.font = [UIFont systemFontOfSize:15.0f]; label.text = nsTitle; return label; } + (IBTUILabel *)valueLabel { IBTUILabel *label = [[IBTUILabel alloc] init]; label.numberOfLines = 0; label.textAlignment = NSTextAlignmentLeft; label.textColor = [UIColor blackColor]; label.font = [UIFont systemFontOfSize:17.0f]; return label; } - (void)updateFrameWithBaseView:(UIView *)baseView ForView:(UIView *)view { CGFloat fX, fY; CGFloat fMaxX = self.width - TASK_CONTENT_LABEL_HORIZON_MARGIN; if (m_bIsAttach) { fX = baseView.right + TASK_CONTENT_LABEL_INNER_GAP; fY = baseView.top; } else { fX = baseView.left; fY = baseView.bottom + TASK_CONTENT_LABEL_INNER_GAP; } CGSize size = CGSizeMake(fMaxX - fX, MAXFLOAT); size = [view widthLimitedSizeThatFits:size]; view.frame = (CGRect){ .origin.x = fX, .origin.y = fY, .size.width = size.width, .size.height = MAX(size.height, baseView.height) }; } @end #import "ICRTask.h" #import "ICRAttachment.h" @implementation ICRTaskDetailContentView (Configure) - (void)updateWithTask:(ICRTask *)task { self.m_titleValueLabel.text = task.title; self.m_storeValueLabel.text = task.storeCode; self.m_contentValueLabel.text = task.content; self.m_deadlineValueLabel.text = task.requireDate; self.m_createTimeValueLabel.text =task.createInfo[@"time"]; self.m_creatorValueLabel.text =task.createInfo[@"operator"][@"operName"] ; if (task.processResult) { self.m_startBtn.hidden = YES; } else if ([task.state isEqualToString:TaskState[ kICRTaskLocalAlloted ]]) { self.m_startBtn.hidden = NO; } else if (task.state.length > 0) { self.m_startBtn.hidden = YES; } else { if([task.state isEqualToString:TaskState[kICRTaskStatusAlloted]]) { self.m_startBtn.hidden = NO; } else { self.m_startBtn.hidden = YES; } } ICRDatabaseFetchBlock fetchBlk = ^FMResultSet *(FMDatabase *db) { NSString * sql = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ = ? ORDER BY %@", [ICRAttachment TableName], @"objectId", @"seq"]; return [db executeQuery:sql, task.uuid ]; }; __weak typeof(self)weakSelf = self; ICRDatabaseFetchResultsBlock fetchResultsBlk = ^(NSArray *fetchedObjects) { __strong __typeof(weakSelf)strongSelf = weakSelf; ICRAttachment *attach = [fetchedObjects firstObject]; if ([attach.fileName extensionIsImageType]) { strongSelf.m_attachImageView.hidden = NO; NSString *imgeUrl = [ICRHTTPController AttachmentUrlWithID:@( attach.aID )]; [strongSelf.m_attachImageView sd_setImageWithURL:[NSURL URLWithString:imgeUrl] placeholderImage:[UIImage imageWithColor:ICR_IMAGE_BG_COLOR] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { [strongSelf layoutSubviews]; }]; } else { strongSelf.m_attachImageView.hidden = YES; } [strongSelf layoutSubviews]; }; ICRDataBaseController *dbCtrl = [ICRDataBaseController sharedController]; [dbCtrl runFetchForClass:[ICRAttachment class] fetchBlock:fetchBlk fetchResultsBlock:fetchResultsBlk]; } @end