Changeset 6261


Ignore:
Timestamp:
Jun 27, 2008, 5:40:22 AM (14 years ago)
Author:
livings124
Message:

comparing with the numeric option works for sorting IP address properly, so let it do the heavy lifting for us

Location:
trunk/macosx
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/macosx/English.lproj/InfoWindow.xib

    r6260 r6261  
    99                <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
    1010                        <bool key="EncodedWithXMLCoder">YES</bool>
    11                         <integer value="1039"/>
     11                        <integer value="1042"/>
    1212                </object>
    1313                <object class="NSArray" key="IBDocument.PluginDependencies">
     
    22882288                                                                                                <bool key="NSIsResizeable">YES</bool>
    22892289                                                                                                <reference key="NSTableView" ref="221969066"/>
    2290                                                                                                 <object class="NSSortDescriptor" key="NSSortDescriptorPrototype" id="631031026">
     2290                                                                                                <object class="NSSortDescriptor" key="NSSortDescriptorPrototype">
    22912291                                                                                                        <string key="NSKey">IP</string>
    22922292                                                                                                        <bool key="NSAscending">YES</bool>
    2293                                                                                                         <string key="NSSelector">compareIP:</string>
     2293                                                                                                        <string key="NSSelector">compareNumeric:</string>
    22942294                                                                                                </object>
    22952295                                                                                        </object>
     
    38523852                                                                                <object class="NSArray" key="NSSortDescriptors">
    38533853                                                                                        <bool key="EncodedWithXMLCoder">YES</bool>
    3854                                                                                         <reference ref="631031026"/>
    38553854                                                                                        <reference ref="116573225"/>
    38563855                                                                                </object>
  • trunk/macosx/InfoWindowController.m

    r6252 r6261  
    15931593    {
    15941594        NSSortDescriptor * secondDescriptor = [[NSSortDescriptor alloc] initWithKey: @"IP" ascending: asc
    1595                                                                         selector: @selector(compareIP:)];
     1595                                                                        selector: @selector(compareFinder:)];
    15961596        [descriptors addObject: secondDescriptor];
    15971597        [secondDescriptor release];
  • trunk/macosx/NSStringAdditions.h

    r6260 r6261  
    4040
    4141- (NSComparisonResult) compareFinder: (NSString *) string; //how the Finder compares strings
    42 - (NSComparisonResult) compareIP: (NSString *) string;
     42- (NSComparisonResult) compareNumeric: (NSString *) string; //simple compare method for strings with numbers (works for IP addresses)
    4343
    4444@end
  • trunk/macosx/NSStringAdditions.m

    r6260 r6261  
    148148- (NSComparisonResult) compareFinder: (NSString *) string
    149149{
    150     int comparisonOptions = ![NSApp isOnLeopardOrBetter] ? (NSCaseInsensitiveSearch | NSNumericSearch)
    151         : (NSCaseInsensitiveSearch | NSNumericSearch| NSWidthInsensitiveSearch | NSForcedOrderingSearch);
     150    int comparisonOptions = [NSApp isOnLeopardOrBetter] ? (NSCaseInsensitiveSearch | NSNumericSearch
     151                                                            | NSWidthInsensitiveSearch | NSForcedOrderingSearch)
     152                                                        : (NSCaseInsensitiveSearch | NSNumericSearch);
    152153   
    153154    return [self compare: string options: comparisonOptions range: NSMakeRange(0, [self length]) locale: [NSLocale currentLocale]];
    154155}
    155156
    156 - (NSComparisonResult) compareIP: (NSString *) string
    157 {   
    158     NSArray * selfSections = [self componentsSeparatedByString: @"."],
    159             * newSections = [string componentsSeparatedByString: @"."];
     157- (NSComparisonResult) compareNumeric: (NSString *) string
     158{
     159    int comparisonOptions = [NSApp isOnLeopardOrBetter] ? (NSNumericSearch | NSForcedOrderingSearch) : NSNumericSearch;
    160160   
    161     if ([selfSections count] != [newSections count])
    162         return [selfSections count] > [newSections count] ? NSOrderedDescending : NSOrderedAscending;
    163 
    164     NSEnumerator * selfSectionsEnum = [selfSections objectEnumerator], * newSectionsEnum = [newSections objectEnumerator];
    165     NSString * selfString, * newString;
    166     int comparisonOptions = [NSApp isOnLeopardOrBetter] ? (NSNumericSearch | NSForcedOrderingSearch) : NSNumericSearch;
    167     NSComparisonResult result;
    168     while ((selfString = [selfSectionsEnum nextObject]) && (newString = [newSectionsEnum nextObject]))
    169         if ((result = [selfString compare: newString options: comparisonOptions
    170                         range: NSMakeRange(0, [selfString length]) locale: [NSLocale currentLocale]]) != NSOrderedSame)
    171             return result;
    172    
    173     return NSOrderedSame;
     161    return [self compare: string options: comparisonOptions range: NSMakeRange(0, [self length]) locale: [NSLocale currentLocale]];
    174162}
    175163
Note: See TracChangeset for help on using the changeset viewer.