Changeset 247


Ignore:
Timestamp:
May 1, 2006, 12:15:18 AM (17 years ago)
Author:
titer
Message:

Adds Action button that allows quick setting of upload and download limits,
Makes the bottom bar look like Mail's,
Moves stats to a top, hideable bar.

Location:
trunk
Files:
4 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Transmission.xcodeproj/project.pbxproj

    r199 r247  
    1616                4D1838C009DEC0430047D688 /* metainfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1838A109DEC0430047D688 /* metainfo.h */; };
    1717                4D1838C109DEC0430047D688 /* metainfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D1838A209DEC0430047D688 /* metainfo.c */; };
    18                 4D1838C209DEC0430047D688 /* peermessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1838A309DEC0430047D688 /* peermessages.h */; };
    1918                4D1838C309DEC0430047D688 /* peer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1838A409DEC0430047D688 /* peer.h */; };
    2019                4D1838C409DEC0430047D688 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4D1838A509DEC0430047D688 /* peer.c */; };
     
    7978                8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
    8079                8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
     80                A21610FC0A050B1700E8E4C1 /* MenuButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A21610FB0A050B1700E8E4C1 /* MenuButton.m */; };
     81                A26D450B0A0503AC00A10BB3 /* peermessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D1838A309DEC0430047D688 /* peermessages.h */; };
     82                A2A84AD00A04FCD000C898D4 /* ActionButton.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A2A84ACF0A04FCD000C898D4 /* ActionButton.tiff */; };
     83                A2C655650A04FEDC00E9FD82 /* BottomBorder.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A2C655640A04FEDC00E9FD82 /* BottomBorder.tiff */; };
    8184/* End PBXBuildFile section */
    8285
     
    191194                8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; name = Info.plist; path = macosx/Info.plist; sourceTree = "<group>"; };
    192195                8D1107320486CEB800E47090 /* Transmission.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Transmission.app; sourceTree = BUILT_PRODUCTS_DIR; };
     196                A21610FA0A050B1700E8E4C1 /* MenuButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = MenuButton.h; path = macosx/MenuButton.h; sourceTree = "<group>"; };
     197                A21610FB0A050B1700E8E4C1 /* MenuButton.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = MenuButton.m; path = macosx/MenuButton.m; sourceTree = "<group>"; };
     198                A2A84ACF0A04FCD000C898D4 /* ActionButton.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = ActionButton.tiff; path = macosx/Images/ActionButton.tiff; sourceTree = "<group>"; };
     199                A2A84AD10A04FCDC00C898D4 /* ActionButton.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = ActionButton.tiff; path = macosx/Images/ActionButton.tiff; sourceTree = "<group>"; };
     200                A2A84AD20A04FCDC00C898D4 /* BottomBorder.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = BottomBorder.tiff; path = macosx/Images/BottomBorder.tiff; sourceTree = "<group>"; };
     201                A2C655640A04FEDC00E9FD82 /* BottomBorder.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = BottomBorder.tiff; path = macosx/Images/BottomBorder.tiff; sourceTree = "<group>"; };
    193202/* End PBXFileReference section */
    194203
     
    243252                                29B97316FDCFA39411CA2CEA /* main.m */,
    244253                                32CA4F630368D1EE00C91783 /* Transmission_Prefix.pch */,
     254                                A21610FA0A050B1700E8E4C1 /* MenuButton.h */,
     255                                A21610FB0A050B1700E8E4C1 /* MenuButton.m */,
    245256                        );
    246257                        name = Sources;
     
    272283                        isa = PBXGroup;
    273284                        children = (
     285                                A2A84AD10A04FCDC00C898D4 /* ActionButton.tiff */,
     286                                A2A84AD20A04FCDC00C898D4 /* BottomBorder.tiff */,
    274287                                4D2784360905709500687951 /* Transmission.icns */,
    275288                                4D043A7E090AE979009FEDA8 /* TransmissionDocument.icns */,
     
    294307                                089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
    295308                                29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
     309                                A2A84ACF0A04FCD000C898D4 /* ActionButton.tiff */,
     310                                A2C655640A04FEDC00E9FD82 /* BottomBorder.tiff */,
    296311                        );
    297312                        name = Resources;
     
    388403                                4D1838BD09DEC0430047D688 /* inout.h in Headers */,
    389404                                4D1838C009DEC0430047D688 /* metainfo.h in Headers */,
    390                                 4D1838C209DEC0430047D688 /* peermessages.h in Headers */,
    391405                                4D1838C309DEC0430047D688 /* peer.h in Headers */,
    392406                                4D1838C509DEC0430047D688 /* net.h in Headers */,
     
    405419                                4D1838FA09DEC4380047D688 /* utils.h in Headers */,
    406420                                4D1838FC09DEC4380047D688 /* transmission.h in Headers */,
     421                                A26D450B0A0503AC00A10BB3 /* peermessages.h in Headers */,
    407422                        );
    408423                        runOnlyForDeploymentPostprocessing = 0;
     
    528543                                4DDFDD22099A5D8E00189D81 /* DownloadBadge.png in Resources */,
    529544                                4DDFDD23099A5D8E00189D81 /* UploadBadge.png in Resources */,
     545                                A2A84AD00A04FCD000C898D4 /* ActionButton.tiff in Resources */,
     546                                A2C655650A04FEDC00E9FD82 /* BottomBorder.tiff in Resources */,
    530547                        );
    531548                        runOnlyForDeploymentPostprocessing = 0;
     
    576593                                4DFBC2DF09C0970D00D5C571 /* Torrent.m in Sources */,
    577594                                4DCCBB3E09C3D71100D3CABF /* TorrentCell.m in Sources */,
     595                                A21610FC0A050B1700E8E4C1 /* MenuButton.m in Sources */,
    578596                        );
    579597                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/macosx/Controller.h

    r211 r247  
    5353    IBOutlet NSTextField        * fTotalDLField;
    5454    IBOutlet NSTextField        * fTotalULField;
     55    IBOutlet NSTextField        * fTotalTorrentsField;
     56    IBOutlet NSBox              * fStats;
     57    BOOL                        fStatusBar;
    5558
    5659    IBOutlet NSPanel            * fInfoPanel;
     
    121124- (void) runCustomizationPalette: (id) sender;
    122125- (void) showHideToolbar: (id) sender;
     126- (void) toggleStatusBar: (id) sender;
    123127
    124128- (void) showPreferenceWindow: (id) sender;
  • trunk/macosx/Controller.m

    r244 r247  
    8686    [fWindow setToolbar: fToolbar];
    8787    [fWindow setDelegate: self];
     88   
     89    fStatusBar = YES;
     90    if (![fDefaults boolForKey: @"StatusBar"])
     91        [self toggleStatusBar: nil];
    8892
    8993    [fTableView setTorrents: fTorrents];
     
    661665    [fTotalDLField setStringValue: downloadRate];
    662666    [fTotalULField setStringValue: uploadRate];
     667   
     668    int count = [fTorrents count];
     669    [fTotalTorrentsField setStringValue: [NSString stringWithFormat:
     670            @"%d Torrent%s", count, count == 1 ? "" : "s"]];
    663671
    664672    [self updateInfoPanel];
     
    840848}
    841849
     850- (void) toggleStatusBar: (id) sender
     851{
     852    fStatusBar = !fStatusBar;
     853
     854    NSSize frameSize = [fScrollView frame].size;
     855    [fStats setHidden: !fStatusBar];
     856   
     857    if (fStatusBar)
     858        frameSize.height -= 18;
     859    else
     860        frameSize.height += 18;
     861
     862    [fScrollView setFrameSize: frameSize];
     863    [fWindow display];
     864   
     865    [fDefaults setBool: fStatusBar forKey: @"StatusBar"];
     866}
     867
    842868- (BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem
    843869{
     
    893919    {
    894920        [menuItem setTitle: [fInfoPanel isVisible] ? @"Hide Info" : @"Show Info"];
     921        return YES;
     922    }
     923   
     924    //enable toggle toolbar
     925    if (action == @selector(toggleStatusBar:))
     926    {
     927        [menuItem setTitle: fStatusBar ? @"Hide Status Bar" : @"Show Status Bar"];
    895928        return YES;
    896929    }
  • trunk/macosx/Defaults.plist

    r213 r247  
    99        <key>BindPort</key>
    1010        <integer>9090</integer>
     11        <key>CheckDownload</key>
     12        <false/>
    1113        <key>CheckQuit</key>
    1214        <true/>
    1315        <key>CheckRemove</key>
    1416        <true/>
    15         <key>CheckDownload</key>
    16         <false/>
    1717        <key>CheckUpload</key>
    1818        <true/>
     
    3333        <key>ShowInspector</key>
    3434        <false/>
     35        <key>StatusBar</key>
     36        <true/>
    3537        <key>UploadLimit</key>
    3638        <integer>20</integer>
  • trunk/macosx/English.lproj/MainMenu.nib/classes.nib

    r213 r247  
    2323                stopAllTorrents = id;
    2424                stopTorrent = id;
     25                toggleStatusBar = id;
    2526            };
    2627            CLASS = Controller;
     
    5253                fScrollView = NSScrollView;
    5354                fShowHideToolbar = NSMenuItem;
     55                fStats = NSBox;
    5456                fTableView = TorrentTableView;
    5557                fTotalDLField = NSTextField;
     58                fTotalTorrentsField = NSTextField;
    5659                fTotalULField = NSTextField;
    5760                fWindow = NSWindow;
     
    6063        },
    6164        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
     65        {CLASS = MenuButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; },
     66        {CLASS = NSSegmentedControl; LANGUAGE = ObjC; SUPERCLASS = NSControl; },
    6267        {CLASS = NameCell; LANGUAGE = ObjC; SUPERCLASS = NSCell; },
    6368        {
     
    6873                setLimit = id;
    6974                setLimitCheck = id;
     75                setLimitMenu = id;
    7076                setPort = id;
     77                setQuickSpeed = id;
    7178                setQuitMessage = id;
    7279                setRemoveMessage = id;
     
    8188                fDownloadCheck = NSButton;
    8289                fDownloadField = NSTextField;
     90                fDownloadLimitItem = NSMenuItem;
     91                fDownloadMenu = NSMenu;
     92                fDownloadNoLimitItem = NSMenuItem;
    8393                fFolderPopUp = NSPopUpButton;
    8494                fGeneralView = NSView;
     
    91101                fUploadCheck = NSButton;
    92102                fUploadField = NSTextField;
     103                fUploadLimitItem = NSMenuItem;
     104                fUploadMenu = NSMenu;
     105                fUploadNoLimitItem = NSMenuItem;
    93106                fWindow = NSWindow;
    94107            };
  • trunk/macosx/English.lproj/MainMenu.nib/info.nib

    r213 r247  
    44<dict>
    55        <key>IBDocumentLocation</key>
    6         <string>62 69 426 365 0 0 1280 832 </string>
     6        <string>51 70 426 365 0 0 1152 842 </string>
    77        <key>IBEditorPositions</key>
    88        <dict>
     9                <key>1041</key>
     10                <string>344 478 204 68 0 0 1152 842 </string>
    911                <key>29</key>
    1012                <string>79 778 371 44 0 0 1152 842 </string>
     
    1416                <string>324 628 112 68 0 0 1152 842 </string>
    1517                <key>589</key>
    16                 <string>54 521 112 118 0 0 1152 842 </string>
     18                <string>54 521 103 68 0 0 1152 842 </string>
    1719                <key>783</key>
    18                 <string>411 429 420 250 0 0 1280 832 </string>
     20                <string>366 453 420 250 0 0 1152 842 </string>
    1921                <key>796</key>
    20                 <string>411 472 420 164 0 0 1280 832 </string>
     22                <string>366 496 420 164 0 0 1152 842 </string>
    2123                <key>825</key>
    22                 <string>544 501 155 107 0 0 1280 832 </string>
     24                <string>498 525 155 107 0 0 1152 842 </string>
    2325        </dict>
    2426        <key>IBFramework Version</key>
     
    2830        <key>IBOpenObjects</key>
    2931        <array>
    30                 <integer>796</integer>
    3132                <integer>21</integer>
    3233        </array>
  • trunk/macosx/PrefsController.h

    r213 r247  
    4848    IBOutlet NSTextField    * fDownloadField;
    4949   
     50    IBOutlet NSMenu         * fUploadMenu, * fDownloadMenu;
     51    IBOutlet NSMenuItem     * fUploadLimitItem, * fUploadNoLimitItem,
     52                            * fDownloadLimitItem, * fDownloadNoLimitItem;
     53   
    5054    IBOutlet NSWindow       * fWindow;
    5155
     
    6670- (void) setLimitCheck:         (id) sender;
    6771- (void) setLimit:              (id) sender;
     72- (void) setLimitMenu:          (id) sender;
     73- (void) setQuickSpeed:         (id) sender;
    6874
    6975@end
  • trunk/macosx/PrefsController.m

    r215 r247  
    125125    [fUploadField setEnabled: checkUpload];
    126126   
     127    [fUploadLimitItem setTitle:
     128                [NSString stringWithFormat: @"Limit (%d KB/s)", uploadLimit]];
     129    if (checkUpload)
     130        [fUploadLimitItem setState: NSOnState];
     131    else
     132        [fUploadNoLimitItem setState: NSOnState];
     133   
    127134    tr_setUploadLimit( fHandle, checkUpload ? uploadLimit : -1 );
    128135
     
    134141    [fDownloadField setIntValue: downloadLimit];
    135142    [fDownloadField setEnabled: checkDownload];
     143   
     144    [fDownloadLimitItem setTitle:
     145                [NSString stringWithFormat: @"Limit (%d KB/s)", downloadLimit]];
     146    if (checkDownload)
     147        [fDownloadLimitItem setState: NSOnState];
     148    else
     149        [fDownloadNoLimitItem setState: NSOnState];
    136150   
    137151    tr_setDownloadLimit( fHandle, checkDownload ? downloadLimit : -1 );
     
    231245}
    232246
    233 - (void) setLimitCheck: (id) sender
    234 {
     247- (void) setLimit: (id) sender
     248{
     249    int limit = [sender intValue];
     250   
    235251    NSString * key;
    236     NSTextField * field;
    237     if( sender == fUploadCheck )
    238     {
    239         key = @"CheckUpload";
    240         field = fUploadField;
    241     }
    242     else
    243     {
    244         key = @"CheckDownload";
    245         field = fDownloadField;
    246     }
    247 
    248     BOOL check = [sender state] == NSOnState;
    249     [fDefaults setBool: check forKey: key];
    250 
    251     [self setLimit: field];
    252     [field setEnabled: check];
    253 }
    254 
    255 - (void) setLimit: (id) sender
    256 {
    257     int limit = [sender intValue];
    258     NSString * key = ( sender == fUploadField ) ?
    259                         @"UploadLimit" : @"DownloadLimit";
     252    NSMenuItem * menuItem;
     253    if (sender == fUploadField)
     254    {
     255        key = @"UploadLimit";
     256        menuItem = fUploadLimitItem;
     257    }
     258    else
     259    {
     260        key = @"DownloadLimit";
     261        menuItem = fDownloadLimitItem;
     262    }
    260263
    261264    //if value entered is not an int or is less than 0 do not change
     
    269272    else
    270273    {
     274        [menuItem setTitle: [NSString stringWithFormat: @"Limit (%d KB/s)", limit]];
    271275        [fDefaults setInteger: limit forKey: key];
    272276    }
     
    278282        tr_setDownloadLimit( fHandle,
    279283            ( [fDownloadCheck state] == NSOffState ) ? -1 : limit );
     284}
     285
     286- (void) setLimitCheck: (id) sender
     287{
     288    NSString * key;
     289    NSTextField * field;
     290    NSMenuItem * limitItem, * noLimitItem;
     291    if( sender == fUploadCheck )
     292    {
     293        key = @"CheckUpload";
     294        field = fUploadField;
     295        limitItem = fUploadLimitItem;
     296        noLimitItem = fUploadNoLimitItem;
     297    }
     298    else
     299    {
     300        key = @"CheckDownload";
     301        field = fDownloadField;
     302        limitItem = fDownloadLimitItem;
     303        noLimitItem = fDownloadNoLimitItem;
     304    }
     305
     306    BOOL check = [sender state] == NSOnState;
     307    [limitItem setState: check ? NSOnState : NSOffState];
     308    [noLimitItem setState: !check ? NSOnState : NSOffState];
     309   
     310    [fDefaults setBool: check forKey: key];
     311
     312    [self setLimit: field];
     313   
     314    [field setEnabled: check];
     315}
     316
     317- (void) setLimitMenu: (id) sender
     318{
     319    NSButton * check = (sender == fUploadLimitItem || sender == fUploadNoLimitItem)
     320                        ? fUploadCheck : fDownloadCheck;
     321    int state = (sender == fUploadLimitItem || sender == fDownloadLimitItem)
     322                    ? NSOnState : NSOffState;
     323               
     324    [check setState: state];
     325    [self setLimitCheck: check];
     326}
     327
     328- (void) setQuickSpeed: (id) sender
     329{
     330    NSString * title = [sender title];
     331    int limit = [[title substringToIndex: [title length] - [@" KB/s" length]] intValue];
     332   
     333    if ([sender menu] == fUploadMenu)
     334    {
     335        [fUploadField setIntValue: limit];
     336        [self setLimitMenu: fUploadLimitItem];
     337    }
     338    else
     339    {
     340        [fDownloadField setIntValue: limit];
     341        [self setLimitMenu: fDownloadLimitItem];
     342    }
    280343}
    281344
  • trunk/macosx/TorrentTableView.m

    r211 r247  
    138138    if( row >= 0 )
    139139    {
    140         if( OSX_VERSION >= 10.3 )
    141             [self selectRowIndexes: [NSIndexSet indexSetWithIndex: row]
    142                 byExtendingSelection: [self isRowSelected: row]];
    143         else
    144             [self selectRow: row byExtendingSelection: [self isRowSelected: row]];
     140        if (![self isRowSelected: row])
     141        {
     142            if( OSX_VERSION >= 10.3 )
     143                [self selectRowIndexes: [NSIndexSet indexSetWithIndex: row]
     144                    byExtendingSelection: NO];
     145            else
     146                [self selectRow: row byExtendingSelection: NO];
     147        }
    145148        return fContextRow;
    146149    }
Note: See TracChangeset for help on using the changeset viewer.