1
1
mirror of https://github.com/bitgapp/eqMac.git synced 2024-11-22 22:32:17 +03:00

Implemented Fine Volume Controls

This commit is contained in:
Romans Kisils 2017-07-29 16:50:04 +01:00
parent 2b601a171e
commit 1685b6b95d
20 changed files with 235 additions and 172 deletions

View File

@ -17,6 +17,7 @@
#import "eqMacStatusItemView.h"
#import "API.h"
#import "Devices.h"
#import "Volume.h"
@interface AppDelegate : NSObject <NSApplicationDelegate, NSPopoverDelegate>
@end

View File

@ -143,7 +143,7 @@ NSEvent *settingsPopoverTransiencyMonitor;
if(![Devices eqMacDriverInstalled]){
//Install only the new driver
switch([Utilities showAlertWithTitle:@"eqMac2 Requires a Driver"
andMessage:@"In order to install the driver, the eqMac will ask for your system password."
andMessage:@"In order to install the driver, the app will ask for your system password."
andButtons:@[@"Install", @"Quit"]]){
case NSAlertFirstButtonReturn:{
if(![Utilities runShellScriptWithName:@"install_new"]){
@ -164,33 +164,23 @@ NSEvent *settingsPopoverTransiencyMonitor;
-(void)changeVolume:(NSNotification*)notification{
if([EQHost EQEngineExists]){
AudioDeviceID volDevice = [Devices getVolumeControllerDeviceID];
if([[notification.userInfo objectForKey:@"key"] intValue] == MUTE){
[Devices setDevice:volDevice toMuted:![Devices getIsMutedForDeviceID:volDevice]];
NSInteger volumeChangeKey = [[notification.userInfo objectForKey:@"key"] intValue];
Float32 newVolume = 0;
if(volumeChangeKey == MUTE){
BOOL mute = ![Devices getIsMutedForDeviceID:volDevice];
[Devices setDevice:volDevice toMuted: mute];
if(!mute) newVolume = [Devices getVolumeForDeviceID:volDevice];
}else{
Float32 volumeChange = 0.0;
switch( [[notification.userInfo objectForKey:@"key"] intValue]){
case UP:{
volumeChange = VOLUME_STEP;
break;
}
case DOWN:{
volumeChange = -VOLUME_STEP;
break;
}
}
Float32 newVolume = [Devices getVolumeForDeviceID:volDevice] + volumeChange;
if(newVolume < 0) newVolume = 0;
if(newVolume > 1) newVolume = 1;
Float32 currentVolume = [Devices getVolumeForDeviceID:volDevice];
newVolume = [Volume setVolume:currentVolume
inDirection:volumeChangeKey == UP ? kVolumeChangeDirectionUp : kVolumeChangeDirectionDown
toNearest:[[notification.userInfo objectForKey:@"SHIFT+ALT"] boolValue] ? kVolumeStepTypeQuarter : kVolumeStepTypeFull];
[Devices setVolumeForDevice:volDevice to: newVolume];
}
[Utilities executeBlock:^{
if([[Storage get:kStorageShowVolumeHUD] integerValue] == 1){
[volumeHUD showHUDforVolume: [Devices getIsMutedForDeviceID:volDevice] ? 0 : [Devices getVolumeForDeviceID:volDevice]];
}
} after:0.01];
if([[Storage get:kStorageShowVolumeHUD] integerValue] == 1){
[volumeHUD showHUDforVolume: newVolume];
}
}
}

View File

@ -8,5 +8,7 @@ extern NSString * const API_URL;
extern NSString * const APP_URL;
extern NSString * const SUPPORT_URL;
extern NSString * const REPO_ISSUES_URL;
extern Float32 const VOLUME_STEP;
extern Float32 const FULL_VOLUME_STEP;
extern Float32 const QUARTER_VOLUME_STEP;
#endif /* Constants_h */

View File

@ -8,5 +8,5 @@ NSString * const API_URL = @"https://eqmac-api.bitgapp.com";
NSString * const APP_URL = @"https://bitgapp.com/eqmac/";
NSString * const SUPPORT_URL = @"https://bitgapp.com/eqmac/#/donate";
NSString * const REPO_ISSUES_URL = @"https://github.com/romankisil/eqMac2/blob/master/CONTRIBUTING.md";
Float32 const VOLUME_STEP = 0.065;
Float32 const FULL_VOLUME_STEP = 0.0625;
Float32 const QUARTER_VOLUME_STEP = 0.015625;

View File

@ -184,7 +184,7 @@ typedef enum {
}else{
Float32 leftVolume = [self getVolumeForDevice:ID andChannel:kChannelLeft];
Float32 rightVolume = [self getVolumeForDevice:ID andChannel:kChannelRight];
volume = MAX(rightVolume, leftVolume);
volume = leftVolume > rightVolume ? leftVolume : rightVolume;
}
return volume;
}
@ -367,7 +367,7 @@ typedef enum {
[self setVolumeForDevice:ID andChannel:kChannelRight to: rightVolume];
}
[self setDevice:ID toMuted:volume < VOLUME_STEP];
[self setDevice:ID toMuted:volume < 0.0625];
}

View File

@ -1,14 +0,0 @@
//
// NSBorderedTextField.h
// eqMac2
//
// Created by Romans Kisils on 04/06/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface NSBorderedTextField : NSTextField
-(void)setBorderColor:(NSColor*)color;
@end

View File

@ -1,34 +0,0 @@
//
// NSBorderedTextField.m
// eqMac2
//
// Created by Romans Kisils on 04/06/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import "NSBorderedTextField.h"
@implementation NSBorderedTextField
NSColor* borderColor;
- (void)drawRect:(NSRect)dirtyRect {
if(!borderColor) borderColor = [NSColor whiteColor];
NSPoint origin = { 0.0,0.0 };
NSRect rect;
rect.origin = origin;
rect.size.width = [self bounds].size.width;
rect.size.height = [self bounds].size.height;
NSBezierPath * path;
path = [NSBezierPath bezierPathWithRect:rect];
[path setLineWidth:2];
[borderColor set];
[path stroke];
}
-(void)setBorderColor:(NSColor*)color{
borderColor = color;
}
@end

View File

@ -0,0 +1,24 @@
//
// Volume.h
// eqMac2
//
// Created by Romans Kisils on 29/07/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Constants.h"
@interface Volume : NSObject
typedef enum {
kVolumeStepTypeFull, kVolumeStepTypeQuarter
} VOLUME_STEP_TYPES;
typedef enum {
kVolumeChangeDirectionUp, kVolumeChangeDirectionDown
} VOLUME_CHANGE_DIRECTION;
+(Float32)setVolume:(Float32)volume inDirection:(VOLUME_CHANGE_DIRECTION)direction toNearest:(VOLUME_STEP_TYPES)type;
@end

View File

@ -0,0 +1,72 @@
//
// Volume.m
// eqMac2
//
// Created by Romans Kisils on 29/07/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import "Volume.h"
@implementation Volume
+(NSArray*)getFullSteps{
NSMutableArray *steps = [[NSMutableArray alloc] init];
Float32 step = .0;
for(NSInteger i = 0; step <= 1; i++){
[steps addObject: [NSNumber numberWithFloat:step]];
step += FULL_VOLUME_STEP;
}
return steps;
}
+(NSArray*)getQuarterSteps{
NSMutableArray *steps = [[NSMutableArray alloc] init];
Float32 step = .0;
for(NSInteger i = 0; step <= 1; i++){
[steps addObject: [NSNumber numberWithFloat:step]];
step += QUARTER_VOLUME_STEP;
}
return steps;
}
+(Float32)setVolume:(Float32)volume inDirection:(VOLUME_CHANGE_DIRECTION)direction toNearest:(VOLUME_STEP_TYPES)type{
volume = [self roundVolume:volume toNearestStepOfType:type];
if(volume == 0 && direction == kVolumeChangeDirectionDown) return 0;
if(volume == 1 && direction == kVolumeChangeDirectionUp) return 1;
NSArray *steps = type == kVolumeStepTypeFull ? [self getFullSteps] : [self getQuarterSteps];
for(NSInteger i = 0; i < [steps count] - 1; i++){
Float32 step = [[steps objectAtIndex:i] floatValue];
if(step == volume)
return [[steps objectAtIndex:i + (direction == kVolumeChangeDirectionUp ? 1 : -1)] floatValue];
}
Float32 step = type == kVolumeStepTypeFull ? FULL_VOLUME_STEP : QUARTER_VOLUME_STEP;
volume += direction == kVolumeChangeDirectionUp ? step : -step;
if(volume < 0)return 0;
if(volume > 1)return 1;
return volume;
}
+(Float32)roundVolume:(Float32)volume toNearestStepOfType:(VOLUME_STEP_TYPES)type{
if(volume < 0)volume = 0;
if(volume > 1)volume = 1;
NSArray *steps = type == kVolumeStepTypeFull ? [self getFullSteps] : [self getQuarterSteps];
for(NSInteger i = 0; i < [steps count] - 1; i++){
Float32 lower = [[steps objectAtIndex:i] floatValue];
Float32 higher = [[steps objectAtIndex:i+1] floatValue];
if(lower <= volume && volume < higher){
return ((volume - lower) < (higher - volume)) ? lower : higher;
}
}
return volume;
}
@end

View File

@ -13,5 +13,5 @@ typedef enum {
UP,
MUTE,
DOWN
} VolumeChange;
} VOLUME_CHANGE_KEY;
@end

View File

@ -16,8 +16,16 @@
int keyFlags = ([event data1] & 0x0000FFFF);
int keyState = (((keyFlags & 0xFF00) >> 8)) == 0xA;
if(keyState == 1 && (keyCode == NX_KEYTYPE_SOUND_UP || keyCode == NX_KEYTYPE_SOUND_DOWN || keyCode == NX_KEYTYPE_MUTE)){
NSMutableDictionary *userInfo = [[NSMutableDictionary alloc] init];
//Detect SHIFT+ALT
[userInfo setObject:
[NSNumber numberWithBool:[event modifierFlags] & NSShiftKeyMask && [event modifierFlags] & NSAlternateKeyMask]
forKey:@"SHIFT+ALT"];
switch(keyCode){
case NX_KEYTYPE_SOUND_UP:{
[userInfo setObject:[NSNumber numberWithInt:UP] forKey:@"key"];

View File

@ -93,7 +93,7 @@
[_volumeBars setHidden:NO];
if (volume == 0) {
[_volumeBars setHidden:YES];
}else if(volume >= VOLUME_STEP && volume <= 0.25){
}else if(volume >= 0.0625 && volume <= 0.25){
[_volumeBars setImage: [Utilities isDarkMode] ? [NSImage imageNamed:@"vol1Light.png"] : [NSImage imageNamed:@"vol1Dark.png"]];
}else if(volume >0.25 && volume <= 0.5){
[_volumeBars setImage: [Utilities isDarkMode] ? [NSImage imageNamed:@"vol2Light.png"] : [NSImage imageNamed:@"vol2Dark.png"]];

View File

@ -1,13 +0,0 @@
//
// FlatLevelIndicator.h
// eqMac
//
// Created by Romans Kisils on 01/02/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface FlatLevelIndicator : NSLevelIndicator
@end

View File

@ -1,35 +0,0 @@
//
// FlatLevelIndicator.m
// eqMac
//
// Created by Romans Kisils on 01/02/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import "FlatLevelIndicator.h"
CGFloat gap = 2;
CGFloat nTicks = 16;
@implementation FlatLevelIndicator
- (void)drawRect:(NSRect)dirtyRect {
CGFloat size = (self.bounds.size.width - ((nTicks+1) * gap)) / nTicks;
NSRect bgRect = dirtyRect;
bgRect.size.width = (nTicks * size) + ((nTicks+1) * gap);
bgRect.size.height = size + gap*2;
NSColor *fillColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:0.5];
[fillColor set];
NSRectFill(bgRect);
for(int i = 0; i < self.intValue; i++){
NSRect tick = NSMakeRect( (i*(size+gap)) + gap, gap, size, size);
fillColor = [NSColor whiteColor];
[fillColor set];
NSRectFill(tick);
}
}
@end

View File

@ -0,0 +1,13 @@
//
// VolumeLevelIndicatorView.h
// eqMac2
//
// Created by Romans Kisils on 29/07/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface VolumeLevelIndicatorView : NSView
-(void)setVolume:(Float32)vol;
@end

View File

@ -0,0 +1,52 @@
//
// VolumeLevelIndicatorView.m
// eqMac2
//
// Created by Romans Kisils on 29/07/2017.
// Copyright © 2017 bitgapp. All rights reserved.
//
#import "VolumeLevelIndicatorView.h"
CGFloat gap = 2;
CGFloat nTicks = 16;
Float32 volume = 0;
@implementation VolumeLevelIndicatorView
-(void)setVolume:(Float32)vol{
volume = vol;
}
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
NSColor *bgColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:0.5];
NSColor *indicatorColor = [NSColor whiteColor];
CGFloat size = (self.bounds.size.width - ((nTicks+1) * gap)) / nTicks;
NSRect bgRect = dirtyRect;
bgRect.size.width = (nTicks * size) + ((nTicks+1) * gap);
bgRect.size.height = size + gap*2;
[bgColor set];
NSRectFill(bgRect);
for(int i = 0; i < 16; i++){
NSRect tick = NSMakeRect( (i*(size+gap)) + gap, gap, size, size);
[indicatorColor set];
NSRectFill(tick);
}
[bgColor set];
CGFloat width = self.bounds.size.width;
CGFloat x = width * volume;
width = width - x;
NSRect fgRect = CGRectMake(x, 0, width, size + gap*2);
NSRectFill(fgRect);
}
@end

View File

@ -7,7 +7,7 @@
//
#import <Cocoa/Cocoa.h>
#import "FlatLevelIndicator.h"
#import "VolumeLevelIndicatorView.h"
#import "Devices.h"
#import "Utilities.h"

View File

@ -9,7 +9,7 @@
#import "VolumeWindowController.h"
@interface VolumeWindowController ()
@property (weak) IBOutlet FlatLevelIndicator *volumeIndicator;
@property (strong) IBOutlet VolumeLevelIndicatorView *volumeLevelIndicator;
@end
@ -22,12 +22,10 @@ CFTimeInterval lastShow;
}
-(void) showHUDforVolume:(Float32)volume{
Float32 mapped = [Utilities mapValue:volume withInMin:0 InMax:1 OutMin:0 OutMax:16];
int nTicks = floor(mapped);
[_volumeIndicator setIntValue: nTicks];
lastShow = CACurrentMediaTime();
[_volumeLevelIndicator setVolume:volume];
[_volumeLevelIndicator setNeedsDisplay:YES];
float alpha = 1.0;
[self.window setAlphaValue:alpha];

View File

@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="12121" systemVersion="16F73" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="12121"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="VolumeWindowController">
<connections>
<outlet property="volumeIndicator" destination="Olq-vK-PEx" id="FcV-nQ-ZIq"/>
<outlet property="window" destination="RIS-VR-4cf" id="hK0-by-hc2"/>
<outlet property="volumeLevelIndicator" destination="mWQ-OB-9HB" id="6yW-lt-TMz"/>
<outlet property="window" destination="RIS-VR-4cf" id="o1l-fc-TGT"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
@ -17,12 +17,16 @@
<windowStyleMask key="styleMask" utility="YES" HUD="YES"/>
<windowPositionMask key="initialPositionMask" bottomStrut="YES"/>
<rect key="contentRect" x="1161" y="350" width="200" height="67"/>
<rect key="screenRect" x="0.0" y="0.0" width="1680" height="1028"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
<view key="contentView" wantsLayer="YES" id="IBr-Jy-LtY">
<rect key="frame" x="0.0" y="0.0" width="200" height="67"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="twZ-0l-9T5">
<customView fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mWQ-OB-9HB" userLabel="TicksView" customClass="VolumeLevelIndicatorView">
<rect key="frame" x="18" y="14" width="163" height="15"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
</customView>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" allowsCharacterPickerTouchBarItem="YES" translatesAutoresizingMaskIntoConstraints="NO" id="twZ-0l-9T5">
<rect key="frame" x="55" y="34" width="89" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="eqMac" id="iKa-HT-Yqk">
@ -31,11 +35,6 @@
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<levelIndicator verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Olq-vK-PEx" customClass="FlatLevelIndicator">
<rect key="frame" x="19" y="10" width="160" height="18"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<levelIndicatorCell key="cell" alignment="left" doubleValue="16" maxValue="16" id="MQ6-SJ-ehb"/>
</levelIndicator>
</subviews>
</view>
<connections>

View File

@ -41,7 +41,6 @@
E0B781501EF704660076B3AB /* eqMac2Driver.kext in Resources */ = {isa = PBXBuildFile; fileRef = E0B781341EF704660076B3AB /* eqMac2Driver.kext */; };
E0B781511EF704660076B3AB /* EQEngine.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B781371EF704660076B3AB /* EQEngine.mm */; };
E0B781521EF704660076B3AB /* EQHost.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B7813A1EF704660076B3AB /* EQHost.mm */; };
E0B781531EF704660076B3AB /* NSBorderedTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B7813D1EF704660076B3AB /* NSBorderedTextField.m */; };
E0B781541EF704660076B3AB /* defaultPresets.plist in Resources */ = {isa = PBXBuildFile; fileRef = E0B7813F1EF704660076B3AB /* defaultPresets.plist */; };
E0B781551EF704660076B3AB /* Presets.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B781411EF704660076B3AB /* Presets.m */; };
E0B781561EF704660076B3AB /* install_new.sh in Resources */ = {isa = PBXBuildFile; fileRef = E0B781431EF704660076B3AB /* install_new.sh */; };
@ -59,7 +58,6 @@
E0B781891EF704A20076B3AB /* SettingsViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B781771EF704A20076B3AB /* SettingsViewController.mm */; };
E0B7818A1EF704A20076B3AB /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E0B781781EF704A20076B3AB /* SettingsViewController.xib */; };
E0B7818B1EF704A20076B3AB /* eqMacStatusItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B7817B1EF704A20076B3AB /* eqMacStatusItemView.m */; };
E0B7818C1EF704A20076B3AB /* FlatLevelIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B7817F1EF704A20076B3AB /* FlatLevelIndicator.m */; };
E0B7818D1EF704A20076B3AB /* VolumeWindowController.mm in Sources */ = {isa = PBXBuildFile; fileRef = E0B781811EF704A20076B3AB /* VolumeWindowController.mm */; };
E0B7818E1EF704A20076B3AB /* VolumeWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = E0B781821EF704A20076B3AB /* VolumeWindowController.xib */; };
E0B781AD1EF704BA0076B3AB /* blueLine.png in Resources */ = {isa = PBXBuildFile; fileRef = E0B781911EF704BA0076B3AB /* blueLine.png */; };
@ -80,6 +78,8 @@
E0B781CF1EF706670076B3AB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B781CA1EF706670076B3AB /* main.m */; };
E0B781D01EF706670076B3AB /* NSAppEventCather.m in Sources */ = {isa = PBXBuildFile; fileRef = E0B781CC1EF706670076B3AB /* NSAppEventCather.m */; };
E0B781D31EF706700076B3AB /* Main.xib in Resources */ = {isa = PBXBuildFile; fileRef = E0B781D11EF706700076B3AB /* Main.xib */; };
E0CADB0E1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CADB0D1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m */; };
E0CADB121F2CD2F400AC53E8 /* Volume.m in Sources */ = {isa = PBXBuildFile; fileRef = E0CADB111F2CD2F400AC53E8 /* Volume.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@ -138,8 +138,6 @@
E0B781371EF704660076B3AB /* EQEngine.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EQEngine.mm; sourceTree = "<group>"; };
E0B781391EF704660076B3AB /* EQHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EQHost.h; sourceTree = "<group>"; };
E0B7813A1EF704660076B3AB /* EQHost.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EQHost.mm; sourceTree = "<group>"; };
E0B7813C1EF704660076B3AB /* NSBorderedTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSBorderedTextField.h; sourceTree = "<group>"; };
E0B7813D1EF704660076B3AB /* NSBorderedTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSBorderedTextField.m; sourceTree = "<group>"; };
E0B7813F1EF704660076B3AB /* defaultPresets.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = defaultPresets.plist; sourceTree = "<group>"; };
E0B781401EF704660076B3AB /* Presets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Presets.h; sourceTree = "<group>"; };
E0B781411EF704660076B3AB /* Presets.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Presets.m; sourceTree = "<group>"; };
@ -173,8 +171,6 @@
E0B781781EF704A20076B3AB /* SettingsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SettingsViewController.xib; sourceTree = "<group>"; };
E0B7817A1EF704A20076B3AB /* eqMacStatusItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eqMacStatusItemView.h; sourceTree = "<group>"; };
E0B7817B1EF704A20076B3AB /* eqMacStatusItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = eqMacStatusItemView.m; sourceTree = "<group>"; };
E0B7817E1EF704A20076B3AB /* FlatLevelIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FlatLevelIndicator.h; sourceTree = "<group>"; };
E0B7817F1EF704A20076B3AB /* FlatLevelIndicator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FlatLevelIndicator.m; sourceTree = "<group>"; };
E0B781801EF704A20076B3AB /* VolumeWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VolumeWindowController.h; sourceTree = "<group>"; };
E0B781811EF704A20076B3AB /* VolumeWindowController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = VolumeWindowController.mm; sourceTree = "<group>"; };
E0B781821EF704A20076B3AB /* VolumeWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = VolumeWindowController.xib; sourceTree = "<group>"; };
@ -198,6 +194,10 @@
E0B781CB1EF706670076B3AB /* NSAppEventCatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NSAppEventCatcher.h; sourceTree = "<group>"; };
E0B781CC1EF706670076B3AB /* NSAppEventCather.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSAppEventCather.m; sourceTree = "<group>"; };
E0B781D21EF706700076B3AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/Main.xib; sourceTree = "<group>"; };
E0CADB0C1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VolumeLevelIndicatorView.h; path = VolumeLevelIndicatorView/VolumeLevelIndicatorView.h; sourceTree = "<group>"; };
E0CADB0D1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VolumeLevelIndicatorView.m; path = VolumeLevelIndicatorView/VolumeLevelIndicatorView.m; sourceTree = "<group>"; };
E0CADB101F2CD2F400AC53E8 /* Volume.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Volume.h; path = Volume/Volume.h; sourceTree = "<group>"; };
E0CADB111F2CD2F400AC53E8 /* Volume.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Volume.m; path = Volume/Volume.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -287,13 +287,13 @@
E0B781291EF704660076B3AB /* Common */ = {
isa = PBXGroup;
children = (
E0CADB0F1F2CD2D400AC53E8 /* Volume */,
E0B7812A1EF704660076B3AB /* API */,
E0B7812D1EF704660076B3AB /* Constants */,
E0B781301EF704660076B3AB /* Devices */,
E0B781331EF704660076B3AB /* Driver */,
E0B781351EF704660076B3AB /* EQEngine */,
E0B781381EF704660076B3AB /* EQHost */,
E0B7813B1EF704660076B3AB /* Overrides */,
E0B7813E1EF704660076B3AB /* Presets */,
E0B781421EF704660076B3AB /* Scripts */,
E0B781471EF704660076B3AB /* Storage */,
@ -355,15 +355,6 @@
path = EQHost;
sourceTree = "<group>";
};
E0B7813B1EF704660076B3AB /* Overrides */ = {
isa = PBXGroup;
children = (
E0B7813C1EF704660076B3AB /* NSBorderedTextField.h */,
E0B7813D1EF704660076B3AB /* NSBorderedTextField.m */,
);
path = Overrides;
sourceTree = "<group>";
};
E0B7813E1EF704660076B3AB /* Presets */ = {
isa = PBXGroup;
children = (
@ -499,7 +490,7 @@
E0B7817C1EF704A20076B3AB /* Volume */ = {
isa = PBXGroup;
children = (
E0B7817D1EF704A20076B3AB /* FlatLevelIndicator */,
E0CADB0B1F2CC17A00AC53E8 /* VolumeLevelIndicatorView */,
E0B781801EF704A20076B3AB /* VolumeWindowController.h */,
E0B781811EF704A20076B3AB /* VolumeWindowController.mm */,
E0B781821EF704A20076B3AB /* VolumeWindowController.xib */,
@ -507,15 +498,6 @@
path = Volume;
sourceTree = "<group>";
};
E0B7817D1EF704A20076B3AB /* FlatLevelIndicator */ = {
isa = PBXGroup;
children = (
E0B7817E1EF704A20076B3AB /* FlatLevelIndicator.h */,
E0B7817F1EF704A20076B3AB /* FlatLevelIndicator.m */,
);
path = FlatLevelIndicator;
sourceTree = "<group>";
};
E0B7818F1EF704BA0076B3AB /* Assets */ = {
isa = PBXGroup;
children = (
@ -570,6 +552,24 @@
path = Icons;
sourceTree = "<group>";
};
E0CADB0B1F2CC17A00AC53E8 /* VolumeLevelIndicatorView */ = {
isa = PBXGroup;
children = (
E0CADB0C1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.h */,
E0CADB0D1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m */,
);
name = VolumeLevelIndicatorView;
sourceTree = "<group>";
};
E0CADB0F1F2CD2D400AC53E8 /* Volume */ = {
isa = PBXGroup;
children = (
E0CADB101F2CD2F400AC53E8 /* Volume.h */,
E0CADB111F2CD2F400AC53E8 /* Volume.m */,
);
name = Volume;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -734,17 +734,17 @@
buildActionMask = 2147483647;
files = (
E0B781861EF704A20076B3AB /* eqViewController.mm in Sources */,
E0CADB0E1F2CC1A500AC53E8 /* VolumeLevelIndicatorView.m in Sources */,
E0B7818B1EF704A20076B3AB /* eqMacStatusItemView.m in Sources */,
E0B7818C1EF704A20076B3AB /* FlatLevelIndicator.m in Sources */,
E0B781551EF704660076B3AB /* Presets.m in Sources */,
E0B781841EF704A20076B3AB /* CARingBuffer.cpp in Sources */,
E0CADB121F2CD2F400AC53E8 /* Volume.m in Sources */,
E0B781891EF704A20076B3AB /* SettingsViewController.mm in Sources */,
E0B781881EF704A20076B3AB /* SliderGraphView.m in Sources */,
E0B7814E1EF704660076B3AB /* Constants.m in Sources */,
E0B7814F1EF704660076B3AB /* Devices.mm in Sources */,
E0B781521EF704660076B3AB /* EQHost.mm in Sources */,
E0B781CF1EF706670076B3AB /* main.m in Sources */,
E0B781531EF704660076B3AB /* NSBorderedTextField.m in Sources */,
E0B7818D1EF704A20076B3AB /* VolumeWindowController.mm in Sources */,
E0B7815B1EF704660076B3AB /* Utilities.m in Sources */,
E0B7814D1EF704660076B3AB /* API.m in Sources */,