mirror of
https://github.com/transmission/transmission.git
synced 2025-12-24 12:28:52 +00:00
only update and sort by group when filtering, not during normal sorting
This commit is contained in:
@@ -86,6 +86,7 @@
|
||||
A2265F420B5EF5F40093DDA5 /* FileNameCell.m in Sources */ = {isa = PBXBuildFile; fileRef = A2265F400B5EF5F40093DDA5 /* FileNameCell.m */; };
|
||||
A226FDAC0D0CDF20005A7F71 /* libnatpmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C7A118D0D0B2EB800B5701F /* libnatpmp.a */; };
|
||||
A22A8D560AEEAFA5007E9CB9 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A22A8D540AEEAFA5007E9CB9 /* Localizable.strings */; };
|
||||
A22B862D0D47D91300F9BAD9 /* NSMutableArrayAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A22B862C0D47D91300F9BAD9 /* NSMutableArrayAdditions.m */; };
|
||||
A22D3AA60D00D1790079CFED /* Turtle.png in Resources */ = {isa = PBXBuildFile; fileRef = A22D3AA30D00D1790079CFED /* Turtle.png */; };
|
||||
A22D3AA70D00D1790079CFED /* TurtleBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = A22D3AA40D00D1790079CFED /* TurtleBlue.png */; };
|
||||
A231274C0D11D0B7003F9AFF /* AboutWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = A231274B0D11D0B7003F9AFF /* AboutWindow.xib */; };
|
||||
@@ -459,6 +460,8 @@
|
||||
A223AABB0D22ECE800840069 /* it */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = it; path = macosx/it.lproj/StatsWindow.xib; sourceTree = "<group>"; };
|
||||
A2265F3F0B5EF5F40093DDA5 /* FileNameCell.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FileNameCell.h; path = macosx/FileNameCell.h; sourceTree = "<group>"; };
|
||||
A2265F400B5EF5F40093DDA5 /* FileNameCell.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FileNameCell.m; path = macosx/FileNameCell.m; sourceTree = "<group>"; };
|
||||
A22B862B0D47D91300F9BAD9 /* NSMutableArrayAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NSMutableArrayAdditions.h; path = macosx/NSMutableArrayAdditions.h; sourceTree = "<group>"; };
|
||||
A22B862C0D47D91300F9BAD9 /* NSMutableArrayAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NSMutableArrayAdditions.m; path = macosx/NSMutableArrayAdditions.m; sourceTree = "<group>"; };
|
||||
A22D3AA30D00D1790079CFED /* Turtle.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Turtle.png; path = macosx/Images/Turtle.png; sourceTree = "<group>"; };
|
||||
A22D3AA40D00D1790079CFED /* TurtleBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = TurtleBlue.png; path = macosx/Images/TurtleBlue.png; sourceTree = "<group>"; };
|
||||
A231274B0D11D0B7003F9AFF /* AboutWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = AboutWindow.xib; path = macosx/AboutWindow.xib; sourceTree = "<group>"; };
|
||||
@@ -1111,6 +1114,8 @@
|
||||
A21576090C0D449A0057A26A /* NSBezierPathAdditions.m */,
|
||||
A234D0CF0C79FB3600A82373 /* NSMenuAdditions.h */,
|
||||
A234D0D00C79FB3600A82373 /* NSMenuAdditions.m */,
|
||||
A22B862B0D47D91300F9BAD9 /* NSMutableArrayAdditions.h */,
|
||||
A22B862C0D47D91300F9BAD9 /* NSMutableArrayAdditions.m */,
|
||||
);
|
||||
name = Additions;
|
||||
sourceTree = "<group>";
|
||||
@@ -1793,6 +1798,7 @@
|
||||
A22180980D148A71007D09ED /* GroupsWindowController.m in Sources */,
|
||||
A26AF21A0D2DA35A00FF7140 /* FileOutlineController.m in Sources */,
|
||||
A26AF2840D2DC27C00FF7140 /* AddWindowController.m in Sources */,
|
||||
A22B862D0D47D91300F9BAD9 /* NSMutableArrayAdditions.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
#import "NSApplicationAdditions.h"
|
||||
#import "NSStringAdditions.h"
|
||||
#import "NSMenuAdditions.h"
|
||||
#import "NSMutableArrayAdditions.h"
|
||||
#import "UKKQueue.h"
|
||||
#import "ExpandedPathToPathTransformer.h"
|
||||
#import "ExpandedPathToIconTransformer.h"
|
||||
@@ -1645,6 +1646,7 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
|
||||
[self updateDisplay: nil];
|
||||
}
|
||||
|
||||
#warning rename sortIgnoringSelected
|
||||
- (void) prepareForDisplay
|
||||
{
|
||||
NSString * sortType = [fDefaults stringForKey: @"Sort"];
|
||||
@@ -1655,8 +1657,6 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
|
||||
* orderDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"orderValue"
|
||||
ascending: asc] autorelease];
|
||||
|
||||
BOOL group = NO;
|
||||
|
||||
NSArray * descriptors;
|
||||
if ([sortType isEqualToString: SORT_ORDER])
|
||||
descriptors = [[NSArray alloc] initWithObjects: orderDescriptor, nil];
|
||||
@@ -1711,8 +1711,7 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
|
||||
descriptors = [[NSArray alloc] initWithObjects: dateDescriptor, orderDescriptor, nil];
|
||||
}
|
||||
|
||||
group = [fDefaults boolForKey: @"SortByGroup"];
|
||||
if (group)
|
||||
if (![NSApp isOnLeopardOrBetter] && [fDefaults boolForKey: @"SortByGroup"])
|
||||
{
|
||||
NSSortDescriptor * groupDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"groupOrderValue"
|
||||
ascending: asc] autorelease];
|
||||
@@ -1726,40 +1725,28 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
|
||||
}
|
||||
}
|
||||
|
||||
[fDisplayedTorrents sortUsingDescriptors: descriptors];
|
||||
[descriptors release];
|
||||
|
||||
//add group divider if necessary
|
||||
int total = [fDisplayedTorrents count];
|
||||
|
||||
[fDisplayedGroupIndexes removeAllIndexes];
|
||||
if (group && total > 0 && [NSApp isOnLeopardOrBetter])
|
||||
//actually sort
|
||||
if ([fDefaults boolForKey: @"SortByGroup"] && [NSApp isOnLeopardOrBetter])
|
||||
{
|
||||
int i, groupValue = [[fDisplayedTorrents objectAtIndex: 0] groupValue], newGroupValue, count = 1, start = 0;
|
||||
for (i = 0; i < [fDisplayedTorrents count]; i++)
|
||||
NSUInteger i, nextGroup;
|
||||
for (i = [fDisplayedGroupIndexes firstIndex]; i != NSNotFound; i = nextGroup)
|
||||
{
|
||||
BOOL last = i == [fDisplayedTorrents count]-1;
|
||||
if (!last)
|
||||
newGroupValue = [[fDisplayedTorrents objectAtIndex: i+1] groupValue];
|
||||
if (groupValue != newGroupValue || last)
|
||||
{
|
||||
[fDisplayedTorrents insertObject: [NSNumber numberWithInt: groupValue] atIndex: start];
|
||||
[fDisplayedGroupIndexes addIndex: start];
|
||||
|
||||
groupValue = newGroupValue;
|
||||
count = 1;
|
||||
|
||||
start = i+2;
|
||||
i++;
|
||||
}
|
||||
else
|
||||
count++;
|
||||
nextGroup = [fDisplayedGroupIndexes indexGreaterThanIndex: i];
|
||||
NSUInteger count = (nextGroup != NSNotFound ? nextGroup : [fDisplayedTorrents count]) - i - 1;
|
||||
|
||||
[fDisplayedTorrents sortIndexes: [NSIndexSet indexSetWithIndexesInRange: NSMakeRange(i+1, count)]
|
||||
usingDescriptors: descriptors];
|
||||
}
|
||||
}
|
||||
else
|
||||
[fDisplayedTorrents sortUsingDescriptors: descriptors];
|
||||
|
||||
[descriptors release];
|
||||
|
||||
[fTableView reloadData];
|
||||
}
|
||||
|
||||
#warning rename applyFilter
|
||||
- (void) updateDisplay: (id) sender
|
||||
{
|
||||
NSMutableArray * previousTorrents = [fDisplayedTorrents mutableCopy];
|
||||
@@ -1886,6 +1873,36 @@ void sleepCallBack(void * controller, io_service_t y, natural_t messageType, voi
|
||||
|
||||
[previousTorrents release];
|
||||
|
||||
#warning
|
||||
//add group items
|
||||
[fDisplayedGroupIndexes removeAllIndexes];
|
||||
if ([fDefaults boolForKey: @"SortByGroup"] && [NSApp isOnLeopardOrBetter])
|
||||
{
|
||||
NSSortDescriptor * groupDescriptor = [[[NSSortDescriptor alloc] initWithKey: @"groupOrderValue" ascending: YES] autorelease];
|
||||
[fDisplayedTorrents sortUsingDescriptors: [NSArray arrayWithObject: groupDescriptor]];
|
||||
|
||||
int i, groupValue = [[fDisplayedTorrents objectAtIndex: 0] groupValue], newGroupValue, count = 1, start = 0;
|
||||
for (i = 0; i < [fDisplayedTorrents count]; i++)
|
||||
{
|
||||
BOOL last = i == [fDisplayedTorrents count]-1;
|
||||
if (!last)
|
||||
newGroupValue = [[fDisplayedTorrents objectAtIndex: i+1] groupValue];
|
||||
if (groupValue != newGroupValue || last)
|
||||
{
|
||||
[fDisplayedTorrents insertObject: [NSNumber numberWithInt: groupValue] atIndex: start];
|
||||
[fDisplayedGroupIndexes addIndex: start];
|
||||
|
||||
groupValue = newGroupValue;
|
||||
count = 1;
|
||||
|
||||
start = i+2;
|
||||
i++;
|
||||
}
|
||||
else
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
//sort, add groups, and reset selected
|
||||
[self prepareForDisplay];
|
||||
[fTableView selectValues: selectedValues];
|
||||
|
||||
29
macosx/NSMutableArrayAdditions.h
Normal file
29
macosx/NSMutableArrayAdditions.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/******************************************************************************
|
||||
* $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.
|
||||
*****************************************************************************/
|
||||
|
||||
@interface NSMutableArray (NSMutableArrayAdditions)
|
||||
|
||||
- (void) sortIndexes: (NSIndexSet *) indexes usingDescriptors: (NSArray *) sortDescriptors;
|
||||
|
||||
@end
|
||||
36
macosx/NSMutableArrayAdditions.m
Normal file
36
macosx/NSMutableArrayAdditions.m
Normal file
@@ -0,0 +1,36 @@
|
||||
/******************************************************************************
|
||||
* $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 "NSMutableArrayAdditions.h"
|
||||
|
||||
@implementation NSMutableArray (NSMutableArrayAdditions)
|
||||
|
||||
- (void) sortIndexes: (NSIndexSet *) indexes usingDescriptors: (NSArray *) sortDescriptors
|
||||
{
|
||||
NSArray * items = [self objectsAtIndexes: indexes];
|
||||
items = [items sortedArrayUsingDescriptors: sortDescriptors];
|
||||
[self replaceObjectsAtIndexes: indexes withObjects: items];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -316,8 +316,8 @@
|
||||
[indexSet addIndex: i];
|
||||
else
|
||||
{
|
||||
unsigned nextGroup = [fGroupIndexes indexGreaterThanIndex: i],
|
||||
count = (nextGroup != NSNotFound ? nextGroup : [fTorrents count]) - i - 1 ;
|
||||
NSUInteger nextGroup = [fGroupIndexes indexGreaterThanIndex: i],
|
||||
count = (nextGroup != NSNotFound ? nextGroup : [fTorrents count]) - i - 1;
|
||||
[indexSet addIndexesInRange: NSMakeRange(i+1, count)];
|
||||
i = nextGroup-1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user