Transmission: update from 2.42 to 2.50
[tomato.git] / release / src / router / transmission / macosx / FileOutlineView.m
blob4dab989f61eb9b14ac40cdde5185869ef59e9e4b
1 /******************************************************************************
2  * $Id: FileOutlineView.m 13162 2012-01-14 17:12:04Z livings124 $
3  * 
4  * Copyright (c) 2007-2012 Transmission authors and contributors
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  *****************************************************************************/
25 #import "InfoWindowController.h"
26 #import "FileListNode.h"
27 #import "FileNameCell.h"
28 #import "FileOutlineView.h"
29 #import "FilePriorityCell.h"
30 #import "Torrent.h"
32 @implementation FileOutlineView
34 - (void) awakeFromNib
36     FileNameCell * nameCell = [[FileNameCell alloc] init];
37     [[self tableColumnWithIdentifier: @"Name"] setDataCell: nameCell];
38     [nameCell release];
39     
40     FilePriorityCell * priorityCell = [[FilePriorityCell alloc] init];
41     [[self tableColumnWithIdentifier: @"Priority"] setDataCell: priorityCell];
42     [priorityCell release];
43     
44     [self setAutoresizesOutlineColumn: NO];
45     [self setIndentationPerLevel: 14.0];
46     
47     fMouseRow = -1;
50 - (void) dealloc
52     [super dealloc];
55 - (void) mouseDown: (NSEvent *) event
57     [[self window] makeKeyWindow];
58     [super mouseDown: event];
61 - (NSMenu *) menuForEvent: (NSEvent *) event
63     const NSInteger row = [self rowAtPoint: [self convertPoint: [event locationInWindow] fromView: nil]];
64     
65     if (row >= 0)
66     {
67         if (![self isRowSelected: row])
68             [self selectRowIndexes: [NSIndexSet indexSetWithIndex: row] byExtendingSelection: NO];
69     }
70     else
71         [self deselectAll: self];
72     
73     return [self menu];
76 - (NSRect) iconRectForRow: (int) row
78     FileNameCell * cell = (FileNameCell *)[self preparedCellAtColumn: [self columnWithIdentifier: @"Name"] row: row];
79     NSRect iconRect = [cell imageRectForBounds: [self rectOfRow: row]];
80     
81     iconRect.origin.x += [self indentationPerLevel] * (CGFloat)([self levelForRow: row] + 1);
82     return iconRect;
85 - (void) updateTrackingAreas
87     [super updateTrackingAreas];
88     
89     for (NSTrackingArea * area in [self trackingAreas])
90     {
91         if ([area owner] == self && [[area userInfo] objectForKey: @"Row"])
92             [self removeTrackingArea: area];
93     }
94     
95     NSRange visibleRows = [self rowsInRect: [self visibleRect]];
96     if (visibleRows.length == 0)
97         return;
98     
99     NSPoint mouseLocation = [self convertPoint: [[self window] convertScreenToBase: [NSEvent mouseLocation]] fromView: nil];
100     
101     for (NSInteger row = visibleRows.location, col = [self columnWithIdentifier: @"Priority"]; row < NSMaxRange(visibleRows); row++)
102     {
103         FilePriorityCell * cell = (FilePriorityCell *)[self preparedCellAtColumn: col row: row];
104         
105         NSDictionary * userInfo = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt: row] forKey: @"Row"];
106         [cell addTrackingAreasForView: self inRect: [self frameOfCellAtColumn: col row: row] withUserInfo: userInfo
107                 mouseLocation: mouseLocation];
108     }
111 - (NSInteger) hoveredRow
113     return fMouseRow;
116 - (void) mouseEntered: (NSEvent *) event
118     NSNumber * row;
119     if ((row = [(NSDictionary *)[event userData] objectForKey: @"Row"]))
120     {
121         fMouseRow = [row intValue];
122         [self setNeedsDisplayInRect: [self frameOfCellAtColumn: [self columnWithIdentifier: @"Priority"] row: fMouseRow]];
123     }
126 - (void) mouseExited: (NSEvent *) event
128     NSNumber * row;
129     if ((row = [(NSDictionary *)[event userData] objectForKey: @"Row"]))
130     {
131         [self setNeedsDisplayInRect: [self frameOfCellAtColumn: [self columnWithIdentifier: @"Priority"] row: [row intValue]]];
132         fMouseRow = -1;
133     }
136 @end