mirror of
https://github.com/morgan9e/VolumeControl
synced 2026-04-14 00:04:05 +09:00
Added slider on menu popup
This commit is contained in:
35
app/main.mm
35
app/main.mm
@@ -26,14 +26,24 @@
|
|||||||
|
|
||||||
|
|
||||||
// Menu bar controller — speaker icon with scroll-to-adjust volume.
|
// Menu bar controller — speaker icon with scroll-to-adjust volume.
|
||||||
@interface VCMenuBar : NSObject
|
@interface VCMenuBar : NSObject <NSMenuDelegate>
|
||||||
@property (nonatomic) NSStatusItem* statusItem;
|
@property (nonatomic) NSStatusItem* statusItem;
|
||||||
@property (nonatomic) VCAudioDeviceManager* audioDevices;
|
@property (nonatomic) VCAudioDeviceManager* audioDevices;
|
||||||
@property (nonatomic) id scrollMonitor;
|
@property (nonatomic) id scrollMonitor;
|
||||||
|
@property (nonatomic) NSSlider* volumeSlider;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation VCMenuBar
|
@implementation VCMenuBar
|
||||||
|
|
||||||
|
- (void) sliderChanged:(NSSlider*)sender {
|
||||||
|
[self.audioDevices setVolume:sender.floatValue];
|
||||||
|
[self updateIcon];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) menuWillOpen:(NSMenu*)menu {
|
||||||
|
self.volumeSlider.floatValue = [self.audioDevices volume];
|
||||||
|
}
|
||||||
|
|
||||||
- (void) setupWithAudioDevices:(VCAudioDeviceManager*)devices {
|
- (void) setupWithAudioDevices:(VCAudioDeviceManager*)devices {
|
||||||
self.audioDevices = devices;
|
self.audioDevices = devices;
|
||||||
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
|
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
|
||||||
@@ -41,10 +51,30 @@
|
|||||||
[self updateIcon];
|
[self updateIcon];
|
||||||
|
|
||||||
NSMenu* menu = [[NSMenu alloc] init];
|
NSMenu* menu = [[NSMenu alloc] init];
|
||||||
|
menu.delegate = self;
|
||||||
|
|
||||||
NSMenuItem* label = [[NSMenuItem alloc] initWithTitle:@"VolumeControl" action:nil keyEquivalent:@""];
|
NSMenuItem* label = [[NSMenuItem alloc] initWithTitle:@"VolumeControl" action:nil keyEquivalent:@""];
|
||||||
[label setEnabled:NO];
|
[label setEnabled:NO];
|
||||||
[menu addItem:label];
|
[menu addItem:label];
|
||||||
|
[menu addItem:[NSMenuItem separatorItem]];
|
||||||
|
|
||||||
|
// Slider menu item.
|
||||||
|
NSSlider* slider = [NSSlider sliderWithValue:[self.audioDevices volume]
|
||||||
|
minValue:0.0
|
||||||
|
maxValue:1.0
|
||||||
|
target:self
|
||||||
|
action:@selector(sliderChanged:)];
|
||||||
|
slider.controlSize = NSControlSizeSmall;
|
||||||
|
|
||||||
|
NSView* sliderView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 200, 28)];
|
||||||
|
slider.frame = NSMakeRect(14, 4, 172, 20);
|
||||||
|
[sliderView addSubview:slider];
|
||||||
|
self.volumeSlider = slider;
|
||||||
|
|
||||||
|
NSMenuItem* sliderItem = [[NSMenuItem alloc] init];
|
||||||
|
sliderItem.view = sliderView;
|
||||||
|
[menu addItem:sliderItem];
|
||||||
|
|
||||||
[menu addItem:[NSMenuItem separatorItem]];
|
[menu addItem:[NSMenuItem separatorItem]];
|
||||||
[menu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
|
[menu addItemWithTitle:@"Quit" action:@selector(terminate:) keyEquivalent:@"q"];
|
||||||
|
|
||||||
@@ -83,6 +113,9 @@
|
|||||||
|
|
||||||
- (void) updateIcon {
|
- (void) updateIcon {
|
||||||
float vol = [self.audioDevices volume];
|
float vol = [self.audioDevices volume];
|
||||||
|
if (self.volumeSlider) {
|
||||||
|
self.volumeSlider.floatValue = vol;
|
||||||
|
}
|
||||||
BOOL muted = [self.audioDevices isMuted];
|
BOOL muted = [self.audioDevices isMuted];
|
||||||
|
|
||||||
NSString* symbolName;
|
NSString* symbolName;
|
||||||
|
|||||||
Reference in New Issue
Block a user