OSDN Git Service

MacGui: Debug Window to read libhb output like cli in inspector window
authordynaflash <dynaflash@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 21 May 2007 16:50:21 +0000 (16:50 +0000)
committerdynaflash <dynaflash@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Mon, 21 May 2007 16:50:21 +0000 (16:50 +0000)
- Thank You Cleaner!!
- Adds Debug Output to Window menu
- Adds Verbose pref to preferences menu
- MacGui now reads output from libhb like cli
- May add pref to open Debug Output window upon launch
- All credit goes to Cleaner, Thank You!

git-svn-id: svn://localhost/HandBrake/trunk@592 b64f7644-9d1e-0410-96f1-a4d463321fa5

14 files changed:
macosx/Controller.h
macosx/Controller.mm
macosx/English.lproj/MainMenu.nib/classes.nib
macosx/English.lproj/MainMenu.nib/info.nib
macosx/English.lproj/MainMenu.nib/keyedobjects.nib
macosx/English.lproj/OutputPanel.nib/classes.nib [new file with mode: 0644]
macosx/English.lproj/OutputPanel.nib/info.nib [new file with mode: 0644]
macosx/English.lproj/OutputPanel.nib/keyedobjects.nib [new file with mode: 0644]
macosx/HBOutputPanelController.h [new file with mode: 0644]
macosx/HBOutputPanelController.m [new file with mode: 0644]
macosx/HBOutputRedirect.h [new file with mode: 0644]
macosx/HBOutputRedirect.m [new file with mode: 0644]
macosx/HandBrake.xcodeproj/project.pbxproj
macosx/PrefsController.m

index 0e846bd..89755bd 100644 (file)
@@ -15,6 +15,8 @@
 #include "PictureController.h"
 #include "QueueController.h"
 
+@class HBOutputPanelController;
+
 @interface HBController : NSObject <GrowlApplicationBridgeDelegate>
 
 {
     /* integer to set to determine the previous state
        of encode 0==idle, 1==encoding, 2==cancelled*/
     int                            fEncodeState;
+       
+       HBOutputPanelController *outputPanel;
 }
 
 - (void)     TranslateStrings;
 // Growl methods
 - (NSDictionary *) registrationDictionaryForGrowl;
 -(IBAction)showGrowlDoneNotification:(id)sender;
+- (IBAction)showDebugOutputPanel:(id)sender;
 
 @end
 
index e4d9cbb..952514a 100644 (file)
@@ -6,6 +6,7 @@
 
 #include "Controller.h"
 #include "a52dec/a52.h"
+#import "HBOutputPanelController.h"
 
 #define _(a) NSLocalizedString(a,NULL)
 
@@ -36,21 +37,20 @@ static int FormatSettings[3][4] =
 {
     self    = [super init];
     fHandle = NULL;
+       outputPanel = [[HBOutputPanelController alloc] init];
     return self;
 }
 
 - (void) applicationDidFinishLaunching: (NSNotification *) notification
 {
-
-
     int    build;
     char * version;
 
+    // Init libhb
+       int debugLevel = [[NSUserDefaults standardUserDefaults] boolForKey:@"ShowVerboseOutput"] ? HB_DEBUG_ALL : HB_DEBUG_NONE;
+    fHandle = hb_init(debugLevel, [[NSUserDefaults standardUserDefaults] boolForKey:@"CheckForUpdates"]);
 
-    /* Init libhb */
-    fHandle = hb_init( HB_DEBUG_NONE, [[NSUserDefaults
-        standardUserDefaults] boolForKey:@"CheckForUpdates"] );
-       /* Set the Growl Delegate */
+       // Set the Growl Delegate
        HBController *hbGrowlDelegate = [[HBController alloc] init];
        [GrowlApplicationBridge setGrowlDelegate: hbGrowlDelegate];    
     /* Init others controllers */
@@ -93,13 +93,17 @@ static int FormatSettings[3][4] =
     {
         [self Cancel: NULL];
         return NSTerminateCancel;
-    }
-    
-    /* Clean up */
-    hb_close( &fHandle );
+    }    
     return NSTerminateNow;
 }
 
