Changeset 4225


Ignore:
Timestamp:
Dec 19, 2007, 8:46:00 PM (15 years ago)
Author:
livings124
Message:

initial group filtering

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEWS

    r4218 r4225  
    99- OS X:
    1010   + Redesigned Leopard-like look
    11    + Group labels
     11   + Group labeling, filtering, and sorting
    1212   + Statistics window
    1313   + Pieces Bar (return of Advanced Bar)
  • trunk/macosx/Controller.h

    r4187 r4225  
    8181                                    * fDownloadLimitItem, * fDownloadNoLimitItem;
    8282   
    83     IBOutlet NSMenu                 * fGroupsSetMenu, * fGroupsSetContextMenu;
     83    IBOutlet NSMenu                 * fGroupsSetMenu, * fGroupsSetContextMenu, * fGroupFilterMenu;
     84    IBOutlet NSPopUpButton          * fGroupsButton;
    8485   
    8586    IBOutlet NSWindow               * fURLSheetWindow;
     
    194195- (void) showGroups: (id) sender;
    195196- (void) setGroup: (id) sender;
     197- (void) setGroupFilter: (id) sender;
     198- (void) updateGroupFilterButton;
    196199
    197200- (void) toggleSpeedLimit: (id) sender;
  • trunk/macosx/Controller.m

    r4219 r4225  
    9696#define FILTER_TYPE_TAG_TRACKER 402
    9797
     98#define GROUP_FILTER_ALL_TAG    -2
     99
    98100#define STATUS_RATIO_TOTAL      @"RatioTotal"
    99101#define STATUS_RATIO_SESSION    @"RatioSession"
     
    289291        [fPauseFilterButton setFrame: pauseRect];
    290292    }
     293   
     294    [self updateGroupFilterButton];
    291295   
    292296    //set up filter bar
     
    18591863    [fPauseFilterButton setCount: paused];
    18601864   
     1865    //remove for groups
     1866    int groupFilter = [fDefaults integerForKey: @"FilterGroup"];
     1867    if (groupFilter != GROUP_FILTER_ALL_TAG)
     1868    {
     1869        filtering = YES;
     1870       
     1871        int i;
     1872        for (i = [tempTorrents count]-1; i >= 0; i--)
     1873            if ([[tempTorrents objectAtIndex: i] groupValue] != groupFilter)
     1874                [tempTorrents removeObjectAtIndex: i];
     1875    }
     1876   
     1877    //remove from text field
    18611878    NSString * searchString = [fSearchFilterField stringValue];
    1862     if ([searchString length] > 0)
     1879    if ([tempTorrents count] > 0 && [searchString length] > 0)
    18631880    {
    18641881        filtering = YES;
     
    20552072            [menu removeItemAtIndex: i];
    20562073       
    2057         NSMenu * groupMenu = [[GroupsWindowController groupsController] groupMenuWithTarget: self action: @selector(setGroup:)];
     2074        NSMenu * groupMenu = [[GroupsWindowController groupsController] groupMenuWithTarget: self action: @selector(setGroup:)
     2075                                isSmall: NO];
    20582076        [menu appendItemsFromMenu: groupMenu atIndexes: [NSIndexSet indexSetWithIndexesInRange:
    20592077                NSMakeRange(0, [groupMenu numberOfItems])] atBottom: NO];
    20602078    }
     2079    else if (menu == fGroupFilterMenu)
     2080    {
     2081        int i;
     2082        for (i = [menu numberOfItems]-1; i >= 3; i--)
     2083            [menu removeItemAtIndex: i];
     2084       
     2085        NSMenu * groupMenu = [[GroupsWindowController groupsController] groupMenuWithTarget: self action: @selector(setGroupFilter:)
     2086                                isSmall: YES];
     2087        [menu appendItemsFromMenu: groupMenu atIndexes: [NSIndexSet indexSetWithIndexesInRange:
     2088                NSMakeRange(0, [groupMenu numberOfItems])] atBottom: YES];
     2089    }
     2090    else;
    20612091}
    20622092
     
    20712101    [self applyFilter: nil];
    20722102    [self updateTorrentHistory];
     2103}
     2104
     2105- (void) setGroupFilter: (id) sender
     2106{
     2107    [fDefaults setInteger: [sender tag] forKey: @"FilterGroup"];
     2108    [self updateGroupFilterButton];
     2109    [self applyFilter: nil];
     2110}
     2111
     2112- (void) updateGroupFilterButton
     2113{
     2114    int index = [fDefaults integerForKey: @"FilterGroup"];
     2115   
     2116    NSImage * icon;
     2117    if (index >= 0)
     2118        icon = [[GroupsWindowController groupsController] imageForIndex: index isSmall: YES];
     2119    else
     2120        icon = [NSImage imageNamed: NSImageNameRemoveTemplate];
     2121    [[fGroupFilterMenu itemAtIndex: 0] setImage: icon];
     2122   
     2123    NSString * toolTip;
     2124    switch (index)
     2125    {
     2126        case GROUP_FILTER_ALL_TAG:
     2127            toolTip = NSLocalizedString(@"All Groups", "Groups -> Button");
     2128            break;
     2129        case -1:
     2130            toolTip = NSLocalizedString(@"Group: No Label", "Groups -> Button");
     2131            break;
     2132        default:
     2133            toolTip = [NSLocalizedString(@"Group: ", "Groups -> Button") stringByAppendingString:
     2134                        [[GroupsWindowController groupsController] nameForIndex: index]];
     2135    }
     2136    [fGroupsButton setToolTip: toolTip];
    20732137}
    20742138
     
    26652729        [fSearchFilterField setStringValue: @""];
    26662730        [self setFilter: fNoFilterButton];
     2731        [self setGroupFilter: [fGroupFilterMenu itemWithTag: GROUP_FILTER_ALL_TAG]];
    26672732    }
    26682733
     
    31123177    }
    31133178   
     3179    if (action == @selector(setGroupFilter:))
     3180    {
     3181        [menuItem setState: [menuItem tag] == [fDefaults integerForKey: @"FilterGroup"] ? NSOnState : NSOffState];
     3182        return YES;
     3183    }
     3184   
    31143185    if (action == @selector(toggleSmallView:))
    31153186    {
  • trunk/macosx/Defaults.plist

    r4187 r4225  
    5959        <key>FilterBar</key>
    6060        <false/>
     61    <key>FilterGroup</key>
     62        <integer>-2</integer>
    6163        <key>FilterSearchType</key>
    6264        <string>Name</string>
  • trunk/macosx/English.lproj/MainMenu.nib/classes.nib

    r4187 r4225  
    112112                                <string>id</string>
    113113                                <key>setGroup</key>
     114                                <string>id</string>
     115                                <key>setGroupFilter</key>
    114116                                <string>id</string>
    115117                                <key>setInfoTab</key>
     
    186188                                <key>fFilterBar</key>
    187189                                <string>StatusBarView</string>
     190                                <key>fGroupFilterMenu</key>
     191                                <string>NSMenu</string>
     192                                <key>fGroupsButton</key>
     193                                <string>NSPopUpButton</string>
    188194                                <key>fGroupsSetContextMenu</key>
    189195                                <string>NSMenu</string>
     
    260266                </dict>
    261267                <dict>
     268                        <key>CLASS</key>
     269                        <string>FilterButton</string>
     270                        <key>LANGUAGE</key>
     271                        <string>ObjC</string>
     272                        <key>SUPERCLASS</key>
     273                        <string>NSButton</string>
     274                </dict>
     275                <dict>
    262276                        <key>ACTIONS</key>
    263277                        <dict>
     
    296310                        <key>SUPERCLASS</key>
    297311                        <string>NSTableView</string>
    298                 </dict>
    299                 <dict>
    300                         <key>CLASS</key>
    301                         <string>FilterButton</string>
    302                         <key>LANGUAGE</key>
    303                         <string>ObjC</string>
    304                         <key>SUPERCLASS</key>
    305                         <string>NSButton</string>
    306312                </dict>
    307313                <dict>
  • trunk/macosx/English.lproj/MainMenu.nib/info.nib

    r4211 r4225  
    1010        <integer>5</integer>
    1111        <key>IBOpenObjects</key>
    12         <array>
    13                 <integer>2279</integer>
    14         </array>
     12        <array/>
    1513        <key>IBSystem Version</key>
    1614        <string>9B18</string>
  • trunk/macosx/GroupsWindowController.h

    r4201 r4225  
    3939+ (GroupsWindowController *) groupsController;
    4040
     41- (int) orderValueForIndex: (int) index;
    4142- (CTGradient *) gradientForIndex: (int) index;
    42 
    43 - (int) orderValueForIndex: (int) index;
     43- (NSString *) nameForIndex: (int) index;
     44- (NSImage *) imageForIndex: (int) index isSmall: (BOOL) small;
    4445
    4546- (void) addRemoveGroup: (id) sender;
    4647
    47 - (NSMenu *) groupMenuWithTarget: (id) target action: (SEL) action;
     48- (NSMenu *) groupMenuWithTarget: (id) target action: (SEL) action isSmall: (BOOL) small;
    4849
    4950@end
  • trunk/macosx/GroupsWindowController.m

    r4219 r4225  
    2929#import "NSApplicationAdditions.h"
    3030
     31#define ICON_WIDTH 16.0
     32#define ICON_WIDTH_SMALL 12.0
     33
    3134#define GROUP_TABLE_VIEW_DATA_TYPE @"GroupTableViewDataType"
    3235
     
    134137}
    135138
    136 - (CTGradient *) gradientForIndex: (int) index
    137 {
    138     if (index < 0)
    139         return nil;
    140    
    141     NSEnumerator * enumerator = [fGroups objectEnumerator];
    142     NSDictionary * dict;
    143     while ((dict = [enumerator nextObject]))
    144         if ([[dict objectForKey: @"Index"] intValue] == index)
    145             return [self gradientForColor: [dict objectForKey: @"Color"]];
    146    
    147     return nil;
    148 }
    149 
    150139- (int) orderValueForIndex: (int) index
    151140{
     
    158147    }
    159148    return -1;
     149}
     150
     151- (CTGradient *) gradientForIndex: (int) index
     152{
     153    int orderIndex = [self orderValueForIndex: index];
     154    return orderIndex != -1 ? [self gradientForColor: [[fGroups objectAtIndex: orderIndex] objectForKey: @"Color"]] : nil;
     155}
     156
     157- (NSString *) nameForIndex: (int) index
     158{
     159    int orderIndex = [self orderValueForIndex: index];
     160    return orderIndex != -1 ? [[fGroups objectAtIndex: orderIndex] objectForKey: @"Name"] : nil;
     161}
     162
     163- (NSImage *) imageForIndex: (int) index isSmall: (BOOL) small
     164{
     165    CTGradient * gradient;
     166    if (!(gradient = [self gradientForIndex: index]))
     167        return nil;
     168   
     169    float width = small ? ICON_WIDTH_SMALL : ICON_WIDTH;
     170    NSBezierPath * bp = [NSBezierPath bezierPathWithRoundedRect: NSMakeRect(0.0, 0.0, width, width) radius: 4.0];
     171    NSImage * icon = [[NSImage alloc] initWithSize: [bp bounds].size];
     172   
     173    [icon lockFocus];
     174    [gradient fillBezierPath: bp angle: 270.0];
     175    [icon unlockFocus];
     176   
     177    return [icon autorelease];
    160178}
    161179
     
    330348}
    331349
    332 - (NSMenu *) groupMenuWithTarget: (id) target action: (SEL) action
     350- (NSMenu *) groupMenuWithTarget: (id) target action: (SEL) action isSmall: (BOOL) small
    333351{
    334352    NSMenu * menu = [[NSMenu alloc] initWithTitle: @"Groups"];
     
    341359    [item release];
    342360   
    343     NSBezierPath * bp = [NSBezierPath bezierPathWithRoundedRect: NSMakeRect(0.0, 0.0, 16.0, 16.0) radius: 4.0];
    344    
    345361    NSEnumerator * enumerator = [fGroups objectEnumerator];
    346362    NSDictionary * dict;
     
    350366        [item setTarget: target];
    351367       
    352         NSImage * icon = [[NSImage alloc] initWithSize: [bp bounds].size];
    353        
    354         [icon lockFocus];
    355         [[self gradientForColor: [dict objectForKey: @"Color"]] fillBezierPath: bp angle: 270.0];
    356         [icon unlockFocus];
    357        
    358         [item setImage: icon];
    359         [icon release];
    360        
    361         [item setTag: [[dict objectForKey: @"Index"] intValue]];
     368        int index = [[dict objectForKey: @"Index"] intValue];
     369       
     370        #warning use dict
     371        [item setImage: [self imageForIndex: index isSmall: small]];
     372        [item setTag: index];
    362373       
    363374        [menu addItem: item];
     
    365376    }
    366377   
     378
    367379    return [menu autorelease];
    368380}
  • trunk/macosx/PortChecker.m

    r4207 r4225  
    2626#import "NSApplicationAdditions.h"
    2727
     28#define CHECKER_URL @"http://transmission.m0k.org/PortCheck.php?port=%d"
     29
    2830@implementation PortChecker
    2931
     
    3537       
    3638        NSURLRequest * portProbeRequest = [NSURLRequest requestWithURL: [NSURL URLWithString:
    37                 [NSString stringWithFormat: @"http://transmission.m0k.org/PortCheck.php?port=%d", portNumber]] cachePolicy:
     39                [NSString stringWithFormat: CHECKER_URL, portNumber]] cachePolicy:
    3840                [NSApp isOnLeopardOrBetter] ? NSURLRequestReloadIgnoringLocalCacheData : NSURLRequestReloadIgnoringCacheData
    3941                timeoutInterval: 15.0];
Note: See TracChangeset for help on using the changeset viewer.