]> granicus.if.org Git - handbrake/commitdiff
MacGUI: Add Rename Preset dialog.
authorRodeo314 <tdskywalker@gmail.com>
Fri, 2 Feb 2018 09:57:52 +0000 (04:57 -0500)
committerBradley Sepos <bradley@bradleysepos.com>
Sat, 17 Mar 2018 21:01:56 +0000 (17:01 -0400)
@BradleyS thanks @Rodeo314 for his help with this.

macosx/English.lproj/HBRenamePresetController.xib [new file with mode: 0644]
macosx/English.lproj/MainMenu.xib
macosx/HBController.h
macosx/HBController.m
macosx/HBRenamePresetController.h [new file with mode: 0644]
macosx/HBRenamePresetController.m [new file with mode: 0644]
macosx/HandBrake.xcodeproj/project.pbxproj

diff --git a/macosx/English.lproj/HBRenamePresetController.xib b/macosx/English.lproj/HBRenamePresetController.xib
new file mode 100644 (file)
index 0000000..fed39b4
--- /dev/null
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <development version="8000" identifier="xcode"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="HBRenamePresetController">
+            <connections>
+                <outlet property="name" destination="UXm-yG-bgW" id="htS-T7-qP0"/>
+                <outlet property="renameButton" destination="WEv-SR-3sw" id="lRz-JT-RDG"/>
+                <outlet property="window" destination="C4G-OG-ksc" id="oNS-V8-CBz"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Rename Preset" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" showsToolbarButton="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="C4G-OG-ksc">
+            <windowStyleMask key="styleMask" titled="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="283" y="305" width="290" height="132"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1418"/>
+            <view key="contentView" id="3oN-GT-JmW">
+                <rect key="frame" x="0.0" y="0.0" width="290" height="132"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="A8w-ij-o7q">
+                        <rect key="frame" x="18" y="95" width="114" height="17"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="New preset name:" id="Pe0-gr-Yv4">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="UXm-yG-bgW">
+                        <rect key="frame" x="20" y="65" width="250" height="22"/>
+                        <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" title="Untitled" drawsBackground="YES" id="NQn-fS-Rbd">
+                            <font key="font" metaFont="system"/>
+                            <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                        <connections>
+                            <outlet property="delegate" destination="-2" id="Iwm-TQ-ug8"/>
+                        </connections>
+                    </textField>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="HkI-lC-Q2A">
+                        <rect key="frame" x="106" y="13" width="82" height="32"/>
+                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="N2f-jz-YyX">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="dismiss:" target="-2" id="LVI-0f-38c"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WEv-SR-3sw" userLabel="Rename Button">
+                        <rect key="frame" x="187" y="13" width="89" height="32"/>
+                        <buttonCell key="cell" type="push" title="Rename" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="Z9M-dc-5Ml">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="rename:" target="-2" id="BAK-gD-GHH"/>
+                        </connections>
+                    </button>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="UXm-yG-bgW" firstAttribute="trailing" secondItem="WEv-SR-3sw" secondAttribute="trailing" id="FMb-6L-akr"/>
+                    <constraint firstItem="HkI-lC-Q2A" firstAttribute="baseline" secondItem="WEv-SR-3sw" secondAttribute="baseline" id="SxI-wa-yJV"/>
+                    <constraint firstItem="A8w-ij-o7q" firstAttribute="leading" secondItem="UXm-yG-bgW" secondAttribute="leading" id="TKi-pl-2oX"/>
+                    <constraint firstItem="A8w-ij-o7q" firstAttribute="leading" secondItem="3oN-GT-JmW" secondAttribute="leading" constant="20" symbolic="YES" id="Tnf-NN-kbG"/>
+                    <constraint firstAttribute="bottom" secondItem="HkI-lC-Q2A" secondAttribute="bottom" constant="20" symbolic="YES" id="UNd-bY-NCa"/>
+                    <constraint firstItem="A8w-ij-o7q" firstAttribute="top" secondItem="3oN-GT-JmW" secondAttribute="top" constant="20" symbolic="YES" id="ds6-hB-jKz"/>
+                    <constraint firstItem="WEv-SR-3sw" firstAttribute="leading" secondItem="HkI-lC-Q2A" secondAttribute="trailing" constant="11" id="iPl-sl-4rt"/>
+                    <constraint firstAttribute="trailing" secondItem="UXm-yG-bgW" secondAttribute="trailing" constant="20" symbolic="YES" id="nUT-Cq-nKu"/>
+                    <constraint firstItem="UXm-yG-bgW" firstAttribute="top" secondItem="A8w-ij-o7q" secondAttribute="bottom" constant="8" symbolic="YES" id="y1i-GD-vKr"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="7b1-8k-MIb"/>
+            </connections>
+            <point key="canvasLocation" x="66" y="176"/>
+        </window>
+    </objects>
+</document>
index be6b5f15140421e489c1c6da0adb6435254f35fa..75274b917bf7d97b40588df5f27c9a1fbd5cef53 100644 (file)
                                     <action selector="setDefaultPreset:" target="-1" id="adZ-ic-MKn"/>
                                 </connections>
                             </menuItem>
