diff --git a/macosx/English.lproj/InfoWindow.xib b/macosx/English.lproj/InfoWindow.xib
index 15560d301..982056396 100644
--- a/macosx/English.lproj/InfoWindow.xib
+++ b/macosx/English.lproj/InfoWindow.xib
@@ -2134,7 +2134,7 @@ AAB0ZXh0AAAAAENvcHlyaWdodCBBcHBsZSBDb21wdXRlciwgSW5jLiwgMjAwNQAAAAA
1.400000e+01
- 314572800
+ 306184192
4
15
0
@@ -8921,7 +8921,7 @@ zijOSc5pzorOqs66ztvO+88czzzPXc99z57Pvs/fz+/QANAg0EHQYdCC0KLQw9Dj0PPRFNE00VXRddGW
NSMatrix
NSTextField
NSTextField
- NSTableView
+ TrackerTableView
NSView
NSTextField
NSTextField
diff --git a/macosx/TrackerTableView.h b/macosx/TrackerTableView.h
new file mode 100644
index 000000000..3ffd9505e
--- /dev/null
+++ b/macosx/TrackerTableView.h
@@ -0,0 +1,34 @@
+/******************************************************************************
+ * $Id$
+ *
+ * Copyright (c) 2008 Transmission authors and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *****************************************************************************/
+
+#import
+
+@interface TrackerTableView : NSTableView
+{
+ NSArray * fTrackers;
+}
+
+- (void) setTrackers: (NSArray *) trackers;
+
+@end
diff --git a/macosx/TrackerTableView.m b/macosx/TrackerTableView.m
new file mode 100644
index 000000000..f6a616b8b
--- /dev/null
+++ b/macosx/TrackerTableView.m
@@ -0,0 +1,100 @@
+/******************************************************************************
+ * $Id$
+ *
+ * Copyright (c) 2008 Transmission authors and contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *****************************************************************************/
+
+#import "TrackerTableView.h"
+
+@implementation TrackerTableView
+
+- (void) setTrackers: (NSArray *) trackers
+{
+ fTrackers = trackers;
+}
+
+//alternating rows - first row after group row is white
+- (void) highlightSelectionInClipRect: (NSRect) clipRect
+{
+ NSArray * colors = [NSColor controlAlternatingRowBackgroundColors];
+
+ NSRect visibleRect = clipRect;
+ NSRange rows = [self rowsInRect: visibleRect];
+ BOOL start = YES;
+
+ if (rows.length > 0)
+ {
+ int i;
+
+ //determine what the first row color should be
+ if (![[fTrackers objectAtIndex: rows.location] isKindOfClass: [NSNumber class]])
+ {
+ for (i = rows.location-1; i>=0; i--)
+ {
+ if ([[fTrackers objectAtIndex: i] isKindOfClass: [NSNumber class]])
+ break;
+ start = !start;
+ }
+ }
+ else
+ {
+ rows.location++;
+ rows.length--;
+ }
+
+ for (i = rows.location; i < NSMaxRange(rows); i++)
+ {
+ if ([[fTrackers objectAtIndex: i] isKindOfClass: [NSNumber class]])
+ {
+ start = YES;
+ continue;
+ }
+
+ NSColor * color = start ? [colors objectAtIndex: 0] : [colors objectAtIndex: 1];
+ [color set];
+ NSRectFill([self rectOfRow: i]);
+
+ start = !start;
+ }
+
+ float newY = NSMaxY([self rectOfRow: i-1]);
+ visibleRect.size.height -= newY - visibleRect.origin.y;
+ visibleRect.origin.y = newY;
+ }
+
+ //remaining visible rows continue alternating
+ NSRect rowRect = visibleRect;
+ rowRect.size.height = [self rowHeight] + [self intercellSpacing].height;
+
+ while (rowRect.origin.y < NSMaxY(visibleRect))
+ {
+ NSColor * color = start ? [colors objectAtIndex: 0] : [colors objectAtIndex: 1];
+ [color set];
+ NSRectFill(rowRect);
+
+ start = !start;
+ rowRect.origin.y += rowRect.size.height;
+ }
+
+ [super highlightSelectionInClipRect: clipRect];
+}
+
+@end