cog/Window/VolumeSlider.m

97 lines
1.7 KiB
Objective-C

//
// VolumeSlider.m
// Cog
//
// Created by Vincent Spader on 2/8/09.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import "VolumeSlider.h"
#import "PlaybackController.h"
#import "CogAudio/Helper.h"
@implementation VolumeSlider
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
toolTip = [[ToolTipWindow alloc] init];
}
return self;
}
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self)
{
toolTip = [[ToolTipWindow alloc] init];
}
return self;
}
- (void)updateToolTip
{
double value = [self doubleValue];
double volume = linearToLogarithmic(value);
NSString *text = [[NSString alloc] initWithFormat:@"%0.lf%%", volume];
NSSize size = [toolTip suggestedSizeForTooltip:text];
NSPoint mouseLocation = [NSEvent mouseLocation];
[toolTip setToolTip:text];
[toolTip setFrame:NSMakeRect(mouseLocation.x, mouseLocation.y, size.width, size.height) display:YES];
}
- (void)showToolTip
{
[self updateToolTip];
[toolTip orderFront];
}
- (void)showToolTipForDuration:(NSTimeInterval)duration
{
[self updateToolTip];
[toolTip orderFrontForDuration:duration];
}
- (void)hideToolTip
{
[toolTip close];
}
- (BOOL)sendAction:(SEL)theAction to:(id)theTarget
{
double oneLog = logarithmicToLinear(100.0);
double distance = [self frame].size.height*([self doubleValue] - oneLog)/100.0;
if (fabs(distance) < 2.0)
{
[self setDoubleValue:oneLog];
}
[self showToolTip];
return [super sendAction:theAction to:theTarget];
}
- (void)scrollWheel:(NSEvent *)theEvent
{
double change = [theEvent deltaY];
[self setDoubleValue:[self doubleValue] + change];
[[self target] changeVolume:self];
[self showToolTipForDuration:1.0];
}
@end