Jean-Baptiste Kempf pushed to branch master at VideoLAN / VLC


Commits:
4409f29e by Claudio Cambra at 2023-07-08T15:50:23+00:00
macosx: Add internal handling of setting artwork url in 
VLCInformationWindowController

Signed-off-by: Claudio Cambra <develo...@claudiocambra.com>

- - - - -
55e75415 by Claudio Cambra at 2023-07-08T15:50:23+00:00
macosx: Add a setter method for artworkMRL property in VLCInputItem

Signed-off-by: Claudio Cambra <develo...@claudiocambra.com>

- - - - -
52d64c03 by Claudio Cambra at 2023-07-08T15:50:23+00:00
macosx: Replace artwork iamge view with image button, connect to image 
selection methods

Signed-off-by: Claudio Cambra <develo...@claudiocambra.com>

- - - - -
f7c3a6fb by Claudio Cambra at 2023-07-08T15:50:23+00:00
macosx: Fix VLCInputItem artowrkURL setter

Signed-off-by: Claudio Cambra <develo...@claudiocambra.com>

- - - - -


5 changed files:

- modules/gui/macosx/UI/VLCInformationWindow.xib
- modules/gui/macosx/library/VLCInputItem.h
- modules/gui/macosx/library/VLCInputItem.m
- modules/gui/macosx/panels/VLCInformationWindowController.h
- modules/gui/macosx/panels/VLCInformationWindowController.m


Changes:

=====================================
modules/gui/macosx/UI/VLCInformationWindow.xib
=====================================
@@ -14,7 +14,7 @@
                 <outlet property="albumTextField" destination="439" 
id="Rih-lX-lJW"/>
                 <outlet property="artistLabel" destination="432" 
id="Iu0-7V-KXV"/>
                 <outlet property="artistTextField" destination="431" 
id="pCd-jk-UrD"/>
-                <outlet property="artworkImageView" destination="9Mp-s6-NGc" 
id="98x-Ub-eP0"/>
+                <outlet property="artworkImageButton" destination="9jw-Fr-d1M" 
id="Iz3-tl-NGZ"/>
                 <outlet property="audioDecodedLabel" destination="583" 
id="684"/>
                 <outlet property="audioDecodedTextField" destination="582" 
id="685"/>
                 <outlet property="audioLabel" destination="574" id="686"/>
@@ -441,22 +441,33 @@
                                                 <color key="backgroundColor" 
name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                                             </textFieldCell>
                                         </textField>
-                                        <customView 
translatesAutoresizingMaskIntoConstraints="NO" id="9Mp-s6-NGc" 
customClass="VLCImageView">
-                                            <rect key="frame" x="345" y="129" 
width="160" height="121"/>
-                                        </customView>
+                                        <button 
translatesAutoresizingMaskIntoConstraints="NO" id="9jw-Fr-d1M">
+                                            <rect key="frame" x="345" y="129" 
width="160" height="128"/>
+                                            <constraints>
+                                                <constraint 
firstAttribute="height" constant="128" id="sbu-BX-HX7"/>
+                                            </constraints>
+                                            <buttonCell key="cell" 
type="square" bezelStyle="shadowlessSquare" image="noart" imagePosition="only" 
alignment="center" imageScaling="proportionallyUpOrDown" inset="2" 
id="T6o-O9-fdd">
+                                                <behavior key="behavior" 
pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" 
metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action 
selector="chooseArtwork:" target="-2" id="aoX-w0-3xf"/>
+                                            </connections>
+                                        </button>
                                     </subviews>
                                     <constraints>
                                         <constraint firstItem="32r-kK-YIK" 
firstAttribute="centerY" secondItem="NFO-5i-C2y" secondAttribute="centerY" 
id="1fr-ua-HLh"/>
                                         <constraint firstItem="498" 
firstAttribute="leading" secondItem="487" secondAttribute="leading" 
id="2BM-dO-cxA"/>
                                         <constraint firstItem="TJe-7E-Uca" 
firstAttribute="baseline" secondItem="NFO-5i-C2y" secondAttribute="baseline" 
id="38c-hf-AdS"/>
+                                        <constraint firstItem="9jw-Fr-d1M" 
firstAttribute="leading" secondItem="KiB-XA-gnh" secondAttribute="leading" 
id="38t-tH-IXh"/>
                                         <constraint firstItem="412" 
