]> granicus.if.org Git - handbrake/commitdiff
MacGui: use the new deinterlate preset keys
authorDamiano Galassi <damiog@gmail.com>
Fri, 9 Oct 2015 21:01:58 +0000 (23:01 +0200)
committerDamiano Galassi <damiog@gmail.com>
Fri, 9 Oct 2015 21:01:58 +0000 (23:01 +0200)
macosx/English.lproj/HBPictureViewController.xib
macosx/HBFilters+UIAdditions.h
macosx/HBFilters+UIAdditions.m
macosx/HBFilters.h
macosx/HBFilters.m
macosx/HBJob+HBJobConversion.m
macosx/HBJob.m
macosx/HBPreviewGenerator.m

index a76aa2932200544bae8aaf71a4383f228f305160..44e364914cda31757551c9b47a2068bd7fe74530 100644 (file)
@@ -568,231 +568,6 @@ Using this filter on such sources can result in smaller file sizes.</string>
                         <binding destination="-2" name="value" keyPath="self.filters.denoiseCustomString" id="MUd-3J-rBA"/>
                     </connections>
                 </textField>
-                <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" id="V5h-RE-c1g">
-                    <rect key="frame" x="310" y="104" width="83" height="42"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                    <string key="toolTip">Choose decomb or deinterlace filter options.
-The decomb filter selectively deinterlaces frames that appear to be interlaced.
-This will preserve quality in frames that are not interlaced.
-The classic deinterlace filter is applied to all frames.
-Frames that are not interlaced will suffer some quality degradation.</string>
-                    <animations/>
-                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                    <size key="cellSize" width="83" height="20"/>
-                    <size key="intercellSpacing" width="4" height="2"/>
-                    <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="0e7-lW-GxD" customClass="HBHUDButtonCell">
-                        <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                        <font key="font" metaFont="smallSystem"/>
-                    </buttonCell>
-                    <cells>
-                        <column>
-                            <buttonCell type="radio" title="Deinterlace" imagePosition="left" alignment="left" controlSize="small" state="on" tag="1" inset="2" id="OVg-jG-Uzq">
-                                <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="smallSystem"/>
-                            </buttonCell>
-                            <buttonCell type="radio" title="Decomb" imagePosition="left" alignment="left" controlSize="small" inset="2" id="CCd-Kk-NlW">
-                                <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="smallSystem"/>
-                            </buttonCell>
-                        </column>
-                    </cells>
-                    <connections>
-                        <binding destination="-2" name="enabled" keyPath="self.filters" id="KA3-LF-11B">
-                            <dictionary key="options">
-                                <string key="NSValueTransformerName">NSIsNotNil</string>
-                            </dictionary>
-                        </binding>
-                        <binding destination="-2" name="selectedIndex" keyPath="self.filters.useDecomb" id="dze-Gw-CZJ"/>
-                    </connections>
-                </matrix>
-                <box autoresizesSubviews="NO" title="Box" borderType="none" titlePosition="noTitle" id="Mmn-Ae-9Yn" userLabel="Decomb Box">
-                    <rect key="frame" x="233" y="43" width="207" height="62"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                    <view key="contentView">
-                        <rect key="frame" x="0.0" y="0.0" width="207" height="62"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <subviews>
-                            <textField verticalHuggingPriority="750" id="7iW-iI-CHT">
-                                <rect key="frame" x="11" y="38" width="61" height="14"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <animations/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Decomb:" id="bkd-Rb-wwr">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                                <connections>
-                                    <binding destination="-2" name="textColor" keyPath="self.labelColor" id="LZV-5c-GTF"/>
-                                </connections>
-                            </textField>
-                            <textField verticalHuggingPriority="750" id="EoC-qG-nlq">
-                                <rect key="frame" x="11" y="12" width="61" height="14"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <animations/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="VaB-Av-TDu">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                                <connections>
-                                    <binding destination="-2" name="hidden" keyPath="self.filters.customDecombSelected" id="kgj-zy-TW7">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">NSNegateBoolean</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="-2" name="textColor" keyPath="self.labelColor" id="6zF-wn-AFg"/>
-                                </connections>
-                            </textField>
-                            <popUpButton verticalHuggingPriority="750" id="kP2-Gv-DZV">
-                                <rect key="frame" x="75" y="33" width="114" height="22"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <animations/>
-                                <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="5f8-gV-wzv">
-                                    <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <menu key="menu" title="OtherViews" id="hOC-Xe-RPE"/>
-                                </popUpButtonCell>
-                                <connections>
-                                    <accessibilityConnection property="title" destination="7iW-iI-CHT" id="PnI-bH-5TP"/>
-                                    <binding destination="-2" name="enabled" keyPath="self.filters" id="1ZK-xB-Tcj">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">NSIsNotNil</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="-2" name="selectedValue" keyPath="self.filters.decomb" previousBinding="3Cu-Eh-e6g" id="ShC-Oj-9Cr">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">HBDecombTransformer</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="-2" name="contentValues" keyPath="self.filters.decombSettings" id="3Cu-Eh-e6g"/>
-                                </connections>
-                            </popUpButton>
-                            <textField verticalHuggingPriority="750" id="dNc-Lj-0eP">
-                                <rect key="frame" x="78" y="9" width="108" height="19"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <string key="toolTip">Custom decomb filter string format:
-Mode:SpatialMetric:MotionThresh:SpatialThresh:BlockThresh:BlockWidth:BlockHeight:MagnitudeThres:VarianceThres:LaplacianThresh:DilationThresh:ErosionThresh:NoiseThresh:MaxSearchDistance:PostProcessing:Parity</string>
-                                <animations/>
-                                <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="cDZ-Od-pI6">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                                <accessibility description="Custom decomb settings."/>
-                                <connections>
-                                    <binding destination="-2" name="hidden" keyPath="self.filters.customDecombSelected" id="Ftt-V0-qz8">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">NSNegateBoolean</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="UZ0-eg-oV8" name="value" keyPath="values.self.filters.decombCustomString" id="lJH-aM-3yE"/>
-                                </connections>
-                            </textField>
-                        </subviews>
-                        <animations/>
-                    </view>
-                    <animations/>
-                    <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                    <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                    <connections>
-                        <binding destination="-2" name="hidden" keyPath="self.filters.useDecomb" id="Qt8-ik-TyT">
-                            <dictionary key="options">
-                                <string key="NSValueTransformerName">NSNegateBoolean</string>
-                            </dictionary>
-                        </binding>
-                    </connections>
-                </box>
-                <box autoresizesSubviews="NO" title="Box" borderType="none" titlePosition="noTitle" id="N21-it-wjY" userLabel="Deinterlace Box">
-                    <rect key="frame" x="233" y="43" width="207" height="62"/>
-                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                    <view key="contentView">
-                        <rect key="frame" x="0.0" y="0.0" width="207" height="62"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <subviews>
-                            <textField verticalHuggingPriority="750" id="xKf-yr-nCk">
-                                <rect key="frame" x="4" y="38" width="68" height="14"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <animations/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Deinterlace:" id="VsK-mC-9Pj">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                                <connections>
-                                    <binding destination="-2" name="textColor" keyPath="self.labelColor" id="PYk-vE-y5t"/>
-                                </connections>
-                            </textField>
-                            <textField verticalHuggingPriority="750" id="C83-aJ-v3x">
-                                <rect key="frame" x="23" y="12" width="49" height="14"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <animations/>
-                                <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="n6U-tH-vo0">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                                <connections>
-                                    <binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="kHC-eH-FKE">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">NSNegateBoolean</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="-2" name="textColor" keyPath="self.labelColor" id="OOp-ec-hRZ"/>
-                                </connections>
-                            </textField>
-                            <popUpButton verticalHuggingPriority="750" id="xct-UB-bKm">
-                                <rect key="frame" x="75" y="33" width="114" height="22"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <animations/>
-                                <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="CsF-zp-vt2">
-                                    <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <menu key="menu" title="OtherViews" id="PyP-FP-gGx"/>
-                                </popUpButtonCell>
-                                <connections>
-                                    <accessibilityConnection property="title" destination="xKf-yr-nCk" id="9ol-TG-r46"/>
-                                    <binding destination="-2" name="enabled" keyPath="self.filters" id="M9v-44-EJq">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">NSIsNotNil</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="-2" name="selectedValue" keyPath="self.filters.deinterlace" previousBinding="41E-Fv-hq1" id="RN0-ZY-YXU">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">HBDeinterlaceTransformer</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="-2" name="contentValues" keyPath="self.filters.deinterlaceSettings" id="41E-Fv-hq1"/>
-                                </connections>
-                            </popUpButton>
-                            <textField verticalHuggingPriority="750" id="r64-vI-ymx">
-                                <rect key="frame" x="78" y="9" width="108" height="19"/>
-                                <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                <animations/>
-                                <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="OKz-qW-7ai">
-                                    <font key="font" metaFont="smallSystem"/>
-                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                </textFieldCell>
-                                <accessibility description="Custom deinterlace filter string format: YadifMode:YadifParity:McdintMode:McdeintQp"/>
-                                <connections>
-                                    <binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="h6M-Dy-tBR">
-                                        <dictionary key="options">
-                                            <string key="NSValueTransformerName">NSNegateBoolean</string>
-                                        </dictionary>
-                                    </binding>
-                                    <binding destination="-2" name="value" keyPath="self.filters.deinterlaceCustomString" id="ej3-7F-ZV8"/>
-                                </connections>
-                            </textField>
-                        </subviews>
-                        <animations/>
-                    </view>
-                    <animations/>
-                    <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                    <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                    <connections>
-                        <binding destination="-2" name="hidden" keyPath="self.filters.useDecomb" id="ja4-Mj-2gB"/>
-                    </connections>
-                </box>
                 <textField verticalHuggingPriority="750" id="A6i-ft-02b">
                     <rect key="frame" x="484" y="78" width="34" height="14"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
