Changeset 818 for trunk/macosx
- Timestamp:
- Aug 22, 2006, 2:35:01 AM (16 years ago)
- Location:
- trunk/macosx
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/macosx/MessageWindowController.h
r813 r818 32 32 IBOutlet NSPopUpButton * fLevelButton; 33 33 34 NSLock * fLock;35 NSMutableArray * fBufferArray;36 34 NSTimer * fTimer; 37 35 } 38 36 39 void addMessage(int level, const char * message);40 - (void) addMessage: (const char *) message level: (int) level;41 37 - (void) updateLog: (NSTimer *) timer; 42 38 -
trunk/macosx/MessageWindowController.m
r814 r818 32 32 #define UPDATE_SECONDS 0.35 33 33 34 @interface MessageWindowController (Private)35 36 MessageWindowController * selfReference; //I'm not sure why "self" can't be used directly37 38 @end39 40 34 @implementation MessageWindowController 41 35 … … 44 38 if ((self = [super initWithWindowNibName: name])) 45 39 { 46 selfReference = self;47 48 fLock = [[NSLock alloc] init];49 fBufferArray = [[NSMutableArray alloc] init];50 51 40 fTimer = [NSTimer scheduledTimerWithTimeInterval: UPDATE_SECONDS target: self 52 41 selector: @selector(updateLog:) userInfo: nil repeats: YES]; … … 60 49 { 61 50 [fTimer invalidate]; 62 63 tr_setMessageFunction(NULL);64 65 [fLock release];66 [fBufferArray release];67 68 51 [super dealloc]; 69 52 } … … 86 69 87 70 tr_setMessageLevel(level); 88 tr_setMessageFunction(addMessage); 89 } 90 91 void addMessage(int level, const char * message) 92 { 93 [selfReference addMessage: message level: level]; 94 } 95 96 - (void) addMessage: (const char *) message level: (int) level 97 { 98 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 99 100 NSString * levelString; 101 102 if (level == TR_MSG_ERR) 103 levelString = @"ERR"; 104 else if (level == TR_MSG_INF) 105 levelString = @"INF"; 106 else if (level == TR_MSG_DBG) 107 levelString = @"DBG"; 108 else 109 levelString = @"???"; 110 111 NSAttributedString * messageString = [[[NSAttributedString alloc] initWithString: 112 [NSString stringWithFormat: @"(%@ %@) %s\n", [[NSDate date] dateWithCalendarFormat: @"%Y-%m-%d %H:%M:%S.%F" 113 timeZone: nil], levelString, message]] autorelease]; 114 115 [fLock lock]; 116 [fBufferArray addObject: messageString]; 117 [fLock unlock]; 118 119 [pool release]; 71 tr_setMessageQueuing(1); 120 72 } 121 73 122 74 - (void) updateLog: (NSTimer *) timer 123 75 { 124 if ([fBufferArray count] == 0) 76 tr_msg_list_t * messages = tr_getQueuedMessages(), * currentMessage; 77 if (!messages) 125 78 return; 126 79 127 [fLock lock]; 80 //keep scrolled to bottom if already at bottom or there is no scroll bar yet 81 NSScroller * scroller = [fScrollView verticalScroller]; 82 BOOL shouldScroll = [scroller floatValue] == 1.0 || [scroller isHidden] || [scroller knobProportion] == 1.0; 128 83 129 //keep scrolled to bottom if already at bottom or there is no scroll bar yet 130 BOOL shouldScroll = NO; 131 NSScroller * scroller = [fScrollView verticalScroller]; 132 if ([scroller floatValue] == 1.0 || [scroller isHidden] || [scroller knobProportion] == 1.0) 133 shouldScroll = YES; 84 NSAttributedString * messageString; 85 NSString * levelString; 86 for (currentMessage = messages; currentMessage != NULL; currentMessage = currentMessage->next) 87 { 88 int level = currentMessage->level; 89 if (level == TR_MSG_ERR) 90 levelString = @"ERR"; 91 else if (level == TR_MSG_INF) 92 levelString = @"INF"; 93 else if (level == TR_MSG_DBG) 94 levelString = @"DBG"; 95 else 96 levelString = @"???"; 97 98 messageString = [[[NSAttributedString alloc] initWithString: [NSString stringWithFormat: @"%@ %s\n", 99 levelString, currentMessage->message]] autorelease]; 100 [[fTextView textStorage] appendAttributedString: messageString]; 101 } 134 102 135 NSEnumerator * enumerator = [fBufferArray objectEnumerator]; 136 NSAttributedString * messageString; 137 while ((messageString = [enumerator nextObject])) 138 [[fTextView textStorage] appendAttributedString: messageString]; 139 [fBufferArray removeAllObjects]; 103 tr_freeMessageList(messages); 140 104 141 105 [fTextView setFont: [NSFont fontWithName: @"Monaco" size: 10]]; //find a way to set this permanently … … 143 107 if (shouldScroll) 144 108 [fTextView scrollRangeToVisible: NSMakeRange([[fTextView string] length], 0)]; 145 146 [fLock unlock];147 109 } 148 110 … … 165 127 - (void) clearLog: (id) sender 166 128 { 167 [fLock lock];168 129 [fTextView setString: @""]; 169 [fLock unlock];170 130 } 171 131
Note: See TracChangeset
for help on using the changeset viewer.