+                            <menuItem isSeparatorItem="YES" tag="-1" id="2954">
+                                <modifierMask key="keyEquivalentModifierMask" command="YES"/>
+                            </menuItem>
+                            <menuItem title="Rename Preset…" tag="-1" id="1GQ-n3-jfY">
+                                <connections>
+                                    <action selector="renamePreset:" target="-1" id="ts9-w0-2WC"/>
+                                </connections>
+                            </menuItem>
                             <menuItem title="Delete Preset" tag="-1" id="CN3-Rh-gVf">
                                 <connections>
                                     <action selector="deletePreset:" target="-1" id="ZGV-Ji-MGc"/>
index b93fefb24b2133c8da89499d3c6f725a51984fa4..f650a5bf0759dad7ed42315f18ed650f96b06be8 100644 (file)
 
 // Manage User presets
 - (IBAction)showAddPresetPanel:(id)sender;
+- (IBAction)showRenamePresetPanel:(id)sender;
 - (IBAction)selectDefaultPreset:(id)sender;
 
+- (IBAction)renamePreset:(id)sender;
 - (IBAction)deletePreset:(id)sender;
 - (IBAction)reloadPreset:(id)sender;
 
index b48115efa1bfb6fd00bd25406f9ed7e049275d1d..70ec14bad73dc03d4c645997c3779baedca775e8 100644 (file)
@@ -30,6 +30,7 @@
 
 #import "HBPresetsViewController.h"
 #import "HBAddPresetController.h"
+#import "HBRenamePresetController.h"
 
 @import HandBrakeKit;
 
     }
     if (action == @selector(exportPreset:))
     {
-        return [fPresetsView validateUserInterfaceItem:menuItem];
+        return [fPresetsView validateUserInterfaceItem:menuItem] && self.job != nil;
+    }
+    if (action == @selector(selectDefaultPreset:) ||
+        action == @selector(insertCategory:))
+    {
+        return self.job != nil;
+    }
+    if (action == @selector(renamePreset:) ||
+        action == @selector(deletePreset:) ||
+        action == @selector(setDefaultPreset:))
+    {
+        return self.job != nil && self.edited == NO;//fixme
     }
 
     return YES;
     return [preset copy];
 }
 
+- (IBAction)showRenamePresetPanel:(id)sender
+{
+    [self.window HB_endEditing];
+
+    HBRenamePresetController *renamePresetController = [[HBRenamePresetController alloc] initWithPreset:self.currentPreset
+                                                                                          presetManager:presetManager];
+
+    [NSApp beginSheet:renamePresetController.window modalForWindow:self.window modalDelegate:self didEndSelector:@selector(renamePresetSheetDidEnd:returnCode:contextInfo:) contextInfo:(void *)CFBridgingRetain(renamePresetController)];
+}
+
+- (void)renamePresetSheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
+{
+    __unused HBRenamePresetController *renamePresetController = (HBRenamePresetController *)CFBridgingRelease(contextInfo);
+
+    if (returnCode != NSModalResponseCancel)
+    {
+        [self applyPreset:fPresetsView.selectedPreset];
+        [[NSNotificationCenter defaultCenter] postNotificationName:HBPresetsChangedNotification object:nil];
+    }
+}
+
 #pragma mark -
 #pragma mark Import Export Preset(s)
 
     [fPresetsView setDefault:sender];
 }
 