@@ -924,7 +699,7 @@ Players will scale the image in order to achieve the specified aspect.</string>
                     <rect key="frame" x="151" y="281" width="15" height="22"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <animations/>
-                    <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="59" id="NP7-P2-Qga">
+                    <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="64" id="NP7-P2-Qga">
                         <font key="font" metaFont="smallSystem"/>
                     </stepperCell>
                     <connections>
@@ -1214,7 +989,7 @@ Players will scale the image in order to achieve the specified aspect.</string>
                     <rect key="frame" x="240" y="281" width="15" height="22"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <animations/>
-                    <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="59" id="MwK-aS-Oaf">
+                    <stepperCell key="cell" controlSize="small" continuous="YES" alignment="left" increment="16" minValue="64" maxValue="59" doubleValue="64" id="MwK-aS-Oaf">
                         <font key="font" metaFont="smallSystem"/>
                     </stepperCell>
                     <connections>
@@ -1258,6 +1033,128 @@ Players will scale the image in order to achieve the specified aspect.</string>
                         <binding destination="-2" name="maxValue" keyPath="self.picture.maxHorizontalCrop" id="HGA-OB-h94"/>
                     </connections>
                 </stepper>
+                <textField verticalHuggingPriority="750" id="xKf-yr-nCk">
+                    <rect key="frame" x="240" y="130" width="68" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Deinterlace:" id="VsK-mC-9Pj">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                    <connections>
+                        <binding destination="-2" name="textColor" keyPath="self.labelColor" id="PYk-vE-y5t"/>
+                    </connections>
+                </textField>
+                <textField verticalHuggingPriority="750" id="C83-aJ-v3x">
+                    <rect key="frame" x="259" y="79" width="49" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Custom:" id="n6U-tH-vo0">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                    <connections>
+                        <binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="kHC-eH-FKE">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">NSNegateBoolean</string>
+                            </dictionary>
+                        </binding>
+                        <binding destination="-2" name="textColor" keyPath="self.labelColor" id="OOp-ec-hRZ"/>
+                    </connections>
+                </textField>
+                <popUpButton verticalHuggingPriority="750" id="xct-UB-bKm">
+                    <rect key="frame" x="311" y="125" width="114" height="22"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <string key="toolTip">Choose decomb or deinterlace filter options.
+The decomb filter selectively deinterlaces frames that appear to be interlaced.
+This will preserve quality in frames that are not interlaced.
+The classic deinterlace filter is applied to all frames.
+Frames that are not interlaced will suffer some quality degradation.</string>
+                    <animations/>
+                    <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="CsF-zp-vt2">
+                        <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="smallSystem"/>
+                        <menu key="menu" title="OtherViews" id="PyP-FP-gGx"/>
+                    </popUpButtonCell>
+                    <connections>
+                        <accessibilityConnection property="title" destination="xKf-yr-nCk" id="9ol-TG-r46"/>
+                        <binding destination="-2" name="enabled" keyPath="self.filters" id="M9v-44-EJq">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">NSIsNotNil</string>
+                            </dictionary>
+                        </binding>
+                        <binding destination="-2" name="selectedValue" keyPath="self.filters.deinterlace" previousBinding="1XG-JZ-nFn" id="jo4-ky-6QP">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">HBDeinterlaceTransformer</string>
+                            </dictionary>
+                        </binding>
+                        <binding destination="-2" name="contentValues" keyPath="self.filters.deinterlaceTypes" id="1XG-JZ-nFn"/>
+                    </connections>
+                </popUpButton>
+                <textField verticalHuggingPriority="750" id="r64-vI-ymx">
+                    <rect key="frame" x="314" y="76" width="108" height="19"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="OKz-qW-7ai">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                    <accessibility description="Custom deinterlace filter string format: YadifMode:YadifParity:McdintMode:McdeintQp"/>
+                    <connections>
+                        <binding destination="-2" name="hidden" keyPath="self.filters.customDeinterlaceSelected" id="h6M-Dy-tBR">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">NSNegateBoolean</string>
+                            </dictionary>
+                        </binding>
+                        <binding destination="-2" name="value" keyPath="self.filters.deinterlaceCustomString" id="ej3-7F-ZV8"/>
+                    </connections>
+                </textField>
+                <textField verticalHuggingPriority="750" id="9Uz-PL-igg">
+                    <rect key="frame" x="248" y="104" width="61" height="14"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="right" title="Preset:" id="zvZ-ZX-yKE">
+                        <font key="font" metaFont="smallSystem"/>
+                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                    <connections>
+                        <binding destination="-2" name="hidden" keyPath="self.filters.deinterlaceEnabled" id="9z5-2i-puG">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">NSNegateBoolean</string>
+                            </dictionary>
+                        </binding>
+                        <binding destination="-2" name="textColor" keyPath="self.labelColor" id="58H-r8-xBi"/>
+                    </connections>
+                </textField>
+                <popUpButton verticalHuggingPriority="750" id="6nG-zk-FMo">
+                    <rect key="frame" x="312" y="99" width="113" height="22"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <animations/>
+                    <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="at1-DR-WGs">
+                        <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="smallSystem"/>
+                        <menu key="menu" title="OtherViews" id="qey-Yo-9sX"/>
+                    </popUpButtonCell>
+                    <connections>
+                        <accessibilityConnection property="title" destination="9Uz-PL-igg" id="EXp-0c-TdS"/>
+                        <binding destination="-2" name="hidden" keyPath="self.filters.deinterlaceEnabled" id="gBQ-b8-r6y">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">NSNegateBoolean</string>
+                            </dictionary>
+                        </binding>
+                        <binding destination="-2" name="selectedValue" keyPath="self.filters.deinterlacePreset" previousBinding="ZVC-PA-ji4" id="4RE-n6-Oyz">
+                            <dictionary key="options">
+                                <string key="NSValueTransformerName">HBDeinterlacePresetTransformer</string>
+                            </dictionary>
+                        </binding>
+                        <binding destination="-2" name="contentValues" keyPath="self.filters.deinterlacePresets" id="ZVC-PA-ji4"/>
+                        <outlet property="nextKeyView" destination="1XQ-md-5cQ" id="LJa-RO-dzf"/>
+                    </connections>
+                </popUpButton>
             </subviews>
             <animations/>
             <point key="canvasLocation" x="403.5" y="86.5"/>
