diff --git a/MPfm/MPfm.MVP/Models/LibraryBrowserEntity.cs b/MPfm/MPfm.MVP/Models/LibraryBrowserEntity.cs index 881121c7..90213ff7 100644 --- a/MPfm/MPfm.MVP/Models/LibraryBrowserEntity.cs +++ b/MPfm/MPfm.MVP/Models/LibraryBrowserEntity.cs @@ -16,6 +16,7 @@ // along with MPfm. If not, see . using System.Collections.Generic; +using MPfm.Sound.AudioFiles; namespace MPfm.MVP.Models { @@ -40,6 +41,8 @@ public class LibraryBrowserEntity /// Sub items (to create a tree view hierarchy). /// public List SubItems { get; set; } + + public AudioFile AudioFile { get; set; } public LibraryBrowserEntity() { diff --git a/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs b/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs index 581f9764..ef9cf5b8 100644 --- a/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs @@ -109,21 +109,25 @@ private void OnItemClick(int i) private void RefreshLibraryBrowser() { _items = new List(); + switch (_browserType) { case MobileLibraryBrowserType.Playlists: + View.RefreshLibraryBrowser(_items, _browserType, "Playlists"); break; case MobileLibraryBrowserType.Artists: _items = GetArtists().ToList(); + View.RefreshLibraryBrowser(_items, _browserType, "Artists"); break; case MobileLibraryBrowserType.Albums: - _items = GetAlbums(_query.ArtistName).ToList(); + _items = GetAlbums(_query.ArtistName).ToList(); + View.RefreshLibraryBrowser(_items, _browserType, (String.IsNullOrEmpty(_query.ArtistName)) ? "Albums" : _query.ArtistName); break; case MobileLibraryBrowserType.Songs: - _items = GetSongs(_query.ArtistName, _query.AlbumTitle).ToList(); + _items = GetSongs(_query.ArtistName, _query.AlbumTitle).ToList(); + View.RefreshLibraryBrowser(_items, _browserType, (String.IsNullOrEmpty(_query.AlbumTitle)) ? "Songs" : _query.AlbumTitle); break; } - View.RefreshLibraryBrowser(_items); } private IEnumerable GetArtists() @@ -201,22 +205,20 @@ private IEnumerable GetSongs(string artistName, string alb else audioFiles = audioFiles.OrderBy(x => x.Title).ToList(); - // Get song titles - var songs = audioFiles.Select(x => x.Title).ToList(); - // Convert to entities - foreach (var song in songs) + foreach (var audioFile in audioFiles) { list.Add(new LibraryBrowserEntity() { - Title = song, + Title = audioFile.Title, + AudioFile = audioFile, Type = LibraryBrowserEntityType.Song, Query = new SongBrowserQueryEntity() { Format = format, ArtistName = artistName, AlbumTitle = albumTitle, - SearchTerms = song + SearchTerms = audioFile.Title } }); } diff --git a/MPfm/MPfm.MVP/Presenters/PlayerPresenter.cs b/MPfm/MPfm.MVP/Presenters/PlayerPresenter.cs index 0067fe8b..08f54ed6 100644 --- a/MPfm/MPfm.MVP/Presenters/PlayerPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/PlayerPresenter.cs @@ -77,6 +77,10 @@ public PlayerPresenter(ITinyMessengerHub messageHub, IPlayerService playerServic { Play(audioFileCacheService.SelectAudioFiles(m.Query), m.FilePath); }); + messageHub.Subscribe((PlayerPlaylistIndexChangedMessage m) => + { + RefreshSongInformation(m.Data.AudioFileStarted); + }); } public void Dispose() @@ -105,14 +109,15 @@ void HandleTimerRefreshSongPositionElapsed(object sender, ElapsedEventArgs e) if(playerService.IsSettingPosition) return; - int available = playerService.GetDataAvailable(); + //int available = playerService.GetDataAvailable(); // Create entity PlayerPositionEntity entity = new PlayerPositionEntity(); entity.PositionBytes = playerService.GetPosition(); entity.PositionSamples = ConvertAudio.ToPCM(entity.PositionBytes, (uint)playerService.CurrentPlaylistItem.AudioFile.BitsPerSample, 2); entity.PositionMS = (int)ConvertAudio.ToMS(entity.PositionSamples, (uint)playerService.CurrentPlaylistItem.AudioFile.SampleRate); - entity.Position = available.ToString() + " " + Conversion.MillisecondsToTimeString((ulong)entity.PositionMS); + //entity.Position = available.ToString() + " " + Conversion.MillisecondsToTimeString((ulong)entity.PositionMS); + entity.Position = Conversion.MillisecondsToTimeString((ulong)entity.PositionMS); entity.PositionPercentage = ((float)playerService.GetPosition() / (float)playerService.CurrentPlaylistItem.LengthBytes) * 100; // Send changes to view diff --git a/MPfm/MPfm.MVP/Views/IMobileLibraryBrowserView.cs b/MPfm/MPfm.MVP/Views/IMobileLibraryBrowserView.cs index 223da36e..c64049a5 100644 --- a/MPfm/MPfm.MVP/Views/IMobileLibraryBrowserView.cs +++ b/MPfm/MPfm.MVP/Views/IMobileLibraryBrowserView.cs @@ -28,7 +28,7 @@ public interface IMobileLibraryBrowserView : IBaseView { Action OnItemClick { get; set; } - void RefreshLibraryBrowser(IEnumerable entities); + void RefreshLibraryBrowser(IEnumerable entities, MobileLibraryBrowserType browserType, string navigationBarTitle); } public enum MobileLibraryBrowserType diff --git a/MPfm/MPfm.iOS/Classes/Controllers/Base/BaseViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/Base/BaseViewController.cs index 93d17e02..04120be3 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/Base/BaseViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/Base/BaseViewController.cs @@ -60,6 +60,9 @@ public override void ViewDidDisappear(bool animated) public override void ViewDidLoad() { base.ViewDidLoad(); + + this.NavigationItem.SetHidesBackButton(true, true); + OnViewReady(this); } diff --git a/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.cs index dd86a23c..12a1597e 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.cs @@ -33,7 +33,7 @@ public LoopsViewController(Action onViewReady) public override void ViewDidLoad() { - this.View.BackgroundColor = UIColor.Green; + lblTitle.Font = UIFont.FromName("OstrichSans-Black", 28); base.ViewDidLoad(); } diff --git a/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.designer.cs b/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.designer.cs index c13350b6..80f9dca4 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.designer.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/LoopsViewController.designer.cs @@ -1,5 +1,6 @@ +// WARNING // -// This file has been generated automatically by MonoDevelop to store outlets and +// This file has been generated automatically by Xamarin Studio to store outlets and // actions made in the Xcode designer. If it is removed, they will be lost. // Manual changes to this file may not be handled correctly. // @@ -7,12 +8,18 @@ namespace MPfm.iOS { - [Register ("LoopsViewController")] - partial class LoopsViewController - { - void ReleaseDesignerOutlets() - { - } - } + [Register ("LoopsViewController")] + partial class LoopsViewController + { + [Outlet] + MonoTouch.UIKit.UILabel lblTitle { get; set; } + + void ReleaseDesignerOutlets () + { + if (lblTitle != null) { + lblTitle.Dispose (); + lblTitle = null; + } + } + } } - diff --git a/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.cs index fac8b979..98e46e1f 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.cs @@ -33,7 +33,7 @@ public MarkersViewController(Action onViewReady) public override void ViewDidLoad() { - this.View.BackgroundColor = UIColor.Blue; + lblTitle.Font = UIFont.FromName("OstrichSans-Black", 28); base.ViewDidLoad(); } diff --git a/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.designer.cs b/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.designer.cs index eedae49b..12a700fc 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.designer.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/MarkersViewController.designer.cs @@ -1,5 +1,6 @@ +// WARNING // -// This file has been generated automatically by MonoDevelop to store outlets and +// This file has been generated automatically by Xamarin Studio to store outlets and // actions made in the Xcode designer. If it is removed, they will be lost. // Manual changes to this file may not be handled correctly. // @@ -7,12 +8,18 @@ namespace MPfm.iOS { - [Register ("MarkersViewController")] - partial class MarkersViewController - { - void ReleaseDesignerOutlets() - { - } - } + [Register ("MarkersViewController")] + partial class MarkersViewController + { + [Outlet] + MonoTouch.UIKit.UILabel lblTitle { get; set; } + + void ReleaseDesignerOutlets () + { + if (lblTitle != null) { + lblTitle.Dispose (); + lblTitle = null; + } + } + } } - diff --git a/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.cs index 2c903782..3c8e1e7e 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.cs @@ -26,6 +26,9 @@ using MPfm.MVP.Views; using MPfm.MVP.Models; using System.Linq; +using MPfm.Sound.AudioFiles; +using MonoTouch.CoreAnimation; +using MonoTouch.CoreGraphics; namespace MPfm.iOS.Classes.Controllers { @@ -33,6 +36,8 @@ public partial class MobileLibraryBrowserViewController : BaseViewController, IM { private List _items; private string _cellIdentifier = "MobileLibraryBrowserCell"; + private string _navigationBarTitle = string.Empty; + private MobileLibraryBrowserType _browserType; public MobileLibraryBrowserViewController(Action onViewReady) : base (onViewReady, UserInterfaceIdiomIsPhone ? "MobileLibraryBrowserViewController_iPhone" : "MobileLibraryBrowserViewController_iPad", null) @@ -45,6 +50,19 @@ public override void ViewDidLoad() tableView.WeakDataSource = this; tableView.WeakDelegate = this; + lblArtistName.Font = UIFont.FromName("OstrichSans-Black", 20); + lblAlbumTitle.Font = UIFont.FromName("OstrichSans-Black", 16); + lblSubtitle1.Font = UIFont.FromName("OstrichSans-Black", 12); + lblSubtitle2.Font = UIFont.FromName("OstrichSans-Black", 12); + + + //lblArtistName.SizeToFit(); + //lblAlbumTitle.SizeToFit(); +// lblArtistName.Font = UIFont.FromName("LeagueGothic-Italic", 26); +// lblAlbumTitle.Font = UIFont.FromName("LeagueGothic-Italic", 22); +// lblSubtitle1.Font = UIFont.FromName("LeagueGothic-Regular", 16); +// lblSubtitle2.Font = UIFont.FromName("LeagueGothic-Regular", 16); + base.ViewDidLoad(); } @@ -53,7 +71,7 @@ public override void ViewWillAppear(bool animated) base.ViewWillAppear(animated); MPfmNavigationController navCtrl = (MPfmNavigationController)this.NavigationController; - navCtrl.SetTitle("Library Browser"); + navCtrl.SetSubtitle(_navigationBarTitle); } public override void ViewDidDisappear(bool animated) @@ -77,6 +95,8 @@ public UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) // Set cell style var cellStyle = UITableViewCellStyle.Subtitle; + if (_browserType == MobileLibraryBrowserType.Albums) + cellStyle = UITableViewCellStyle.Default; // Create cell if cell could not be recycled if (cell == null) @@ -85,26 +105,19 @@ public UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) // Set title cell.TextLabel.Text = _items[indexPath.Row].Title; //cell.DetailTextLabel.Text = _items[indexPath.Row]. - //cell.ImageView.Image = _items[indexPath.Row].Image; + + if (_browserType == MobileLibraryBrowserType.Albums) + cell.ImageView.Image = UIImage.FromBundle("Images/icon114"); // Set font //cell.TextLabel.Font = UIFont.FromName("Junction", 20); - cell.TextLabel.Font = UIFont.FromName("OstrichSans-Medium", 26); - cell.DetailTextLabel.Font = UIFont.FromName("OstrichSans-Medium", 18); + cell.TextLabel.Font = UIFont.FromName("OstrichSans-Medium", 20); + //cell.TextLabel.Font = UIFont.FromName("LeagueGothic-Regular", 26); + //cell.DetailTextLabel.Font = UIFont.FromName("LeagueGothic-Regular", 18); // Set chevron cell.Accessory = UITableViewCellAccessory.DisclosureIndicator; - // // Check this is the version cell (remove all user interaction) - // if (viewModel.Items[indexPath.Row].ItemType == MoreItemType.Version) - // { - // cell.Accessory = UITableViewCellAccessory.None; - // cell.SelectionStyle = UITableViewCellSelectionStyle.None; - // cell.TextLabel.TextColor = UIColor.Gray; - // cell.TextLabel.TextAlignment = UITextAlignment.Center; - // cell.TextLabel.Font = UIFont.FromName("Asap", 16); - // } - return cell; } @@ -116,15 +129,50 @@ public void RowSelected(UITableView tableView, NSIndexPath indexPath) #region IMobileLibraryBrowserView implementation - public MobileLibraryBrowserType BrowserType { get; set; } - public string Filter { get; set; } public Action OnItemClick { get; set; } - public void RefreshLibraryBrowser(IEnumerable entities) + public void RefreshLibraryBrowser(IEnumerable entities, MobileLibraryBrowserType browserType, string navigationBarTitle) { InvokeOnMainThread(() => { _items = entities.ToList(); + _browserType = browserType; + _navigationBarTitle = navigationBarTitle; tableView.ReloadData(); + + // Hide album cover if not showing songs + if(browserType != MobileLibraryBrowserType.Songs) + { + viewAlbumCover.Hidden = true; + tableView.Frame = this.View.Frame; + } + else + { + var audioFile = _items[0].AudioFile; + lblArtistName.Text = audioFile.ArtistName; + lblAlbumTitle.Text = audioFile.AlbumTitle; + lblSubtitle1.Text = _items.Count().ToString() + " songs"; + + //CGSize s = [yourString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; + NSString strArtistName = new NSString(audioFile.ArtistName); + SizeF sizeArtistName = strArtistName.StringSize(lblArtistName.Font, new SizeF(lblArtistName.Frame.Width, lblArtistName.Frame.Height), UILineBreakMode.WordWrap); + lblArtistName.Frame = new RectangleF(lblArtistName.Frame.X, lblArtistName.Frame.Y, sizeArtistName.Width, sizeArtistName.Height); + + NSString strAlbumTitle = new NSString(audioFile.AlbumTitle); + SizeF sizeAlbumTitle = strAlbumTitle.StringSize(lblAlbumTitle.Font, new SizeF(lblAlbumTitle.Frame.Width, lblAlbumTitle.Frame.Height), UILineBreakMode.WordWrap); + lblAlbumTitle.Frame = new RectangleF(lblAlbumTitle.Frame.X, lblAlbumTitle.Frame.Y, sizeAlbumTitle.Width, sizeAlbumTitle.Height); + + // TODO: Add a memory cache and stop reloading the image from disk every time + byte[] bytesImage = AudioFile.ExtractImageByteArrayForAudioFile(audioFile.FilePath); + NSData imageData = NSData.FromArray(bytesImage); + UIImage image = UIImage.LoadFromData(imageData); + imageViewAlbumCover.Image = image; + imageViewAlbumCover.BackgroundColor = UIColor.Black; + + CAGradientLayer gradient = new CAGradientLayer(); + gradient.Frame = viewAlbumCover.Bounds; + gradient.Colors = new MonoTouch.CoreGraphics.CGColor[2] { new CGColor(0.1f, 0.1f, 0.1f, 1), new CGColor(0.4f, 0.4f, 0.4f, 1) }; //[NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil]; + viewAlbumCover.Layer.InsertSublayer(gradient, 0); + } }); } diff --git a/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.designer.cs b/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.designer.cs index ac18ae15..a3a0fc1d 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.designer.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/MobileLibraryBrowserViewController.designer.cs @@ -1,20 +1,9 @@ -// Copyright © 2011-2013 Yanick Castonguay +// WARNING // -// This file is part of MPfm. +// This file has been generated automatically by Xamarin Studio to store outlets and +// actions made in the Xcode designer. If it is removed, they will be lost. +// Manual changes to this file may not be handled correctly. // -// MPfm is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// MPfm is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with MPfm. If not, see . - using MonoTouch.Foundation; namespace MPfm.iOS.Classes.Controllers @@ -24,6 +13,24 @@ partial class MobileLibraryBrowserViewController { [Outlet] MonoTouch.UIKit.UITableView tableView { get; set; } + + [Outlet] + MonoTouch.UIKit.UIView viewAlbumCover { get; set; } + + [Outlet] + MonoTouch.UIKit.UIImageView imageViewAlbumCover { get; set; } + + [Outlet] + MonoTouch.UIKit.UILabel lblArtistName { get; set; } + + [Outlet] + MonoTouch.UIKit.UILabel lblAlbumTitle { get; set; } + + [Outlet] + MonoTouch.UIKit.UILabel lblSubtitle1 { get; set; } + + [Outlet] + MonoTouch.UIKit.UILabel lblSubtitle2 { get; set; } void ReleaseDesignerOutlets () { @@ -31,6 +38,36 @@ void ReleaseDesignerOutlets () tableView.Dispose (); tableView = null; } + + if (viewAlbumCover != null) { + viewAlbumCover.Dispose (); + viewAlbumCover = null; + } + + if (imageViewAlbumCover != null) { + imageViewAlbumCover.Dispose (); + imageViewAlbumCover = null; + } + + if (lblArtistName != null) { + lblArtistName.Dispose (); + lblArtistName = null; + } + + if (lblAlbumTitle != null) { + lblAlbumTitle.Dispose (); + lblAlbumTitle = null; + } + + if (lblSubtitle1 != null) { + lblSubtitle1.Dispose (); + lblSubtitle1 = null; + } + + if (lblSubtitle2 != null) { + lblSubtitle2.Dispose (); + lblSubtitle2 = null; + } } } } diff --git a/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.cs index 0fe5004b..45e9f84a 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.cs @@ -33,7 +33,7 @@ public PitchShiftingViewController(Action onViewReady) public override void ViewDidLoad() { - this.View.BackgroundColor = UIColor.Brown; + lblTitle.Font = UIFont.FromName("OstrichSans-Black", 28); base.ViewDidLoad(); } diff --git a/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.designer.cs b/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.designer.cs index 2eaef496..7d31319f 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.designer.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/PitchShiftingViewController.designer.cs @@ -1,5 +1,6 @@ +// WARNING // -// This file has been generated automatically by MonoDevelop to store outlets and +// This file has been generated automatically by Xamarin Studio to store outlets and // actions made in the Xcode designer. If it is removed, they will be lost. // Manual changes to this file may not be handled correctly. // @@ -7,12 +8,18 @@ namespace MPfm.iOS { - [Register ("PitchShiftingViewController")] - partial class PitchShiftingViewController - { - void ReleaseDesignerOutlets() - { - } - } + [Register ("PitchShiftingViewController")] + partial class PitchShiftingViewController + { + [Outlet] + MonoTouch.UIKit.UILabel lblTitle { get; set; } + + void ReleaseDesignerOutlets () + { + if (lblTitle != null) { + lblTitle.Dispose (); + lblTitle = null; + } + } + } } - diff --git a/MPfm/MPfm.iOS/Classes/Controllers/PlayerMetadataViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/PlayerMetadataViewController.cs index 26a89c25..77b3ec5f 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/PlayerMetadataViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/PlayerMetadataViewController.cs @@ -39,17 +39,9 @@ public override void ViewDidLoad() lblAlbumTitle.Font = UIFont.FromName("OstrichSans-Medium", 24); lblTitle.Font = UIFont.FromName("OstrichSans-Medium", 18); - this.View.BackgroundColor = UIColor.Orange; - base.ViewDidLoad(); } - public override void ViewWillAppear(bool animated) - { - // TODO: This event is not called when the view is added manually! (i.e. to a UIScrollView)! - base.ViewWillAppear(animated); - } - public void RefreshAudioFile(AudioFile audioFile) { InvokeOnMainThread(() => { diff --git a/MPfm/MPfm.iOS/Classes/Controllers/PlayerViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/PlayerViewController.cs index 5394b63b..14641072 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/PlayerViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/PlayerViewController.cs @@ -80,7 +80,7 @@ public override void ViewWillAppear(bool animated) base.ViewWillAppear(animated); MPfmNavigationController navCtrl = (MPfmNavigationController)this.NavigationController; - navCtrl.SetTitle("Now Playing"); + navCtrl.SetSubtitle("Now Playing"); } public void AddScrollView(UIViewController viewController) @@ -142,11 +142,19 @@ public void RefreshPlayerPosition(PlayerPositionEntity entity) public void RefreshSongInformation(AudioFile audioFile) { InvokeOnMainThread(() => { - // TODO: Add a memory cache and stop reloading the image from disk every time - byte[] bytesImage = AudioFile.ExtractImageByteArrayForAudioFile(audioFile.FilePath); - NSData imageData = NSData.FromArray(bytesImage); - UIImage image = UIImage.LoadFromData(imageData); - imageViewAlbumArt.Image = image; + + try + { + // TODO: Add a memory cache and stop reloading the image from disk every time + byte[] bytesImage = AudioFile.ExtractImageByteArrayForAudioFile(audioFile.FilePath); + NSData imageData = NSData.FromArray(bytesImage); + UIImage image = UIImage.LoadFromData(imageData); + imageViewAlbumArt.Image = image; + } + catch(Exception ex) + { + Console.WriteLine("Could not load album art: " + ex.Message); + } //lblArtistName.Text = audioFile.ArtistName; //lblAlbumTitle.Text = audioFile.AlbumTitle; diff --git a/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.cs b/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.cs index 5c05e213..413482dc 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.cs @@ -33,7 +33,7 @@ public TimeShiftingViewController(Action onViewReady) public override void ViewDidLoad() { - this.View.BackgroundColor = UIColor.Magenta; + lblTitle.Font = UIFont.FromName("OstrichSans-Black", 28); base.ViewDidLoad(); } diff --git a/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.designer.cs b/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.designer.cs index 57f98fbb..b85f9248 100644 --- a/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.designer.cs +++ b/MPfm/MPfm.iOS/Classes/Controllers/TimeShiftingViewController.designer.cs @@ -1,5 +1,6 @@ +// WARNING // -// This file has been generated automatically by MonoDevelop to store outlets and +// This file has been generated automatically by Xamarin Studio to store outlets and // actions made in the Xcode designer. If it is removed, they will be lost. // Manual changes to this file may not be handled correctly. // @@ -7,12 +8,18 @@ namespace MPfm.iOS { - [Register ("TimeShiftingViewController")] - partial class TimeShiftingViewController - { - void ReleaseDesignerOutlets() - { - } - } + [Register ("TimeShiftingViewController")] + partial class TimeShiftingViewController + { + [Outlet] + MonoTouch.UIKit.UILabel lblTitle { get; set; } + + void ReleaseDesignerOutlets () + { + if (lblTitle != null) { + lblTitle.Dispose (); + lblTitle = null; + } + } + } } - diff --git a/MPfm/MPfm.iOS/Classes/Controls/MPfmNavigationController.cs b/MPfm/MPfm.iOS/Classes/Controls/MPfmNavigationController.cs index 766e2e80..337de647 100644 --- a/MPfm/MPfm.iOS/Classes/Controls/MPfmNavigationController.cs +++ b/MPfm/MPfm.iOS/Classes/Controls/MPfmNavigationController.cs @@ -27,36 +27,96 @@ namespace MPfm.iOS.Classes.Controls [Register("MPfmNavigationController")] public class MPfmNavigationController : UINavigationController { - UILabel labelTitle; + UILabel _lblTitle; + UILabel _lblSubtitle; + UIButton _btnBack; + UIButton _btnEffects; - public MPfmNavigationController(string fontName, float fontSize) : base() + public MPfmNavigationController() : base() { - // Create title label - labelTitle = new UILabel(new RectangleF(0, 3, UIScreen.MainScreen.Bounds.Width, 40)); - labelTitle.TextColor = UIColor.White; - labelTitle.BackgroundColor = UIColor.Clear; - labelTitle.Text = string.Empty; - labelTitle.TextAlignment = UITextAlignment.Center; - labelTitle.Font = UIFont.FromName(fontName, fontSize); - - // Add controls - this.NavigationBar.AddSubview(labelTitle); + this.WeakDelegate = this; + + _btnBack = new UIButton(UIButtonType.Custom); + _btnBack.Frame = new RectangleF(4, 4, 36, 36); + _btnBack.SetBackgroundImage(UIImage.FromBundle("Images/back.png"), UIControlState.Normal); + _btnBack.TouchUpInside += (sender, e) => { + if(ViewControllers.Length > 1) + { + PopViewControllerAnimated(true); + } + }; + + _btnEffects = new UIButton(UIButtonType.RoundedRect); + _btnEffects.Frame = new RectangleF(this.NavigationBar.Frame.Width - 4 - 36, 4, 36, 36); + _btnEffects.SetBackgroundImage(UIImage.FromBundle("Images/effects.png"), UIControlState.Normal); + + _lblTitle = new UILabel(new RectangleF(50, 6, UIScreen.MainScreen.Bounds.Width - 100, 20)); + _lblTitle.TextColor = UIColor.White; + _lblTitle.BackgroundColor = UIColor.Clear; + _lblTitle.Text = "MPfm"; + _lblTitle.TextAlignment = UITextAlignment.Left; + _lblTitle.Font = UIFont.FromName("OstrichSans-Black", 20); + //_lblTitle.Font = UIFont.FromName("LeagueGothic-Regular", 20); + + _lblSubtitle = new UILabel(new RectangleF(50, 23, UIScreen.MainScreen.Bounds.Width - 100, 20)); + _lblSubtitle.LineBreakMode = UILineBreakMode.HeadTruncation; + _lblSubtitle.TextColor = UIColor.LightGray; + _lblSubtitle.BackgroundColor = UIColor.Clear; + _lblSubtitle.Text = "Library Browser"; + _lblSubtitle.TextAlignment = UITextAlignment.Left; + _lblSubtitle.Font = UIFont.FromName("OstrichSans-Black", 14); + //_lblSubtitle.Font = UIFont.FromName("LeagueGothic-Regular", 16); + + this.NavigationBar.AddSubview(_btnBack); + this.NavigationBar.AddSubview(_btnEffects); + this.NavigationBar.AddSubview(_lblTitle); + this.NavigationBar.AddSubview(_lblSubtitle); } - - public void SetTitle(string title) + + [Export("navigationBar:shouldPushItem:")] + public bool ShouldPushItem(UINavigationItem item) + { + if (ViewControllers.Length > 1) + { + UIView.Animate(0.25, () => { + _btnBack.SetBackgroundImage(UIImage.FromBundle("Images/back_wide.png"), UIControlState.Normal); + _btnBack.Frame = new RectangleF(4, 4, 43, 36); + _lblTitle.Frame = new RectangleF(57, 6, UIScreen.MainScreen.Bounds.Width - 60, 20); + _lblSubtitle.Frame = new RectangleF(57, 23, UIScreen.MainScreen.Bounds.Width - 60, 20); + }); + } + + return true; + } + + [Export("navigationBar:shouldPopItem:")] + public bool ShouldPopItem(UINavigationItem item) + { + if (ViewControllers.Length == 1) + { + UIView.Animate(0.25, () => { + _btnBack.SetBackgroundImage(UIImage.FromBundle("Images/back.png"), UIControlState.Normal); + _btnBack.Frame = new RectangleF(4, 4, 36, 36); + _lblTitle.Frame = new RectangleF(50, 6, UIScreen.MainScreen.Bounds.Width - 60, 20); + _lblSubtitle.Frame = new RectangleF(50, 23, UIScreen.MainScreen.Bounds.Width - 60, 20); + }); + } + + return true; + } + + public void SetSubtitle(string subtitle) { - this.NavigationItem.Title = string.Empty; - UIView.Animate(0.25f, delegate { - labelTitle.Alpha = 0; + _lblSubtitle.Alpha = 0; }, delegate { - labelTitle.Text = title; + _lblSubtitle.Text = subtitle; }); UIView.Animate(0.25f, delegate { - labelTitle.Alpha = 1; + _lblSubtitle.Alpha = 1; }); } } diff --git a/MPfm/MPfm.iOS/Classes/Delegates/AppDelegate.cs b/MPfm/MPfm.iOS/Classes/Delegates/AppDelegate.cs index aebf4028..64e608fc 100644 --- a/MPfm/MPfm.iOS/Classes/Delegates/AppDelegate.cs +++ b/MPfm/MPfm.iOS/Classes/Delegates/AppDelegate.cs @@ -117,19 +117,25 @@ public void AddTab(MobileNavigationTabType type, string title, UIViewController // Create text attributes for tab UITextAttributes attr = new UITextAttributes(); //attr.Font = UIFont.FromName("Junction", 11); - attr.Font = UIFont.FromName("OstrichSans-Black", 13); + attr.Font = UIFont.FromName("OstrichSans-Black", 12); + //attr.Font = UIFont.FromName("LeagueGothic-Regular", 13); attr.TextColor = UIColor.White; attr.TextShadowColor = UIColor.DarkGray; attr.TextShadowOffset = new UIOffset(1, 1); // Create navigation controller - var navCtrl = new MPfmNavigationController("OstrichSans-Black", 26); - navCtrl.SetTitle(title); - navCtrl.NavigationBar.BackgroundColor = UIColor.Clear; - navCtrl.NavigationBar.TintColor = UIColor.Clear; + var navCtrl = new MPfmNavigationController(); + navCtrl.SetSubtitle(title); + //navCtrl.NavigationBar.BackgroundColor = UIColor.FromRGBA(0.5f, 1, 0.5f, 1); + navCtrl.NavigationBar.TintColor = UIColor.FromRGBA(0.2f, 0.2f, 0.2f, 1); navCtrl.TabBarItem.SetTitleTextAttributes(attr, UIControlState.Normal); navCtrl.TabBarItem.Title = title; - navCtrl.TabBarItem.Image = UIImage.FromBundle("Images/Tabs/more"); + + if(title.ToUpper() == "MORE") + navCtrl.TabBarItem.Image = UIImage.FromBundle("Images/Tabs/more"); + else + navCtrl.TabBarItem.Image = UIImage.FromBundle("Images/Tabs/audio"); + navCtrl.PushViewController(viewController, false); // Add view controller to list diff --git a/MPfm/MPfm.iOS/Fonts/LeagueGothic-CondensedItalic.otf b/MPfm/MPfm.iOS/Fonts/LeagueGothic-CondensedItalic.otf new file mode 100755 index 00000000..28d71852 Binary files /dev/null and b/MPfm/MPfm.iOS/Fonts/LeagueGothic-CondensedItalic.otf differ diff --git a/MPfm/MPfm.iOS/Fonts/LeagueGothic-CondensedRegular.otf b/MPfm/MPfm.iOS/Fonts/LeagueGothic-CondensedRegular.otf new file mode 100755 index 00000000..b1e70bd0 Binary files /dev/null and b/MPfm/MPfm.iOS/Fonts/LeagueGothic-CondensedRegular.otf differ diff --git a/MPfm/MPfm.iOS/Fonts/LeagueGothic-Italic.otf b/MPfm/MPfm.iOS/Fonts/LeagueGothic-Italic.otf new file mode 100755 index 00000000..ce19c0a4 Binary files /dev/null and b/MPfm/MPfm.iOS/Fonts/LeagueGothic-Italic.otf differ diff --git a/MPfm/MPfm.iOS/Fonts/LeagueGothic-Regular.otf b/MPfm/MPfm.iOS/Fonts/LeagueGothic-Regular.otf new file mode 100755 index 00000000..6cd753fa Binary files /dev/null and b/MPfm/MPfm.iOS/Fonts/LeagueGothic-Regular.otf differ diff --git a/MPfm/MPfm.iOS/Images/Tabs/audio.png b/MPfm/MPfm.iOS/Images/Tabs/audio.png new file mode 100644 index 00000000..8ab4fccb Binary files /dev/null and b/MPfm/MPfm.iOS/Images/Tabs/audio.png differ diff --git a/MPfm/MPfm.iOS/Images/Tabs/audio@2x.png b/MPfm/MPfm.iOS/Images/Tabs/audio@2x.png new file mode 100644 index 00000000..8ab4fccb Binary files /dev/null and b/MPfm/MPfm.iOS/Images/Tabs/audio@2x.png differ diff --git a/MPfm/MPfm.iOS/Images/back@2x.png b/MPfm/MPfm.iOS/Images/back@2x.png new file mode 100644 index 00000000..23256435 Binary files /dev/null and b/MPfm/MPfm.iOS/Images/back@2x.png differ diff --git a/MPfm/MPfm.iOS/Images/back_wide@2x.png b/MPfm/MPfm.iOS/Images/back_wide@2x.png new file mode 100644 index 00000000..2025f18a Binary files /dev/null and b/MPfm/MPfm.iOS/Images/back_wide@2x.png differ diff --git a/MPfm/MPfm.iOS/Images/effects.png b/MPfm/MPfm.iOS/Images/effects.png new file mode 100644 index 00000000..c4928b0f Binary files /dev/null and b/MPfm/MPfm.iOS/Images/effects.png differ diff --git a/MPfm/MPfm.iOS/Info.plist b/MPfm/MPfm.iOS/Info.plist index cce4c670..e00a9199 100644 --- a/MPfm/MPfm.iOS/Info.plist +++ b/MPfm/MPfm.iOS/Info.plist @@ -24,6 +24,10 @@ Fonts/OstrichLight.ttf Fonts/OstrichRegular.ttf Fonts/OstrichRounded.ttf + Fonts/LeagueGothic-CondensedItalic.otf + Fonts/LeagueGothic-CondensedRegular.otf + Fonts/LeagueGothic-Italic.otf + Fonts/LeagueGothic-Regular.otf UIBackgroundModes diff --git a/MPfm/MPfm.iOS/MPfm.iOS.csproj b/MPfm/MPfm.iOS/MPfm.iOS.csproj index efe4eab1..7bad4856 100644 --- a/MPfm/MPfm.iOS/MPfm.iOS.csproj +++ b/MPfm/MPfm.iOS/MPfm.iOS.csproj @@ -219,11 +219,20 @@ + + + + + + + + + diff --git a/MPfm/MPfm.iOS/XIB/iPhone/LoopsViewController_iPhone.xib b/MPfm/MPfm.iOS/XIB/iPhone/LoopsViewController_iPhone.xib index 1abb6f17..6ff97088 100644 --- a/MPfm/MPfm.iOS/XIB/iPhone/LoopsViewController_iPhone.xib +++ b/MPfm/MPfm.iOS/XIB/iPhone/LoopsViewController_iPhone.xib @@ -1,17 +1,18 @@ - 1280 - 11C25 - 1919 - 1138.11 - 566.00 + 1552 + 12C54 + 3084 + 1187.34 + 625.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 916 + 2083 IBProxyObject + IBUILabel IBUIView @@ -19,7 +20,7 @@ PluginDependencyRecalculationVersion - + @@ -31,19 +32,66 @@ IBCocoaTouchFramework - + 274 + + + + 274 + + + + 292 + {320, 32} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Loops + + 1 + MSAxIDEAA + + + 0 + 1 + + 2 + 13 + + + Helvetica-Bold + 13 + 16 + + NO + + + {320, 460} + + + + _NS:9 + + 1 + MCAwIDAgMC40AA + + IBCocoaTouchFramework + + {{0, 20}, {320, 460}} - - + + + 3 - MQA - - 2 - + MCAwAA - + IBCocoaTouchFramework @@ -52,35 +100,59 @@ view - - + + 3 + + + lblTitle + + + + 8 + 0 - - - + + + 1 - - + + + + + -1 - - + + File's Owner -2 - - + + + + + 4 + + + + + + + + 7 + + @@ -90,21 +162,34 @@ UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - 3 + + + + + 8 LoopsViewController UIViewController + + lblTitle + UILabel + + + lblTitle + + lblTitle + UILabel + + IBProjectSource - LoopsViewController.h + ./Classes/LoopsViewController.h @@ -113,6 +198,6 @@ IBCocoaTouchFramework YES 3 - 916 + 2083 diff --git a/MPfm/MPfm.iOS/XIB/iPhone/MarkersViewController_iPhone.xib b/MPfm/MPfm.iOS/XIB/iPhone/MarkersViewController_iPhone.xib index a1e2741e..85d08c9c 100644 --- a/MPfm/MPfm.iOS/XIB/iPhone/MarkersViewController_iPhone.xib +++ b/MPfm/MPfm.iOS/XIB/iPhone/MarkersViewController_iPhone.xib @@ -1,17 +1,18 @@ - 1280 - 11C25 - 1919 - 1138.11 - 566.00 + 1552 + 12C54 + 3084 + 1187.34 + 625.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 916 + 2083 IBProxyObject + IBUILabel IBUIView @@ -19,7 +20,7 @@ PluginDependencyRecalculationVersion - + @@ -31,19 +32,66 @@ IBCocoaTouchFramework - + 274 + + + + 274 + + + + 292 + {320, 32} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Markers + + 1 + MSAxIDEAA + + + 0 + 1 + + 2 + 13 + + + Helvetica-Bold + 13 + 16 + + NO + + + {320, 460} + + + + _NS:9 + + 3 + MCAwLjQAA + + IBCocoaTouchFramework + + {{0, 20}, {320, 460}} - - + + + 3 - MQA - - 2 - + MCAwAA - + IBCocoaTouchFramework @@ -52,35 +100,59 @@ view - - + + 3 + + + lblTitle + + + + 6 + 0 - - - + + + 1 - - + + + + + -1 - - + + File's Owner -2 - - + + + + + 4 + + + + + + + + 5 + + @@ -90,21 +162,34 @@ UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - 3 + + + + + 6 MarkersViewController UIViewController + + lblTitle + UILabel + + + lblTitle + + lblTitle + UILabel + + IBProjectSource - MarkersViewController.h + ./Classes/MarkersViewController.h @@ -113,6 +198,6 @@ IBCocoaTouchFramework YES 3 - 916 + 2083 diff --git a/MPfm/MPfm.iOS/XIB/iPhone/MobileLibraryBrowserViewController_iPhone.xib b/MPfm/MPfm.iOS/XIB/iPhone/MobileLibraryBrowserViewController_iPhone.xib index 970bc6c6..f06d957f 100644 --- a/MPfm/MPfm.iOS/XIB/iPhone/MobileLibraryBrowserViewController_iPhone.xib +++ b/MPfm/MPfm.iOS/XIB/iPhone/MobileLibraryBrowserViewController_iPhone.xib @@ -1,17 +1,19 @@ - 1536 + 1552 12C54 - 2844 + 3084 1187.34 625.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1930 + 2083 IBProxyObject + IBUIImageView + IBUILabel IBUITableView IBUIView @@ -38,12 +40,12 @@ 274 - {320, 460} + {{0, 88}, {320, 372}} _NS:9 - + 3 MQA @@ -57,11 +59,141 @@ 22 22 + + + 292 + + + + 274 + {88, 88} + + + + _NS:9 + 1 + NO + IBCocoaTouchFramework + + + + 292 + {{93, 5}, {194, 24}} + + + + _NS:9 + + 3 + MAA + + NO + YES + 7 + NO + IBCocoaTouchFramework + Artist Name + + + 0 + + 1 + 17 + + + Helvetica + 17 + 16 + + NO + + + + 292 + {{93, 27}, {194, 24}} + + + + _NS:9 + + NO + YES + 7 + NO + IBCocoaTouchFramework + Album Title + + 1 + MC44NTAxMTg4ODU5IDAuODUwMTE4ODg1OSAwLjg1MDExODg4NTkAA + + + 0 + + + NO + + + + 292 + {{93, 48}, {194, 20}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + 12 songs + + 3 + MC42NjY2NjY2NjY3AA + + + 0 + + + NO + + + + 292 + {{93, 65}, {194, 20}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + 45:00.452 + + + 0 + + + NO + + + {320, 88} + + + + _NS:9 + + 1 + MC4yMjMyOTMxMzg2IDAuMjIzMjkzMTM4NiAwLjIyMzI5MzEzODYAA + + IBCocoaTouchFramework + {{0, 20}, {320, 460}} - + 3 MQA @@ -91,6 +223,54 @@ 5 + + + viewAlbumCover + + + + 12 + + + + imageViewAlbumCover + + + + 13 + + + + lblArtistName + + + + 14 + + + + lblAlbumTitle + + + + 15 + + + + lblSubtitle1 + + + + 16 + + + + lblSubtitle2 + + + + 17 + @@ -105,6 +285,7 @@ + @@ -124,6 +305,43 @@ + + 6 + + + + + + + + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + @@ -132,19 +350,75 @@ UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 5 + 17 + + + + + MobileLibraryBrowserViewController + UIViewController + + UIImageView + UILabel + UILabel + UILabel + UILabel + UITableView + UIView + + + + imageViewAlbumCover + UIImageView + + + lblAlbumTitle + UILabel + + + lblArtistName + UILabel + + + lblSubtitle1 + UILabel + + + lblSubtitle2 + UILabel + + + tableView + UITableView + + + viewAlbumCover + UIView + + + + IBProjectSource + ./Classes/MobileLibraryBrowserViewController.h + + + - 0 IBCocoaTouchFramework YES 3 - 1930 + 2083 diff --git a/MPfm/MPfm.iOS/XIB/iPhone/PitchShiftingViewController_iPhone.xib b/MPfm/MPfm.iOS/XIB/iPhone/PitchShiftingViewController_iPhone.xib index e62648d7..99429179 100644 --- a/MPfm/MPfm.iOS/XIB/iPhone/PitchShiftingViewController_iPhone.xib +++ b/MPfm/MPfm.iOS/XIB/iPhone/PitchShiftingViewController_iPhone.xib @@ -1,17 +1,18 @@ - 1280 - 11C25 - 1919 - 1138.11 - 566.00 + 1552 + 12C54 + 3084 + 1187.34 + 625.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 916 + 2083 IBProxyObject + IBUILabel IBUIView @@ -19,7 +20,7 @@ PluginDependencyRecalculationVersion - + @@ -31,19 +32,66 @@ IBCocoaTouchFramework - + 274 + + + + 274 + + + + 292 + {320, 32} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Pitch Shifting + + 1 + MSAxIDEAA + + + 0 + 1 + + 2 + 13 + + + Helvetica-Bold + 13 + 16 + + NO + + + {320, 460} + + + + _NS:9 + + 3 + MCAwLjQAA + + IBCocoaTouchFramework + + {{0, 20}, {320, 460}} - - + + + 3 - MQA - - 2 - + MCAwAA - + IBCocoaTouchFramework @@ -52,35 +100,59 @@ view - - + + 3 + + + lblTitle + + + + 10 + 0 - - - + + + 1 - - + + + + + -1 - - + + File's Owner -2 - - + + + + + 8 + + + + + + + + 9 + + @@ -90,21 +162,34 @@ UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - 3 + + + + + 10 PitchShiftingViewController UIViewController + + lblTitle + UILabel + + + lblTitle + + lblTitle + UILabel + + IBProjectSource - PitchShiftingViewController.h + ./Classes/PitchShiftingViewController.h @@ -113,6 +198,6 @@ IBCocoaTouchFramework YES 3 - 916 + 2083 diff --git a/MPfm/MPfm.iOS/XIB/iPhone/PlayerMetadataViewController_iPhone.xib b/MPfm/MPfm.iOS/XIB/iPhone/PlayerMetadataViewController_iPhone.xib index 978cadd6..40b5714d 100644 --- a/MPfm/MPfm.iOS/XIB/iPhone/PlayerMetadataViewController_iPhone.xib +++ b/MPfm/MPfm.iOS/XIB/iPhone/PlayerMetadataViewController_iPhone.xib @@ -35,92 +35,111 @@ 274 - + - 292 - {{0, 76}, {320, 27}} + 266 + + + + 268 + {{0, 60}, {320, 27}} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + [Title] + + 1 + MSAxIDEAA + + + 0 + 1 + + 1 + 13 + + + Helvetica + 13 + 16 + + NO + + + + 268 + {{0, 7}, {320, 32}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + [ArtistName] + + + 0 + 1 + + 2 + 13 + + + Helvetica-Bold + 13 + 16 + + NO + + + + 268 + {{0, 35}, {320, 28}} + + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + [AlbumTitle] + + + 0 + 1 + + + NO + + + {{0, 365}, {320, 95}} _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - [Title] - - 1 - MSAxIDEAA - - - 0 - 1 - - 1 - 13 + + 3 + MCAwLjQAA - - Helvetica - 13 - 16 - - NO - - - - 292 - {{0, 20}, {320, 32}} - - - - _NS:9 - NO - YES - 7 - NO IBCocoaTouchFramework - [ArtistName] - - - 0 - 1 - - 2 - 13 - - - Helvetica-Bold - 13 - 16 - - NO - - - - 292 - {{0, 47}, {320, 28}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - [AlbumTitle] - - - 0 - 1 - - - NO {{0, 20}, {320, 460}} + + 1 + MCAwIDAgMAA + IBCocoaTouchFramework @@ -137,27 +156,27 @@ - lblArtistName + lblTitle - + - 7 + 9 - lblAlbumTitle + lblArtistName - + - 8 + 7 - lblTitle + lblAlbumTitle - + - 9 + 8 @@ -172,9 +191,7 @@ 1 - - - + @@ -190,19 +207,29 @@ - 4 - + 10 + + + + + + + + 4 + + + 5 - - + + 6 - - + + @@ -212,6 +239,7 @@ UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -220,7 +248,7 @@ - 9 + 10 diff --git a/MPfm/MPfm.iOS/XIB/iPhone/PlayerViewController_iPhone.xib b/MPfm/MPfm.iOS/XIB/iPhone/PlayerViewController_iPhone.xib index 76d4b613..5d5a9000 100644 --- a/MPfm/MPfm.iOS/XIB/iPhone/PlayerViewController_iPhone.xib +++ b/MPfm/MPfm.iOS/XIB/iPhone/PlayerViewController_iPhone.xib @@ -43,10 +43,10 @@ 292 - {320, 320} + {{0, 27}, {320, 320}} - + _NS:9 3 @@ -59,10 +59,25 @@ 292 - {320, 30} + + {320, 28} + + + + _NS:9 + + 1 + MCAwIDAgMC40AA + + IBCocoaTouchFramework + + + + 292 + + {{0, 311}, {320, 32}} - _NS:9 1 @@ -129,7 +144,7 @@ 268 - {{118, 328}, {83, 29}} + {{107, 347}, {107, 29}} @@ -169,7 +184,7 @@ 268 - {{10, 328}, {83, 29}} + {{0, 347}, {107, 29}} @@ -193,10 +208,9 @@ 268 - {{226, 328}, {83, 29}} + {{214, 347}, {106, 29}} - _NS:9 NO @@ -232,7 +246,7 @@ 274 - {{0, 27}, {320, 259}} + {{0, 28}, {320, 284}} @@ -246,7 +260,7 @@ 1292 - {{141, 284}, {38, 36}} + {{0, 309}, {320, 36}} @@ -261,7 +275,7 @@ {{0, 64}, {320, 416}} - + 1 MCAwIDAAA @@ -429,11 +443,12 @@ - - - + + + + @@ -465,6 +480,7 @@ 39 + @@ -477,15 +493,19 @@ + + 75 + + + 74 - - 75 - + 79 + @@ -506,12 +526,13 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 78 + 79 diff --git a/MPfm/MPfm.iOS/XIB/iPhone/TimeShiftingViewController_iPhone.xib b/MPfm/MPfm.iOS/XIB/iPhone/TimeShiftingViewController_iPhone.xib index c2250b83..6805b9ed 100644 --- a/MPfm/MPfm.iOS/XIB/iPhone/TimeShiftingViewController_iPhone.xib +++ b/MPfm/MPfm.iOS/XIB/iPhone/TimeShiftingViewController_iPhone.xib @@ -1,17 +1,18 @@ - 1280 - 11C25 - 1919 - 1138.11 - 566.00 + 1552 + 12C54 + 3084 + 1187.34 + 625.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 916 + 2083 IBProxyObject + IBUILabel IBUIView @@ -19,7 +20,7 @@ PluginDependencyRecalculationVersion - + @@ -31,19 +32,66 @@ IBCocoaTouchFramework - + 274 + + + + 274 + + + + 292 + {320, 32} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Time Shifting + + 1 + MSAxIDEAA + + + 0 + 1 + + 2 + 13 + + + Helvetica-Bold + 13 + 16 + + NO + + + {320, 460} + + + + _NS:9 + + 3 + MCAwLjQAA + + IBCocoaTouchFramework + + {{0, 20}, {320, 460}} - - + + + 3 - MQA - - 2 - + MCAwAA - + IBCocoaTouchFramework @@ -52,35 +100,59 @@ view - - + + 3 + + + lblTitle + + + + 6 + 0 - - - + + + 1 - - + + + + + -1 - - + + File's Owner -2 - - + + + + + 4 + + + + + + + + 5 + + @@ -90,21 +162,34 @@ UIResponder com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - 3 + + + + + 6 TimeShiftingViewController UIViewController + + lblTitle + UILabel + + + lblTitle + + lblTitle + UILabel + + IBProjectSource - TimeShiftingViewController.h + ./Classes/TimeShiftingViewController.h @@ -113,6 +198,6 @@ IBCocoaTouchFramework YES 3 - 916 + 2083