Skip to content

Commit 85096c4

Browse files
cocoaui: use TrackPropertiesListViewController for representing trkproperties tabs content
1 parent 33ce619 commit 85096c4

File tree

9 files changed

+168
-807
lines changed

9 files changed

+168
-807
lines changed

osx/deadbeef.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12187,10 +12187,10 @@
1218712187
2DB52F6A24CF7CB50046D516 /* TrackProperties */ = {
1218812188
isa = PBXGroup;
1218912189
children = (
12190-
2DD062D22EC13F9E006F3223 /* TrackProperties.xib */,
1219112190
2DD062CB2EC13F21006F3223 /* AddField */,
1219212191
2DD062DB2EC14A04006F3223 /* EditMultipleValues */,
1219312192
2DD062D42EC145B2006F3223 /* EditSingleValue */,
12193+
2DD062D22EC13F9E006F3223 /* TrackProperties.xib */,
1219412194
2DD062BB2EC1135E006F3223 /* TrackPropertiesListItem.h */,
1219512195
2DD062BC2EC1135E006F3223 /* TrackPropertiesListItem.m */,
1219612196
2DD062B72EC10E4E006F3223 /* TrackPropertiesListViewController.h */,

plugins/cocoaui/DdbTabStrip/DdbTabStrip.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -970,11 +970,10 @@ - (void)trackContextMenuDidReloadMetadata:(nonnull TrackContextMenu *)trackConte
970970
- (void)trackContextMenuShowTrackProperties:(nonnull TrackContextMenu *)trackContextMenu {
971971
if (!self.trkProperties) {
972972
self.trkProperties = [[TrackPropertiesWindowController alloc] initWithWindowNibName:@"TrackProperties"];
973-
self.trkProperties.context = DDB_ACTION_CTX_PLAYLIST;
974973
self.trkProperties.delegate = self;
975974
}
976975
ddb_playlist_t *plt = deadbeef->plt_get_for_idx ((int)self.clickedTabIndex);
977-
self.trkProperties.playlist = plt;
976+
[self.trkProperties setPlaylist:plt context:DDB_ACTION_CTX_PLAYLIST];
978977
deadbeef->plt_unref (plt);
979978
[self.trkProperties showWindow:self];
980979
}

plugins/cocoaui/DesignMode/Widgets/PlaylistBrowser/PlaylistBrowserViewController.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -372,11 +372,10 @@ - (void)trackContextMenuDidReloadMetadata:(nonnull TrackContextMenu *)trackConte
372372
- (void)trackContextMenuShowTrackProperties:(nonnull TrackContextMenu *)trackContextMenu {
373373
if (!self.trkProperties) {
374374
self.trkProperties = [[TrackPropertiesWindowController alloc] initWithWindowNibName:@"TrackProperties"];
375-
self.trkProperties.context = DDB_ACTION_CTX_PLAYLIST;
376375
self.trkProperties.delegate = self;
377376
}
378377
ddb_playlist_t *plt = deadbeef->plt_get_for_idx ((int)self.clickedRowIndex);
379-
self.trkProperties.playlist = plt;
378+
[self.trkProperties setPlaylist:plt context:DDB_ACTION_CTX_PLAYLIST];
380379
deadbeef->plt_unref (plt);
381380
[self.trkProperties showWindow:self];
382381
}

plugins/cocoaui/TrackProperties/TrackProperties.xib

Lines changed: 4 additions & 189 deletions
Large diffs are not rendered by default.

plugins/cocoaui/TrackProperties/TrackPropertiesListViewController.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ typedef NS_ENUM(NSUInteger, TrackPropertiesListFlag) {
5353

5454
@property (nonatomic) NSMutableArray<TrackPropertiesListItem *> *store;
5555
@property (nonatomic) BOOL isModified;
56+
@property (nonatomic,readonly) ddb_playItem_t **tracks;
57+
@property (nonatomic,readonly) int numtracks;
5658

5759
- (void)loadFromPlaylist:(ddb_playlist_t *)playlist context:(ddb_action_context_t)context flags:(NSUInteger)flags;
5860
- (void)loadFromMediaLibraryItems:(NSArray<MediaLibraryItem *> *)mediaLibraryItems flags:(NSUInteger)flags;

plugins/cocoaui/TrackProperties/TrackPropertiesListViewController.m

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
*/
2323

2424
#import "AddNewFieldWindowController.h"
25+
#import "DdbTableViewRightClickActivate.h"
2526
#import "EditSingleValueWindowController.h"
2627
#import "EditMultipleValuesWindowController.h"
2728
#import "MediaLibraryItem.h"
@@ -107,6 +108,8 @@ @interface TrackPropertiesListViewController () <NSTableViewDataSource, NSTableV
107108
@property (nonatomic) EditMultipleValuesWindowController *editMultipleValuesWindowController;
108109
@property (nonatomic) TrackPropertiesMultipleFieldsTableData *multipleFieldsTableData;
109110

111+
@property (nonatomic) NSTableColumn *valueColumn;
112+
110113
@end
111114

112115
@implementation TrackPropertiesListViewController
@@ -128,6 +131,8 @@ - (void)loadFromPlaylist:(ddb_playlist_t *)playlist context:(ddb_action_context_
128131
if (playlist != NULL) {
129132
trkproperties_build_track_list_for_ctx (playlist, context, &_tracks, &_numtracks);
130133
}
134+
135+
[self reloadData];
131136
}
132137

133138
- (void)loadFromMediaLibraryItems:(NSArray<MediaLibraryItem *> *)mediaLibraryItems flags:(NSUInteger)flags {
@@ -152,18 +157,23 @@ - (void)loadFromMediaLibraryItems:(NSArray<MediaLibraryItem *> *)mediaLibraryIte
152157
}
153158

154159
- (void)loadView {
155-
NSTableView *tableView = [NSTableView new];
156-
tableView.usesAlternatingRowBackgroundColors = YES;
157-
tableView.allowsMultipleSelection = YES;
158-
tableView.allowsColumnReordering = NO;
159-
tableView.allowsColumnResizing = YES;
160-
tableView.allowsColumnSelection = NO;
161-
tableView.allowsEmptySelection = YES;
162-
tableView.allowsTypeSelect = YES;
163-
tableView.allowsExpansionToolTips = YES;
164-
tableView.headerView = [[NSTableHeaderView alloc] initWithFrame:NSMakeRect(0, 0, 400, 20)];
165-
tableView.rowSizeStyle = NSTableViewRowSizeStyleDefault;
166-
tableView.selectionHighlightStyle = NSTableViewSelectionHighlightStyleRegular;
160+
DdbTableViewRightClickActivate *tableView = [DdbTableViewRightClickActivate new];
161+
[tableView setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
162+
[tableView setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle];
163+
[tableView setAllowsColumnReordering:NO];
164+
[tableView setUsesAlternatingRowBackgroundColors:NO];
165+
[tableView setAllowsExpansionToolTips:YES];
166+
[tableView setAutosaveTableColumns:NO];
167+
168+
[tableView setBackgroundColor:[NSColor controlBackgroundColor]];
169+
[tableView setGridColor:[NSColor gridColor]];
170+
[tableView setIntercellSpacing:NSMakeSize(3, 2)];
171+
[tableView setRowHeight:17.0];
172+
[tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleRegular];
173+
174+
if (@available(macOS 11.0, *)) {
175+
tableView.style = NSTableViewStyleFullWidth;
176+
}
167177
tableView.columnAutoresizingStyle = NSTableViewUniformColumnAutoresizingStyle;
168178
tableView.allowsMultipleSelection = YES;
169179

@@ -178,17 +188,21 @@ - (void)loadView {
178188
NSTableColumn *valueColumn = [[NSTableColumn alloc] initWithIdentifier:@"value"];
179189
valueColumn.title = @"Value";
180190
valueColumn.resizingMask = NSTableColumnUserResizingMask;
181-
valueColumn.editable = YES;
182191
valueColumn.width = 300;
192+
self.valueColumn = valueColumn;
193+
194+
// TODO: Handle case when the same table contains both editable and non-editable items
195+
valueColumn.editable = (self.flags & TrackPropertiesListFlagMetadata) != 0;
183196

184197
[tableView addTableColumn:nameColumn];
185198
[tableView addTableColumn:valueColumn];
186199

187200
// Create scroll view container
188-
NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:NSMakeRect(0, 0, 400, 300)];
189-
scrollView.hasVerticalScroller = YES;
190-
scrollView.hasHorizontalScroller = YES;
191-
scrollView.autohidesScrollers = YES;
201+
NSScrollView *scrollView = [NSScrollView new];
202+
[scrollView setHasVerticalScroller:YES];
203+
[scrollView setHasHorizontalScroller:YES];
204+
[scrollView setAutohidesScrollers:YES];
205+
[scrollView setBorderType:NSNoBorder];
192206
scrollView.documentView = tableView;
193207

194208
tableView.autosaveName = @"TrackPropertiesTableView";
@@ -211,9 +225,10 @@ - (void)viewDidLoad {
211225
[self.tableView reloadData];
212226
}
213227

214-
// TODO: separate class
215228
- (NSMenu *)createContextMenu {
216229
NSMenu *menu = [NSMenu new];
230+
menu.autoenablesItems = NO;
231+
217232
self.editItem = [menu addItemWithTitle:@"Edit" action:@selector(editValueAction:) keyEquivalent:@""];
218233
self.editItem.target = self;
219234

@@ -263,10 +278,15 @@ - (NSMenu *)createContextMenu {
263278

264279
- (void)reloadData {
265280
[self fillStore];
281+
// TODO: Handle case when the same table contains both editable and non-editable items
282+
self.valueColumn.editable = (self.flags & TrackPropertiesListFlagMetadata) != 0;
266283
[self.tableView reloadData];
267284
}
268285

269286
- (void)fillStore {
287+
if (self.store == nil) {
288+
self.store = [NSMutableArray new];
289+
}
270290
[self.store removeAllObjects];
271291
if (self.tracks == NULL) {
272292
return;

plugins/cocoaui/TrackProperties/TrackPropertiesManager.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,10 @@ + (void)deinitializeSharedInstance {
5151
- (void)displayTrackProperties {
5252
if (!self.trkProperties) {
5353
self.trkProperties = [[TrackPropertiesWindowController alloc] initWithWindowNibName:@"TrackProperties"];
54-
self.trkProperties.context = DDB_ACTION_CTX_SELECTION;
5554
self.trkProperties.delegate = self;
5655
}
5756
ddb_playlist_t *plt = deadbeef->plt_get_curr ();
58-
self.trkProperties.playlist = plt;
57+
[self.trkProperties setPlaylist:plt context:DDB_ACTION_CTX_SELECTION];
5958
deadbeef->plt_unref (plt);
6059
[self.trkProperties showWindow:self];
6160
}

plugins/cocoaui/TrackProperties/TrackPropertiesWindowController.h

Lines changed: 2 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -36,75 +36,7 @@
3636

3737
@property (nonatomic,weak) id<TrackPropertiesWindowControllerDelegate> delegate;
3838

39-
@property (nonatomic) ddb_playlist_t *playlist;
40-
@property (nonatomic) ddb_action_context_t context;
41-
@property (nonatomic) NSArray<MediaLibraryItem *> *mediaLibraryItems;
42-
43-
@property (unsafe_unretained) BOOL isModified;
44-
45-
// trkproperties window
46-
@property (unsafe_unretained) IBOutlet NSTableView *metadataTableView;
47-
@property (unsafe_unretained) IBOutlet NSTableView *propertiesTableView;
48-
@property (unsafe_unretained) IBOutlet NSTextField *filename;
49-
- (IBAction)applyTrackPropertiesAction:(id)sender;
50-
- (IBAction)configureTagWritingAction:(id)sender;
51-
- (IBAction)reloadTrackPropertiesAction:(id)sender;
52-
- (IBAction)cancelTrackPropertiesAction:(id)sender;
53-
- (IBAction)okTrackPropertiesAction:(id)sender;
54-
55-
// menu
56-
- (IBAction)editValueAction:(id)sender;
57-
- (IBAction)editInPlaceAction:(id)sender;
58-
- (IBAction)editCropAction:(id)sender;
59-
- (IBAction)editCapitalizeAction:(id)sender;
60-
- (IBAction)addNewField:(id)sender;
61-
62-
// metadata writing progress dialog
63-
@property (strong) IBOutlet NSPanel *progressPanel;
64-
@property (unsafe_unretained) IBOutlet NSTextField *currentTrackPath;
65-
- (IBAction)cancelWritingAction:(id)sender;
66-
67-
// tag writer settings
68-
@property (strong) IBOutlet NSPanel *tagWriterSettingsPanel;
69-
- (IBAction)tagWriterSettingsCloseAction:(id)sender;
70-
71-
@property (unsafe_unretained) IBOutlet NSButton *mp3WriteID3v2;
72-
@property (unsafe_unretained) IBOutlet NSButton *mp3WriteID3v1;
73-
@property (unsafe_unretained) IBOutlet NSButton *mp3WriteAPEv2;
74-
@property (unsafe_unretained) IBOutlet NSButton *mp3StripID3v2;
75-
@property (unsafe_unretained) IBOutlet NSButton *mp3StripID3v1;
76-
@property (unsafe_unretained) IBOutlet NSButton *mp3StripAPEv2;
77-
@property (unsafe_unretained) IBOutlet NSPopUpButton *mp3ID3v2Version;
78-
@property (unsafe_unretained) IBOutlet NSTextField *mp3ID3v1Charset;
79-
80-
- (IBAction)mp3WriteID3v2Action:(id)sender;
81-
- (IBAction)mp3WriteID3v1Action:(id)sender;
82-
- (IBAction)mp3WriteAPEv2Action:(id)sender;
83-
- (IBAction)mp3StripID3v2Action:(id)sender;
84-
- (IBAction)mp3StripID3v1Action:(id)sender;
85-
- (IBAction)mp3StripAPEv2Action:(id)sender;
86-
- (IBAction)mp3ID3v2VersionChangeAction:(id)sender;
87-
- (IBAction)mp3ID3v1CharsetChangeAction:(id)sender;
88-
89-
90-
@property (unsafe_unretained) IBOutlet NSButton *apeWriteID3v2;
91-
@property (unsafe_unretained) IBOutlet NSButton *apeWriteAPEv2;
92-
@property (unsafe_unretained) IBOutlet NSButton *apeStripID3v2;
93-
@property (unsafe_unretained) IBOutlet NSButton *apeStripAPEv2;
94-
95-
- (IBAction)apeWriteID3v2Action:(id)sender;
96-
- (IBAction)apeWriteAPEv2Action:(id)sender;
97-
- (IBAction)apeStripID3v2Action:(id)sender;
98-
- (IBAction)apeStripAPEv2Action:(id)sender;
99-
100-
@property (unsafe_unretained) IBOutlet NSButton *wvWriteAPEv2;
101-
@property (unsafe_unretained) IBOutlet NSButton *wvWriteID3v1;
102-
@property (unsafe_unretained) IBOutlet NSButton *wvStripAPEv2;
103-
@property (unsafe_unretained) IBOutlet NSButton *wvStripID3v1;
104-
105-
- (IBAction)wvWriteAPEv2Action:(id)sender;
106-
- (IBAction)wvWriteID3v1Action:(id)sender;
107-
- (IBAction)wvStripAPEv2Action:(id)sender;
108-
- (IBAction)wvStripID3v1Action:(id)sender;
39+
- (void)setPlaylist:(ddb_playlist_t *)playlist context:(ddb_action_context_t)context;
40+
- (void)setMediaLibraryItems:(NSArray<MediaLibraryItem *> *)mediaLibraryItems;
10941

11042
@end

0 commit comments

Comments
 (0)