index 7e61ac0a00bc7d98f4bcf38f2b67493cc0ac7803..71ca839bc5a95e4fda833fe97b7feace97bc8755 100644 (file)
@@ -13,6 +13,8 @@
  *  Getters to get the possible values for the filters.
  */
 + (NSDictionary *)detelecinePresetsDict;
+
++ (NSDictionary *)deinterlaceTypesDict;
 + (NSDictionary *)decombPresetsDict;
 + (NSDictionary *)deinterlacePresetsDict;
 
@@ -21,7 +23,8 @@
 + (NSDictionary *)denoiseTypesDict;
 
 - (BOOL)customDetelecineSelected;
-- (BOOL)customDecombSelected;
+
+- (BOOL)deinterlaceEnabled;
 - (BOOL)customDeinterlaceSelected;
 
 - (BOOL)denoiseEnabled;
@@ -31,8 +34,9 @@
 - (NSString *)deblockSummary;
 
 @property (nonatomic, readonly) NSArray *detelecineSettings;
-@property (nonatomic, readonly) NSArray *deinterlaceSettings;
-@property (nonatomic, readonly) NSArray *decombSettings;
+
+@property (nonatomic, readonly) NSArray *deinterlaceTypes;
+@property (nonatomic, readonly) NSArray *deinterlacePresets;
 
 @property (nonatomic, readonly) NSArray *denoiseTypes;
 @property (nonatomic, readonly) NSArray *denoisePresets;
 @interface HBDetelecineTransformer : HBGenericDictionaryTransformer
 @end
 