firstAttribute="top" secondItem="504" secondAttribute="bottom" constant="7" 
id="3sc-H3-Jb7"/>
                                         <constraint firstItem="Cro-Nn-BBH" 
firstAttribute="leading" secondItem="Vvu-VZ-aui" secondAttribute="trailing" 
constant="8" id="4Wy-de-qFK"/>
                                         <constraint firstItem="435" 
firstAttribute="top" secondItem="436" secondAttribute="bottom" constant="3" 
id="5A4-pd-kbP"/>
                                         <constraint firstItem="463" 
firstAttribute="leading" secondItem="461" secondAttribute="trailing" 
constant="8" id="5fW-BF-CQQ"/>
                                         <constraint firstAttribute="trailing" 
secondItem="435" secondAttribute="trailing" constant="37" id="5sT-kX-Mgh"/>
                                         <constraint firstItem="435" 
firstAttribute="leading" secondItem="431" secondAttribute="trailing" 
constant="8" id="69n-nP-QoU"/>
-                                        <constraint firstItem="9Mp-s6-NGc" 
firstAttribute="bottom" secondItem="486" secondAttribute="bottom" 
id="6RC-cE-vQo"/>
                                         <constraint firstItem="439" 
firstAttribute="top" secondItem="440" secondAttribute="bottom" constant="3" 
id="71b-yF-M2B"/>
+                                        <constraint firstItem="9jw-Fr-d1M" 
firstAttribute="bottom" secondItem="486" secondAttribute="bottom" 
id="77b-m1-E2f"/>
                                         <constraint firstItem="Ken-fu-rsj" 
firstAttribute="leading" secondItem="441" secondAttribute="trailing" 
constant="8" id="8CH-DT-qPt"/>
                                         <constraint firstItem="440" 
firstAttribute="leading" secondItem="462" secondAttribute="leading" 
id="8gB-xE-tw2"/>
                                         <constraint firstItem="481" 
firstAttribute="height" secondItem="504" secondAttribute="height" 
id="8qb-HX-DzD"/>
@@ -465,6 +476,7 @@
                                         <constraint firstItem="463" 
firstAttribute="top" secondItem="464" secondAttribute="bottom" constant="3" 
id="AWB-mE-B6y"/>
                                         <constraint firstItem="Vvu-VZ-aui" 
firstAttribute="top" secondItem="TJe-7E-Uca" secondAttribute="bottom" 
constant="3" id="BBb-mj-Qf6"/>
                                         <constraint firstItem="D3W-el-Mmk" 
firstAttribute="top" secondItem="32r-kK-YIK" secondAttribute="bottom" 
constant="3" id="BQW-oc-WnH"/>
+                                        <constraint firstItem="9jw-Fr-d1M" 
firstAttribute="top" secondItem="463" secondAttribute="bottom" constant="8" 
id="BUu-AV-Vnk"/>
                                         <constraint firstItem="482" 
firstAttribute="leading" secondItem="481" secondAttribute="leading" 
id="BbW-Tt-gK9"/>
                                         <constraint firstItem="498" 
firstAttribute="trailing" secondItem="477" secondAttribute="trailing" 
id="Bgv-0D-P34"/>
                                         <constraint firstItem="TJe-7E-Uca" 
firstAttribute="top" secondItem="439" secondAttribute="bottom" constant="8" 
id="CtI-Qn-zYS"/>
@@ -472,9 +484,7 @@
                                         <constraint firstItem="476" 
firstAttribute="width" secondItem="461" secondAttribute="width" 
id="DI2-7l-jjc"/>
                                         <constraint firstItem="440" 
firstAttribute="leading" secondItem="439" secondAttribute="leading" 
id="DKW-vC-4a2"/>
                                         <constraint firstItem="KiB-XA-gnh" 
firstAttribute="leading" secondItem="cXh-Kb-cBh" secondAttribute="leading" 
id="E5O-E7-sp2"/>
-                                        <constraint firstItem="9Mp-s6-NGc" 
firstAttribute="trailing" secondItem="463" secondAttribute="trailing" 
id="Ecd-2i-8vs"/>
                                         <constraint firstItem="442" 
