summaryrefslogtreecommitdiffstats
path: root/macosx
diff options
context:
space:
mode:
authorritsuka <[email protected]>2013-11-04 07:09:50 +0000
committerritsuka <[email protected]>2013-11-04 07:09:50 +0000
commit85df20369cf73f5115a1707a47a7ac52f2881efb (patch)
tree65f37715730a25b1a4456e0c1930bbc28c8bc2e5 /macosx
parentd0bfc7cd9a4df6c6277f78161241ec8b93cac8f5 (diff)
MacGUI: Refactor HBPreviewController. Rename the actual class to HBPreviewController, and move the image and video creation code to a separate HBPreviewGenerator class. Update the preview duration list as Rodeo suggested.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@5874 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'macosx')
-rw-r--r--macosx/Controller.h2
-rw-r--r--macosx/Controller.m11
-rw-r--r--macosx/English.lproj/PicturePreview.xib2479
-rw-r--r--macosx/HBPreviewController.h127
-rw-r--r--macosx/HBPreviewController.m1822
-rw-r--r--macosx/HBPreviewGenerator.h33
-rw-r--r--macosx/HBPreviewGenerator.m423
-rw-r--r--macosx/HandBrake.xcodeproj/project.pbxproj6
-rw-r--r--macosx/PictureController.m31
9 files changed, 2270 insertions, 2664 deletions
diff --git a/macosx/Controller.h b/macosx/Controller.h
index cd6cd016c..dc36ccc27 100644
--- a/macosx/Controller.h
+++ b/macosx/Controller.h
@@ -57,7 +57,7 @@ BOOL fIsDragging;
HBPictureController * fPictureController;
/* Picture Preview */
- PreviewController * fPreviewController;
+ HBPreviewController * fPreviewController;
/* x264 Presets Box */
NSArray * fX264PresetNames;
diff --git a/macosx/Controller.m b/macosx/Controller.m
index 413963b1d..cd3f98bfa 100644
--- a/macosx/Controller.m
+++ b/macosx/Controller.m
@@ -209,9 +209,9 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It
// Set the Growl Delegate
[GrowlApplicationBridge setGrowlDelegate: self];
/* Init others controllers */
- [fPictureController setHandle: fHandle];
[fPictureController setDelegate: self];
-
+ [fPictureController setHandle: fHandle];
+
[fQueueController setHandle: fQueueEncodeLibhb];
[fQueueController setHBController: self];
@@ -1941,7 +1941,9 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It
// Notify Subtitles that there's no title
[fSubtitlesDelegate resetWithTitle:nil];
[fSubtitlesTable reloadData];
-
+
+ [fPictureController setTitle:NULL];
+
// Notify anyone interested (audio controller) that there's no title
[[NSNotificationCenter defaultCenter] postNotification:
[NSNotification notificationWithName: HBTitleChangedNotification
@@ -2077,6 +2079,9 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It
[fChapterTitlesDelegate resetWithTitle:nil];
[fChapterTable reloadData];
+ // Notify PictureController that there's no title
+ [fPictureController setTitle:NULL];
+
// Notify anyone interested (audio controller) that there's no title
[[NSNotificationCenter defaultCenter] postNotification:
[NSNotification notificationWithName: HBTitleChangedNotification
diff --git a/macosx/English.lproj/PicturePreview.xib b/macosx/English.lproj/PicturePreview.xib
index 3740cac7e..2f0f337e3 100644
--- a/macosx/English.lproj/PicturePreview.xib
+++ b/macosx/English.lproj/PicturePreview.xib
@@ -1,26 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
- <int key="IBDocument.SystemTarget">1050</int>
- <string key="IBDocument.SystemVersion">12D61</string>
- <string key="IBDocument.InterfaceBuilderVersion">3084</string>
- <string key="IBDocument.AppKitVersion">1187.37</string>
- <string key="IBDocument.HIToolboxVersion">626.00</string>
- <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.QTKitIBPlugin</string>
- </object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>3084</string>
- <string>2053</string>
- </object>
- </object>
- <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
- <bool key="EncodedWithXMLCoder">YES</bool>
+ <int key="IBDocument.SystemTarget">1060</int>
+ <string key="IBDocument.SystemVersion">13A603</string>
+ <string key="IBDocument.InterfaceBuilderVersion">4511</string>
+ <string key="IBDocument.AppKitVersion">1265</string>
+ <string key="IBDocument.HIToolboxVersion">695.00</string>
+ <dictionary class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="com.apple.InterfaceBuilder.CocoaPlugin">4511</string>
+ <string key="com.apple.QTKitIBPlugin">3336</string>
+ </dictionary>
+ <array key="IBDocument.IntegratedClassDependencies">
<string>NSBox</string>
<string>NSButton</string>
<string>NSButtonCell</string>
@@ -37,60 +27,52 @@
<string>NSView</string>
<string>NSWindowTemplate</string>
<string>QTMovieView</string>
- </object>
- <object class="NSArray" key="IBDocument.PluginDependencies">
- <bool key="EncodedWithXMLCoder">YES</bool>
+ </array>
+ <array key="IBDocument.PluginDependencies">
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.QTKitIBPlugin</string>
- </object>
+ </array>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
- <object class="NSMutableArray" key="IBDocument.RootObjects" id="273418435">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSCustomObject" id="355312334">
- <string key="NSClassName">PreviewController</string>
+ <array class="NSMutableArray" key="IBDocument.RootObjects" id="24783728">
+ <object class="NSCustomObject" id="1036052779">
+ <string key="NSClassName">HBPreviewController</string>
</object>
- <object class="NSCustomObject" id="844574444">
+ <object class="NSCustomObject" id="525801383">
<string key="NSClassName">FirstResponder</string>
</object>
- <object class="NSCustomObject" id="837220151">
+ <object class="NSCustomObject" id="460582123">
<string key="NSClassName">NSApplication</string>
</object>
- <object class="NSWindowTemplate" id="616825745">
+ <object class="NSWindowTemplate" id="133213351">
<int key="NSWindowStyleMask">7</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{142, 519}, {490, 360}}</string>
<int key="NSWTFlags">1886913536</int>
<string key="NSWindowTitle">HandBrake Preview</string>
<string key="NSWindowClass">NSPanel</string>
- <object class="NSMutableString" key="NSViewClass">
- <characters key="NS.bytes">View</characters>
- </object>
+ <nil key="NSViewClass"/>
<nil key="NSUserInterfaceItemIdentifier"/>
- <object class="NSView" key="NSWindowView" id="49161063">
+ <object class="NSView" key="NSWindowView" id="929670820">
<reference key="NSNextResponder"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="QTMovieView" id="48693112">
- <reference key="NSNextResponder" ref="49161063"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableSet" key="NSDragTypes">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="set.sortedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>Apple URL pasteboard type</string>
- <string>CorePasteboardFlavorType 0x6D6F6F76</string>
- <string>NSFilenamesPboardType</string>
- <string>QTMoviePasteboardType</string>
- </object>
- </object>
+ <int key="NSvFlags">1810</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="QTMovieView" id="703812881">
+ <reference key="NSNextResponder" ref="929670820"/>
+ <int key="NSvFlags">1810</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <set class="NSMutableSet" key="NSDragTypes">
+ <string>Apple URL pasteboard type</string>
+ <string>CorePasteboardFlavorType 0x6D6F6F76</string>
+ <string>NSFilenamesPboardType</string>
+ <string>QTMoviePasteboardType</string>
+ </set>
<string key="NSFrameSize">{490, 360}</string>
- <reference key="NSSuperview" ref="49161063"/>
+ <reference key="NSSuperview" ref="929670820"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="768906858"/>
+ <reference key="NSNextKeyView" ref="758551503"/>
<object class="NSColor" key="kCoderFillColor">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MC44MDAwMDAwMSAwLjgwMDAwMDAxIDAuODAwMDAwMDEAA</bytes>
@@ -100,163 +82,120 @@
<nil key="kCoderMovie"/>
<boolean value="NO" key="kCoderEditable"/>
</object>
- <object class="NSBox" id="92351498">
- <reference key="NSNextResponder" ref="49161063"/>
- <int key="NSvFlags">-2147483611</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="385854969">
- <reference key="NSNextResponder" ref="92351498"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSButton" id="798240356">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">292</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <object class="NSBox" id="717764450">
+ <reference key="NSNextResponder" ref="929670820"/>
+ <int key="NSvFlags">-2147482075</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSView" id="378084343">
+ <reference key="NSNextResponder" ref="717764450"/>
+ <int key="NSvFlags">1810</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSButton" id="314619144">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1828</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{17, 11}, {77, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="66510867"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="794567820"/>
+ <string key="NSHuggingPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="975305481">
+ <object class="NSButtonCell" key="NSCell" id="992719048">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Live Preview</string>
<object class="NSFont" key="NSSupport" id="22">
- <string key="NSName">LucidaGrande</string>
+ <string key="NSName">.LucidaGrandeUI</string>
<double key="NSSize">9</double>
<int key="NSfFlags">3614</int>
</object>
- <reference key="NSControlView" ref="798240356"/>
+ <reference key="NSControlView" ref="314619144"/>
<int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="22"/>
+ <object class="NSFont" key="NSAlternateImage" id="563492427">
+ <string key="NSName">.LucidaGrandeUI</string>
+ <double key="NSSize">9</double>
+ <int key="NSfFlags">16</int>
+ </object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSButton" id="141370142">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <string key="NSFrame">{{370, 11}, {59, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSButton" id="394714670">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1825</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{380, 11}, {59, 16}}</string>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="700607930"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="432685731"/>
+ <string key="NSHuggingPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="606007744">
+ <object class="NSButtonCell" key="NSCell" id="690045799">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Settings</string>
<reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="141370142"/>
+ <reference key="NSControlView" ref="394714670"/>
<int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="22"/>
+ <reference key="NSAlternateImage" ref="563492427"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSButton" id="81685190">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <string key="NSFrame">{{272, 11}, {92, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSButton" id="327371770">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1825</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{282, 11}, {92, 16}}</string>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="141370142"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="394714670"/>
+ <string key="NSHuggingPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="847033897">
+ <object class="NSButtonCell" key="NSCell" id="992244150">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Scale To Screen</string>
<reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="81685190"/>
+ <reference key="NSControlView" ref="327371770"/>
<int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
- <object class="NSFont" key="NSAlternateImage" id="354866114">
- <string key="NSName">LucidaGrande</string>
- <double key="NSSize">9</double>
- <int key="NSfFlags">16</int>
- </object>
+ <reference key="NSAlternateImage" ref="563492427"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSTextField" id="66510867">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <string key="NSFrame">{{108, 14}, {75, 11}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSTextField" id="794567820">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1825</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{118, 14}, {75, 11}}</string>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="598619000"/>
+ <reference key="NSNextKeyView" ref="967936319"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="567286013">
+ <object class="NSTextFieldCell" key="NSCell" id="779976102">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">71566336</int>
<string key="NSContents">Duration (sec):</string>
- <object class="NSFont" key="NSSupport" id="811969608">
- <string key="NSName">LucidaGrande-Bold</string>
+ <object class="NSFont" key="NSSupport" id="23">
+ <string key="NSName">.LucidaGrandeUI-Bold</string>
<double key="NSSize">9</double>
- <int key="NSfFlags">16</int>
+ <int key="NSfFlags">3871</int>
</object>
- <reference key="NSControlView" ref="66510867"/>
- <object class="NSColor" key="NSBackgroundColor" id="407686733">
+ <reference key="NSControlView" ref="794567820"/>
+ <object class="NSColor" key="NSBackgroundColor" id="80757536">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlColor</string>
@@ -265,92 +204,81 @@
<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
</object>
</object>
- <object class="NSColor" key="NSTextColor" id="978544139">
+ <object class="NSColor" key="NSTextColor" id="95597977">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MSAxIDEAA</bytes>
</object>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
</object>
- <object class="NSPopUpButton" id="598619000">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">289</int>
- <string key="NSFrame">{{187, 12}, {58, 15}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSPopUpButton" id="967936319">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1825</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{197, 12}, {58, 15}}</string>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="81685190"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="327371770"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSPopUpButtonCell" key="NSCell" id="953108737">
+ <object class="NSPopUpButtonCell" key="NSCell" id="531663027">
<int key="NSCellFlags">-2076180416</int>
<int key="NSCellFlags2">264192</int>
<reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="598619000"/>
+ <reference key="NSControlView" ref="967936319"/>
<int key="NSButtonFlags">109199360</int>
<int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="563492427"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
<int key="NSPeriodicDelay">400</int>
<int key="NSPeriodicInterval">75</int>
- <object class="NSMenuItem" key="NSMenuItem" id="372655630">
- <reference key="NSMenu" ref="501672847"/>
+ <object class="NSMenuItem" key="NSMenuItem" id="861000877">
+ <reference key="NSMenu" ref="164247414"/>
<string key="NSTitle">Item 1</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<int key="NSState">1</int>
- <object class="NSCustomResource" key="NSOnImage" id="858043985">
+ <object class="NSCustomResource" key="NSOnImage" id="141778911">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
- <object class="NSCustomResource" key="NSMixedImage" id="700487240">
+ <object class="NSCustomResource" key="NSMixedImage" id="186550871">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="953108737"/>
+ <reference key="NSTarget" ref="531663027"/>
</object>
<bool key="NSMenuItemRespectAlignment">YES</bool>
- <object class="NSMenu" key="NSMenu" id="501672847">
+ <object class="NSMenu" key="NSMenu" id="164247414">
<string key="NSTitle">OtherViews</string>
- <object class="NSMutableArray" key="NSMenuItems">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="372655630"/>
- <object class="NSMenuItem" id="607756368">
- <reference key="NSMenu" ref="501672847"/>
+ <array class="NSMutableArray" key="NSMenuItems">
+ <reference ref="861000877"/>
+ <object class="NSMenuItem" id="831823711">
+ <reference key="NSMenu" ref="164247414"/>
<string key="NSTitle">Item 2</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="858043985"/>
- <reference key="NSMixedImage" ref="700487240"/>
+ <reference key="NSOnImage" ref="141778911"/>
+ <reference key="NSMixedImage" ref="186550871"/>
<string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="953108737"/>
+ <reference key="NSTarget" ref="531663027"/>
</object>
- <object class="NSMenuItem" id="272743761">
- <reference key="NSMenu" ref="501672847"/>
+ <object class="NSMenuItem" id="105051198">
+ <reference key="NSMenu" ref="164247414"/>
<string key="NSTitle">Item 3</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
- <reference key="NSOnImage" ref="858043985"/>
- <reference key="NSMixedImage" ref="700487240"/>
+ <reference key="NSOnImage" ref="141778911"/>
+ <reference key="NSMixedImage" ref="186550871"/>
<string key="NSAction">_popUpItemAction:</string>
- <reference key="NSTarget" ref="953108737"/>
+ <reference key="NSTarget" ref="531663027"/>
</object>
- </object>
+ </array>
</object>
<int key="NSPreferredEdge">1</int>
<bool key="NSUsesItemFromMenu">YES</bool>
@@ -359,33 +287,20 @@
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSSlider" id="396925210">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{18, 39}, {410, 16}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSSlider" id="175162618">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1826</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{18, 39}, {420, 16}}</string>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="798240356"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="314619144"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSSliderCell" key="NSCell" id="639767004">
+ <object class="NSSliderCell" key="NSCell" id="955137720">
<int key="NSCellFlags">67371264</int>
<int key="NSCellFlags2">262144</int>
- <string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="396925210"/>
+ <reference key="NSControlView" ref="175162618"/>
<double key="NSMaxValue">9</double>
<double key="NSMinValue">0.0</double>
<double key="NSValue">0.0</double>
@@ -397,72 +312,76 @@
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSTextField" id="628196212">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{15, 55}, {420, 20}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSTextField" id="142474899">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1826</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{15, 55}, {430, 20}}</string>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="396925210"/>
+ <reference key="NSNextKeyView" ref="175162618"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="921881842">
+ <object class="NSTextFieldCell" key="NSCell" id="974297610">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4325376</int>
<string key="NSContents"/>
- <object class="NSFont" key="NSSupport" id="476446081">
- <string key="NSName">LucidaGrande-Bold</string>
+ <object class="NSFont" key="NSSupport" id="27">
+ <string key="NSName">.LucidaGrandeUI-Bold</string>
<double key="NSSize">11</double>
- <int key="NSfFlags">16</int>
+ <int key="NSfFlags">3357</int>
</object>
- <reference key="NSControlView" ref="628196212"/>
- <bool key="NSDrawsBackground">YES</bool>
- <reference key="NSBackgroundColor" ref="407686733"/>
- <reference key="NSTextColor" ref="978544139"/>
+ <reference key="NSControlView" ref="142474899"/>
+ <reference key="NSBackgroundColor" ref="80757536"/>
+ <reference key="NSTextColor" ref="95597977"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
</object>
- <object class="NSTextField" id="245200984">
- <reference key="NSNextResponder" ref="385854969"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{15, 77}, {416, 12}}</string>
- <reference key="NSSuperview" ref="385854969"/>
+ <object class="NSTextField" id="543553084">
+ <reference key="NSNextResponder" ref="378084343"/>
+ <int key="NSvFlags">1826</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{15, 77}, {426, 12}}</string>
+ <reference key="NSSuperview" ref="378084343"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="628196212"/>
+ <reference key="NSNextKeyView" ref="142474899"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="1032360651">
+ <object class="NSTextFieldCell" key="NSCell" id="185807734">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">4456448</int>
<string key="NSContents"/>
- <reference key="NSSupport" ref="811969608"/>
- <reference key="NSControlView" ref="245200984"/>
- <bool key="NSDrawsBackground">YES</bool>
- <reference key="NSBackgroundColor" ref="407686733"/>
- <reference key="NSTextColor" ref="978544139"/>
+ <reference key="NSSupport" ref="23"/>
+ <reference key="NSControlView" ref="543553084"/>
+ <reference key="NSBackgroundColor" ref="80757536"/>
+ <reference key="NSTextColor" ref="95597977"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
</object>
- </object>
- <string key="NSFrame">{{2, 2}, {446, 96}}</string>
- <reference key="NSSuperview" ref="92351498"/>
+ </array>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{2, 2}, {456, 96}}</string>
+ <reference key="NSSuperview" ref="717764450"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="245200984"/>
+ <reference key="NSNextKeyView" ref="543553084"/>
</object>
- </object>
+ </array>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{15, 132}, {460, 100}}</string>
- <reference key="NSSuperview" ref="49161063"/>
+ <reference key="NSSuperview" ref="929670820"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="385854969"/>
+ <reference key="NSNextKeyView" ref="378084343"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
- <int key="NSCellFlags2">0</int>
+ <int key="NSCellFlags2">134217728</int>
<string key="NSContents">Picture Controls</string>
- <object class="NSFont" key="NSSupport" id="26">
- <string key="NSName">LucidaGrande</string>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">.LucidaGrandeUI</string>
<double key="NSSize">11</double>
- <int key="NSfFlags">3100</int>
+ <int key="NSfFlags">1558</int>
</object>
- <object class="NSColor" key="NSBackgroundColor" id="384686844">
+ <object class="NSColor" key="NSBackgroundColor" id="3673183">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
@@ -473,10 +392,10 @@
</object>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ <bytes key="NSWhite">MCAwLjgAA</bytes>
</object>
</object>
- <reference key="NSContentView" ref="385854969"/>
+ <reference key="NSContentView" ref="378084343"/>
<int key="NSBorderType">1</int>
<int key="NSBoxType">4</int>
<int key="NSTitlePosition">0</int>
@@ -492,42 +411,27 @@
<bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
</object>
</object>
- <object class="NSBox" id="700607930">
- <reference key="NSNextResponder" ref="49161063"/>
- <int key="NSvFlags">-2147483611</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="1068222891">
- <reference key="NSNextResponder" ref="700607930"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSSlider" id="886140787">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{16, 16}, {355, 21}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
+ <object class="NSBox" id="432685731">
+ <reference key="NSNextResponder" ref="929670820"/>
+ <int key="NSvFlags">-2147482075</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSView" id="592392656">
+ <reference key="NSNextResponder" ref="432685731"/>
+ <int key="NSvFlags">1810</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSSlider" id="222326321">
+ <reference key="NSNextResponder" ref="592392656"/>
+ <int key="NSvFlags">1826</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{16, 16}, {337, 21}}</string>
+ <reference key="NSSuperview" ref="592392656"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="964331174"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="351711265"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSSliderCell" key="NSCell" id="493667684">
- <int key="NSCellFlags">67371264</int>
+ <object class="NSSliderCell" key="NSCell" id="1050734698">
+ <int key="NSCellFlags">262400</int>
<int key="NSCellFlags2">0</int>
- <string key="NSContents"/>
- <reference key="NSControlView" ref="886140787"/>
+ <reference key="NSControlView" ref="222326321"/>
<double key="NSMaxValue">100</double>
<double key="NSMinValue">0.0</double>
<double key="NSValue">0.0</double>
@@ -539,28 +443,26 @@
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSButton" id="102183813">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">268</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <object class="NSButton" id="152429490">
+ <reference key="NSNextResponder" ref="592392656"/>
+ <int key="NSvFlags">1804</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{205, 43}, {36, 36}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSSuperview" ref="592392656"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="894608246"/>
+ <reference key="NSNextKeyView" ref="384131700"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="19809002">
+ <object class="NSButtonCell" key="NSCell" id="444106871">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents"/>
- <object class="NSFont" key="NSSupport" id="353643025">
- <string key="NSName">LucidaGrande</string>
+ <object class="NSFont" key="NSSupport" id="954502975">
+ <string key="NSName">.LucidaGrandeUI</string>
<double key="NSSize">13</double>
<int key="NSfFlags">1044</int>
</object>
- <reference key="NSControlView" ref="102183813"/>
- <int key="NSButtonFlags">-931921920</int>
+ <reference key="NSControlView" ref="152429490"/>
+ <int key="NSButtonFlags">-935067648</int>
<int key="NSButtonFlags2">134</int>
<object class="NSCustomResource" key="NSNormalImage">
<string key="NSClassName">NSImage</string>
@@ -572,28 +474,26 @@
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSButton" id="897614796">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">268</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <object class="NSButton" id="147746186">
+ <reference key="NSNextResponder" ref="592392656"/>
+ <int key="NSvFlags">1804</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{163, 48}, {32, 26}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSSuperview" ref="592392656"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="102183813"/>
+ <reference key="NSNextKeyView" ref="152429490"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="913339095">
+ <object class="NSButtonCell" key="NSCell" id="778199390">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents"/>
- <reference key="NSSupport" ref="353643025"/>
- <reference key="NSControlView" ref="897614796"/>
+ <reference key="NSSupport" ref="954502975"/>
+ <reference key="NSControlView" ref="147746186"/>
<int key="NSButtonFlags">-2041839616</int>
<int key="NSButtonFlags2">134</int>
<object class="NSCustomResource" key="NSNormalImage">
@@ -602,28 +502,26 @@
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSButton" id="894608246">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">268</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <object class="NSButton" id="384131700">
+ <reference key="NSNextResponder" ref="592392656"/>
+ <int key="NSvFlags">1804</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{251, 48}, {32, 26}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSSuperview" ref="592392656"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="630042886"/>
+ <reference key="NSNextKeyView" ref="1029861158"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="117507013">
+ <object class="NSButtonCell" key="NSCell" id="328702140">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="894608246"/>
+ <reference key="NSControlView" ref="384131700"/>
<int key="NSButtonFlags">-2042363904</int>
<int key="NSButtonFlags2">134</int>
<object class="NSCustomResource" key="NSNormalImage">
@@ -632,95 +530,88 @@
</object>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSButton" id="630042886">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">292</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <object class="NSButton" id="1029861158">
+ <reference key="NSNextResponder" ref="592392656"/>
+ <int key="NSvFlags">1828</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{348, 53}, {81, 16}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
+ <reference key="NSSuperview" ref="592392656"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="886140787"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="222326321"/>
+ <string key="NSHuggingPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="999505395">
+ <object class="NSButtonCell" key="NSCell" id="666432193">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Still Previews</string>
<reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="630042886"/>
+ <reference key="NSControlView" ref="1029861158"/>
<int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="22"/>
+ <reference key="NSAlternateImage" ref="563492427"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSTextField" id="964331174">
- <reference key="NSNextResponder" ref="1068222891"/>
- <int key="NSvFlags">290</int>
- <string key="NSFrame">{{364, 19}, {67, 14}}</string>
- <reference key="NSSuperview" ref="1068222891"/>
+ <object class="NSTextField" id="351711265">
+ <reference key="NSNextResponder" ref="592392656"/>
+ <int key="NSvFlags">1826</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{347, 19}, {94, 14}}</string>
+ <reference key="NSSuperview" ref="592392656"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="113790059">
+ <object class="NSTextFieldCell" key="NSCell" id="88587267">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">71565312</int>
<string key="NSContents">00:00:00</string>
- <reference key="NSSupport" ref="476446081"/>
- <reference key="NSControlView" ref="964331174"/>
- <bool key="NSDrawsBackground">YES</bool>
- <reference key="NSBackgroundColor" ref="407686733"/>
- <reference key="NSTextColor" ref="978544139"/>
+ <reference key="NSSupport" ref="27"/>
+ <reference key="NSControlView" ref="351711265"/>
+ <reference key="NSBackgroundColor" ref="80757536"/>
+ <reference key="NSTextColor" ref="95597977"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
</object>
- </object>
- <string key="NSFrame">{{2, 2}, {446, 96}}</string>
- <reference key="NSSuperview" ref="700607930"/>
+ </array>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{2, 2}, {456, 96}}</string>
+ <reference key="NSSuperview" ref="432685731"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="897614796"/>
+ <reference key="NSNextKeyView" ref="147746186"/>
</object>
- </object>
+ </array>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{15, 30}, {460, 100}}</string>
- <reference key="NSSuperview" ref="49161063"/>
+ <reference key="NSSuperview" ref="929670820"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="1068222891"/>
+ <reference key="NSNextKeyView" ref="592392656"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
- <int key="NSCellFlags2">0</int>
+ <int key="NSCellFlags2">134217728</int>
<string key="NSContents">Playback Controls</string>
- <reference key="NSSupport" ref="26"/>
- <reference key="NSBackgroundColor" ref="384686844"/>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">.LucidaGrandeUI</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">1558</int>
+ </object>
+ <reference key="NSBackgroundColor" ref="3673183"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ <bytes key="NSWhite">MCAwLjgAA</bytes>
</object>
</object>
- <reference key="NSContentView" ref="1068222891"/>
+ <reference key="NSContentView" ref="592392656"/>
<int key="NSBorderType">1</int>
<int key="NSBoxType">4</int>
<int key="NSTitlePosition">0</int>
@@ -736,125 +627,105 @@
<bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
</object>
</object>
- <object class="NSBox" id="768906858">
- <reference key="NSNextResponder" ref="49161063"/>
- <int key="NSvFlags">-2147483611</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSView" id="1067699710">
- <reference key="NSNextResponder" ref="768906858"/>
- <int key="NSvFlags">274</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSProgressIndicator" id="196868285">
- <reference key="NSNextResponder" ref="1067699710"/>
- <int key="NSvFlags">1280</int>
+ <object class="NSBox" id="758551503">
+ <reference key="NSNextResponder" ref="929670820"/>
+ <int key="NSvFlags">-2147482075</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSView" id="396186102">
+ <reference key="NSNextResponder" ref="758551503"/>
+ <int key="NSvFlags">1810</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSProgressIndicator" id="721434635">
+ <reference key="NSNextResponder" ref="396186102"/>
+ <int key="NSvFlags">1792</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{18, 26}, {346, 12}}</string>
- <reference key="NSSuperview" ref="1067699710"/>
+ <reference key="NSSuperview" ref="396186102"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="569473100"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
- <int key="NSpiFlags">16650</int>
+ <reference key="NSNextKeyView" ref="982988884"/>
+ <int key="NSpiFlags">16654</int>
<double key="NSMaxValue">100</double>
</object>
- <object class="NSButton" id="569473100">
- <reference key="NSNextResponder" ref="1067699710"/>
- <int key="NSvFlags">265</int>
- <object class="NSMutableArray" key="NSSubviews">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <string key="NSFrame">{{371, 24}, {58, 16}}</string>
- <reference key="NSSuperview" ref="1067699710"/>
+ <object class="NSButton" id="982988884">
+ <reference key="NSNextResponder" ref="396186102"/>
+ <int key="NSvFlags">1801</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{381, 24}, {58, 16}}</string>
+ <reference key="NSSuperview" ref="396186102"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="92351498"/>
- <object class="NSArray" key="NSViewContentFilters">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="CIColorMonochrome">
- <object class="CIColor" key="CI_inputColor">
- <float key="red">0.70196080207824707</float>
- <float key="green">0.70196080207824707</float>
- <float key="blue">0.70196080207824707</float>
- <float key="alpha">1</float>
- </object>
- <integer value="1" key="CI_inputIntensity"/>
- <bool key="CIEnabled">YES</bool>
- </object>
- </object>
+ <reference key="NSNextKeyView" ref="717764450"/>
+ <string key="NSHuggingPriority">{250, 750}</string>
<bool key="NSEnabled">YES</bool>
- <object class="NSButtonCell" key="NSCell" id="908165435">
+ <object class="NSButtonCell" key="NSCell" id="481130630">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134479872</int>
<string key="NSContents">Cancel</string>
<reference key="NSSupport" ref="22"/>
- <reference key="NSControlView" ref="569473100"/>
+ <reference key="NSControlView" ref="982988884"/>
<int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
- <reference key="NSAlternateImage" ref="354866114"/>
+ <reference key="NSAlternateImage" ref="563492427"/>
<string key="NSAlternateContents"/>
<string key="NSKeyEquivalent"/>
- <int key="NSPeriodicDelay">200</int>
- <int key="NSPeriodicInterval">25</int>
+ <int key="NSPeriodicDelay">400</int>
+ <int key="NSPeriodicInterval">75</int>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
</object>
- <object class="NSTextField" id="986015194">
- <reference key="NSNextResponder" ref="1067699710"/>
- <int key="NSvFlags">256</int>
+ <object class="NSTextField" id="774269445">
+ <reference key="NSNextResponder" ref="396186102"/>
+ <int key="NSvFlags">1792</int>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{15, 59}, {406, 14}}</string>
- <reference key="NSSuperview" ref="1067699710"/>
+ <reference key="NSSuperview" ref="396186102"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="196868285"/>
+ <reference key="NSNextKeyView" ref="721434635"/>
<bool key="NSEnabled">YES</bool>
- <object class="NSTextFieldCell" key="NSCell" id="304208899">
+ <object class="NSTextFieldCell" key="NSCell" id="547191345">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">4326400</int>
<string key="NSContents">Preparing Preview</string>
- <reference key="NSSupport" ref="476446081"/>
- <reference key="NSControlView" ref="986015194"/>
+ <reference key="NSSupport" ref="27"/>
+ <reference key="NSControlView" ref="774269445"/>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">2</int>
<bytes key="NSRGB">MC45MDE5NjA4NSAwLjkwMTk2MDg1IDAuOTAxOTYwODUgMAA</bytes>
</object>
- <reference key="NSTextColor" ref="978544139"/>
+ <reference key="NSTextColor" ref="95597977"/>
</object>
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
</object>
- </object>
- <string key="NSFrame">{{2, 2}, {446, 96}}</string>
- <reference key="NSSuperview" ref="768906858"/>
+ </array>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
+ <string key="NSFrame">{{2, 2}, {456, 96}}</string>
+ <reference key="NSSuperview" ref="758551503"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="986015194"/>
+ <reference key="NSNextKeyView" ref="774269445"/>
</object>
- </object>
+ </array>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrame">{{15, 235}, {460, 100}}</string>
- <reference key="NSSuperview" ref="49161063"/>
+ <reference key="NSSuperview" ref="929670820"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="1067699710"/>
+ <reference key="NSNextKeyView" ref="396186102"/>
<string key="NSOffsets">{0, 0}</string>
<object class="NSTextFieldCell" key="NSTitleCell">
<int key="NSCellFlags">67108864</int>
- <int key="NSCellFlags2">0</int>
+ <int key="NSCellFlags2">134217728</int>
<string key="NSContents">Encoding Controls</string>
- <reference key="NSSupport" ref="26"/>
- <reference key="NSBackgroundColor" ref="384686844"/>
+ <object class="NSFont" key="NSSupport">
+ <string key="NSName">.LucidaGrandeUI</string>
+ <double key="NSSize">11</double>
+ <int key="NSfFlags">1558</int>
+ </object>
+ <reference key="NSBackgroundColor" ref="3673183"/>
<object class="NSColor" key="NSTextColor">
<int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MCAwLjgwMDAwMDAxAA</bytes>
+ <bytes key="NSWhite">MCAwLjgAA</bytes>
</object>
</object>
- <reference key="NSContentView" ref="1067699710"/>
+ <reference key="NSContentView" ref="396186102"/>
<int key="NSBorderType">1</int>
<int key="NSBoxType">4</int>
<int key="NSTitlePosition">0</int>
@@ -870,1247 +741,979 @@
<bytes key="NSRGB">MCAwIDAgMC42AA</bytes>
</object>
</object>
- </object>
+ </array>
+ <object class="NSPSMatrix" key="NSFrameMatrix"/>
<string key="NSFrameSize">{490, 360}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
- <reference key="NSNextKeyView" ref="48693112"/>
+ <reference key="NSNextKeyView" ref="703812881"/>
</object>
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
- </object>
+ </array>
<object class="IBObjectContainer" key="IBDocument.Objects">
- <object class="NSMutableArray" key="connectionRecords">
- <bool key="EncodedWithXMLCoder">YES</bool>
+ <bool key="usesAutoincrementingIDs">NO</bool>
+ <array class="NSMutableArray" key="connectionRecords">
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">window</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="616825745"/>
+ <string key="label">fCancelPreviewMovieButton</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="982988884"/>
</object>
- <int key="connectionID">184</int>
+ <string key="id">263</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">fCreatePreviewMovieButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="798240356"/>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="314619144"/>
</object>
- <int key="connectionID">217</int>
+ <string key="id">217</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fscaleInfoField</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="245200984"/>
+ <string key="label">fEncodingControlBox</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="758551503"/>
</object>
- <int key="connectionID">282</int>
+ <string key="id">253</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPreviewMovieLengthPopUp</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="598619000"/>
+ <string key="label">fGoToBeginningButton</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="147746186"/>
</object>
- <int key="connectionID">232</int>
+ <string key="id">380</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">previewDurationPopUpChanged:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="598619000"/>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fGoToEndButton</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="384131700"/>
</object>
- <int key="connectionID">233</int>
+ <string key="id">381</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPictureControlBox</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="92351498"/>
+ <string key="label">fGoToStillPreviewButton</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="1029861158"/>
</object>
- <int key="connectionID">254</int>
+ <string key="id">368</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">pictureSliderChanged:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="396925210"/>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fInfoField</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="142474899"/>
</object>
- <int key="connectionID">212</int>
+ <string key="id">73</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">createMoviePreview:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="798240356"/>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fMovieCreationProgressIndicator</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="721434635"/>
</object>
- <int key="connectionID">218</int>
+ <string key="id">214</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPictureSettingsToggleButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="141370142"/>
+ <string key="label">fMovieInfoField</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="351711265"/>
</object>
- <int key="connectionID">273</int>
+ <string key="id">374</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleScaleToScreen:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="81685190"/>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fMoviePlaybackControlBox</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="432685731"/>
</object>
- <int key="connectionID">279</int>
+ <string key="id">363</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fScaleToScreenToggleButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="81685190"/>
+ <string key="label">fMovieScrubberSlider</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="222326321"/>
</object>
- <int key="connectionID">277</int>
+ <string key="id">371</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPictureSlider</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="396925210"/>
+ <string key="label">fMovieView</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="703812881"/>
</object>
- <int key="connectionID">211</int>
+ <string key="id">208</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">showPictureSettings:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="141370142"/>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fPictureControlBox</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="717764450"/>
</object>
- <int key="connectionID">274</int>
+ <string key="id">254</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fInfoField</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="628196212"/>
+ <string key="label">fPictureSettingsToggleButton</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="394714670"/>
</object>
- <int key="connectionID">73</int>
+ <string key="id">273</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fGoToBeginningButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="897614796"/>
+ <string key="label">fPictureSlider</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="175162618"/>
</object>
- <int key="connectionID">380</int>
+ <string key="id">211</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fMovieScrubberSlider</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="886140787"/>
+ <string key="label">fPlayPauseButton</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="152429490"/>
</object>
- <int key="connectionID">371</int>
+ <string key="id">364</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fMovieInfoField</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="964331174"/>
+ <string key="label">fPreviewMovieLengthPopUp</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="967936319"/>
</object>
- <int key="connectionID">374</int>
+ <string key="id">232</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fGoToEndButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="894608246"/>
+ <string key="label">fPreviewMovieStatusField</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="774269445"/>
</object>
- <int key="connectionID">381</int>
+ <string key="id">225</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">moviePlaybackGoToEnd:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="894608246"/>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fScaleToScreenToggleButton</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="327371770"/>
</object>
- <int key="connectionID">383</int>
+ <string key="id">277</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBActionConnection" key="connection">
- <string key="label">toggleMoviePreviewPlayPause:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="102183813"/>
+ <object class="IBOutletConnection" key="connection">
+ <string key="label">fscaleInfoField</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="543553084"/>
</object>
- <int key="connectionID">370</int>
+ <string key="id">282</string>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
- <string key="label">fPlayPauseButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="102183813"/>
+ <string key="label">window</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="133213351"/>
</object>
- <int key="connectionID">364</int>
+ <string key="id">184</string>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">moviePlaybackGoToBeginning:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="897614796"/>
+ <string key="label">createMoviePreview:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="314619144"/>
</object>
- <int key="connectionID">382</int>
+ <string key="id">218</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fGoToStillPreviewButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="630042886"/>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showPictureSettings:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="394714670"/>
</object>
- <int key="connectionID">368</int>
+ <string key="id">274</string>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">previewScrubberChanged:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="886140787"/>
+ <string key="label">toggleScaleToScreen:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="327371770"/>
</object>
- <int key="connectionID">384</int>
+ <string key="id">279</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fMoviePlaybackControlBox</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="700607930"/>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">previewDurationPopUpChanged:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="967936319"/>
</object>
- <int key="connectionID">363</int>
+ <string key="id">233</string>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">showPicturesPreview:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="630042886"/>
+ <string key="label">pictureSliderChanged:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="175162618"/>
</object>
- <int key="connectionID">396</int>
+ <string key="id">212</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fMovieCreationProgressIndicator</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="196868285"/>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">previewScrubberChanged:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="222326321"/>
</object>
- <int key="connectionID">214</int>
+ <string key="id">384</string>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
- <string key="label">cancelCreateMoviePreview:</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="569473100"/>
+ <string key="label">toggleMoviePreviewPlayPause:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="152429490"/>
</object>
- <int key="connectionID">395</int>
+ <string key="id">370</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fPreviewMovieStatusField</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="986015194"/>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">moviePlaybackGoToBeginning:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="147746186"/>
</object>
- <int key="connectionID">225</int>
+ <string key="id">382</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fCancelPreviewMovieButton</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="569473100"/>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">moviePlaybackGoToEnd:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="384131700"/>
</object>
- <int key="connectionID">263</int>
+ <string key="id">383</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fEncodingControlBox</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="768906858"/>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">showPicturesPreview:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="1029861158"/>
</object>
- <int key="connectionID">253</int>
+ <string key="id">396</string>
</object>
<object class="IBConnectionRecord">
- <object class="IBOutletConnection" key="connection">
- <string key="label">fMovieView</string>
- <reference key="source" ref="355312334"/>
- <reference key="destination" ref="48693112"/>
+ <object class="IBActionConnection" key="connection">
+ <string key="label">cancelCreateMoviePreview:</string>
+ <reference key="source" ref="1036052779"/>
+ <reference key="destination" ref="982988884"/>
</object>
- <int key="connectionID">208</int>
+ <string key="id">395</string>
</object>
- </object>
+ </array>
<object class="IBMutableOrderedSet" key="objectRecords">
- <object class="NSArray" key="orderedObjects">
- <bool key="EncodedWithXMLCoder">YES</bool>
+ <array key="orderedObjects">
<object class="IBObjectRecord">
- <int key="objectID">0</int>
- <object class="NSArray" key="object" id="0">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
- <reference key="children" ref="273418435"/>
+ <string key="id">0</string>
+ <array key="object" id="0"/>
+ <reference key="children" ref="24783728"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">-2</int>
- <reference key="object" ref="355312334"/>
+ <string key="id">-2</string>
+ <reference key="object" ref="1036052779"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
- <int key="objectID">-1</int>
- <reference key="object" ref="844574444"/>
+ <string key="id">-1</string>
+ <reference key="object" ref="525801383"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
- <int key="objectID">-3</int>
- <reference key="object" ref="837220151"/>
+ <string key="id">-3</string>
+ <reference key="object" ref="460582123"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
- <int key="objectID">5</int>
- <reference key="object" ref="616825745"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="49161063"/>
- </object>
+ <string key="id">5</string>
+ <reference key="object" ref="133213351"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="929670820"/>
+ </array>
<reference key="parent" ref="0"/>
<string key="objectName">PreviewPanel</string>
</object>
<object class="IBObjectRecord">
- <int key="objectID">6</int>
- <reference key="object" ref="49161063"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="700607930"/>
- <reference ref="768906858"/>
- <reference ref="92351498"/>
- <reference ref="48693112"/>
- </object>
- <reference key="parent" ref="616825745"/>
+ <string key="id">6</string>
+ <reference key="object" ref="929670820"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="703812881"/>
+ <reference ref="717764450"/>
+ <reference ref="432685731"/>
+ <reference ref="758551503"/>
+ </array>
+ <reference key="parent" ref="133213351"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">335</int>
- <reference key="object" ref="700607930"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="102183813"/>
- <reference ref="894608246"/>
- <reference ref="897614796"/>
- <reference ref="964331174"/>
- <reference ref="886140787"/>
- <reference ref="630042886"/>
- </object>
- <reference key="parent" ref="49161063"/>
+ <string key="id">207</string>
+ <reference key="object" ref="703812881"/>
+ <reference key="parent" ref="929670820"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">365</int>
- <reference key="object" ref="630042886"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="999505395"/>
- </object>
- <reference key="parent" ref="700607930"/>
+ <string key="id">251</string>
+ <reference key="object" ref="717764450"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="314619144"/>
+ <reference ref="394714670"/>
+ <reference ref="327371770"/>
+ <reference ref="794567820"/>
+ <reference ref="967936319"/>
+ <reference ref="175162618"/>
+ <reference ref="142474899"/>
+ <reference ref="543553084"/>
+ </array>
+ <reference key="parent" ref="929670820"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">375</int>
- <reference key="object" ref="897614796"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="913339095"/>
- </object>
- <reference key="parent" ref="700607930"/>
+ <string key="id">215</string>
+ <reference key="object" ref="314619144"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="992719048"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">378</int>
- <reference key="object" ref="894608246"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="117507013"/>
- </object>
- <reference key="parent" ref="700607930"/>
+ <string key="id">216</string>
+ <reference key="object" ref="992719048"/>
+ <reference key="parent" ref="314619144"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">361</int>
- <reference key="object" ref="102183813"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="19809002"/>
- </object>
- <reference key="parent" ref="700607930"/>
+ <string key="id">271</string>
+ <reference key="object" ref="394714670"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="690045799"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">372</int>
- <reference key="object" ref="964331174"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="113790059"/>
- </object>
- <reference key="parent" ref="700607930"/>
+ <string key="id">272</string>
+ <reference key="object" ref="690045799"/>
+ <reference key="parent" ref="394714670"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">341</int>
- <reference key="object" ref="886140787"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="493667684"/>
- </object>
- <reference key="parent" ref="700607930"/>
+ <string key="id">275</string>
+ <reference key="object" ref="327371770"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="992244150"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">346</int>
- <reference key="object" ref="493667684"/>
- <reference key="parent" ref="886140787"/>
+ <string key="id">276</string>
+ <reference key="object" ref="992244150"/>
+ <reference key="parent" ref="327371770"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">373</int>
- <reference key="object" ref="113790059"/>
- <reference key="parent" ref="964331174"/>
+ <string key="id">234</string>
+ <reference key="object" ref="794567820"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="779976102"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">362</int>
- <reference key="object" ref="19809002"/>
- <reference key="parent" ref="102183813"/>
+ <string key="id">235</string>
+ <reference key="object" ref="779976102"/>
+ <reference key="parent" ref="794567820"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">379</int>
- <reference key="object" ref="117507013"/>
- <reference key="parent" ref="894608246"/>
+ <string key="id">226</string>
+ <reference key="object" ref="967936319"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="531663027"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">376</int>
- <reference key="object" ref="913339095"/>
- <reference key="parent" ref="897614796"/>
+ <string key="id">227</string>
+ <reference key="object" ref="531663027"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="164247414"/>
+ </array>
+ <reference key="parent" ref="967936319"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">366</int>
- <reference key="object" ref="999505395"/>
- <reference key="parent" ref="630042886"/>
+ <string key="id">228</string>
+ <reference key="object" ref="164247414"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="861000877"/>
+ <reference ref="831823711"/>
+ <reference ref="105051198"/>
+ </array>
+ <reference key="parent" ref="531663027"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">252</int>
- <reference key="object" ref="768906858"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="569473100"/>
- <reference ref="986015194"/>
- <reference ref="196868285"/>
- </object>
- <reference key="parent" ref="49161063"/>
+ <string key="id">231</string>
+ <reference key="object" ref="861000877"/>
+ <reference key="parent" ref="164247414"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">261</int>
- <reference key="object" ref="569473100"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="908165435"/>
- </object>
- <reference key="parent" ref="768906858"/>
+ <string key="id">230</string>
+ <reference key="object" ref="831823711"/>
+ <reference key="parent" ref="164247414"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">223</int>
- <reference key="object" ref="986015194"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="304208899"/>
- </object>
- <reference key="parent" ref="768906858"/>
+ <string key="id">229</string>
+ <reference key="object" ref="105051198"/>
+ <reference key="parent" ref="164247414"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">213</int>
- <reference key="object" ref="196868285"/>
- <reference key="parent" ref="768906858"/>
+ <string key="id">209</string>
+ <reference key="object" ref="175162618"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="955137720"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">224</int>
- <reference key="object" ref="304208899"/>
- <reference key="parent" ref="986015194"/>
+ <string key="id">210</string>
+ <reference key="object" ref="955137720"/>
+ <reference key="parent" ref="175162618"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">262</int>
- <reference key="object" ref="908165435"/>
- <reference key="parent" ref="569473100"/>
+ <string key="id">38</string>
+ <reference key="object" ref="142474899"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="974297610"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">251</int>
- <reference key="object" ref="92351498"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="66510867"/>
- <reference ref="598619000"/>
- <reference ref="141370142"/>
- <reference ref="798240356"/>
- <reference ref="81685190"/>
- <reference ref="245200984"/>
- <reference ref="396925210"/>
- <reference ref="628196212"/>
- </object>
- <reference key="parent" ref="49161063"/>
+ <string key="id">165</string>
+ <reference key="object" ref="974297610"/>
+ <reference key="parent" ref="142474899"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">38</int>
- <reference key="object" ref="628196212"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="921881842"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">280</string>
+ <reference key="object" ref="543553084"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="185807734"/>
+ </array>
+ <reference key="parent" ref="717764450"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">165</int>
- <reference key="object" ref="921881842"/>
- <reference key="parent" ref="628196212"/>
+ <string key="id">281</string>
+ <reference key="object" ref="185807734"/>
+ <reference key="parent" ref="543553084"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">209</int>
- <reference key="object" ref="396925210"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="639767004"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">335</string>
+ <reference key="object" ref="432685731"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="222326321"/>
+ <reference ref="152429490"/>
+ <reference ref="147746186"/>
+ <reference ref="384131700"/>
+ <reference ref="1029861158"/>
+ <reference ref="351711265"/>
+ </array>
+ <reference key="parent" ref="929670820"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">210</int>
- <reference key="object" ref="639767004"/>
- <reference key="parent" ref="396925210"/>
+ <string key="id">341</string>
+ <reference key="object" ref="222326321"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="1050734698"/>
+ </array>
+ <reference key="parent" ref="432685731"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">280</int>
- <reference key="object" ref="245200984"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="1032360651"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">346</string>
+ <reference key="object" ref="1050734698"/>
+ <reference key="parent" ref="222326321"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">281</int>
- <reference key="object" ref="1032360651"/>
- <reference key="parent" ref="245200984"/>
+ <string key="id">361</string>
+ <reference key="object" ref="152429490"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="444106871"/>
+ </array>
+ <reference key="parent" ref="432685731"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">275</int>
- <reference key="object" ref="81685190"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="847033897"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">362</string>
+ <reference key="object" ref="444106871"/>
+ <reference key="parent" ref="152429490"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">276</int>
- <reference key="object" ref="847033897"/>
- <reference key="parent" ref="81685190"/>
+ <string key="id">375</string>
+ <reference key="object" ref="147746186"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="778199390"/>
+ </array>
+ <reference key="parent" ref="432685731"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">215</int>
- <reference key="object" ref="798240356"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="975305481"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">376</string>
+ <reference key="object" ref="778199390"/>
+ <reference key="parent" ref="147746186"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">216</int>
- <reference key="object" ref="975305481"/>
- <reference key="parent" ref="798240356"/>
+ <string key="id">378</string>
+ <reference key="object" ref="384131700"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="328702140"/>
+ </array>
+ <reference key="parent" ref="432685731"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">271</int>
- <reference key="object" ref="141370142"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="606007744"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">379</string>
+ <reference key="object" ref="328702140"/>
+ <reference key="parent" ref="384131700"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">272</int>
- <reference key="object" ref="606007744"/>
- <reference key="parent" ref="141370142"/>
+ <string key="id">365</string>
+ <reference key="object" ref="1029861158"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="666432193"/>
+ </array>
+ <reference key="parent" ref="432685731"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">226</int>
- <reference key="object" ref="598619000"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="953108737"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">366</string>
+ <reference key="object" ref="666432193"/>
+ <reference key="parent" ref="1029861158"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">227</int>
- <reference key="object" ref="953108737"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="501672847"/>
- </object>
- <reference key="parent" ref="598619000"/>
+ <string key="id">372</string>
+ <reference key="object" ref="351711265"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="88587267"/>
+ </array>
+ <reference key="parent" ref="432685731"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">228</int>
- <reference key="object" ref="501672847"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="272743761"/>
- <reference ref="607756368"/>
- <reference ref="372655630"/>
- </object>
- <reference key="parent" ref="953108737"/>
+ <string key="id">373</string>
+ <reference key="object" ref="88587267"/>
+ <reference key="parent" ref="351711265"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">231</int>
- <reference key="object" ref="372655630"/>
- <reference key="parent" ref="501672847"/>
+ <string key="id">252</string>
+ <reference key="object" ref="758551503"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="721434635"/>
+ <reference ref="982988884"/>
+ <reference ref="774269445"/>
+ </array>
+ <reference key="parent" ref="929670820"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">230</int>
- <reference key="object" ref="607756368"/>
- <reference key="parent" ref="501672847"/>
+ <string key="id">213</string>
+ <reference key="object" ref="721434635"/>
+ <reference key="parent" ref="758551503"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">229</int>
- <reference key="object" ref="272743761"/>
- <reference key="parent" ref="501672847"/>
+ <string key="id">261</string>
+ <reference key="object" ref="982988884"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="481130630"/>
+ </array>
+ <reference key="parent" ref="758551503"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">234</int>
- <reference key="object" ref="66510867"/>
- <object class="NSMutableArray" key="children">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference ref="567286013"/>
- </object>
- <reference key="parent" ref="92351498"/>
+ <string key="id">262</string>
+ <reference key="object" ref="481130630"/>
+ <reference key="parent" ref="982988884"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">235</int>
- <reference key="object" ref="567286013"/>
- <reference key="parent" ref="66510867"/>
+ <string key="id">223</string>
+ <reference key="object" ref="774269445"/>
+ <array class="NSMutableArray" key="children">
+ <reference ref="547191345"/>
+ </array>
+ <reference key="parent" ref="758551503"/>
</object>
<object class="IBObjectRecord">
- <int key="objectID">207</int>
- <reference key="object" ref="48693112"/>
- <reference key="parent" ref="49161063"/>
+ <string key="id">224</string>
+ <reference key="object" ref="547191345"/>
+ <reference key="parent" ref="774269445"/>
</object>
- </object>
+ </array>
</object>
- <object class="NSMutableDictionary" key="flattenedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>-1.IBPluginDependency</string>
- <string>-2.IBPluginDependency</string>
- <string>-3.IBPluginDependency</string>
- <string>165.IBPluginDependency</string>
- <string>207.IBPluginDependency</string>
- <string>209.IBPluginDependency</string>
- <string>210.IBPluginDependency</string>
- <string>213.IBPluginDependency</string>
- <string>215.IBAttributePlaceholdersKey</string>
- <string>215.IBPluginDependency</string>
- <string>215.IBViewIntegration.shadowBlurRadius</string>
- <string>215.IBViewIntegration.shadowColor</string>
- <string>215.IBViewIntegration.shadowOffsetHeight</string>
- <string>215.IBViewIntegration.shadowOffsetWidth</string>
- <string>216.IBPluginDependency</string>
- <string>223.IBPluginDependency</string>
- <string>224.IBPluginDependency</string>
- <string>226.IBAttributePlaceholdersKey</string>
- <string>226.IBPluginDependency</string>
- <string>227.IBPluginDependency</string>
- <string>228.IBPluginDependency</string>
- <string>229.IBPluginDependency</string>
- <string>230.IBPluginDependency</string>
- <string>231.IBPluginDependency</string>
- <string>234.IBPluginDependency</string>
- <string>235.IBPluginDependency</string>
- <string>251.IBPluginDependency</string>
- <string>251.IBViewIntegration.shadowBlurRadius</string>
- <string>251.IBViewIntegration.shadowColor</string>
- <string>251.IBViewIntegration.shadowOffsetHeight</string>
- <string>251.IBViewIntegration.shadowOffsetWidth</string>
- <string>252.IBPluginDependency</string>
- <string>252.IBViewIntegration.shadowBlurRadius</string>
- <string>252.IBViewIntegration.shadowColor</string>
- <string>252.IBViewIntegration.shadowOffsetHeight</string>
- <string>252.IBViewIntegration.shadowOffsetWidth</string>
- <string>261.IBAttributePlaceholdersKey</string>
- <string>261.IBPluginDependency</string>
- <string>262.IBPluginDependency</string>
- <string>271.IBAttributePlaceholdersKey</string>
- <string>271.IBPluginDependency</string>
- <string>271.IBViewIntegration.shadowBlurRadius</string>
- <string>271.IBViewIntegration.shadowColor</string>
- <string>271.IBViewIntegration.shadowOffsetHeight</string>
- <string>271.IBViewIntegration.shadowOffsetWidth</string>
- <string>272.IBPluginDependency</string>
- <string>275.IBAttributePlaceholdersKey</string>
- <string>275.IBPluginDependency</string>
- <string>275.IBViewIntegration.shadowBlurRadius</string>
- <string>275.IBViewIntegration.shadowColor</string>
- <string>275.IBViewIntegration.shadowOffsetHeight</string>
- <string>275.IBViewIntegration.shadowOffsetWidth</string>
- <string>276.IBPluginDependency</string>
- <string>280.IBPluginDependency</string>
- <string>281.IBPluginDependency</string>
- <string>335.IBPluginDependency</string>
- <string>335.IBViewIntegration.shadowBlurRadius</string>
- <string>335.IBViewIntegration.shadowColor</string>
- <string>335.IBViewIntegration.shadowOffsetHeight</string>
- <string>335.IBViewIntegration.shadowOffsetWidth</string>
- <string>341.IBPluginDependency</string>
- <string>346.IBPluginDependency</string>
- <string>361.IBAttributePlaceholdersKey</string>
- <string>361.IBPluginDependency</string>
- <string>362.IBPluginDependency</string>
- <string>365.IBAttributePlaceholdersKey</string>
- <string>365.IBPluginDependency</string>
- <string>365.IBViewIntegration.shadowBlurRadius</string>
- <string>365.IBViewIntegration.shadowColor</string>
- <string>365.IBViewIntegration.shadowOffsetHeight</string>
- <string>365.IBViewIntegration.shadowOffsetWidth</string>
- <string>366.IBPluginDependency</string>
- <string>372.IBPluginDependency</string>
- <string>373.IBPluginDependency</string>
- <string>375.IBAttributePlaceholdersKey</string>
- <string>375.IBPluginDependency</string>
- <string>376.IBPluginDependency</string>
- <string>378.IBAttributePlaceholdersKey</string>
- <string>378.IBPluginDependency</string>
- <string>379.IBPluginDependency</string>
- <string>38.IBPluginDependency</string>
- <string>5.IBPluginDependency</string>
- <string>5.IBWindowTemplateEditedContentRect</string>
- <string>6.IBPluginDependency</string>
- <string>6.IBViewIntegration.shadowBlurRadius</string>
- <string>6.IBViewIntegration.shadowColor</string>
- <string>6.IBViewIntegration.shadowOffsetHeight</string>
- <string>6.IBViewIntegration.shadowOffsetWidth</string>
- </object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.QTKitIBPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="798240356"/>
- <string key="toolTip">Encode And Play Back A Live Preview At Your Current Settings</string>
- </object>
+ <dictionary class="NSMutableDictionary" key="flattenedProperties">
+ <string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="-1.showNotes"/>
+ <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="-2.showNotes"/>
+ <string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="-3.showNotes"/>
+ <string key="165.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="165.showNotes"/>
+ <string key="207.IBPluginDependency">com.apple.QTKitIBPlugin</string>
+ <reference key="207.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="207.showNotes"/>
+ <string key="209.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="209.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="209.showNotes"/>
+ <string key="210.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="210.showNotes"/>
+ <string key="213.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="213.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="213.showNotes"/>
+ <object class="NSMutableDictionary" key="215.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="314619144"/>
+ <string key="toolTip">Encode And Play Back A Live Preview At Your Current Settings</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="0"/>
- <object class="NSColor" id="864448722">
- <int key="NSColorSpace">3</int>
- <bytes key="NSWhite">MAA</bytes>
- </object>
- <integer value="0"/>
- <integer value="0"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="598619000"/>
- <string key="toolTip">Select The Length Of Live Preview to Encode</string>
- </object>
+ </object>
+ <string key="215.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="215.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="215.showNotes"/>
+ <string key="216.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="216.showNotes"/>
+ <string key="223.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="223.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="223.showNotes"/>
+ <string key="224.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="224.showNotes"/>
+ <object class="NSMutableDictionary" key="226.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="967936319"/>
+ <string key="toolTip">Select The Length Of Live Preview to Encode</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="0"/>
- <reference ref="864448722"/>
- <integer value="0"/>
- <integer value="0"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="0"/>
- <reference ref="864448722"/>
- <integer value="0"/>
- <integer value="0"/>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="569473100"/>
- <string key="toolTip">Cancel Live Preview Encode</string>
- </object>
+ </object>
+ <string key="226.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="226.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="226.showNotes"/>
+ <string key="227.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="227.showNotes"/>
+ <string key="228.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="228.showNotes"/>
+ <string key="229.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="229.showNotes"/>
+ <string key="230.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="230.showNotes"/>
+ <string key="231.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="231.showNotes"/>
+ <string key="234.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="234.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="234.showNotes"/>
+ <string key="235.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="235.showNotes"/>
+ <string key="251.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="251.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="251.showNotes"/>
+ <string key="252.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="252.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="252.showNotes"/>
+ <object class="NSMutableDictionary" key="261.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="982988884"/>
+ <string key="toolTip">Cancel Live Preview Encode</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="141370142"/>
- <string key="toolTip">Show Picture Settings Inspector</string>
- </object>
+ </object>
+ <string key="261.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="261.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="261.showNotes"/>
+ <string key="262.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="262.showNotes"/>
+ <object class="NSMutableDictionary" key="271.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="394714670"/>
+ <string key="toolTip">Show Picture Settings Inspector</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="0"/>
- <reference ref="864448722"/>
- <integer value="0"/>
- <integer value="0"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="81685190"/>
- <string key="toolTip">Scale Preview To Screen</string>
- </object>
+ </object>
+ <string key="271.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="271.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="271.showNotes"/>
+ <string key="272.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="272.showNotes"/>
+ <object class="NSMutableDictionary" key="275.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="327371770"/>
+ <string key="toolTip">Scale Preview To Screen</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="0"/>
- <reference ref="864448722"/>
- <integer value="0"/>
- <integer value="0"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="0"/>
- <reference ref="864448722"/>
- <integer value="0"/>
- <integer value="0"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="102183813"/>
- <string key="toolTip">Toggle Play/Pause</string>
- </object>
+ </object>
+ <string key="275.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="275.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="275.showNotes"/>
+ <string key="276.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="276.showNotes"/>
+ <string key="280.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="280.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="280.showNotes"/>
+ <string key="281.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="281.showNotes"/>
+ <string key="335.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="335.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="335.showNotes"/>
+ <string key="341.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="341.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="341.showNotes"/>
+ <string key="346.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="346.showNotes"/>
+ <object class="NSMutableDictionary" key="361.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="152429490"/>
+ <string key="toolTip">Toggle Play/Pause</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="630042886"/>
- <string key="toolTip">Show Still Previews</string>
- </object>
+ </object>
+ <string key="361.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="361.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="361.showNotes"/>
+ <string key="362.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="362.showNotes"/>
+ <object class="NSMutableDictionary" key="365.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="1029861158"/>
+ <string key="toolTip">Show Still Previews</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <integer value="0"/>
- <reference ref="864448722"/>
- <integer value="0"/>
- <integer value="0"/>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="897614796"/>
- <string key="toolTip">Go To Beginning</string>
- </object>
+ </object>
+ <string key="365.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="365.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="365.showNotes"/>
+ <string key="366.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="366.showNotes"/>
+ <string key="372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="372.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="372.showNotes"/>
+ <string key="373.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="373.showNotes"/>
+ <object class="NSMutableDictionary" key="375.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="147746186"/>
+ <string key="toolTip">Go To Beginning</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <object class="NSMutableDictionary">
- <string key="NS.key.0">ToolTip</string>
- <object class="IBToolTipAttribute" key="NS.object.0">
- <string key="name">ToolTip</string>
- <reference key="object" ref="894608246"/>
- <string key="toolTip">Go To End</string>
- </object>
+ </object>
+ <string key="375.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="375.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="375.showNotes"/>
+ <string key="376.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="376.showNotes"/>
+ <object class="NSMutableDictionary" key="378.IBAttributePlaceholdersKey">
+ <string key="NS.key.0">ToolTip</string>
+ <object class="IBToolTipAttribute" key="NS.object.0">
+ <string key="name">ToolTip</string>
+ <reference key="object" ref="384131700"/>
+ <string key="toolTip">Go To End</string>
</object>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <string>{{262, 474}, {490, 360}}</string>
- <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
- <real value="0.0"/>
- <reference ref="864448722"/>
- <real value="0.0"/>
- <real value="0.0"/>
</object>
- </object>
- <object class="NSMutableDictionary" key="unlocalizedProperties">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference key="dict.sortedKeys" ref="0"/>
- <reference key="dict.values" ref="0"/>
- </object>
+ <string key="378.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="378.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="378.showNotes"/>
+ <string key="379.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="379.showNotes"/>
+ <string key="38.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="38.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="38.showNotes"/>
+ <boolean value="NO" key="5.IBNSWindowAutoPositionCentersHorizontal"/>
+ <boolean value="NO" key="5.IBNSWindowAutoPositionCentersVertical"/>
+ <string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <boolean value="NO" key="5.showNotes"/>
+ <string key="6.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <reference key="6.IBUserGuides" ref="0"/>
+ <boolean value="NO" key="6.showNotes"/>
+ </dictionary>
+ <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
<nil key="activeLocalization"/>
- <object class="NSMutableDictionary" key="localizations">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <reference key="dict.sortedKeys" ref="0"/>
- <reference key="dict.values" ref="0"/>
- </object>
+ <dictionary class="NSMutableDictionary" key="localizations"/>
<nil key="sourceID"/>
- <int key="maxID">396</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
- <object class="NSMutableArray" key="referencedPartialClassDescriptions">
- <bool key="EncodedWithXMLCoder">YES</bool>
+ <array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
- <string key="className">PreviewController</string>
+ <string key="className">HBPreviewController</string>
<string key="superclassName">NSWindowController</string>
- <object class="NSMutableDictionary" key="actions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>cancelCreateMoviePreview:</string>
- <string>createMoviePreview:</string>
- <string>moviePlaybackGoBackwardOneFrame:</string>
- <string>moviePlaybackGoForwardOneFrame:</string>
- <string>moviePlaybackGoToBeginning:</string>
- <string>moviePlaybackGoToEnd:</string>
- <string>pictureSliderChanged:</string>
- <string>previewDurationPopUpChanged:</string>
- <string>previewScrubberChanged:</string>
- <string>settingsChanged:</string>
- <string>showMoviePreview:</string>
- <string>showPictureSettings:</string>
- <string>showPicturesPreview:</string>
- <string>toggleMoviePreviewPlayPause:</string>
- <string>toggleScaleToScreen:</string>
+ <dictionary class="NSMutableDictionary" key="actions">
+ <string key="cancelCreateMoviePreview:">id</string>
+ <string key="createMoviePreview:">id</string>
+ <string key="moviePlaybackGoToBeginning:">id</string>
+ <string key="moviePlaybackGoToEnd:">id</string>
+ <string key="pictureSliderChanged:">id</string>
+ <string key="previewDurationPopUpChanged:">id</string>
+ <string key="previewScrubberChanged:">id</string>
+ <string key="showPictureSettings:">id</string>
+ <string key="showPicturesPreview:">id</string>
+ <string key="showWindow:">id</string>
+ <string key="toggleMoviePreviewPlayPause:">id</string>
+ <string key="toggleScaleToScreen:">id</string>
+ </dictionary>
+ <dictionary class="NSMutableDictionary" key="actionInfosByName">
+ <object class="IBActionInfo" key="cancelCreateMoviePreview:">
+ <string key="name">cancelCreateMoviePreview:</string>
+ <string key="candidateClassName">id</string>
</object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>NSString</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
- <string>id</string>
+ <object class="IBActionInfo" key="createMoviePreview:">
+ <string key="name">createMoviePreview:</string>
+ <string key="candidateClassName">id</string>
</object>
- </object>
- <object class="NSMutableDictionary" key="actionInfosByName">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>cancelCreateMoviePreview:</string>
- <string>createMoviePreview:</string>
- <string>moviePlaybackGoBackwardOneFrame:</string>
- <string>moviePlaybackGoForwardOneFrame:</string>
- <string>moviePlaybackGoToBeginning:</string>
- <string>moviePlaybackGoToEnd:</string>
- <string>pictureSliderChanged:</string>
- <string>previewDurationPopUpChanged:</string>
- <string>previewScrubberChanged:</string>
- <string>settingsChanged:</string>
- <string>showMoviePreview:</string>
- <string>showPictureSettings:</string>
- <string>showPicturesPreview:</string>
- <string>toggleMoviePreviewPlayPause:</string>
- <string>toggleScaleToScreen:</string>
+ <object class="IBActionInfo" key="moviePlaybackGoToBeginning:">
+ <string key="name">moviePlaybackGoToBeginning:</string>
+ <string key="candidateClassName">id</string>
</object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBActionInfo">
- <string key="name">cancelCreateMoviePreview:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">createMoviePreview:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">moviePlaybackGoBackwardOneFrame:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">moviePlaybackGoForwardOneFrame:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">moviePlaybackGoToBeginning:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">moviePlaybackGoToEnd:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">pictureSliderChanged:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">previewDurationPopUpChanged:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">previewScrubberChanged:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">settingsChanged:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">showMoviePreview:</string>
- <string key="candidateClassName">NSString</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">showPictureSettings:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">showPicturesPreview:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">toggleMoviePreviewPlayPause:</string>
- <string key="candidateClassName">id</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">toggleScaleToScreen:</string>
- <string key="candidateClassName">id</string>
- </object>
+ <object class="IBActionInfo" key="moviePlaybackGoToEnd:">
+ <string key="name">moviePlaybackGoToEnd:</string>
+ <string key="candidateClassName">id</string>
</object>
- </object>
- <object class="NSMutableDictionary" key="outlets">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>fCancelPreviewMovieButton</string>
- <string>fCreatePreviewMovieButton</string>
- <string>fEncodingControlBox</string>
- <string>fGoBackwardOneFrameButton</string>
- <string>fGoForwardOneFrameButton</string>
- <string>fGoToBeginningButton</string>
- <string>fGoToEndButton</string>
- <string>fGoToStillPreviewButton</string>
- <string>fInfoField</string>
- <string>fMovieCreationProgressIndicator</string>
- <string>fMovieInfoField</string>
- <string>fMoviePlaybackControlBox</string>
- <string>fMovieScrubberSlider</string>
- <string>fMovieView</string>
- <string>fPictureControlBox</string>
- <string>fPictureSettingsToggleButton</string>
- <string>fPictureSlider</string>
- <string>fPlayPauseButton</string>
- <string>fPreviewMovieLengthPopUp</string>
- <string>fPreviewMovieStatusField</string>
- <string>fScaleToScreenToggleButton</string>
- <string>fShowPreviewMovieButton</string>
- <string>fscaleInfoField</string>
+ <object class="IBActionInfo" key="pictureSliderChanged:">
+ <string key="name">pictureSliderChanged:</string>
+ <string key="candidateClassName">id</string>
</object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSButton</string>
- <string>NSButton</string>
- <string>NSBox</string>
- <string>NSButton</string>
- <string>NSButton</string>
- <string>NSButton</string>
- <string>NSButton</string>
- <string>NSButton</string>
- <string>NSTextField</string>
- <string>NSProgressIndicator</string>
- <string>NSTextField</string>
- <string>NSBox</string>
- <string>NSSlider</string>
- <string>QTMovieView</string>
- <string>NSBox</string>
- <string>NSButton</string>
- <string>NSSlider</string>
- <string>NSButton</string>
- <string>NSPopUpButton</string>
- <string>NSTextField</string>
- <string>NSButton</string>
- <string>NSButton</string>
- <string>NSTextField</string>
+ <object class="IBActionInfo" key="previewDurationPopUpChanged:">
+ <string key="name">previewDurationPopUpChanged:</string>
+ <string key="candidateClassName">id</string>
</object>
- </object>
- <object class="NSMutableDictionary" key="toOneOutletInfosByName">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>fCancelPreviewMovieButton</string>
- <string>fCreatePreviewMovieButton</string>
- <string>fEncodingControlBox</string>
- <string>fGoBackwardOneFrameButton</string>
- <string>fGoForwardOneFrameButton</string>
- <string>fGoToBeginningButton</string>
- <string>fGoToEndButton</string>
- <string>fGoToStillPreviewButton</string>
- <string>fInfoField</string>
- <string>fMovieCreationProgressIndicator</string>
- <string>fMovieInfoField</string>
- <string>fMoviePlaybackControlBox</string>
- <string>fMovieScrubberSlider</string>
- <string>fMovieView</string>
- <string>fPictureControlBox</string>
- <string>fPictureSettingsToggleButton</string>
- <string>fPictureSlider</string>
- <string>fPlayPauseButton</string>
- <string>fPreviewMovieLengthPopUp</string>
- <string>fPreviewMovieStatusField</string>
- <string>fScaleToScreenToggleButton</string>
- <string>fShowPreviewMovieButton</string>
- <string>fscaleInfoField</string>
+ <object class="IBActionInfo" key="previewScrubberChanged:">
+ <string key="name">previewScrubberChanged:</string>
+ <string key="candidateClassName">id</string>
</object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBToOneOutletInfo">
- <string key="name">fCancelPreviewMovieButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fCreatePreviewMovieButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fEncodingControlBox</string>
- <string key="candidateClassName">NSBox</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fGoBackwardOneFrameButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fGoForwardOneFrameButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fGoToBeginningButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fGoToEndButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fGoToStillPreviewButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fInfoField</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fMovieCreationProgressIndicator</string>
- <string key="candidateClassName">NSProgressIndicator</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fMovieInfoField</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fMoviePlaybackControlBox</string>
- <string key="candidateClassName">NSBox</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fMovieScrubberSlider</string>
- <string key="candidateClassName">NSSlider</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fMovieView</string>
- <string key="candidateClassName">QTMovieView</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fPictureControlBox</string>
- <string key="candidateClassName">NSBox</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fPictureSettingsToggleButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fPictureSlider</string>
- <string key="candidateClassName">NSSlider</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fPlayPauseButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fPreviewMovieLengthPopUp</string>
- <string key="candidateClassName">NSPopUpButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fPreviewMovieStatusField</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fScaleToScreenToggleButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fShowPreviewMovieButton</string>
- <string key="candidateClassName">NSButton</string>
- </object>
- <object class="IBToOneOutletInfo">
- <string key="name">fscaleInfoField</string>
- <string key="candidateClassName">NSTextField</string>
- </object>
+ <object class="IBActionInfo" key="showPictureSettings:">
+ <string key="name">showPictureSettings:</string>
+ <string key="candidateClassName">id</string>
</object>
- </object>
+ <object class="IBActionInfo" key="showPicturesPreview:">
+ <string key="name">showPicturesPreview:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo" key="showWindow:">
+ <string key="name">showWindow:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo" key="toggleMoviePreviewPlayPause:">
+ <string key="name">toggleMoviePreviewPlayPause:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ <object class="IBActionInfo" key="toggleScaleToScreen:">
+ <string key="name">toggleScaleToScreen:</string>
+ <string key="candidateClassName">id</string>
+ </object>
+ </dictionary>
+ <dictionary class="NSMutableDictionary" key="outlets">
+ <string key="fEncodingControlBox">NSBox</string>
+ <string key="fInfoField">NSTextField</string>
+ <string key="fMovieCreationProgressIndicator">NSProgressIndicator</string>
+ <string key="fMovieInfoField">NSTextField</string>
+ <string key="fMoviePlaybackControlBox">NSBox</string>
+ <string key="fMovieScrubberSlider">NSSlider</string>
+ <string key="fMovieView">QTMovieView</string>
+ <string key="fPictureControlBox">NSBox</string>
+ <string key="fPictureSlider">NSSlider</string>
+ <string key="fPlayPauseButton">NSButton</string>
+ <string key="fPreviewMovieLengthPopUp">NSPopUpButton</string>
+ <string key="fPreviewMovieStatusField">NSTextField</string>
+ <string key="fScaleToScreenToggleButton">NSButton</string>
+ <string key="fscaleInfoField">NSTextField</string>
+ </dictionary>
+ <dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
+ <object class="IBToOneOutletInfo" key="fEncodingControlBox">
+ <string key="name">fEncodingControlBox</string>
+ <string key="candidateClassName">NSBox</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fInfoField">
+ <string key="name">fInfoField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fMovieCreationProgressIndicator">
+ <string key="name">fMovieCreationProgressIndicator</string>
+ <string key="candidateClassName">NSProgressIndicator</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fMovieInfoField">
+ <string key="name">fMovieInfoField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fMoviePlaybackControlBox">
+ <string key="name">fMoviePlaybackControlBox</string>
+ <string key="candidateClassName">NSBox</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fMovieScrubberSlider">
+ <string key="name">fMovieScrubberSlider</string>
+ <string key="candidateClassName">NSSlider</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fMovieView">
+ <string key="name">fMovieView</string>
+ <string key="candidateClassName">QTMovieView</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fPictureControlBox">
+ <string key="name">fPictureControlBox</string>
+ <string key="candidateClassName">NSBox</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fPictureSlider">
+ <string key="name">fPictureSlider</string>
+ <string key="candidateClassName">NSSlider</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fPlayPauseButton">
+ <string key="name">fPlayPauseButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fPreviewMovieLengthPopUp">
+ <string key="name">fPreviewMovieLengthPopUp</string>
+ <string key="candidateClassName">NSPopUpButton</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fPreviewMovieStatusField">
+ <string key="name">fPreviewMovieStatusField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fScaleToScreenToggleButton">
+ <string key="name">fScaleToScreenToggleButton</string>
+ <string key="candidateClassName">NSButton</string>
+ </object>
+ <object class="IBToOneOutletInfo" key="fscaleInfoField">
+ <string key="name">fscaleInfoField</string>
+ <string key="candidateClassName">NSTextField</string>
+ </object>
+ </dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
- <string key="minorKey">./Classes/PreviewController.h</string>
+ <string key="minorKey">./Classes/HBPreviewController.h</string>
</object>
</object>
- </object>
+ </array>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+ <bool key="IBDocument.previouslyAttemptedUpgradeToXcode5">YES</bool>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
- <integer value="1050" key="NS.object.0"/>
+ <integer value="1060" key="NS.object.0"/>
+ </object>
+ <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
+ <real value="1060" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
- <integer value="3000" key="NS.object.0"/>
+ <integer value="4600" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
- <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>NSMenuCheckmark</string>
- <string>NSMenuMixedState</string>
- <string>next-p</string>
- <string>pause-p</string>
- <string>play-p</string>
- <string>prev-p</string>
- </object>
- <object class="NSArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>{11, 11}</string>
- <string>{10, 3}</string>
- <string>{48, 48}</string>
- <string>{48, 48}</string>
- <string>{48, 48}</string>
- <string>{48, 48}</string>
- </object>
- </object>
+ <dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+ <string key="NSMenuCheckmark">{11, 11}</string>
+ <string key="NSMenuMixedState">{10, 3}</string>
+ <string key="next-p">{48, 48}</string>
+ <string key="pause-p">{48, 48}</string>
+ <string key="play-p">{48, 48}</string>
+ <string key="prev-p">{48, 48}</string>
+ </dictionary>
</data>
</archive>
diff --git a/macosx/HBPreviewController.h b/macosx/HBPreviewController.h
index 99a8c3393..ed7fd19ab 100644
--- a/macosx/HBPreviewController.h
+++ b/macosx/HBPreviewController.h
@@ -1,130 +1,23 @@
/* $Id: HBPreviewController.h,v 1.6 2005/04/14 20:40:05 titer Exp $
- This file is part of the HandBrake source code.
- Homepage: <http://handbrake.fr/>.
- It may be used under the terms of the GNU General Public License. */
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
#import <Cocoa/Cocoa.h>
-
#include "hb.h"
-/* Needed for Quicktime movie previews */
-#import <QTKit/QTKit.h>
@class HBController;
-@interface PreviewController : NSWindowController <NSWindowDelegate>
-{
- hb_handle_t * fHandle;
- hb_title_t * fTitle;
-
- HBController * fHBController; // reference to HBController
-
- NSMutableDictionary * fPicturePreviews; // NSImages, one for each preview libhb creates, created lazily
- int fPicture;
-
- CALayer * fWhiteBackground;
- CALayer * fPictureLayer;
- IBOutlet NSBox * fPictureControlBox;
- IBOutlet NSBox * fEncodingControlBox;
- IBOutlet NSBox * fMoviePlaybackControlBox;
-
- IBOutlet NSSlider * fPictureSlider;
- IBOutlet NSTextField * fInfoField;
- IBOutlet NSTextField * fscaleInfoField;
-
- CGFloat backingScaleFactor;
-
- /* Hud Control Overlay */
- NSTimer * fHudTimer;
- int hudTimerSeconds;
-
- /* Full Screen Mode Toggle */
- BOOL scaleToScreen;
- IBOutlet NSButton * fScaleToScreenToggleButton;
- IBOutlet NSButton * fPictureSettingsToggleButton;
-
- /* Movie Previews */
- QTMovie * aMovie;
- IBOutlet QTMovieView * fMovieView;
- /* Playback Panel Controls */
- IBOutlet NSButton * fPlayPauseButton;
- IBOutlet NSButton * fGoToBeginningButton;
- IBOutlet NSButton * fGoToEndButton;
- IBOutlet NSButton * fGoForwardOneFrameButton;
- IBOutlet NSButton * fGoBackwardOneFrameButton;
- IBOutlet NSSlider * fMovieScrubberSlider;
- IBOutlet NSButton * fGoToStillPreviewButton;
- IBOutlet NSTextField * fMovieInfoField;
- NSTimer * fMovieTimer;
-
- IBOutlet NSButton * fCreatePreviewMovieButton;
- IBOutlet NSButton * fCancelPreviewMovieButton;
- IBOutlet NSButton * fShowPreviewMovieButton;
- NSString * fPreviewMoviePath;
- IBOutlet NSProgressIndicator * fMovieCreationProgressIndicator;
- hb_handle_t * fPreviewLibhb; // private libhb for creating previews
- NSInteger fEncodeState;
- NSTimer * fLibhbTimer; // timer for retrieving state from libhb
- IBOutlet NSTextField * fPreviewMovieStatusField;
- IBOutlet NSPopUpButton * fPreviewMovieLengthPopUp; // popup of choices for length of preview in seconds
-}
-
-@property (nonatomic, readwrite) BOOL deinterlacePreview;
-
-- (void) SetHandle: (hb_handle_t *) handle;
-- (void) SetTitle: (hb_title_t *) title;
-- (void) setHBController: (HBController *)controller;
-- (void) displayPreview;
-
-- (IBAction) settingsChanged: (id) sender;
-- (IBAction) pictureSliderChanged: (id) sender;
-- (IBAction) showPictureSettings:(id)sender;
-- (NSString*) pictureSizeInfoString;
-
-- (IBAction) toggleScaleToScreen:(id)sender;
+@interface HBPreviewController : NSWindowController <NSWindowDelegate>
-/* HUD overlay */
-- (void) enableHudControls;
-- (void) disableHudControls;
+@property (nonatomic) BOOL deinterlacePreview;
+@property (nonatomic, readonly) NSString *pictureSizeInfoString;
-- (void) startHudTimer;
-- (void) stopHudTimer;
+@property (nonatomic, assign) HBController *delegate;
+@property (nonatomic, assign) hb_handle_t *handle;
+@property (nonatomic, assign) hb_title_t *title;
-/* Movie Previews */
-- (void) startReceivingLibhbNotifications;
-- (void) stopReceivingLibhbNotifications;
+- (void) reload;
-- (void) installMovieCallbacks;
-- (void) removeMovieCallbacks;
-
-- (IBAction) cancelCreateMoviePreview: (id) sender;
-- (IBAction) createMoviePreview: (id) sender;
-- (void) libhbStateChanged: (hb_state_t ) state;
-- (IBAction) showMoviePreview: (NSString *) path;
-- (IBAction) showPicturesPreview: (id) sender;
-- (IBAction) toggleMoviePreviewPlayPause: (id) sender;
-- (IBAction) moviePlaybackGoToBeginning: (id) sender;
-- (IBAction) moviePlaybackGoToEnd: (id) sender;
-- (IBAction) moviePlaybackGoBackwardOneFrame: (id) sender;
-- (IBAction) moviePlaybackGoForwardOneFrame: (id) sender;
-
-- (void) initPreviewScrubberForMovie;
-- (void) adjustPreviewScrubberForCurrentMovieTime;
-- (IBAction) previewScrubberChanged: (id) sender;
-- (BOOL) isPlaying;
-
-- (void) startMovieTimer;
-- (void) stopMovieTimer;
-
-- (NSString*) SMTPETimecode: (QTTime)time;
-- (QTTime)SliderToQTTime:(double)time;
-
-- (IBAction) previewDurationPopUpChanged: (id) sender;
-
-- (NSImage *) makeImageForPicture: (NSInteger)pictureIndex
- libhb:(hb_handle_t*)handle
- title:(hb_title_t*)title;
-- (NSImage *) imageForPicture: (NSInteger) pictureIndex;
-- (void) purgeImageCache;
@end
-
diff --git a/macosx/HBPreviewController.m b/macosx/HBPreviewController.m
index 49e01fd87..8cca74037 100644
--- a/macosx/HBPreviewController.m
+++ b/macosx/HBPreviewController.m
@@ -1,38 +1,135 @@
/* $Id: HBPreviewController.mm,v 1.11 2005/08/01 15:10:44 titer Exp $
- This file is part of the HandBrake source code.
- Homepage: <http://handbrake.fr/>.
- It may be used under the terms of the GNU General Public License. */
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
#import "HBPreviewController.h"
+#import "HBPreviewGenerator.h"
#import "Controller.h"
+#import <QTKit/QTKit.h>
-#define BORDER_SIZE 2.0
+@implementation QTMovieView (HBQTMovieViewExtensions)
-@implementation QTMovieView (HBExtensions)
-- (void) mouseMoved:(NSEvent *)theEvent
+- (void) mouseMoved: (NSEvent *) theEvent
{
[super mouseMoved:theEvent];
}
+
+@end
+
+@implementation QTMovie (HBQTMovieExtensions)
+
+- (BOOL) isPlaying
+{
+ if ([self rate])
+ return YES;
+ else
+ return NO;
+}
+
+- (NSString *) timecode
+{
+ QTTime time = [self currentTime];
+ double timeInSeconds = (double)time.timeValue / time.timeScale;
+ UInt16 seconds = fmod(timeInSeconds, 60.0);
+ UInt16 minutes = fmod(timeInSeconds / 60.0, 60.0);
+ UInt16 hours = timeInSeconds / (60.0 * 60.0);
+ UInt16 milliseconds = (timeInSeconds - (int) timeInSeconds) * 1000;
+ return [NSString stringWithFormat:@"%02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds];
+}
+
+- (void) setCurrentTimeDouble: (double) value
+{
+ long timeScale = [[self attributeForKey:QTMovieTimeScaleAttribute] longValue];
+ [self setCurrentTime:QTMakeTime(value * timeScale, timeScale)];
+}
+
@end
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1070
@interface NSWindow(HBExtensions)
-
@property (readonly) CGFloat backingScaleFactor;
-
@end
#endif
-@interface PreviewController (Private)
+#define BORDER_SIZE 2.0
+#define MIN_WIDTH 480.0
+#define MIN_HEIGHT 360.0
+
+#define ANIMATION_DUR 0.2
+
+typedef enum ViewMode : NSUInteger {
+ ViewModePicturePreview,
+ ViewModeEncoding,
+ ViewModeMoviePreview
+} ViewMode;
+
+@interface HBPreviewController () <HBPreviewGeneratorDelegate>
+{
+ /* HUD boxes */
+ IBOutlet NSBox * fPictureControlBox;
+ IBOutlet NSBox * fEncodingControlBox;
+ IBOutlet NSBox * fMoviePlaybackControlBox;
+
+ IBOutlet NSSlider * fPictureSlider;
+ IBOutlet NSTextField * fInfoField;
+ IBOutlet NSTextField * fscaleInfoField;
+
+ /* Full Screen Mode Toggle */
+ IBOutlet NSButton * fScaleToScreenToggleButton;
+
+ /* Movie Previews */
+ IBOutlet QTMovieView * fMovieView;
+ /* Playback Panel Controls */
+ IBOutlet NSButton * fPlayPauseButton;
+ IBOutlet NSSlider * fMovieScrubberSlider;
+ IBOutlet NSTextField * fMovieInfoField;
+
+ IBOutlet NSProgressIndicator * fMovieCreationProgressIndicator;
+ IBOutlet NSTextField * fPreviewMovieStatusField;
+
+ /* Popup of choices for length of preview in seconds */
+ IBOutlet NSPopUpButton * fPreviewMovieLengthPopUp;
+}
+
+@property (nonatomic) CALayer *backLayer;
+@property (nonatomic) CALayer *pictureLayer;
+
+@property (nonatomic) CGFloat backingScaleFactor;
+
+@property (nonatomic) ViewMode currentViewMode;
+@property (nonatomic) BOOL scaleToScreen;
+
+@property (nonatomic, retain) NSTimer *hudTimer;
+
+@property (nonatomic, retain) HBPreviewGenerator *generator;
+@property (nonatomic) NSUInteger pictureIndex;
+
+@property (nonatomic, retain) QTMovie *movie;
+@property (nonatomic, retain) NSTimer *movieTimer;
+
+/* Pictures HUD actions */
+- (IBAction) previewDurationPopUpChanged: (id) sender;
+- (IBAction) pictureSliderChanged: (id) sender;
+- (IBAction) showPictureSettings:(id)sender;
+- (IBAction) toggleScaleToScreen:(id)sender;
+
+- (IBAction) cancelCreateMoviePreview: (id) sender;
+- (IBAction) createMoviePreview: (id) sender;
+
+/* Movie HUD actions */
+- (IBAction) showPicturesPreview: (id) sender;
+- (IBAction) toggleMoviePreviewPlayPause: (id) sender;
+- (IBAction) moviePlaybackGoToBeginning: (id) sender;
+- (IBAction) moviePlaybackGoToEnd: (id) sender;
+- (IBAction) previewScrubberChanged: (id) sender;
-- (NSSize)optimalViewSizeForImageSize: (NSSize)imageSize;
-- (void)resizeWindowForViewSize: (NSSize)viewSize;
@end
-@implementation PreviewController
+@implementation HBPreviewController
-- (id)init
+- (id) init
{
if (self = [super initWithWindowNibName:@"PicturePreview"])
{
@@ -45,21 +142,12 @@
// If/when we switch a lot of this stuff to bindings, this can probably
// go away.
[self window];
-
- fPicturePreviews = [[NSMutableDictionary alloc] init];
- /* Init libhb with check for updates libhb style set to "0" so its ignored and lets sparkle take care of it */
- int loggingLevel = [[[NSUserDefaults standardUserDefaults] objectForKey:@"LoggingLevel"] intValue];
- fPreviewLibhb = hb_init(loggingLevel, 0);
- }
- return self;
-}
-- (void)setHBController: (HBController *)controller
-{
- fHBController = controller;
+ }
+ return self;
}
-- (void)awakeFromNib
+- (void) awakeFromNib
{
[[self window] setDelegate:self];
@@ -68,274 +156,563 @@
[self setWindowFrameAutosaveName:@"Preview"];
[[self window] setExcludedFromWindowsMenu:YES];
-
+
/* lets set the preview window to accept mouse moved events */
[[self window] setAcceptsMouseMovedEvents:YES];
- [self startReceivingLibhbNotifications];
-
- hudTimerSeconds = 0;
+
/* we set the progress indicator to not use threaded animation
* as it causes a conflict with the qtmovieview's controllerbar
- */
+ */
[fMovieCreationProgressIndicator setUsesThreadedAnimation:NO];
-
- /* we set the preview length popup in seconds */
- [fPreviewMovieLengthPopUp removeAllItems];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"15"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"30"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"45"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"60"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"90"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"105"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"120"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"135"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"150"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"165"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"180"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"195"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"210"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"225"];
- [fPreviewMovieLengthPopUp addItemWithTitle: @"240"];
[fMovieView setHidden:YES];
[fMovieView setDelegate:self];
+ [fMovieView setControllerVisible:NO];
+
+ /* we set the preview length popup in seconds */
+ [fPreviewMovieLengthPopUp removeAllItems];
+ [fPreviewMovieLengthPopUp addItemsWithTitles:@[@"15", @"30", @"45", @"60", @"90",
+ @"120", @"150", @"180", @"210", @"240"]];
+
+ if ([[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewLength"])
+ [fPreviewMovieLengthPopUp selectItemWithTitle:[[NSUserDefaults standardUserDefaults]
+ objectForKey:@"PreviewLength"]];
+ if (![fPreviewMovieLengthPopUp selectedItem])
+ /* currently hard set default to 15 seconds */
+ [fPreviewMovieLengthPopUp selectItemAtIndex: 0];
/* Setup our layers for core animation */
[[[self window] contentView] setWantsLayer:YES];
[fPictureControlBox setWantsLayer:YES];
[fEncodingControlBox setWantsLayer:YES];
[fMoviePlaybackControlBox setWantsLayer:YES];
-
- fWhiteBackground = [CALayer layer];
- [fWhiteBackground setBounds:CGRectMake(0.0, 0.0, 480.0, 360.0)];
- [fWhiteBackground setPosition:CGPointMake([[[self window] contentView] frame].size.width /2,
- [[[self window] contentView] frame].size.height /2)];
-
- [fWhiteBackground setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
+
+ self.backLayer = [CALayer layer];
+ [self.backLayer setBounds:CGRectMake(0.0, 0.0, MIN_WIDTH, MIN_HEIGHT)];
+ [self.backLayer setPosition:CGPointMake([[[self window] contentView] frame].size.width /2,
+ [[[self window] contentView] frame].size.height /2)];
+
+ [self.backLayer setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
CGColorRef white = CGColorCreateGenericRGB(1.0, 1.0, 1.0, 1.0);
- [fWhiteBackground setBackgroundColor: white];
+ [self.backLayer setBackgroundColor: white];
CFRelease(white);
- [fWhiteBackground setShadowOpacity:0.5f];
- [fWhiteBackground setShadowOffset:CGSizeMake(0, 0)];
+ [self.backLayer setShadowOpacity:0.5f];
+ [self.backLayer setShadowOffset:CGSizeMake(0, 0)];
- fPictureLayer = [CALayer layer];
- [fPictureLayer setBounds:CGRectMake(0.0, 0.0, 476.0, 356.0)];
- [fPictureLayer setPosition:CGPointMake([[[self window] contentView] frame].size.width /2,
- [[[self window] contentView] frame].size.height /2)];
-
- [fPictureLayer setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
+ self.pictureLayer = [CALayer layer];
+ [self.pictureLayer setBounds:CGRectMake(0.0, 0.0, MIN_WIDTH - (BORDER_SIZE * 2), MIN_HEIGHT - (BORDER_SIZE * 2))];
+ [self.pictureLayer setPosition:CGPointMake([[[self window] contentView] frame].size.width /2,
+ [[[self window] contentView] frame].size.height /2)];
- NSMutableDictionary *actions = [NSMutableDictionary
- dictionaryWithDictionary:[fPictureLayer actions]];
+ [self.pictureLayer setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
// Disable fade on contents change
+ NSMutableDictionary *actions = [NSMutableDictionary
+ dictionaryWithDictionary:[self.pictureLayer actions]];
+
[actions setObject:[NSNull null] forKey:@"contents"];
- [fPictureLayer setActions:actions];
+ [self.pictureLayer setActions:actions];
- [[[[self window] contentView] layer] insertSublayer:fWhiteBackground below: [fMovieView layer]];
- [[[[self window] contentView] layer] insertSublayer:fPictureLayer below: [fMovieView layer]];
+ [[[[self window] contentView] layer] insertSublayer:self.backLayer below: [fMovieView layer]];
+ [[[[self window] contentView] layer] insertSublayer:self.pictureLayer below: [fMovieView layer]];
/* relocate our hud origins */
NSPoint hudControlBoxOrigin = [fMoviePlaybackControlBox frame].origin;
[fPictureControlBox setFrameOrigin:hudControlBoxOrigin];
[fEncodingControlBox setFrameOrigin:hudControlBoxOrigin];
[fMoviePlaybackControlBox setFrameOrigin:hudControlBoxOrigin];
-
+
+ /* set the current scale factor */
if( [[self window] respondsToSelector:@selector( backingScaleFactor )] )
- backingScaleFactor = [[self window] backingScaleFactor];
+ self.backingScaleFactor = [[self window] backingScaleFactor];
else
- backingScaleFactor = 1.0;
-
- [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(titleChanged:) name: HBTitleChangedNotification object:nil];
+ self.backingScaleFactor = 1.0;
}
-- (void) titleChanged: (NSNotification *) aNotification
+- (void) setTitle: (hb_title_t *) title
{
- /* Notification from HBController, only used to stop
- * an encoding while the HBController is scanning a new title
- */
- [self cancelCreateMoviePreview:self];
+ _title = title;
+
+ [self.generator cancel];
+ self.generator = nil;
+
+ if (_title)
+ {
+ /* alloc and init a generator for the current title */
+ self.generator = [[[HBPreviewGenerator alloc] initWithHandle:self.handle andTitle:self.title] autorelease];
+
+ /* adjust the preview slider length */
+ [fPictureSlider setMaxValue: self.generator.imagesCount - 1.0];
+ [fPictureSlider setNumberOfTickMarks: self.generator.imagesCount];
+
+ [self displayPreview];
+ }
}
-- (void)windowWillClose:(NSNotification *)aNotification
+- (void) reload
{
- /* Upon closing the preview window, we make sure we clean up any
- * preview movie that might be playing or encoding. However, first
- * make sure we have a preview picture before calling pictureSliderChanged
- * to go back to still previews .. just in case nothing is loaded up like in
- * a Launch, cancel new scan then quit type scenario.
- */
+ if (self.title)
+ {
+ // Purge the existing picture previews so they get recreated the next time
+ // they are needed.
+ [self.generator purgeImageCache];
+ [self switchViewToMode:ViewModePicturePreview];
+ [self displayPreview];
+ }
+}
- if (fEncodeState || [self isPlaying])
+- (void) showWindow: (id) sender
+{
+ if (self.currentViewMode == ViewModeMoviePreview)
+ {
+ [self startMovieTimer];
+ }
+
+ [super showWindow:sender];
+}
+
+- (void) windowWillClose: (NSNotification *) aNotification
+{
+ if (self.currentViewMode == ViewModeEncoding)
{
[self cancelCreateMoviePreview:self];
+ }
+ else if (self.currentViewMode == ViewModeMoviePreview)
+ {
[fMovieView pause:self];
[self stopMovieTimer];
}
- hudTimerSeconds = 0;
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"PreviewWindowIsOpen"];
}
-- (void) dealloc
+- (void) windowDidChangeBackingProperties: (NSNotification *) notification
{
- hb_stop(fPreviewLibhb);
- if (fPreviewMoviePath)
+ NSWindow *theWindow = (NSWindow *)[notification object];
+
+ CGFloat newBackingScaleFactor = [theWindow backingScaleFactor];
+ CGFloat oldBackingScaleFactor = [[[notification userInfo]
+ objectForKey:@"NSBackingPropertyOldScaleFactorKey"]
+ doubleValue];
+
+ if (newBackingScaleFactor != oldBackingScaleFactor)
{
- [[NSFileManager defaultManager] removeItemAtPath:fPreviewMoviePath error:nil];
- [fPreviewMoviePath release];
+ // Scale factor changed, update the preview window
+ // to the new situation
+ self.backingScaleFactor = newBackingScaleFactor;
+ if (self.title)
+ [self reload];
}
-
- [fLibhbTimer invalidate];
- [fLibhbTimer release];
-
- [fHudTimer invalidate];
- [fHudTimer release];
-
- [fMovieTimer invalidate];
- [fMovieTimer release];
-
- [fPicturePreviews release];
-
- hb_close(&fPreviewLibhb);
-
- [self removeMovieCallbacks];
-
- [super dealloc];
}
-- (void) SetHandle: (hb_handle_t *) handle
+/**
+ * Given the size of the preview image to be shown, returns the best possible
+ * size for the view.
+ */
+- (NSSize) optimalViewSizeForImageSize: (NSSize) imageSize
{
- fHandle = handle;
-
- /* adjust the preview slider length */
- /* We use our advance pref to determine how many previews we scanned */
- int hb_num_previews = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewsNumber"] intValue];
- [fPictureSlider setMaxValue: hb_num_previews - 1.0];
- [fPictureSlider setNumberOfTickMarks: hb_num_previews];
-
- if ([[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewLength"])
+ CGFloat minWidth = MIN_WIDTH;
+ CGFloat minHeight = MIN_HEIGHT;
+
+ NSSize screenSize = [[[self window] screen] visibleFrame].size;
+ CGFloat maxWidth = screenSize.width;
+ CGFloat maxHeight = screenSize.height;
+
+ NSSize resultSize = imageSize;
+ CGFloat resultPar = resultSize.width / resultSize.height;
+
+ //note, a mbp 15" at 1440 x 900 is a 1.6 ar
+ CGFloat screenAspect = screenSize.width / screenSize.height;
+
+ if ( resultSize.width > maxWidth || resultSize.height > maxHeight )
{
- [fPreviewMovieLengthPopUp selectItemWithTitle:[[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewLength"]];
+ // Source is larger than screen in one or more dimensions
+ if ( resultPar > screenAspect )
+ {
+ // Source aspect wider than screen aspect, snap to max width and vary height
+ resultSize.width = maxWidth;
+ resultSize.height = (maxWidth / resultPar);
+ }
+ else
+ {
+ // Source aspect narrower than screen aspect, snap to max height vary width
+ resultSize.height = maxHeight;
+ resultSize.width = (maxHeight * resultPar);
+ }
}
- else
+
+ // If necessary, grow to minimum dimensions to ensure controls overlay is not obstructed
+ if ( resultSize.width < minWidth )
+ resultSize.width = minWidth;
+ if ( resultSize.height < minHeight )
+ resultSize.height = minHeight;
+
+ return resultSize;
+}
+
+/**
+ * Resizes the entire window to accomodate a view of a particular size.
+ */
+- (void) resizeWindowForViewSize: (NSSize) viewSize
+{
+ // Figure out the deltas for the new frame area
+ NSSize currentSize = [[[self window] contentView] frame].size;
+ CGFloat deltaX = viewSize.width - currentSize.width;
+ CGFloat deltaY = viewSize.height - currentSize.height;
+
+ // Now resize the whole panel by those same deltas, but don't exceed the min
+ NSRect frame = [[self window] frame];
+ NSSize maxSize = [[[self window] screen] visibleFrame].size;
+
+ /* if we are not Scale To Screen, put an 10% of visible screen on the window */
+ if (self.scaleToScreen == NO)
{
- /* currently hard set default to 15 seconds */
- [fPreviewMovieLengthPopUp selectItemAtIndex: 0];
+ maxSize.width = maxSize.width * 0.90;
+ maxSize.height = maxSize.height * 0.90;
+ }
+
+ /* Set our min size to the storage size */
+ NSSize minSize;
+ minSize.width = self.title->width / self.backingScaleFactor;
+ minSize.height = self.title->height / self.backingScaleFactor;
+
+ frame.size.width += deltaX;
+ frame.size.height += deltaY;
+ if( frame.size.width < minSize.width )
+ {
+ frame.size.width = minSize.width;
+ deltaX = frame.size.width - currentSize.width;
+ }
+ if( frame.size.height < minSize.height )
+ {
+ frame.size.height = minSize.height;
+ //deltaY = frame.size.height - currentSize.height;
+ }
+ /* compare frame to max size of screen */
+
+ if( frame.size.width > maxSize.width )
+ {
+ frame.size.width = maxSize.width;
+ }
+
+ if( frame.size.height > maxSize.height )
+ {
+ frame.size.height = maxSize.height;
+ }
+
+ // But now the sheet is off-center, so also shift the origin to center it and
+ // keep the top aligned.
+ if (frame.size.width != [[self window] frame].size.width)
+ frame.origin.x -= (deltaX / 2.0);
+
+ /* Since upon launch we can open up the preview window if it was open
+ * the last time we quit (and at the size it was) we want to make
+ * sure that upon resize we do not have the window off the screen
+ * So check the origin against the screen origin and adjust if
+ * necessary.
+ */
+ NSSize screenSize = [[[self window] screen] visibleFrame].size;
+ NSPoint screenOrigin = [[[self window] screen] visibleFrame].origin;
+ if (screenSize.height < frame.size.height)
+ {
+ frame.size.height = screenSize.height;
}
+ if (screenSize.width < frame.size.width)
+ {
+ frame.size.width = screenSize.width;
+ }
+
+ /* our origin is off the screen to the left*/
+ if (frame.origin.x < screenOrigin.x)
+ {
+ /* so shift our origin to the right */
+ frame.origin.x = screenOrigin.x;
+ }
+ else if ((frame.origin.x + frame.size.width) > (screenOrigin.x + screenSize.width))
+ {
+ /* the right side of the preview is off the screen, so shift to the left */
+ frame.origin.x = (screenOrigin.x + screenSize.width) - frame.size.width;
+ }
+
+ if (self.scaleToScreen == YES)
+ {
+ /* our origin is off the screen to the top*/
+ if (frame.origin.y < screenOrigin.y)
+ {
+ /* so shift our origin to the bottom */
+ frame.origin.y = screenOrigin.y;
+ }
+ else if ((frame.origin.y + frame.size.height) > (screenOrigin.y + screenSize.height))
+ {
+ /* the top side of the preview is off the screen, so shift to the bottom */
+ frame.origin.y = (screenOrigin.y + screenSize.height) - frame.size.height;
+ }
+ }
+
+ [[self window] setFrame:frame display:YES animate:YES];
+}
+
+
+/**
+ * Enable/Disable an arbitrary number of UI elements.
+ * @param boxes an array of UI elements
+ * @param indexes a set of indexes of the elements in boxes to be enabled
+ */
+- (void) toggleBoxes: (NSArray *) boxes usingIndexes: (NSIndexSet *) indexes
+{
+ [NSAnimationContext beginGrouping];
+ [[NSAnimationContext currentContext] setDuration:ANIMATION_DUR];
+
+ [boxes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+ [[obj animator] setHidden:([indexes containsIndex:idx]) ? NO : YES];
+ }];
+
+ [NSAnimationContext endGrouping];
}
-- (void) SetTitle: (hb_title_t *) title
+/**
+ * Switch the preview controller to one of his view mode:
+ * ViewModePicturePreview, ViewModeEncoding, ViewModeMoviePreview
+ * This methods is the only way to change the mode, do not try otherwise.
+ * @param mode ViewMode mode
+ */
+- (void) switchViewToMode: (ViewMode) mode
{
- fTitle = title;
- fPicture = 0;
+ switch (mode) {
+ case ViewModePicturePreview:
+ {
+ if (self.currentViewMode == ViewModeEncoding)
+ {
+ [self.generator cancel];
+ [self toggleBoxes:@[fPictureControlBox, fEncodingControlBox]
+ usingIndexes:[NSIndexSet indexSetWithIndex:0]];
+ [fMovieCreationProgressIndicator stopAnimation:self];
+ }
+ else if (self.currentViewMode == ViewModeMoviePreview)
+ {
+ /* Stop playback and remove the observers */
+ [fMovieView pause:self];
+ [self stopMovieTimer];
+ [self removeMovieObservers];
+
+ [self toggleBoxes:@[fPictureControlBox, fMoviePlaybackControlBox, fMovieView]
+ usingIndexes:[NSIndexSet indexSetWithIndex:0]];
+
+ /* Release the movie */
+ [fMovieView setMovie:nil];
+ self.movie = nil;
+ }
+
+ break;
+ }
+
+ case ViewModeEncoding:
+ {
+ [fMovieCreationProgressIndicator setDoubleValue:0];
+ [fMovieCreationProgressIndicator startAnimation:self];
+ [self toggleBoxes:@[fEncodingControlBox, fPictureControlBox, fMoviePlaybackControlBox]
+ usingIndexes:[NSIndexSet indexSetWithIndex:0]];
+
+ break;
+ }
- [self settingsChanged:nil];
+ case ViewModeMoviePreview:
+ {
+ [self toggleBoxes:@[fMovieView, fMoviePlaybackControlBox, fEncodingControlBox, fPictureControlBox]
+ usingIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 2)]];
+
+ [fMovieCreationProgressIndicator stopAnimation:self];
+ [self initPreviewScrubberForMovie];
+ [self startMovieTimer];
+
+ /* Install movie notifications */
+ [self addMovieObservers];
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ self.currentViewMode = mode;
}
-- (void)windowDidChangeBackingProperties:(NSNotification *)notification {
-
- NSWindow *theWindow = (NSWindow *)[notification object];
-
- CGFloat newBackingScaleFactor = [theWindow backingScaleFactor];
- CGFloat oldBackingScaleFactor = [[[notification userInfo]
- objectForKey:@"NSBackingPropertyOldScaleFactorKey"]
- doubleValue];
- if( newBackingScaleFactor != oldBackingScaleFactor )
+- (void) dealloc
+{
+ [_hudTimer invalidate];
+ [_hudTimer release];
+
+ [_movieTimer invalidate];
+ [_movieTimer release];
+
+ [_generator cancel];
+ [_generator release];
+
+ [self removeMovieObservers];
+
+ [super dealloc];
+}
+
+#pragma mark -
+#pragma mark Hud Control Overlay
+
+- (void) mouseMoved: (NSEvent *) theEvent
+{
+ [super mouseMoved:theEvent];
+ NSPoint mouseLoc = [theEvent locationInWindow];
+
+ /* Test for mouse location to show/hide hud controls */
+ if (self.currentViewMode != ViewModeEncoding && self.title)
{
- // Scale factor changed, update the preview window
- // to the new situation
- backingScaleFactor = newBackingScaleFactor;
- if (fTitle)
- [self pictureSliderChanged:self];
+ /* Since we are not encoding, verify which control hud to show
+ * or hide based on aMovie ( aMovie indicates we need movie controls )
+ */
+ NSBox *hudBoxToShow;
+ if (self.currentViewMode == !ViewModeMoviePreview) // No movie loaded up
+ {
+ hudBoxToShow = fPictureControlBox;
+ }
+ else // We have a movie
+ {
+ hudBoxToShow = fMoviePlaybackControlBox;
+ }
+
+ if (NSPointInRect(mouseLoc, [hudBoxToShow frame]))
+ {
+ [[hudBoxToShow animator] setHidden: NO];
+ [self stopHudTimer];
+ }
+ else if (NSPointInRect(mouseLoc, [[[self window] contentView] frame]))
+ {
+ [[hudBoxToShow animator] setHidden: NO];
+ [self startHudTimer];
+ }
+ else
+ {
+ [[hudBoxToShow animator] setHidden: YES];
+ }
+ }
+}
+
+- (void) startHudTimer
+{
+ if (self.hudTimer)
+ {
+ [self.hudTimer setFireDate:[NSDate dateWithTimeIntervalSinceNow:8.0]];
+ }
+ else
+ {
+ self.hudTimer = [NSTimer scheduledTimerWithTimeInterval:8.0 target:self selector:@selector(hudTimerFired:)
+ userInfo:nil repeats:YES];
}
}
-// Adjusts the window to draw the current picture (fPicture) adjusting its size as
-// necessary to display as much of the picture as possible.
+- (void) stopHudTimer
+{
+ [self.hudTimer invalidate];
+ self.hudTimer = nil;
+}
+
+- (void) hudTimerFired: (NSTimer *)theTimer
+{
+ /* Regardless which control box is active, after the timer
+ * period we want either one to fade to hidden.
+ */
+ [[fPictureControlBox animator] setHidden: YES];
+ [[fMoviePlaybackControlBox animator] setHidden: YES];
+ [self stopHudTimer];
+}
+
+#pragma mark -
+#pragma mark Still previews mode
+
+/**
+ * Adjusts the window to draw the current picture (fPicture) adjusting its size as
+ * necessary to display as much of the picture as possible.
+ */
- (void) displayPreview
{
- hb_job_t * job = fTitle->job;
+ hb_title_t *title = self.title;
- NSImage *fPreviewImage = [self imageForPicture: fPicture];
+ NSImage *fPreviewImage = [self.generator imageAtIndex:self.pictureIndex];
NSSize imageScaledSize = [fPreviewImage size];
- [fPictureLayer setContents:fPreviewImage];
+ [self.pictureLayer setContents:fPreviewImage];
- NSSize displaySize = NSMakeSize( ( CGFloat )fTitle->width, ( CGFloat )fTitle->height );
+ NSSize displaySize = NSMakeSize( ( CGFloat )title->width, ( CGFloat )title->height );
NSString *sizeInfoString;
/* Set the picture size display fields below the Preview Picture*/
int output_width, output_height, output_par_width, output_par_height;
int display_width;
- if( fTitle->job->anamorphic.mode == 1 ) // Original PAR Implementation
+ if( title->job->anamorphic.mode == 1 ) // Original PAR Implementation
{
- output_width = fTitle->width-fTitle->job->crop[2]-fTitle->job->crop[3];
- output_height = fTitle->height-fTitle->job->crop[0]-fTitle->job->crop[1];
- display_width = output_width * fTitle->job->anamorphic.par_width / fTitle->job->anamorphic.par_height;
+ output_width = title->width-title->job->crop[2]-title->job->crop[3];
+ output_height = title->height-title->job->crop[0]-title->job->crop[1];
+ display_width = output_width * title->job->anamorphic.par_width / title->job->anamorphic.par_height;
sizeInfoString = [NSString stringWithFormat:
@"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Strict",
- fTitle->width, fTitle->height, output_width, output_height, display_width, output_height];
-
+ title->width, title->height, output_width, output_height, display_width, output_height];
+
displaySize.width = display_width;
- displaySize.height = fTitle->height;
+ displaySize.height = title->height;
imageScaledSize.width = display_width;
imageScaledSize.height = output_height;
}
- else if (fTitle->job->anamorphic.mode == 2) // Loose Anamorphic
+ else if (title->job->anamorphic.mode == 2) // Loose Anamorphic
{
- hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height);
+ hb_set_anamorphic_size(title->job, &output_width, &output_height, &output_par_width, &output_par_height);
display_width = output_width * output_par_width / output_par_height;
sizeInfoString = [NSString stringWithFormat:
@"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Loose",
- fTitle->width, fTitle->height, output_width, output_height, display_width, output_height];
-
+ title->width, title->height, output_width, output_height, display_width, output_height];
+
displaySize.width = display_width;
- displaySize.height = fTitle->height;
+ displaySize.height = title->height;
imageScaledSize.width = display_width;
imageScaledSize.height = output_height;
}
- else if (fTitle->job->anamorphic.mode == 3) // Custom Anamorphic
+ else if (title->job->anamorphic.mode == 3) // Custom Anamorphic
{
- hb_set_anamorphic_size(job, &output_width, &output_height, &output_par_width, &output_par_height);
+ hb_set_anamorphic_size(title->job, &output_width, &output_height, &output_par_width, &output_par_height);
sizeInfoString = [NSString stringWithFormat:
@"Source: %dx%d, Output: %dx%d, Anamorphic: %dx%d Custom",
- fTitle->width, fTitle->height, output_width, output_height, fTitle->job->anamorphic.dar_width, fTitle->job->anamorphic.dar_height];
-
- displaySize.width = fTitle->job->anamorphic.dar_width + fTitle->job->crop[2] + fTitle->job->crop[3] ;
- displaySize.height = fTitle->job->anamorphic.dar_height + fTitle->job->crop[0] + fTitle->job->crop[1];
- imageScaledSize.width = (int)fTitle->job->anamorphic.dar_width;
- imageScaledSize.height = (int)fTitle->job->height;
+ title->width, title->height, output_width, output_height, title->job->anamorphic.dar_width, title->job->anamorphic.dar_height];
+
+ displaySize.width = title->job->anamorphic.dar_width + title->job->crop[2] + title->job->crop[3] ;
+ displaySize.height = title->job->anamorphic.dar_height + title->job->crop[0] + title->job->crop[1];
+ imageScaledSize.width = (int)title->job->anamorphic.dar_width;
+ imageScaledSize.height = (int)title->job->height;
}
else // No Anamorphic
{
sizeInfoString = [NSString stringWithFormat:
- @"Source: %dx%d, Output: %dx%d", fTitle->width, fTitle->height,
- fTitle->job->width, fTitle->job->height];
-
- displaySize.width = fTitle->width;
- displaySize.height = fTitle->height;
- imageScaledSize.width = fTitle->job->width;
- imageScaledSize.height = fTitle->job->height;
+ @"Source: %dx%d, Output: %dx%d", title->width, title->height,
+ title->job->width, title->job->height];
+
+ displaySize.width = title->width;
+ displaySize.height = title->height;
+ imageScaledSize.width = title->job->width;
+ imageScaledSize.height = title->job->height;
}
- if( backingScaleFactor != 1.0 )
+ if (self.backingScaleFactor != 1.0)
{
// HiDPI mode usually display everything
// with douple pixel count, but we don't
// want to double the size of the video
- displaySize.height /= backingScaleFactor;
- displaySize.width /= backingScaleFactor;
- imageScaledSize.height /= backingScaleFactor;
- imageScaledSize.width /= backingScaleFactor;
+ displaySize.height /= self.backingScaleFactor;
+ displaySize.width /= self.backingScaleFactor;
+ imageScaledSize.height /= self.backingScaleFactor;
+ imageScaledSize.width /= self.backingScaleFactor;
}
// Get the optimal view size for the image
NSSize viewSize = [self optimalViewSizeForImageSize:displaySize];
viewSize.width += BORDER_SIZE * 2;
viewSize.height += BORDER_SIZE * 2;
-
+
NSSize windowSize;
- if (scaleToScreen == YES)
+ if (self.scaleToScreen == YES)
// Scale the window to the max possible size
windowSize = [[[self window] screen] visibleFrame].size;
else
@@ -347,14 +724,14 @@
areaSize.width -= BORDER_SIZE * 2;
areaSize.height -= BORDER_SIZE * 2;
- if (scaleToScreen == YES)
+ if (self.scaleToScreen == YES)
{
/* We are in Scale To Screen mode so, we have to get the ratio for height and width against the window
*size so we can scale from there.
*/
CGFloat pictureAspectRatio = imageScaledSize.width / imageScaledSize.height;
CGFloat areaAspectRatio = areaSize.width / areaSize.height;
-
+
if (pictureAspectRatio > areaAspectRatio)
{
viewSize.width = areaSize.width;
@@ -375,7 +752,7 @@
{
CGFloat pictureAspectRatio = imageScaledSize.width / imageScaledSize.height;
CGFloat areaAspectRatio = areaSize.width / areaSize.height;
-
+
if (pictureAspectRatio > areaAspectRatio)
{
viewSize.width = areaSize.width;
@@ -390,27 +767,26 @@
}
// Resize the CALayers
- [fWhiteBackground setBounds:CGRectMake(0, 0, viewSize.width + (BORDER_SIZE * 2), viewSize.height + (BORDER_SIZE * 2))];
- [fPictureLayer setBounds:CGRectMake(0, 0, viewSize.width, viewSize.height)];
+ [self.backLayer setBounds:CGRectMake(0, 0, viewSize.width + (BORDER_SIZE * 2), viewSize.height + (BORDER_SIZE * 2))];
+ [self.pictureLayer setBounds:CGRectMake(0, 0, viewSize.width, viewSize.height)];
NSString *scaleString;
- CGFloat scale = ( ( CGFloat )[fPictureLayer frame].size.width) / ( ( CGFloat )imageScaledSize.width);
+ CGFloat scale = ( ( CGFloat )[self.pictureLayer frame].size.width) / ( ( CGFloat )imageScaledSize.width);
if (scale * 100.0 != 100)
- scaleString = [NSString stringWithFormat:
- NSLocalizedString( @" (%.0f%% actual size)",
- @"String shown when a preview is scaled" ), scale * 100.0];
+ scaleString = [NSString stringWithFormat:@" (%.0f%% actual size)", scale * 100.0];
else
scaleString = @"(Actual size)";
-
- if (scaleToScreen == YES)
+
+ if (_scaleToScreen == YES)
scaleString = [scaleString stringByAppendingString:@" Scaled To Screen"];
/* Set the info fields in the hud controller */
[fInfoField setStringValue: [NSString stringWithFormat:
@"%@", sizeInfoString]];
-
+
[fscaleInfoField setStringValue: [NSString stringWithFormat:
@"%@", scaleString]];
+
/* Set the info field in the window title bar */
[[self window] setTitle:[NSString stringWithFormat: @"Preview - %@ %@",sizeInfoString, scaleString]];
}
@@ -419,519 +795,149 @@
{
[[NSUserDefaults standardUserDefaults] setObject:[fPreviewMovieLengthPopUp titleOfSelectedItem] forKey:@"PreviewLength"];
}
-
-- (IBAction) settingsChanged: (id) sender
-{
- // Purge the existing picture previews so they get recreated the next time
- // they are needed.
- [self purgeImageCache];
- [self pictureSliderChanged:nil];
-}
-- (IBAction) pictureSliderChanged: (id) sender
+- (void) setDeinterlacePreview: (BOOL) deinterlacePreview
{
- /* Run cancelCreateMoviePreview in case a preview is being encoded and then cancel if so */
- [self cancelCreateMoviePreview:nil];
-
- // Show the picture view
- if (aMovie)
- {
- [fMoviePlaybackControlBox setHidden:YES];
- [fMovieView pause:nil];
- [fMovieView setHidden:YES];
- [fMovieView setMovie:nil];
- aMovie = nil;
- }
-
- int newPicture = [fPictureSlider intValue];
- if (newPicture != fPicture)
- {
- fPicture = newPicture;
- }
- [self displayPreview];
-
+ _deinterlacePreview = deinterlacePreview;
+ self.generator.deinterlace = deinterlacePreview;
}
-- (IBAction)showWindow:(id)sender
-{
- if (aMovie)
- [self startMovieTimer];
-
- [super showWindow:sender];
-}
-- (NSString*) pictureSizeInfoString
-{
- return [fInfoField stringValue];
-}
-
-- (IBAction)showPictureSettings:(id)sender
-{
- [fHBController showPicturePanel:self];
-}
-
-#pragma mark Hud Control Overlay
-/* enableHudControls and disableHudControls are used to sync enableUI
- * in HBController so that during a scan we do not attempt to access source
- * images, etc. which can cause a crash. In general this ui behavior will mirror
- * the main window ui's enableUI method and in fact is called from there */
-- (void) enableHudControls
-{
- [fPictureSlider setEnabled:YES];
- [fScaleToScreenToggleButton setEnabled:YES];
- [fCreatePreviewMovieButton setEnabled:YES];
- [fGoToStillPreviewButton setEnabled:YES];
-}
-
-- (void) disableHudControls
-{
- [fPictureSlider setEnabled:NO];
- [fScaleToScreenToggleButton setEnabled:NO];
- [fCreatePreviewMovieButton setEnabled:NO];
- [fGoToStillPreviewButton setEnabled:NO];
-}
-
-- (void) mouseMoved:(NSEvent *)theEvent
-{
- [super mouseMoved:theEvent];
- NSPoint mouseLoc = [theEvent locationInWindow];
-
- /* Test for mouse location to show/hide hud controls */
- if( fEncodeState != 1 )
- {
- /* Since we are not encoding, verify which control hud to show
- * or hide based on aMovie ( aMovie indicates we need movie controls )
- */
- NSBox *hudBoxToShow;
- if ( aMovie == nil ) // No movie loaded up
- {
- hudBoxToShow = fPictureControlBox;
- }
- else // We have a movie
- {
- hudBoxToShow = fMoviePlaybackControlBox;
- }
-
- if( NSPointInRect( mouseLoc, [fPictureControlBox frame] ) )
- {
- [[hudBoxToShow animator] setHidden: NO];
- [self stopHudTimer];
- }
- else if( NSPointInRect( mouseLoc, [[[self window] contentView] frame] ) )
- {
- [[hudBoxToShow animator] setHidden: NO];
- [self startHudTimer];
- }
- else
- {
- [[hudBoxToShow animator] setHidden: YES];
- }
- }
-}
-
-- (void) startHudTimer
-{
- if( fHudTimer ) {
- [fHudTimer invalidate];
- [fHudTimer release];
- }
- fHudTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(hudTimerFired:) userInfo:nil repeats:YES];
- [fHudTimer retain];
-}
-
-- (void) stopHudTimer
-{
- if( fHudTimer )
- {
- [fHudTimer invalidate];
- [fHudTimer release];
- fHudTimer = nil;
- hudTimerSeconds = 0;
- }
-}
-
-- (void) hudTimerFired: (NSTimer*)theTimer
+- (IBAction) pictureSliderChanged: (id) sender
{
- hudTimerSeconds++;
- if( hudTimerSeconds >= 10 )
- {
- /* Regardless which control box is active, after the timer
- * period we want either one to fade to hidden.
- */
- [[fPictureControlBox animator] setHidden: YES];
- [[fMoviePlaybackControlBox animator] setHidden: YES];
- [self stopHudTimer];
+ if ((self.pictureIndex != [fPictureSlider intValue] || !sender) && self.title) {
+ self.pictureIndex = [fPictureSlider intValue];
+ [self displayPreview];
}
}
-- (IBAction)toggleScaleToScreen:(id)sender
+- (IBAction) toggleScaleToScreen: (id) sender
{
- if (scaleToScreen == YES)
+ if (self.scaleToScreen == YES)
{
- scaleToScreen = NO;
+ self.scaleToScreen = NO;
/* make sure we are set to a still preview */
- [self pictureSliderChanged:nil];
+ [self displayPreview];
[fScaleToScreenToggleButton setTitle:@"Scale To Screen"];
}
else
{
- scaleToScreen = YES;
+ self.scaleToScreen = YES;
/* make sure we are set to a still preview */
- [self pictureSliderChanged:nil];
+ [self displayPreview];
[fScaleToScreenToggleButton setTitle:@"Actual Scale"];
}
-
-}
-
-#pragma mark Still Preview Image Processing
-
-// This function converts an image created by libhb (specified via pictureIndex) into
-// an NSImage suitable for the GUI code to use. If removeBorders is YES,
-// makeImageForPicture crops the image generated by libhb stripping off the gray
-// border around the content. This is the low-level method that generates the image.
-// -imageForPicture calls this function whenever it can't find an image in its cache.
-- (NSImage *) makeImageForPicture: (NSInteger)pictureIndex
- libhb:(hb_handle_t*)handle
- title:(hb_title_t*)title
-{
- static uint8_t * buffer;
- static int bufferSize;
-
- // Make sure we have a big enough buffer to receive the image from libhb. libhb
- int dstWidth = title->job->width;
- int dstHeight = title->job->height;
-
- int newSize;
- newSize = dstWidth * dstHeight * 4;
- if( bufferSize < newSize )
- {
- bufferSize = newSize;
- buffer = (uint8_t *) realloc( buffer, bufferSize );
- }
-
- // Enable and the disable deinterlace just for preview if deinterlace
- // or decomb filters are enabled
- int deinterlaceStatus = title->job->deinterlace;
-
- if (self.deinterlacePreview)
- title->job->deinterlace = 1;
-
- hb_get_preview( handle, title->job, (int)pictureIndex, buffer );
-
- title->job->deinterlace = deinterlaceStatus;
-
- // Create an NSBitmapImageRep and copy the libhb image into it, converting it from
- // libhb's format to one suitable for NSImage. Along the way, we'll strip off the
- // border around libhb's image.
-
- // The image data returned by hb_get_preview is 4 bytes per pixel, BGRA format.
- // Alpha is ignored.
-
- NSBitmapFormat bitmapFormat = (NSBitmapFormat)NSAlphaFirstBitmapFormat;
- NSBitmapImageRep * imgrep = [[[NSBitmapImageRep alloc]
- initWithBitmapDataPlanes:nil
- pixelsWide:dstWidth
- pixelsHigh:dstHeight
- bitsPerSample:8
- samplesPerPixel:3 // ignore alpha
- hasAlpha:NO
- isPlanar:NO
- colorSpaceName:NSCalibratedRGBColorSpace
- bitmapFormat:bitmapFormat
- bytesPerRow:dstWidth * 4
- bitsPerPixel:32] autorelease];
-
- UInt32 * src = (UInt32 *)buffer;
- UInt32 * dst = (UInt32 *)[imgrep bitmapData];
- int r, c;
- for (r = 0; r < dstHeight; r++)
- {
- for (c = 0; c < dstWidth; c++)
-#if TARGET_RT_LITTLE_ENDIAN
- *dst++ = Endian32_Swap(*src++);
-#else
- *dst++ = *src++;
-#endif
- }
-
- NSImage * img = [[[NSImage alloc] initWithSize: NSMakeSize(dstWidth, dstHeight)] autorelease];
- [img addRepresentation:imgrep];
-
- return img;
}
-// Returns the preview image for the specified index, retrieving it from its internal
-// cache or by calling makeImageForPicture if it is not cached. Generally, you should
-// use imageForPicture so that images are cached. Calling makeImageForPicture will
-// always generate a new copy of the image.
-- (NSImage *) imageForPicture: (NSInteger) pictureIndex
+- (NSString *) pictureSizeInfoString
{
- // The preview for the specified index may not currently exist, so this method
- // generates it if necessary.
- NSNumber * key = [NSNumber numberWithInteger:pictureIndex];
- NSImage * theImage = [fPicturePreviews objectForKey:key];
- if (!theImage)
- {
- theImage = [self makeImageForPicture:pictureIndex libhb:fHandle title:fTitle];
- [fPicturePreviews setObject:theImage forKey:key];
- }
- return theImage;
+ return [fInfoField stringValue];
}
-// Purges all images from the cache. The next call to imageForPicture will cause a new
-// image to be generated.
-- (void) purgeImageCache
+- (IBAction) showPictureSettings: (id) sender
{
- [fPicturePreviews removeAllObjects];
+ [self.delegate showPicturePanel:self];
}
-#pragma mark Movie Preview
+#pragma mark -
+#pragma mark Movie preview mode
-- (IBAction) cancelCreateMoviePreview: (id) sender
-{
- hb_state_t s;
- hb_get_state2(fPreviewLibhb, &s);
-
- if (fEncodeState && (s.state == HB_STATE_WORKING ||
- s.state == HB_STATE_PAUSED))
- {
- fEncodeState = 2;
- hb_stop(fPreviewLibhb);
- hb_system_sleep_allow(fPreviewLibhb);
- [NSAnimationContext beginGrouping];
- [[NSAnimationContext currentContext] setDuration:0.2];
- [[fEncodingControlBox animator] setHidden:YES];
- [[fPictureControlBox animator] setHidden:NO];
- [NSAnimationContext endGrouping];
+- (void) updateProgress: (double) progress info: (NSString *) progressInfo {
+ [fPreviewMovieStatusField setStringValue: progressInfo];
- return;
- }
+ [fMovieCreationProgressIndicator setIndeterminate: NO];
+ [fMovieCreationProgressIndicator setDoubleValue: progress];
}
-- (IBAction) createMoviePreview: (id) sender
-{
- /* Rip or Cancel ? */
- hb_state_t s;
- hb_get_state2( fPreviewLibhb, &s );
-
- /* we use controller.mm's prepareJobForPreview to go ahead and set all of our settings
- * however, we want to use a temporary destination field of course
- * so that we do not put our temp preview in the users chosen
- * directory */
-
- hb_job_t * job = fTitle->job;
-
- /* We run our current setting through prepeareJob in Controller.mm
- * just as if it were a regular encode */
-
- [fHBController prepareJobForPreview];
-
- /* Make sure we have a Preview sub directory with our pidnum attached */
- NSString *PreviewDirectory = [NSString stringWithFormat:@"~/Library/Application Support/HandBrake/Previews/%d", [fHBController getPidnum]];
- PreviewDirectory = [PreviewDirectory stringByExpandingTildeInPath];
- if( ![[NSFileManager defaultManager] fileExistsAtPath:PreviewDirectory] )
- {
- [[NSFileManager defaultManager] createDirectoryAtPath:PreviewDirectory
- withIntermediateDirectories:NO
- attributes:nil
- error:nil];
- }
- /* Destination file. We set this to our preview directory
- * changing the extension appropriately.*/
- if (fTitle->job->mux & HB_MUX_MASK_MP4) // MP4 file
- {
- /* we use .m4v for our mp4 files so that ac3 and chapters in mp4 will play properly */
- fPreviewMoviePath = [PreviewDirectory stringByAppendingString:@"/preview_temp.m4v"];
- }
- else if (fTitle->job->mux & HB_MUX_MASK_MKV) // MKV file
- {
- fPreviewMoviePath = [PreviewDirectory stringByAppendingString:@"/preview_temp.mkv"];
- }
-
- fPreviewMoviePath = [[fPreviewMoviePath stringByExpandingTildeInPath]retain];
-
- /* See if there is an existing preview file, if so, delete it */
- if( ![[NSFileManager defaultManager] fileExistsAtPath:fPreviewMoviePath] )
- {
- [[NSFileManager defaultManager] removeItemAtPath:fPreviewMoviePath error:nil];
- }
-
- /* We now direct our preview encode to fPreviewMoviePath */
- hb_job_set_file(fTitle->job, [fPreviewMoviePath UTF8String]);
-
- /* We use our advance pref to determine how many previews to scan */
- int hb_num_previews = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewsNumber"] intValue];
- job->start_at_preview = fPicture + 1;
- job->seek_points = hb_num_previews;
-
- /* we use the preview duration popup to get the specified
- * number of seconds for the preview encode.
- */
-
- job->pts_to_stop = [[fPreviewMovieLengthPopUp titleOfSelectedItem] intValue] * 90000LL;
-
- /* lets go ahead and send it off to libhb
- * Note: unlike a full encode, we only send 1 pass regardless if the final encode calls for 2 passes.
- * this should suffice for a fairly accurate short preview and cuts our preview generation time in half.
- * However we also need to take into account the indepth scan for subtitles.
- */
- /*
- * If scanning we need to do some extra setup of the job.
- */
- if( job->indepth_scan == 1 )
+- (void) didCreateMovieAtURL: (NSURL *) fileURL
+{
+ /* Load the new movie into fMovieView */
+ if (fileURL)
{
- char *x264opts_tmp;
-
- /*
- * When subtitle scan is enabled do a fast pre-scan job
- * which will determine which subtitles to enable, if any.
- */
- job->pass = -1;
- x264opts_tmp = job->advanced_opts;
-
- job->advanced_opts = NULL;
- job->indepth_scan = 1;
- /*
- * Add the pre-scan job
- */
- hb_add( fPreviewLibhb, job );
- job->advanced_opts = x264opts_tmp;
- }
- /* Go ahead and perform the actual encoding preview scan */
- job->indepth_scan = 0;
- job->pass = 0;
- hb_add( fPreviewLibhb, job );
+ NSError *outError;
+ NSDictionary *movieAttributes = @{QTMovieURLAttribute: fileURL,
+ QTMovieAskUnresolvedDataRefsAttribute: @(NO),
+ @"QTMovieOpenForPlaybackAttribute": @(YES),
+ @"QTMovieOpenAsyncRequiredAttribute": @(NO),
+ @"QTMovieOpenAsyncOKAttribute": @(NO),
+ @"QTMovieIsSteppableAttribute": @(YES),
+ QTMovieApertureModeAttribute: QTMovieApertureModeClean};
+
+ QTMovie *movie = [[[QTMovie alloc] initWithAttributes:movieAttributes error:&outError] autorelease];
+
+ if (!movie)
+ {
+ [self.delegate writeToActivityLog: "showMoviePreview: Unable to open movie"];
+ [self switchViewToMode:ViewModePicturePreview];
+ }
+ else
+ {
+ /* Scale the fMovieView to the picture player size */
+ [fMovieView setFrameSize:[self.pictureLayer frame].size];
+ [fMovieView setFrameOrigin:[self.pictureLayer frame].origin];
- /* we need to clean up the various lists after the job(s) have been set */
- hb_job_reset( job );
+ [fMovieView setMovie:movie];
+ [movie setDelegate:self];
- [fMovieCreationProgressIndicator setDoubleValue:0];
+ // get and enable subtitles
+ NSArray *subtitlesArray = [movie tracksOfMediaType: @"sbtl"];
+ if (subtitlesArray && [subtitlesArray count])
+ {
+ // enable the first tx3g subtitle track
+ [[subtitlesArray objectAtIndex: 0] setEnabled: YES];
+ }
+ else
+ {
+ // Perian subtitles
+ subtitlesArray = [movie tracksOfMediaType: QTMediaTypeVideo];
+ if (subtitlesArray && ([subtitlesArray count] >= 2))
+ {
+ // track 0 should be video, other video tracks should
+ // be subtitles; force-enable the first subs track
+ [[subtitlesArray objectAtIndex: 1] setEnabled: YES];
+ }
+ }
- [NSAnimationContext beginGrouping];
- [[NSAnimationContext currentContext] setDuration:0.2];
- [[fEncodingControlBox animator] setHidden: NO];
- [[fPictureControlBox animator] setHidden: YES];
- [NSAnimationContext endGrouping];
+ // to actually play the movie
+ self.movie = movie;
- /* Let fPreviewLibhb do the job */
- fEncodeState = 1;
- hb_system_sleep_prevent(fPreviewLibhb);
- hb_start(fPreviewLibhb);
-
-}
+ [self switchViewToMode:ViewModeMoviePreview];
-- (void) startReceivingLibhbNotifications
-{
- if (!fLibhbTimer)
- {
- fLibhbTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(libhbTimerFired:) userInfo:nil repeats:YES];
- [fLibhbTimer retain];
+ [fMovieView play:movie];
+ }
}
}
-- (void) stopReceivingLibhbNotifications
-{
- if (fLibhbTimer)
- {
- [fLibhbTimer invalidate];
- [fLibhbTimer release];
- fLibhbTimer = nil;
- }
-}
-- (void) libhbTimerFired: (NSTimer*)theTimer
+- (IBAction) cancelCreateMoviePreview: (id) sender
{
- hb_state_t s;
- hb_get_state( fPreviewLibhb, &s );
- [self libhbStateChanged: s];
+ [self switchViewToMode:ViewModePicturePreview];
}
-- (void) libhbStateChanged: (hb_state_t)state
+- (IBAction) createMoviePreview: (id) sender
{
- switch( state.state )
- {
- case HB_STATE_IDLE:
- case HB_STATE_SCANNING:
- case HB_STATE_SCANDONE:
- break;
-
- case HB_STATE_WORKING:
- {
-#define p state.param.working
- NSMutableString * string;
- /* Update text field */
- string = [NSMutableString stringWithFormat: NSLocalizedString( @"Encoding preview: %.2f %%", @"" ), 100.0 * p.progress];
-
- if( p.seconds > -1 )
- {
- [string appendFormat:
- NSLocalizedString( @" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)", @"" ),
- p.rate_cur, p.rate_avg, p.hours, p.minutes, p.seconds];
- }
- [fPreviewMovieStatusField setStringValue: string];
-
- [fMovieCreationProgressIndicator setIndeterminate: NO];
- /* Update slider */
- [fMovieCreationProgressIndicator setDoubleValue: 100.0 * p.progress];
-
- break;
-
- }
-#undef p
-
-#define p state.param.muxing
- case HB_STATE_MUXING:
- {
- // Update fMovieCreationProgressIndicator
- [fMovieCreationProgressIndicator setIndeterminate: YES];
- [fMovieCreationProgressIndicator startAnimation: nil];
- [fPreviewMovieStatusField setStringValue: NSLocalizedString( @"Muxing Preview ...", @"" )];
- break;
- }
-#undef p
- case HB_STATE_PAUSED:
- [fMovieCreationProgressIndicator stopAnimation: nil];
- break;
-
- case HB_STATE_WORKDONE:
- {
- // Delete all remaining jobs since libhb doesn't do this on its own.
- hb_job_t * job;
- while( ( job = hb_job(fPreviewLibhb, 0) ) )
- hb_rem( fHandle, job );
-
- [fPreviewMovieStatusField setStringValue: @""];
- [fMovieCreationProgressIndicator stopAnimation: nil];
-
- if (fEncodeState != 2)
- {
- // Show the movie view
- [self showMoviePreview:fPreviewMoviePath];
- }
-
- fEncodeState = 0;
- /* Done encoding, allow system sleep for the preview handle */
- hb_system_sleep_allow(fPreviewLibhb);
- break;
- }
- }
+ if (!self.generator)
+ return;
+
+ self.generator.delegate = self;
+ [self.delegate prepareJobForPreview];
+ [self.generator createMovieAsyncWithImageIndex:self.pictureIndex
+ andDuration:[[fPreviewMovieLengthPopUp titleOfSelectedItem] intValue]];
+
+ [self switchViewToMode:ViewModeEncoding];
}
- (IBAction) toggleMoviePreviewPlayPause: (id) sender
{
/* make sure a movie is even loaded up */
- if (aMovie != nil)
+ if (self.movie)
{
- /* For some stupid reason there is no "isPlaying" method for a QTMovie
- * object, given that, we detect the rate to determine whether the movie
- * is playing or not.
- */
- if ([self isPlaying]) // we are playing
+ if ([self.movie isPlaying]) // we are playing
{
- [fMovieView pause:aMovie];
+ [fMovieView pause:self.movie];
[fPlayPauseButton setState: NSOnState];
}
else // we are paused or stopped
{
- [fMovieView play:aMovie];
+ [fMovieView play:self.movie];
[fPlayPauseButton setState: NSOffState];
}
}
@@ -939,322 +945,134 @@
- (IBAction) moviePlaybackGoToBeginning: (id) sender
{
- /* make sure a movie is even loaded up */
- if (aMovie != nil)
- {
- [fMovieView gotoBeginning:aMovie];
- }
+ [fMovieView gotoBeginning:self.movie];
}
- (IBAction) moviePlaybackGoToEnd: (id) sender
{
- /* make sure a movie is even loaded up */
- if (aMovie != nil)
- {
- [fMovieView gotoEnd:aMovie];
- }
-}
-
-- (IBAction) moviePlaybackGoBackwardOneFrame: (id) sender
-{
- /* make sure a movie is even loaded up */
- if (aMovie != nil)
- {
- [fMovieView pause:aMovie]; // Pause the movie
- [fMovieView stepBackward:aMovie];
- }
-}
-
-- (IBAction) moviePlaybackGoForwardOneFrame: (id) sender
-{
- /* make sure a movie is even loaded up */
- if (aMovie != nil)
- {
- [fMovieView pause:aMovie]; // Pause the movie
- [fMovieView stepForward:aMovie];
- }
+ [fMovieView gotoEnd:self.movie];
}
- (void) startMovieTimer
{
- if( fMovieTimer ) {
- [fMovieTimer invalidate];
- [fMovieTimer release];
- }
- fMovieTimer = [NSTimer scheduledTimerWithTimeInterval:0.10 target:self selector:@selector(movieTimerFired:) userInfo:nil repeats:YES];
- [fMovieTimer retain];
+ if (!self.movieTimer)
+ {
+ self.movieTimer = [NSTimer scheduledTimerWithTimeInterval:0.09 target:self
+ selector:@selector(movieTimerFired:)
+ userInfo:nil repeats:YES];
+ }
}
- (void) stopMovieTimer
{
- if( fMovieTimer )
- {
- [fMovieTimer invalidate];
- [fMovieTimer release];
- fMovieTimer = nil;
- }
+ [self.movieTimer invalidate];
+ self.movieTimer = nil;
}
-- (void) movieTimerFired: (NSTimer*)theTimer
+- (void) movieTimerFired: (NSTimer *)theTimer
{
- if (aMovie != nil)
+ if (self.movie != nil)
{
[self adjustPreviewScrubberForCurrentMovieTime];
- [fMovieInfoField setStringValue: [self SMTPETimecode:[aMovie currentTime]]];
+ [fMovieInfoField setStringValue: [self.movie timecode]];
}
}
- (IBAction) showPicturesPreview: (id) sender
{
- [fMovieView pause:self];
- [self stopMovieTimer];
-
- [NSAnimationContext beginGrouping];
- [[NSAnimationContext currentContext] setDuration:0.2];
- [[fMoviePlaybackControlBox animator] setHidden:YES];
- [[fMovieView animator] setHidden:YES];
- [[fPictureControlBox animator] setHidden:NO];
- [NSAnimationContext endGrouping];
-
- [fMovieView setMovie:nil];
- aMovie = nil;
+ [self switchViewToMode:ViewModePicturePreview];
}
+#pragma mark -
+#pragma mark Movie Playback Scrubber
-- (IBAction) showMoviePreview: (NSString *) path
+// Initialize the preview scrubber min/max to appropriate values for the current movie
+- (void) initPreviewScrubberForMovie
{
- /* Since the gray background for the still images is part of
- * fPictureView, lets leave the picture view visible and postion
- * the fMovieView over the image portion of fPictureView so
- * we retain the gray cropping border we have already established
- * with the still previews
- */
-
- /* Load the new movie into fMovieView */
- if (path)
- {
- NSError *outError;
- NSURL *movieUrl = [NSURL fileURLWithPath:path];
- NSDictionary *movieAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
- movieUrl, QTMovieURLAttribute,
- [NSNumber numberWithBool:NO], QTMovieAskUnresolvedDataRefsAttribute,
- [NSNumber numberWithBool:YES], @"QTMovieOpenForPlaybackAttribute",
- [NSNumber numberWithBool:NO], @"QTMovieOpenAsyncRequiredAttribute",
- [NSNumber numberWithBool:NO], @"QTMovieOpenAsyncOKAttribute",
- [NSNumber numberWithBool:YES], @"QTMovieIsSteppableAttribute",
- QTMovieApertureModeClean, QTMovieApertureModeAttribute,
- nil];
-
- aMovie = [[[QTMovie alloc] initWithAttributes:movieAttributes error:&outError] autorelease];
-
- if (!aMovie)
- {
- [fHBController writeToActivityLog: "showMoviePreview: Unable to open movie"];
- }
- else
- {
- NSRect movieBounds;
-
- [fMovieView setControllerVisible:NO];
-
- /* we get some size information from the preview movie */
- NSSize movieSize = [[aMovie attributeForKey:QTMovieNaturalSizeAttribute] sizeValue];
- movieBounds = [fMovieView movieBounds];
- movieBounds.size.height = movieSize.height;
- /* We also get our view size to use for scaling fMovieView's size */
- NSSize scaledMovieViewSize = [fPictureLayer frame].size;
- movieBounds.size.width = movieSize.width;
-
- /* we need to account for an issue where the scaledMovieViewSize > the window size */
- if (scaledMovieViewSize.height > [[self window] frame].size.height)
- {
- [fHBController writeToActivityLog: "showMoviePreview: Our window is not tall enough to show the controller bar ..."];
- }
-
- /* Scale the fMovieView to scaledMovieViewSize */
- [fMovieView setFrameSize:scaledMovieViewSize];
-
- /*set our origin try using fPictureViewArea or fPictureView */
- NSPoint origin = [fPictureLayer frame].origin;
- origin.x += trunc( ( [fPictureLayer frame].size.width -
- [fMovieView frame].size.width ) / 2.0 );
- origin.y += trunc( ( ( [fPictureLayer frame].size.height -
- [fMovieView frame].size.height ) / 2.0 ) );
-
- [fMovieView setFrameOrigin:origin];
- [fMovieView setMovie:aMovie];
-
- // get and enable subtitles
- NSArray *subtitlesArray;
- subtitlesArray = [aMovie tracksOfMediaType: @"sbtl"];
- if( subtitlesArray && [subtitlesArray count] )
- {
- // enable the first TX3G subtitle track
- [[subtitlesArray objectAtIndex: 0] setEnabled: YES];
- }
- else
- {
- // Perian subtitles
- subtitlesArray = [aMovie tracksOfMediaType: QTMediaTypeVideo];
- if( subtitlesArray && ( [subtitlesArray count] >= 2 ) )
- {
- // track 0 should be video, other video tracks should
- // be subtitles; force-enable the first subs track
- [[subtitlesArray objectAtIndex: 1] setEnabled: YES];
- }
- }
-
- // to actually play the movie
- [NSAnimationContext beginGrouping];
- [[NSAnimationContext currentContext] setDuration:0.2];
- [[fEncodingControlBox animator] setHidden: YES];
- [[fMovieView animator] setHidden:NO];
- [[fMoviePlaybackControlBox animator] setHidden: NO];
- [NSAnimationContext endGrouping];
+ QTTime duration = [self.movie duration];
+ CGFloat result = duration.timeValue / duration.timeScale;
- [self initPreviewScrubberForMovie];
- [self startMovieTimer];
- /* Install amovie notifications */
- [aMovie setDelegate:self];
- [self installMovieCallbacks];
- [fMovieView play:aMovie];
- }
- }
+ [fMovieScrubberSlider setMinValue:0.0];
+ [fMovieScrubberSlider setMaxValue: result];
+ [fMovieScrubberSlider setDoubleValue: 0.0];
}
-#pragma mark *** Movie Playback Scrubber and time code methods ***
-
-// Initialize the preview scrubber min/max to appropriate values for the current movie
--(void) initPreviewScrubberForMovie
+- (void) adjustPreviewScrubberForCurrentMovieTime
{
- if (aMovie)
- {
- QTTime duration = [aMovie duration];
- CGFloat result = duration.timeValue / duration.timeScale;
-
- [fMovieScrubberSlider setMinValue:0.0];
- [fMovieScrubberSlider setMaxValue: result];
- [fMovieScrubberSlider setDoubleValue: 0.0];
- }
-}
+ QTTime time = [self.movie currentTime];
--(void) adjustPreviewScrubberForCurrentMovieTime
-{
- if (aMovie)
- {
- QTTime time = [aMovie currentTime];
-
- CGFloat result = (CGFloat)time.timeValue / (CGFloat)time.timeScale;;
- [fMovieScrubberSlider setDoubleValue:result];
- }
+ CGFloat result = (CGFloat)time.timeValue / (CGFloat)time.timeScale;;
+ [fMovieScrubberSlider setDoubleValue:result];
}
- (IBAction) previewScrubberChanged: (id) sender
{
- if (aMovie)
- {
- [fMovieView pause:aMovie];
- QTTime time = [self SliderToQTTime:[fMovieScrubberSlider doubleValue]];
- [aMovie setCurrentTime:time];
- [fMovieInfoField setStringValue: [self SMTPETimecode:time]];
- }
+ [fMovieView pause:self.movie];
+ [self.movie setCurrentTimeDouble:[fMovieScrubberSlider doubleValue]];
+ [fMovieInfoField setStringValue: [self.movie timecode]];
}
-- (BOOL) isPlaying
-{
- if (aMovie != nil)
- {
- /* For some stupid reason there is no "isPlaying" method for a QTMovie
- * object, given that, we detect the rate to determine whether the movie
- * is playing or not.
- */
- if ([aMovie rate] != 0.0f) // we are playing
- return YES;
- else // we are paused or stopped
- return NO;
- }
- return NO;
-}
-
-#pragma mark *** Movie Notifications ***
+#pragma mark -
+#pragma mark Movie Notifications
-- (void) installMovieCallbacks
+- (void) addMovieObservers
{
- /*Notification for any time the movie rate changes */
+ /* Notification for any time the movie rate changes */
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieRateDidChange:)
name:@"QTMovieRateDidChangeNotification"
- object:aMovie];
- /*Notification for when the movie ends */
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(movieDidEnd:)
- name:@"QTMovieDidEndNotification"
- object:aMovie];
+ object:self.movie];
}
-- (void)removeMovieCallbacks
+- (void) removeMovieObservers
{
- if (aMovie)
- {
- /*Notification for any time the movie rate changes */
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:@"QTMovieRateDidChangeNotification"
- object:aMovie];
- /*Notification for when the movie ends */
- [[NSNotificationCenter defaultCenter] removeObserver:self
- name:@"QTMovieDidEndNotification"
- object:aMovie];
- }
+ /*Notification for any time the movie rate changes */
+ [[NSNotificationCenter defaultCenter] removeObserver:self
+ name:@"QTMovieRateDidChangeNotification"
+ object:self.movie];
}
-- (void)movieRateDidChange:(NSNotification *)notification
+- (void) movieRateDidChange: (NSNotification *) notification
{
- if (aMovie != nil)
- {
- if ([self isPlaying])
- [fPlayPauseButton setState: NSOnState];
- else
- [fPlayPauseButton setState: NSOffState];
- }
+ if ([self.movie isPlaying])
+ [fPlayPauseButton setState: NSOnState];
+ else
+ [fPlayPauseButton setState: NSOffState];
}
-/* This notification is not currently used. However we should keep it "just in case" as
- * live preview playback is enhanced.
- */
-- (void)movieDidEnd:(NSNotification *)notification
-{
- //[fHBController writeToActivityLog: "Movie DidEnd Notification Received"];
-}
+#pragma mark -
+#pragma mark Keyboard and mouse wheel control
/* fMovieView Keyboard controls */
-- (void)keyDown:(NSEvent *)event
+- (void) keyDown: (NSEvent *) event
{
unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
+ QTMovie *movie = self.movie;
- if (aMovie)
+ if (movie)
{
if (key == 32)
{
- if ([self isPlaying])
- [fMovieView pause:aMovie];
+ if ([movie isPlaying])
+ [fMovieView pause:movie];
else
- [fMovieView play:aMovie];
+ [fMovieView play:movie];
}
else if (key == 'k')
- [fMovieView pause:aMovie];
+ [fMovieView pause:movie];
else if (key == 'l')
{
- float rate = [aMovie rate];
+ float rate = [movie rate];
rate += 1.0f;
- [fMovieView play:aMovie];
- [aMovie setRate:rate];
+ [fMovieView play:movie];
+ [movie setRate:rate];
}
else if (key == 'j')
{
- float rate = [aMovie rate];
+ float rate = [movie rate];
rate -= 1.0f;
- [fMovieView play:aMovie];
- [aMovie setRate:rate];
+ [fMovieView play:movie];
+ [movie setRate:rate];
}
else if ([event modifierFlags] & NSAlternateKeyMask && key == NSLeftArrowFunctionKey)
[fMovieView gotoBeginning:self];
@@ -1267,16 +1085,16 @@
else
[super keyDown:event];
}
- else if (!fEncodeState)
+ else if (self.currentViewMode != ViewModeEncoding)
{
if (key == NSLeftArrowFunctionKey)
{
- [fPictureSlider setIntegerValue:fPicture > [fPictureSlider minValue] ? fPicture - 1 : fPicture];
+ [fPictureSlider setIntegerValue:self.pictureIndex > [fPictureSlider minValue] ? self.pictureIndex - 1 : self.pictureIndex];
[self pictureSliderChanged:self];
}
else if (key == NSRightArrowFunctionKey)
{
- [fPictureSlider setIntegerValue:fPicture < [fPictureSlider maxValue] ? fPicture + 1 : fPicture];
+ [fPictureSlider setIntegerValue:self.pictureIndex < [fPictureSlider maxValue] ? self.pictureIndex + 1 : self.pictureIndex];
[self pictureSliderChanged:self];
}
else
@@ -1286,209 +1104,21 @@
[super keyDown:event];
}
-- (void)scrollWheel:(NSEvent *)theEvent
+- (void) scrollWheel: (NSEvent *) theEvent
{
- if (!fEncodeState)
+ if (self.currentViewMode != ViewModeEncoding)
{
if ([theEvent deltaY] < 0)
{
- [fPictureSlider setIntegerValue:fPicture < [fPictureSlider maxValue] ? fPicture + 1 : fPicture];
+ [fPictureSlider setIntegerValue:self.pictureIndex < [fPictureSlider maxValue] ? self.pictureIndex + 1 : self.pictureIndex];
[self pictureSliderChanged:self];
}
else if ([theEvent deltaY] > 0)
{
- [fPictureSlider setIntegerValue:fPicture > [fPictureSlider minValue] ? fPicture - 1 : fPicture];
+ [fPictureSlider setIntegerValue:self.pictureIndex > [fPictureSlider minValue] ? self.pictureIndex - 1 : self.pictureIndex];
[self pictureSliderChanged:self];
}
}
}
-#pragma mark *** QTTime Utilities ***
-
- // convert a time value (long) to a QTTime structure
--(QTTime)SliderToQTTime:(double)value
-{
- long timeScale = [[aMovie attributeForKey:QTMovieTimeScaleAttribute] longValue];
- return QTMakeTime(value * timeScale, timeScale);
-}
-
-/* Since MacOSX Leopard QTKit has taken over some responsibility for assessing movie playback
- * information from the old QuickTime carbon api ( time code information as well as fps, etc.).
- * However, the QTKit devs at apple were not really big on documentation and further ...
- * QuickTimes ability to playback HB's largely variable framerate output makes perfectly frame
- * accurate information at best convoluted. Still, for the purpose of a custom hud based custom
- * playback scrubber slider this has so far proven to be as accurate as I have found. To say it
- * could use some better accuracy is not understating it enough probably.
- * Most of this was gleaned from this obscure Apple Mail list thread:
- * http://www.mailinglistarchive.com/[email protected]/msg05642.html
- * Now as we currently do not show a QTKit control bar with scrubber for display sizes > container
- * size, this seems to facilitate playback control from the HB custom HUD controller fairly close
- * to the built in controller bar.
- * Further work needs to be done to try to get accurate frame by frame playback display if we want it.
- * Note that the keyboard commands for frame by frame step through etc. work as always.
- */
-
-// Returns a human readable string from the currentTime of movie playback
-- (NSString*) SMTPETimecode:(QTTime)time
-{
- NSString *smtpeTimeCodeString;
- int days, hour, minute, second, frame;
- long long result;
-
- result = time.timeValue / time.timeScale; // second
- frame = (int)(time.timeValue % time.timeScale) / 100;
-
- second = result % 60;
-
- result = result / 60; // minute
- minute = result % 60;
-
- result = result / 60; // hour
- hour = result % 24;
- days = (int)result;
-
- smtpeTimeCodeString = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second]; // hh:mm:ss
- return smtpeTimeCodeString;
-}
-
-@end
-
-@implementation PreviewController (Private)
-
-//
-// -[PictureController(Private) optimalViewSizeForImageSize:]
-//
-// Given the size of the preview image to be shown, returns the best possible
-// size for the view.
-//
-- (NSSize)optimalViewSizeForImageSize: (NSSize)imageSize
-{
- // The min size is 480x360
- CGFloat minWidth = 480.0;
- CGFloat minHeight = 360.0;
-
- NSSize screenSize = [[[self window] screen] visibleFrame].size;
- CGFloat maxWidth = screenSize.width;
- CGFloat maxHeight = screenSize.height;
-
- NSSize resultSize = imageSize;
- CGFloat resultPar = resultSize.width / resultSize.height;
-
- //note, a mbp 15" at 1440 x 900 is a 1.6 ar
- CGFloat screenAspect = screenSize.width / screenSize.height;
-
- if ( resultSize.width > maxWidth || resultSize.height > maxHeight )
- {
- // Source is larger than screen in one or more dimensions
- if ( resultPar > screenAspect )
- {
- // Source aspect wider than screen aspect, snap to max width and vary height
- resultSize.width = maxWidth;
- resultSize.height = (maxWidth / resultPar);
- }
- else
- {
- // Source aspect narrower than screen aspect, snap to max height vary width
- resultSize.height = maxHeight;
- resultSize.width = (maxHeight * resultPar);
- }
- }
-
- // If necessary, grow to minimum dimensions to ensure controls overlay is not obstructed
- if ( resultSize.width < minWidth )
- resultSize.width = minWidth;
- if ( resultSize.height < minHeight )
- resultSize.height = minHeight;
-
- return resultSize;
-}
-
-//
-// -[PictureController(Private) resizeWindowForViewSize:]
-//
-// Resizes the entire window to accomodate a view of a particular size.
-//
-- (void)resizeWindowForViewSize: (NSSize)viewSize
-{
- // Figure out the deltas for the new frame area
- NSSize currentSize = [[[self window] contentView] frame].size;
- CGFloat deltaX = viewSize.width - currentSize.width;
- CGFloat deltaY = viewSize.height - currentSize.height;
-
- // Now resize the whole panel by those same deltas, but don't exceed the min
- NSRect frame = [[self window] frame];
- NSSize maxSize = [[[self window] screen] visibleFrame].size;
- /* if we are not Scale To Screen, put an 10% of visible screen on the window */
- if (scaleToScreen == NO )
- {
- maxSize.width = maxSize.width * 0.90;
- maxSize.height = maxSize.height * 0.90;
- }
-
- /* Set our min size to the storage size */
- NSSize minSize;
- minSize.width = fTitle->width / backingScaleFactor;
- minSize.height = fTitle->height / backingScaleFactor;
-
- frame.size.width += deltaX;
- frame.size.height += deltaY;
- if( frame.size.width < minSize.width )
- {
- frame.size.width = minSize.width;
- deltaX = frame.size.width - currentSize.width;
- }
- if( frame.size.height < minSize.height )
- {
- frame.size.height = minSize.height;
- deltaY = frame.size.height - currentSize.height;
- }
- /* compare frame to max size of screen */
-
- if( frame.size.width > maxSize.width )
- {
- frame.size.width = maxSize.width;
- }
-
- if( frame.size.height > maxSize.height )
- {
- frame.size.height = maxSize.height;
- }
-
- // But now the sheet is off-center, so also shift the origin to center it and
- // keep the top aligned.
- if( frame.size.width != [[self window] frame].size.width )
- frame.origin.x -= (deltaX / 2.0);
-
- /* Since upon launch we can open up the preview window if it was open
- * the last time we quit (and at the size it was) we want to make
- * sure that upon resize we do not have the window off the screen
- * So check the origin against the screen origin and adjust if
- * necessary.
- */
- NSSize screenSize = [[[self window] screen] visibleFrame].size;
- NSPoint screenOrigin = [[[self window] screen] frame].origin;
- if (screenSize.height < frame.size.height)
- {
- frame.size.height = screenSize.height;
- }
- if (screenSize.width < frame.size.width)
- {
- frame.size.width = screenSize.width;
- }
-
- /* our origin is off the screen to the left*/
- if (frame.origin.x < screenOrigin.x)
- {
- /* so shift our origin to the right */
- frame.origin.x = screenOrigin.x;
- }
- else if ((frame.origin.x + frame.size.width) > (screenOrigin.x + screenSize.width))
- {
- /* the right side of the preview is off the screen, so shift to the left */
- frame.origin.x = (screenOrigin.x + screenSize.width) - frame.size.width;
- }
-
- [[self window] setFrame:frame display:YES animate:YES];
-}
-
@end
diff --git a/macosx/HBPreviewGenerator.h b/macosx/HBPreviewGenerator.h
new file mode 100644
index 000000000..e17114c45
--- /dev/null
+++ b/macosx/HBPreviewGenerator.h
@@ -0,0 +1,33 @@
+/* HBPreviewGenerator.h $
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
+
+#import <Cocoa/Cocoa.h>
+#include "hb.h"
+
+@protocol HBPreviewGeneratorDelegate <NSObject>
+
+- (void) didCreateMovieAtURL: (NSURL *) fileURL;
+- (void) updateProgress: (double) progress info: (NSString *) progressInfo;
+
+@end
+
+@interface HBPreviewGenerator : NSObject
+
+@property (nonatomic, assign) id <HBPreviewGeneratorDelegate> delegate;
+@property (nonatomic) BOOL deinterlace;
+
+- (id) initWithHandle: (hb_handle_t *) handle andTitle: (hb_title_t *) title;
+
+/* Still image generator */
+- (NSImage *) imageAtIndex: (NSUInteger) index;
+- (NSUInteger) imagesCount;
+- (void) purgeImageCache;
+
+/* Video generator */
+- (BOOL) createMovieAsyncWithImageIndex: (NSUInteger) index andDuration: (NSUInteger) duration;
+- (void) cancel;
+
+@end
diff --git a/macosx/HBPreviewGenerator.m b/macosx/HBPreviewGenerator.m
new file mode 100644
index 000000000..99ca20f86
--- /dev/null
+++ b/macosx/HBPreviewGenerator.m
@@ -0,0 +1,423 @@
+/* HBPreviewGenerator.m $
+
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
+//
+
+#import "HBPreviewGenerator.h"
+#import "Controller.h"
+
+typedef enum EncodeState : NSUInteger {
+ EncodeStateIdle,
+ EncodeStateWorking,
+ EncodeStateCancelled,
+} EncodeState;
+
+@interface HBPreviewGenerator ()
+
+@property (nonatomic, readonly, retain) NSMutableDictionary *picturePreviews;
+@property (nonatomic, readonly) NSUInteger imagesCount;
+@property (nonatomic, readonly) hb_handle_t *handle;
+@property (nonatomic, readonly) hb_title_t *title;
+
+@property (nonatomic) hb_handle_t *privateHandle;
+@property (nonatomic) NSTimer *timer;
+@property (nonatomic) EncodeState encodeState;
+
+@property (nonatomic, retain) NSURL *fileURL;
+
+@end
+
+@implementation HBPreviewGenerator
+
+- (id) initWithHandle: (hb_handle_t *) handle andTitle: (hb_title_t *) title
+{
+ self = [super init];
+ if (self)
+ {
+ _handle = handle;
+ _title = title;
+ _picturePreviews = [[NSMutableDictionary alloc] init];
+ _imagesCount = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewsNumber"] intValue];
+ }
+ return self;
+}
+
+#pragma mark -
+#pragma mark Preview images
+
+/**
+ * Returns the picture preview at the specified index
+ *
+ * @param index picture index in title.
+ */
+- (NSImage *) imageAtIndex: (NSUInteger) index
+{
+ if (index >= self.imagesCount)
+ return nil;
+
+ // The preview for the specified index may not currently exist, so this method
+ // generates it if necessary.
+ NSImage *theImage = [self.picturePreviews objectForKey:@(index)];
+
+ if (!theImage)
+ {
+ theImage = [HBPreviewGenerator makeImageForPicture:index
+ libhb:self.handle
+ title:self.title
+ deinterlace:self.deinterlace];
+ [self.picturePreviews setObject:theImage forKey:@(index)];
+ }
+
+ return theImage;
+}
+
+/**
+ * Purges all images from the cache. The next call to imageAtIndex: will cause a new
+ * image to be generated.
+ */
+- (void) purgeImageCache
+{
+ [self.picturePreviews removeAllObjects];
+}
+
+/**
+ * This function converts an image created by libhb (specified via pictureIndex) into
+ * an NSImage suitable for the GUI code to use. If removeBorders is YES,
+ * makeImageForPicture crops the image generated by libhb stripping off the gray
+ * border around the content. This is the low-level method that generates the image.
+ * -imageForPicture calls this function whenever it can't find an image in its cache.
+ *
+ * @param picture Index in title.
+ * @param h Handle to hb_handle_t.
+ * @param title Handle to hb_title_t of desired title.
+ */
++ (NSImage *) makeImageForPicture: (NSUInteger) pictureIndex
+ libhb: (hb_handle_t *) handle
+ title: (hb_title_t *) title
+ deinterlace: (BOOL) deinterlace
+{
+ static uint8_t *buffer;
+ static int bufferSize;
+
+ // Make sure we have a big enough buffer to receive the image from libhb
+ int dstWidth = title->job->width;
+ int dstHeight = title->job->height;
+
+ int newSize = dstWidth * dstHeight * 4;
+ if (!buffer || bufferSize < newSize)
+ {
+ bufferSize = newSize;
+ buffer = (uint8_t *) realloc( buffer, bufferSize );
+ }
+
+ // Enable and the disable deinterlace just for preview if deinterlace
+ // or decomb filters are enabled
+ int deinterlaceStatus = title->job->deinterlace;
+ if (deinterlace) title->job->deinterlace = 1;
+
+ hb_get_preview( handle, title->job, (int)pictureIndex, buffer );
+
+ // Reset deinterlace status
+ title->job->deinterlace = deinterlaceStatus;
+
+ // Create an NSBitmapImageRep and copy the libhb image into it, converting it from
+ // libhb's format to one suitable for NSImage. Along the way, we'll strip off the
+ // border around libhb's image.
+
+ // The image data returned by hb_get_preview is 4 bytes per pixel, BGRA format.
+ // Alpha is ignored.
+
+ NSBitmapFormat bitmapFormat = (NSBitmapFormat)NSAlphaFirstBitmapFormat;
+ NSBitmapImageRep * imgrep = [[[NSBitmapImageRep alloc]
+ initWithBitmapDataPlanes:nil
+ pixelsWide:dstWidth
+ pixelsHigh:dstHeight
+ bitsPerSample:8
+ samplesPerPixel:3 // ignore alpha
+ hasAlpha:NO
+ isPlanar:NO
+ colorSpaceName:NSCalibratedRGBColorSpace
+ bitmapFormat:bitmapFormat
+ bytesPerRow:dstWidth * 4
+ bitsPerPixel:32] autorelease];
+
+ UInt32 * src = (UInt32 *)buffer;
+ UInt32 * dst = (UInt32 *)[imgrep bitmapData];
+ int r, c;
+ for (r = 0; r < dstHeight; r++)
+ {
+ for (c = 0; c < dstWidth; c++)
+#if TARGET_RT_LITTLE_ENDIAN
+ *dst++ = Endian32_Swap(*src++);
+#else
+ *dst++ = *src++;
+#endif
+ }
+
+ NSImage * img = [[[NSImage alloc] initWithSize: NSMakeSize(dstWidth, dstHeight)] autorelease];
+ [img addRepresentation:imgrep];
+
+ return img;
+}
+
+#pragma mark -
+#pragma mark Preview movie
+
++ (NSString *) appSupportPath
+{
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSString *appSupportPath = nil;
+
+ NSArray *allPaths = NSSearchPathForDirectoriesInDomains( NSApplicationSupportDirectory,
+ NSUserDomainMask,
+ YES );
+ if ([allPaths count])
+ appSupportPath = [[allPaths objectAtIndex:0] stringByAppendingPathComponent:@"HandBrake"];
+
+ if (![fileManager fileExistsAtPath:appSupportPath])
+ [fileManager createDirectoryAtPath:appSupportPath withIntermediateDirectories:YES attributes:nil error:NULL];
+
+ return appSupportPath;
+}
+
++ (NSURL *) generateFileURLForType:(NSString *) type
+{
+ NSString *previewDirectory = [NSString stringWithFormat:@"%@/Previews/%d", [HBPreviewGenerator appSupportPath], getpid()];
+
+ if (![[NSFileManager defaultManager] fileExistsAtPath:previewDirectory])
+ {
+ if (![[NSFileManager defaultManager] createDirectoryAtPath:previewDirectory
+ withIntermediateDirectories:NO
+ attributes:nil
+ error:nil])
+ return nil;
+ }
+
+ return [[NSURL fileURLWithPath:previewDirectory]
+ URLByAppendingPathComponent:[NSString stringWithFormat:@"preview_temp.%@", type]];
+}
+
+/**
+ * This function start the encode of a movie preview, the delegate will be
+ * called with the updated the progress info and the fileURL.
+ * The called must call HBController prepareJobForPreview before this.
+ *
+ * @param index picture index in title.
+ * @param duration the duration in seconds of the preview movie.
+ */
+- (BOOL) createMovieAsyncWithImageIndex: (NSUInteger) index andDuration: (NSUInteger) duration;
+{
+ /* return if an encoding if already started */
+ if (self.encodeState || index >= self.imagesCount)
+ return NO;
+
+ hb_job_t *job = self.title->job;
+
+ /* Generate the file url and directories. */
+ if (job->mux & HB_MUX_MASK_MP4)
+ {
+ /* we use .m4v for our mp4 files so that ac3 and chapters in mp4 will play properly */
+ self.fileURL = [HBPreviewGenerator generateFileURLForType:@"m4v"];
+ }
+ else if (job->mux & HB_MUX_MASK_MKV)
+ {
+ self.fileURL = [HBPreviewGenerator generateFileURLForType:@"mkv"];
+ }
+
+ /* return if we couldn't get the fileURL */
+ if (!self.fileURL)
+ return NO;
+
+ /* See if there is an existing preview file, if so, delete it */
+ if (![[NSFileManager defaultManager] fileExistsAtPath:[self.fileURL path]])
+ {
+ [[NSFileManager defaultManager] removeItemAtPath:[self.fileURL path] error:NULL];
+ }
+
+ /* We now direct our preview encode to fileURL path */
+ hb_job_set_file(job, [[self.fileURL path] UTF8String]);
+
+ /* We use our advance pref to determine how many previews to scan */
+ job->start_at_preview = (int)index + 1;
+ job->seek_points = (int)self.imagesCount;
+ job->pts_to_stop = duration * 90000LL;
+
+ /* lets go ahead and send it off to libhb
+ * Note: unlike a full encode, we only send 1 pass regardless if the final encode calls for 2 passes.
+ * this should suffice for a fairly accurate short preview and cuts our preview generation time in half.
+ * However we also need to take into account the indepth scan for subtitles.
+ */
+
+ int loggingLevel = [[[NSUserDefaults standardUserDefaults] objectForKey:@"LoggingLevel"] intValue];
+ self.privateHandle = hb_init(loggingLevel, 0);
+
+ /* If scanning we need to do some extra setup of the job. */
+ if (job->indepth_scan == 1)
+ {
+ char *x264opts_tmp;
+ /* When subtitle scan is enabled do a fast pre-scan job
+ * which will determine which subtitles to enable, if any. */
+ job->pass = -1;
+ x264opts_tmp = job->advanced_opts;
+
+ job->advanced_opts = NULL;
+ job->indepth_scan = 1;
+
+ /* Add the pre-scan job */
+ hb_add(self.privateHandle, job);
+ job->advanced_opts = x264opts_tmp;
+ }
+
+ /* Go ahead and perform the actual encoding preview scan */
+ job->indepth_scan = 0;
+ job->pass = 0;
+
+ hb_add(self.privateHandle, job);
+
+ /* we need to clean up the various lists after the job(s) have been set */
+ hb_job_reset(job);
+
+ /* start the actual encode */
+ self.encodeState = EncodeStateWorking;
+ hb_system_sleep_prevent(self.privateHandle);
+
+ [self startHBTimer];
+
+ hb_start(self.privateHandle);
+
+ return YES;
+}
+
+/**
+ * Cancels the encoding process
+ */
+- (void) cancel
+{
+ if (self.privateHandle)
+ {
+ hb_state_t s;
+ hb_get_state2(self.privateHandle, &s);
+
+ if (self.encodeState && (s.state == HB_STATE_WORKING ||
+ s.state == HB_STATE_PAUSED))
+ {
+ self.encodeState = EncodeStateCancelled;
+ hb_stop(self.privateHandle);
+ hb_system_sleep_allow(self.privateHandle);
+ }
+ }
+}
+
+- (void) startHBTimer
+{
+ if (!self.timer)
+ {
+ self.timer = [NSTimer scheduledTimerWithTimeInterval:0.5
+ target:self
+ selector:@selector(updateState)
+ userInfo:nil
+ repeats:YES];
+ }
+}
+
+- (void) stopHBTimer
+{
+ [self.timer invalidate];
+ self.timer = nil;
+}
+
+- (void) updateState
+{
+ hb_state_t s;
+ hb_get_state(self.privateHandle, &s);
+
+ switch( s.state )
+ {
+ case HB_STATE_IDLE:
+ case HB_STATE_SCANNING:
+ case HB_STATE_SCANDONE:
+ break;
+
+ case HB_STATE_WORKING:
+ {
+ NSMutableString *info = [NSMutableString stringWithFormat: @"Encoding preview: %.2f %%", 100.0 * s.param.working.progress];
+
+ if( s.param.working.seconds > -1 )
+ {
+ [info appendFormat:@" (%.2f fps, avg %.2f fps, ETA %02dh%02dm%02ds)",
+ s.param.working.rate_cur, s.param.working.rate_avg, s.param.working.hours,
+ s.param.working.minutes, s.param.working.seconds];
+ }
+
+ double progress = 100.0 * s.param.working.progress;
+
+ [self.delegate updateProgress:progress info:info];
+
+ break;
+ }
+
+ case HB_STATE_MUXING:
+ {
+ NSString *info = @"Muxing Preview…";
+ double progress = 100.0;
+
+ [self.delegate updateProgress:progress info:info];
+
+ break;
+ }
+
+ case HB_STATE_PAUSED:
+ break;
+
+ case HB_STATE_WORKDONE:
+ {
+ [self stopHBTimer];
+
+ // Delete all remaining jobs since libhb doesn't do this on its own.
+ hb_job_t * job;
+ while( ( job = hb_job(self.privateHandle, 0) ) )
+ hb_rem( self.handle, job );
+
+ hb_system_sleep_allow(self.privateHandle);
+ hb_stop(self.privateHandle);
+ hb_close(&_privateHandle);
+ self.privateHandle = NULL;
+
+ /* Encode done, call the delegate and close libhb handle */
+ if (self.encodeState != EncodeStateCancelled)
+ {
+ [self.delegate didCreateMovieAtURL:self.fileURL];
+ }
+
+ self.encodeState = EncodeStateIdle;
+
+ break;
+ }
+ }
+}
+
+#pragma mark -
+
+- (void) dealloc
+{
+ [_timer invalidate];
+ [_timer release];
+ _timer = nil;
+
+ if (_privateHandle) {
+ hb_system_sleep_allow(self.privateHandle);
+ hb_stop(_privateHandle);
+ hb_close(&_privateHandle);
+ }
+
+ [_fileURL release];
+ _fileURL = nil;
+ [_picturePreviews release];
+ _picturePreviews = nil;
+
+ [super dealloc];
+}
+
+@end
diff --git a/macosx/HandBrake.xcodeproj/project.pbxproj b/macosx/HandBrake.xcodeproj/project.pbxproj
index 149933459..147e4100f 100644
--- a/macosx/HandBrake.xcodeproj/project.pbxproj
+++ b/macosx/HandBrake.xcodeproj/project.pbxproj
@@ -122,6 +122,7 @@
27D6C77314B102DA00B785E4 /* libxml2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 27D6C74014B102DA00B785E4 /* libxml2.a */; };
3490BCB41614CF8D002A5AD7 /* HandBrake.icns in Resources */ = {isa = PBXBuildFile; fileRef = 3490BCB31614CF8D002A5AD7 /* HandBrake.icns */; };
46AB433515F98A2B009C0961 /* DockTextField.m in Sources */ = {isa = PBXBuildFile; fileRef = 46AB433415F98A2B009C0961 /* DockTextField.m */; };
+ A9D1E41718262364002F6424 /* HBPreviewGenerator.m in Sources */ = {isa = PBXBuildFile; fileRef = A9D1E41618262364002F6424 /* HBPreviewGenerator.m */; };
A9E1467B16BC2ABD00C307BC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */; };
A9E1468016BC2AD800C307BC /* next-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467C16BC2AD800C307BC /* next-p.pdf */; };
A9E1468116BC2AD800C307BC /* pause-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467D16BC2AD800C307BC /* pause-p.pdf */; };
@@ -315,6 +316,8 @@
34FF2FC014EEC363004C2400 /* HBAdvancedController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAdvancedController.h; sourceTree = "<group>"; };
46AB433315F98A2B009C0961 /* DockTextField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DockTextField.h; sourceTree = "<group>"; };
46AB433415F98A2B009C0961 /* DockTextField.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DockTextField.m; sourceTree = "<group>"; };
+ A9D1E41518262364002F6424 /* HBPreviewGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBPreviewGenerator.h; sourceTree = "<group>"; };
+ A9D1E41618262364002F6424 /* HBPreviewGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBPreviewGenerator.m; sourceTree = "<group>"; };
A9E1467A16BC2ABD00C307BC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = /System/Library/Frameworks/QuartzCore.framework; sourceTree = "<absolute>"; };
A9E1467C16BC2AD800C307BC /* next-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "next-p.pdf"; sourceTree = "<group>"; };
A9E1467D16BC2AD800C307BC /* pause-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "pause-p.pdf"; sourceTree = "<group>"; };
@@ -561,6 +564,8 @@
273F20A214ADBE670021BE6D /* HBPresets.m */,
273F20A314ADBE670021BE6D /* HBPreviewController.h */,
273F20A414ADBE670021BE6D /* HBPreviewController.m */,
+ A9D1E41518262364002F6424 /* HBPreviewGenerator.h */,
+ A9D1E41618262364002F6424 /* HBPreviewGenerator.m */,
273F20A514ADBE670021BE6D /* HBQueueController.h */,
273F20A614ADBE670021BE6D /* HBQueueController.mm */,
273F20A714ADBE670021BE6D /* HBSubtitles.h */,
@@ -897,6 +902,7 @@
273F20B514ADBE670021BE6D /* HBPreferencesController.m in Sources */,
273F20B614ADBE670021BE6D /* HBPresets.m in Sources */,
273F20B714ADBE670021BE6D /* HBPreviewController.m in Sources */,
+ A9D1E41718262364002F6424 /* HBPreviewGenerator.m in Sources */,
273F20B814ADBE670021BE6D /* HBQueueController.mm in Sources */,
273F20B914ADBE670021BE6D /* HBSubtitles.m in Sources */,
273F20BA14ADBE670021BE6D /* PictureController.m in Sources */,
diff --git a/macosx/PictureController.m b/macosx/PictureController.m
index e5b30844a..7bf9bf404 100644
--- a/macosx/PictureController.m
+++ b/macosx/PictureController.m
@@ -12,7 +12,7 @@
{
hb_title_t * fTitle;
- PreviewController * fPreviewController;
+ HBPreviewController * fPreviewController;
/* Picture Sizing */
IBOutlet NSTabView * fSizeFilterView;
@@ -126,7 +126,7 @@
_decombCustomString = @"";
_denoiseCustomString = @"";
- fPreviewController = [[PreviewController alloc] init];
+ fPreviewController = [[HBPreviewController alloc] init];
}
return self;
@@ -191,12 +191,19 @@
- (void) setHandle: (hb_handle_t *) handle
{
- [fPreviewController SetHandle: handle];
- [fPreviewController setHBController:(HBController *)self.delegate];
+ [fPreviewController setHandle: handle];
+ [fPreviewController setDelegate:(HBController *)self.delegate];
}
- (void) setTitle: (hb_title_t *) title
{
+ fTitle = title;
+
+ if (!title) {
+ [fPreviewController setTitle:NULL];
+ return;
+ }
+
hb_job_t * job = title->job;
fTitle = title;
@@ -257,8 +264,9 @@
titleParWidth = job->anamorphic.par_width;
titleParHeight = job->anamorphic.par_height;
- [fPreviewController SetTitle:title];
+ [fPreviewController setTitle:title];
+ [self FilterSettingsChanged:nil];
[self settingsChanged:nil];
}
@@ -504,7 +512,7 @@
- (void) reloadStillPreview
{
- [fPreviewController SetTitle:fTitle];
+ [fPreviewController reload];
}
#pragma mark -
@@ -570,6 +578,9 @@
- (IBAction) settingsChanged: (id) sender
{
+ if (!fTitle)
+ return;
+
hb_job_t * job = fTitle->job;
/* if we are anything but strict anamorphic */
@@ -1038,6 +1049,9 @@
- (IBAction) FilterSettingsChanged: (id) sender
{
+ if (!fTitle)
+ return;
+
self.detelecine = [fDetelecinePopUp indexOfSelectedItem];
[self adjustFilterDisplay:fDetelecinePopUp];
@@ -1070,10 +1084,9 @@
{
fPreviewController.deinterlacePreview = NO;
}
-
+
self.grayscale = [fGrayscaleCheck state];
-
-
+
if (sender != nil)
{
[self.delegate pictureSettingsDidChange];