-@interface HBDecombTransformer : HBGenericDictionaryTransformer
+@interface HBDeinterlaceTransformer : HBGenericDictionaryTransformer
 @end
 
-@interface HBDeinterlaceTransformer : HBGenericDictionaryTransformer
+@interface HBDeinterlacePresetTransformer : HBGenericDictionaryTransformer
 @end
 
 @interface HBDenoisePresetTransformer : HBGenericDictionaryTransformer
index 230022cc73b4af162d1ee1c61247f087bbe32cb3..08e5198e467854fe2305a6fa2bd9f744dd914d56 100644 (file)
@@ -79,24 +79,28 @@ static NSDictionary * filterParamsToNamesDict(hb_filter_param_t * (f)(int), int
 
 @end
 
-@implementation HBDecombTransformer
+@implementation HBDeinterlaceTransformer
 
 - (instancetype)init
 {
     if (self = [super init])
-        self.dict = [HBFilters decombPresetsDict];
+        self.dict = [HBFilters deinterlaceTypesDict];
 
     return self;
 }
 
 @end
 
-@implementation HBDeinterlaceTransformer
+@implementation HBDeinterlacePresetTransformer
 
 - (instancetype)init
 {
     if (self = [super init])
-        self.dict = [HBFilters deinterlacePresetsDict];
+    {
+        NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:[HBFilters deinterlacePresetsDict]];
+        [dict addEntriesFromDictionary:[HBFilters decombPresetsDict]];
+        self.dict = [dict copy];
+    }
 
     return self;
 }
