diff --git a/MPfm/MPfm.Mac/Classes/Controls/MPfmTabButton.cs b/MPfm/MPfm.Mac/Classes/Controls/MPfmTabButton.cs new file mode 100644 index 00000000..32180923 --- /dev/null +++ b/MPfm/MPfm.Mac/Classes/Controls/MPfmTabButton.cs @@ -0,0 +1,168 @@ +// Copyright © 2011-2013 Yanick Castonguay +// +// This file is part of MPfm. +// +// 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 System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Reflection; +using MonoMac.AppKit; +using MonoMac.CoreGraphics; +using MonoMac.Foundation; +using MPfm.Mac.Classes.Helpers; +using MPfm.Mac.Classes.Objects; + +namespace MPfm.Mac.Classes.Controls +{ + [Register("MPfmTabButton")] + public class MPfmTabButton : NSButton + { + bool _isMouseDown = false; + bool _isMouseOver = false; + + public CGColor TextColor { get; set; } + public CGColor BackgroundColor { get; set; } + public CGColor BackgroundMouseDownColor { get; set; } + public CGColor BackgroundMouseOverColor { get; set; } + public CGColor BorderColor { get; set; } + + private bool _isSelected = false; + public bool IsSelected + { + get + { + return _isSelected; + } + set + { + _isSelected = value; + SetNeedsDisplay(); + } + } + + public delegate void TabButtonSelected(MPfmTabButton button); + public event TabButtonSelected OnTabButtonSelected; + + [Export("init")] + public MPfmTabButton() : base(NSObjectFlag.Empty) + { + Initialize(); + } + + // Called when created from unmanaged code + public MPfmTabButton(IntPtr handle) : base (handle) + { + Initialize(); + } + + private void Initialize() + { + TextColor = GlobalTheme.ButtonTextColor; + //BackgroundColor = GlobalTheme.ButtonToolbarBackgroundColor; + BackgroundColor = GlobalTheme.PanelHeaderColor1; + BackgroundMouseDownColor = GlobalTheme.ButtonToolbarBackgroundMouseOverColor; + BackgroundMouseOverColor = GlobalTheme.ButtonToolbarBackgroundMouseDownColor; + BorderColor = GlobalTheme.ButtonToolbarBorderColor; + + // This allows MouseEntered and MouseExit to work + AddTrackingRect(Bounds, this, IntPtr.Zero, false); + } + + [Export("mouseDown:")] + public override void MouseDown(NSEvent theEvent) + { + _isMouseDown = true; + base.MouseDown(theEvent); + this.MouseUp(theEvent); + } + + [Export("mouseUp:")] + public override void MouseUp(NSEvent theEvent) + { + base.MouseUp(theEvent); + _isMouseDown = false; + IsSelected = true; + + if(OnTabButtonSelected != null) + OnTabButtonSelected(this); + SetNeedsDisplay(); + } + + [Export("mouseEntered:")] + public override void MouseEntered(NSEvent theEvent) + { + base.MouseEntered(theEvent); + _isMouseOver = true; + SetNeedsDisplay(); + } + + [Export("mouseExited:")] + public override void MouseExited(NSEvent theEvent) + { + base.MouseExited(theEvent); + _isMouseOver = false; + SetNeedsDisplay(); + } + + public override void DrawRect(RectangleF dirtyRect) + { + float padding = 4; + CGContext context = NSGraphicsContext.CurrentContext.GraphicsPort; + context.SaveState(); + context.TranslateCTM(0, Bounds.Height); + context.ScaleCTM(1, -1); + + if (_isMouseDown) + CocoaHelper.FillRect(context, Bounds, BackgroundMouseDownColor); + else if (_isMouseOver) + CocoaHelper.FillRect(context, Bounds, BackgroundMouseOverColor); + else + CocoaHelper.FillRect(context, Bounds, BackgroundColor); + + if(IsSelected) + CocoaHelper.DrawLine(context, new PointF[2] { new PointF(0, 1), new PointF(Bounds.Width, 1) }, 0.5f, new CGColor(0.4f, 1, 1, 1)); + + //CocoaHelper.DrawRect(context, Bounds, BorderColor); + //RectangleF rectTextSize = CocoaHelper.MeasureString(Bounds.Size, Title, "Junction", 11); + RectangleF rectTextSize = CocoaHelper.MeasureString(Bounds.Size, Title, "TitilliumText25L-800wt", 12); + RectangleF rectText; + if (Image != null) + { + float xImage = ((Bounds.Width - rectTextSize.Width - (padding * 2) - Image.Size.Width) / 2); + RectangleF rectImage = new RectangleF(xImage, (Bounds.Height - Image.Size.Height) / 2, Image.Size.Width, Image.Size.Height); + Image.DrawInRect(rectImage, new RectangleF(0, 0, Image.Size.Width, Image.Size.Height), NSCompositingOperation.SourceOver, 1.0f); + + float xText = xImage + padding + Image.Size.Width + padding; + rectText = new RectangleF(xText, (Bounds.Height - rectTextSize.Height) / 2, rectTextSize.Width, rectTextSize.Height); + } + else + { + rectText = new RectangleF((Bounds.Width - rectTextSize.Width) / 2, (Bounds.Height - rectTextSize.Height) / 2, rectTextSize.Width, rectTextSize.Height); + } + + context.RestoreState(); + //CocoaHelper.DrawText(rectText, 0, 0, Title, "Junction", 11, NSColor.White); + CocoaHelper.DrawText(rectText, 0, 0, Title, "TitilliumText25L-800wt", 12, NSColor.White); + } + + RectangleF Get1pxRect(RectangleF rect) + { + RectangleF newRect = new RectangleF(rect.X + 0.5f, rect.Y + 0.5f, rect.Width - 1, rect.Height - 1); + return newRect; + } + } +} diff --git a/MPfm/MPfm.Mac/Classes/Controls/MPfmView.cs b/MPfm/MPfm.Mac/Classes/Controls/MPfmView.cs index fe5e80ba..cbd96cf4 100644 --- a/MPfm/MPfm.Mac/Classes/Controls/MPfmView.cs +++ b/MPfm/MPfm.Mac/Classes/Controls/MPfmView.cs @@ -103,6 +103,7 @@ public override void DrawRect(RectangleF dirtyRect) { RectangleF rectHeader = new RectangleF(0, Bounds.Height - 24, Bounds.Width, 24); CocoaHelper.FillRect(context, rectHeader, HeaderColor1); + //CocoaHelper.DrawLine(context, new PointF[2] { new PointF(0, Bounds.Height - 24), new PointF(Bounds.Width, Bounds.Height - 24) }, 0.5f, new CGColor(0.4f, 1, 1, 1)); } // context.SaveState(); diff --git a/MPfm/MPfm.Mac/MPfm.Mac.csproj b/MPfm/MPfm.Mac/MPfm.Mac.csproj index ed87869b..0d9ad197 100644 --- a/MPfm/MPfm.Mac/MPfm.Mac.csproj +++ b/MPfm/MPfm.Mac/MPfm.Mac.csproj @@ -214,6 +214,7 @@ SyncDownloadWindow.cs + diff --git a/MPfm/MPfm.Mac/Windows/Controllers/MainWindowController.cs b/MPfm/MPfm.Mac/Windows/Controllers/MainWindowController.cs index d13398a6..f517ebcc 100644 --- a/MPfm/MPfm.Mac/Windows/Controllers/MainWindowController.cs +++ b/MPfm/MPfm.Mac/Windows/Controllers/MainWindowController.cs @@ -39,6 +39,7 @@ using MPfm.Mac.Classes.Delegates; using MPfm.Player.Objects; using MPfm.MVP.Presenters; +using MPfm.Mac.Classes.Controls; namespace MPfm.Mac { @@ -120,11 +121,46 @@ public override void WindowDidLoad() scrollViewAlbumCovers.SetSynchronizedScrollView(scrollViewSongBrowser); scrollViewSongBrowser.SetSynchronizedScrollView(scrollViewAlbumCovers); + btnTabTimeShifting.IsSelected = true; + btnTabTimeShifting.OnTabButtonSelected += HandleOnTabButtonSelected; + btnTabPitchShifting.OnTabButtonSelected += HandleOnTabButtonSelected; + btnTabInfo.OnTabButtonSelected += HandleOnTabButtonSelected; + btnTabActions.OnTabButtonSelected += HandleOnTabButtonSelected; + NSNotificationCenter.DefaultCenter.AddObserver(new NSString("NSOutlineViewItemDidExpandNotification"), ItemDidExpand, outlineLibraryBrowser); OnViewReady.Invoke(this); } + private void HandleOnTabButtonSelected(MPfmTabButton button) + { + Console.WriteLine("Test: {0}", button.Title); + + btnTabTimeShifting.IsSelected = button == btnTabTimeShifting; + btnTabPitchShifting.IsSelected = button == btnTabPitchShifting; + btnTabInfo.IsSelected = button == btnTabInfo; + btnTabActions.IsSelected = button == btnTabActions; + + viewTimeShifting.Hidden = button != btnTabTimeShifting; + viewPitchShifting.Hidden = button != btnTabPitchShifting; + viewInformation.Hidden = button != btnTabInfo; + viewActions.Hidden = button != btnTabActions; + +// if (button == btnTabTimeShifting) +// { +// +// } +// else if (button == btnTabPitchShifting) +// { +// } +// else if (button == btnTabInfo) +// { +// } +// else if (button == btnTabActions) +// { +// } + } + private void SetTheme() { viewLeftHeader.BackgroundColor1 = GlobalTheme.PanelHeaderColor1; @@ -179,11 +215,11 @@ private void SetTheme() lblSongTitle.TextColor = NSColor.FromDeviceRgba(171f/255f, 186f/255f, 196f/255f, 1); lblSongPath.TextColor = NSColor.FromDeviceRgba(97f/255f, 122f/255f, 140f/255f, 1); - viewInformation.IsHeaderVisible = true; + //viewInformation.IsHeaderVisible = true; viewSongPosition.IsHeaderVisible = true; viewVolume.IsHeaderVisible = true; - viewTimeShifting.IsHeaderVisible = true; - viewPitchShifting.IsHeaderVisible = true; + //viewTimeShifting.IsHeaderVisible = true; + //viewPitchShifting.IsHeaderVisible = true; lblArtistName.Font = NSFont.FromFontName("TitilliumText25L-800wt", 24); lblAlbumTitle.Font = NSFont.FromFontName("TitilliumText25L-600wt", 20); @@ -203,10 +239,10 @@ private void SetTheme() lblTitleSongBrowser.Font = NSFont.FromFontName("TitilliumText25L-800wt", 14); lblSubtitleSongPosition.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); - lblSubtitleTimeShifting.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); + //lblSubtitleTimeShifting.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); lblSubtitleVolume.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); - lblSubtitleInformation.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); - lblSubtitlePitchShifting.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); + //lblSubtitleInformation.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); + //lblSubtitlePitchShifting.Font = NSFont.FromFontName("TitilliumText25L-800wt", 12); lblPosition.Font = NSFont.FromFontName("DroidSansMono", 15f); lblLength.Font = NSFont.FromFontName("DroidSansMono", 15f); diff --git a/MPfm/MPfm.Mac/Windows/MainWindow.designer.cs b/MPfm/MPfm.Mac/Windows/MainWindow.designer.cs index 9d2618c7..bf41bea1 100644 --- a/MPfm/MPfm.Mac/Windows/MainWindow.designer.cs +++ b/MPfm/MPfm.Mac/Windows/MainWindow.designer.cs @@ -188,9 +188,6 @@ partial class MainWindowController [Outlet] MonoMac.AppKit.NSTextField lblSubtitleVolume { get; set; } - [Outlet] - MonoMac.AppKit.NSTextField lblSubtitleTimeShifting { get; set; } - [Outlet] MonoMac.AppKit.NSTextField lblFilterBySoundFormat { get; set; } @@ -230,6 +227,21 @@ partial class MainWindowController [Outlet] MonoMac.AppKit.NSTextField lblSemitones { get; set; } + [Outlet] + MPfm.Mac.Classes.Controls.MPfmTabButton btnTabTimeShifting { get; set; } + + [Outlet] + MPfm.Mac.Classes.Controls.MPfmTabButton btnTabPitchShifting { get; set; } + + [Outlet] + MPfm.Mac.Classes.Controls.MPfmTabButton btnTabInfo { get; set; } + + [Outlet] + MPfm.Mac.Classes.Controls.MPfmTabButton btnTabActions { get; set; } + + [Outlet] + MPfm.Mac.Classes.Controls.MPfmView viewActions { get; set; } + [Action ("actionAddFilesToLibrary:")] partial void actionAddFilesToLibrary (MonoMac.Foundation.NSObject sender); @@ -322,6 +334,18 @@ partial class MainWindowController [Action ("actionContextualMenuPlay:")] partial void actionContextualMenuPlay (MonoMac.Foundation.NSObject sender); + + [Action ("actionTabTimeShifting:")] + partial void actionTabTimeShifting (MonoMac.Foundation.NSObject sender); + + [Action ("actionTabPitchShifting:")] + partial void actionTabPitchShifting (MonoMac.Foundation.NSObject sender); + + [Action ("actionTabInfo:")] + partial void actionTabInfo (MonoMac.Foundation.NSObject sender); + + [Action ("actionTabActions:")] + partial void actionTabActions (MonoMac.Foundation.NSObject sender); void ReleaseDesignerOutlets () { @@ -620,11 +644,6 @@ void ReleaseDesignerOutlets () lblSubtitleVolume = null; } - if (lblSubtitleTimeShifting != null) { - lblSubtitleTimeShifting.Dispose (); - lblSubtitleTimeShifting = null; - } - if (lblFilterBySoundFormat != null) { lblFilterBySoundFormat.Dispose (); lblFilterBySoundFormat = null; @@ -689,6 +708,31 @@ void ReleaseDesignerOutlets () lblSemitones.Dispose (); lblSemitones = null; } + + if (btnTabTimeShifting != null) { + btnTabTimeShifting.Dispose (); + btnTabTimeShifting = null; + } + + if (btnTabPitchShifting != null) { + btnTabPitchShifting.Dispose (); + btnTabPitchShifting = null; + } + + if (btnTabInfo != null) { + btnTabInfo.Dispose (); + btnTabInfo = null; + } + + if (btnTabActions != null) { + btnTabActions.Dispose (); + btnTabActions = null; + } + + if (viewActions != null) { + viewActions.Dispose (); + viewActions = null; + } } } diff --git a/MPfm/MPfm.Mac/Windows/XIB/MainWindow.xib b/MPfm/MPfm.Mac/Windows/XIB/MainWindow.xib index 58e99f9a..5ec1ff39 100644 --- a/MPfm/MPfm.Mac/Windows/XIB/MainWindow.xib +++ b/MPfm/MPfm.Mac/Windows/XIB/MainWindow.xib @@ -567,7 +567,7 @@ MC41AA - 20 + 17 306184192 @@ -619,7 +619,7 @@ 1 _doScroller: - 0.99541284403669728 + 0.219 {219, 543} @@ -631,7 +631,7 @@ - QSAAAEEgAABBoAAAQaAAAA + QSAAAEEgAABBiAAAQYgAAA 0.25 4 1 @@ -850,94 +850,105 @@ 266 YES - + 265 - - YES - - - 268 - {{-3, 5}, {75, 17}} - - - - _NS:1505 - YES - - 68157504 - 138413056 - 100 % - - Menlo-Regular - 13 - 16 - - _NS:1505 - - - - - NO - - - - 268 - {{21, 27}, {25, 144}} - - - - _NS:9 - YES - - 67371264 - 0 - - _NS:9 - - 100 - 0.0 - 100 - 0.0 - 10 - 0 - NO - YES - - NO - - - - 268 - {{-3, 180}, {75, 18}} - - - - _NS:1505 - YES - - 67108864 - 138412032 - Volume - - LucidaGrande-Bold - 11 - 16 - - _NS:1505 - - - - - NO - + {{652, 148}, {60, 23}} + + + + _NS:22 + YES + + -2080374720 + 134219776 + Actions + + _NS:22 + + -2035007488 + 162 + + + 400 + 75 - {{711, 0}, {69, 200}} + NO + + + + 265 + {{593, 148}, {60, 23}} - - _NS:9 - MPfmView + + _NS:22 + YES + + -2080374720 + 134219776 + Info + + _NS:22 + + -2035007488 + 162 + + + 400 + 75 + + NO + + + + 265 + {{534, 148}, {60, 23}} + + + + _NS:22 + YES + + -2080374720 + 134219776 + Pitch + + _NS:22 + + -2035007488 + 162 + + + 400 + 75 + + NO + + + + 265 + {{475, 148}, {60, 23}} + + + + _NS:22 + YES + + -2080374720 + 134219776 + Time + + _NS:22 + + -2035007488 + 162 + + + 400 + 75 + + NO @@ -947,7 +958,7 @@ 268 - {{71, 27}, {96, 14}} + {{71, 125}, {96, 14}} @@ -971,10 +982,10 @@ 268 - {{52, 5}, {112, 18}} + {{52, 103}, {112, 18}} - + _NS:22 YES @@ -996,7 +1007,7 @@ 268 - {{49, 27}, {40, 14}} + {{49, 125}, {40, 14}} @@ -1026,7 +1037,7 @@ 266 - {{9, 8}, {32, 32}} + {{9, 106}, {32, 32}} @@ -1050,32 +1061,11 @@ NO - - - 268 - {{6, 49}, {89, 18}} - - - - _NS:1505 - YES - - 67108864 - 4194304 - Pitch Shifting - - _NS:1505 - - - - - NO - - {{538, 0}, {174, 69}} + {{475, 2}, {237, 148}} - + _NS:9 MPfmView @@ -1087,10 +1077,10 @@ 268 - {{6, 30}, {76, 14}} + {{6, 65}, {76, 14}} - + _NS:1505 YES @@ -1115,7 +1105,7 @@ 268 - {{6, 50}, {76, 14}} + {{6, 85}, {76, 14}} @@ -1136,7 +1126,7 @@ 268 - {{6, 70}, {76, 14}} + {{6, 105}, {76, 14}} @@ -1157,7 +1147,7 @@ 268 - {{6, 90}, {76, 14}} + {{6, 125}, {76, 14}} @@ -1175,66 +1165,230 @@ NO - - + + {{475, 2}, {237, 148}} + + + + _NS:9 + MPfmView + + + + 265 + + YES + + 268 - {{6, 111}, {80, 18}} - + {{-3, 6}, {75, 17}} + - + _NS:1505 YES - - 67108864 - 4194304 - Information + + 68157504 + 138413056 + 100 % - Helvetica-Bold - 12 + Menlo-Regular + 13 + 16 + + _NS:1505 + + + + + NO + + + + 268 + {{21, 28}, {25, 115}} + + + + _NS:9 + YES + + 67371264 + 0 + + _NS:9 + + 100 + 0.0 + 100 + 0.0 + 10 + 0 + NO + YES + + NO + + + + 268 + {{-3, 150}, {75, 18}} + + + + _NS:1505 + YES + + 67108864 + 138412032 + Volume + + LucidaGrande-Bold + 11 16 _NS:1505 - + NO - {{448, 69}, {91, 131}} + {{711, 0}, {69, 172}} - + _NS:9 MPfmView - + 265 YES - - + + 268 - {{86, 25}, {78, 18}} - + {{6, 65}, {76, 14}} + - - _NS:22 + + _NS:1505 YES - - -2080374720 - 134219776 - Reset - - LucidaGrande - 11 - 3100 + + 68157504 + 272630784 + [Bitrate] + + _NS:1505 + + + + 3 + MC44NQA - _NS:22 - - -2034483200 - 162 + + NO + + + + 268 + {{6, 85}, {76, 14}} + + + + _NS:1505 + YES + + 68157504 + 272630784 + [Sample Rate] + + _NS:1505 + + + + + NO + + + + 268 + {{6, 105}, {76, 14}} + + + + _NS:1505 + YES + + 68157504 + 272630784 + [Bits/sample] + + _NS:1505 + + + + + NO + + + + 268 + {{6, 125}, {76, 14}} + + + + _NS:1505 + YES + + 68157504 + 272630784 + [File Type] + + _NS:1505 + + + + + NO + + + {{475, 2}, {237, 148}} + + + + _NS:9 + MPfmView + + + + 265 + + YES + + + 268 + {{86, 52}, {78, 18}} + + + + _NS:22 + YES + + -2080374720 + 134219776 + Reset + + LucidaGrande + 11 + 3100 + + _NS:22 + + -2034483200 + 162 400 @@ -1245,7 +1399,7 @@ 268 - {{69, 25}, {18, 18}} + {{69, 52}, {18, 18}} @@ -1270,7 +1424,7 @@ 268 - {{52, 25}, {18, 18}} + {{52, 52}, {18, 18}} @@ -1295,7 +1449,7 @@ 266 - {{9, 18}, {32, 32}} + {{9, 45}, {32, 32}} @@ -1322,7 +1476,7 @@ 268 - {{9, 68}, {155, 18}} + {{9, 100}, {155, 18}} @@ -1347,7 +1501,7 @@ 268 - {{103, 90}, {74, 14}} + {{103, 124}, {74, 14}} @@ -1376,10 +1530,10 @@ 268 - {{103, 4}, {74, 14}} + {{103, 29}, {74, 14}} - + _NS:1505 YES @@ -1401,7 +1555,7 @@ 268 - {{6, 4}, {94, 14}} + {{6, 29}, {94, 14}} @@ -1425,7 +1579,7 @@ 268 - {{6, 51}, {94, 14}} + {{6, 80}, {94, 14}} @@ -1449,7 +1603,7 @@ 268 - {{103, 51}, {69, 14}} + {{103, 80}, {69, 14}} @@ -1474,7 +1628,7 @@ 268 - {{6, 90}, {94, 14}} + {{6, 124}, {94, 14}} @@ -1495,46 +1649,21 @@ NO - - - 268 - {{6, 111}, {92, 18}} - - - - _NS:1505 - YES - - 67108864 - 4194304 - Time Shifting - - HelveticaNeue-Bold - 12 - 16 - - _NS:1505 - - - - - NO - - {{538, 69}, {174, 131}} + {{475, 2}, {237, 148}} - + _NS:9 MPfmView 266 - {{205, 95}, {248, 20}} + {{175, 67}, {248, 20}} - + _NS:1505 YES @@ -1562,7 +1691,7 @@ 266 - {{205, 113}, {248, 24}} + {{175, 85}, {248, 24}} @@ -1593,7 +1722,7 @@ 266 - {{205, 140}, {248, 24}} + {{175, 112}, {248, 24}} @@ -1624,10 +1753,10 @@ 266 - {{205, 164}, {248, 32}} + {{175, 135}, {248, 32}} - + _NS:1505 YES @@ -1657,7 +1786,7 @@ 268 - {{6, 48}, {188, 18}} + {{6, 42}, {188, 18}} @@ -1678,7 +1807,7 @@ 265 - {{234, 9}, {96, 28}} + {{204, 5}, {96, 28}} @@ -1703,7 +1832,7 @@ 266 - {{99, 13}, {138, 21}} + {{99, 9}, {109, 21}} @@ -1729,7 +1858,7 @@ 268 - {{6, 9}, {99, 28}} + {{6, 5}, {99, 28}} @@ -1748,7 +1877,7 @@ NO - {{200, 1}, {339, 68}} + {{170, 0}, {306, 62}} @@ -1770,7 +1899,7 @@ NeXT TIFF v4.0 pasteboard type - {200, 200} + {{0, 2}, {170, 170}} @@ -1789,7 +1918,7 @@ YES - {{0, 376}, {780, 200}} + {{0, 404}, {780, 172}} @@ -1908,6 +2037,7 @@ {{50, 0}, {61, 26}} + _NS:22 YES @@ -1940,7 +2070,11 @@ 67108864 272629760 Loops - + + HelveticaNeue-Bold + 12 + 16 + _NS:1505 @@ -1949,7 +2083,7 @@ NO - {{0, 163}, {402, 27}} + {{0, 180}, {402, 27}} @@ -1972,10 +2106,10 @@ YES - {402, 152} + {402, 169} - + _NS:13 YES NO @@ -2172,7 +2306,7 @@ 1 - {{0, 17}, {402, 152}} + {{0, 17}, {402, 169}} @@ -2227,10 +2361,10 @@ - {{0, -5}, {402, 169}} + {{0, -5}, {402, 186}} - + _NS:9 133680 @@ -2244,7 +2378,7 @@ 1 - {402, 190} + {402, 207} @@ -2387,7 +2521,7 @@ NO - {{0, 163}, {377, 27}} + {{0, 180}, {377, 27}} @@ -2410,10 +2544,10 @@ YES - {377, 150} + {377, 167} - + _NS:13 YES NO @@ -2546,7 +2680,7 @@ 1 - {{0, 17}, {377, 150}} + {{0, 17}, {377, 167}} @@ -2601,10 +2735,10 @@ - {{0, -3}, {377, 167}} + {{0, -3}, {377, 184}} - + _NS:9 133680 @@ -2618,7 +2752,7 @@ 1 - {{403, 0}, {377, 190}} + {{403, 0}, {377, 207}} @@ -2626,7 +2760,7 @@ NSView - {780, 190} + {780, 207} @@ -2635,7 +2769,7 @@ 2 - {780, 190} + {780, 207} @@ -2673,10 +2807,10 @@ YES - {256, 143} + {256, 156} - + _NS:13 YES NO @@ -2749,7 +2883,7 @@ 1 - {{0, 17}, {256, 143}} + {{0, 17}, {256, 156}} @@ -2804,10 +2938,10 @@ - {256, 160} + {256, 173} - + _NS:9 133680 @@ -2821,7 +2955,7 @@ 1 - {256, 160} + {256, 173} @@ -2849,10 +2983,10 @@ YES - {523, 143} + {523, 156} - + _NS:13 YES NO @@ -3072,7 +3206,7 @@ 1 - {{0, 17}, {523, 143}} + {{0, 17}, {523, 156}} @@ -3101,6 +3235,7 @@ {{1, 161}, {422, 15}} + _NS:60 NO 1 @@ -3126,10 +3261,10 @@ - {523, 160} + {523, 173} - + _NS:9 133680 @@ -3143,7 +3278,7 @@ 1 - {{257, 0}, {523, 160}} + {{257, 0}, {523, 173}} @@ -3151,7 +3286,7 @@ NSView - {780, 160} + {780, 173} @@ -3332,7 +3467,7 @@ NO - {{0, 159}, {780, 27}} + {{0, 172}, {780, 27}} @@ -3340,7 +3475,7 @@ MPfmView - {{0, 191}, {780, 186}} + {{0, 208}, {780, 199}} @@ -3348,7 +3483,7 @@ NSView - {780, 377} + {780, 407} @@ -3968,14 +4103,6 @@ 551 - - - lblSubtitleInformation - - - - 552 - lblSubtitleVolume @@ -3984,14 +4111,6 @@ 553 - - - lblSubtitleTimeShifting - - - - 554 - lblFilterBySoundFormat @@ -4088,14 +4207,6 @@ 746 - - - lblSubtitlePitchShifting - - - - 748 - txtPitchShiftingValue @@ -4272,6 +4383,78 @@ 862 + + + btnTabTimeShifting + + + + 875 + + + + actionTabTimeShifting: + + + + 876 + + + + btnTabPitchShifting + + + + 877 + + + + actionTabPitchShifting: + + + + 878 + + + + btnTabInfo + + + + 879 + + + + actionTabInfo: + + + + 880 + + + + btnTabActions + + + + 881 + + + + actionTabActions: + + + + 882 + + + + viewActions + + + + 892 + Toolbar @@ -4781,7 +4964,7 @@ 266 {134, 17} - + {250, 750} YES @@ -4906,56 +5089,6 @@ - - 30 - - - YES - - - - - - - - 120 - - - YES - - - - - - - 122 - - - YES - - - - - - - 121 - - - YES - - - - - - 127 - - - YES - - - - - 31 @@ -5038,29 +5171,6 @@ - - 486 - - - YES - - - - - - 154 - - - YES - - - - - - 155 - - - 487 @@ -5153,70 +5263,29 @@ - 507 - + 19 + YES - - - - - + + + - + - 508 - + 20 + YES - + - + - 509 - - - - - 189 - - - YES - - - - - - 190 - - - - - 19 - - - YES - - - - - - - - 20 - - - YES - - - - - - 21 - - + 21 + + 23 @@ -5239,672 +5308,615 @@ - 481 - + 571 + YES - - - - - - - - - - + + - + - 499 - + 572 + YES - - - - + - + - 502 - + 573 + YES - + - + - 503 - - + 574 + + - 70 - - - YES - - - + 575 + + - 71 - - + 778 + + - 83 - + 824 + + + + + 827 + YES - + + + + - + - 84 - - + 858 + + - 114 - - - YES - - - + 857 + + - 115 - - + 846 + + - 65 - + 845 + + + + + 30 + YES - + + + - - - - 66 - - + - 63 - + 486 + YES - + - - - - 64 - - + - 61 - + 154 + YES - + - + - 62 - - + 155 + + - 54 - + 120 + YES - + + - - - - 55 - - + - 112 - + 122 + YES - + + - - - - 113 - - + - 185 - + 580 + YES - + + - - - - 186 - - + - 183 - + 582 + YES - + - - - - 184 - - + - 142 - + 132 + YES - + + + + - - - - 143 - - + - 510 - + 133 + YES - - - - - - - - - - - - + + + + + + - + - 511 - + 137 + YES - + + + + 4364 + {22, 43} + + _NS:9 + MPfmIsPlayingTableCellView + + + + 268 + {{0, 43}, {22, 96}} + + _NS:9 + MPfmTableRowView + - + + + + 864 + + - 518 - - + 636 + + - 520 - + 197 + + + + + 138 + YES - - - - - + + - + - 523 - + 701 + YES - + - - - - 524 - - + - 177 - + 702 + YES - + - + - 178 - - + 703 + + - 179 - + 139 + + + + + 195 + YES - + + - + - 180 - - + 705 + + + YES + + + - 181 - + 706 + YES - + - + - 182 - - + 707 + + - 262 - + 196 + + + + + 255 + YES - + + - - - - 263 - - + - 528 - + 689 + YES - - - + - + - 531 - + 690 + YES - + - + - 532 - - + 691 + + - 85 - + 256 + + + + + 257 + YES - + + - + - 86 - - + 693 + + + YES + + + - 118 - + 694 + YES - + - + - 119 - - + 695 + + - 128 - - - YES - - - - + 258 + + - 539 - + 264 + YES - - - - - + + - + - 540 - + 697 + YES - + - - - - 541 - - + - 289 - + 698 + YES - - - - + - - - - 293 - - + - 292 - - + 699 + + - 291 - - + 265 + + - 290 - - - YES - - - - - - - + 134 + + - 337 - - - YES - - - - + 135 + + - 339 - - - YES - - - + 136 + + - 340 - + 581 + YES - + - - - - 341 - - - - - 338 - - + - 335 - + 583 + YES - - + + + + - + - 336 - - + 587 + + - 329 - - - YES - - - - + 586 + + - 331 - + 585 + + + + + 584 + YES - + - + - 332 - + 588 + YES - + + + + 4364 + {256, 43} + + _NS:9 + MPfmAlbumCoverView + + + + 268 + {{0, 43}, {256, 96}} + + _NS:9 + MPfmTableRowView + - - - - 333 - - + - 330 - - + 637 + + - 323 - - - YES - - - - + 606 + + - 325 - - + 591 + + - 324 - + 507 + YES - + + + + + - + - 326 - + 508 + YES - + - + - 327 - - + 509 + + - 294 - + 142 + YES - - + - + - 298 - - - YES - - - + 143 + + - 299 - + 183 + YES - + - - - - 300 - - + - 297 - - + 184 + + - 308 - + 185 + YES - + - + - 309 - - + 186 + + - 314 - + 189 + YES - + - + - 315 - - + 190 + + - 317 - + 121 + YES - + - - - - 318 - - + - 320 - + 127 + YES - + + - - - - 321 - - + 129 @@ -5927,7 +5939,63 @@ - + + + + 420 + + + YES + + + + + + 421 + + + + + 443 + + + YES + + + + + + 444 + + + + + 446 + + + YES + + + + + + 447 + + + + + 449 + + + YES + + + + + + 450 + + 543 @@ -6096,620 +6164,822 @@ - 420 - + 128 + YES - + + - + - 421 - - + 539 + + + YES + + + + + + + - 443 - + 540 + YES - + - + - 444 - - + 541 + + - 446 - + 308 + YES - + - + - 447 - - + 309 + + - 449 - + 314 + YES - + - + - 450 - - + 315 + + - 571 - + 317 + YES - - + - + - 572 - + 318 + + + + + 320 + YES - + - + - 573 - + 321 + + + + + 289 + YES - + + + + - + - 574 - - + 293 + + - 575 - - + 292 + + - 580 - + 291 + + + + + 290 + YES - - + + + + + - + + + + 337 + + + YES + + + + + + + 339 + + + YES + + + + + + 340 + + + YES + + + + + + 341 + + + + + 338 + + + + + 335 + + + YES + + + + + + + 709 + + + YES + + + + + + 710 + + + YES + + + + + + 711 + + + + + 336 + + + + + 329 + + + YES + + + + + + + 331 + + + YES + + + + + + 332 + + + YES + + + + + + 333 + + + + + 330 + + - 581 - + 323 + YES - + + - + - 582 - + 325 + + + + + 324 + YES - + - + - 132 - + 326 + YES - - - - + - - - - 136 - - - - - 135 - - + - 134 - - + 327 + + - 133 - + 294 + YES - - - - - - + + - + - 264 - + 298 + YES - - + - + - 257 - + 299 + YES - - + - + - 255 - + 300 + + + + + 297 + + + + + 481 + YES - - + + + + + + + + + + + + + + + - + - 195 - + 883 + YES - - + + + + - + - 138 - + 887 + YES - - + - + - 137 - + 888 + + + + + 886 + YES - - - - 4364 - {22, 43} - - _NS:9 - MPfmIsPlayingTableCellView - - - - 268 - {{0, 43}, {22, 96}} - _NS:9 - MPfmTableRowView - + - - - - 197 - - + - 139 - - + 889 + + - 196 - - + 885 + + + YES + + + - 256 - - + 890 + + - 258 - - + 884 + + + YES + + + - 265 - - + 891 + + - 583 - + 499 + YES - - - - + + + + - + - 584 - + 114 + YES - + - + - 585 - - + 115 + + - 586 - - + 83 + + + YES + + + - 587 - - + 84 + + - 588 - + 502 + YES - - - - 4364 - {256, 43} - - _NS:9 - MPfmAlbumCoverView - - - - 268 - {{0, 43}, {256, 96}} - - _NS:9 - MPfmTableRowView - + - + - 591 - - + 503 + + - 606 - - + 70 + + + YES + + + + + + 71 + + - 636 - - + 868 + + + YES + + + - 637 - - + 869 + + - 689 - + 873 + YES - + - + - 690 - + 874 + + + + + 112 + YES - + - + - 691 - - + 113 + + - 693 - + 713 + YES - + + + + - + - 694 - + 819 + YES - + - + - 695 - - + 820 + + - 697 - + 811 + YES - + - + - 698 - + 812 + + + + + 735 + YES - + - + - 699 - - + 736 + + - 701 - + 724 + YES - + - + - 702 - + 725 + + + + + 871 + YES - + - + - 703 - - + 872 + + - 705 - + 865 + YES - + - + - 706 - + 866 + + + + + 54 + YES - + - + - 707 - - + 55 + + - 709 - + 65 + YES - + - + - 710 - + 66 + + + + + 63 + YES - + - + - 711 - - + 64 + + - 713 - + 61 + YES - - - - - + - 718 - + 62 + + + + + 528 + YES - + + + - + + + + 85 + + + YES + + + - 719 - - + 86 + + - 724 - + 118 + YES - + - + - 725 - - + 119 + + - 735 - + 531 + YES - + - + - 736 - - + 532 + + - 778 - - + 510 + + + YES + + + + + + + + + + + + + - 784 - + 814 + YES - + - 785 - - + 815 + + - 787 - + 797 + YES - + - 788 - - + 798 + + - 790 - + 794 + YES - + - 791 - + 795 + + + + + 158 + YES - + - 792 - - - - - 793 - - + 161 + + - 800 - + 763 + YES - + - 801 - - + 764 + + 802 @@ -6726,144 +6996,142 @@ - 811 - + 800 + YES - + - + - 812 - - + 801 + + - 763 - + 787 + YES - + - 764 - - + 788 + + - 158 - + 791 + YES - + - 161 - - + 792 + + - 797 - + 790 + YES - + - 798 - - + 793 + + - 794 - + 784 + YES - + - 795 - - + 785 + + - 819 - + 520 + YES - + + + + - - - - 820 - - + - 814 - + 262 + YES - + - - - - 815 - - + - 824 - - + 263 + + - 827 - + 181 + YES - - - - + - + - 858 - - + 182 + + - 857 - - + 179 + + + YES + + + - 846 - - + 180 + + - 845 - - + 177 + + + YES + + + - 864 - - + 178 + + @@ -7090,12 +7358,8 @@ 509.IBPluginDependency 51.IBPluginDependency 510.IBPluginDependency - 511.IBPluginDependency - 518.IBPluginDependency 52.IBPluginDependency 520.IBPluginDependency - 523.IBPluginDependency - 524.IBPluginDependency 528.IBPluginDependency 53.IBPluginDependency 531.IBPluginDependency @@ -7173,8 +7437,6 @@ 710.IBPluginDependency 711.IBPluginDependency 713.IBPluginDependency - 718.IBPluginDependency - 719.IBPluginDependency 724.IBPluginDependency 725.IBPluginDependency 73.IBPluginDependency @@ -7241,6 +7503,27 @@ 86.IBPluginDependency 864.IBPluginDependency 864.userInterfaceItemIdentifier + 865.CustomClassName + 865.IBPluginDependency + 866.IBPluginDependency + 868.CustomClassName + 868.IBPluginDependency + 869.IBPluginDependency + 871.CustomClassName + 871.IBPluginDependency + 872.IBPluginDependency + 873.CustomClassName + 873.IBPluginDependency + 874.IBPluginDependency + 883.IBPluginDependency + 884.IBPluginDependency + 885.IBPluginDependency + 886.IBPluginDependency + 887.IBPluginDependency + 888.IBPluginDependency + 889.IBPluginDependency + 890.IBPluginDependency + 891.IBPluginDependency YES @@ -7517,10 +7800,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin lblArtistName com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -7599,8 +7878,6 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin toolbarPlay com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -7664,6 +7941,27 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin NSTableViewRowViewKey + MPfmTabButton + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + MPfmTabButton + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + MPfmTabButton + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + MPfmTabButton + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -7678,7 +7976,7 @@ - 864 + 901 @@ -7739,6 +8037,14 @@ ./Classes/MPfmSongPositionSlider.h + + MPfmTabButton + NSButton + + IBProjectSource + ./Classes/MPfmTabButton.h + + MPfmTableHeaderView NSTableHeaderView @@ -7808,6 +8114,10 @@ actionShuffle: actionSoundFormatChanged: actionStopLoop: + actionTabActions: + actionTabInfo: + actionTabPitchShifting: + actionTabTimeShifting: actionUpdateLibrary: @@ -7843,6 +8153,10 @@ id id id + id + id + id + id @@ -7879,6 +8193,10 @@ actionShuffle: actionSoundFormatChanged: actionStopLoop: + actionTabActions: + actionTabInfo: + actionTabPitchShifting: + actionTabTimeShifting: actionUpdateLibrary: @@ -8003,6 +8321,22 @@ actionStopLoop: id + + actionTabActions: + id + + + actionTabInfo: + id + + + actionTabPitchShifting: + id + + + actionTabTimeShifting: + id + actionUpdateLibrary: id @@ -8025,6 +8359,10 @@ btnPlaySelectedSong btnRemoveLoop btnRemoveMarker + btnTabActions + btnTabInfo + btnTabPitchShifting + btnTabTimeShifting cboSoundFormat imageAlbumCover lblAlbumTitle @@ -8047,7 +8385,6 @@ lblSubtitleInformation lblSubtitlePitchShifting lblSubtitleSongPosition - lblSubtitleTimeShifting lblSubtitleVolume lblTitleCurrentSong lblTitleLibraryBrowser @@ -8072,6 +8409,7 @@ toolbarMain txtCurrentTempoValue txtPitchShiftingValue + viewActions viewInformation viewLeft viewLeftHeader @@ -8101,6 +8439,10 @@ NSButton MPfmButton MPfmButton + MPfmTabButton + MPfmTabButton + MPfmTabButton + MPfmTabButton NSPopUpButton NSImageView NSTextField @@ -8130,7 +8472,6 @@ NSTextField NSTextField NSTextField - NSTextField NSOutlineView MPfmScrollView MPfmScrollView @@ -8162,6 +8503,7 @@ MPfmView MPfmView MPfmView + MPfmView @@ -8180,6 +8522,10 @@ btnPlaySelectedSong btnRemoveLoop btnRemoveMarker + btnTabActions + btnTabInfo + btnTabPitchShifting + btnTabTimeShifting cboSoundFormat imageAlbumCover lblAlbumTitle @@ -8202,7 +8548,6 @@ lblSubtitleInformation lblSubtitlePitchShifting lblSubtitleSongPosition - lblSubtitleTimeShifting lblSubtitleVolume lblTitleCurrentSong lblTitleLibraryBrowser @@ -8227,6 +8572,7 @@ toolbarMain txtCurrentTempoValue txtPitchShiftingValue + viewActions viewInformation viewLeft viewLeftHeader @@ -8292,6 +8638,22 @@ btnRemoveMarker MPfmButton + + btnTabActions + MPfmTabButton + + + btnTabInfo + MPfmTabButton + + + btnTabPitchShifting + MPfmTabButton + + + btnTabTimeShifting + MPfmTabButton + cboSoundFormat NSPopUpButton @@ -8380,10 +8742,6 @@ lblSubtitleSongPosition NSTextField - - lblSubtitleTimeShifting - NSTextField - lblSubtitleVolume NSTextField @@ -8480,6 +8838,10 @@ txtPitchShiftingValue NSTextField + + viewActions + MPfmView + viewInformation MPfmView @@ -8543,6 +8905,14 @@ ./Classes/MainWindowController.h + + NSTableRowView + NSView + + IBProjectSource + ./Classes/NSTableRowView.h + + 0