+- (void)applicationWillTerminate:(NSNotification *)aNotification
+{
+       [outputPanel release];
+       hb_close(&fHandle);
+}
+
+
 - (void) awakeFromNib
 {
     [fWindow center];
@@ -3347,5 +3351,10 @@ id theRecord, theValue;
         URLWithString:@"http://handbrake.m0k.org/trac/wiki/HandBrakeGuide"]];
 }
 
+- (IBAction)showDebugOutputPanel:(id)sender
+{
+       [outputPanel showOutputPanel:nil];
+}
+
 
 @end
index ed1144b..6569a8d 100644 (file)
@@ -2,14 +2,15 @@
     IBClasses = (
         {
             ACTIONS = {
+                AddAllAudioTracksToPopUp = id; 
                 AddFactoryPresets = id; 
-                AddPreset = id; 
                 AddToQueue = id; 
                 AddUserPreset = id; 
                 AudioTrackMixdownChanged = id; 
                 AudioTrackPopUpChanged = id; 
                 BrowseFile = id; 
                 CalculateBitrate = id; 
+                CalculatePictureSizing = id; 
                 Cancel = id; 
                 ChapterPopUpChanged = id; 
                 CloseAddPresetPanel = id; 
@@ -17,7 +18,6 @@
                 CustomSettingUsed = id; 
                 DeleteFactoryPresets = id; 
                 DeletePreset = id; 
-                EnableQueue = id; 
                 EncoderPopUpChanged = id; 
                 FormatPopUpChanged = id; 
                 InsertPreset = id; 
@@ -26,7 +26,9 @@
                 OpenUserGuide = id; 
                 Pause = id; 
                 QualitySliderChanged = id; 
+                RevertPictureSizeToMax = id; 
                 Rip = id; 
+                SetEnabledStateOfAudioMixdownControls = id; 
                 ShowAddPresetPanel = id; 
                 ShowPicturePanel = id; 
                 ShowQueuePanel = id; 
                 VideoMatrixChanged = id; 
                 X264AdvancedOptionsChanged = id; 
                 X264AdvancedOptionsSet = id; 
+                X264AdvancedOptionsSetCurrentSettings = id; 
+                X264AdvancedOptionsStandardizeOptString = id; 
+                showDebugOutputPanel = id; 
+                showGrowlDoneNotification = id; 
                 tableViewSelected = id; 
             }; 
             CLASS = HBController; 
                 fPresetDrawer = NSDrawer; 
                 fPresetNewName = NSTextField; 
                 fPresetNewPicSettingsPopUp = NSPopUpButton; 
-                fPresetSaveButton = NSButton; 
                 fPresetSelectedDisplay = NSTextField; 
                 fPresetsAdd = NSButton; 
                 fPresetsDelete = NSButton; 
index 899a5ac..974d940 100644 (file)
@@ -9,7 +9,7 @@
                <key>1843</key>
                <string>863 409 220 592 0 0 1920 1058 </string>
                <key>29</key>
-               <string>1793 762 365 44 1440 0 1280 1024 </string>
+               <string>281 404 365 44 0 0 1280 778 </string>
        </dict>
        <key>IBFramework Version</key>
        <string>446.1</string>
        </array>
        <key>IBOpenObjects</key>
        <array>
+               <integer>1438</integer>
+               <integer>29</integer>
                <integer>21</integer>
        </array>
        <key>IBSystem Version</key>
-       <string>8L127</string>
+       <string>8P2137</string>
        <key>IBUserGuides</key>
        <dict>
                <key>21</key>
index a3c716c..d492085 100644 (file)
Binary files a/macosx/English.lproj/MainMenu.nib/keyedobjects.nib and b/macosx/English.lproj/MainMenu.nib/keyedobjects.nib differ
diff --git a/macosx/English.lproj/OutputPanel.nib/classes.nib b/macosx/English.lproj/OutputPanel.nib/classes.nib
new file mode 100644 (file)
index 0000000..f9f53db
--- /dev/null
@@ -0,0 +1,13 @@
+{
+    IBClasses = (
+        {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, 
+        {
+            ACTIONS = {clearOutput = id; copyAllOutputToPasteboard = id; showOutputPanel = id; }; 
+            CLASS = HBOutputPanelController; 
+            LANGUAGE = ObjC; 
+            OUTLETS = {outputPanel = NSPanel; textView = NSTextView; }; 
+            SUPERCLASS = NSObject; 
+        }
+    ); 
+    IBVersion = 1; 
+}
\ No newline at end of file
diff --git a/macosx/English.lproj/OutputPanel.nib/info.nib b/macosx/English.lproj/OutputPanel.nib/info.nib
new file mode 100644 (file)
index 0000000..6f7e1db
--- /dev/null
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>IBDocumentLocation</key>
+       <string>69 7 356 240 0 0 1280 778 </string>
+       <key>IBEditorPositions</key>
+       <dict>
+               <key>11</key>
+               <string>86 296 145 68 0 0 1280 778 </string>
+       </dict>
+       <key>IBFramework Version</key>
+       <string>446.1</string>
+       <key>IBOpenObjects</key>
+       <array>
+               <integer>5</integer>
+               <integer>11</integer>
+       </array>
+       <key>IBSystem Version</key>
+       <string>8P2137</string>
+</dict>
+</plist>
diff --git a/macosx/English.lproj/OutputPanel.nib/keyedobjects.nib b/macosx/English.lproj/OutputPanel.nib/keyedobjects.nib
new file mode 100644 (file)
index 0000000..f1c2519
Binary files /dev/null and b/macosx/English.lproj/OutputPanel.nib/keyedobjects.nib differ
diff --git a/macosx/HBOutputPanelController.h b/macosx/HBOutputPanelController.h
new file mode 100644 (file)
index 0000000..c2b6bd7
--- /dev/null
@@ -0,0 +1,30 @@
+/**
+ * @file
+ * @date 18.5.2007
+ *
+ * Interface of class HBOutputPanelController.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+/**
+ * This class implements a panel that displays all text that is written
+ * to stderr. User can easily copy the text to pasteboard from context menu.
+ */
+@interface HBOutputPanelController : NSObject
+{
+       /// Panel that displays debug output.
+       IBOutlet NSPanel *outputPanel;
+       
+       /// Textview that displays debug output.
+       IBOutlet NSTextView *textView;
+       
+       /// Text storage for the debug output.
+       NSTextStorage *outputTextStorage;
+}
+
+- (IBAction)showOutputPanel:(id)sender;
+- (IBAction)clearOutput:(id)sender;
+- (IBAction)copyAllOutputToPasteboard:(id)sender;
+
+@end
diff --git a/macosx/HBOutputPanelController.m b/macosx/HBOutputPanelController.m
new file mode 100644 (file)
index 0000000..1954986
--- /dev/null
@@ -0,0 +1,95 @@
+/**
+ * @file
+ * @date 18.5.2007
+ *
+ * Implementation of class HBOutputPanelController.
+ */
+
+#import "HBOutputPanelController.h"
+#import "HBOutputRedirect.h"
+
+/// Maximum amount of characters that can be shown in the view.
+#define TextStorageUpperSizeLimit 20000
+
+/// When old output is removed, this is the amount of characters that will be
+/// left in outputTextStorage.
+#define TextStorageLowerSizeLimit 15000
+
+@implementation HBOutputPanelController
+
+/**
+ * Initializes the object, creates outputTextStorage and starts redirection of stderr.
+ */
+- (id)init
+{
+       if (self = [super init])
+       {
+               outputTextStorage = [[NSTextStorage alloc] init];
+               [[HBOutputRedirect stderrRedirect] addListener:self];
+       }
+       return self;
+}
+
+/**
+ * Stops redirection of stderr and releases resources.
+ */
+- (void)dealloc
+{
+       [[HBOutputRedirect stderrRedirect] removeListener:self];        
+       [outputTextStorage release];
+       [outputPanel release];
+       [super dealloc];
+}
+
+/**
+ * Loads output panel from OutputPanel.nib and shwos it.
+ */
+- (IBAction)showOutputPanel:(id)sender
+{
+       if (!outputPanel)
+       {
+               BOOL loadSucceeded = [NSBundle loadNibNamed:@"OutputPanel" owner:self] && outputPanel;
+               NSAssert(loadSucceeded, @"Could not open nib file");
+               
+               [outputPanel setFrameAutosaveName:@"OutputPanelFrame"];
+               [[textView layoutManager] replaceTextStorage:outputTextStorage];
+       }
+               
+    [textView scrollRangeToVisible:NSMakeRange([outputTextStorage length], 0)];
+       [outputPanel orderFront:nil];
+}
+
+/**
+ * Displays text received from HBOutputRedirect in the text view.
+ */
+- (void)stderrRedirect:(NSString *)text
+{
+       NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:text];
+       [outputTextStorage appendAttributedString:attributedString];
+       [attributedString release];
+
+       if ([outputTextStorage length] > TextStorageUpperSizeLimit)
+               [outputTextStorage deleteCharactersInRange:NSMakeRange(0, [outputTextStorage length] - TextStorageLowerSizeLimit)];
+
+    [textView scrollRangeToVisible:NSMakeRange([outputTextStorage length], 0)];
+}
+
+/**
+ * Clears the output window.
+ */
+- (IBAction)clearOutput:(id)sender
+{
+       [outputTextStorage deleteCharactersInRange:NSMakeRange(0, [outputTextStorage length])];
+}
+
+/**
+ * Copies all text in the output window to pasteboard.
+ */
+- (IBAction)copyAllOutputToPasteboard:(id)sender
+{
+       NSPasteboard *pboard = [NSPasteboard generalPasteboard];
+       [pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
+       [pboard setString:[outputTextStorage string] forType:NSStringPboardType];
+}
+
+@end
diff --git a/macosx/HBOutputRedirect.h b/macosx/HBOutputRedirect.h
new file mode 100644 (file)
index 0000000..562f094
--- /dev/null
@@ -0,0 +1,60 @@
+/**
+ * @file
+ * @date 17.5.2007
+ *
+ * Interface of class HBOutputRedirect.
+ */
+
+#import <Cocoa/Cocoa.h>
+
+/**
+ * This class is used to redirect @c stdout and @c stderr outputs. It is never
+ * created directly; @c stdoutRedirect and @c stderrRedirect class methods
+ * should be use instead.
+ *
+ * @note Redirection is done by replacing @c _write functions for @c stdout and
+ *              @c stderr streams. Because of this messages written by NSLog(), for
+ *              example are not redirected. I consider this a good thing, but if more
+ *              universal redirecting is needed, it can be done at file descriptor
+ *              level.
+ */
+@interface HBOutputRedirect : NSObject
+{
+       /// Set that contains all registered listeners for this output.
+       NSMutableSet *listeners;
+       
+       /// Selector that is called on listeners to forward the output.
+       SEL forwardingSelector;
+
+       /// Output stream (@c stdout or @c stderr) redirected by this object.
+       FILE *stream;
+       
+       /// Pointer to old write function for the stream.
+       int     (*oldWriteFunc)(void *, const char *, int);
+       
+       NSLock *lock;
+}
+
++ (id)stdoutRedirect;
++ (id)stderrRedirect;
+
+- (void)addListener:(id)aListener;
+- (void)removeListener:(id)aListener;
+
+@end
+
+/* Here is another technique to redirect stderr, but it is done at lower level
+   which also redirects NSLog() and other writes that are done directly to the
+   file descriptor. This method is not used by HBOutputRedirect, but should
+   be easy to implement if needed. Code is untested, but this is shows basic 
+   idea for future reference.
+
+       // Create a pipe
+       NSPipe *pipe = [[NSPipe alloc] init];
+
+       // Connect stderr to the writing end of the pipe
+       dup2([[pipe fileHandleForWriting] fileDescriptor], STDERR_FILENO);      
+       
+       // Get reading end of the pipe, we can use this to read stderr
+       NSFileHandle *fh = [pipe fileHandleForReading];
+*/
diff --git a/macosx/HBOutputRedirect.m b/macosx/HBOutputRedirect.m
new file mode 100644 (file)
index 0000000..4fab901
--- /dev/null
@@ -0,0 +1,190 @@
+/**
+ * @file
+ * @date 17.5.2007
+ *
+ * Implementation of class HBOutputRedirect.
+ */
+
+#import "HBOutputRedirect.h"
+
+/// Global pointer to HBOutputRedirect object that manages redirects for stdout.
+static HBOutputRedirect *g_stdoutRedirect = nil;
+
+/// Global pointer to HBOutputRedirect object that manages redirects for stderr.
+static HBOutputRedirect *g_stderrRedirect = nil;
+
+@interface HBOutputRedirect (Private)
+- (id)initWithStream:(FILE *)aStream selector:(SEL)aSelector;
+- (void)startRedirect;
+- (void)stopRedirect;
+- (void)forwardOutput:(NSData *)data;
+@end
+
+/**
+ * Function that replaces stdout->_write and forwards stdout to g_stdoutRedirect.
+ */
+int    stdoutwrite(void *inFD, const char *buffer, int size)
+{
+       NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+       NSData *data = [[NSData alloc] initWithBytes:buffer length:size];
+       [g_stdoutRedirect performSelectorOnMainThread:@selector(forwardOutput:) withObject:data waitUntilDone:NO];
+       [data release];
+       [pool release];
+       return size;
+}
+
+/**
+ * Function that replaces stderr->_write and forwards stderr to g_stderrRedirect.
+ */
+int    stderrwrite(void *inFD, const char *buffer, int size)
+{
+       NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+       NSData *data = [[NSData alloc] initWithBytes:buffer length:size];
+       [g_stderrRedirect performSelectorOnMainThread:@selector(forwardOutput:) withObject:data waitUntilDone:NO];
+       [data release];
+       [pool release];
+       return size;
+}
+
+@implementation HBOutputRedirect
+
+/**
+ * Returns HBOutputRedirect object used to redirect stdout.
+ */
++ (id)stdoutRedirect
+{
+       if (!g_stdoutRedirect)
+               g_stdoutRedirect = [[HBOutputRedirect alloc] initWithStream:stdout selector:@selector(stdoutRedirect:)];
+               
+       return g_stdoutRedirect;
+}
+
+/**
+ * Returns HBOutputRedirect object used to redirect stderr.
+ */
++ (id)stderrRedirect
+{
+       if (!g_stderrRedirect)
+               g_stderrRedirect = [[HBOutputRedirect alloc] initWithStream:stderr selector:@selector(stderrRedirect:)];
+               
+       return g_stderrRedirect;
+}
+
+/**
+ * Adds specified object as listener for this output. Method @c stdoutRedirect:
+ * or @c stderrRedirect: of the listener is called to redirect the output.
+ */
+- (void)addListener:(id)aListener
+{
+       NSAssert2([aListener respondsToSelector:forwardingSelector], @"Object %@ doesn't respond to selector \"%@\"", aListener, NSStringFromSelector(forwardingSelector));
+
+       if (![listeners containsObject:aListener])
+       {
+               [listeners addObject:aListener];
+               [aListener release];
+       }
+       
+       if ([listeners count] > 0)
+               [self startRedirect];
+}
+
+/**
+ * Stops forwarding for this output to the specified listener object.
+ */
+- (void)removeListener:(id)aListener
+{
+       if ([listeners containsObject:aListener])
+       {
+               [aListener retain];
+               [listeners removeObject:aListener];
+       }
+
+       // If last listener is removed, stop redirecting output and autorelease
+       // self. Remember to set proper global pointer to NULL so the object is
+       // recreated again when needed.
+       if ([listeners count] == 0)
+       {
+               [self stopRedirect];
+               [self autorelease];
+
+               if (self == g_stdoutRedirect)
+                       g_stdoutRedirect = NULL;
+               else if (self == g_stderrRedirect)
+                       g_stderrRedirect = NULL;
+       }
+}
+
+@end
+
+@implementation HBOutputRedirect (Private)
+
+/**
+ * Private constructor which should not be called from outside. This is used to
+ * initialize the class at @c stdoutRedirect and @c stderrRedirect.
+ *
+ * @param aStream      Stream that wil be redirected (stdout or stderr).
+ * @param aSelector    Selector that will be called in listeners to redirect the stream.
+ *
+ * @return New HBOutputRedirect object.
+ */
+- (id)initWithStream:(FILE *)aStream selector:(SEL)aSelector
+{
+       if (self = [super init])
+       {
+               listeners = [[NSMutableSet alloc] init];
+               forwardingSelector = aSelector;
+               stream = aStream;
+               oldWriteFunc = NULL;
+               lock = [[NSLock alloc] init];
+       }
+       return self;
+}
+
+/**
+ * Frees all the listeners and deallocs the object.
+ */
+- (void)dealloc
+{
+       [listeners release];
+       [super dealloc];
+}
+
+/**
+ * Starts redirecting the stream by redirecting its output to function
+ * @c stdoutwrite() or @c stderrwrite(). Old _write function is stored to
+ * @c oldWriteFunc so it can be restored. 
+ */
+- (void)startRedirect
+{
+       if (!oldWriteFunc)
+       {
+               oldWriteFunc = stream->_write;
+               stream->_write = stream == stdout ? stdoutwrite : stderrwrite;
+       }
+}
+
+/**
+ * Stops redirecting of the stream by returning the stream's _write function
+ * to original.
+ */
+- (void)stopRedirect
+{
+       if (oldWriteFunc)
+       {
+               stream->_write = oldWriteFunc;
+               oldWriteFunc = NULL;
+       }
+}
+
+/**
+ * Called from @c stdoutwrite() and @c stderrwrite() to forward the output to 
+ * listeners.
+ */ 
+- (void)forwardOutput:(NSData *)data
+{
+       NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
+       [listeners makeObjectsPerformSelector:forwardingSelector withObject:string];
+       [string release];
+}
+
+@end
index 43f2ccb..e978dc9 100644 (file)
                0DFF0B790B6BC72A00549488 /* deca52.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9D0B4CAB100064E04C /* deca52.c */; };
                0DFF0B7A0B6BC72A00549488 /* decavcodec.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC9E0B4CAB100064E04C /* decavcodec.c */; };
                0DFF0C100B6BCEE800549488 /* test.c in Sources */ = {isa = PBXBuildFile; fileRef = 526FBC760B4CA8F40064E04C /* test.c */; };
+               253886010BFE0A5B0064E995 /* HBOutputRedirect.h in Headers */ = {isa = PBXBuildFile; fileRef = 253885FF0BFE0A5B0064E995 /* HBOutputRedirect.h */; };
+               253886020BFE0A5B0064E995 /* HBOutputRedirect.m in Sources */ = {isa = PBXBuildFile; fileRef = 253886000BFE0A5B0064E995 /* HBOutputRedirect.m */; };
+               2538860C0BFE0B730064E995 /* OutputPanel.nib in Resources */ = {isa = PBXBuildFile; fileRef = 2538860A0BFE0B730064E995 /* OutputPanel.nib */; };
+               253886170BFE0C160064E995 /* HBOutputPanelController.h in Headers */ = {isa = PBXBuildFile; fileRef = 253886150BFE0C160064E995 /* HBOutputPanelController.h */; };
+               253886180BFE0C160064E995 /* HBOutputPanelController.m in Sources */ = {isa = PBXBuildFile; fileRef = 253886160BFE0C160064E995 /* HBOutputPanelController.m */; };
                4D1125D809D72FD200E0657B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1125D709D72FD200E0657B /* libz.dylib */; };
                4D1125D909D72FD200E0657B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 4D1125D709D72FD200E0657B /* libz.dylib */; };
                4D1EA2EA0993B09A00FDC1A2 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.mm */; };
                0DFF0B720B6BC6E600549488 /* libhb.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libhb.a; sourceTree = BUILT_PRODUCTS_DIR; };
                0DFF0C0A0B6BCEC200549488 /* HandBrakeCLI */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = HandBrakeCLI; sourceTree = BUILT_PRODUCTS_DIR; };
                1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