@@ -162,6 +166,8 @@ static NSDictionary * filterParamsToNamesDict(hb_filter_param_t * (f)(int), int
 @end
 
 static NSDictionary *detelecinePresetsDict = nil;
+
+static NSDictionary *deinterlaceTypesDict = nil;
 static NSDictionary *decombPresetsDict = nil;
 static NSDictionary *deinterlacePresetsDict = nil;
 
@@ -182,6 +188,22 @@ static NSDictionary *denoiseTypesDict = nil;
     return detelecinePresetsDict;
 }
 
++ (NSDictionary *)deinterlaceTypesDict
+{
+    if (!deinterlaceTypesDict)
+    {
+        deinterlaceTypesDict = @{NSLocalizedString(@"Off", nil):      @"off",
+                                 NSLocalizedString(@"Deinterlace", nil):  @"deinterlace",
+                                 NSLocalizedString(@"Decomb", nil):   @"decomb"};;
+    }
+    return deinterlaceTypesDict;
+}
+
+- (NSArray *)deinterlaceTypes
+{
+    return @[@"Off", @"Deinterlace", @"Decomb"];
+}
+
 + (NSDictionary *)decombPresetsDict
 {
     if (!decombPresetsDict)
@@ -234,14 +256,16 @@ static NSDictionary *denoiseTypesDict = nil;
     return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DETELECINE);
 }
 
-- (NSArray *)decombSettings
-{
-    return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DECOMB);
-}
-
-- (NSArray *)deinterlaceSettings
+- (NSArray *)deinterlacePresets
 {
-    return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DEINTERLACE);
+    if ([self.deinterlace isEqualToString:@"deinterlace"])
+    {
+        return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DEINTERLACE);
+    }
+    else
+    {
+        return filterParamsToNamesArray(hb_filter_param_get_presets, HB_FILTER_DECOMB);
+    }
 }
 
 - (NSArray *)denoiseTypes
@@ -264,14 +288,9 @@ static NSDictionary *denoiseTypesDict = nil;
     return [self.detelecine isEqualToString:@"custom"] ? YES : NO;
 }
 
-- (BOOL)customDecombSelected
-{
-    return [self.decomb isEqualToString:@"custom"] ? YES : NO;
-}
-
 - (BOOL)customDeinterlaceSelected
 {
-    return [self.deinterlace isEqualToString:@"custom"] ? YES : NO;
+    return [self.deinterlacePreset isEqualToString:@"custom"] && [self deinterlaceEnabled];
 }
 
 - (BOOL)denoiseEnabled
@@ -279,6 +298,11 @@ static NSDictionary *denoiseTypesDict = nil;
     return ![self.denoise isEqualToString:@"off"];
 }
 
+- (BOOL)deinterlaceEnabled
+{
+    return ![self.deinterlace isEqualToString:@"off"];
+}
+
 - (BOOL)customDenoiseSelected
 {
     return [self.denoisePreset isEqualToString:@"custom"] && [self denoiseEnabled];
@@ -317,29 +341,25 @@ static NSDictionary *denoiseTypesDict = nil;
             [summary appendFormat:@" - Detelecine (%@)", [[[HBFilters detelecinePresetsDict] allKeysForObject:self.detelecine] firstObject]];
         }
     }
-
-    if (self.useDecomb && ![self.decomb isEqualToString:@"off"])
-    {
-        // Decomb
-        if ([self.decomb isEqualToString:@"custom"])
-        {
-            [summary appendFormat:@" - Decomb (%@)", self.decombCustomString];
-        }
-        else
-        {
-            [summary appendFormat:@" - Decomb (%@)", [[[HBFilters decombPresetsDict] allKeysForObject:self.decomb] firstObject]];
-        }
-    }
     else if (![self.deinterlace isEqualToString:@"off"])
     {
-        // Deinterlace
-        if ([self.deinterlace isEqualToString:@"custom"])
+        // Deinterlace or Decomb
+        NSString *type =  [[[HBFilters deinterlaceTypesDict] allKeysForObject:self.deinterlace] firstObject];
+
+        if ([self.deinterlacePreset isEqualToString:@"custom"])
         {
-            [summary appendFormat:@" - Deinterlace (%@)", self.deinterlaceCustomString];
+            [summary appendFormat:@" - %@ (%@)", type, self.deinterlaceCustomString];
         }
         else
         {
-            [summary appendFormat:@" - Deinterlace (%@)", [[[HBFilters deinterlacePresetsDict] allKeysForObject:self.deinterlace] firstObject]];
+            if ([self.deinterlace isEqualToString:@"decomb"])
+            {
+                [summary appendFormat:@" - %@ (%@)", type, [[[HBFilters decombPresetsDict] allKeysForObject:self.deinterlacePreset] firstObject]];
+            }
+            else if ([self.deinterlace isEqualToString:@"deinterlace"])
+            {
+                [summary appendFormat:@" - %@ (%@)", type, [[[HBFilters deinterlacePresetsDict] allKeysForObject:self.deinterlacePreset] firstObject]];
+            }
         }
     }
 
