Use properties instead of ivars (#2453)

This commit is contained in:
Dmitry Serov
2022-02-22 16:04:20 +00:00
committed by GitHub
parent 95e30768c4
commit 54d1a02e92
103 changed files with 3653 additions and 3917 deletions

View File

@@ -19,6 +19,22 @@
@interface MessageWindowController ()
@property(nonatomic) IBOutlet NSTableView* fMessageTable;
@property(nonatomic) IBOutlet NSPopUpButton* fLevelButton;
@property(nonatomic) IBOutlet NSButton* fSaveButton;
@property(nonatomic) IBOutlet NSButton* fClearButton;
@property(nonatomic) IBOutlet NSSearchField* fFilterField;
@property(nonatomic) NSMutableArray* fMessages;
@property(nonatomic) NSMutableArray* fDisplayedMessages;
@property(nonatomic, copy) NSDictionary* fAttributes;
@property(nonatomic) NSTimer* fTimer;
@property(nonatomic) NSLock* fLock;
- (void)resizeColumn;
- (BOOL)shouldIncludeMessageForFilter:(NSString*)filterString message:(NSDictionary*)message;
- (void)updateListForFilter;
@@ -42,86 +58,86 @@
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(resizeColumn)
name:NSTableViewColumnDidResizeNotification
object:fMessageTable];
object:self.fMessageTable];
[window setContentBorderThickness:NSMinY(fMessageTable.enclosingScrollView.frame) forEdge:NSMinYEdge];
[window setContentBorderThickness:NSMinY(self.fMessageTable.enclosingScrollView.frame) forEdge:NSMinYEdge];
self.window.title = NSLocalizedString(@"Message Log", "Message window -> title");
//set images and text for popup button items
[fLevelButton itemAtIndex:LEVEL_ERROR].title = NSLocalizedString(@"Error", "Message window -> level string");
[fLevelButton itemAtIndex:LEVEL_INFO].title = NSLocalizedString(@"Info", "Message window -> level string");
[fLevelButton itemAtIndex:LEVEL_DEBUG].title = NSLocalizedString(@"Debug", "Message window -> level string");
[self.fLevelButton itemAtIndex:LEVEL_ERROR].title = NSLocalizedString(@"Error", "Message window -> level string");
[self.fLevelButton itemAtIndex:LEVEL_INFO].title = NSLocalizedString(@"Info", "Message window -> level string");
[self.fLevelButton itemAtIndex:LEVEL_DEBUG].title = NSLocalizedString(@"Debug", "Message window -> level string");
CGFloat const levelButtonOldWidth = NSWidth(fLevelButton.frame);
[fLevelButton sizeToFit];
CGFloat const levelButtonOldWidth = NSWidth(self.fLevelButton.frame);
[self.fLevelButton sizeToFit];
//set table column text
[fMessageTable tableColumnWithIdentifier:@"Date"].headerCell.title = NSLocalizedString(@"Date", "Message window -> table column");
[fMessageTable tableColumnWithIdentifier:@"Name"].headerCell.title = NSLocalizedString(@"Process", "Message window -> table column");
[fMessageTable tableColumnWithIdentifier:@"Message"].headerCell.title = NSLocalizedString(@"Message", "Message window -> table column");
[self.fMessageTable tableColumnWithIdentifier:@"Date"].headerCell.title = NSLocalizedString(@"Date", "Message window -> table column");
[self.fMessageTable tableColumnWithIdentifier:@"Name"].headerCell.title = NSLocalizedString(@"Process", "Message window -> table column");
[self.fMessageTable tableColumnWithIdentifier:@"Message"].headerCell.title = NSLocalizedString(@"Message", "Message window -> table column");
//set and size buttons
fSaveButton.title = [NSLocalizedString(@"Save", "Message window -> save button") stringByAppendingEllipsis];
[fSaveButton sizeToFit];
self.fSaveButton.title = [NSLocalizedString(@"Save", "Message window -> save button") stringByAppendingEllipsis];
[self.fSaveButton sizeToFit];
NSRect saveButtonFrame = fSaveButton.frame;
NSRect saveButtonFrame = self.fSaveButton.frame;
saveButtonFrame.size.width += 10.0;
saveButtonFrame.origin.x += NSWidth(fLevelButton.frame) - levelButtonOldWidth;
fSaveButton.frame = saveButtonFrame;
saveButtonFrame.origin.x += NSWidth(self.fLevelButton.frame) - levelButtonOldWidth;
self.fSaveButton.frame = saveButtonFrame;
CGFloat const oldClearButtonWidth = fClearButton.frame.size.width;
CGFloat const oldClearButtonWidth = self.fClearButton.frame.size.width;
fClearButton.title = NSLocalizedString(@"Clear", "Message window -> save button");
[fClearButton sizeToFit];
self.fClearButton.title = NSLocalizedString(@"Clear", "Message window -> save button");
[self.fClearButton sizeToFit];
NSRect clearButtonFrame = fClearButton.frame;
NSRect clearButtonFrame = self.fClearButton.frame;
clearButtonFrame.size.width = MAX(clearButtonFrame.size.width + 10.0, saveButtonFrame.size.width);
clearButtonFrame.origin.x -= NSWidth(clearButtonFrame) - oldClearButtonWidth;
fClearButton.frame = clearButtonFrame;
self.fClearButton.frame = clearButtonFrame;
[fFilterField.cell setPlaceholderString:NSLocalizedString(@"Filter", "Message window -> filter field")];
NSRect filterButtonFrame = fFilterField.frame;
[self.fFilterField.cell setPlaceholderString:NSLocalizedString(@"Filter", "Message window -> filter field")];
NSRect filterButtonFrame = self.fFilterField.frame;
filterButtonFrame.origin.x -= NSWidth(clearButtonFrame) - oldClearButtonWidth;
fFilterField.frame = filterButtonFrame;
self.fFilterField.frame = filterButtonFrame;
fAttributes = [[[fMessageTable tableColumnWithIdentifier:@"Message"].dataCell attributedStringValue] attributesAtIndex:0
self.fAttributes = [[[self.fMessageTable tableColumnWithIdentifier:@"Message"].dataCell attributedStringValue] attributesAtIndex:0
effectiveRange:NULL];
//select proper level in popup button
switch ([NSUserDefaults.standardUserDefaults integerForKey:@"MessageLevel"])
{
case TR_LOG_ERROR:
[fLevelButton selectItemAtIndex:LEVEL_ERROR];
[self.fLevelButton selectItemAtIndex:LEVEL_ERROR];
break;
case TR_LOG_INFO:
[fLevelButton selectItemAtIndex:LEVEL_INFO];
[self.fLevelButton selectItemAtIndex:LEVEL_INFO];
break;
case TR_LOG_DEBUG:
[fLevelButton selectItemAtIndex:LEVEL_DEBUG];
[self.fLevelButton selectItemAtIndex:LEVEL_DEBUG];
break;
default: //safety
[NSUserDefaults.standardUserDefaults setInteger:TR_LOG_ERROR forKey:@"MessageLevel"];
[fLevelButton selectItemAtIndex:LEVEL_ERROR];
[self.fLevelButton selectItemAtIndex:LEVEL_ERROR];
}
fMessages = [[NSMutableArray alloc] init];
fDisplayedMessages = [[NSMutableArray alloc] init];
self.fMessages = [[NSMutableArray alloc] init];
self.fDisplayedMessages = [[NSMutableArray alloc] init];
fLock = [[NSLock alloc] init];
self.fLock = [[NSLock alloc] init];
}
- (void)dealloc
{
[NSNotificationCenter.defaultCenter removeObserver:self];
[fTimer invalidate];
[_fTimer invalidate];
}
- (void)windowDidBecomeKey:(NSNotification*)notification
{
if (!fTimer)
if (!self.fTimer)
{
fTimer = [NSTimer scheduledTimerWithTimeInterval:UPDATE_SECONDS target:self selector:@selector(updateLog:) userInfo:nil
self.fTimer = [NSTimer scheduledTimerWithTimeInterval:UPDATE_SECONDS target:self selector:@selector(updateLog:) userInfo:nil
repeats:YES];
[self updateLog:nil];
}
@@ -129,8 +145,8 @@
- (void)windowWillClose:(id)sender
{
[fTimer invalidate];
fTimer = nil;
[self.fTimer invalidate];
self.fTimer = nil;
}
+ (void)restoreWindowWithIdentifier:(NSString*)identifier
@@ -145,8 +161,8 @@
- (void)window:(NSWindow*)window didDecodeRestorableState:(NSCoder*)coder
{
[fTimer invalidate];
fTimer = [NSTimer scheduledTimerWithTimeInterval:UPDATE_SECONDS target:self selector:@selector(updateLog:) userInfo:nil
[self.fTimer invalidate];
self.fTimer = [NSTimer scheduledTimerWithTimeInterval:UPDATE_SECONDS target:self selector:@selector(updateLog:) userInfo:nil
repeats:YES];
[self updateLog:nil];
}
@@ -159,15 +175,15 @@
return;
}
[fLock lock];
[self.fLock lock];
static NSUInteger currentIndex = 0;
NSScroller* scroller = fMessageTable.enclosingScrollView.verticalScroller;
NSScroller* scroller = self.fMessageTable.enclosingScrollView.verticalScroller;
BOOL const shouldScroll = currentIndex == 0 || scroller.floatValue == 1.0 || scroller.hidden || scroller.knobProportion == 1.0;
NSInteger const maxLevel = [NSUserDefaults.standardUserDefaults integerForKey:@"MessageLevel"];
NSString* filterString = fFilterField.stringValue;
NSString* filterString = self.fFilterField.stringValue;
BOOL changed = NO;
@@ -185,51 +201,51 @@
@"Name" : name,
@"File" : file
};
[fMessages addObject:message];
[self.fMessages addObject:message];
if (currentMessage->level <= maxLevel && [self shouldIncludeMessageForFilter:filterString message:message])
{
[fDisplayedMessages addObject:message];
[self.fDisplayedMessages addObject:message];
changed = YES;
}
}
if (fMessages.count > TR_LOG_MAX_QUEUE_LENGTH)
if (self.fMessages.count > TR_LOG_MAX_QUEUE_LENGTH)
{
NSUInteger const oldCount = fDisplayedMessages.count;
NSUInteger const oldCount = self.fDisplayedMessages.count;
NSIndexSet* removeIndexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, fMessages.count - TR_LOG_MAX_QUEUE_LENGTH)];
NSArray* itemsToRemove = [fMessages objectsAtIndexes:removeIndexes];
NSIndexSet* removeIndexes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.fMessages.count - TR_LOG_MAX_QUEUE_LENGTH)];
NSArray* itemsToRemove = [self.fMessages objectsAtIndexes:removeIndexes];
[fMessages removeObjectsAtIndexes:removeIndexes];
[fDisplayedMessages removeObjectsInArray:itemsToRemove];
[self.fMessages removeObjectsAtIndexes:removeIndexes];
[self.fDisplayedMessages removeObjectsInArray:itemsToRemove];
changed |= oldCount > fDisplayedMessages.count;
changed |= oldCount > self.fDisplayedMessages.count;
}
if (changed)
{
[fDisplayedMessages sortUsingDescriptors:fMessageTable.sortDescriptors];
[self.fDisplayedMessages sortUsingDescriptors:self.fMessageTable.sortDescriptors];
[fMessageTable reloadData];
[self.fMessageTable reloadData];
if (shouldScroll)
[fMessageTable scrollRowToVisible:fMessageTable.numberOfRows - 1];
[self.fMessageTable scrollRowToVisible:self.fMessageTable.numberOfRows - 1];
}
[fLock unlock];
[self.fLock unlock];
tr_logFreeQueue(messages);
}
- (NSInteger)numberOfRowsInTableView:(NSTableView*)tableView
{
return fDisplayedMessages.count;
return self.fDisplayedMessages.count;
}
- (id)tableView:(NSTableView*)tableView objectValueForTableColumn:(NSTableColumn*)column row:(NSInteger)row
{
NSString* ident = column.identifier;
NSDictionary* message = fDisplayedMessages[row];
NSDictionary* message = self.fDisplayedMessages[row];
if ([ident isEqualToString:@"Date"])
{
@@ -264,18 +280,18 @@
#warning don't cut off end
- (CGFloat)tableView:(NSTableView*)tableView heightOfRow:(NSInteger)row
{
NSString* message = fDisplayedMessages[row][@"Message"];
NSString* message = self.fDisplayedMessages[row][@"Message"];
NSTableColumn* column = [tableView tableColumnWithIdentifier:@"Message"];
CGFloat const count = floorf([message sizeWithAttributes:fAttributes].width / column.width);
CGFloat const count = floorf([message sizeWithAttributes:self.fAttributes].width / column.width);
return tableView.rowHeight * (count + 1.0);
}
- (void)tableView:(NSTableView*)tableView sortDescriptorsDidChange:(NSArray*)oldDescriptors
{
[fDisplayedMessages sortUsingDescriptors:fMessageTable.sortDescriptors];
[fMessageTable reloadData];
[self.fDisplayedMessages sortUsingDescriptors:self.fMessageTable.sortDescriptors];
[self.fMessageTable reloadData];
}
- (NSString*)tableView:(NSTableView*)tableView
@@ -285,16 +301,16 @@
row:(NSInteger)row
mouseLocation:(NSPoint)mouseLocation
{
NSDictionary* message = fDisplayedMessages[row];
NSDictionary* message = self.fDisplayedMessages[row];
return message[@"File"];
}
- (void)copy:(id)sender
{
NSIndexSet* indexes = fMessageTable.selectedRowIndexes;
NSIndexSet* indexes = self.fMessageTable.selectedRowIndexes;
NSMutableArray* messageStrings = [NSMutableArray arrayWithCapacity:indexes.count];
for (NSDictionary* message in [fDisplayedMessages objectsAtIndexes:indexes])
for (NSDictionary* message in [self.fDisplayedMessages objectsAtIndexes:indexes])
{
[messageStrings addObject:[self stringForMessage:message]];
}
@@ -312,7 +328,7 @@
if (action == @selector(copy:))
{
return fMessageTable.numberOfSelectedRows > 0;
return self.fMessageTable.numberOfSelectedRows > 0;
}
return YES;
@@ -321,7 +337,7 @@
- (void)changeLevel:(id)sender
{
NSInteger level;
switch (fLevelButton.indexOfSelectedItem)
switch (self.fLevelButton.indexOfSelectedItem)
{
case LEVEL_ERROR:
level = TR_LOG_ERROR;
@@ -333,7 +349,7 @@
level = TR_LOG_DEBUG;
break;
default:
NSAssert1(NO, @"Unknown message log level: %ld", [fLevelButton indexOfSelectedItem]);
NSAssert1(NO, @"Unknown message log level: %ld", [self.fLevelButton indexOfSelectedItem]);
level = TR_LOG_INFO;
}
@@ -344,37 +360,37 @@
[NSUserDefaults.standardUserDefaults setInteger:level forKey:@"MessageLevel"];
[fLock lock];
[self.fLock lock];
[self updateListForFilter];
[fLock unlock];
[self.fLock unlock];
}
- (void)changeFilter:(id)sender
{
[fLock lock];
[self.fLock lock];
[self updateListForFilter];
[fLock unlock];
[self.fLock unlock];
}
- (void)clearLog:(id)sender
{
[fLock lock];
[self.fLock lock];
[fMessages removeAllObjects];
[self.fMessages removeAllObjects];
[fMessageTable beginUpdates];
[fMessageTable removeRowsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, fDisplayedMessages.count)]
[self.fMessageTable beginUpdates];
[self.fMessageTable removeRowsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.fDisplayedMessages.count)]
withAnimation:NSTableViewAnimationSlideLeft];
[fDisplayedMessages removeAllObjects];
[self.fDisplayedMessages removeAllObjects];
[fMessageTable endUpdates];
[self.fMessageTable endUpdates];
[fLock unlock];
[self.fLock unlock];
}
- (void)writeToFile:(id)sender
@@ -391,7 +407,7 @@
//make the array sorted by date
NSSortDescriptor* descriptor = [NSSortDescriptor sortDescriptorWithKey:@"Index" ascending:YES];
NSArray* descriptors = @[ descriptor ];
NSArray* sortedMessages = [fDisplayedMessages sortedArrayUsingDescriptors:descriptors];
NSArray* sortedMessages = [self.fDisplayedMessages sortedArrayUsingDescriptors:descriptors];
//create the text to output
NSMutableArray* messageStrings = [NSMutableArray arrayWithCapacity:sortedMessages.count];
@@ -418,9 +434,11 @@
}];
}
#pragma mark - Private
- (void)resizeColumn
{
[fMessageTable noteHeightOfRowsWithIndexesChanged:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, fMessageTable.numberOfRows)]];
[self.fMessageTable noteHeightOfRowsWithIndexesChanged:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, self.fMessageTable.numberOfRows)]];
}
- (BOOL)shouldIncludeMessageForFilter:(NSString*)filterString message:(NSDictionary*)message
@@ -438,17 +456,17 @@
- (void)updateListForFilter
{
NSInteger const level = [NSUserDefaults.standardUserDefaults integerForKey:@"MessageLevel"];
NSString* filterString = fFilterField.stringValue;
NSString* filterString = self.fFilterField.stringValue;
NSIndexSet* indexes = [fMessages indexesOfObjectsWithOptions:NSEnumerationConcurrent
NSIndexSet* indexes = [self.fMessages indexesOfObjectsWithOptions:NSEnumerationConcurrent
passingTest:^BOOL(id message, NSUInteger idx, BOOL* stop) {
return [((NSDictionary*)message)[@"Level"] integerValue] <= level &&
[self shouldIncludeMessageForFilter:filterString message:message];
}];
NSArray* tempMessages = [[fMessages objectsAtIndexes:indexes] sortedArrayUsingDescriptors:fMessageTable.sortDescriptors];
NSArray* tempMessages = [[self.fMessages objectsAtIndexes:indexes] sortedArrayUsingDescriptors:self.fMessageTable.sortDescriptors];
[fMessageTable beginUpdates];
[self.fMessageTable beginUpdates];
//figure out which rows were added/moved
NSUInteger currentIndex = 0, totalCount = 0;
@@ -457,9 +475,9 @@
for (NSDictionary* message in tempMessages)
{
NSUInteger const previousIndex = [fDisplayedMessages
NSUInteger const previousIndex = [self.fDisplayedMessages
indexOfObject:message
inRange:NSMakeRange(currentIndex, fDisplayedMessages.count - currentIndex)];
inRange:NSMakeRange(currentIndex, self.fDisplayedMessages.count - currentIndex)];
if (previousIndex == NSNotFound)
{
[itemsToAdd addObject:message];
@@ -469,8 +487,8 @@
{
if (previousIndex != currentIndex)
{
[fDisplayedMessages moveObjectAtIndex:previousIndex toIndex:currentIndex];
[fMessageTable moveRowAtIndex:previousIndex toIndex:currentIndex];
[self.fDisplayedMessages moveObjectAtIndex:previousIndex toIndex:currentIndex];
[self.fMessageTable moveRowAtIndex:previousIndex toIndex:currentIndex];
}
++currentIndex;
}
@@ -479,21 +497,21 @@
}
//remove trailing items - those are the unused
if (currentIndex < fDisplayedMessages.count)
if (currentIndex < self.fDisplayedMessages.count)
{
NSRange const removeRange = NSMakeRange(currentIndex, fDisplayedMessages.count - currentIndex);
[fDisplayedMessages removeObjectsInRange:removeRange];
[fMessageTable removeRowsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:removeRange]
NSRange const removeRange = NSMakeRange(currentIndex, self.fDisplayedMessages.count - currentIndex);
[self.fDisplayedMessages removeObjectsInRange:removeRange];
[self.fMessageTable removeRowsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:removeRange]
withAnimation:NSTableViewAnimationSlideDown];
}
//add new items
[fDisplayedMessages insertObjects:itemsToAdd atIndexes:itemsToAddIndexes];
[fMessageTable insertRowsAtIndexes:itemsToAddIndexes withAnimation:NSTableViewAnimationSlideUp];
[self.fDisplayedMessages insertObjects:itemsToAdd atIndexes:itemsToAddIndexes];
[self.fMessageTable insertRowsAtIndexes:itemsToAddIndexes withAnimation:NSTableViewAnimationSlideUp];
[fMessageTable endUpdates];
[self.fMessageTable endUpdates];
NSAssert2([fDisplayedMessages isEqualToArray:tempMessages], @"Inconsistency between message arrays! %@ %@", fDisplayedMessages, tempMessages);
NSAssert2([self.fDisplayedMessages isEqualToArray:tempMessages], @"Inconsistency between message arrays! %@ %@", self.fDisplayedMessages, tempMessages);
}
- (NSString*)stringForMessage:(NSDictionary*)message