+               253885FF0BFE0A5B0064E995 /* HBOutputRedirect.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HBOutputRedirect.h; sourceTree = "<group>"; };
+               253886000BFE0A5B0064E995 /* HBOutputRedirect.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = HBOutputRedirect.m; sourceTree = "<group>"; };
+               2538860B0BFE0B730064E995 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/OutputPanel.nib; sourceTree = "<group>"; };
+               253886150BFE0C160064E995 /* HBOutputPanelController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBOutputPanelController.h; sourceTree = "<group>"; };
+               253886160BFE0C160064E995 /* HBOutputPanelController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBOutputPanelController.m; sourceTree = "<group>"; };
                29B97316FDCFA39411CA2CEA /* main.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; };
                29B97319FDCFA39411CA2CEA /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/MainMenu.nib; sourceTree = "<group>"; };
                29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
                                29B97318FDCFA39411CA2CEA /* MainMenu.nib */,
                                4D1EA3000993B13700FDC1A2 /* Express.nib */,
                                089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+                               2538860A0BFE0B730064E995 /* OutputPanel.nib */,
                        );
                        name = Resources;
                        sourceTree = "<group>";
                                4D2AE78A09CCB24C007E18F6 /* DriveDetector.h */,
                                593034E90BBA39A100172349 /* ChapterTitles.h */,
                                593034EA0BBA39A100172349 /* ChapterTitles.m */,