index edac30f84582f5cae426b54ab21ecaf94f2bd936..4c8fec92b898b4157c4e19c90b8f7b50eb90fc14 100644 (file)
@@ -19,14 +19,10 @@ extern NSString * const HBFiltersChangedNotification;
 @property (nonatomic, readwrite, copy) NSString *detelecine;
 @property (nonatomic, readwrite, copy) NSString *detelecineCustomString;
 
-@property (nonatomic, readwrite) BOOL useDecomb;
-
 @property (nonatomic, readwrite, copy) NSString *deinterlace;
+@property (nonatomic, readwrite, copy) NSString *deinterlacePreset;
 @property (nonatomic, readwrite, copy) NSString *deinterlaceCustomString;
 
-@property (nonatomic, readwrite, copy) NSString *decomb;
-@property (nonatomic, readwrite, copy) NSString *decombCustomString;
-
 @property (nonatomic, readwrite, copy) NSString *denoise;
 @property (nonatomic, readwrite, copy) NSString *denoisePreset;
 @property (nonatomic, readwrite, copy) NSString *denoiseTune;
index 7c672f0563c8d9764fea3d8367332a8482080710..2ce4e6cd9ecec0fe1363489b5fa4fd539818d537 100644 (file)
@@ -27,8 +27,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
         _detelecineCustomString = @"";
         _deinterlace = @"off";
         _deinterlaceCustomString = @"";
-        _decomb = @"off";
-        _decombCustomString = @"";
+        _deinterlacePreset = @"fast";
         _denoise = @"off";
         _denoiseCustomString = @"";
         _denoisePreset = @"medium";
@@ -89,45 +88,49 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
     {
         _deinterlace = @"off";
     }
+    [self validateDeinterlacePreset];
     [self postChangedNotification];
 }
 
-- (void)setDeinterlaceCustomString:(NSString *)deinterlaceCustomString
+- (void)setDeinterlacePreset:(NSString *)deinterlacePreset
 {
-    if (deinterlaceCustomString)
+    if (deinterlacePreset)
     {
-        _deinterlaceCustomString = [deinterlaceCustomString copy];
+        _deinterlacePreset = [deinterlacePreset copy];
     }
     else
     {
-        _deinterlaceCustomString = @"";
+        _deinterlacePreset = @"fast";
     }
 
+    [self validateDeinterlacePreset];
     [self postChangedNotification];
 }
 
-- (void)setDecomb:(NSString *)decomb
+- (void)validateDeinterlacePreset
 {
-    if (decomb)
+    int filter_id = HB_FILTER_DECOMB;
+    if ([self.deinterlace isEqualToString:@"deinterlace"])
     {
-        _decomb = [decomb copy];
+        filter_id = HB_FILTER_DEINTERLACE;
     }
-    else
+
+    if (hb_validate_filter_preset(filter_id, self.deinterlacePreset.UTF8String, NULL) ||
+        ([self.deinterlacePreset isEqualToString:@"default"] && filter_id == HB_FILTER_DEINTERLACE))
     {
-        _decomb = @"off";
+        _deinterlacePreset = @"fast";
     }
-    [self postChangedNotification];
 }
 
-- (void)setDecombCustomString:(NSString *)decombCustomString
+- (void)setDeinterlaceCustomString:(NSString *)deinterlaceCustomString
 {
-    if (decombCustomString)
+    if (deinterlaceCustomString)
     {
-        _decombCustomString = [decombCustomString copy];
+        _deinterlaceCustomString = [deinterlaceCustomString copy];
     }
     else
     {
-        _decombCustomString = @"";
+        _deinterlaceCustomString = @"";
     }
 
     [self postChangedNotification];
@@ -141,7 +144,7 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
     }
     else
     {
-        _denoise = @"";
+        _denoise = @"off";
     }
 
     [self postChangedNotification];
@@ -201,25 +204,18 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
     [self postChangedNotification];
 }
 