+- (IBAction)renamePreset:(id)sender
+{
+    fPresetsView.selectedPreset = _currentPreset;
+    [self showRenamePresetPanel:sender];
+}
+
 - (IBAction)deletePreset:(id)sender
 {
     HBPreset *preset = [sender representedObject];
diff --git a/macosx/HBRenamePresetController.h b/macosx/HBRenamePresetController.h
new file mode 100644 (file)
index 0000000..35b2b91
--- /dev/null
@@ -0,0 +1,22 @@
+/*  HBRenamePresetController.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>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class HBPreset;
+@class HBPresetsManager;
+
+@interface HBRenamePresetController : NSWindowController
+
+- (instancetype)initWithPreset:(HBPreset *)preset presetManager:(HBPresetsManager *)manager;
+
+@property (nonatomic, readonly) HBPreset *preset;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/macosx/HBRenamePresetController.m b/macosx/HBRenamePresetController.m
new file mode 100644 (file)
index 0000000..be87fe0
--- /dev/null
@@ -0,0 +1,85 @@
+/*  HBRenamePresetController.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 "HBRenamePresetController.h"
+
+#import "HBPresetsManager.h"
+#import "HBPreset.h"
+
+@import HandBrakeKit;
+
+@interface HBRenamePresetController () <NSTextFieldDelegate>
+
+@property (nonatomic, strong) IBOutlet NSTextField *name;
+@property (nonatomic, strong) IBOutlet NSButton *renameButton;
+
+@property (nonatomic, strong) HBPreset *preset;
+
+@property (nonatomic, strong) HBPresetsManager *manager;
+
+@end
+
+@implementation HBRenamePresetController
+
+- (instancetype)initWithPreset:(HBPreset *)preset presetManager:(HBPresetsManager *)manager
+{
+    self = [super initWithWindowNibName:@"HBRenamePresetController"];
+    if (self)
+    {
+        NSParameterAssert(preset);
+        NSParameterAssert(manager);
+        _preset = preset;
+        _manager = manager;
+    }
+    return self;
+}
+
+- (void)windowDidLoad
+{
+    [super windowDidLoad];
+
+    self.name.stringValue = self.name.placeholderString = self.preset.name;
+
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(controlTextDidChange:)
+                                                 name:NSControlTextDidChangeNotification object:nil];
+}
+
+- (void)dealloc
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSControlTextDidChangeNotification object:nil];
+}
+
+- (void)controlTextDidChange:(NSNotification *)obj {
+    self.renameButton.enabled = self.name.stringValue.length > 0 ? YES : NO;
+}
+
+- (IBAction)dismiss:(id)sender
+{
+    [self.window orderOut:nil];
+    [NSApp endSheet:self.window returnCode:NSModalResponseCancel];
+}
+
+- (IBAction)rename:(id)sender
+{
+    if (self.name.stringValue.length == 0)
+    {
+        NSAlert *alert = [[NSAlert alloc] init];
+        [alert setMessageText:NSLocalizedString(@"The preset name cannot be empty.", @"")];
+        [alert setInformativeText:NSLocalizedString(@"Please enter a name.", @"")];
+        [alert runModal];
+    }
+    else
+    {
+        [self.preset setName:self.name.stringValue];
+
+        [self.window orderOut:nil];
+        [NSApp endSheet:self.window returnCode:NSModalResponseContinue];
+    }
+}
+
+
+@end
index 17b667e8d1b53eaa00cde1736429bc79b62f8b2f..4dab5ac9fe9334f2fca86f7f7469efcff854e196 100644 (file)
@@ -9,6 +9,8 @@
 /* Begin PBXBuildFile section */
                1C6D76551CD7733300F5B943 /* libharfbuzz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C15C82B1CD7722500368223 /* libharfbuzz.a */; };
                1C6D76561CD7733400F5B943 /* libharfbuzz.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C15C82B1CD7722500368223 /* libharfbuzz.a */; };