+                               253885FF0BFE0A5B0064E995 /* HBOutputRedirect.h */,
+                               253886000BFE0A5B0064E995 /* HBOutputRedirect.m */,
+                               253886150BFE0C160064E995 /* HBOutputPanelController.h */,
+                               253886160BFE0C160064E995 /* HBOutputPanelController.m */,
                        );
                        name = "HandBrake Sources";
                        sourceTree = "<group>";
                                4DD93F93082036E8008E1322 /* QueueController.h in Headers */,
                                4DD93F94082036E8008E1322 /* PrefsController.h in Headers */,
                                4D2AEA2A09CCB8FC007E18F6 /* DriveDetector.h in Headers */,
+                               253886010BFE0A5B0064E995 /* HBOutputRedirect.h in Headers */,
+                               253886170BFE0C160064E995 /* HBOutputPanelController.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                4DD93F96082036E8008E1322 /* MainMenu.nib in Resources */,
                                4DD93F97082036E8008E1322 /* InfoPlist.strings in Resources */,
                                0DFA5C7B0B8DD1E90020BC09 /* HandBrake.icns in Resources */,
+                               2538860C0BFE0B730064E995 /* OutputPanel.nib in Resources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                4DD93F9F082036E8008E1322 /* QueueController.mm in Sources */,
                                4DD93FA0082036E8008E1322 /* PrefsController.m in Sources */,
                                4D2AEA2909CCB8F9007E18F6 /* DriveDetector.m in Sources */,
+                               253886020BFE0A5B0064E995 /* HBOutputRedirect.m in Sources */,
+                               253886180BFE0C160064E995 /* HBOutputPanelController.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                        name = InfoPlist.strings;
                        sourceTree = "<group>";
                };
+               2538860A0BFE0B730064E995 /* OutputPanel.nib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               2538860B0BFE0B730064E995 /* English */,
+                       );
+                       name = OutputPanel.nib;
+                       sourceTree = "<group>";
+               };
                29B97318FDCFA39411CA2CEA /* MainMenu.nib */ = {
                        isa = PBXVariantGroup;
                        children = (
index 2af83fb..09414e1 100644 (file)
@@ -32,6 +32,7 @@
         defSrcDirectory,    @"LastSourceDirectory",
         @"NO",              @"DefaultAutoNaming",
         @"NO",              @"DefaultChapterMarkers",
+        @"NO",              @"ShowVerboseOutput",
         nil];
     
        [defaults registerDefaults: appDefaults];