From 3852bbb6e659aba95a5c93c8c63e571bf8880eb9 Mon Sep 17 00:00:00 2001 From: Mitchell Livingston Date: Tue, 29 May 2007 02:00:23 +0000 Subject: [PATCH] some rewriting of the filter bar so it can dynamically place the buttons, and some extra, yet-to-be-used code --- Transmission.xcodeproj/project.pbxproj | 6 + libtransmission/inout.c | 6 +- macosx/Controller.h | 10 +- macosx/Controller.m | 2 + macosx/English.lproj/MainMenu.nib/classes.nib | 11 ++ macosx/English.lproj/MainMenu.nib/info.nib | 3 +- .../MainMenu.nib/keyedobjects.nib | Bin 53424 -> 54228 bytes macosx/FilterBarButton.h | 4 +- macosx/FilterBarButton.m | 160 +++++++++--------- macosx/FilterBarView.h | 37 ++++ macosx/FilterBarView.m | 38 +++++ 11 files changed, 191 insertions(+), 86 deletions(-) create mode 100644 macosx/FilterBarView.h create mode 100644 macosx/FilterBarView.m diff --git a/Transmission.xcodeproj/project.pbxproj b/Transmission.xcodeproj/project.pbxproj index 4c101e9e8..e379daf28 100644 --- a/Transmission.xcodeproj/project.pbxproj +++ b/Transmission.xcodeproj/project.pbxproj @@ -62,6 +62,7 @@ A246004D0A6DCE4600D19088 /* SpeedLimitButtonPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = A246004C0A6DCE4600D19088 /* SpeedLimitButtonPressed.png */; }; A24600510A6DCE6600D19088 /* SpeedLimitButtonBlue.png in Resources */ = {isa = PBXBuildFile; fileRef = A246004F0A6DCE6600D19088 /* SpeedLimitButtonBlue.png */; }; A24600520A6DCE6600D19088 /* SpeedLimitButtonGraphite.png in Resources */ = {isa = PBXBuildFile; fileRef = A24600500A6DCE6600D19088 /* SpeedLimitButtonGraphite.png */; }; + A24838820C0BA608005CC3FE /* FilterBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = A24838800C0BA608005CC3FE /* FilterBarView.m */; }; A24999230B49F1B5001EADA3 /* ActionPopUpButton.m in Sources */ = {isa = PBXBuildFile; fileRef = A24999210B49F1B5001EADA3 /* ActionPopUpButton.m */; }; A24D2A640C0A624600A0ED9F /* IPCController.m in Sources */ = {isa = PBXBuildFile; fileRef = A24D2A620C0A624600A0ED9F /* IPCController.m */; }; A24F19080A3A790800C9C145 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A24F19070A3A790800C9C145 /* Sparkle.framework */; }; @@ -328,6 +329,8 @@ A246004C0A6DCE4600D19088 /* SpeedLimitButtonPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = SpeedLimitButtonPressed.png; path = macosx/Images/SpeedLimitButtonPressed.png; sourceTree = ""; }; A246004F0A6DCE6600D19088 /* SpeedLimitButtonBlue.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = SpeedLimitButtonBlue.png; path = macosx/Images/SpeedLimitButtonBlue.png; sourceTree = ""; }; A24600500A6DCE6600D19088 /* SpeedLimitButtonGraphite.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = SpeedLimitButtonGraphite.png; path = macosx/Images/SpeedLimitButtonGraphite.png; sourceTree = ""; }; + A248387F0C0BA608005CC3FE /* FilterBarView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = FilterBarView.h; path = macosx/FilterBarView.h; sourceTree = ""; }; + A24838800C0BA608005CC3FE /* FilterBarView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = FilterBarView.m; path = macosx/FilterBarView.m; sourceTree = ""; }; A24999200B49F1B5001EADA3 /* ActionPopUpButton.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ActionPopUpButton.h; path = macosx/ActionPopUpButton.h; sourceTree = ""; }; A24999210B49F1B5001EADA3 /* ActionPopUpButton.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = ActionPopUpButton.m; path = macosx/ActionPopUpButton.m; sourceTree = ""; }; A24D2A610C0A624600A0ED9F /* IPCController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = IPCController.h; path = macosx/IPCController.h; sourceTree = ""; }; @@ -616,6 +619,8 @@ A2A1CB770BF29D5500AE959F /* PeerProgressIndicatorCell.h */, A2A1CB780BF29D5500AE959F /* PeerProgressIndicatorCell.m */, E138A9720C04D88F00C5426C /* CTGradient */, + A248387F0C0BA608005CC3FE /* FilterBarView.h */, + A24838800C0BA608005CC3FE /* FilterBarView.m */, ); name = Sources; sourceTree = ""; @@ -1208,6 +1213,7 @@ E138A9770C04D88F00C5426C /* CTGradient.m in Sources */, E138A9780C04D88F00C5426C /* CTGradientAdditions.m in Sources */, A24D2A640C0A624600A0ED9F /* IPCController.m in Sources */, + A24838820C0BA608005CC3FE /* FilterBarView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/libtransmission/inout.c b/libtransmission/inout.c index 8091fb837..6dd3d51e6 100644 --- a/libtransmission/inout.c +++ b/libtransmission/inout.c @@ -242,7 +242,9 @@ void tr_ioSync( tr_io_t * io ) closeFiles( io ); if( io->checkFilesPassed ) + { fastResumeSave( io ); + } } /*********************************************************************** @@ -335,7 +337,7 @@ static int checkFiles( tr_io_t * io ) { if ( io->pieceSlot[j] > 0 && j == i) { - // only remove double piece when we found one sitting in the right slot + /* Only remove double piece when we found one sitting in the right slot */ tr_inf( "found piece %d (slot: %d) already on slot %d",j,i,io->pieceSlot[j] ); io->slotPiece[io->pieceSlot[j]] = -1; @@ -343,7 +345,7 @@ static int checkFiles( tr_io_t * io ) io->pieceSlot[j] = i; io->slotPiece[i] = j; } - else // we found no double + else /* We found no double */ { io->pieceSlot[j] = i; io->slotPiece[i] = j; diff --git a/macosx/Controller.h b/macosx/Controller.h index f9b44d4d9..73d375f60 100644 --- a/macosx/Controller.h +++ b/macosx/Controller.h @@ -33,7 +33,7 @@ #import "DragOverlayWindow.h" #import "Badger.h" #import "ImageBackgroundView.h" -#import "FilterBarButton.h" +#import "FilterBarView.h" #import "IPCController.h" #import @@ -72,9 +72,9 @@ * fNameSortActionItem, * fStateSortActionItem, * fProgressSortActionItem, * fDateSortActionItem, * fOrderSortActionItem; - IBOutlet ImageBackgroundView * fFilterBar; - IBOutlet FilterBarButton * fNoFilterButton, * fPauseFilterButton, - * fSeedFilterButton, * fDownloadFilterButton; + IBOutlet FilterBarView * fFilterBar; + IBOutlet FilterBarButton * fNoFilterButton, * fDownloadFilterButton, + * fSeedFilterButton, * fPauseFilterButton; IBOutlet NSSearchField * fSearchFilterField; IBOutlet NSMenuItem * fNextFilterItem, * fPrevFilterItem; @@ -100,7 +100,7 @@ NSMutableDictionary * fPendingTorrentDownloads; NSTimer * fAutoImportTimer; - BOOL fRemoteQuit; + BOOL fRemoteQuit; } - (void) openFiles: (NSArray *) filenames; diff --git a/macosx/Controller.m b/macosx/Controller.m index 63f53e67e..c0d4155a9 100644 --- a/macosx/Controller.m +++ b/macosx/Controller.m @@ -360,6 +360,8 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy [currentFilterButton setEnabled: YES]; + [fFilterBar replaceButtons]; + //observe notifications NSNotificationCenter * nc = [NSNotificationCenter defaultCenter]; diff --git a/macosx/English.lproj/MainMenu.nib/classes.nib b/macosx/English.lproj/MainMenu.nib/classes.nib index fd2bef1e3..ddefb88a2 100644 --- a/macosx/English.lproj/MainMenu.nib/classes.nib +++ b/macosx/English.lproj/MainMenu.nib/classes.nib @@ -93,6 +93,17 @@ SUPERCLASS = NSObject; }, {CLASS = FilterBarButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; }, + { + CLASS = FilterBarView; + LANGUAGE = ObjC; + OUTLETS = { + fDownloadFilterButton = FilterBarButton; + fNoFilterButton = FilterBarButton; + fPauseFilterButton = FilterBarButton; + fSeedFilterButton = FilterBarButton; + }; + SUPERCLASS = ImageBackgroundView; + }, { ACTIONS = {deselectAll = id; revealFile = id; setNextTab = id; setPreviousTab = id; }; CLASS = FirstResponder; diff --git a/macosx/English.lproj/MainMenu.nib/info.nib b/macosx/English.lproj/MainMenu.nib/info.nib index 1d5f8ed87..d5fa456e5 100644 --- a/macosx/English.lproj/MainMenu.nib/info.nib +++ b/macosx/English.lproj/MainMenu.nib/info.nib @@ -11,7 +11,7 @@ 1480 366 546 420 63 0 0 1152 842 1603 - 275 437 477 67 0 0 1152 842 + 337 544 477 67 0 0 1152 842 29 145 689 451 44 0 0 1152 842 456 @@ -32,6 +32,7 @@ IBOpenObjects 21 + 1603 IBSystem Version 8P135 diff --git a/macosx/English.lproj/MainMenu.nib/keyedobjects.nib b/macosx/English.lproj/MainMenu.nib/keyedobjects.nib index 71fa2702b6b3d6d3897cabc81e8a150e43e681e9..4a7c03fed179cf5e1fe14560b8e0fa1e24733b5a 100644 GIT binary patch literal 54228 zcmcG%2YggT_cuP}?(V&Nw`C!B0TCjiC<-K@H-XTk6B2qeBpV1M*^ojJ(K|L!K>GUi*kCxH-bOEiRi}7s&?cparm3g=CEQ`$`-InwumieOV~0d z*rn_Wb`@LCHn2@>GrNIpW82y7>`rzM`wx47z0P*CJ!~&~i@nc2VZX9J0QVnGxt|Ak zkT>J4@p(LN!%yI+^X|L{@5y`d-nYS8;RpG*tSkSH|Hyyh zzwlrAA-0?U#*gqn_)*QRc{E)!w1AeWwbWW^$7xyGDOxA3v(`oHrghi)XnpAy+CXin zHd@QqCTIoP6m7P4mR6*dY89&8LTwSC=-P7aeC-nLQtdKrm9|z}r`@1!*KXDB*6z_B z)E?5F(ROJsYkRdfwD+|Sv`@58wQsdwv|qJDX#0nYxI8Z1Ww-*aOjk=+E7x(Z)~+m9 z2iGaCQ(c{0-CW&WJzRZVd9J~(A+DjWk*<7gwriqxmTQu0x|Z*nqfKxXyXLuKt{PXZ ztIl<{OW^Z-*9zC=>drdXHR{f0*EZMft~*>iT>o)BgwKavkGr13=kuBQhU;C| zetaHqeeU`epWnHDb{)azAFiWrx9bkK$L(`B!)J4MOLrDNPjH_s;ki4xb0s`?Z}%Az zo_nZ!q=e_rcTbY=+%w&CBs_PSyHdh)*SXJD@Pzwf1#h)`or1T~z1e-U`!@IO?mOJ~ zxF5vlL+;1i&*Jkr_b&GyeC~C>S&*3;f|lBc8R zG*7lC$J4{p)6>t>-;?JV;lAB7(lgF837?ZaGdv}p`JM%y8c(ffspo9Zxt{Yp7kXBC zR(sZauJ&Bxx!$wMv(`OS0K^SkGW z=MSCeRM&Jv_v(H!i2QI_quq6SZITj-Gz{X?nJ{OYf=o(tGP?XnXN( zs6I>|rM<6D&`qTO|xOx$vuj+fXPxSZn_wl!1|4cuq|DYey z|2DW`8eyZEajMbL$T4z_u0}tjzcI)dX^b*P^A^S!Bj1={Of;q#MSP_($0#-y80AK- zQD-b=LE~KGeB%ORg>i|o%D6(c*kEilZZK|C-)}eWFzz+(Q{Q(Qj~UMz&l%5qjufI~adw;%^N8Cg5+fcZPSScaFE%JI`C@t@Osc zwca}XosGZq@OPnirS}T&8t+=~I`1{!8|2*g-sru>yWM+-_g?RV-iN%8dY|wcE??La+`25BDJKOC&Y7�ZqsA>Ouw07wlG_ot<1LO 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 literal 53424 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 diff --git a/macosx/FilterBarButton.h b/macosx/FilterBarButton.h index fcee3ab0b..f141e09bc 100644 --- a/macosx/FilterBarButton.h +++ b/macosx/FilterBarButton.h @@ -28,11 +28,13 @@ { NSImage * fButtonNormal, * fButtonNormalDim, * fButtonOver, * fButtonPressed, * fButtonSelected, * fButtonSelectedDim; - + int fCount; + BOOL fEnabled; NSTrackingRectTag fTrackingTag; } +- (void) createButtonsWithCount: (int) count; - (void) setEnabled: (BOOL) enable; - (void) resetBounds: (NSNotification *) notification; diff --git a/macosx/FilterBarButton.m b/macosx/FilterBarButton.m index ca45436f8..088aa3fde 100644 --- a/macosx/FilterBarButton.m +++ b/macosx/FilterBarButton.m @@ -24,15 +24,8 @@ #import "FilterBarButton.h" -@interface FilterBarButton (Private) - -- (void) createButtons; - -@end - @implementation FilterBarButton -//height of button should be 17.0 - (id) initWithCoder: (NSCoder *) coder { if ((self = [super initWithCoder: coder])) @@ -40,7 +33,8 @@ fEnabled = NO; fTrackingTag = 0; - [self createButtons]; + fCount = -1; + [self createButtonsWithCount: 0]; [self setImage: fButtonNormal]; [self setAlternateImage: fButtonPressed]; @@ -73,9 +67,83 @@ } //call only once -- (void) createButtons +- (void) createButtonsWithCount: (int) count { - NSSize buttonSize = [self frame].size; + if (fCount == count) + return; + fCount = count; + + //create attributes + NSFont * boldFont = [[NSFontManager sharedFontManager] convertFont: + [NSFont fontWithName: @"Lucida Grande" size: 12.0] toHaveTrait: NSBoldFontMask]; + + NSSize shadowOffset = NSMakeSize(0.0, -1.0); + + NSShadow * shadow = [NSShadow alloc]; + [shadow setShadowOffset: shadowOffset]; + [shadow setShadowBlurRadius: 1.0]; + [shadow setShadowColor: [NSColor colorWithDeviceWhite: 1.0 alpha: 0.4]]; + + NSShadow * shadowDim = [NSShadow alloc]; + [shadowDim setShadowOffset: shadowOffset]; + [shadowDim setShadowBlurRadius: 1.0]; + [shadowDim setShadowColor: [NSColor colorWithDeviceWhite: 1.0 alpha: 0.2]]; + + NSDictionary * normalAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSColor colorWithCalibratedRed: 0.259 green: 0.259 blue: 0.259 alpha: 1.0], + NSForegroundColorAttributeName, + boldFont, NSFontAttributeName, + shadow, NSShadowAttributeName, nil], + * normalDimAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSColor disabledControlTextColor], NSForegroundColorAttributeName, + boldFont, NSFontAttributeName, + shadowDim, NSShadowAttributeName, nil], + * highlightedAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSColor whiteColor], NSForegroundColorAttributeName, + boldFont, NSFontAttributeName, + shadow, NSShadowAttributeName, nil], + * highlightedDimAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: + [NSColor colorWithCalibratedRed: 0.9 green: 0.9 blue: 0.9 alpha: 1.0], NSForegroundColorAttributeName, + boldFont, NSFontAttributeName, + shadow, NSShadowAttributeName, nil]; + + [shadow release]; + [shadowDim release]; + + //create button text + NSString * text = [self title]; + if (fCount > 0) + text = [text stringByAppendingString: [NSString stringWithFormat: @" (%d)", fCount]]; + + //get images + NSImage * leftOver = [NSImage imageNamed: @"FilterButtonOverLeft.png"], + * rightOver = [NSImage imageNamed: @"FilterButtonOverRight.png"], + * mainOver = [NSImage imageNamed: @"FilterButtonOverMain.png"]; + + NSImage * leftPressed = [NSImage imageNamed: @"FilterButtonPressedLeft.png"], + * rightPressed = [NSImage imageNamed: @"FilterButtonPressedRight.png"], + * mainPressed = [NSImage imageNamed: @"FilterButtonPressedMain.png"]; + + NSImage * leftSelected = [NSImage imageNamed: @"FilterButtonSelectedLeft.png"], + * rightSelected = [NSImage imageNamed: @"FilterButtonSelectedRight.png"], + * mainSelected = [NSImage imageNamed: @"FilterButtonSelectedMain.png"]; + + //get button sizes and placement + NSLog(text); + NSSize textSize = [text sizeWithAttributes: normalAttributes];NSLog(NSStringFromSize(textSize)); + textSize.width = ceilf(textSize.width);NSLog(NSStringFromSize(textSize)); + + float overlap = 4.0; + NSSize endSize = [leftOver size], + mainSize = NSMakeSize(textSize.width - (overlap * 2.0), endSize.height), + buttonSize = NSMakeSize(mainSize.width + 2.0 * endSize.width, endSize.height); + NSRect textRect = NSMakeRect(endSize.width - overlap, (buttonSize.height - textSize.height) * 0.5 + 1.5, + textSize.width, textSize.height); + + NSPoint leftPoint = NSZeroPoint, + mainPoint = NSMakePoint(endSize.width, 0), + rightPoint = NSMakePoint(mainPoint.x + mainSize.width, 0); + fButtonNormal = [[NSImage alloc] initWithSize: buttonSize]; fButtonNormalDim = [[NSImage alloc] initWithSize: buttonSize]; fButtonOver = [[NSImage alloc] initWithSize: buttonSize]; @@ -84,16 +152,6 @@ fButtonSelectedDim = [[NSImage alloc] initWithSize: buttonSize]; //rolled over button - NSImage * leftOver = [NSImage imageNamed: @"FilterButtonOverLeft.png"], - * rightOver = [NSImage imageNamed: @"FilterButtonOverRight.png"], - * mainOver = [NSImage imageNamed: @"FilterButtonOverMain.png"]; - - NSSize endSize = [leftOver size], - mainSize = NSMakeSize(buttonSize.width - endSize.width * 2.0, endSize.height); - NSPoint leftPoint = NSMakePoint(0, 0), - rightPoint = NSMakePoint(buttonSize.width - endSize.width, 0), - mainPoint = NSMakePoint(endSize.width, 0); - [mainOver setScalesWhenResized: YES]; [mainOver setSize: mainSize]; @@ -104,10 +162,6 @@ [fButtonOver unlockFocus]; //pressed button - NSImage * leftPressed = [NSImage imageNamed: @"FilterButtonPressedLeft.png"], - * rightPressed = [NSImage imageNamed: @"FilterButtonPressedRight.png"], - * mainPressed = [NSImage imageNamed: @"FilterButtonPressedMain.png"]; - [mainPressed setScalesWhenResized: YES]; [mainPressed setSize: mainSize]; @@ -118,10 +172,6 @@ [fButtonPressed unlockFocus]; //selected button - NSImage * leftSelected = [NSImage imageNamed: @"FilterButtonSelectedLeft.png"], - * rightSelected = [NSImage imageNamed: @"FilterButtonSelectedRight.png"], - * mainSelected = [NSImage imageNamed: @"FilterButtonSelectedMain.png"]; - [mainSelected setScalesWhenResized: YES]; [mainSelected setSize: mainSize]; @@ -133,55 +183,6 @@ //selected and dimmed button fButtonSelectedDim = [fButtonSelected copy]; - - //create button text - NSString * text = [self title]; - - NSFont * boldFont = [[NSFontManager sharedFontManager] convertFont: - [NSFont fontWithName: @"Lucida Grande" size: 12.0] toHaveTrait: NSBoldFontMask]; - - NSSize shadowOffset = NSMakeSize(0.0, -1.0); - - NSShadow * shadowNormal = [NSShadow alloc]; - [shadowNormal setShadowOffset: shadowOffset]; - [shadowNormal setShadowBlurRadius: 1.0]; - [shadowNormal setShadowColor: [NSColor colorWithDeviceWhite: 1.0 alpha: 0.4]]; - - NSShadow * shadowNormalDim = [NSShadow alloc]; - [shadowNormalDim setShadowOffset: shadowOffset]; - [shadowNormalDim setShadowBlurRadius: 1.0]; - [shadowNormalDim setShadowColor: [NSColor colorWithDeviceWhite: 1.0 alpha: 0.2]]; - - NSShadow * shadowHighlighted = [NSShadow alloc]; - [shadowHighlighted setShadowOffset: shadowOffset]; - [shadowHighlighted setShadowBlurRadius: 1.0]; - [shadowHighlighted setShadowColor: [NSColor colorWithDeviceWhite: 0.0 alpha: 0.4]]; - - NSDictionary * normalAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: - [NSColor colorWithCalibratedRed: 0.259 green: 0.259 blue: 0.259 alpha: 1.0], - NSForegroundColorAttributeName, - boldFont, NSFontAttributeName, - shadowNormal, NSShadowAttributeName, nil], - * normalDimAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: - [NSColor disabledControlTextColor], NSForegroundColorAttributeName, - boldFont, NSFontAttributeName, - shadowNormalDim, NSShadowAttributeName, nil], - * highlightedAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: - [NSColor whiteColor], NSForegroundColorAttributeName, - boldFont, NSFontAttributeName, - shadowHighlighted, NSShadowAttributeName, nil], - * highlightedDimAttributes = [[NSDictionary alloc] initWithObjectsAndKeys: - [NSColor colorWithCalibratedRed: 0.9 green: 0.9 blue: 0.9 alpha: 1.0], NSForegroundColorAttributeName, - boldFont, NSFontAttributeName, - shadowHighlighted, NSShadowAttributeName, nil]; - - NSSize textSizeNormal = [text sizeWithAttributes: normalAttributes]; - NSRect textRect = NSMakeRect((buttonSize.width - textSizeNormal.width) * 0.5, - (buttonSize.height - textSizeNormal.height) * 0.5 + 1.5, textSizeNormal.width, textSizeNormal.height); - - [shadowNormal release]; - [shadowNormalDim release]; - [shadowHighlighted release]; //normal button [fButtonNormal lockFocus]; @@ -217,6 +218,11 @@ [normalDimAttributes release]; [highlightedAttributes release]; [highlightedDimAttributes release]; + + //resize button + NSPoint point = [self frame].origin; + [self setFrame: NSMakeRect(point.x, point.y, buttonSize.width, buttonSize.height)]; + [self setNeedsDisplay: YES]; } - (void) mouseEntered: (NSEvent *) event diff --git a/macosx/FilterBarView.h b/macosx/FilterBarView.h new file mode 100644 index 000000000..2e881eb66 --- /dev/null +++ b/macosx/FilterBarView.h @@ -0,0 +1,37 @@ +/****************************************************************************** + * $Id$ + * + * Copyright (c) 2007 Transmission authors and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#import +#import "ImageBackgroundView.h" +#import "FilterBarButton.h" + +@interface FilterBarView : ImageBackgroundView +{ + IBOutlet FilterBarButton * fNoFilterButton, * fDownloadFilterButton, + * fSeedFilterButton, * fPauseFilterButton; +} + +- (void) replaceButtons; + +@end diff --git a/macosx/FilterBarView.m b/macosx/FilterBarView.m new file mode 100644 index 000000000..489bbc958 --- /dev/null +++ b/macosx/FilterBarView.m @@ -0,0 +1,38 @@ +/****************************************************************************** + * $Id$ + * + * Copyright (c) 2007 Transmission authors and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + *****************************************************************************/ + +#import "FilterBarView.h" + +@implementation FilterBarView + +- (void) replaceButtons +{ + float padding = 2.0, base = 3.0; + [fNoFilterButton setFrameOrigin: NSMakePoint(padding + 2.0, base)]; + [fDownloadFilterButton setFrameOrigin: NSMakePoint(NSMaxX([fNoFilterButton frame]) + padding, base)]; + [fSeedFilterButton setFrameOrigin: NSMakePoint(NSMaxX([fDownloadFilterButton frame]) + padding, base)]; + [fPauseFilterButton setFrameOrigin: NSMakePoint(NSMaxX([fSeedFilterButton frame]) + padding, base)]; +} + +@end