mirror of
https://github.com/SoPat712/YTLitePlus.git
synced 2025-08-25 11:55:28 -04:00
added files via upload
This commit is contained in:
119
Tweaks/FLEX/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.m
Normal file
119
Tweaks/FLEX/GlobalStateExplorers/SystemLog/FLEXSystemLogCell.m
Normal file
@@ -0,0 +1,119 @@
|
||||
//
|
||||
// FLEXSystemLogCell.m
|
||||
// FLEX
|
||||
//
|
||||
// Created by Ryan Olson on 1/25/15.
|
||||
// Copyright (c) 2020 FLEX Team. All rights reserved.
|
||||
//
|
||||
|
||||
#import "FLEXSystemLogCell.h"
|
||||
#import "FLEXSystemLogMessage.h"
|
||||
#import "UIFont+FLEX.h"
|
||||
|
||||
NSString *const kFLEXSystemLogCellIdentifier = @"FLEXSystemLogCellIdentifier";
|
||||
|
||||
@interface FLEXSystemLogCell ()
|
||||
|
||||
@property (nonatomic) UILabel *logMessageLabel;
|
||||
@property (nonatomic) NSAttributedString *logMessageAttributedText;
|
||||
|
||||
@end
|
||||
|
||||
@implementation FLEXSystemLogCell
|
||||
|
||||
- (void)postInit {
|
||||
[super postInit];
|
||||
|
||||
self.logMessageLabel = [UILabel new];
|
||||
self.logMessageLabel.numberOfLines = 0;
|
||||
self.separatorInset = UIEdgeInsetsZero;
|
||||
self.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
[self.contentView addSubview:self.logMessageLabel];
|
||||
}
|
||||
|
||||
- (void)setLogMessage:(FLEXSystemLogMessage *)logMessage {
|
||||
if (![_logMessage isEqual:logMessage]) {
|
||||
_logMessage = logMessage;
|
||||
self.logMessageAttributedText = nil;
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setHighlightedText:(NSString *)highlightedText {
|
||||
if (![_highlightedText isEqual:highlightedText]) {
|
||||
_highlightedText = highlightedText;
|
||||
self.logMessageAttributedText = nil;
|
||||
[self setNeedsLayout];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSAttributedString *)logMessageAttributedText {
|
||||
if (!_logMessageAttributedText) {
|
||||
_logMessageAttributedText = [[self class] attributedTextForLogMessage:self.logMessage highlightedText:self.highlightedText];
|
||||
}
|
||||
return _logMessageAttributedText;
|
||||
}
|
||||
|
||||
static const UIEdgeInsets kFLEXLogMessageCellInsets = {10.0, 10.0, 10.0, 10.0};
|
||||
|
||||
- (void)layoutSubviews {
|
||||
[super layoutSubviews];
|
||||
|
||||
self.logMessageLabel.attributedText = self.logMessageAttributedText;
|
||||
self.logMessageLabel.frame = UIEdgeInsetsInsetRect(self.contentView.bounds, kFLEXLogMessageCellInsets);
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Stateless helpers
|
||||
|
||||
+ (NSAttributedString *)attributedTextForLogMessage:(FLEXSystemLogMessage *)logMessage highlightedText:(NSString *)highlightedText {
|
||||
NSString *text = [self displayedTextForLogMessage:logMessage];
|
||||
NSDictionary<NSString *, id> *attributes = @{ NSFontAttributeName : UIFont.flex_codeFont };
|
||||
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes];
|
||||
|
||||
if (highlightedText.length > 0) {
|
||||
NSMutableAttributedString *mutableAttributedText = attributedText.mutableCopy;
|
||||
NSMutableDictionary<NSString *, id> *highlightAttributes = attributes.mutableCopy;
|
||||
highlightAttributes[NSBackgroundColorAttributeName] = UIColor.yellowColor;
|
||||
|
||||
NSRange remainingSearchRange = NSMakeRange(0, text.length);
|
||||
while (remainingSearchRange.location < text.length) {
|
||||
remainingSearchRange.length = text.length - remainingSearchRange.location;
|
||||
NSRange foundRange = [text rangeOfString:highlightedText options:NSCaseInsensitiveSearch range:remainingSearchRange];
|
||||
if (foundRange.location != NSNotFound) {
|
||||
remainingSearchRange.location = foundRange.location + foundRange.length;
|
||||
[mutableAttributedText setAttributes:highlightAttributes range:foundRange];
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
attributedText = mutableAttributedText;
|
||||
}
|
||||
|
||||
return attributedText;
|
||||
}
|
||||
|
||||
+ (NSString *)displayedTextForLogMessage:(FLEXSystemLogMessage *)logMessage {
|
||||
return [NSString stringWithFormat:@"%@: %@", [self logTimeStringFromDate:logMessage.date], logMessage.messageText];
|
||||
}
|
||||
|
||||
+ (CGFloat)preferredHeightForLogMessage:(FLEXSystemLogMessage *)logMessage inWidth:(CGFloat)width {
|
||||
UIEdgeInsets insets = kFLEXLogMessageCellInsets;
|
||||
CGFloat availableWidth = width - insets.left - insets.right;
|
||||
NSAttributedString *attributedLogText = [self attributedTextForLogMessage:logMessage highlightedText:nil];
|
||||
CGSize labelSize = [attributedLogText boundingRectWithSize:CGSizeMake(availableWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading context:nil].size;
|
||||
return labelSize.height + insets.top + insets.bottom;
|
||||
}
|
||||
|
||||
+ (NSString *)logTimeStringFromDate:(NSDate *)date {
|
||||
static NSDateFormatter *formatter = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
formatter = [NSDateFormatter new];
|
||||
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss.SSS";
|
||||
});
|
||||
|
||||
return [formatter stringFromDate:date];
|
||||
}
|
||||
|
||||
@end
|
Reference in New Issue
Block a user