-- (void)setUseDecomb:(BOOL)useDecomb
-{
-    _useDecomb = useDecomb;
-    [self postChangedNotification];
-}
-
 + (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key
 {
     NSSet *retval = nil;
 
     if ([key isEqualToString:@"summary"])
     {
-        retval = [NSSet setWithObjects:@"detelecine", @"detelecineCustomString", @"useDecomb", @"deinterlace", @"deinterlaceCustomString", @"decomb", @"decombCustomString", @"denoise", @"denoisePreset", @"denoiseTune", @"denoiseCustomString", @"deblock", @"grayscale", nil];
+        retval = [NSSet setWithObjects:@"detelecine", @"detelecineCustomString", @"deinterlace", @"deinterlacePreset", @"deinterlaceCustomString", @"denoise", @"denoisePreset", @"denoiseTune", @"denoiseCustomString", @"deblock", @"grayscale", nil];
     }
     if ([key isEqualToString:@"customDetelecineSelected"] ||
-        [key isEqualToString:@"customDecombSelected"] ||
         [key isEqualToString:@"customDeinterlaceSelected"])
     {
-        retval = [NSSet setWithObjects:@"detelecine", @"decomb", @"deinterlace", @"useDecomb", nil];
+        retval = [NSSet setWithObjects:@"detelecine", @"deinterlace", nil];
     }
     if ([key isEqualToString:@"denoiseTunesAvailable"] ||
         [key isEqualToString:@"customDenoiseSelected"])
@@ -230,6 +226,15 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
     {
         retval = [NSSet setWithObject:@"denoise"];
     }
+    if ([key isEqualToString:@"deinterlaceEnabled"])
+    {
+        retval = [NSSet setWithObject:@"deinterlace"];
+    }
+    if ([key isEqualToString:@"customDeinterlaceSelected"] ||
+        [key isEqualToString:@"deinterlacePresets"])
+    {
+        retval = [NSSet setWithObjects:@"deinterlace", @"deinterlacePreset", nil];
+    }
     if ([key isEqualToString:@"deblockSummary"])
     {
         retval = [NSSet setWithObject:@"deblock"];
@@ -250,11 +255,9 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
         copy->_detelecineCustomString = [_detelecineCustomString copy];
 
         copy->_deinterlace = [_deinterlace copy];
+        copy->_deinterlacePreset = [_deinterlacePreset copy];
         copy->_deinterlaceCustomString = [_deinterlaceCustomString copy];
 
-        copy->_decomb = [_decomb copy];
-        copy->_decombCustomString = [_decombCustomString copy];
-
         copy->_denoise = [_denoise copy];
         copy->_denoisePreset = [_denoisePreset copy];
         copy->_denoiseTune = [_denoiseTune copy];
@@ -262,8 +265,6 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
 
         copy->_deblock = _deblock;
         copy->_grayscale = _grayscale;
-
-        copy->_useDecomb = _useDecomb;
     }
 
     return copy;
@@ -278,17 +279,15 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
 
 - (void)encodeWithCoder:(NSCoder *)coder
 {
-    [coder encodeInt:1 forKey:@"HBFiltersVersion"];
+    [coder encodeInt:2 forKey:@"HBFiltersVersion"];
 
     encodeObject(_detelecine);
     encodeObject(_detelecineCustomString);
 
     encodeObject(_deinterlace);
+    encodeObject(_deinterlacePreset);
     encodeObject(_deinterlaceCustomString);
 
-    encodeObject(_decomb);
-    encodeObject(_decombCustomString);
-
     encodeObject(_denoise);
     encodeObject(_denoisePreset);
     encodeObject(_denoiseTune);
@@ -296,8 +295,6 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
 
     encodeInt(_deblock);
     encodeBool(_grayscale);
-
-    encodeBool(_useDecomb);
 }
 
 - (instancetype)initWithCoder:(NSCoder *)decoder
@@ -308,11 +305,9 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
     decodeObject(_detelecineCustomString, NSString);
 
     decodeObject(_deinterlace, NSString);
+    decodeObject(_deinterlacePreset, NSString)
     decodeObject(_deinterlaceCustomString, NSString);
 
-    decodeObject(_decomb, NSString);
-    decodeObject(_decombCustomString, NSString);
-
     decodeObject(_denoise, NSString);
     decodeObject(_denoisePreset, NSString);
     decodeObject(_denoiseTune, NSString);
@@ -321,8 +316,6 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
     decodeInt(_deblock);
     decodeBool(_grayscale);
 
-    decodeBool(_useDecomb);
-
     _notificationsEnabled = YES;
 
     return self;
@@ -332,14 +325,10 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
 
 - (void)writeToPreset:(NSMutableDictionary *)preset
 {
-    preset[@"PictureDecombDeinterlace"] = @(self.useDecomb);
-
-    preset[@"PictureDeinterlace"] = self.deinterlace;
+    preset[@"PictureDeinterlaceFilter"] = self.deinterlace;
+    preset[@"PictureDeinterlacePreset"] = self.deinterlacePreset;
     preset[@"PictureDeinterlaceCustom"] = self.deinterlaceCustomString;
 
-    preset[@"PictureDecomb"] = self.decomb;
-    preset[@"PictureDecombCustom"] = self.decombCustomString;
-
     preset[@"PictureDetelecine"] = self.detelecine;
     preset[@"PictureDetelecineCustom"] = self.detelecineCustomString;
 
@@ -359,16 +348,12 @@ NSString * const HBFiltersChangedNotification = @"HBFiltersChangedNotification";
     // If the preset has an objectForKey:@"UsesPictureFilters", and handle the filters here
     if ([preset[@"UsesPictureFilters"] boolValue])
     {
-        // We only allow *either* Decomb or Deinterlace. So check for the PictureDecombDeinterlace key.
-        self.useDecomb = [preset[@"PictureDecombDeinterlace"] boolValue];
-
-        self.decomb = preset[@"PictureDecomb"];
-        self.decombCustomString = preset[@"PictureDecombCustom"];
-
-        self.deinterlace = preset[@"PictureDeinterlace"];
+        // Deinterlace
+        self.deinterlace = preset[@"PictureDeinterlaceFilter"];
+        self.deinterlacePreset = preset[@"PictureDeinterlacePreset"];
         self.deinterlaceCustomString = preset[@"PictureDeinterlaceCustom"];
 
-        //Detelecine
+        // Detelecine
         self.detelecine = preset[@"PictureDetelecine"];
         self.detelecineCustomString = preset[@"PictureDetelecineCustom"];
 
index 08514d55d24f9279be7d34f877204e24df810947..802eb2bda9e274d65321ee627110a36159f22454 100644 (file)
         hb_add_filter(job, filter, filter_str);
     }
 
-    if (self.filters.useDecomb && ![self.filters.decomb isEqualToString:@"off"])
+    // Deinterlace
+    if (![self.filters.deinterlace isEqualToString:@"off"])
     {
-        // Decomb
         int filter_id = HB_FILTER_DECOMB;
+        if ([self.filters.deinterlace isEqualToString:@"deinterlace"])
+        {
+            filter_id = HB_FILTER_DEINTERLACE;
+        }
+
         const char *filter_str = hb_generate_filter_settings(filter_id,
-                                                             self.filters.decomb.UTF8String,
-                                                             self.filters.decombCustomString.UTF8String);
-        filter = hb_filter_init(filter_id);
-        hb_add_filter(job, filter, filter_str);
-    }
-    else if (!self.filters.useDecomb && ![self.filters.deinterlace isEqualToString:@"off"])
-    {
-        // Deinterlace
-        int filter_id = HB_FILTER_DEINTERLACE;
-        const char *filter_str = hb_generate_filter_settings(filter_id,
-                                                             self.filters.deinterlace.UTF8String,
+                                                             self.filters.deinterlacePreset.UTF8String,
                                                              self.filters.deinterlaceCustomString.UTF8String);
         filter = hb_filter_init(filter_id);
         hb_add_filter(job, filter, filter_str);
index 69c649fd17d6bf9885680f397fae3aa69445e764..d3b51b3be004001ac5cf8a282fa1ba33712bd4e2 100644 (file)
@@ -185,7 +185,7 @@ NSString *HBChaptersChangedNotification  = @"HBChaptersChangedNotification";
 
 - (void)encodeWithCoder:(NSCoder *)coder
 {
-    [coder encodeInt:1 forKey:@"HBVideoVersion"];
+    [coder encodeInt:1 forKey:@"HBJobVersion"];
 
     encodeInt(_state);
     encodeObject(_name);
@@ -215,7 +215,7 @@ NSString *HBChaptersChangedNotification  = @"HBChaptersChangedNotification";
 
 - (instancetype)initWithCoder:(NSCoder *)decoder
 {
-    int version = [decoder decodeIntForKey:@"HBVideoVersion"];
+    int version = [decoder decodeIntForKey:@"HBJobVersion"];
 
     if (version == 1 && (self = [super init]))
     {
index 04fc055b078cea68136d1b4c784c3b966e4289c7..d85f102e33e77f27d3cb4fed5176fca853113c6e 100644 (file)
@@ -76,8 +76,7 @@
     if (!theImage)
     {
         HBFilters *filters = self.job.filters;
-        BOOL deinterlace = (![filters.deinterlace isEqualToString:@"off"] && !filters.useDecomb) ||
-                           (![filters.decomb isEqualToString:@"off"] && filters.useDecomb);
+        BOOL deinterlace = (![filters.deinterlace isEqualToString:@"off"]);
 
         theImage = (CGImageRef)[self.scanCore copyImageAtIndex:index
                                                            forTitle:self.job.title