Index: unk/Cocoa/Pester/Source/English.lproj/Volume.nib/classes.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/Volume.nib/classes.nib (revision 594)
+++ (revision )
@@ -1,14 +1,0 @@
-{
- IBClasses = (
- {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
- {CLASS = NSObject; LANGUAGE = ObjC; },
- {
- ACTIONS = {volumeSet = id; };
- CLASS = PSVolumeController;
- LANGUAGE = ObjC;
- OUTLETS = {contentView = NSView; delegate = id; volumeSlider = NSSlider; };
- SUPERCLASS = NSWindowController;
- }
- );
- IBVersion = 1;
-}
Index: /trunk/Cocoa/Pester/Source/English.lproj/Volume.nib/designable.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/Volume.nib/designable.nib (revision 595)
+++ /trunk/Cocoa/Pester/Source/English.lproj/Volume.nib/designable.nib (revision 595)
@@ -0,0 +1,770 @@
+
+
+
+ 1040
+ 10C540
+ 732
+ 1038.25
+ 458.00
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+ contentView
+
+
+
+ 22
+
+
+
+ volumeSlider
+
+
+
+ 27
+
+
+
+ volumeSet:
+
+
+
+ 28
+
+
+
+ nextKeyView
+
+
+
+ 29
+
+
+
+
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ 13
+
+
+
+
+
+ DrawContentView
+
+
+ -3
+
+
+ Application
+
+
+ 25
+
+
+
+
+
+
+
+ 26
+
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{21, 752}, {21, 70}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ NJRMenuSlider
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+ 29
+
+
+
+
+ FirstResponder
+ NSObject
+
+ IBUserSource
+
+
+
+
+ NJRMenuSlider
+ NSSlider
+
+ IBProjectSource
+ NJRMenuSlider.h
+
+
+
+ NSObject
+
+ IBProjectSource
+ NJRHotKeyField.h
+
+
+
+ NSObject
+
+ IBProjectSource
+ NJRTableView.h
+
+
+
+ NSObject
+
+ IBProjectSource
+ NJRVoicePopUpButton.h
+
+
+
+ NSObject
+
+ IBProjectSource
+ OACalendarView.h
+
+
+
+ NSObject
+
+ IBProjectSource
+ PSCalendarController.h
+
+
+
+ NSObject
+
+ IBProjectSource
+ PSPowerManager.h
+
+
+
+ NSObject
+
+ IBProjectSource
+ PSVolumeController.h
+
+
+
+ NSObject
+
+ IBUserSource
+
+
+
+
+ NSWindow
+
+ IBProjectSource
+ NSWindowCollectionBehavior.h
+
+
+
+ PSVolumeController
+ NSWindowController
+
+ volumeSet:
+ NSSlider
+
+
+ NSView
+ id
+ NSSlider
+
+
+
+
+ PSVolumeController
+ NSWindowController
+
+ IBUserSource
+
+
+
+
+
+
+ NSActionCell
+ NSCell
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSActionCell.h
+
+
+
+ NSApplication
+ NSResponder
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSApplication.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSApplicationScripting.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSColorPanel.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSHelpManager.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSPageLayout.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSUserInterfaceItemSearching.h
+
+
+
+ NSCell
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSCell.h
+
+
+
+ NSControl
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSControl.h
+
+
+
+ NSFormatter
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSFormatter.h
+
+
+
+ NSMenu
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSMenu.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSAccessibility.h
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDictionaryController.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDragging.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSFontManager.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSFontPanel.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSKeyValueBinding.h
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSNibLoading.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSOutlineView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSPasteboard.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSSavePanel.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSTableView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSToolbarItem.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSArchiver.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSClassDescription.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSError.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSFileManager.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSKeyValueCoding.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSKeyValueObserving.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSKeyedArchiver.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSObject.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSObjectScripting.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSPortCoder.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSRunLoop.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptClassDescription.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptKeyValueCoding.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptObjectSpecifiers.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptWhoseTests.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSThread.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSURL.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSURLConnection.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSURLDownload.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ QTKit.framework/Headers/QTCaptureDecompressedAudioOutput.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ QTKit.framework/Headers/QTCaptureDecompressedVideoOutput.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ QTKit.framework/Headers/QTCaptureFileOutput.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ QTKit.framework/Headers/QTCaptureVideoPreviewOutput.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ QTKit.framework/Headers/QTCaptureView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ QTKit.framework/Headers/QTMovie.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ QTKit.framework/Headers/QTMovieView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Sparkle.framework/Headers/SUAppcast.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Sparkle.framework/Headers/SUUpdater.h
+
+
+
+ NSResponder
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSInterfaceStyle.h
+
+
+
+ NSResponder
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSResponder.h
+
+
+
+ NSSlider
+ NSControl
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSSlider.h
+
+
+
+ NSSliderCell
+ NSActionCell
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSSliderCell.h
+
+
+
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSClipView.h
+
+
+
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSMenuItem.h
+
+
+
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSRulerView.h
+
+
+
+ NSView
+ NSResponder
+
+
+
+ NSWindow
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDrawer.h
+
+
+
+ NSWindow
+ NSResponder
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSWindow.h
+
+
+
+ NSWindow
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSWindowScripting.h
+
+
+
+ NSWindowController
+ NSResponder
+
+ showWindow:
+ id
+
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSWindowController.h
+
+
+
+
+ 0
+
+ com.apple.InterfaceBuilder.CocoaPlugin.macosx
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin.macosx
+
+
+ YES
+ ../Pester.xcodeproj
+ 3
+
+
Index: unk/Cocoa/Pester/Source/English.lproj/Volume.nib/info.nib
===================================================================
--- /trunk/Cocoa/Pester/Source/English.lproj/Volume.nib/info.nib (revision 594)
+++ (revision )
@@ -1,21 +1,0 @@
-
-
-
-
- IBDocumentLocation
- 99 33 356 240 0 0 1280 832
- IBEditorPositions
-
- 13
- 622 500 41 112 0 0 1280 832
-
- IBFramework Version
- 291.0
- IBOpenObjects
-
- 13
-
- IBSystem Version
- 6I32
-
-
Index: /trunk/Cocoa/Pester/Source/NJRMenuSlider.h
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRMenuSlider.h (revision 595)
+++ /trunk/Cocoa/Pester/Source/NJRMenuSlider.h (revision 595)
@@ -0,0 +1,14 @@
+//
+// NJRMenuSlider.h
+//
+// Created by Nicholas Riley on 12/6/09.
+// Copyright 2009 Nicholas Riley. All rights reserved.
+//
+
+#import
+
+@interface NJRMenuSlider : NSSlider {
+
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/NJRMenuSlider.m
===================================================================
--- /trunk/Cocoa/Pester/Source/NJRMenuSlider.m (revision 595)
+++ /trunk/Cocoa/Pester/Source/NJRMenuSlider.m (revision 595)
@@ -0,0 +1,46 @@
+//
+// NJRMenuSlider.m
+//
+// Created by Nicholas Riley on 12/6/09.
+// Copyright 2009 Nicholas Riley. All rights reserved.
+//
+
+#import "NJRMenuSlider.h"
+
+// modeled after AppleVolumeItemView in SystemUIServer (but much simpler)
+@implementation NJRMenuSlider
+
+- (void)viewDidMoveToWindow;
+{
+ [super viewDidMoveToWindow];
+ [[self window] makeFirstResponder: self];
+}
+
+- (void)keyDown:(NSEvent *)theEvent;
+{
+ double value;
+
+ // XXX is there a way to call rather than emulate the standard behavior?
+ switch ([[theEvent charactersIgnoringModifiers] characterAtIndex: 0]) {
+ case NSUpArrowFunctionKey:
+ value = MIN([self doubleValue] + ([self maxValue] - [self minValue]) / 10, [self maxValue]);
+ break;
+ case NSDownArrowFunctionKey:
+ value = MAX([self doubleValue] - ([self maxValue] - [self minValue]) / 10, [self minValue]);
+ break;
+ case NSPageUpFunctionKey:
+ value = [self maxValue];
+ break;
+ case NSPageDownFunctionKey:
+ value = [self minValue];
+ break;
+ default:
+ [super keyDown: theEvent];
+ return;
+ }
+
+ [self setDoubleValue: value];
+ [self sendAction: [self action] to: [self target]];
+}
+
+@end
Index: /trunk/Cocoa/Pester/Source/PSVolumeController.m
===================================================================
--- /trunk/Cocoa/Pester/Source/PSVolumeController.m (revision 594)
+++ /trunk/Cocoa/Pester/Source/PSVolumeController.m (revision 595)
@@ -10,4 +10,5 @@
#import "NJRSoundManager.h"
#import "NJRNonCenteringWindow.h"
+#include
@interface NSMenu (SnowLeopardAdditions)
@@ -56,4 +57,5 @@
}
[menu setAllowsContextMenuPlugIns: NO];
+ // replace with http://waffle.wootest.net/2007/08/07/popping-up-a-menu-in-cocoa/
[menu popUpMenuPositioningItem: nil atLocation: point inView: view];
[menu release];
@@ -100,6 +102,16 @@
- (IBAction)volumeSet:(NSSlider *)sender;
{
+ // XXX don't delay preview for keyboard adjustment
[delegate volumeController: self didSetVolume: [sender floatValue]];
- if (NSEventMaskFromType([[NSApp currentEvent] type]) & (NSLeftMouseUpMask | NSRightMouseUpMask | NSOtherMouseUpMask))
+ NSLog(@"%@", [NSApp currentEvent]);
+ unsigned eventMask = NSEventMaskFromType([[NSApp currentEvent] type]);
+ // The event may simply be a mouse-up: close the menu.
+ if (eventMask & (NSLeftMouseUpMask | NSRightMouseDownMask | NSOtherMouseDownMask))
+ [menu cancelTracking];
+ // On a quick click, the event may be a mouse down but the mouse button is no longer down.
+ if (!(eventMask & (NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask)))
+ return;
+ // 10.6+: use [NSEvent pressedMouseButtons] instead
+ if (GetCurrentButtonState() == 0)
[menu cancelTracking];
}
Index: /trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj
===================================================================
--- /trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj (revision 594)
+++ /trunk/Cocoa/Pester/Source/Pester.xcodeproj/project.pbxproj (revision 595)
@@ -8,4 +8,5 @@
/* Begin PBXBuildFile section */
+ E12CBFD310CC310800159E88 /* NJRMenuSlider.m in Sources */ = {isa = PBXBuildFile; fileRef = E12CBFD210CC310800159E88 /* NJRMenuSlider.m */; };
E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */ = {isa = PBXBuildFile; fileRef = E15044660CFCDC7E00DE47E9 /* NJRValidatingField.m */; };
E17562620CF8C50B00FC5057 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E17562610CF8C50B00FC5057 /* Sparkle.framework */; };
@@ -185,4 +186,6 @@
E127900C0442A92900050002 /* PSVolumeController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSVolumeController.h; sourceTree = ""; };
E127900D0442A92900050002 /* PSVolumeController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSVolumeController.m; sourceTree = ""; };
+ E12CBFD110CC310800159E88 /* NJRMenuSlider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NJRMenuSlider.h; sourceTree = ""; };
+ E12CBFD210CC310800159E88 /* NJRMenuSlider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NJRMenuSlider.m; sourceTree = ""; };
E130B9AC03B7C59700000028 /* PSPowerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PSPowerManager.h; sourceTree = ""; };
E130B9AD03B7C59700000028 /* PSPowerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PSPowerManager.m; sourceTree = ""; };
@@ -671,4 +674,6 @@
F5F240B6036A862101FE7503 /* NJRFSObjectSelector.h */,
F5F240B5036A862101FE7503 /* NJRFSObjectSelector.m */,
+ E12CBFD110CC310800159E88 /* NJRMenuSlider.h */,
+ E12CBFD210CC310800159E88 /* NJRMenuSlider.m */,
F5F240CD036A877301FE7503 /* NJRQTMediaPopUpButton.h */,
F5F240CC036A877301FE7503 /* NJRQTMediaPopUpButton.m */,
@@ -938,4 +943,5 @@
E1B121970CF62FD1004975AA /* NSMenuItem-NJRExtensions.m in Sources */,
E15044670CFCDC7E00DE47E9 /* NJRValidatingField.m in Sources */,
+ E12CBFD310CC310800159E88 /* NJRMenuSlider.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;