diff options
Diffstat (limited to 'macosx/HBAddPresetController.m')
-rw-r--r-- | macosx/HBAddPresetController.m | 79 |
1 files changed, 78 insertions, 1 deletions
diff --git a/macosx/HBAddPresetController.m b/macosx/HBAddPresetController.m index 3cdce5cb0..580673a27 100644 --- a/macosx/HBAddPresetController.m +++ b/macosx/HBAddPresetController.m @@ -6,9 +6,14 @@ #import "HBAddPresetController.h" +#import "HBAddCategoryController.h" + #import "HBAudioDefaultsController.h" #import "HBSubtitlesDefaultsController.h" +#import "HBPresetsManager.h" +#import "HBPreset.h" + @import HandBrakeKit; typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { @@ -22,6 +27,8 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { @property (unsafe_unretained) IBOutlet NSTextField *name; @property (unsafe_unretained) IBOutlet NSTextField *desc; +@property (unsafe_unretained) IBOutlet NSPopUpButton *categories; + @property (unsafe_unretained) IBOutlet NSPopUpButton *picSettingsPopUp; @property (unsafe_unretained) IBOutlet NSTextField *picWidth; @property (unsafe_unretained) IBOutlet NSTextField *picHeight; @@ -30,6 +37,10 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { @property (nonatomic, strong) HBPreset *preset; @property (nonatomic, strong) HBMutablePreset *mutablePreset; +@property (nonatomic, strong) HBPreset *selectedCategory; + +@property (nonatomic, strong) HBPresetsManager *manager; + @property (nonatomic) int width; @property (nonatomic) int height; @@ -42,13 +53,14 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { @implementation HBAddPresetController -- (instancetype)initWithPreset:(HBPreset *)preset customWidth:(int)customWidth customHeight:(int)customHeight defaultToCustom:(BOOL)defaultToCustom +- (instancetype)initWithPreset:(HBPreset *)preset presetManager:(HBPresetsManager *)manager customWidth:(int)customWidth customHeight:(int)customHeight defaultToCustom:(BOOL)defaultToCustom { self = [super initWithWindowNibName:@"AddPreset"]; if (self) { NSParameterAssert(preset); _mutablePreset = [preset mutableCopy]; + _manager = manager; _width = customWidth; _height = customHeight; _defaultToCustom = defaultToCustom; @@ -59,6 +71,17 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { - (void)windowDidLoad { [super windowDidLoad]; + // Build the categories menu, and select the first + [self buildCategoriesMenu]; + if ([self.categories selectItemWithTag:2] == NO) + { + HBPreset *category = [[HBPreset alloc] initWithCategoryName:@"My Presets" builtIn:NO]; + [self.manager addPreset:category]; + NSMenuItem *item = [self buildMenuItemWithCategory:category]; + [self.categories.menu insertItem:item atIndex:2]; + [self.categories selectItemWithTag:2]; + } + // Populate the preset picture settings popup. // Use [NSMenuItem tag] to store preset values for each option. @@ -87,6 +110,59 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { [self addPresetPicDropdownChanged:nil]; } +/** + * Adds the presets list to the menu. + */ +- (void)buildCategoriesMenu +{ + for (HBPreset *preset in self.manager.root.children) + { + if (preset.isBuiltIn == NO && preset.isLeaf == NO) + { + [self.categories.menu addItem:[self buildMenuItemWithCategory:preset]]; + } + } +} + +- (NSMenuItem *)buildMenuItemWithCategory:(HBPreset *)preset +{ + NSMenuItem *item = [[NSMenuItem alloc] init]; + item.title = preset.name; + item.toolTip = preset.presetDescription; + item.tag = 2; + + item.action = @selector(selectCategoryFromMenu:); + item.representedObject = preset; + + return item; +} + +- (IBAction)showNewCategoryWindow:(id)sender +{ + HBAddCategoryController *addCategoryController = [[HBAddCategoryController alloc] initWithPresetManager:self.manager]; + + [NSApp beginSheet:addCategoryController.window modalForWindow:self.window modalDelegate:self didEndSelector:@selector(categorySheetDidEnd:returnCode:contextInfo:) contextInfo:(void *)CFBridgingRetain(addCategoryController)]; +} + +- (void)categorySheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo +{ + HBAddCategoryController *addCategoryController = (HBAddCategoryController *)CFBridgingRelease(contextInfo); + + if (returnCode == NSModalResponseOK) + { + NSMenuItem *item = [self buildMenuItemWithCategory:addCategoryController.category]; + [self.categories.menu insertItem:item atIndex:2]; + } + + [self.categories selectItemWithTag:2]; + +} + +- (IBAction)selectCategoryFromMenu:(NSMenuItem *)sender +{ + self.selectedCategory = sender.representedObject; +} + - (IBAction)addPresetPicDropdownChanged:(id)sender { if (self.picSettingsPopUp.selectedItem.tag == HBAddPresetControllerModeCustom) @@ -175,6 +251,7 @@ typedef NS_ENUM(NSUInteger, HBAddPresetControllerMode) { [newPreset cleanUp]; self.preset = [newPreset copy]; + [self.selectedCategory insertObject:self.preset inChildrenAtIndex:0]; [self.window orderOut:nil]; [NSApp endSheet:self.window returnCode:NSModalResponseContinue]; |