rendered paste bodyIndex: macosx/Controller.mm===================================================================--- macosx/Controller.mm (revision 730)+++ macosx/Controller.mm (working copy)@@ -35,6 +35,15 @@ 0, 0 } }; +static NSString* MyDocToolbarIdentifier = @"My Document Toolbar Identifier";+static NSString* ToggleDrawerIdentifier = @"Toggle Drawer Item Identifier";+static NSString* StartEncodingIdentifier = @"Start Encoding Item Identifier";+static NSString* PauseEncodingIdentifier = @"Pause Encoding Item Identifier";+static NSString* ShowQueueIdentifier = @"Show Queue Item Identifier";+static NSString* AddToQueueIdentifier = @"Add to Queue Item Identifier";+static NSString* DebugOutputIdentifier = @"Debug Output Item Identifier";++ /******************************* * HBController implementation * *******************************/@@ -253,15 +262,192 @@ [fStatusField setStringValue: @""]; [self EnableUI: NO];- [fPauseButton setEnabled: NO];- [fRipButton setEnabled: NO];+ startButtonEnabled = NO;+ pauseButtonEnabled = NO;+ stopOrStart = NO;+ AddToQueueButtonEnabled = NO;+ resumeOrPause = NO; - /* We disable the Turbo 1st pass checkbox since we are not x264 */ [fVidTurboPassCheck setEnabled: NO]; [fVidTurboPassCheck setState: NSOffState];++ [self setupToolbar];++ } +// ============================================================+// NSToolbar Related Methods+// ============================================================++- (void) setupToolbar {+ NSToolbar *toolbar = [[[NSToolbar alloc] initWithIdentifier: MyDocToolbarIdentifier] autorelease];+ + [toolbar setAllowsUserCustomization: YES];+ [toolbar setAutosavesConfiguration: YES];+ [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];+ + [toolbar setDelegate: self];+ + [fWindow setToolbar: toolbar];+}++- (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifier: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted {+ NSToolbarItem *toolbarItem = nil;+ + if ([itemIdent isEqual: StartEncodingIdentifier]) {+ toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];++ [toolbarItem setLabel: @"Start"];+ [toolbarItem setPaletteLabel: @"Start Encoding"];++ [toolbarItem setToolTip: @"Start Encoding"];+ [toolbarItem setImage: [NSImage imageNamed: @"Play"]];++ [toolbarItem setTarget: self];+ [toolbarItem setAction: @selector(Rip:)];+ }+ else if ([itemIdent isEqual: PauseEncodingIdentifier]) {+ toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];++ [toolbarItem setLabel: @"Pause"];+ [toolbarItem setPaletteLabel: @"Pause Encoding"];++ [toolbarItem setToolTip: @"Pause Encoding"];+ [toolbarItem setImage: [NSImage imageNamed: @"Pause"]];++ [toolbarItem setTarget: self];+ [toolbarItem setAction: @selector(Pause:)];+ }+ else if ([itemIdent isEqual: ShowQueueIdentifier]) {+ toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];++ [toolbarItem setLabel: @"Show Queue"];+ [toolbarItem setPaletteLabel: @"Show Queue"];++ [toolbarItem setToolTip: @"Show Queue"];+ [toolbarItem setImage: [NSImage imageNamed: @"Brushed Window"]];++ [toolbarItem setTarget: self];+ [toolbarItem setAction: @selector(ShowQueuePanel:)];+ }+ else if ([itemIdent isEqual: AddToQueueIdentifier]) {+ toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];++ [toolbarItem setLabel: @"Add to Queue"];+ [toolbarItem setPaletteLabel: @"Add to Queue"];++ [toolbarItem setToolTip: @"Add to Queue"];+ [toolbarItem setImage: [NSImage imageNamed: @"Add"]];++ [toolbarItem setTarget: self];+ [toolbarItem setAction: @selector(AddToQueue:)];+ }+ else if ([itemIdent isEqual: DebugOutputIdentifier]) {+ toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];++ [toolbarItem setLabel: @"Debug Output"];+ [toolbarItem setPaletteLabel: @"Show Debug Output Window"];++ [toolbarItem setToolTip: @"Show Debug Output Window"];+ [toolbarItem setImage: [NSImage imageNamed: @"Terminal"]];++ [toolbarItem setTarget: self];+ [toolbarItem setAction: @selector(showDebugOutputPanel:)];+ }+ else if ([itemIdent isEqual: ToggleDrawerIdentifier]) {+ toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];++ [toolbarItem setLabel: @"Toggle Drawer"];+ [toolbarItem setPaletteLabel: @"Toggler Drawer"];++ [toolbarItem setToolTip: @"Open/Close Preset Drawer"];+ [toolbarItem setImage: [NSImage imageNamed: @"Drawer-List2"]];++ [toolbarItem setTarget: self];+ [toolbarItem setAction: @selector(toggleDrawer)];+ }+ else {+ toolbarItem = nil;+ }++ return toolbarItem;+}++- (void) toggleDrawer {+ [fPresetDrawer toggle:self];+}++- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar {+ // Required delegate method: Returns the ordered list of items to be shown in the toolbar by default + // If during the toolbar's initialization, no overriding values are found in the user defaults, or if the+ // user chooses to revert to the default items this set will be used + return [NSArray arrayWithObjects: StartEncodingIdentifier, PauseEncodingIdentifier, NSToolbarSeparatorItemIdentifier,+ AddToQueueIdentifier, ShowQueueIdentifier,+ NSToolbarFlexibleSpaceItemIdentifier, + NSToolbarSpaceItemIdentifier, DebugOutputIdentifier, ToggleDrawerIdentifier, nil];+}++- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar {+ // Required delegate method: Returns the list of all allowed items by identifier. By default, the toolbar + // does not assume any items are allowed, even the separator. So, every allowed item must be explicitly listed + // The set of allowed items is used to construct the customization palette + return [NSArray arrayWithObjects: StartEncodingIdentifier, PauseEncodingIdentifier, AddToQueueIdentifier, ShowQueueIdentifier,+ DebugOutputIdentifier, NSToolbarCustomizeToolbarItemIdentifier,+ NSToolbarFlexibleSpaceItemIdentifier, NSToolbarSpaceItemIdentifier,+ NSToolbarSeparatorItemIdentifier,ToggleDrawerIdentifier, nil];+}++- (BOOL) validateToolbarItem: (NSToolbarItem *) toolbarItem {+ // Optional method: This message is sent to us since we are the target of some toolbar item actions + BOOL enable = NO;+ if ([[toolbarItem itemIdentifier] isEqual: ToggleDrawerIdentifier]) {+ enable = YES;+ }+ if ([[toolbarItem itemIdentifier] isEqual: StartEncodingIdentifier]) {+ enable = startButtonEnabled;+ if(stopOrStart) {+ [toolbarItem setImage: [NSImage imageNamed: @"Stop"]];+ [toolbarItem setLabel: @"Stop"];+ [toolbarItem setPaletteLabel: @"Stop Encoding"];+ [toolbarItem setToolTip: @"Stop Encoding"];+ }+ else {+ [toolbarItem setImage: [NSImage imageNamed: @"Play"]];+ [toolbarItem setLabel: @"Start"];+ [toolbarItem setPaletteLabel: @"Start Encoding"];+ [toolbarItem setToolTip: @"Start Encoding"];+ }+ }+ if ([[toolbarItem itemIdentifier] isEqual: PauseEncodingIdentifier]) {+ enable = pauseButtonEnabled;+ if(resumeOrPause) {+ [toolbarItem setImage: [NSImage imageNamed: @"Play"]];+ [toolbarItem setLabel: @"Resume"];+ [toolbarItem setPaletteLabel: @"Resume Encoding"];+ [toolbarItem setToolTip: @"Resume Encoding"];+ }+ else {+ [toolbarItem setImage: [NSImage imageNamed: @"Pause"]];+ [toolbarItem setLabel: @"Pause"];+ [toolbarItem setPaletteLabel: @"Pause Encoding"];+ [toolbarItem setToolTip: @"Pause Encoding"];+ }+ }+ if ([[toolbarItem itemIdentifier] isEqual: DebugOutputIdentifier]) {+ enable = YES;+ }+ if ([[toolbarItem itemIdentifier] isEqual: ShowQueueIdentifier]) {+ enable = YES;+ }+ if ([[toolbarItem itemIdentifier] isEqual: AddToQueueIdentifier]) {+ enable = AddToQueueButtonEnabled;+ }+ return enable;+}++ // register a test notification and make // it enabled by default #define SERVICE_NAME @"Encode Done"@@ -441,13 +627,11 @@ /* Update dock icon */ [self UpdateDockIcon: progress_total]; - [fPauseButton setEnabled: YES];- [fPauseButton setTitle: _( @"Pause" )];- [fRipButton setEnabled: YES];- [fRipButton setTitle: _( @"Cancel" )];+ pauseButtonEnabled = YES;+ resumeOrPause = NO;+ startButtonEnabled = YES;+ stopOrStart = YES; -- break; } #undef p@@ -469,20 +653,20 @@ /* Update dock icon */ [self UpdateDockIcon: 1.0]; - [fPauseButton setEnabled: YES];- [fPauseButton setTitle: _( @"Pause" )];- [fRipButton setEnabled: YES];- [fRipButton setTitle: _( @"Cancel" )];+ pauseButtonEnabled = YES;+ resumeOrPause = NO;+ startButtonEnabled = YES;+ stopOrStart = YES;+ break; } #undef p case HB_STATE_PAUSED:- [fStatusField setStringValue: _( @"Paused" )];- [fPauseButton setEnabled: YES];- [fPauseButton setTitle: _( @"Resume" )];- [fRipButton setEnabled: YES];- [fRipButton setTitle: _( @"Cancel" )];+ pauseButtonEnabled = YES;+ resumeOrPause = YES;+ startButtonEnabled = YES;+ stopOrStart = YES; break; case HB_STATE_WORKDONE:@@ -490,15 +674,14 @@ [fStatusField setStringValue: _( @"Done." )]; [fRipIndicator setIndeterminate: NO]; [fRipIndicator setDoubleValue: 0.0];- [fRipButton setTitle: _( @"Start" )];+ stopOrStart = NO;+ resumeOrPause = NO; /* Restore dock icon */ [self UpdateDockIcon: -1.0]; - [fPauseButton setEnabled: NO];- [fPauseButton setTitle: _( @"Pause" )];- [fRipButton setEnabled: YES];- [fRipButton setTitle: _( @"Start" )];+ pauseButtonEnabled = NO;+ startButtonEnabled = YES; /* FIXME */ hb_job_t * job;@@ -539,6 +722,12 @@ { [self EnableUI: YES]; }+ NSRect frame = [fWindow frame];+ if (frame.size.width <= 591)+ frame.size.width = 591;+ frame.size.height += -38;+ frame.origin.y -= -38;+ [fWindow setFrame:frame display:YES animate:YES]; break; } }@@ -670,8 +859,9 @@ [self TitlePopUpChanged: NULL]; [self EnableUI: YES];- [fPauseButton setEnabled: NO];- [fRipButton setEnabled: YES];+ pauseButtonEnabled = NO;+ startButtonEnabled = YES;+ AddToQueueButtonEnabled = YES; } @@ -1090,7 +1280,7 @@ - (IBAction) Rip: (id) sender { /* Rip or Cancel ? */- if( [[fRipButton title] isEqualToString: _( @"Cancel" )] )+ if(stopOrStart) { [self Cancel: sender]; return;@@ -1166,8 +1356,14 @@ /* Disable interface */ //[self EnableUI: NO];- [fPauseButton setEnabled: NO];- [fRipButton setEnabled: NO];+ pauseButtonEnabled = NO;+ startButtonEnabled = NO;+ NSRect frame = [fWindow frame];+ if (frame.size.width <= 591)+ frame.size.width = 591;+ frame.size.height += 38;+ frame.origin.y -= 38;+ [fWindow setFrame:frame display:YES animate:YES]; } - (IBAction) Cancel: (id) sender@@ -1184,8 +1380,8 @@ if( returnCode == NSAlertAlternateReturn ) { hb_stop( fHandle );- [fPauseButton setEnabled: NO];- [fRipButton setEnabled: NO];+ pauseButtonEnabled = NO;+ startButtonEnabled = NO; /*set the fEncodeState State */ fEncodeState = 2; }@@ -1193,10 +1389,10 @@ - (IBAction) Pause: (id) sender {- [fPauseButton setEnabled: NO];- [fRipButton setEnabled: NO];-- if( [[fPauseButton title] isEqualToString: _( @"Resume" )] )+ pauseButtonEnabled = NO;+ startButtonEnabled = NO;++ if(resumeOrPause) { hb_resume( fHandle ); }Index: macosx/HandBrake.xcodeproj/project.pbxproj===================================================================--- macosx/HandBrake.xcodeproj/project.pbxproj (revision 730)+++ macosx/HandBrake.xcodeproj/project.pbxproj (working copy)@@ -114,6 +114,13 @@ 59CBD2650BBB4D1B004A3BE3 /* ChapterTitles.m in Sources */ = {isa = PBXBuildFile; fileRef = 593034EA0BBA39A100172349 /* ChapterTitles.m */; }; A29E05800BE1283E000533F5 /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A29E057F0BE1283E000533F5 /* Growl.framework */; }; A29E058B0BE12889000533F5 /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = A29E057F0BE1283E000533F5 /* Growl.framework */; };+ A986C76A0C57697300E2B326 /* Add.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A986C7630C57697300E2B326 /* Add.tiff */; };+ A986C76B0C57697300E2B326 /* Brushed Window.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A986C7640C57697300E2B326 /* Brushed Window.tiff */; };+ A986C76C0C57697300E2B326 /* Drawer-List2.png in Resources */ = {isa = PBXBuildFile; fileRef = A986C7650C57697300E2B326 /* Drawer-List2.png */; };+ A986C76D0C57697300E2B326 /* Pause.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A986C7660C57697300E2B326 /* Pause.tiff */; };+ A986C76E0C57697300E2B326 /* Play.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A986C7670C57697300E2B326 /* Play.tiff */; };+ A986C76F0C57697300E2B326 /* Stop.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A986C7680C57697300E2B326 /* Stop.tiff */; };+ A986C7700C57697300E2B326 /* Terminal.tiff in Resources */ = {isa = PBXBuildFile; fileRef = A986C7690C57697300E2B326 /* Terminal.tiff */; }; EAA526930C3B25D200944FF2 /* stream.c in Sources */ = {isa = PBXBuildFile; fileRef = EAA526920C3B25D200944FF2 /* stream.c */; }; EAA526940C3B25D200944FF2 /* stream.c in Sources */ = {isa = PBXBuildFile; fileRef = EAA526920C3B25D200944FF2 /* stream.c */; }; FC6CE2C10C495A6B001A2D5B /* muxmkv.c in Sources */ = {isa = PBXBuildFile; fileRef = FC6CE2C00C495A6B001A2D5B /* muxmkv.c */; };@@ -235,6 +242,13 @@ 593034EA0BBA39A100172349 /* ChapterTitles.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChapterTitles.m; sourceTree = "<group>"; }; 59CBD2360BBB44DA004A3BE3 /* parsecsv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = parsecsv.c; path = ../test/parsecsv.c; sourceTree = SOURCE_ROOT; }; A29E057F0BE1283E000533F5 /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Growl.framework; sourceTree = "<group>"; };+ A986C7630C57697300E2B326 /* Add.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Add.tiff; sourceTree = "<group>"; };+ A986C7640C57697300E2B326 /* Brushed Window.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = "Brushed Window.tiff"; sourceTree = "<group>"; };+ A986C7650C57697300E2B326 /* Drawer-List2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Drawer-List2.png"; sourceTree = "<group>"; };+ A986C7660C57697300E2B326 /* Pause.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Pause.tiff; sourceTree = "<group>"; };+ A986C7670C57697300E2B326 /* Play.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Play.tiff; sourceTree = "<group>"; };+ A986C7680C57697300E2B326 /* Stop.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Stop.tiff; sourceTree = "<group>"; };+ A986C7690C57697300E2B326 /* Terminal.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Terminal.tiff; sourceTree = "<group>"; }; EAA526920C3B25D200944FF2 /* stream.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = stream.c; path = ../libhb/stream.c; sourceTree = SOURCE_ROOT; }; FC6CE2C00C495A6B001A2D5B /* muxmkv.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = muxmkv.c; path = ../libhb/muxmkv.c; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */@@ -302,7 +316,6 @@ 29B97314FDCFA39411CA2CEA /* HandBrake */ = { isa = PBXGroup; children = (- FC6CE2C00C495A6B001A2D5B /* muxmkv.c */, 526FBC940B4CAA310064E04C /* Instant HandBrake Sources */, 526FBC930B4CAA260064E04C /* HandBrake Sources */, 526FBC920B4CAA120064E04C /* HandBrakeCLI Sources */,@@ -327,6 +340,7 @@ 29B97317FDCFA39411CA2CEA /* Resources */ = { isa = PBXGroup; children = (+ A986C7620C57697300E2B326 /* icons */, 0DFA5C7A0B8DD1E90020BC09 /* HandBrake.icns */, 29B97318FDCFA39411CA2CEA /* MainMenu.nib */, 2538860A0BFE0B730064E995 /* OutputPanel.nib */,@@ -353,6 +367,7 @@ 526FBC8D0B4CA9F90064E04C /* libhb Sources */ = { isa = PBXGroup; children = (+ FC6CE2C00C495A6B001A2D5B /* muxmkv.c */, EAA526920C3B25D200944FF2 /* stream.c */, 0DFA5C7E0B8DD3B60020BC09 /* declpcm.c */, 0DFA5C7F0B8DD3B60020BC09 /* decmpeg2.c */,@@ -437,6 +452,20 @@ name = "Instant HandBrake Sources"; sourceTree = "<group>"; };+ A986C7620C57697300E2B326 /* icons */ = {+ isa = PBXGroup;+ children = (+ A986C7630C57697300E2B326 /* Add.tiff */,+ A986C7640C57697300E2B326 /* Brushed Window.tiff */,+ A986C7650C57697300E2B326 /* Drawer-List2.png */,+ A986C7660C57697300E2B326 /* Pause.tiff */,+ A986C7670C57697300E2B326 /* Play.tiff */,+ A986C7680C57697300E2B326 /* Stop.tiff */,+ A986C7690C57697300E2B326 /* Terminal.tiff */,+ );+ path = icons;+ sourceTree = "<group>";+ }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */@@ -604,6 +633,13 @@ 0DFA5C7B0B8DD1E90020BC09 /* HandBrake.icns in Resources */, 2538860C0BFE0B730064E995 /* OutputPanel.nib in Resources */, 25DE1FAD0C1699E500F01FC8 /* Preferences.nib in Resources */,+ A986C76A0C57697300E2B326 /* Add.tiff in Resources */,+ A986C76B0C57697300E2B326 /* Brushed Window.tiff in Resources */,+ A986C76C0C57697300E2B326 /* Drawer-List2.png in Resources */,+ A986C76D0C57697300E2B326 /* Pause.tiff in Resources */,+ A986C76E0C57697300E2B326 /* Play.tiff in Resources */,+ A986C76F0C57697300E2B326 /* Stop.tiff in Resources */,+ A986C7700C57697300E2B326 /* Terminal.tiff in Resources */, ); runOnlyForDeploymentPostprocessing = 0; };Index: macosx/HBOutputPanelController.m===================================================================--- macosx/HBOutputPanelController.m (revision 730)+++ macosx/HBOutputPanelController.m (working copy)@@ -55,8 +55,13 @@ [outputPanel setFrameAutosaveName:@"OutputPanelFrame"]; [[textView layoutManager] replaceTextStorage:outputTextStorage];+<<<<<<< .mine+ [[textView enclosingScrollView] setLineScroll:10]; + [[textView enclosingScrollView] setPageScroll:20];+======= [[textView enclosingScrollView] setLineScroll:10]; [[textView enclosingScrollView] setPageScroll:20];+>>>>>>> .r730 } [textView scrollRangeToVisible:NSMakeRange([outputTextStorage length], 0)];Index: macosx/Controller.h===================================================================--- macosx/Controller.h (revision 730)+++ macosx/Controller.h (working copy)@@ -34,8 +34,6 @@ IBOutlet QueueController * fQueueController; IBOutlet NSPanel * fQueuePanel; IBOutlet NSTextField * fQueueStatus;- IBOutlet NSButton * fQueueAddButton;- IBOutlet NSButton * fQueueShowButton; /* Source box */ IBOutlet NSTextField * fSrcDVD1Field;@@ -205,8 +203,14 @@ of encode 0==idle, 1==encoding, 2==cancelled*/ int fEncodeState; int currentScanCount;- NSString * currentSource;- HBOutputPanelController *outputPanel;+ NSString * currentSource;+ HBOutputPanelController * outputPanel;+ + BOOL startButtonEnabled;+ BOOL pauseButtonEnabled;+ BOOL AddToQueueButtonEnabled;+ BOOL stopOrStart;+ bool resumeOrPause; } - (void) TranslateStrings;@@ -319,5 +323,7 @@ -(IBAction)showGrowlDoneNotification:(id)sender; - (IBAction)showDebugOutputPanel:(id)sender; +- (void)setupToolbar;+ @end