firstAttribute="leading" secondItem="441" secondAttribute="leading" 
id="F2a-9d-qnp"/>
-                                        <constraint firstItem="9Mp-s6-NGc" 
firstAttribute="width" secondItem="463" secondAttribute="width" 
id="Fb3-6O-ryV"/>
                                         <constraint firstItem="429" 
firstAttribute="leading" secondItem="427" secondAttribute="leading" 
id="FdL-JK-SXm"/>
                                         <constraint firstItem="tWC-Zr-8E5" 
firstAttribute="top" secondItem="8ES-YK-OvS" secondAttribute="bottom" 
constant="3" id="G4x-Vv-Wua"/>
                                         <constraint firstItem="504" 
firstAttribute="leading" secondItem="481" secondAttribute="trailing" 
constant="8" id="GNl-FV-0Tb"/>
@@ -509,6 +519,7 @@
                                         <constraint firstItem="440" 
firstAttribute="baseline" secondItem="442" secondAttribute="baseline" 
id="ZR6-uA-mI7"/>
                                         <constraint firstItem="Ken-fu-rsj" 
firstAttribute="top" secondItem="cIj-bq-nFH" secondAttribute="bottom" 
constant="3" id="ZUi-DU-CXL"/>
                                         <constraint firstAttribute="trailing" 
secondItem="427" secondAttribute="trailing" constant="37" id="ZUo-m6-vIM"/>
+                                        <constraint firstItem="9jw-Fr-d1M" 
firstAttribute="trailing" secondItem="463" secondAttribute="trailing" 
id="aJT-G3-enV"/>
                                         <constraint firstItem="432" 
firstAttribute="top" secondItem="427" secondAttribute="bottom" constant="8" 
id="b5k-Mg-gUI"/>
                                         <constraint firstItem="431" 
firstAttribute="top" secondItem="432" secondAttribute="bottom" constant="3" 
id="bNy-JF-PIC"/>
                                         <constraint firstItem="cXh-Kb-cBh" 
firstAttribute="baseline" secondItem="8ES-YK-OvS" secondAttribute="baseline" 
id="bXf-GW-PkM"/>
@@ -525,11 +536,10 @@
                                         <constraint firstItem="477" 
firstAttribute="top" secondItem="461" secondAttribute="bottom" constant="8" 
symbolic="YES" id="g6g-Ns-JmP"/>
                                         <constraint firstItem="487" 
firstAttribute="trailing" secondItem="498" secondAttribute="trailing" 
id="gE5-M8-JCo"/>
                                         <constraint firstItem="D3W-el-Mmk" 
firstAttribute="trailing" secondItem="Ken-fu-rsj" secondAttribute="trailing" 
id="gJK-xx-0fy"/>
+                                        <constraint firstItem="9jw-Fr-d1M" 
firstAttribute="width" secondItem="463" secondAttribute="width" 
id="gsO-On-Rim"/>
                                         <constraint firstAttribute="trailing" 
secondItem="510" secondAttribute="trailing" constant="34" id="hlm-Bz-jEa"/>
                                         <constraint firstItem="441" 
firstAttribute="leading" secondItem="463" secondAttribute="leading" 
id="ikh-TH-cNg"/>
-                                        <constraint firstItem="9Mp-s6-NGc" 
firstAttribute="width" secondItem="KiB-XA-gnh" secondAttribute="width" 
id="jay-oH-mXL"/>
                                         <constraint firstItem="464" 
firstAttribute="baseline" secondItem="462" secondAttribute="baseline" 
id="kmE-pS-llX"/>
-                                        <constraint firstItem="9Mp-s6-NGc" 
firstAttribute="top" secondItem="463" secondAttribute="bottom" constant="8" 
id="l3G-gN-0Wb"/>
                                         <constraint firstItem="498" 
firstAttribute="top" secondItem="476" secondAttribute="bottom" constant="8" 
id="lwM-dZ-Ak0"/>
                                         <constraint firstItem="441" 
