Changeset 3056

Show
Ignore:
Timestamp:
12/18/05 13:37:05 (3 years ago)
Author:
timothy
Message:

Landing the patch by Stephen Buttler attached to #384.
Allows users to group windows together by their server connection. Creates a new special window rule called "Server Window" patterned off "Focused Window" and "New Window". When a chat view matches this rule it is placed in the window controller for that server connection.
Server window positions are remembered by their server address.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/Colloquy.xcodeproj/project.pbxproj

    r3053 r3056  
    6868                1C6C75460630AD5300698F55 /* AGRegex.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C6C75450630AD5300698F55 /* AGRegex.framework */; }; 
    6969                1C6C75490630AD9500698F55 /* AGRegex.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 1C6C75450630AD5300698F55 /* AGRegex.framework */; }; 
     70                1C6E43C40955EFD7002D22E7 /* serverWindow.png in Resources */ = {isa = PBXBuildFile; fileRef = 1C6E43C30955EFD7002D22E7 /* serverWindow.png */; }; 
    7071                1C6EA23E05A735D6006A559F /* JVChatRoomBrowser.nib in Resources */ = {isa = PBXBuildFile; fileRef = 1C6EA23C05A735D6006A559F /* JVChatRoomBrowser.nib */; }; 
    7172                1C6EA24405A738DD006A559F /* JVChatRoomBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C6EA24205A738DD006A559F /* JVChatRoomBrowser.m */; }; 
     
    540541                1C6A46A50841951200572AB6 /* gearSmall.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gearSmall.png; path = Resources/gearSmall.png; sourceTree = "<group>"; }; 
    541542                1C6C75450630AD5300698F55 /* AGRegex.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGRegex.framework; path = Frameworks/AGRegex.framework; sourceTree = SOURCE_ROOT; }; 
     543                1C6E43C30955EFD7002D22E7 /* serverWindow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = serverWindow.png; path = Resources/serverWindow.png; sourceTree = "<group>"; }; 
    542544                1C6EA23D05A735D6006A559F /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = Languages/English.lproj/JVChatRoomBrowser.nib; sourceTree = "<group>"; }; 
    543545                1C6EA24105A738DD006A559F /* JVChatRoomBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JVChatRoomBrowser.h; sourceTree = "<group>"; }; 
     
    16121614                                1C6A42A608400E7900572AB6 /* targetWindow.png */, 
    16131615                                1C45BFA4086F4BD80079E014 /* newWindow.png */, 
     1616                                1C6E43C30955EFD7002D22E7 /* serverWindow.png */, 
    16141617                                1C6A46A50841951200572AB6 /* gearSmall.png */, 
    16151618                                1C77822808FA4101006AD8E5 /* topicBackground.png */, 
     
    21672170                                1C77831208FA4EA2006AD8E5 /* topicToggleDown.png in Resources */, 
    21682171                                1C77831308FA4EA2006AD8E5 /* topicToggleUp.png in Resources */, 
     2172                                1C6E43C40955EFD7002D22E7 /* serverWindow.png in Resources */, 
    21692173                        ); 
    21702174                        runOnlyForDeploymentPostprocessing = 0; 
  • trunk/JVChatController.m

    r3046 r3056  
    166166                } else if( [[windowSet objectForKey:@"special"] isEqualToString:@"newWindow"] ) { 
    167167                        windowController = [self newChatWindowController]; 
     168                } else if( [[windowSet objectForKey:@"special"] isEqualToString:@"serverWindow"] ) { 
     169                        windowController = [self chatWindowControllerWithIdentifier:[[controller connection] server]]; 
    168170                } else if( [[windowSet objectForKey:@"identifier"] length] ) { 
    169171                        windowController = [self chatWindowControllerWithIdentifier:[windowSet objectForKey:@"identifier"]]; 
  • trunk/JVInterfacePreferences.m

    r2931 r3056  
    6565        BOOL haveCurrentWindow = NO; 
    6666        BOOL haveNewWindow = NO; 
     67        BOOL haveServerWindow = NO; 
    6768 
    6869        while( ( info = [enumerator nextObject] ) ) { 
     
    7475                } else if( [value isEqualToString:@"currentWindow"] ) haveCurrentWindow = YES; 
    7576                else if( [value isEqualToString:@"newWindow"] ) haveNewWindow = YES; 
     77                else if( [value isEqualToString:@"serverWindow"] ) haveServerWindow = YES; 
    7678        } 
    7779 
     
    9092 
    9193                [info setObject:@"newWindow" forKey:@"special"]; 
     94                [info setObject:[NSString locallyUniqueString] forKey:@"identifier"]; 
     95                [info setObject:[NSMutableArray array] forKey:@"rules"]; 
     96        } 
     97 
     98        if( ! haveServerWindow ) { 
     99                info = [NSMutableDictionary dictionary]; 
     100                [_windowSets addObject:info]; 
     101                 
     102                [info setObject:@"serverWindow" forKey:@"special"]; 
    92103                [info setObject:[NSString locallyUniqueString] forKey:@"identifier"]; 
    93104                [info setObject:[NSMutableArray array] forKey:@"rules"]; 
     
    164175                if( [[info objectForKey:@"special"] isEqualToString:@"currentWindow"] ) return [NSImage imageNamed:@"targetWindow"]; 
    165176                else if( [[info objectForKey:@"special"] isEqualToString:@"newWindow"] ) return [NSImage imageNamed:@"newWindow"]; 
     177                else if( [[info objectForKey:@"special"] isEqualToString:@"serverWindow"] ) return [NSImage imageNamed:@"serverWindow"]; 
    166178                else return [NSImage imageNamed:@"window"]; 
    167179        } else if( view == rulesTable ) { 
     
    179191                else if( [[info objectForKey:@"special"] isEqualToString:@"newWindow"] ) 
    180192                        [(JVDetailCell *) cell setMainText:NSLocalizedString( @"New Window", "new window label, interface preferences" )]; 
     193                else if( [[info objectForKey:@"special"] isEqualToString:@"serverWindow"] ) 
     194                        [(JVDetailCell *) cell setMainText:NSLocalizedString( @"Server Window", "server window label, interface preferences" )]; 
    181195                else [(JVDetailCell *) cell setMainText:[info objectForKey:@"title"]]; 
    182196