Commit 5b433794 authored by Tobias's avatar Tobias

add title chapter selection view

parent afe07fbb
/*****************************************************************************
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan # tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCPlaybackInfoPanelTVViewController.h"
@interface VLCPlaybackInfoChaptersTVViewController : VLCPlaybackInfoPanelTVViewController
@property (nonatomic, weak) IBOutlet UICollectionView *titlesCollectionView;
@property (nonatomic, weak) IBOutlet UICollectionView *chaptersCollectionView;
@end
/*****************************************************************************
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan # tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCPlaybackInfoChaptersTVViewController.h"
#import "VLCPlaybackInfoCollectionViewDataSource.h"
#import "VLCPlaybackInfoTVCollectionViewCell.h"
#import "VLCPlaybackInfoTVCollectionSectionTitleView.h"
#define CONTENT_INSET 20.
@interface VLCPlaybackInfoTitlesDataSource : VLCPlaybackInfoCollectionViewDataSource <UICollectionViewDataSource, UICollectionViewDelegate>
// other collectionView which sould be updated when selection changes
@property (nonatomic) UICollectionView *dependendCollectionView;
@end
@interface VLCPlaybackInfoChaptersTVViewController ()
@property (nonatomic) IBOutlet VLCPlaybackInfoTitlesDataSource *titlesDataSource;
@property (nonatomic) IBOutlet VLCPlaybackInfoCollectionViewDataSource *chaptersDataSource;
@end
@implementation VLCPlaybackInfoChaptersTVViewController
- (instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = NSLocalizedString(@"CHAPTER_SELECTION_TITLE", nil);
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
UINib *nib = [UINib nibWithNibName:@"VLCPlaybackInfoTVCollectionViewCell" bundle:nil];
NSString *identifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
[self.titlesCollectionView registerNib:nib forCellWithReuseIdentifier:identifier];
[VLCPlaybackInfoTVCollectionSectionTitleView registerInCollectionView:self.titlesCollectionView];
[self.chaptersCollectionView registerNib:nib forCellWithReuseIdentifier:identifier];
[VLCPlaybackInfoTVCollectionSectionTitleView registerInCollectionView:self.chaptersCollectionView];
NSLocale *currentLocale = [NSLocale currentLocale];
self.titlesDataSource.title = [NSLocalizedString(@"TITLE", nil) uppercaseStringWithLocale:currentLocale];
self.titlesDataSource.cellIdentifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
self.chaptersDataSource.title = [NSLocalizedString(@"CHAPTER", nil) uppercaseStringWithLocale:currentLocale];
self.chaptersDataSource.cellIdentifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
self.titlesDataSource.dependendCollectionView = self.chaptersCollectionView;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaPlayerChanged) name:VLCPlaybackControllerPlaybackMetadataDidChange object:nil];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self mediaPlayerChanged];
}
- (CGSize)preferredContentSize
{
CGFloat prefferedHeight = MAX(self.titlesCollectionView.contentSize.height, self.chaptersCollectionView.contentSize.height) + CONTENT_INSET;
return CGSizeMake(CGRectGetWidth(self.view.bounds), prefferedHeight);
}
- (void)mediaPlayerChanged
{
[self.titlesCollectionView reloadData];
[self.chaptersCollectionView reloadData];
}
@end
@interface VLCPlaybackInfoChaptersDataSource : VLCPlaybackInfoCollectionViewDataSource <UICollectionViewDataSource, UICollectionViewDelegate>
@end
@implementation VLCPlaybackInfoTitlesDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.mediaPlayer.numberOfTitles;
}
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
VLCPlaybackInfoTVCollectionViewCell *trackCell = (VLCPlaybackInfoTVCollectionViewCell*)cell;
NSInteger row = indexPath.row;
BOOL isSelected = self.mediaPlayer.currentTitleIndex == row;
trackCell.selectionMarkerVisible = isSelected;
NSDictionary *description = self.mediaPlayer.titleDescriptions[row];
NSString *tileName = [NSString stringWithFormat:@"%@ (%@)", description[VLCTitleDescriptionName], [[VLCTime timeWithNumber:description[VLCTitleDescriptionDuration]] stringValue]];
trackCell.titleLabel.text = tileName;
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
self.mediaPlayer.currentTitleIndex = (int)indexPath.row;
[collectionView reloadData];
[self.dependendCollectionView reloadData];
}
@end
@implementation VLCPlaybackInfoChaptersDataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
VLCMediaPlayer *player = self.mediaPlayer;
return [player numberOfChaptersForTitle:player.currentTitleIndex];
}
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
VLCPlaybackInfoTVCollectionViewCell *trackCell = (VLCPlaybackInfoTVCollectionViewCell*)cell;
NSInteger row = indexPath.row;
VLCMediaPlayer *player = self.mediaPlayer;
BOOL isSelected = player.currentChapterIndex == row;
trackCell.selectionMarkerVisible = isSelected;
NSDictionary *description = [player chapterDescriptionsOfTitle:player.currentTitleIndex][row];
NSString *chapterTitle = [NSString stringWithFormat:@"%@ (%@)", description[VLCChapterDescriptionName], [[VLCTime timeWithNumber:description[VLCChapterDescriptionDuration]] stringValue]];
trackCell.titleLabel.text = chapterTitle;
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
self.mediaPlayer.currentChapterIndex = (int)indexPath.row;
[collectionView reloadData];
}
@end
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder.AppleTV.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="AppleTV" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9051"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="VLCPlaybackInfoChaptersTVViewController">
<connections>
<outlet property="chaptersCollectionView" destination="YZb-MS-8i8" id="xuU-oT-fOR"/>
<outlet property="chaptersDataSource" destination="Z5d-WW-D76" id="adK-ss-psh"/>
<outlet property="titlesCollectionView" destination="rYJ-pW-rFQ" id="NgZ-KP-IoP"/>
<outlet property="titlesDataSource" destination="odX-Um-Jiy" id="VQb-1o-5L3"/>
<outlet property="view" destination="iN0-l3-epB" id="Rsf-oc-98a"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="1920" height="500"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="YZb-MS-8i8">
<rect key="frame" x="1060" y="0.0" width="660" height="500"/>
<animations/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="2bC-W2-ECp" customClass="VLCFullWidthCollectionViewFlowLayout">
<size key="itemSize" width="660" height="50"/>
<size key="headerReferenceSize" width="660" height="50"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<connections>
<outlet property="dataSource" destination="Z5d-WW-D76" id="CEX-jp-S6S"/>
<outlet property="delegate" destination="Z5d-WW-D76" id="t1D-sI-B0C"/>
</connections>
</collectionView>
<collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="none" translatesAutoresizingMaskIntoConstraints="NO" id="rYJ-pW-rFQ">
<rect key="frame" x="200" y="0.0" width="660" height="500"/>
<animations/>
<collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="ceq-Lt-V8g" customClass="VLCFullWidthCollectionViewFlowLayout">
<size key="itemSize" width="660" height="50"/>
<size key="headerReferenceSize" width="660" height="50"/>
<size key="footerReferenceSize" width="0.0" height="0.0"/>
<inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
</collectionViewFlowLayout>
<connections>
<outlet property="dataSource" destination="odX-Um-Jiy" id="0oK-qY-Aiz"/>
<outlet property="delegate" destination="odX-Um-Jiy" id="hDT-5c-OYk"/>
</connections>
</collectionView>
</subviews>
<animations/>
<constraints>
<constraint firstAttribute="bottom" secondItem="rYJ-pW-rFQ" secondAttribute="bottom" priority="500" id="5QS-de-XaJ"/>
<constraint firstItem="rYJ-pW-rFQ" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="Grw-co-Uag"/>
<constraint firstItem="rYJ-pW-rFQ" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="200" id="HMO-0c-28f"/>
<constraint firstItem="YZb-MS-8i8" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="lJk-bE-qdA"/>
<constraint firstItem="YZb-MS-8i8" firstAttribute="width" secondItem="rYJ-pW-rFQ" secondAttribute="width" id="mvl-Qm-zsX"/>
<constraint firstAttribute="bottom" secondItem="YZb-MS-8i8" secondAttribute="bottom" priority="500" id="twj-q2-HtE"/>
<constraint firstAttribute="trailing" secondItem="YZb-MS-8i8" secondAttribute="trailing" constant="200" id="xiO-53-o5T"/>
<constraint firstItem="YZb-MS-8i8" firstAttribute="leading" secondItem="rYJ-pW-rFQ" secondAttribute="trailing" constant="200" id="xqK-zW-jRW"/>
</constraints>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="384" y="420"/>
</view>
<customObject id="odX-Um-Jiy" customClass="VLCPlaybackInfoTitlesDataSource"/>
<customObject id="Z5d-WW-D76" customClass="VLCPlaybackInfoChaptersDataSource"/>
</objects>
</document>
/*****************************************************************************
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan # tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import <Foundation/Foundation.h>
@interface VLCPlaybackInfoCollectionViewDataSource : NSObject
@property (nonatomic, readonly) VLCMediaPlayer *mediaPlayer;
@property (nonatomic) NSString *title;
@property (nonatomic) NSString *cellIdentifier;
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
@end
\ No newline at end of file
/*****************************************************************************
* VLC for iOS
*****************************************************************************
* Copyright (c) 2015 VideoLAN. All rights reserved.
* $Id$
*
* Authors: Tobias Conradi <videolan # tobias-conradi.de>
*
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCPlaybackInfoCollectionViewDataSource.h"
#import "VLCPlaybackInfoTVCollectionSectionTitleView.h"
@implementation VLCPlaybackInfoCollectionViewDataSource
- (VLCMediaPlayer *)mediaPlayer
{
return [VLCPlaybackController sharedInstance].mediaPlayer;
}
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
VLCPlaybackInfoTVCollectionSectionTitleView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:[VLCPlaybackInfoTVCollectionSectionTitleView identifier] forIndexPath:indexPath];
BOOL showTitle = [collectionView numberOfItemsInSection:indexPath.section] != 0;
header.titleLabel.text = showTitle ? self.title : nil;
return header;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
return [collectionView dequeueReusableCellWithReuseIdentifier:self.cellIdentifier forIndexPath:indexPath];
}
@end
......@@ -11,7 +11,7 @@
#import <UIKit/UIKit.h>
@interface VLCPlaybackInfoTrackTVTitleView : UICollectionReusableView
@interface VLCPlaybackInfoTVCollectionSectionTitleView : UICollectionReusableView
@property (nonatomic) UILabel *titleLabel;
+ (void)registerInCollectionView:(UICollectionView *)collectionView;
......
......@@ -9,9 +9,9 @@
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCPlaybackInfoTrackTVTitleView.h"
#import "VLCPlaybackInfoTVCollectionSectionTitleView.h"
@implementation VLCPlaybackInfoTrackTVTitleView
@implementation VLCPlaybackInfoTVCollectionSectionTitleView
- (instancetype)initWithFrame:(CGRect)frame
{
......@@ -34,7 +34,7 @@
+ (NSString *)identifier
{
return @"VLCPlaybackInfoTrackTVTitleView";
return @"VLCPlaybackInfoTVCollectionSectionTitleView";
}
......
......@@ -11,7 +11,7 @@
#import <UIKit/UIKit.h>
@interface VLCPlaybackInfoTrackTVCell : UICollectionViewCell
@interface VLCPlaybackInfoTVCollectionViewCell : UICollectionViewCell
@property (nonatomic) IBOutlet UILabel *selectionMarkerView;
@property (nonatomic) IBOutlet UILabel *titleLabel;
@property (nonatomic) BOOL selectionMarkerVisible;
......
......@@ -9,13 +9,13 @@
* Refer to the COPYING file of the official project for license.
*****************************************************************************/
#import "VLCPlaybackInfoTrackTVCell.h"
#import "VLCPlaybackInfoTVCollectionViewCell.h"
@implementation VLCPlaybackInfoTrackTVCell
@implementation VLCPlaybackInfoTVCollectionViewCell
+ (NSString *)identifier
{
return @"VLCPlaybackInfoTrackTVCell";
return @"VLCPlaybackInfoTVCollectionViewCell";
}
- (void)awakeFromNib
......
......@@ -6,7 +6,7 @@
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<collectionViewCell opaque="NO" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="VLCPlaybackInfoTrackTVCell" id="m1I-s4-RPj" customClass="VLCPlaybackInfoTrackTVCell">
<collectionViewCell opaque="NO" multipleTouchEnabled="YES" contentMode="center" reuseIdentifier="VLCPlaybackInfoTVCollectionViewCell" id="m1I-s4-RPj" customClass="VLCPlaybackInfoTVCollectionViewCell">
<rect key="frame" x="0.0" y="0.0" width="460" height="56"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
......@@ -17,14 +17,14 @@
<rect key="frame" x="48" y="0.0" width="412" height="56"/>
<animations/>
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="500" text="✔︎" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YMP-ov-ixd">
<rect key="frame" x="8" y="0.0" width="32" height="56"/>
<animations/>
<fontDescription key="fontDescription" style="UICTFontTextStyleHeadline"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
......
......@@ -14,7 +14,7 @@
#import "VLCPlaybackInfoMediaInfoTVViewController.h"
#import "VLCPlaybackInfoTVAnimators.h"
#import "VLCPlaybackInfoTracksTVViewController.h"
#import "VLCPlaybackInfoChaptersTVViewController.h"
// just for appearance reasons
@interface VLCPlaybackInfoTVTabBarController : UITabBarController
......@@ -27,9 +27,10 @@
- (NSArray<UIViewController*>*)tabViewControllers
{
return @[
[[VLCPlaybackInfoRateTVViewController alloc] initWithNibName:nil bundle:nil],
[[VLCPlaybackInfoMediaInfoTVViewController alloc] initWithNibName:nil bundle:nil],
[[VLCPlaybackInfoChaptersTVViewController alloc] initWithNibName:nil bundle:nil],
[[VLCPlaybackInfoTracksTVViewController alloc] initWithNibName:nil bundle:nil],
[[VLCPlaybackInfoRateTVViewController alloc] initWithNibName:nil bundle:nil],
];
}
......
......@@ -10,20 +10,16 @@
*****************************************************************************/
#import "VLCPlaybackInfoTracksTVViewController.h"
#import "VLCPlaybackInfoTrackTVCell.h"
#import "VLCPlaybackInfoTrackTVTitleView.h"
#import "VLCPlaybackInfoTVCollectionViewCell.h"
#import "VLCPlaybackInfoTVCollectionSectionTitleView.h"
#import "VLCPlaybackInfoCollectionViewDataSource.h"
#define CONTENT_INSET 20.
@interface VLCPlaybackInfoTracksDataSource : NSObject
@property (nonatomic, readonly) VLCMediaPlayer *mediaPlayer;
@property (nonatomic) NSString *title;
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
@end
@interface VLCPlaybackInfoTracksDataSourceAudio : VLCPlaybackInfoTracksDataSource <UICollectionViewDataSource, UICollectionViewDelegate>
@interface VLCPlaybackInfoTracksDataSourceAudio : VLCPlaybackInfoCollectionViewDataSource <UICollectionViewDataSource, UICollectionViewDelegate>
@end
@interface VLCPlaybackInfoTracksDataSourceSubtitle : VLCPlaybackInfoTracksDataSource <UICollectionViewDataSource, UICollectionViewDelegate>
@interface VLCPlaybackInfoTracksDataSourceSubtitle : VLCPlaybackInfoCollectionViewDataSource <UICollectionViewDataSource, UICollectionViewDelegate>
@end
......@@ -48,17 +44,18 @@
- (void)viewDidLoad
{
[super viewDidLoad];
UINib *nib = [UINib nibWithNibName:@"VLCPlaybackInfoTrackTVCell" bundle:nil];
NSString *identifier = [VLCPlaybackInfoTrackTVCell identifier];
UINib *nib = [UINib nibWithNibName:@"VLCPlaybackInfoTVCollectionViewCell" bundle:nil];
NSString *identifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
[self.audioTrackCollectionView registerNib:nib forCellWithReuseIdentifier:identifier];
[self.subtitleTrackCollectionView registerNib:nib forCellWithReuseIdentifier:identifier];
[VLCPlaybackInfoTrackTVTitleView registerInCollectionView:self.audioTrackCollectionView];
[VLCPlaybackInfoTrackTVTitleView registerInCollectionView:self.subtitleTrackCollectionView];
[VLCPlaybackInfoTVCollectionSectionTitleView registerInCollectionView:self.audioTrackCollectionView];
[VLCPlaybackInfoTVCollectionSectionTitleView registerInCollectionView:self.subtitleTrackCollectionView];
NSLocale *currentLocale = [NSLocale currentLocale];
self.audioDataSource.title = [NSLocalizedString(@"AUDIO", nil) uppercaseStringWithLocale:currentLocale];
self.audioDataSource.cellIdentifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
self.subtitleDataSource.title = [NSLocalizedString(@"SUBTITLES", nil) uppercaseStringWithLocale:currentLocale];
self.subtitleDataSource.cellIdentifier = [VLCPlaybackInfoTVCollectionViewCell identifier];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mediaPlayerChanged) name:VLCPlaybackControllerPlaybackMetadataDidChange object:nil];
}
......@@ -87,27 +84,6 @@
@end
@implementation VLCPlaybackInfoTracksDataSource
- (VLCMediaPlayer *)mediaPlayer
{
return [VLCPlaybackController sharedInstance].mediaPlayer;
}
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
VLCPlaybackInfoTrackTVTitleView *header = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:[VLCPlaybackInfoTrackTVTitleView identifier] forIndexPath:indexPath];
BOOL showTitle = [collectionView numberOfItemsInSection:indexPath.section] != 0;
header.titleLabel.text = showTitle ? self.title : nil;
return header;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
return [collectionView dequeueReusableCellWithReuseIdentifier:[VLCPlaybackInfoTrackTVCell identifier] forIndexPath:indexPath];
}
@end
@implementation VLCPlaybackInfoTracksDataSourceAudio
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
......@@ -116,7 +92,7 @@
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
VLCPlaybackInfoTrackTVCell *trackCell = (VLCPlaybackInfoTrackTVCell*)cell;
VLCPlaybackInfoTVCollectionViewCell *trackCell = (VLCPlaybackInfoTVCollectionViewCell*)cell;
NSInteger row = indexPath.row;
BOOL isSelected = [self.mediaPlayer.audioTrackIndexes[row] intValue] == self.mediaPlayer.currentAudioTrackIndex;
trackCell.selectionMarkerVisible = isSelected;
......@@ -144,7 +120,7 @@
}
- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
{
VLCPlaybackInfoTrackTVCell *trackCell = (VLCPlaybackInfoTrackTVCell*)cell;
VLCPlaybackInfoTVCollectionViewCell *trackCell = (VLCPlaybackInfoTVCollectionViewCell*)cell;
NSInteger row = indexPath.row;
BOOL isSelected = [self.mediaPlayer.videoSubTitlesIndexes[row] intValue] == self.mediaPlayer.currentVideoSubTitleIndex;
trackCell.selectionMarkerVisible = isSelected;
......
B"CHOOSE_AUDIO_TRACK"="Audiospur wählen";
......
......@@ -7,6 +7,9 @@
"OPEN_TRACK_PANEL"="Open track selection";
"CHOOSE_TITLE"="Choose Title";
"CHOOSE_CHAPTER"="Choose Chapter";
"CHAPTER_SELECTION_TITLE"="Chapters";
"TITLE"="Title";
"CHAPTER"="Chapter";
"MINIMIZE_PLAYBACK_VIEW"="Minimize playback";
"FULLSCREEN_PLAYBACK"="Play in fullscreen";
"TRACK_SELECTION"="Track Selection";
......
......@@ -352,10 +352,10 @@
DD3EFF5D1BDEBCE500B68579 /* VLCLocalServerDiscoveryController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3EFF2B1BDEBCE500B68579 /* VLCLocalServerDiscoveryController.m */; };
DD3EFF5E1BDEBCE500B68579 /* VLCLocalServerDiscoveryController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD3EFF2B1BDEBCE500B68579 /* VLCLocalServerDiscoveryController.m */; };
DD4089E91BF63AD00022745E /* VLCPlaybackInfoTracksTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD4089E81BF63AD00022745E /* VLCPlaybackInfoTracksTVViewController.xib */; };
DD4089EF1BF646540022745E /* VLCPlaybackInfoTrackTVCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD4089EE1BF646540022745E /* VLCPlaybackInfoTrackTVCell.xib */; };
DD4089F21BF6467E0022745E /* VLCPlaybackInfoTrackTVCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4089F11BF6467E0022745E /* VLCPlaybackInfoTrackTVCell.m */; };
DD4089EF1BF646540022745E /* VLCPlaybackInfoTVCollectionViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD4089EE1BF646540022745E /* VLCPlaybackInfoTVCollectionViewCell.xib */; };
DD4089F21BF6467E0022745E /* VLCPlaybackInfoTVCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4089F11BF6467E0022745E /* VLCPlaybackInfoTVCollectionViewCell.m */; };
DD4089F51BF6556F0022745E /* VLCFullWidthCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4089F41BF6556F0022745E /* VLCFullWidthCollectionViewFlowLayout.m */; };
DD4089FA1BF659030022745E /* VLCPlaybackInfoTrackTVTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4089F91BF659030022745E /* VLCPlaybackInfoTrackTVTitleView.m */; };
DD4089FA1BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD4089F91BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.m */; };
DD490B171BE6BA580010F335 /* VLCIRTVTapGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = DD490B161BE6BA580010F335 /* VLCIRTVTapGestureRecognizer.m */; };
DD490B1F1BE95B5C0010F335 /* VLCSiriRemoteGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = DD490B1E1BE95B5C0010F335 /* VLCSiriRemoteGestureRecognizer.m */; };
DD510B701B14E564003BA71C /* VLCPlayerDisplayController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD510B6F1B14E564003BA71C /* VLCPlayerDisplayController.m */; };
......@@ -372,6 +372,9 @@
DD8095F91BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8095F81BE6268A0065D8E1 /* VLCPlaybackInfoPanelTVViewController.m */; };
DD8F84311B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m in Sources */ = {isa = PBXBuildFile; fileRef = DD8F84301B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m */; };
DD9D8F5F1C00C73F00B4060F /* VLCDeleteHintTVView.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9D8F5E1C00C73F00B4060F /* VLCDeleteHintTVView.m */; };
DD9D8F651C01F96700B4060F /* VLCPlaybackInfoChaptersTVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9D8F631C01F96700B4060F /* VLCPlaybackInfoChaptersTVViewController.m */; };
DD9D8F681C01FAB500B4060F /* VLCPlaybackInfoChaptersTVViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DD9D8F671C01FAB500B4060F /* VLCPlaybackInfoChaptersTVViewController.xib */; };
DD9D8F6B1C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9D8F6A1C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.m */; };
DDAD5C2B1BB999CA006AFD3B /* VLCMovieViewControlPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = DDAD5C2A1BB999CA006AFD3B /* VLCMovieViewControlPanel.xib */; };
DDB7C6A41BAEB28200E6570E /* WKInterfaceController+VLCConnectionAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = DD9FBE761BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.m */; };
DDB959421AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = DDB959411AFBB30500BB8CFF /* MappingModel_2_5_to_2_6.xcmappingmodel */; };
......@@ -1074,13 +1077,13 @@
DD3EFF2B1BDEBCE500B68579 /* VLCLocalServerDiscoveryController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCLocalServerDiscoveryController.m; sourceTree = "<group>"; };
DD3EFF2C1BDEBCE500B68579 /* VLCNetworkServerBrowser-Protocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "VLCNetworkServerBrowser-Protocol.h"; sourceTree = "<group>"; };
DD4089E81BF63AD00022745E /* VLCPlaybackInfoTracksTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VLCPlaybackInfoTracksTVViewController.xib; path = "Playback/Playback Info/VLCPlaybackInfoTracksTVViewController.xib"; sourceTree = "<group>"; };
DD4089EE1BF646540022745E /* VLCPlaybackInfoTrackTVCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VLCPlaybackInfoTrackTVCell.xib; path = "Playback/Playback Info/VLCPlaybackInfoTrackTVCell.xib"; sourceTree = "<group>"; };
DD4089F01BF6467E0022745E /* VLCPlaybackInfoTrackTVCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoTrackTVCell.h; sourceTree = "<group>"; };
DD4089F11BF6467E0022745E /* VLCPlaybackInfoTrackTVCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoTrackTVCell.m; sourceTree = "<group>"; };
DD4089EE1BF646540022745E /* VLCPlaybackInfoTVCollectionViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VLCPlaybackInfoTVCollectionViewCell.xib; path = "Playback/Playback Info/VLCPlaybackInfoTVCollectionViewCell.xib"; sourceTree = "<group>"; };
DD4089F01BF6467E0022745E /* VLCPlaybackInfoTVCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoTVCollectionViewCell.h; sourceTree = "<group>"; };
DD4089F11BF6467E0022745E /* VLCPlaybackInfoTVCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoTVCollectionViewCell.m; sourceTree = "<group>"; };
DD4089F31BF6556F0022745E /* VLCFullWidthCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCFullWidthCollectionViewFlowLayout.h; path = "UI Elements/VLCFullWidthCollectionViewFlowLayout.h"; sourceTree = "<group>"; };
DD4089F41BF6556F0022745E /* VLCFullWidthCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCFullWidthCollectionViewFlowLayout.m; path = "UI Elements/VLCFullWidthCollectionViewFlowLayout.m"; sourceTree = "<group>"; };
DD4089F81BF659030022745E /* VLCPlaybackInfoTrackTVTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoTrackTVTitleView.h; sourceTree = "<group>"; };
DD4089F91BF659030022745E /* VLCPlaybackInfoTrackTVTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoTrackTVTitleView.m; sourceTree = "<group>"; };
DD4089F81BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoTVCollectionSectionTitleView.h; sourceTree = "<group>"; };
DD4089F91BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoTVCollectionSectionTitleView.m; sourceTree = "<group>"; };
DD490B151BE6BA580010F335 /* VLCIRTVTapGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCIRTVTapGestureRecognizer.h; sourceTree = "<group>"; };
DD490B161BE6BA580010F335 /* VLCIRTVTapGestureRecognizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCIRTVTapGestureRecognizer.m; sourceTree = "<group>"; };
DD490B1D1BE95B5C0010F335 /* VLCSiriRemoteGestureRecognizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCSiriRemoteGestureRecognizer.h; sourceTree = "<group>"; };
......@@ -1124,6 +1127,11 @@
DD8F84301B00EB3B0009138A /* VLCPlaybackController+MediaLibrary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "VLCPlaybackController+MediaLibrary.m"; path = "Sources/VLCPlaybackController+MediaLibrary.m"; sourceTree = SOURCE_ROOT; };
DD9D8F5D1C00C73F00B4060F /* VLCDeleteHintTVView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCDeleteHintTVView.h; sourceTree = "<group>"; };
DD9D8F5E1C00C73F00B4060F /* VLCDeleteHintTVView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCDeleteHintTVView.m; sourceTree = "<group>"; };
DD9D8F621C01F96700B4060F /* VLCPlaybackInfoChaptersTVViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoChaptersTVViewController.h; sourceTree = "<group>"; };
DD9D8F631C01F96700B4060F /* VLCPlaybackInfoChaptersTVViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoChaptersTVViewController.m; sourceTree = "<group>"; };
DD9D8F671C01FAB500B4060F /* VLCPlaybackInfoChaptersTVViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = VLCPlaybackInfoChaptersTVViewController.xib; path = "Playback/Playback Info/VLCPlaybackInfoChaptersTVViewController.xib"; sourceTree = "<group>"; };
DD9D8F691C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VLCPlaybackInfoCollectionViewDataSource.h; sourceTree = "<group>"; };
DD9D8F6A1C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VLCPlaybackInfoCollectionViewDataSource.m; sourceTree = "<group>"; };
DD9FBE751BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WKInterfaceController+VLCConnectionAlert.h"; sourceTree = "<group>"; };
DD9FBE761BAD6BB600FFE77A /* WKInterfaceController+VLCConnectionAlert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "WKInterfaceController+VLCConnectionAlert.m"; sourceTree = "<group>"; };
DD9FBE791BADA8E300FFE77A /* VLC WatchKit Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = "VLC WatchKit Extension.entitlements"; path = "../VLC WatchKit Extension.entitlements"; sourceTree = "<group>"; };
......@@ -1852,11 +1860,12 @@
7DEC8BDD1BD67899006E1093 /* VLCFullscreenMovieTVViewController.xib */,
DD8095E41BE3F4240065D8E1 /* VLCPlaybackInfoTVViewController.xib */,
DD8095EA1BE4F04E0065D8E1 /* VLCPlaybackInfoRateTVViewController.xib */,
DD9D8F671C01FAB500B4060F /* VLCPlaybackInfoChaptersTVViewController.xib */,
7D7EF3D91BD56B5900CD4CEE /* VLCOpenNetworkStreamTVViewController.xib */,
DDEAECF51BDFEAFA00756C83 /* VLCLocalNetworkServerTVCell.xib */,
7D51B3AF1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.xib */,
DD4089E81BF63AD00022745E /* VLCPlaybackInfoTracksTVViewController.xib */,
DD4089EE1BF646540022745E /* VLCPlaybackInfoTrackTVCell.xib */,
DD4089EE1BF646540022745E /* VLCPlaybackInfoTVCollectionViewCell.xib */,
7DC0B56F1C0094370027BFAD /* VLCSettingsViewController.xib */,
);
name = xibs;
......@@ -2351,10 +2360,14 @@
7D51B3AE1BF0EEF4005AF4D5 /* VLCPlaybackInfoMediaInfoTVViewController.m */,
DD1B31F11BF637D500A369B6 /* VLCPlaybackInfoTracksTVViewController.h */,
DD1B31F21BF637D500A369B6 /* VLCPlaybackInfoTracksTVViewController.m */,
DD4089F01BF6467E0022745E /* VLCPlaybackInfoTrackTVCell.h */,
DD4089F11BF6467E0022745E /* VLCPlaybackInfoTrackTVCell.m */,
DD4089F81BF659030022745E /* VLCPlaybackInfoTrackTVTitleView.h */,
DD4089F91BF659030022745E /* VLCPlaybackInfoTrackTVTitleView.m */,
DD9D8F621C01F96700B4060F /* VLCPlaybackInfoChaptersTVViewController.h */,
DD9D8F631C01F96700B4060F /* VLCPlaybackInfoChaptersTVViewController.m */,
DD4089F01BF6467E0022745E /* VLCPlaybackInfoTVCollectionViewCell.h */,
DD4089F11BF6467E0022745E /* VLCPlaybackInfoTVCollectionViewCell.m */,
DD4089F81BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.h */,
DD4089F91BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.m */,
DD9D8F691C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.h */,
DD9D8F6A1C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.m */,
);
path = "Playback Info";
sourceTree = "<group>";
......@@ -2639,10 +2652,11 @@
7D405ED61BEA1F56006ED886 /* jquery-1.10.1.min.js in Resources */,
7DEC8BE91BD68BC9006E1093 /* Settings.bundle in Resources */,
7D405ED51BEA1F56006ED886 /* Raleway.woff in Resources */,
DD9D8F681C01FAB500B4060F /* VLCPlaybackInfoChaptersTVViewController.xib in Resources */,
6B4E33D21BF2A39400A35255 /* playerControl.js in Resources */,
7DC0B5711C0094370027BFAD /* VLCSettingsViewController.xib in Resources */,
7D405ED81BEA1F56006ED886 /* jquery.iframe-transport.js in Resources */,
DD4089EF1BF646540022745E /* VLCPlaybackInfoTrackTVCell.xib in Resources */,
DD4089EF1BF646540022745E /* VLCPlaybackInfoTVCollectionViewCell.xib in Resources */,
DD3EAC131BE26166003668DA /* VLCRemoteBrowsingTVCell.xib in Resources */,
7D3E528C1BD7B5E100309D15 /* VLCCloudServicesTVViewController.xib in Resources */,
7D405EDA1BEA1F56006ED886 /* style.css in Resources */,
......@@ -2842,6 +2856,7 @@
DD3EFF441BDEBCE500B68579 /* VLCSharedLibraryParser.m in Sources */,
DD3EFF5E1BDEBCE500B68579 /* VLCLocalServerDiscoveryController.m in Sources */,
DD8095E01BE3EFC20065D8E1 /* VLCPlaybackInfoTVViewController.m in Sources */,
DD9D8F651C01F96700B4060F /* VLCPlaybackInfoChaptersTVViewController.m in Sources */,
7DEC8C1F1BD6A113006E1093 /* UIDevice+VLC.m in Sources */,
DDEAECFE1BDFFAEE00756C83 /* Reachability.m in Sources */,
7DF383C41BF2329500D71A5C /* VLCDropboxCollectionViewController.m in Sources */,
......@@ -2904,7 +2919,7 @@
DD490B1F1BE95B5C0010F335 /* VLCSiriRemoteGestureRecognizer.m in Sources */,
DD3EFF3C1BDEBCE500B68579 /* VLCNetworkServerBrowserVLCMedia.m in Sources */,
7D1334801BE132F10012E919 /* VLCNetworkServerBrowserUPnP.m in Sources */,
DD4089FA1BF659030022745E /* VLCPlaybackInfoTrackTVTitleView.m in Sources */,
DD4089FA1BF659030022745E /* VLCPlaybackInfoTVCollectionSectionTitleView.m in Sources */,
7DF383D01BF24BB100D71A5C /* VLCBoxCollectionViewController.m in Sources */,
DDEAECC71BDEC79D00756C83 /* VLCLocalNetworkServiceBrowserSAP.m in Sources */,
7D1329441BA1F10100BE647E /* AppleTVAppDelegate.m in Sources */,
......@@ -2912,7 +2927,7 @@
7DC71D291BC83590001FACAA /* UIColor+Presets.m in Sources */,
DD8095DB1BE3C42F0065D8E1 /* VLCBufferingBar.m in Sources */,
7D4408591BDA8DCA0080FB42 /* VLCBoxController.m in Sources */,
DD4089F21BF6467E0022745E /* VLCPlaybackInfoTrackTVCell.m in Sources */,
DD4089F21BF6467E0022745E /* VLCPlaybackInfoTVCollectionViewCell.m in Sources */,
DD3EAC0A1BE2192A003668DA /* VLCServerBrowsingController.m in Sources */,
DD3EFF341BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserMediaDiscoverer.m in Sources */,
DD3EFF421BDEBCE500B68579 /* VLCNetworkServerBrowserSharedLibrary.m in Sources */,
......@@ -2920,6 +2935,7 @@
DD490B171BE6BA580010F335 /* VLCIRTVTapGestureRecognizer.m in Sources */,
7DC5A3EC1BF63F4B00CFEBA8 /* VLCMediaFileDiscoverer.m in Sources */,
7D3E528B1BD7B5E100309D15 /* VLCCloudServicesTVViewController.m in Sources */,
DD9D8F6B1C01FE5B00B4060F /* VLCPlaybackInfoCollectionViewDataSource.m in Sources */,
7D405ED41BEA150C006ED886 /* VLCActivityManager.m in Sources */,
);