firstAttribute="centerY" secondItem="439" secondAttribute="centerY" 
id="m5s-7J-bmT"/>
                                         <constraint firstItem="497" 
firstAttribute="height" secondItem="476" secondAttribute="height" 
id="mNu-5I-ZC9"/>
@@ -588,7 +598,7 @@
                                                                 
</textFieldCell>
                                                                 
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" 
userResizable="YES"/>
                                                             </tableColumn>
-                                                            <tableColumn 
identifier="1" editable="NO" width="262" minWidth="10" 
maxWidth="3.4028234663852886e+38" id="644">
+                                                            <tableColumn 
identifier="1" editable="NO" width="233" minWidth="10" 
maxWidth="3.4028234663852886e+38" id="644">
                                                                 
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" 
borderStyle="border" alignment="left">
                                                                     <color 
key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
                                                                     <color 
key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
@@ -1099,4 +1109,7 @@
             <point key="canvasLocation" x="139" y="148"/>
         </window>
     </objects>
+    <resources>
+        <image name="noart" width="128" height="128"/>
+    </resources>
 </document>


=====================================
modules/gui/macosx/library/VLCInputItem.h
=====================================
@@ -71,7 +71,7 @@ extern NSString *VLCInputItemPreparsingSucceeded;
 @property (readonly) vlc_tick_t duration;
 @property (readonly) enum input_item_type_e inputType;
 @property (readonly) struct input_item_node_t *subTree;
-@property (readonly) NSURL *artworkURL;
+@property (readwrite) NSURL *artworkURL;
 @property (readonly) BOOL preparsed;
 @property (readonly) BOOL isStream;
 


=====================================
modules/gui/macosx/library/VLCInputItem.m
=====================================
@@ -501,6 +501,19 @@ static const struct vlc_metadata_cbs preparseCallbacks = {
     return nil;
 }
 
