Changeset 4114

Show
Ignore:
Timestamp:
05/10/06 00:29:22 (3 years ago)
Author:
morris
Message:

Can now save chat as RTF, and select encoding when saving as plain text

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • WiredClient/trunk/English.lproj/ReleaseNotes.rtf

    r4111 r4114  
    3030\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural 
    3131 
    32 \f1\b0 \cf0 - Add option to show a dialog for messages and broadcasts\ 
     32\f1\b0 \cf0 - Can now save chat as RTF, and select encoding when saving as plain text\ 
     33- Add option to show a dialog for messages and broadcasts\ 
    3334- Show tooltips in user list\ 
    3435\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural 
  • WiredClient/trunk/WCChat.h

    r3661 r4114  
    5555        IBOutlet NSMenuItem                                     *_getInfoMenuItem; 
    5656        IBOutlet NSMenuItem                                     *_ignoreMenuItem; 
     57         
     58        IBOutlet NSView                                         *_saveChatView; 
     59        IBOutlet NSPopUpButton                          *_saveChatFileFormatPopUpButton; 
     60        IBOutlet NSPopUpButton                          *_saveChatPlainTextEncodingPopUpButton; 
    5761 
    5862        NSMutableArray                                          *_commandHistory; 
     
    104108- (IBAction)unignore:(id)sender; 
    105109 
     110- (IBAction)fileFormat:(id)sender; 
     111 
    106112@end 
  • WiredClient/trunk/WCChat.m

    r3988 r4114  
    4242#import "WCUserInfo.h" 
    4343 
     44#define WCLastChatFormat                        @"WCLastChatFormat" 
     45#define WCLastChatEncoding                      @"WCLastChatEncoding" 
     46 
     47 
     48enum _WCChatFormat { 
     49        WCChatPlainText, 
     50        WCChatRTF, 
     51        WCChatRTFD, 
     52}; 
     53typedef enum _WCChatFormat                      WCChatFormat; 
     54 
     55 
    4456@interface WCChat(Private) 
    4557 
    4658- (void)_update; 
    4759- (void)_updateTopic; 
     60- (void)_updateSaveChatForPanel:(NSSavePanel *)savePanel; 
    4861 
    4962- (void)_printString:(NSString *)message; 
     
    140153                        [[_topic date] commonDateStringWithSeconds:NO relative:YES capitalized:YES]]]; 
    141154        } 
     155} 
     156 
     157 
     158 
     159- (void)_updateSaveChatForPanel:(NSSavePanel *)savePanel { 
     160        WCChatFormat            format; 
     161         
     162        format = [_saveChatFileFormatPopUpButton tagOfSelectedItem]; 
     163         
     164        switch(format) { 
     165                case WCChatPlainText: 
     166                        [savePanel setRequiredFileType:@"txt"]; 
     167                        break; 
     168                         
     169                case WCChatRTF: 
     170                        [savePanel setRequiredFileType:@"rtf"]; 
     171                        break; 
     172 
     173                case WCChatRTFD: 
     174                        [savePanel setRequiredFileType:@"rtfd"]; 
     175                        break; 
     176        } 
     177 
     178        [_saveChatPlainTextEncodingPopUpButton setEnabled:(format == WCChatPlainText)]; 
    142179} 
    143180 
     
    608645- (void)dealloc { 
    609646        [[NSNotificationCenter defaultCenter] removeObserver:self]; 
     647         
     648        [_saveChatView release]; 
    610649         
    611650        [_users release]; 
     
    13591398 
    13601399- (IBAction)saveChat:(id)sender { 
    1361          NSSavePanel    *savePanel; 
    1362          NSString               *name, *path; 
    1363          NSData                 *data; 
     1400        const NSStringEncoding  *encodings; 
     1401        NSSavePanel                             *savePanel; 
     1402        NSAttributedString              *attributedString; 
     1403        NSString                                *name, *path, *string; 
     1404        WCChatFormat                    format; 
     1405        NSStringEncoding                encoding; 
     1406        unsigned int                    i = 0; 
    13641407          
    1365          if([self chatID] == 1) { 
    1366                  name = [NSSWF:NSLS(@"%@ Public Chat.txt", "Save chat file name (server)"), 
    1367                          [[self connection] name]]; 
    1368          } else { 
    1369                  name = [NSSWF:NSLS(@"%@ Private Chat.txt", "Save chat file name (server)"), 
    1370                          [[self connection] name]]; 
    1371          } 
    1372           
    1373          path = [WCSettings objectForKey:WCDownloadFolder]; 
    1374          savePanel = [NSSavePanel savePanel]; 
    1375          [savePanel setCanSelectHiddenExtension:YES]; 
    1376          [savePanel setTitle:NSLS(@"Save Chat", @"Save chat save panel title")]; 
    1377           
    1378          if([savePanel runModalForDirectory:path file:name] == NSFileHandlingPanelOKButton) { 
    1379                 data = [[_chatOutputTextView string] dataUsingEncoding:NSUTF8StringEncoding]; 
    1380                 [data writeToFile:[savePanel filename] atomically:YES]; 
    1381         } 
     1408        format          = [WCSettings intForKey:WCLastChatFormat]; 
     1409        encoding        = [WCSettings intForKey:WCLastChatEncoding]; 
     1410         
     1411        if(encoding == 0) 
     1412                encoding = NSUTF8StringEncoding; 
     1413         
     1414        if(!_saveChatView) { 
     1415                [NSBundle loadNibNamed:@"SaveChat" owner:self]; 
     1416                 
     1417                [_saveChatFileFormatPopUpButton removeAllItems]; 
     1418                [_saveChatFileFormatPopUpButton addItem: 
     1419                        [NSMenuItem itemWithTitle:NSLS(@"Plain Text", @"Save chat format") tag:WCChatPlainText]]; 
     1420                 
     1421                [_saveChatPlainTextEncodingPopUpButton removeAllItems]; 
     1422 
     1423                encodings = [NSString availableStringEncodings]; 
     1424                 
     1425                while(encodings[i]) { 
     1426                        if(encodings[i] <= NSMacOSRomanStringEncoding) { 
     1427                                [_saveChatPlainTextEncodingPopUpButton addItem: 
     1428                                        [NSMenuItem itemWithTitle:[NSString localizedNameOfStringEncoding:encodings[i]] tag:encodings[i]]]; 
     1429                        } 
     1430                         
     1431                        i++; 
     1432                } 
     1433        } 
     1434         
     1435        if([_saveChatFileFormatPopUpButton numberOfItems] > 1) 
     1436                [_saveChatFileFormatPopUpButton removeItemAtIndex:1]; 
     1437         
     1438        if([[_chatOutputTextView textStorage] containsAttachments]) { 
     1439                [_saveChatFileFormatPopUpButton addItem: 
     1440                        [NSMenuItem itemWithTitle:NSLS(@"Rich Text With Graphics Format (RTFD)", @"Save chat format") tag:WCChatRTFD]]; 
     1441                 
     1442                if(format == WCChatRTF) 
     1443                        format = WCChatRTFD; 
     1444        } else { 
     1445                [_saveChatFileFormatPopUpButton addItem: 
     1446                        [NSMenuItem itemWithTitle:NSLS(@"Rich Text Format (RTF)", @"Save chat format") tag:WCChatRTF]]; 
     1447                 
     1448                if(format == WCChatRTFD) 
     1449                        format = WCChatRTF; 
     1450        } 
     1451         
     1452        [_saveChatFileFormatPopUpButton selectItemWithTag:format]; 
     1453        [_saveChatPlainTextEncodingPopUpButton selectItemWithTag:encoding]; 
     1454         
     1455        if([self chatID] == 1) { 
     1456                name = [NSSWF:NSLS(@"%@ Public Chat", "Save chat file name (server)"), 
     1457                        [[self connection] name]]; 
     1458        } else { 
     1459                name = [NSSWF:NSLS(@"%@ Private Chat", "Save chat file name (server)"), 
     1460                        [[self connection] name]]; 
     1461        } 
     1462         
     1463        savePanel = [NSSavePanel savePanel]; 
     1464        [savePanel setAccessoryView:_saveChatView]; 
     1465        [savePanel setCanSelectHiddenExtension:YES]; 
     1466        [savePanel setTitle:NSLS(@"Save Chat", @"Save chat save panel title")]; 
     1467         
     1468        [self _updateSaveChatForPanel:savePanel]; 
     1469 
     1470        if([savePanel runModalForDirectory:[WCSettings objectForKey:WCDownloadFolder] file:name] == NSFileHandlingPanelOKButton) { 
     1471                path            = [savePanel filename]; 
     1472                format          = [_saveChatFileFormatPopUpButton tagOfSelectedItem]; 
     1473                encoding        = [_saveChatPlainTextEncodingPopUpButton tagOfSelectedItem]; 
     1474                 
     1475                switch(format) { 
     1476                        case WCChatPlainText: 
     1477                                string = [_chatOutputTextView string]; 
     1478                                 
     1479                                [[string dataUsingEncoding:encoding] 
     1480                                        writeToFile:path atomically:YES]; 
     1481                                break; 
     1482                         
     1483                        case WCChatRTF: 
     1484                                attributedString = [_chatOutputTextView textStorage]; 
     1485                                 
     1486                                [[attributedString RTFFromRange:NSMakeRange(0, [attributedString length]) documentAttributes:NULL] 
     1487                                        writeToFile:path atomically:YES]; 
     1488                                break; 
     1489                         
     1490                        case WCChatRTFD: 
     1491                                attributedString = [_chatOutputTextView textStorage]; 
     1492                                 
     1493                                [[attributedString RTFDFileWrapperFromRange:NSMakeRange(0, [attributedString length]) documentAttributes:NULL] 
     1494                                        writeToFile:path atomically:YES updateFilenames:YES]; 
     1495                                break; 
     1496                } 
     1497        } 
     1498         
     1499        [WCSettings setInt:[_saveChatFileFormatPopUpButton tagOfSelectedItem] forKey:WCLastChatFormat]; 
     1500        [WCSettings setInt:[_saveChatPlainTextEncodingPopUpButton tagOfSelectedItem] forKey:WCLastChatEncoding]; 
    13821501} 
    13831502 
     
    14971616 
    14981617        [_userListTableView setNeedsDisplay:YES]; 
     1618} 
     1619 
     1620 
     1621 
     1622#pragma mark - 
     1623 
     1624- (IBAction)fileFormat:(id)sender { 
     1625        [self _updateSaveChatForPanel:(NSSavePanel *) [sender window]]; 
    14991626} 
    15001627 
  • WiredClient/trunk/WiredClient.xcodeproj/project.pbxproj

    r3644 r4114  
    110110                A510F67C05D388890009F8AC /* WCTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = A510F67A05D388890009F8AC /* WCTracker.m */; }; 
    111111                A521257E061393990009F296 /* Banner.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A521257D061393990009F296 /* Banner.tiff */; }; 
     112                A5239C750A112B15009DD940 /* SaveChat.nib in Resources */ = {isa = PBXBuildFile; fileRef = A5239C730A112B15009DD940 /* SaveChat.nib */; }; 
    112113                A52B301C05E6F0A300C651A4 /* WCServerInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = A52B301A05E6F0A300C651A4 /* WCServerInfo.m */; }; 
    113114                A52B302105E6FCB100C651A4 /* ServerInfo.nib in Resources */ = {isa = PBXBuildFile; fileRef = A52B301F05E6FCB100C651A4 /* ServerInfo.nib */; }; 
     
    379380                A510F67A05D388890009F8AC /* WCTracker.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = WCTracker.m; sourceTree = "<group>"; }; 
    380381                A521257D061393990009F296 /* Banner.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Banner.tiff; sourceTree = "<group>"; }; 
     382                A5239C740A112B15009DD940 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/SaveChat.nib; sourceTree = "<group>"; }; 
    381383                A52B301905E6F0A300C651A4 /* WCServerInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WCServerInfo.h; sourceTree = "<group>"; }; 
    382384                A52B301A05E6F0A300C651A4 /* WCServerInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WCServerInfo.m; sourceTree = "<group>"; }; 
     
    726728                                A5DC7E3F057AAC1000736BBF /* PrivateChat.nib */, 
    727729                                A5DC7E61057AAC1100736BBF /* PublicChat.nib */, 
     730                                A5239C730A112B15009DD940 /* SaveChat.nib */, 
    728731                                A5DC7E59057AAC1000736BBF /* UserInfo.nib */, 
    729732                        ); 
     
    12391242                                A5DC7E67057AAC1100736BBF /* PrivateChat.nib in Resources */, 
    12401243                                A5DC7E78057AAC1100736BBF /* PublicChat.nib in Resources */, 
     1244                                A5239C750A112B15009DD940 /* SaveChat.nib in Resources */, 
    12411245                                A5DC7E72057AAC1100736BBF /* Search.nib in Resources */, 
    12421246                                A52B302105E6FCB100C651A4 /* ServerInfo.nib in Resources */, 
     
    14581462 
    14591463/* Begin PBXVariantGroup section */ 
     1464                A5239C730A112B15009DD940 /* SaveChat.nib */ = { 
     1465                        isa = PBXVariantGroup; 
     1466                        children = ( 
     1467                                A5239C740A112B15009DD940 /* English */, 
     1468                        ); 
     1469                        name = SaveChat.nib; 
     1470                        sourceTree = "<group>"; 
     1471                }; 
    14601472                A52B301F05E6FCB100C651A4 /* ServerInfo.nib */ = { 
    14611473                        isa = PBXVariantGroup;