+               1C7776A2202300DD001C31EB /* HBRenamePresetController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C7776A0202300DC001C31EB /* HBRenamePresetController.m */; };
+               1C7776A5202301D5001C31EB /* HBRenamePresetController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1C7776A3202301D5001C31EB /* HBRenamePresetController.xib */; };
                226268E11572CC7300477B4E /* libavresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 226268DF1572CC7300477B4E /* libavresample.a */; };
                22DD2C4B177B95DA00EF50D3 /* libvpx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22DD2C49177B94DB00EF50D3 /* libvpx.a */; };
                273F202314ADB8650021BE6D /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 273F202214ADB8650021BE6D /* IOKit.framework */; };
 
 /* Begin PBXFileReference section */
                1C15C82B1CD7722500368223 /* libharfbuzz.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libharfbuzz.a; path = external/contrib/lib/libharfbuzz.a; sourceTree = BUILT_PRODUCTS_DIR; };
+               1C7776A0202300DC001C31EB /* HBRenamePresetController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HBRenamePresetController.m; sourceTree = "<group>"; };
+               1C7776A1202300DC001C31EB /* HBRenamePresetController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HBRenamePresetController.h; sourceTree = "<group>"; };
+               1C7776A4202301D5001C31EB /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/HBRenamePresetController.xib; sourceTree = "<group>"; };
                226268DF1572CC7300477B4E /* libavresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libavresample.a; path = external/contrib/lib/libavresample.a; sourceTree = BUILT_PRODUCTS_DIR; };
                22CC9E74191EBEA500C69D81 /* libx265.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libx265.a; path = external/contrib/lib/libx265.a; sourceTree = BUILT_PRODUCTS_DIR; };
                22DD2C49177B94DB00EF50D3 /* libvpx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libvpx.a; path = external/contrib/lib/libvpx.a; sourceTree = BUILT_PRODUCTS_DIR; };
                                273F20A014ADBE670021BE6D /* HBPreferencesController.m */,
                                A939DD891FC8826A00135F2A /* HBPresetsMenuBuilder.h */,
                                A939DD8A1FC8826A00135F2A /* HBPresetsMenuBuilder.m */,
+                               1C7776A1202300DC001C31EB /* HBRenamePresetController.h */,
+                               1C7776A0202300DC001C31EB /* HBRenamePresetController.m */,
+                               1C7776A3202301D5001C31EB /* HBRenamePresetController.xib */,
                        );
                        name = Controllers;
                        sourceTree = "<group>";
                                A9F2EB6F196F12C800066546 /* Audio.xib in Resources */,
                                A9CF25F11990D62C0023F727 /* Presets.xib in Resources */,
                                A9C1839D1A716BCC00C897C2 /* HBTitleSelection.xib in Resources */,
+                               1C7776A5202301D5001C31EB /* HBRenamePresetController.xib in Resources */,
                                273F218A14ADDDA10021BE6D /* AdvancedView.xib in Resources */,
                                273F218B14ADDDA10021BE6D /* InfoPlist.strings in Resources */,
                                A932E26C1988334B0047D13E /* AudioDefaults.xib in Resources */,
                                A99F40CF1B624E7E00750170 /* HBPictureViewController.m in Sources */,
                                273F20AF14ADBE670021BE6D /* HBAudioController.m in Sources */,
                                A9DC6C52196F04F6002AE6B4 /* HBSubtitlesController.m in Sources */,
+                               1C7776A2202300DD001C31EB /* HBRenamePresetController.m in Sources */,
                                A9F472891976B7F30009EC65 /* HBSubtitlesDefaultsController.m in Sources */,
                                273F20AD14ADBE670021BE6D /* HBAdvancedController.m in Sources */,
                                A9906B2C1A710920001D82D5 /* HBQueueController.m in Sources */,
 /* End PBXTargetDependency section */
 
 /* Begin PBXVariantGroup section */
+               1C7776A3202301D5001C31EB /* HBRenamePresetController.xib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               1C7776A4202301D5001C31EB /* English */,
+                       );
+                       name = HBRenamePresetController.xib;
+                       sourceTree = "<group>";
+               };
                273F217A14ADDDA10021BE6D /* AdvancedView.xib */ = {
                        isa = PBXVariantGroup;
                        children = (