+- (void)setArtworkURL:(NSURL *)artworkURL
+{
+    if (!_vlcInputItem) {
+        return;
+    }
+
+    if (artworkURL != nil) {
+        input_item_SetArtworkURL(_vlcInputItem, 
artworkURL.absoluteString.UTF8String);
+    } else {
+        input_item_SetArtworkURL(_vlcInputItem, NULL);
+    }
+}
+
 - (void)parseInputItem
 {
     _p_parserID = input_item_Parse(_vlcInputItem,


=====================================
modules/gui/macosx/panels/VLCInformationWindowController.h
=====================================
@@ -71,7 +71,7 @@
 @property (readwrite, weak) IBOutlet VLCSettingTextField *actorsTextField;
 @property (readwrite, weak) IBOutlet NSTextField *directorLabel;
 @property (readwrite, weak) IBOutlet VLCSettingTextField *directorTextField;
-@property (readwrite, weak) IBOutlet VLCImageView *artworkImageView;
+@property (readwrite, weak) IBOutlet NSButton *artworkImageButton;
 @property (readwrite, weak) IBOutlet NSButton *saveMetaDataButton;
 
 @property (readwrite, weak) IBOutlet NSTextField *audioLabel;
@@ -113,6 +113,7 @@
 
 - (IBAction)toggleWindow:(id)sender;
 - (IBAction)saveMetaData:(id)sender;
+- (IBAction)chooseArtwork:(id)sender;
 
 - (void)setRepresentedInputItem:(VLCInputItem *)representedInputItem;
 - 
(void)setRepresentedMediaLibraryAudioGroup:(id<VLCMediaLibraryAudioGroupProtocol>)representedMediaLibraryAudioGroup;


=====================================
modules/gui/macosx/panels/VLCInformationWindowController.m
=====================================
@@ -88,6 +88,7 @@ actionCallback(encodedBy);
 {
     VLCCodecInformationTreeItem *_rootCodecInformationItem;
     NSImage *_artwork;
+    NSURL *_newArtworkURL;
     BOOL _statisticsEnabled;
 }
 @end
@@ -348,7 +349,7 @@ _##field##TextField.delegate = self
 
 #undef FILL_FIELD_FROM_INPUTITEM
 
-    _artworkImageView.image = _artwork;
+    _artworkImageButton.image = _artwork;
 
     if (!_mainMenuInstance) {
         [self.window setTitle:inputItem.title];
@@ -375,12 +376,15 @@ _##field##TextField.delegate = self
     
 #undef FILL_FIELD_FROM_DICT
 
-    _artworkImageView.image = _artwork;
+    _artworkImageButton.image = _artwork;
 }
 
 - (void)updateRepresentation
 {
     _saveMetaDataButton.enabled = NO;
+    _newArtworkURL = nil;
+    _artworkImageButton.image = _artwork;
+    _artworkImageButton.alternateImage = _artwork;
 
     if (_representedInputItems.count == 0) {
         /* Erase */
@@ -390,7 +394,7 @@ _##field##TextField.originalStateString = @"";
         PERFORM_ACTION_ALL_TEXTFIELDS(CLEAR_TEXT);
 
 #undef CLEAR_TEXT
-        [_artworkImageView setImage:[NSImage imageNamed:@"noart.png"]];
+        _artworkImageButton.image = [NSImage imageNamed:@"noart.png"];
     } else if (_representedInputItems.count == 1) {
         [self fillWindowWithInputItemData:_representedInputItems.firstObject];
     } else if (_representedInputItems.count > 1) {
@@ -468,6 +472,8 @@ settingsChanged = settingsChanged || 
_##field##TextField.settingChanged;
     PERFORM_ACTION_ALL_TEXTFIELDS(CHECK_FIELD_SETTING_CHANGED);
 
 #undef CHECK_FIELD_SETTING_CHANGED
+
+    settingsChanged = settingsChanged || _newArtworkURL != nil;
     
     _saveMetaDataButton.enabled = settingsChanged;
 }
@@ -488,9 +494,13 @@ settingsChanged = settingsChanged || 
_##field##TextField.settingChanged;
 SET_INPUTITEM_PROP(field, field)                \
     
     for (VLCInputItem * const inputItem in inputItems) {
-        SET_INPUTITEM_PROP(title, name);
+        SET_INPUTITEM_PROP(title, name); // Input items do not have a title 
field
         PERFORM_ACTION_READWRITE_TEXTFIELDS(SET_INPUTITEM_MATCHING_PROP);
 
+        if (_newArtworkURL != nil) { // Artwork urls require their own handling
+            inputItem.artworkURL = _newArtworkURL;
+        }
+
         [inputItem writeMetadataToFile];
     }
 
@@ -513,6 +523,36 @@ SET_INPUTITEM_PROP(field, field)                \
     }
 }
 
+- (IBAction)chooseArtwork:(id)sender
+{
+    NSOpenPanel * const panel = [NSOpenPanel openPanel];
+    [panel setAllowedFileTypes:@[@"png", @"jpg", @"jpeg", @"gif", @"tiff", 
@"tif", @"bmp"]];
+    [panel setAllowsMultipleSelection:NO];
+    [panel setCanChooseDirectories:NO];
+    [panel setCanChooseFiles:YES];
+    [panel setCanCreateDirectories:NO];
+    [panel setResolvesAliases:YES];
+    [panel setAllowsOtherFileTypes:NO];
+    [panel setPrompt:_NS("Choose")];
+    [panel beginSheetModalForWindow:self.window completionHandler:^(const 
NSInteger result) {
+        if (result != NSFileHandlingPanelOKButton) {
+            return;
+        }
+
+        NSURL * const url = panel.URLs.firstObject;
+        NSImage * const image = [[NSImage alloc] initWithContentsOfURL:url];
+        if (!image) {
+            return;
+        }
+
+        _artwork = image;
+        _artworkImageButton.image = [[NSImage alloc] 
initWithContentsOfURL:url];
+
+        _newArtworkURL = url;
+        _saveMetaDataButton.enabled = YES;
+    }];
+}
+
 @end
 
 @implementation VLCInformationWindowController (NSTableDataSource)



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/a66b4e82a709e260fa7590dc45b0215529a00f07...f7c3a6fb7d56f05f0d7baea8ab26b75cf585bb68

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/compare/a66b4e82a709e260fa7590dc45b0215529a00f07...f7c3a6fb7d56f05f0d7baea8ab26b75cf585bb68
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance
_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to