From 0a6bdadb4ceb1ddf04d825a586351bd5c2dc068c Mon Sep 17 00:00:00 2001 From: TorratDev Date: Fri, 26 Mar 2021 15:55:33 +0100 Subject: [PATCH] Remove ignored files, Add ignore VS-2019 --- .gitignore | 363 +++++ .../MediaPlayerModels/FileDetails.cs | 26 +- .../MediaPlayerModels.csproj | 110 +- .../MediaPlayerModels/PlayListClass.cs | 34 +- .../MediaPlayerModels/PlayListDirectory.cs | 46 +- .../Properties/AssemblyInfo.cs | 72 +- .../bin/Debug/MediaPlayerModels.pdb | Bin 13824 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 6731 -> 0 bytes ...iaPlayerModels.csproj.FileListAbsolute.txt | 5 - ...odels.csprojResolveAssemblyReference.cache | Bin 1918 -> 0 bytes .../obj/Debug/MediaPlayerModels.pdb | Bin 13824 -> 0 bytes ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 .../MediaPlayerViewModel/AlbumViewModel.cs | 26 +- .../MediaPlayerViewModel/Commands/Delegate.cs | 78 +- .../EventAggregatorClassForViewModel.cs | 28 +- .../MediaPlayerMainWindowViewModel.cs | 1107 ++++++++------- .../MediaPlayerViewModel.csproj | 178 ++- .../Properties/Annotations.cs | 1226 ++++++++--------- .../Properties/AssemblyInfo.cs | 72 +- .../Properties/Settings.Designer.cs | 38 + .../Properties/Settings.settings | 9 + .../MediaPlayerViewModel/app.config | 15 + .../bin/Debug/MediaPlayerModels.pdb | Bin 13824 -> 0 bytes .../bin/Debug/MediaPlayerViewModel.pdb | Bin 60928 -> 0 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7411 -> 0 bytes ...layerViewModel.csproj.FileListAbsolute.txt | 7 - ...Model.csprojResolveAssemblyReference.cache | Bin 9060 -> 0 bytes .../obj/Debug/MediaPlayerViewModel.pdb | Bin 60928 -> 0 bytes ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 MediaPlayerWindow/MediaPlayerWindow.sln | 68 +- MediaPlayerWindow/MediaPlayerWindow.v12.suo | Bin 126464 -> 0 bytes .../MediaPlayerWindow/Albums.xaml | 18 +- .../MediaPlayerWindow/Albums.xaml.cs | 54 +- .../MediaPlayerWindow/App.config | 10 +- MediaPlayerWindow/MediaPlayerWindow/App.xaml | 25 +- .../MediaPlayerWindow/App.xaml.cs | 34 +- .../MediaPlayerWindow/ClassDiagram1.cd | 2 +- .../DecimalToIntegerConverterForVolume.cs | 44 +- .../Converters/TimeSpanToDoubleConverter.cs | 64 +- .../Images/backgroundImage.png | Bin 0 -> 15473 bytes .../MediaPlayerWindow/MainWindow.xaml | 562 +++++--- .../MediaPlayerWindow/MainWindow.xaml.cs | 445 +++--- .../MediaPlayerWindow.csproj | 317 ++--- .../Properties/AssemblyInfo.cs | 110 +- .../Properties/Resources.Designer.cs | 142 +- .../Properties/Resources.resx | 232 ++-- .../Properties/Settings.Designer.cs | 60 +- .../Properties/Settings.settings | 12 +- .../bin/Debug/MediaPlayerModels.pdb | Bin 13824 -> 0 bytes .../bin/Debug/MediaPlayerViewModel.pdb | Bin 60928 -> 0 bytes .../bin/Debug/MediaPlayerWindow.exe.config | 6 - .../bin/Debug/MediaPlayerWindow.pdb | Bin 56832 -> 0 bytes .../Debug/MediaPlayerWindow.vshost.exe.config | 6 - .../MediaPlayerWindow.vshost.exe.manifest | 11 - .../MediaPlayerWindow/obj/Debug/Albums.baml | Bin 834 -> 0 bytes .../MediaPlayerWindow/obj/Debug/Albums.g.cs | 74 - .../MediaPlayerWindow/obj/Debug/Albums.g.i.cs | 74 - .../MediaPlayerWindow/obj/Debug/App.baml | Bin 724 -> 0 bytes .../MediaPlayerWindow/obj/Debug/App.g.cs | 82 -- .../MediaPlayerWindow/obj/Debug/App.g.i.cs | 82 -- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 7651 -> 0 bytes .../Debug/GeneratedInternalTypeHelper.g.cs | 62 - .../Debug/GeneratedInternalTypeHelper.g.i.cs | 62 - .../obj/Debug/MainWindow.baml | Bin 10384 -> 0 bytes .../obj/Debug/MainWindow.g.cs | 295 ---- .../obj/Debug/MainWindow.g.i.cs | 295 ---- ...layerWindow.Properties.Resources.resources | Bin 180 -> 0 bytes ...iaPlayerWindow.csproj.FileListAbsolute.txt | 33 - ...PlayerWindow.csproj.GenerateResource.Cache | Bin 919 -> 0 bytes ...indow.csprojResolveAssemblyReference.cache | Bin 26062 -> 0 bytes .../obj/Debug/MediaPlayerWindow.g.resources | Bin 4707008 -> 0 bytes .../obj/Debug/MediaPlayerWindow.pdb | Bin 56832 -> 0 bytes .../Debug/MediaPlayerWindow_Content.g.i.cs | 13 - .../MediaPlayerWindow_MarkupCompile.cache | 20 - .../MediaPlayerWindow_MarkupCompile.i.cache | 20 - .../MediaPlayerWindow_MarkupCompile.lref | 4 - ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 83 files changed, 3072 insertions(+), 3706 deletions(-) create mode 100644 .gitignore delete mode 100644 MediaPlayerWindow/MediaPlayerModels/bin/Debug/MediaPlayerModels.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerModels/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 MediaPlayerWindow/MediaPlayerModels/obj/Debug/MediaPlayerModels.csproj.FileListAbsolute.txt delete mode 100644 MediaPlayerWindow/MediaPlayerModels/obj/Debug/MediaPlayerModels.csprojResolveAssemblyReference.cache delete mode 100644 MediaPlayerWindow/MediaPlayerModels/obj/Debug/MediaPlayerModels.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs delete mode 100644 MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs delete mode 100644 MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs create mode 100644 MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.Designer.cs create mode 100644 MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.settings create mode 100644 MediaPlayerWindow/MediaPlayerViewModel/app.config delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/bin/Debug/MediaPlayerModels.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/bin/Debug/MediaPlayerViewModel.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/MediaPlayerViewModel.csproj.FileListAbsolute.txt delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/MediaPlayerViewModel.csprojResolveAssemblyReference.cache delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/MediaPlayerViewModel.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs delete mode 100644 MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow.v12.suo create mode 100644 MediaPlayerWindow/MediaPlayerWindow/Images/backgroundImage.png delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/bin/Debug/MediaPlayerModels.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/bin/Debug/MediaPlayerViewModel.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/bin/Debug/MediaPlayerWindow.exe.config delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/bin/Debug/MediaPlayerWindow.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/bin/Debug/MediaPlayerWindow.vshost.exe.config delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/bin/Debug/MediaPlayerWindow.vshost.exe.manifest delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/Albums.baml delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/Albums.g.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/Albums.g.i.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/App.baml delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/App.g.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/App.g.i.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/GeneratedInternalTypeHelper.g.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/GeneratedInternalTypeHelper.g.i.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MainWindow.baml delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MainWindow.g.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MainWindow.g.i.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow.Properties.Resources.resources delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow.csproj.FileListAbsolute.txt delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow.csproj.GenerateResource.Cache delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow.csprojResolveAssemblyReference.cache delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow.g.resources delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow.pdb delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow_Content.g.i.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow_MarkupCompile.cache delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow_MarkupCompile.i.cache delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/MediaPlayerWindow_MarkupCompile.lref delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs delete mode 100644 MediaPlayerWindow/MediaPlayerWindow/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9491a2f --- /dev/null +++ b/.gitignore @@ -0,0 +1,363 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd \ No newline at end of file diff --git a/MediaPlayerWindow/MediaPlayerModels/FileDetails.cs b/MediaPlayerWindow/MediaPlayerModels/FileDetails.cs index 4fd7e0c..23d6d0e 100644 --- a/MediaPlayerWindow/MediaPlayerModels/FileDetails.cs +++ b/MediaPlayerWindow/MediaPlayerModels/FileDetails.cs @@ -1,13 +1,13 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MediaPlayerModels -{ - class FileDetails - { - // private string title; - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MediaPlayerModels +{ + class FileDetails + { + // private string title; + } +} diff --git a/MediaPlayerWindow/MediaPlayerModels/MediaPlayerModels.csproj b/MediaPlayerWindow/MediaPlayerModels/MediaPlayerModels.csproj index 233bb45..b540acc 100644 --- a/MediaPlayerWindow/MediaPlayerModels/MediaPlayerModels.csproj +++ b/MediaPlayerWindow/MediaPlayerModels/MediaPlayerModels.csproj @@ -1,56 +1,56 @@ - - - - - Debug - AnyCPU - {968C2CCC-C711-46BE-85A3-9A3369EFF1C0} - Library - Properties - MediaPlayerModels - MediaPlayerModels - v4.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - + + + + + Debug + AnyCPU + {968C2CCC-C711-46BE-85A3-9A3369EFF1C0} + Library + Properties + MediaPlayerModels + MediaPlayerModels + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MediaPlayerWindow/MediaPlayerModels/PlayListClass.cs b/MediaPlayerWindow/MediaPlayerModels/PlayListClass.cs index ca11db8..5b383a6 100644 --- a/MediaPlayerWindow/MediaPlayerModels/PlayListClass.cs +++ b/MediaPlayerWindow/MediaPlayerModels/PlayListClass.cs @@ -1,17 +1,17 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Runtime.Serialization; -namespace MediaPlayerModels -{ - [DataContract] - public class PlayListClass - { - [DataMember] - public string FileName { get; set; } - [DataMember] - public string Filepath { get; set; } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.Serialization; +namespace MediaPlayerModels +{ + [DataContract] + public class PlayListClass + { + [DataMember] + public string FileName { get; set; } + [DataMember] + public string Filepath { get; set; } + } +} diff --git a/MediaPlayerWindow/MediaPlayerModels/PlayListDirectory.cs b/MediaPlayerWindow/MediaPlayerModels/PlayListDirectory.cs index b36dc7d..edb7f8b 100644 --- a/MediaPlayerWindow/MediaPlayerModels/PlayListDirectory.cs +++ b/MediaPlayerWindow/MediaPlayerModels/PlayListDirectory.cs @@ -1,23 +1,23 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using System.Xml; - -namespace MediaPlayerModels -{ - [DataContract] - public class PlayListDirectory - { - - private List playListCollection=new List(); - [DataMember] - public List PlayListCollection - { - get { return playListCollection; } - set { playListCollection = value; } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using System.Xml; + +namespace MediaPlayerModels +{ + [DataContract] + public class PlayListDirectory + { + + private List playListCollection=new List(); + [DataMember] + public List PlayListCollection + { + get { return playListCollection; } + set { playListCollection = value; } + } + } +} diff --git a/MediaPlayerWindow/MediaPlayerModels/Properties/AssemblyInfo.cs b/MediaPlayerWindow/MediaPlayerModels/Properties/AssemblyInfo.cs index 14c0228..3c85aa7 100644 --- a/MediaPlayerWindow/MediaPlayerModels/Properties/AssemblyInfo.cs +++ b/MediaPlayerWindow/MediaPlayerModels/Properties/AssemblyInfo.cs @@ -1,36 +1,36 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MediaPlayerModels")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MediaPlayerModels")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7c88021a-55e6-44d5-bfb3-ce37f811a331")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MediaPlayerModels")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MediaPlayerModels")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7c88021a-55e6-44d5-bfb3-ce37f811a331")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MediaPlayerWindow/MediaPlayerModels/bin/Debug/MediaPlayerModels.pdb b/MediaPlayerWindow/MediaPlayerModels/bin/Debug/MediaPlayerModels.pdb deleted file mode 100644 index 5f5978efa24ba15d33ca2722ebed08cf7d3682ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 zcmeHNU1%It6uz6pWH;$gHvKWSQkIfR)3md@NoZ`XO>5HHV1jM8O;cGgo83t}c7Ni| zu1)&1^`QtNRH$gFQi`At3O*D_6Bg1fazF6RVLNs`2$cV|9U^;y{SApKaijUY?J*jO28X#o!x=CuT-TmPl* z`p@e%cTVnR-@ex2iYxxp5pn79*Gn#Zvg@(4zg+#wf4Wt^SG{)X34i|;|HTbL-1K%_ z?0qA>PeswGGb?z6*oeD;jbIRa zfXjiUz;Ymcdj+r(=mXvZtO6?kPruJS!1etQLJ`60A48r3#`D|uhZ|1({H2F$c_#q1 z;1!V|B@%K#>Ji%>)Jy8AE999#@^qjJ#UX*w>!a7XHdi^E_}1t_Q_q^wrf{gSxutn? zOSC-`&!_Zs&Wv^&WkY{7!%poQeJC^pw_Vq@QM=Yek*^U}VT- z-u`?#XQXs3qGyd*(l`;z8JRT7)Huo<&(T$Pog)X#PTD5UDLeC34f#hQt(EqF@1(c~gOVI?s6O{6`y6XFuwK3v)vP zx2I!UC+Qgd;5K`D^n=RgsSCmOiOA z;2*6vNa-_4WgBcEH13b3PEYTTarabE{Q2ciQwNn}Xb3u>IEEYLsIxW|%tN9b&TgoXRiOxzLVj zM|D8zlJXBox=_RtctEVP&OOvRkGRDF54@G4-cc^Jna870ix8@Q6o%#zw>Zc+>dSI= zeH=7u?EWuX_2r>N^(FJ{vRjH+h;w*o)&DYfwKq76NIh}a-zk&1oL-E<=P$f`i0k_2 z`TalCo_nYL{0sTshPrLl=aCmgFm|jX-JcP`bS$NtB4}pg!J~+=^=w}<6F(+1`i-P+ z2509ohw&-5dH#zUVJ(o;qQ6pMiMrNg$U@lpVq>wN4CFxn>nCmexG!wo`{11Ze3e)+ zyh!+V51?blcpHHQpn{c1+-JR9yQK2u*Fop^LB%2UiDvr{a~W@x`YYWrGAwZ19Ljq_ zO0P0hQSTN>M0Vbh1&h*~)ncgU9HlRV}-V{OGJkFkO?CRV%>MEZ-ZhCSoo zIoE^fwZ~35u`DTL9yya)xiS^%&ek3-hb4i7li+m(?TR}sJ)?y^w0|0kYyZ=VXkKUX z`yB0D-T(XqrNXhy0(JjGI|v}SkHQw{58ei{4xKFRiOv70;2*zR%j^IE diff --git a/MediaPlayerWindow/MediaPlayerModels/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/MediaPlayerWindow/MediaPlayerModels/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index af77773a38d886a8dab1b01d887332b7f98bd73c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6731 zcmeHMZBH9V5VpZwFoYJBI0Zr$BI zjDz?O{RjO8RexeTbAG|Rg!Y3^;)544K4xE@nc2DZvqLN%i^cwdhM(B(j)8D@m?MP} zb#3i26%bz5fy;!I7oI2l?ZQ^t+@n%4;csS_tPK97&3wRhAnB%011$+po4Y}cGv^oD zu81S*Z`Lxo`bvGRp3S-|8ImIt2)X_Vq}KuCF5+$bno7}pCrPtOrBxzw+iwP1-G|8! z3Fo3k-B(Icug2S3Cz|?bm70OkdEwVtqsTa&cZlyYmuT7>iCVQ-4>&JM;?b6nN4>5J zsX^bp3w=ewUGVoYDl0@bsP0cI2Q@|YTUbOrWes0QTA+0Tq1g772K&yf>n!}@=0Tn1 zIz#WX>z8PUhp;vQ~ zHki_~eLf)xj%kV^T!4iJgE4?If2nIn`0R+vC)cYBOf@-aBjDwU-9%gLOx%^ip-Kt) z3an=ue1eqgPN8lo@HO*jcgp3JI#E)_m@#e`vDi4sv3NXgz%R%@C(3Q5sRv01yXI(2 zBkL#XQ^_3b4TRu*c7OkdA&}>Lga>q&F!_F|KeVhR^BZZ?Q;v|F)z06X<^TQStgVq1 zXJs|Jkz1yj^^I!!COdAasZqqCI^3|{^5x?3QHn;9Mg6xaip6hvP7V158YO5HIW$Vp zVSRB{k=!Q7K};nR_&9+AxIip<2LyafqDZ2cLNN_u%D4+MX3T(ieOl_$p_gS~$1NhM z-Dj}2^>(Y$Cx+?cWosqfW0hS7xpi`8diPov4K9DKPA^ldMvv&DJ4Oon=dj=G`)Q(n4)lp|#25JF zDaMU^@H7RwjFrpevKz@S;qMg29)FE_6jqD*o@*eNPgpMJ#)I&Qp3qddJvinehz3Lp z0?+`iZidv|e0H+F`rPh2VRqvT^mbrB`ZiwN85<2fA73Fro-Uy$lbVVTa#N2T)q@ z)Wm^eAL-=5ai`V=J%1DB??e05$;sq5aO(A13b`iM zJ&kWclp{EIQ%Gb(gs1S3C_=?Dj-)nZx`U>~k>y^|rjYhxOCj||YmM(fJUGo?TS7fE zzK7nq)1R5Iv6fhrP_czq=gfEp`i0ZV_4UE_neiO@hry;_z&bOhCDKA(i1ouW;|EY7 zV~mbp*O=es*D0jUc&jkdAfnh%<40I{KY~mt5{J0Jms3d0vE2#N19J!4_+O*5?!W${ MF*@t|HR~h@bk4nJW{x-JdEOs<=$oEK31N3#gjyLDTlOInGGg1@92j=g ze!*Jv!47C6RJuen`pgI2OxjGtQVN;XT+RoZ*+7c$6P#?T14x$!txmiUzmD7OXraYB zyh3VEt`_N?7z;_yatp+&$3j9rE6)sHv96L5LW?CBw#v=EzC4CN0`k5o~I8BqGo?`k^OIVH`U$)g3M~FrHT~dzH#$?JBLc zv$dXHQS;hA>;L|;_->M_@~naklfT+QT z;c&8nanOk15Yh-k1GA!GLT)YSJX5CiFbYPYI2E6z2mQ?}l}cl!Dau-Jb9UpW__gZ$ ze)S$seT$E!UH~ttkMFn3b-FHdUv`c#6lE@U7^w1@dX)bBTC6TEv>5)q!(_PYI TmqeT5l4e~JZJJ989Ma@p4BRvA diff --git a/MediaPlayerWindow/MediaPlayerModels/obj/Debug/MediaPlayerModels.pdb b/MediaPlayerWindow/MediaPlayerModels/obj/Debug/MediaPlayerModels.pdb deleted file mode 100644 index 5f5978efa24ba15d33ca2722ebed08cf7d3682ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 zcmeHNU1%It6uz6pWH;$gHvKWSQkIfR)3md@NoZ`XO>5HHV1jM8O;cGgo83t}c7Ni| zu1)&1^`QtNRH$gFQi`At3O*D_6Bg1fazF6RVLNs`2$cV|9U^;y{SApKaijUY?J*jO28X#o!x=CuT-TmPl* z`p@e%cTVnR-@ex2iYxxp5pn79*Gn#Zvg@(4zg+#wf4Wt^SG{)X34i|;|HTbL-1K%_ z?0qA>PeswGGb?z6*oeD;jbIRa zfXjiUz;Ymcdj+r(=mXvZtO6?kPruJS!1etQLJ`60A48r3#`D|uhZ|1({H2F$c_#q1 z;1!V|B@%K#>Ji%>)Jy8AE999#@^qjJ#UX*w>!a7XHdi^E_}1t_Q_q^wrf{gSxutn? zOSC-`&!_Zs&Wv^&WkY{7!%poQeJC^pw_Vq@QM=Yek*^U}VT- z-u`?#XQXs3qGyd*(l`;z8JRT7)Huo<&(T$Pog)X#PTD5UDLeC34f#hQt(EqF@1(c~gOVI?s6O{6`y6XFuwK3v)vP zx2I!UC+Qgd;5K`D^n=RgsSCmOiOA z;2*6vNa-_4WgBcEH13b3PEYTTarabE{Q2ciQwNn}Xb3u>IEEYLsIxW|%tN9b&TgoXRiOxzLVj zM|D8zlJXBox=_RtctEVP&OOvRkGRDF54@G4-cc^Jna870ix8@Q6o%#zw>Zc+>dSI= zeH=7u?EWuX_2r>N^(FJ{vRjH+h;w*o)&DYfwKq76NIh}a-zk&1oL-E<=P$f`i0k_2 z`TalCo_nYL{0sTshPrLl=aCmgFm|jX-JcP`bS$NtB4}pg!J~+=^=w}<6F(+1`i-P+ z2509ohw&-5dH#zUVJ(o;qQ6pMiMrNg$U@lpVq>wN4CFxn>nCmexG!wo`{11Ze3e)+ zyh!+V51?blcpHHQpn{c1+-JR9yQK2u*Fop^LB%2UiDvr{a~W@x`YYWrGAwZ19Ljq_ zO0P0hQSTN>M0Vbh1&h*~)ncgU9HlRV}-V{OGJkFkO?CRV%>MEZ-ZhCSoo zIoE^fwZ~35u`DTL9yya)xiS^%&ek3-hb4i7li+m(?TR}sJ)?y^w0|0kYyZ=VXkKUX z`yB0D-T(XqrNXhy0(JjGI|v}SkHQw{58ei{4xKFRiOv70;2*zR%j^IE diff --git a/MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs deleted file mode 100644 index e69de29..0000000 diff --git a/MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs deleted file mode 100644 index e69de29..0000000 diff --git a/MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/MediaPlayerWindow/MediaPlayerModels/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs deleted file mode 100644 index e69de29..0000000 diff --git a/MediaPlayerWindow/MediaPlayerViewModel/AlbumViewModel.cs b/MediaPlayerWindow/MediaPlayerViewModel/AlbumViewModel.cs index daf455b..952a37e 100644 --- a/MediaPlayerWindow/MediaPlayerViewModel/AlbumViewModel.cs +++ b/MediaPlayerWindow/MediaPlayerViewModel/AlbumViewModel.cs @@ -1,13 +1,13 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MediaPlayerViewModel -{ - class AlbumViewModel - { - } -} +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MediaPlayerViewModel +{ + class AlbumViewModel + { + } +} diff --git a/MediaPlayerWindow/MediaPlayerViewModel/Commands/Delegate.cs b/MediaPlayerWindow/MediaPlayerViewModel/Commands/Delegate.cs index e462244..379f89b 100644 --- a/MediaPlayerWindow/MediaPlayerViewModel/Commands/Delegate.cs +++ b/MediaPlayerWindow/MediaPlayerViewModel/Commands/Delegate.cs @@ -1,38 +1,40 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Input; - -namespace MediaPlayerWindow.Commands -{ - public class DelegateCommand:ICommand - { - private Action whatToExecute; - private Func whenToExecute; - - public DelegateCommand(Action what, Funcwhen ) - { - whatToExecute = what; - whenToExecute = when; - } - - public bool CanExecute(object parameter) - { - return whenToExecute() ; - } - - public void Execute(object parameter) - { - // throw new NotImplementedException(); - - whatToExecute(parameter ); - } - - public event EventHandler CanExecuteChanged; - } -} +using MediaPlayerViewModel; +using System; +using System.Windows.Forms; +using System.Windows.Input; + +namespace MediaPlayerWindow.Commands +{ + public class DelegateCommand : ICommand + { + private Action whatToExecute; + private Func whenToExecute; + private MediaPlayerMainWindowViewModel _viewModel; + public DelegateCommand(Action what, Func when, MediaPlayerMainWindowViewModel viewModel) + { + whatToExecute = what; + whenToExecute = when; + _viewModel = viewModel; + } + + public bool CanExecute(object parameter) + { + return whenToExecute(); + } + + public void Execute(object parameter) + { + // throw new NotImplementedException(); + try + { + whatToExecute(parameter); + } + catch (Exception ex) + { + _viewModel.Alert = ex.Message; + } + } + + public event EventHandler CanExecuteChanged; + } +} diff --git a/MediaPlayerWindow/MediaPlayerViewModel/Events/EventAggregatorClassForViewModel.cs b/MediaPlayerWindow/MediaPlayerViewModel/Events/EventAggregatorClassForViewModel.cs index 9efe6f8..5e82302 100644 --- a/MediaPlayerWindow/MediaPlayerViewModel/Events/EventAggregatorClassForViewModel.cs +++ b/MediaPlayerWindow/MediaPlayerViewModel/Events/EventAggregatorClassForViewModel.cs @@ -1,14 +1,14 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace MediaPlayerViewModel.Events -{ -// class EventAggregatorClassForViewModel:IEventAggregator -// { -// private IeventAggregator _aggregator; -// } - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MediaPlayerViewModel.Events +{ +// class EventAggregatorClassForViewModel:IEventAggregator +// { +// private IeventAggregator _aggregator; +// } + +} diff --git a/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerMainWindowViewModel.cs b/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerMainWindowViewModel.cs index 5f96f7e..680c714 100644 --- a/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerMainWindowViewModel.cs +++ b/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerMainWindowViewModel.cs @@ -1,570 +1,537 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.ComponentModel; -using System.IO; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Security.Policy; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Controls.Primitives; -using System.Windows.Forms; -using System.Xml.Serialization; -using MediaPlayerModels; -using MediaPlayerViewModel.Annotations; -using MediaPlayerWindow.Commands; -using System.Windows.Input; -using Button = System.Windows.Controls.Button; -using System.Runtime.Serialization; -namespace MediaPlayerViewModel -{ - public class MediaPlayerMainWindowViewModel:INotifyPropertyChanged - { - private Uri _mediaSource; - private bool _playRequested=false; - private bool _mediaOpened = false; - private bool playValue = false; - private System.Windows.Visibility listVisibility; - private Dictionary playlistLookupDictionary=new Dictionary(); - // private ObservableCollection folder=new ObservableCollection(); - private ObservableCollection playListViewCollection=new ObservableCollection(); - private ObservableCollection> albumsViewCollection = new ObservableCollection>(); - public string ImageUri { get; set; } - - public MediaPlayerMainWindowViewModel() - { - ImageUri = Properties.Settings.Default.backgroundImage; - } - - public ObservableCollection PlayListViewCollection - { - get { return playListViewCollection; } - set { playListViewCollection = value; } - } - - public System.Windows.Visibility ListVisibility - { - get { return listVisibility; } - set { listVisibility = value;OnPropertyChanged("ListVisibility"); } - } - //public event PlayRequestedValueChanged; - public event EventHandler PlayValueRequested; - public event PropertyChangedEventHandler PropertyChanged; - public event EventHandler PauseRequested; - public event EventHandler StopRequested; - public event EventHandler MoveForwardRequested; - public event EventHandler MoveBackwardRequested; - public event EventHandler MediaOpenedRequested; - public event EventHandler VolumeUpEvent; - public event EventHandler VolumeDownEvent; - public event EventHandler SpeedRatioUpEvent; - public event EventHandler SpeedRatioDownEvent; - public event EventHandler FullScreenEvent; - public event EventHandler ChangeBackgroundEvent; - - public ObservableCollection> AlbumsViewCollection - { - get { return albumsViewCollection; } - set { albumsViewCollection = value; } - } - - public bool PlayRequested - { - get { return _playRequested; } - set { _playRequested = value; OnPropertyChanged("PlayRequested"); - - } - - } - - public bool MediaOpened - { - get { return _mediaOpened; } - set { _mediaOpened = value;OnMediaOpenedRequested(); } - } - - #region label - public Uri MediaSource - { - get { return _mediaSource; } - set - { - _mediaSource = value; - - OnPropertyChanged("MediaSource"); - - } - } - - - public ICommand OpenFileCommand - { - get { return new DelegateCommand(OpenFileMethod, IsValid); } - - } - - public ICommand ShowHidePlayListCommand - { - get { return new DelegateCommand(ShowHidePlayListMethod,IsValid);} - } - - public ICommand PlayFileCommand - { - get { return new DelegateCommand(PlayMediaFileMethod,IsValid);} - } - - public ICommand SpeedRatioUpEventCommand - { - get { return new DelegateCommand(SpeedRatioUpMethod,IsValid);} - } - - public ICommand SpeedRatioDownEventCommand - { - get { return new DelegateCommand(SpeedRatioDownMethod,IsValid);} - } - - public ICommand VolumeUpCommand - { - get { return new DelegateCommand(VolumeUpMethod,IsValid);} - } - - public ICommand VolumeDownCommand - { - get { return new DelegateCommand(VolumeDownMethod,IsValid);} - } - public ICommand PlayListCommand - { - get { return new DelegateCommand(PlayListMethod,IsValid);} - } - - public ICommand FullScreenCommand - { - get { return new DelegateCommand(FullScreenMethod,IsValid);} - } - - public ICommand OnItemSelectedInPlayListCommand - { - get { return new DelegateCommand(ItemSelectedInPlayList,IsValid);} - } - public ICommand StopFileCommand - { - get { return new DelegateCommand(StopMediaFileMethod, IsValid); } - } - - public ICommand SavePlayListCommand - { - get { return new DelegateCommand(SavePlaylist,IsValid);} - } - - public ICommand MediaOpenedCommand - { - get { return new DelegateCommand(MediaOpenedMethod,IsValid);} - } - public ICommand OpenPlayListCommand - { - get { return new DelegateCommand(OpenPlayList,IsValid);} - } - public ICommand ChangeBackgroundCommand - { - get { return new DelegateCommand(ChangeBackground, IsValid); } - } - public ICommand MoveForwardFileCommand - { - get { return new DelegateCommand(MoveForwardMediaFileMethod, IsValid); } - } - public ICommand MoveBackwardFileCommand - { - get { return new DelegateCommand(MoveBackwardMediaFileMethod, IsValid); } - } - - - #endregion - #region Events - protected virtual void OnPropertyChanged(string propertyName) - { - // PropertyChangedEventHandler handler = PropertyChanged; - // if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); - if (PropertyChanged != null) - { - this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); - } - } - - protected virtual void OnPauseRequested() - { - if (PauseRequested != null) - { - this.PauseRequested(this,new EventArgs()); - } - } - protected virtual void OnPlayValueRequested() - { - if (PlayValueRequested != null) - { - this.PlayValueRequested(this, new EventArgs()); - } - } - - protected virtual void OnFullScreeEvent() - { - if (FullScreenEvent != null) - { - this.FullScreenEvent(this, new EventArgs()); - } - } - - protected virtual void OnChangeBackgroundEvent() - { - if (ChangeBackgroundEvent != null) - { - this.ChangeBackgroundEvent(this, new EventArgs()); - } - } - - protected virtual void OnVolumeUpEvent() - { - if (VolumeUpEvent != null) - { - this.VolumeUpEvent(this,new EventArgs()); - } - } - - protected virtual void OnSpeedRatioUpEvent() - { - if (SpeedRatioUpEvent != null) - { - this.SpeedRatioUpEvent(this,new EventArgs()); - } - } - protected virtual void OnSpeedRatioDownEvent() - { - if (SpeedRatioDownEvent != null) - { - this.SpeedRatioDownEvent(this, new EventArgs()); - } - } - - protected virtual void OnVolumeDownEvent() - { - if (VolumeDownEvent != null) - { - this.VolumeDownEvent(this,new EventArgs()); - } - } - protected virtual void OnMediaOpenedRequested() - { - if (MediaOpenedRequested != null) - { - this.MediaOpenedRequested(this,new EventArgs()); - } - } - protected virtual void OnStopRequested() - { - if (StopRequested != null) - { - this.StopRequested(this, new EventArgs()); - } - } - protected virtual void OnMoveForwardRequested() - { - if (MoveForwardRequested != null) - { - this.MoveForwardRequested(this, EventArgs.Empty); - } - } - protected virtual void OnMoveBackwardRequested() - { - if (MoveBackwardRequested != null) - { - this.MoveBackwardRequested(this, new EventArgs()); - } - } - - #endregion - - #region Methods - private void OpenFileMethod(object obj) - { - - System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog(); - dialog.Filter = - "Audio Files (*.mp3,*.m4a,*.wav,*.aac)|*.mp3|Video Files(*.mp4,*.wmv,*.3gp,*.mkv)|*.mp4|All Files(*.*)|*.*"; - dialog.FilterIndex = 2; - // MediaPlayerButtonObj = obj as MediaElement; - - System.Windows.Forms.DialogResult dialogResult = dialog.ShowDialog(); - if (dialogResult == System.Windows.Forms.DialogResult.OK) - { - MediaSource = new Uri(dialog.FileName); - try - { - playlistLookupDictionary.Add(dialog.SafeFileName, MediaSource); - PlayListViewCollection.Add(new Uri(dialog.SafeFileName, UriKind.Relative)); - } - catch (Exception e) - { - - } - - - } - - } - - private void VolumeUpMethod(object o) - { - OnVolumeUpEvent(); - } - - private void FullScreenMethod(object o) - { - OnFullScreeEvent(); - } - private void VolumeDownMethod(Object o) - { - OnVolumeDownEvent(); - } - - private void SpeedRatioUpMethod(object o) - { - OnSpeedRatioUpEvent(); - } - private void SpeedRatioDownMethod(object o) - { - OnSpeedRatioDownEvent(); - } - private void MediaOpenedMethod(Object obj) - { - MediaOpened = true; - } - private void SavePlaylist(Object obj) - { - - XmlSerializer _xmlSerializer = new XmlSerializer(typeof(PlayListDirectory)); - SaveFileDialog _playListSaveDialog=new SaveFileDialog(); - _playListSaveDialog.Filter = "xml files(*.xml)|*.xml"; - _playListSaveDialog.Title = "Save PlayList"; - if (_playListSaveDialog.ShowDialog() == DialogResult.OK) - { - string filename = _playListSaveDialog.FileName; - using (TextWriter _textWriter = new StreamWriter(filename)) - { - PlayListDirectory playListDirectory=new PlayListDirectory(); - - - List _mediaList = new List(); - foreach (Uri file in PlayListViewCollection ) - { - PlayListClass temp = new PlayListClass(); - temp.FileName = file.ToString(); - temp.Filepath = playlistLookupDictionary[file.ToString()].ToString(); - _mediaList.Add(temp); - - } - playListDirectory.PlayListCollection = _mediaList; - _xmlSerializer.Serialize(_textWriter, playListDirectory); - } - } - - } - - private void OpenPlayList(Object obj) - { - // playlistLookupDictionary.Clear(); - // playListViewCollection.Clear(); - XmlSerializer _xmlDeSerializer=new XmlSerializer(typeof(PlayListDirectory)); - OpenFileDialog _playListOpenFileDialog=new OpenFileDialog(); - _playListOpenFileDialog.Filter = "xml files(*.xml)|*.xml"; - _playListOpenFileDialog.Title = "Open PlayList"; - if (_playListOpenFileDialog.ShowDialog() == DialogResult.OK) - { - string filename = _playListOpenFileDialog.FileName; - TextReader _textReader=new StreamReader(filename); - Object xmlObject =_xmlDeSerializer.Deserialize(_textReader); - PlayListDirectory xmlDataCollection = (PlayListDirectory) xmlObject; - _textReader.Close(); - foreach (PlayListClass tempList in xmlDataCollection.PlayListCollection) - { - try - { - playlistLookupDictionary.Add(tempList.FileName, new Uri(tempList.Filepath, UriKind.Absolute)); - playListViewCollection.Add(new Uri(tempList.FileName, UriKind.Relative)); - MediaSource = new Uri(tempList.Filepath,UriKind.Absolute); - } - catch(Exception e) - { - - } - } - - - - - - - } - - } - - private void ChangeBackground(Object obj) - { - OpenFileDialog _backgroundOpenFileDialog = new OpenFileDialog(); - _backgroundOpenFileDialog.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png"; - _backgroundOpenFileDialog.Title = "Choose Background"; - - DialogResult dialogResult = _backgroundOpenFileDialog.ShowDialog(); - if (dialogResult == DialogResult.OK) - { - //saves the background in the users settings - Properties.Settings.Default.backgroundImage = _backgroundOpenFileDialog.FileName; - Properties.Settings.Default.Save(); - ImageUri = _backgroundOpenFileDialog.FileName; - OnChangeBackgroundEvent(); - } - } - - private void ShowHidePlayListMethod(Object obj) - { - try - { - System.Windows.Controls.ListBox _list = obj as System.Windows.Controls.ListBox; - if (ListVisibility == System.Windows.Visibility.Visible) - { - ListVisibility = System.Windows.Visibility.Collapsed; - } - else - { - ListVisibility = System.Windows.Visibility.Visible; - } - } - catch (Exception e) - { - - } - } - - - private void StopMediaFileMethod(Object Obj) - { - OnStopRequested(); - playValue = !playValue; - } - - - private void MoveForwardMediaFileMethod(Object Obj) - { - OnMoveForwardRequested(); - } - - private void MoveBackwardMediaFileMethod(Object obj) - { - OnMoveBackwardRequested(); - } - private void PlayListMethod(Object obj) - { - System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog(); - dialog.Multiselect = true; - dialog.Filter = - "Audio Files (*.mp3,*.m4a,*.wav,*.aac)|*.mp3|Video Files(*.mp4,*.wmv,*.3gp,*.mkv)|*.mp4|All Files(*.*)|*.*"; - dialog.FilterIndex = 2; - // MediaPlayerButtonObj = obj as MediaElement; - dialog.Title = "Add Media Files To PlayList"; - System.Windows.Forms.DialogResult dialogResult = dialog.ShowDialog(); - - if (dialogResult == System.Windows.Forms.DialogResult.OK) - { - int count_files = 0; - foreach (string file in dialog.FileNames) - { - try - { - MediaSource = new Uri(file); - playlistLookupDictionary.Add(dialog.SafeFileNames[count_files], MediaSource); - PlayListViewCollection.Add(new Uri(dialog.SafeFileNames[count_files], UriKind.Relative)); - count_files ++; - } - catch(Exception e) - { - - } - - } - } - } - - private void PlayMediaFileMethod(Object obj) - { - - ToggleButton PlayFileButtonObj = obj as ToggleButton; - if (obj == null) - { - if (playValue) - { - OnPlayValueRequested(); - playValue = false; - } - else - { - OnPauseRequested(); - playValue = true; - } - - - } - else - { - if (PlayFileButtonObj.IsEnabled) - { - if (PlayFileButtonObj.IsChecked.Value) - { - OnPlayValueRequested(); - - - } - else - { - OnPauseRequested(); - - } - } - } - } - - public void ItemSelectedInPlayList(object obj) - { - // TextBlock textBlockViewModelObj = obj as TextBlock; - - string sourceText = obj.ToString(); - - // MediaSource = playlistLookupDictionary[textBlockViewModelObj.Text]; - MediaSource = playlistLookupDictionary[sourceText]; - PlayRequested = true; - } - - private void AlbumsCreateMethod() - { - System.Windows.Forms.FolderBrowserDialog folderBrowserControl = new System.Windows.Forms.FolderBrowserDialog(); - System.Windows.Forms.DialogResult result = folderBrowserControl.ShowDialog(); - if (result == DialogResult.OK) - { - - } - } - - - private bool IsValid() - { - // if (obj == null) throw new ArgumentNullException("obj"); - return true; - } - - #endregion - - - - - } -} +using MediaPlayerModels; +using MediaPlayerWindow.Commands; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Windows.Controls.Primitives; +using System.Windows.Forms; +using System.Windows.Input; +using System.Xml.Serialization; +namespace MediaPlayerViewModel +{ + public class MediaPlayerMainWindowViewModel : INotifyPropertyChanged + { + private Uri _mediaSource; + private bool _playRequested = false; + private bool _mediaOpened = false; + private bool playValue = false; + private System.Windows.Visibility listVisibility; + private Dictionary playlistLookupDictionary = new Dictionary(); + // private ObservableCollection folder=new ObservableCollection(); + private ObservableCollection playListViewCollection = new ObservableCollection(); + private ObservableCollection> albumsViewCollection = new ObservableCollection>(); + public string ImageUri { get; set; } + + public MediaPlayerMainWindowViewModel() + { + ImageUri = Properties.Settings.Default.backgroundImage; + } + + public ObservableCollection PlayListViewCollection + { + get { return playListViewCollection; } + set { playListViewCollection = value; } + } + + private string _alert; + public string Alert + { + get { return _alert; } + set + { + _alert = value; + OnPropertyChanged(nameof(Alert)); + OnPropertyChanged(nameof(HasAlert)); + } + } + + public bool HasAlert => !string.IsNullOrWhiteSpace(Alert); + + public System.Windows.Visibility ListVisibility + { + get { return listVisibility; } + set { listVisibility = value; OnPropertyChanged("ListVisibility"); } + } + //public event PlayRequestedValueChanged; + public event EventHandler PlayValueRequested; + public event PropertyChangedEventHandler PropertyChanged; + public event EventHandler PauseRequested; + public event EventHandler StopRequested; + public event EventHandler MoveForwardRequested; + public event EventHandler MoveBackwardRequested; + public event EventHandler MediaOpenedRequested; + public event EventHandler VolumeUpEvent; + public event EventHandler VolumeDownEvent; + public event EventHandler SpeedRatioUpEvent; + public event EventHandler SpeedRatioDownEvent; + public event EventHandler FullScreenEvent; + public event EventHandler ChangeBackgroundEvent; + + public ObservableCollection> AlbumsViewCollection + { + get { return albumsViewCollection; } + set { albumsViewCollection = value; } + } + + public bool PlayRequested + { + get { return _playRequested; } + set + { + _playRequested = value; OnPropertyChanged("PlayRequested"); + } + } + + public bool MediaOpened + { + get { return _mediaOpened; } + set { _mediaOpened = value; OnMediaOpenedRequested(); } + } + + #region label + public Uri MediaSource + { + get { return _mediaSource; } + set + { + _mediaSource = value; + + OnPropertyChanged("MediaSource"); + } + } + + public ICommand OpenFileCommand + { + get { return new DelegateCommand(OpenFileMethod, IsValid, this); } + + } + + public ICommand ShowHidePlayListCommand + { + get { return new DelegateCommand(ShowHidePlayListMethod, IsValid, this); } + } + + public ICommand PlayFileCommand + { + get { return new DelegateCommand(PlayMediaFileMethod, IsValid, this); } + } + + public ICommand SpeedRatioUpEventCommand + { + get { return new DelegateCommand(SpeedRatioUpMethod, IsValid, this); } + } + + public ICommand SpeedRatioDownEventCommand + { + get { return new DelegateCommand(SpeedRatioDownMethod, IsValid, this); } + } + + public ICommand VolumeUpCommand + { + get { return new DelegateCommand(VolumeUpMethod, IsValid, this); } + } + + public ICommand VolumeDownCommand + { + get { return new DelegateCommand(VolumeDownMethod, IsValid, this); } + } + public ICommand PlayListCommand + { + get { return new DelegateCommand(PlayListMethod, IsValid, this); } + } + + public ICommand FullScreenCommand + { + get { return new DelegateCommand(FullScreenMethod, IsValid, this); } + } + + public ICommand OnItemSelectedInPlayListCommand + { + get { return new DelegateCommand(ItemSelectedInPlayList, IsValid, this); } + } + public ICommand StopFileCommand + { + get { return new DelegateCommand(StopMediaFileMethod, IsValid, this); } + } + + public ICommand SavePlayListCommand + { + get { return new DelegateCommand(SavePlaylist, IsValid, this); } + } + + public ICommand MediaOpenedCommand + { + get { return new DelegateCommand(MediaOpenedMethod, IsValid, this); } + } + public ICommand OpenPlayListCommand + { + get { return new DelegateCommand(OpenPlayList, IsValid, this); } + } + public ICommand ChangeBackgroundCommand + { + get { return new DelegateCommand(ChangeBackground, IsValid, this); } + } + public ICommand MoveForwardFileCommand + { + get { return new DelegateCommand(MoveForwardMediaFileMethod, IsValid, this); } + } + public ICommand MoveBackwardFileCommand + { + get { return new DelegateCommand(MoveBackwardMediaFileMethod, IsValid, this); } + } + + + #endregion + #region Events + protected virtual void OnPropertyChanged(string propertyName) + { + // PropertyChangedEventHandler handler = PropertyChanged; + // if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); + if (PropertyChanged != null) + { + this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } + } + + protected virtual void OnPauseRequested() + { + if (PauseRequested != null) + { + this.PauseRequested(this, new EventArgs()); + } + } + protected virtual void OnPlayValueRequested() + { + if (PlayValueRequested != null) + { + this.PlayValueRequested(this, new EventArgs()); + } + } + + protected virtual void OnFullScreeEvent() + { + if (FullScreenEvent != null) + { + this.FullScreenEvent(this, new EventArgs()); + } + } + + protected virtual void OnChangeBackgroundEvent() + { + if (ChangeBackgroundEvent != null) + { + this.ChangeBackgroundEvent(this, new EventArgs()); + } + } + + protected virtual void OnVolumeUpEvent() + { + if (VolumeUpEvent != null) + { + this.VolumeUpEvent(this, new EventArgs()); + } + } + + protected virtual void OnSpeedRatioUpEvent() + { + if (SpeedRatioUpEvent != null) + { + this.SpeedRatioUpEvent(this, new EventArgs()); + } + } + protected virtual void OnSpeedRatioDownEvent() + { + if (SpeedRatioDownEvent != null) + { + this.SpeedRatioDownEvent(this, new EventArgs()); + } + } + + protected virtual void OnVolumeDownEvent() + { + if (VolumeDownEvent != null) + { + this.VolumeDownEvent(this, new EventArgs()); + } + } + protected virtual void OnMediaOpenedRequested() + { + if (MediaOpenedRequested != null) + { + this.MediaOpenedRequested(this, new EventArgs()); + } + } + protected virtual void OnStopRequested() + { + if (StopRequested != null) + { + this.StopRequested(this, new EventArgs()); + } + } + protected virtual void OnMoveForwardRequested() + { + if (MoveForwardRequested != null) + { + this.MoveForwardRequested(this, EventArgs.Empty); + } + } + protected virtual void OnMoveBackwardRequested() + { + if (MoveBackwardRequested != null) + { + this.MoveBackwardRequested(this, new EventArgs()); + } + } + + #endregion + + #region Methods + + private void VolumeUpMethod(object o) + { + OnVolumeUpEvent(); + } + + private void FullScreenMethod(object o) + { + OnFullScreeEvent(); + } + private void VolumeDownMethod(object o) + { + OnVolumeDownEvent(); + } + + private void SpeedRatioUpMethod(object o) + { + OnSpeedRatioUpEvent(); + } + private void SpeedRatioDownMethod(object o) + { + OnSpeedRatioDownEvent(); + } + private void MediaOpenedMethod(object obj) + { + MediaOpened = true; + } + private void SavePlaylist(object obj) + { + + XmlSerializer _xmlSerializer = new XmlSerializer(typeof(PlayListDirectory)); + SaveFileDialog _playListSaveDialog = new SaveFileDialog(); + _playListSaveDialog.Filter = "xml files(*.xml)|*.xml"; + _playListSaveDialog.Title = "Save PlayList"; + if (_playListSaveDialog.ShowDialog() == DialogResult.OK) + { + string filename = _playListSaveDialog.FileName; + using (TextWriter _textWriter = new StreamWriter(filename)) + { + PlayListDirectory playListDirectory = new PlayListDirectory(); + + List _mediaList = new List(); + foreach (Uri file in PlayListViewCollection) + { + PlayListClass temp = new PlayListClass(); + temp.FileName = file.ToString(); + temp.Filepath = playlistLookupDictionary[file.ToString()].ToString(); + _mediaList.Add(temp); + + } + playListDirectory.PlayListCollection = _mediaList; + _xmlSerializer.Serialize(_textWriter, playListDirectory); + } + } + + } + + private void OpenPlayList(object obj) + { + // playlistLookupDictionary.Clear(); + // playListViewCollection.Clear(); + XmlSerializer _xmlDeSerializer = new XmlSerializer(typeof(PlayListDirectory)); + OpenFileDialog _playListOpenFileDialog = new OpenFileDialog(); + _playListOpenFileDialog.Filter = "xml files(*.xml)|*.xml"; + _playListOpenFileDialog.Title = "Open PlayList"; + + if (_playListOpenFileDialog.ShowDialog() == DialogResult.OK) + { + string filename = _playListOpenFileDialog.FileName; + TextReader _textReader = new StreamReader(filename); + object xmlObject = _xmlDeSerializer.Deserialize(_textReader); + PlayListDirectory xmlDataCollection = (PlayListDirectory)xmlObject; + _textReader.Close(); + foreach (PlayListClass tempList in xmlDataCollection.PlayListCollection) + { + playlistLookupDictionary.Add(tempList.FileName, new Uri(tempList.Filepath, UriKind.Absolute)); + playListViewCollection.Add(new Uri(tempList.FileName, UriKind.Relative)); + MediaSource = new Uri(tempList.Filepath, UriKind.Absolute); + + } + } + } + + private void OpenFileMethod(object obj) + { + + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Filter = "Audio Files (*.mp3,*.m4a,*.wav,*.aac)|*.mp3|Video Files(*.mp4,*.wmv,*.3gp,*.mkv)|*.mp4|All Files(*.*)|*.*"; + dialog.FilterIndex = 1; + dialog.Multiselect = true; + // MediaPlayerButtonObj = obj as MediaElement; + + DialogResult dialogResult = dialog.ShowDialog(); + if (dialogResult == DialogResult.OK) + { + foreach (var filesName in dialog.SafeFileNames) + { + if (playlistLookupDictionary.ContainsKey(filesName)) + { + + } + playlistLookupDictionary.Add(filesName, MediaSource); + PlayListViewCollection.Add(new Uri(filesName, UriKind.Relative)); + } + MediaSource = new Uri(dialog.FileName); + } + } + + + private void ChangeBackground(object obj) + { + OpenFileDialog _backgroundOpenFileDialog = new OpenFileDialog(); + _backgroundOpenFileDialog.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png"; + _backgroundOpenFileDialog.Title = "Choose Background"; + + DialogResult dialogResult = _backgroundOpenFileDialog.ShowDialog(); + if (dialogResult == DialogResult.OK) + { + //saves the background in the users settings + Properties.Settings.Default.backgroundImage = _backgroundOpenFileDialog.FileName; + Properties.Settings.Default.Save(); + ImageUri = _backgroundOpenFileDialog.FileName; + OnChangeBackgroundEvent(); + } + } + + private void ShowHidePlayListMethod(object obj) + { + System.Windows.Controls.ListBox _list = obj as System.Windows.Controls.ListBox; + if (ListVisibility == System.Windows.Visibility.Visible) + { + ListVisibility = System.Windows.Visibility.Collapsed; + } + else + { + ListVisibility = System.Windows.Visibility.Visible; + } + } + + private void StopMediaFileMethod(object Obj) + { + OnStopRequested(); + playValue = !playValue; + } + + + private void MoveForwardMediaFileMethod(object Obj) + { + OnMoveForwardRequested(); + } + + private void MoveBackwardMediaFileMethod(object obj) + { + OnMoveBackwardRequested(); + } + private void PlayListMethod(object obj) + { + OpenFileDialog dialog = new OpenFileDialog(); + dialog.Filter = + "Audio Files (*.mp3,*.m4a,*.wav,*.aac)|*.mp3|Video Files(*.mp4,*.wmv,*.3gp,*.mkv)|*.mp4|All Files(*.*)|*.*"; + dialog.FilterIndex = 1; + // MediaPlayerButtonObj = obj as MediaElement; + dialog.Title = "Add Media Files To PlayList"; + DialogResult dialogResult = dialog.ShowDialog(); + + if (dialogResult == DialogResult.OK) + { + int count_files = 0; + foreach (string file in dialog.FileNames) + { + MediaSource = new Uri(file); + playlistLookupDictionary.Add(dialog.SafeFileNames[count_files], MediaSource); + PlayListViewCollection.Add(new Uri(dialog.SafeFileNames[count_files], UriKind.Relative)); + count_files++; + } + } + } + + private void PlayMediaFileMethod(object obj) + { + + ToggleButton PlayFileButtonObj = obj as ToggleButton; + if (obj == null) + { + if (playValue) + { + OnPlayValueRequested(); + playValue = false; + } + else + { + OnPauseRequested(); + playValue = true; + } + } + else + { + if (PlayFileButtonObj.IsEnabled) + { + if (PlayFileButtonObj.IsChecked.Value) + { + OnPlayValueRequested(); + } + else + { + OnPauseRequested(); + } + } + } + } + + public void ItemSelectedInPlayList(object obj) + { + // TextBlock textBlockViewModelObj = obj as TextBlock; + + string sourceText = obj.ToString(); + + // MediaSource = playlistLookupDictionary[textBlockViewModelObj.Text]; + MediaSource = playlistLookupDictionary[sourceText]; + PlayRequested = true; + } + + private void AlbumsCreateMethod() + { + FolderBrowserDialog folderBrowserControl = new FolderBrowserDialog(); + DialogResult result = folderBrowserControl.ShowDialog(); + if (result == DialogResult.OK) + { + + } + } + + + private bool IsValid() + { + // if (obj == null) throw new ArgumentNullException("obj"); + return true; + } + + #endregion + + + + + } +} diff --git a/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerViewModel.csproj b/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerViewModel.csproj index 6541bd7..90707f2 100644 --- a/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerViewModel.csproj +++ b/MediaPlayerWindow/MediaPlayerViewModel/MediaPlayerViewModel.csproj @@ -1,95 +1,85 @@ - - - - - Debug - AnyCPU - {053F1A7F-1686-4D42-BEFD-E54722E1D572} - Library - Properties - MediaPlayerViewModel - MediaPlayerViewModel - v4.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - True - True - Resources.resx - - - True - True - Settings.settings - - - - - {968c2ccc-c711-46be-85a3-9a3369eff1c0} - MediaPlayerModels - - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - - + + + + + Debug + AnyCPU + {053F1A7F-1686-4D42-BEFD-E54722E1D572} + Library + Properties + MediaPlayerViewModel + MediaPlayerViewModel + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + True + True + Settings.settings + + + + + {968c2ccc-c711-46be-85a3-9a3369eff1c0} + MediaPlayerModels + + + + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + \ No newline at end of file diff --git a/MediaPlayerWindow/MediaPlayerViewModel/Properties/Annotations.cs b/MediaPlayerWindow/MediaPlayerViewModel/Properties/Annotations.cs index 937ef3a..d3ce527 100644 --- a/MediaPlayerWindow/MediaPlayerViewModel/Properties/Annotations.cs +++ b/MediaPlayerWindow/MediaPlayerViewModel/Properties/Annotations.cs @@ -1,614 +1,614 @@ -using System; - -#pragma warning disable 1591 -// ReSharper disable UnusedMember.Global -// ReSharper disable UnusedParameter.Local -// ReSharper disable MemberCanBePrivate.Global -// ReSharper disable UnusedAutoPropertyAccessor.Global -// ReSharper disable IntroduceOptionalParameters.Global -// ReSharper disable MemberCanBeProtected.Global -// ReSharper disable InconsistentNaming - -namespace MediaPlayerViewModel.Annotations -{ - /// - /// Indicates that the value of the marked element could be null sometimes, - /// so the check for null is necessary before its usage - /// - /// - /// [CanBeNull] public object Test() { return null; } - /// public void UseTest() { - /// var p = Test(); - /// var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' - /// } - /// - [AttributeUsage( - AttributeTargets.Method | AttributeTargets.Parameter | - AttributeTargets.Property | AttributeTargets.Delegate | - AttributeTargets.Field, AllowMultiple = false, Inherited = true)] - public sealed class CanBeNullAttribute : Attribute { } - - /// - /// Indicates that the value of the marked element could never be null - /// - /// - /// [NotNull] public object Foo() { - /// return null; // Warning: Possible 'null' assignment - /// } - /// - [AttributeUsage( - AttributeTargets.Method | AttributeTargets.Parameter | - AttributeTargets.Property | AttributeTargets.Delegate | - AttributeTargets.Field, AllowMultiple = false, Inherited = true)] - public sealed class NotNullAttribute : Attribute { } - - /// - /// Indicates that the marked method builds string by format pattern and (optional) arguments. - /// Parameter, which contains format string, should be given in constructor. The format string - /// should be in -like form - /// - /// - /// [StringFormatMethod("message")] - /// public void ShowError(string message, params object[] args) { /* do something */ } - /// public void Foo() { - /// ShowError("Failed: {0}"); // Warning: Non-existing argument in format string - /// } - /// - [AttributeUsage( - AttributeTargets.Constructor | AttributeTargets.Method, - AllowMultiple = false, Inherited = true)] - public sealed class StringFormatMethodAttribute : Attribute - { - /// - /// Specifies which parameter of an annotated method should be treated as format-string - /// - public StringFormatMethodAttribute(string formatParameterName) - { - FormatParameterName = formatParameterName; - } - - public string FormatParameterName { get; private set; } - } - - /// - /// Indicates that the function argument should be string literal and match one - /// of the parameters of the caller function. For example, ReSharper annotates - /// the parameter of - /// - /// - /// public void Foo(string param) { - /// if (param == null) - /// throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol - /// } - /// - [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] - public sealed class InvokerParameterNameAttribute : Attribute { } - - /// - /// Indicates that the method is contained in a type that implements - /// interface - /// and this method is used to notify that some property value changed - /// - /// - /// The method should be non-static and conform to one of the supported signatures: - /// - /// NotifyChanged(string) - /// NotifyChanged(params string[]) - /// NotifyChanged{T}(Expression{Func{T}}) - /// NotifyChanged{T,U}(Expression{Func{T,U}}) - /// SetProperty{T}(ref T, T, string) - /// - /// - /// - /// public class Foo : INotifyPropertyChanged { - /// public event PropertyChangedEventHandler PropertyChanged; - /// [NotifyPropertyChangedInvocator] - /// protected virtual void NotifyChanged(string propertyName) { ... } - /// - /// private string _name; - /// public string Name { - /// get { return _name; } - /// set { _name = value; NotifyChanged("LastName"); /* Warning */ } - /// } - /// } - /// - /// Examples of generated notifications: - /// - /// NotifyChanged("Property") - /// NotifyChanged(() => Property) - /// NotifyChanged((VM x) => x.Property) - /// SetProperty(ref myField, value, "Property") - /// - /// - [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] - public sealed class NotifyPropertyChangedInvocatorAttribute : Attribute - { - public NotifyPropertyChangedInvocatorAttribute() { } - public NotifyPropertyChangedInvocatorAttribute(string parameterName) - { - ParameterName = parameterName; - } - - public string ParameterName { get; private set; } - } - - /// - /// Describes dependency between method input and output - /// - /// - ///

Function Definition Table syntax:

- /// - /// FDT ::= FDTRow [;FDTRow]* - /// FDTRow ::= Input => Output | Output <= Input - /// Input ::= ParameterName: Value [, Input]* - /// Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value} - /// Value ::= true | false | null | notnull | canbenull - /// - /// If method has single input parameter, it's name could be omitted.
- /// Using halt (or void/nothing, which is the same) - /// for method output means that the methos doesn't return normally.
- /// canbenull annotation is only applicable for output parameters.
- /// You can use multiple [ContractAnnotation] for each FDT row, - /// or use single attribute with rows separated by semicolon.
- ///
- /// - /// - /// [ContractAnnotation("=> halt")] - /// public void TerminationMethod() - /// - /// - /// [ContractAnnotation("halt <= condition: false")] - /// public void Assert(bool condition, string text) // regular assertion method - /// - /// - /// [ContractAnnotation("s:null => true")] - /// public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty() - /// - /// - /// // A method that returns null if the parameter is null, and not null if the parameter is not null - /// [ContractAnnotation("null => null; notnull => notnull")] - /// public object Transform(object data) - /// - /// - /// [ContractAnnotation("s:null=>false; =>true,result:notnull; =>false, result:null")] - /// public bool TryParse(string s, out Person result) - /// - /// - [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)] - public sealed class ContractAnnotationAttribute : Attribute - { - public ContractAnnotationAttribute([NotNull] string contract) - : this(contract, false) { } - - public ContractAnnotationAttribute([NotNull] string contract, bool forceFullStates) - { - Contract = contract; - ForceFullStates = forceFullStates; - } - - public string Contract { get; private set; } - public bool ForceFullStates { get; private set; } - } - - /// - /// Indicates that marked element should be localized or not - /// - /// - /// [LocalizationRequiredAttribute(true)] - /// public class Foo { - /// private string str = "my string"; // Warning: Localizable string - /// } - /// - [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)] - public sealed class LocalizationRequiredAttribute : Attribute - { - public LocalizationRequiredAttribute() : this(true) { } - public LocalizationRequiredAttribute(bool required) - { - Required = required; - } - - public bool Required { get; private set; } - } - - /// - /// Indicates that the value of the marked type (or its derivatives) - /// cannot be compared using '==' or '!=' operators and Equals() - /// should be used instead. However, using '==' or '!=' for comparison - /// with null is always permitted. - /// - /// - /// [CannotApplyEqualityOperator] - /// class NoEquality { } - /// class UsesNoEquality { - /// public void Test() { - /// var ca1 = new NoEquality(); - /// var ca2 = new NoEquality(); - /// if (ca1 != null) { // OK - /// bool condition = ca1 == ca2; // Warning - /// } - /// } - /// } - /// - [AttributeUsage( - AttributeTargets.Interface | AttributeTargets.Class | - AttributeTargets.Struct, AllowMultiple = false, Inherited = true)] - public sealed class CannotApplyEqualityOperatorAttribute : Attribute { } - - /// - /// When applied to a target attribute, specifies a requirement for any type marked - /// with the target attribute to implement or inherit specific type or types. - /// - /// - /// [BaseTypeRequired(typeof(IComponent)] // Specify requirement - /// public class ComponentAttribute : Attribute { } - /// [Component] // ComponentAttribute requires implementing IComponent interface - /// public class MyComponent : IComponent { } - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] - [BaseTypeRequired(typeof(Attribute))] - public sealed class BaseTypeRequiredAttribute : Attribute - { - public BaseTypeRequiredAttribute([NotNull] Type baseType) - { - BaseType = baseType; - } - - [NotNull] public Type BaseType { get; private set; } - } - - /// - /// Indicates that the marked symbol is used implicitly - /// (e.g. via reflection, in external library), so this symbol - /// will not be marked as unused (as well as by other usage inspections) - /// - [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)] - public sealed class UsedImplicitlyAttribute : Attribute - { - public UsedImplicitlyAttribute() - : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } - - public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags) - : this(useKindFlags, ImplicitUseTargetFlags.Default) { } - - public UsedImplicitlyAttribute(ImplicitUseTargetFlags targetFlags) - : this(ImplicitUseKindFlags.Default, targetFlags) { } - - public UsedImplicitlyAttribute( - ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) - { - UseKindFlags = useKindFlags; - TargetFlags = targetFlags; - } - - public ImplicitUseKindFlags UseKindFlags { get; private set; } - public ImplicitUseTargetFlags TargetFlags { get; private set; } - } - - /// - /// Should be used on attributes and causes ReSharper - /// to not mark symbols marked with such attributes as unused - /// (as well as by other usage inspections) - /// - [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] - public sealed class MeansImplicitUseAttribute : Attribute - { - public MeansImplicitUseAttribute() - : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } - - public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags) - : this(useKindFlags, ImplicitUseTargetFlags.Default) { } - - public MeansImplicitUseAttribute(ImplicitUseTargetFlags targetFlags) - : this(ImplicitUseKindFlags.Default, targetFlags) { } - - public MeansImplicitUseAttribute( - ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) - { - UseKindFlags = useKindFlags; - TargetFlags = targetFlags; - } - - [UsedImplicitly] public ImplicitUseKindFlags UseKindFlags { get; private set; } - [UsedImplicitly] public ImplicitUseTargetFlags TargetFlags { get; private set; } - } - - [Flags] - public enum ImplicitUseKindFlags - { - Default = Access | Assign | InstantiatedWithFixedConstructorSignature, - /// Only entity marked with attribute considered used - Access = 1, - /// Indicates implicit assignment to a member - Assign = 2, - /// - /// Indicates implicit instantiation of a type with fixed constructor signature. - /// That means any unused constructor parameters won't be reported as such. - /// - InstantiatedWithFixedConstructorSignature = 4, - /// Indicates implicit instantiation of a type - InstantiatedNoFixedConstructorSignature = 8, - } - - /// - /// Specify what is considered used implicitly - /// when marked with - /// or - /// - [Flags] - public enum ImplicitUseTargetFlags - { - Default = Itself, - Itself = 1, - /// Members of entity marked with attribute are considered used - Members = 2, - /// Entity marked with attribute and all its members considered used - WithMembers = Itself | Members - } - - /// - /// This attribute is intended to mark publicly available API - /// which should not be removed and so is treated as used - /// - [MeansImplicitUse] - public sealed class PublicAPIAttribute : Attribute - { - public PublicAPIAttribute() { } - public PublicAPIAttribute([NotNull] string comment) - { - Comment = comment; - } - - [NotNull] public string Comment { get; private set; } - } - - /// - /// Tells code analysis engine if the parameter is completely handled - /// when the invoked method is on stack. If the parameter is a delegate, - /// indicates that delegate is executed while the method is executed. - /// If the parameter is an enumerable, indicates that it is enumerated - /// while the method is executed - /// - [AttributeUsage(AttributeTargets.Parameter, Inherited = true)] - public sealed class InstantHandleAttribute : Attribute { } - - /// - /// Indicates that a method does not make any observable state changes. - /// The same as System.Diagnostics.Contracts.PureAttribute - /// - /// - /// [Pure] private int Multiply(int x, int y) { return x * y; } - /// public void Foo() { - /// const int a = 2, b = 2; - /// Multiply(a, b); // Waring: Return value of pure method is not used - /// } - /// - [AttributeUsage(AttributeTargets.Method, Inherited = true)] - public sealed class PureAttribute : Attribute { } - - /// - /// Indicates that a parameter is a path to a file or a folder - /// within a web project. Path can be relative or absolute, - /// starting from web root (~) - /// - [AttributeUsage(AttributeTargets.Parameter)] - public class PathReferenceAttribute : Attribute - { - public PathReferenceAttribute() { } - public PathReferenceAttribute([PathReference] string basePath) - { - BasePath = basePath; - } - - [NotNull] public string BasePath { get; private set; } - } - - // ASP.NET MVC attributes - - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] - public sealed class AspMvcAreaMasterLocationFormatAttribute : Attribute - { - public AspMvcAreaMasterLocationFormatAttribute(string format) { } - } - - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] - public sealed class AspMvcAreaPartialViewLocationFormatAttribute : Attribute - { - public AspMvcAreaPartialViewLocationFormatAttribute(string format) { } - } - - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] - public sealed class AspMvcAreaViewLocationFormatAttribute : Attribute - { - public AspMvcAreaViewLocationFormatAttribute(string format) { } - } - - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] - public sealed class AspMvcMasterLocationFormatAttribute : Attribute - { - public AspMvcMasterLocationFormatAttribute(string format) { } - } - - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] - public sealed class AspMvcPartialViewLocationFormatAttribute : Attribute - { - public AspMvcPartialViewLocationFormatAttribute(string format) { } - } - - [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] - public sealed class AspMvcViewLocationFormatAttribute : Attribute - { - public AspMvcViewLocationFormatAttribute(string format) { } - } - - /// - /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter - /// is an MVC action. If applied to a method, the MVC action name is calculated - /// implicitly from the context. Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String) - /// - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] - public sealed class AspMvcActionAttribute : Attribute - { - public AspMvcActionAttribute() { } - public AspMvcActionAttribute([NotNull] string anonymousProperty) - { - AnonymousProperty = anonymousProperty; - } - - [NotNull] public string AnonymousProperty { get; private set; } - } - - /// - /// ASP.NET MVC attribute. Indicates that a parameter is an MVC area. - /// Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String) - /// - [AttributeUsage(AttributeTargets.Parameter)] - public sealed class AspMvcAreaAttribute : PathReferenceAttribute - { - public AspMvcAreaAttribute() { } - public AspMvcAreaAttribute([NotNull] string anonymousProperty) - { - AnonymousProperty = anonymousProperty; - } - - [NotNull] public string AnonymousProperty { get; private set; } - } - - /// - /// ASP.NET MVC attribute. If applied to a parameter, indicates that - /// the parameter is an MVC controller. If applied to a method, - /// the MVC controller name is calculated implicitly from the context. - /// Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String) - /// - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] - public sealed class AspMvcControllerAttribute : Attribute - { - public AspMvcControllerAttribute() { } - public AspMvcControllerAttribute([NotNull] string anonymousProperty) - { - AnonymousProperty = anonymousProperty; - } - - [NotNull] public string AnonymousProperty { get; private set; } - } - - /// - /// ASP.NET MVC attribute. Indicates that a parameter is an MVC Master. - /// Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Controller.View(String, String) - /// - [AttributeUsage(AttributeTargets.Parameter)] - public sealed class AspMvcMasterAttribute : Attribute { } - - /// - /// ASP.NET MVC attribute. Indicates that a parameter is an MVC model type. - /// Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Controller.View(String, Object) - /// - [AttributeUsage(AttributeTargets.Parameter)] - public sealed class AspMvcModelTypeAttribute : Attribute { } - - /// - /// ASP.NET MVC attribute. If applied to a parameter, indicates that - /// the parameter is an MVC partial view. If applied to a method, - /// the MVC partial view name is calculated implicitly from the context. - /// Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String) - /// - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] - public sealed class AspMvcPartialViewAttribute : PathReferenceAttribute { } - - /// - /// ASP.NET MVC attribute. Allows disabling all inspections - /// for MVC views within a class or a method. - /// - [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] - public sealed class AspMvcSupressViewErrorAttribute : Attribute { } - - /// - /// ASP.NET MVC attribute. Indicates that a parameter is an MVC display template. - /// Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String) - /// - [AttributeUsage(AttributeTargets.Parameter)] - public sealed class AspMvcDisplayTemplateAttribute : Attribute { } - - /// - /// ASP.NET MVC attribute. Indicates that a parameter is an MVC editor template. - /// Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String) - /// - [AttributeUsage(AttributeTargets.Parameter)] - public sealed class AspMvcEditorTemplateAttribute : Attribute { } - - /// - /// ASP.NET MVC attribute. Indicates that a parameter is an MVC template. - /// Use this attribute for custom wrappers similar to - /// System.ComponentModel.DataAnnotations.UIHintAttribute(System.String) - /// - [AttributeUsage(AttributeTargets.Parameter)] - public sealed class AspMvcTemplateAttribute : Attribute { } - - /// - /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter - /// is an MVC view. If applied to a method, the MVC view name is calculated implicitly - /// from the context. Use this attribute for custom wrappers similar to - /// System.Web.Mvc.Controller.View(Object) - /// - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] - public sealed class AspMvcViewAttribute : PathReferenceAttribute { } - - /// - /// ASP.NET MVC attribute. When applied to a parameter of an attribute, - /// indicates that this parameter is an MVC action name - /// - /// - /// [ActionName("Foo")] - /// public ActionResult Login(string returnUrl) { - /// ViewBag.ReturnUrl = Url.Action("Foo"); // OK - /// return RedirectToAction("Bar"); // Error: Cannot resolve action - /// } - /// - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property)] - public sealed class AspMvcActionSelectorAttribute : Attribute { } - - [AttributeUsage( - AttributeTargets.Parameter | AttributeTargets.Property | - AttributeTargets.Field, Inherited = true)] - public sealed class HtmlElementAttributesAttribute : Attribute - { - public HtmlElementAttributesAttribute() { } - public HtmlElementAttributesAttribute([NotNull] string name) - { - Name = name; - } - - [NotNull] public string Name { get; private set; } - } - - [AttributeUsage( - AttributeTargets.Parameter | AttributeTargets.Field | - AttributeTargets.Property, Inherited = true)] - public sealed class HtmlAttributeValueAttribute : Attribute - { - public HtmlAttributeValueAttribute([NotNull] string name) - { - Name = name; - } - - [NotNull] public string Name { get; private set; } - } - - // Razor attributes - - /// - /// Razor attribute. Indicates that a parameter or a method is a Razor section. - /// Use this attribute for custom wrappers similar to - /// System.Web.WebPages.WebPageBase.RenderSection(String) - /// - [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method, Inherited = true)] - public sealed class RazorSectionAttribute : Attribute { } +using System; + +#pragma warning disable 1591 +// ReSharper disable UnusedMember.Global +// ReSharper disable UnusedParameter.Local +// ReSharper disable MemberCanBePrivate.Global +// ReSharper disable UnusedAutoPropertyAccessor.Global +// ReSharper disable IntroduceOptionalParameters.Global +// ReSharper disable MemberCanBeProtected.Global +// ReSharper disable InconsistentNaming + +namespace MediaPlayerViewModel.Annotations +{ + /// + /// Indicates that the value of the marked element could be null sometimes, + /// so the check for null is necessary before its usage + /// + /// + /// [CanBeNull] public object Test() { return null; } + /// public void UseTest() { + /// var p = Test(); + /// var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' + /// } + /// + [AttributeUsage( + AttributeTargets.Method | AttributeTargets.Parameter | + AttributeTargets.Property | AttributeTargets.Delegate | + AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public sealed class CanBeNullAttribute : Attribute { } + + /// + /// Indicates that the value of the marked element could never be null + /// + /// + /// [NotNull] public object Foo() { + /// return null; // Warning: Possible 'null' assignment + /// } + /// + [AttributeUsage( + AttributeTargets.Method | AttributeTargets.Parameter | + AttributeTargets.Property | AttributeTargets.Delegate | + AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public sealed class NotNullAttribute : Attribute { } + + /// + /// Indicates that the marked method builds string by format pattern and (optional) arguments. + /// Parameter, which contains format string, should be given in constructor. The format string + /// should be in -like form + /// + /// + /// [StringFormatMethod("message")] + /// public void ShowError(string message, params object[] args) { /* do something */ } + /// public void Foo() { + /// ShowError("Failed: {0}"); // Warning: Non-existing argument in format string + /// } + /// + [AttributeUsage( + AttributeTargets.Constructor | AttributeTargets.Method, + AllowMultiple = false, Inherited = true)] + public sealed class StringFormatMethodAttribute : Attribute + { + /// + /// Specifies which parameter of an annotated method should be treated as format-string + /// + public StringFormatMethodAttribute(string formatParameterName) + { + FormatParameterName = formatParameterName; + } + + public string FormatParameterName { get; private set; } + } + + /// + /// Indicates that the function argument should be string literal and match one + /// of the parameters of the caller function. For example, ReSharper annotates + /// the parameter of + /// + /// + /// public void Foo(string param) { + /// if (param == null) + /// throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol + /// } + /// + [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)] + public sealed class InvokerParameterNameAttribute : Attribute { } + + /// + /// Indicates that the method is contained in a type that implements + /// interface + /// and this method is used to notify that some property value changed + /// + /// + /// The method should be non-static and conform to one of the supported signatures: + /// + /// NotifyChanged(string) + /// NotifyChanged(params string[]) + /// NotifyChanged{T}(Expression{Func{T}}) + /// NotifyChanged{T,U}(Expression{Func{T,U}}) + /// SetProperty{T}(ref T, T, string) + /// + /// + /// + /// public class Foo : INotifyPropertyChanged { + /// public event PropertyChangedEventHandler PropertyChanged; + /// [NotifyPropertyChangedInvocator] + /// protected virtual void NotifyChanged(string propertyName) { ... } + /// + /// private string _name; + /// public string Name { + /// get { return _name; } + /// set { _name = value; NotifyChanged("LastName"); /* Warning */ } + /// } + /// } + /// + /// Examples of generated notifications: + /// + /// NotifyChanged("Property") + /// NotifyChanged(() => Property) + /// NotifyChanged((VM x) => x.Property) + /// SetProperty(ref myField, value, "Property") + /// + /// + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public sealed class NotifyPropertyChangedInvocatorAttribute : Attribute + { + public NotifyPropertyChangedInvocatorAttribute() { } + public NotifyPropertyChangedInvocatorAttribute(string parameterName) + { + ParameterName = parameterName; + } + + public string ParameterName { get; private set; } + } + + /// + /// Describes dependency between method input and output + /// + /// + ///

Function Definition Table syntax:

+ /// + /// FDT ::= FDTRow [;FDTRow]* + /// FDTRow ::= Input => Output | Output <= Input + /// Input ::= ParameterName: Value [, Input]* + /// Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value} + /// Value ::= true | false | null | notnull | canbenull + /// + /// If method has single input parameter, it's name could be omitted.
+ /// Using halt (or void/nothing, which is the same) + /// for method output means that the methos doesn't return normally.
+ /// canbenull annotation is only applicable for output parameters.
+ /// You can use multiple [ContractAnnotation] for each FDT row, + /// or use single attribute with rows separated by semicolon.
+ ///
+ /// + /// + /// [ContractAnnotation("=> halt")] + /// public void TerminationMethod() + /// + /// + /// [ContractAnnotation("halt <= condition: false")] + /// public void Assert(bool condition, string text) // regular assertion method + /// + /// + /// [ContractAnnotation("s:null => true")] + /// public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty() + /// + /// + /// // A method that returns null if the parameter is null, and not null if the parameter is not null + /// [ContractAnnotation("null => null; notnull => notnull")] + /// public object Transform(object data) + /// + /// + /// [ContractAnnotation("s:null=>false; =>true,result:notnull; =>false, result:null")] + /// public bool TryParse(string s, out Person result) + /// + /// + [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, Inherited = true)] + public sealed class ContractAnnotationAttribute : Attribute + { + public ContractAnnotationAttribute([NotNull] string contract) + : this(contract, false) { } + + public ContractAnnotationAttribute([NotNull] string contract, bool forceFullStates) + { + Contract = contract; + ForceFullStates = forceFullStates; + } + + public string Contract { get; private set; } + public bool ForceFullStates { get; private set; } + } + + /// + /// Indicates that marked element should be localized or not + /// + /// + /// [LocalizationRequiredAttribute(true)] + /// public class Foo { + /// private string str = "my string"; // Warning: Localizable string + /// } + /// + [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)] + public sealed class LocalizationRequiredAttribute : Attribute + { + public LocalizationRequiredAttribute() : this(true) { } + public LocalizationRequiredAttribute(bool required) + { + Required = required; + } + + public bool Required { get; private set; } + } + + /// + /// Indicates that the value of the marked type (or its derivatives) + /// cannot be compared using '==' or '!=' operators and Equals() + /// should be used instead. However, using '==' or '!=' for comparison + /// with null is always permitted. + /// + /// + /// [CannotApplyEqualityOperator] + /// class NoEquality { } + /// class UsesNoEquality { + /// public void Test() { + /// var ca1 = new NoEquality(); + /// var ca2 = new NoEquality(); + /// if (ca1 != null) { // OK + /// bool condition = ca1 == ca2; // Warning + /// } + /// } + /// } + /// + [AttributeUsage( + AttributeTargets.Interface | AttributeTargets.Class | + AttributeTargets.Struct, AllowMultiple = false, Inherited = true)] + public sealed class CannotApplyEqualityOperatorAttribute : Attribute { } + + /// + /// When applied to a target attribute, specifies a requirement for any type marked + /// with the target attribute to implement or inherit specific type or types. + /// + /// + /// [BaseTypeRequired(typeof(IComponent)] // Specify requirement + /// public class ComponentAttribute : Attribute { } + /// [Component] // ComponentAttribute requires implementing IComponent interface + /// public class MyComponent : IComponent { } + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] + [BaseTypeRequired(typeof(Attribute))] + public sealed class BaseTypeRequiredAttribute : Attribute + { + public BaseTypeRequiredAttribute([NotNull] Type baseType) + { + BaseType = baseType; + } + + [NotNull] public Type BaseType { get; private set; } + } + + /// + /// Indicates that the marked symbol is used implicitly + /// (e.g. via reflection, in external library), so this symbol + /// will not be marked as unused (as well as by other usage inspections) + /// + [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)] + public sealed class UsedImplicitlyAttribute : Attribute + { + public UsedImplicitlyAttribute() + : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } + + public UsedImplicitlyAttribute(ImplicitUseKindFlags useKindFlags) + : this(useKindFlags, ImplicitUseTargetFlags.Default) { } + + public UsedImplicitlyAttribute(ImplicitUseTargetFlags targetFlags) + : this(ImplicitUseKindFlags.Default, targetFlags) { } + + public UsedImplicitlyAttribute( + ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) + { + UseKindFlags = useKindFlags; + TargetFlags = targetFlags; + } + + public ImplicitUseKindFlags UseKindFlags { get; private set; } + public ImplicitUseTargetFlags TargetFlags { get; private set; } + } + + /// + /// Should be used on attributes and causes ReSharper + /// to not mark symbols marked with such attributes as unused + /// (as well as by other usage inspections) + /// + [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] + public sealed class MeansImplicitUseAttribute : Attribute + { + public MeansImplicitUseAttribute() + : this(ImplicitUseKindFlags.Default, ImplicitUseTargetFlags.Default) { } + + public MeansImplicitUseAttribute(ImplicitUseKindFlags useKindFlags) + : this(useKindFlags, ImplicitUseTargetFlags.Default) { } + + public MeansImplicitUseAttribute(ImplicitUseTargetFlags targetFlags) + : this(ImplicitUseKindFlags.Default, targetFlags) { } + + public MeansImplicitUseAttribute( + ImplicitUseKindFlags useKindFlags, ImplicitUseTargetFlags targetFlags) + { + UseKindFlags = useKindFlags; + TargetFlags = targetFlags; + } + + [UsedImplicitly] public ImplicitUseKindFlags UseKindFlags { get; private set; } + [UsedImplicitly] public ImplicitUseTargetFlags TargetFlags { get; private set; } + } + + [Flags] + public enum ImplicitUseKindFlags + { + Default = Access | Assign | InstantiatedWithFixedConstructorSignature, + /// Only entity marked with attribute considered used + Access = 1, + /// Indicates implicit assignment to a member + Assign = 2, + /// + /// Indicates implicit instantiation of a type with fixed constructor signature. + /// That means any unused constructor parameters won't be reported as such. + /// + InstantiatedWithFixedConstructorSignature = 4, + /// Indicates implicit instantiation of a type + InstantiatedNoFixedConstructorSignature = 8, + } + + /// + /// Specify what is considered used implicitly + /// when marked with + /// or + /// + [Flags] + public enum ImplicitUseTargetFlags + { + Default = Itself, + Itself = 1, + /// Members of entity marked with attribute are considered used + Members = 2, + /// Entity marked with attribute and all its members considered used + WithMembers = Itself | Members + } + + /// + /// This attribute is intended to mark publicly available API + /// which should not be removed and so is treated as used + /// + [MeansImplicitUse] + public sealed class PublicAPIAttribute : Attribute + { + public PublicAPIAttribute() { } + public PublicAPIAttribute([NotNull] string comment) + { + Comment = comment; + } + + [NotNull] public string Comment { get; private set; } + } + + /// + /// Tells code analysis engine if the parameter is completely handled + /// when the invoked method is on stack. If the parameter is a delegate, + /// indicates that delegate is executed while the method is executed. + /// If the parameter is an enumerable, indicates that it is enumerated + /// while the method is executed + /// + [AttributeUsage(AttributeTargets.Parameter, Inherited = true)] + public sealed class InstantHandleAttribute : Attribute { } + + /// + /// Indicates that a method does not make any observable state changes. + /// The same as System.Diagnostics.Contracts.PureAttribute + /// + /// + /// [Pure] private int Multiply(int x, int y) { return x * y; } + /// public void Foo() { + /// const int a = 2, b = 2; + /// Multiply(a, b); // Waring: Return value of pure method is not used + /// } + /// + [AttributeUsage(AttributeTargets.Method, Inherited = true)] + public sealed class PureAttribute : Attribute { } + + /// + /// Indicates that a parameter is a path to a file or a folder + /// within a web project. Path can be relative or absolute, + /// starting from web root (~) + /// + [AttributeUsage(AttributeTargets.Parameter)] + public class PathReferenceAttribute : Attribute + { + public PathReferenceAttribute() { } + public PathReferenceAttribute([PathReference] string basePath) + { + BasePath = basePath; + } + + [NotNull] public string BasePath { get; private set; } + } + + // ASP.NET MVC attributes + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class AspMvcAreaMasterLocationFormatAttribute : Attribute + { + public AspMvcAreaMasterLocationFormatAttribute(string format) { } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class AspMvcAreaPartialViewLocationFormatAttribute : Attribute + { + public AspMvcAreaPartialViewLocationFormatAttribute(string format) { } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class AspMvcAreaViewLocationFormatAttribute : Attribute + { + public AspMvcAreaViewLocationFormatAttribute(string format) { } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class AspMvcMasterLocationFormatAttribute : Attribute + { + public AspMvcMasterLocationFormatAttribute(string format) { } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class AspMvcPartialViewLocationFormatAttribute : Attribute + { + public AspMvcPartialViewLocationFormatAttribute(string format) { } + } + + [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] + public sealed class AspMvcViewLocationFormatAttribute : Attribute + { + public AspMvcViewLocationFormatAttribute(string format) { } + } + + /// + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + /// is an MVC action. If applied to a method, the MVC action name is calculated + /// implicitly from the context. Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String) + /// + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] + public sealed class AspMvcActionAttribute : Attribute + { + public AspMvcActionAttribute() { } + public AspMvcActionAttribute([NotNull] string anonymousProperty) + { + AnonymousProperty = anonymousProperty; + } + + [NotNull] public string AnonymousProperty { get; private set; } + } + + /// + /// ASP.NET MVC attribute. Indicates that a parameter is an MVC area. + /// Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String) + /// + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AspMvcAreaAttribute : PathReferenceAttribute + { + public AspMvcAreaAttribute() { } + public AspMvcAreaAttribute([NotNull] string anonymousProperty) + { + AnonymousProperty = anonymousProperty; + } + + [NotNull] public string AnonymousProperty { get; private set; } + } + + /// + /// ASP.NET MVC attribute. If applied to a parameter, indicates that + /// the parameter is an MVC controller. If applied to a method, + /// the MVC controller name is calculated implicitly from the context. + /// Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String) + /// + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] + public sealed class AspMvcControllerAttribute : Attribute + { + public AspMvcControllerAttribute() { } + public AspMvcControllerAttribute([NotNull] string anonymousProperty) + { + AnonymousProperty = anonymousProperty; + } + + [NotNull] public string AnonymousProperty { get; private set; } + } + + /// + /// ASP.NET MVC attribute. Indicates that a parameter is an MVC Master. + /// Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Controller.View(String, String) + /// + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AspMvcMasterAttribute : Attribute { } + + /// + /// ASP.NET MVC attribute. Indicates that a parameter is an MVC model type. + /// Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Controller.View(String, Object) + /// + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AspMvcModelTypeAttribute : Attribute { } + + /// + /// ASP.NET MVC attribute. If applied to a parameter, indicates that + /// the parameter is an MVC partial view. If applied to a method, + /// the MVC partial view name is calculated implicitly from the context. + /// Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String) + /// + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] + public sealed class AspMvcPartialViewAttribute : PathReferenceAttribute { } + + /// + /// ASP.NET MVC attribute. Allows disabling all inspections + /// for MVC views within a class or a method. + /// + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] + public sealed class AspMvcSupressViewErrorAttribute : Attribute { } + + /// + /// ASP.NET MVC attribute. Indicates that a parameter is an MVC display template. + /// Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String) + /// + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AspMvcDisplayTemplateAttribute : Attribute { } + + /// + /// ASP.NET MVC attribute. Indicates that a parameter is an MVC editor template. + /// Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String) + /// + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AspMvcEditorTemplateAttribute : Attribute { } + + /// + /// ASP.NET MVC attribute. Indicates that a parameter is an MVC template. + /// Use this attribute for custom wrappers similar to + /// System.ComponentModel.DataAnnotations.UIHintAttribute(System.String) + /// + [AttributeUsage(AttributeTargets.Parameter)] + public sealed class AspMvcTemplateAttribute : Attribute { } + + /// + /// ASP.NET MVC attribute. If applied to a parameter, indicates that the parameter + /// is an MVC view. If applied to a method, the MVC view name is calculated implicitly + /// from the context. Use this attribute for custom wrappers similar to + /// System.Web.Mvc.Controller.View(Object) + /// + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method)] + public sealed class AspMvcViewAttribute : PathReferenceAttribute { } + + /// + /// ASP.NET MVC attribute. When applied to a parameter of an attribute, + /// indicates that this parameter is an MVC action name + /// + /// + /// [ActionName("Foo")] + /// public ActionResult Login(string returnUrl) { + /// ViewBag.ReturnUrl = Url.Action("Foo"); // OK + /// return RedirectToAction("Bar"); // Error: Cannot resolve action + /// } + /// + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property)] + public sealed class AspMvcActionSelectorAttribute : Attribute { } + + [AttributeUsage( + AttributeTargets.Parameter | AttributeTargets.Property | + AttributeTargets.Field, Inherited = true)] + public sealed class HtmlElementAttributesAttribute : Attribute + { + public HtmlElementAttributesAttribute() { } + public HtmlElementAttributesAttribute([NotNull] string name) + { + Name = name; + } + + [NotNull] public string Name { get; private set; } + } + + [AttributeUsage( + AttributeTargets.Parameter | AttributeTargets.Field | + AttributeTargets.Property, Inherited = true)] + public sealed class HtmlAttributeValueAttribute : Attribute + { + public HtmlAttributeValueAttribute([NotNull] string name) + { + Name = name; + } + + [NotNull] public string Name { get; private set; } + } + + // Razor attributes + + /// + /// Razor attribute. Indicates that a parameter or a method is a Razor section. + /// Use this attribute for custom wrappers similar to + /// System.Web.WebPages.WebPageBase.RenderSection(String) + /// + [AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Method, Inherited = true)] + public sealed class RazorSectionAttribute : Attribute { } } \ No newline at end of file diff --git a/MediaPlayerWindow/MediaPlayerViewModel/Properties/AssemblyInfo.cs b/MediaPlayerWindow/MediaPlayerViewModel/Properties/AssemblyInfo.cs index f5076d9..fc6ccd3 100644 --- a/MediaPlayerWindow/MediaPlayerViewModel/Properties/AssemblyInfo.cs +++ b/MediaPlayerWindow/MediaPlayerViewModel/Properties/AssemblyInfo.cs @@ -1,36 +1,36 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MediaPlayerViewModel")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MediaPlayerViewModel")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d360f86b-ccb3-4f02-8e8e-1087e39ad14c")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MediaPlayerViewModel")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MediaPlayerViewModel")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("d360f86b-ccb3-4f02-8e8e-1087e39ad14c")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.Designer.cs b/MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.Designer.cs new file mode 100644 index 0000000..407ccd9 --- /dev/null +++ b/MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.Designer.cs @@ -0,0 +1,38 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MediaPlayerViewModel.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("${Solution}\\Resources\\backgroundImage.png")] + public string backgroundImage { + get { + return ((string)(this["backgroundImage"])); + } + set { + this["backgroundImage"] = value; + } + } + } +} diff --git a/MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.settings b/MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.settings new file mode 100644 index 0000000..cf52931 --- /dev/null +++ b/MediaPlayerWindow/MediaPlayerViewModel/Properties/Settings.settings @@ -0,0 +1,9 @@ + + + + + + ${Solution}\Resources\backgroundImage.png + + + \ No newline at end of file diff --git a/MediaPlayerWindow/MediaPlayerViewModel/app.config b/MediaPlayerWindow/MediaPlayerViewModel/app.config new file mode 100644 index 0000000..e5bb2d9 --- /dev/null +++ b/MediaPlayerWindow/MediaPlayerViewModel/app.config @@ -0,0 +1,15 @@ + + + + +
+ + + + + + ${Solution}\Resources\backgroundImage.png + + + + \ No newline at end of file diff --git a/MediaPlayerWindow/MediaPlayerViewModel/bin/Debug/MediaPlayerModels.pdb b/MediaPlayerWindow/MediaPlayerViewModel/bin/Debug/MediaPlayerModels.pdb deleted file mode 100644 index 5f5978efa24ba15d33ca2722ebed08cf7d3682ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 zcmeHNU1%It6uz6pWH;$gHvKWSQkIfR)3md@NoZ`XO>5HHV1jM8O;cGgo83t}c7Ni| zu1)&1^`QtNRH$gFQi`At3O*D_6Bg1fazF6RVLNs`2$cV|9U^;y{SApKaijUY?J*jO28X#o!x=CuT-TmPl* z`p@e%cTVnR-@ex2iYxxp5pn79*Gn#Zvg@(4zg+#wf4Wt^SG{)X34i|;|HTbL-1K%_ z?0qA>PeswGGb?z6*oeD;jbIRa zfXjiUz;Ymcdj+r(=mXvZtO6?kPruJS!1etQLJ`60A48r3#`D|uhZ|1({H2F$c_#q1 z;1!V|B@%K#>Ji%>)Jy8AE999#@^qjJ#UX*w>!a7XHdi^E_}1t_Q_q^wrf{gSxutn? zOSC-`&!_Zs&Wv^&WkY{7!%poQeJC^pw_Vq@QM=Yek*^U}VT- z-u`?#XQXs3qGyd*(l`;z8JRT7)Huo<&(T$Pog)X#PTD5UDLeC34f#hQt(EqF@1(c~gOVI?s6O{6`y6XFuwK3v)vP zx2I!UC+Qgd;5K`D^n=RgsSCmOiOA z;2*6vNa-_4WgBcEH13b3PEYTTarabE{Q2ciQwNn}Xb3u>IEEYLsIxW|%tN9b&TgoXRiOxzLVj zM|D8zlJXBox=_RtctEVP&OOvRkGRDF54@G4-cc^Jna870ix8@Q6o%#zw>Zc+>dSI= zeH=7u?EWuX_2r>N^(FJ{vRjH+h;w*o)&DYfwKq76NIh}a-zk&1oL-E<=P$f`i0k_2 z`TalCo_nYL{0sTshPrLl=aCmgFm|jX-JcP`bS$NtB4}pg!J~+=^=w}<6F(+1`i-P+ z2509ohw&-5dH#zUVJ(o;qQ6pMiMrNg$U@lpVq>wN4CFxn>nCmexG!wo`{11Ze3e)+ zyh!+V51?blcpHHQpn{c1+-JR9yQK2u*Fop^LB%2UiDvr{a~W@x`YYWrGAwZ19Ljq_ zO0P0hQSTN>M0Vbh1&h*~)ncgU9HlRV}-V{OGJkFkO?CRV%>MEZ-ZhCSoo zIoE^fwZ~35u`DTL9yya)xiS^%&ek3-hb4i7li+m(?TR}sJ)?y^w0|0kYyZ=VXkKUX z`yB0D-T(XqrNXhy0(JjGI|v}SkHQw{58ei{4xKFRiOv70;2*zR%j^IE diff --git a/MediaPlayerWindow/MediaPlayerViewModel/bin/Debug/MediaPlayerViewModel.pdb b/MediaPlayerWindow/MediaPlayerViewModel/bin/Debug/MediaPlayerViewModel.pdb deleted file mode 100644 index 0d0021391b71fede680a0890409bfbe4e2181dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60928 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 z 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 N4p`uT1>SxO{C~+z&rbjV diff --git a/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache deleted file mode 100644 index e79c8a82d1ae945c4a75e5860f7e788ec946eb67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7411 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 CIV8LQ diff --git a/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/MediaPlayerViewModel.pdb b/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/MediaPlayerViewModel.pdb deleted file mode 100644 index 0d0021391b71fede680a0890409bfbe4e2181dce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60928 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 z 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 N4p`uT1>SxO{C~+z&rbjV diff --git a/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs deleted file mode 100644 index e69de29..0000000 diff --git a/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs deleted file mode 100644 index e69de29..0000000 diff --git a/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/MediaPlayerWindow/MediaPlayerViewModel/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs deleted file mode 100644 index e69de29..0000000 diff --git a/MediaPlayerWindow/MediaPlayerWindow.sln b/MediaPlayerWindow/MediaPlayerWindow.sln index 9d0d6bd..51bb049 100644 --- a/MediaPlayerWindow/MediaPlayerWindow.sln +++ b/MediaPlayerWindow/MediaPlayerWindow.sln @@ -1,34 +1,34 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaPlayerWindow", "MediaPlayerWindow\MediaPlayerWindow.csproj", "{167A3561-E07A-478F-84B8-797D5591FBA3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaPlayerViewModel", "MediaPlayerViewModel\MediaPlayerViewModel.csproj", "{053F1A7F-1686-4D42-BEFD-E54722E1D572}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaPlayerModels", "MediaPlayerModels\MediaPlayerModels.csproj", "{968C2CCC-C711-46BE-85A3-9A3369EFF1C0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {167A3561-E07A-478F-84B8-797D5591FBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {167A3561-E07A-478F-84B8-797D5591FBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {167A3561-E07A-478F-84B8-797D5591FBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {167A3561-E07A-478F-84B8-797D5591FBA3}.Release|Any CPU.Build.0 = Release|Any CPU - {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Debug|Any CPU.Build.0 = Debug|Any CPU - {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Release|Any CPU.ActiveCfg = Release|Any CPU - {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Release|Any CPU.Build.0 = Release|Any CPU - {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaPlayerWindow", "MediaPlayerWindow\MediaPlayerWindow.csproj", "{167A3561-E07A-478F-84B8-797D5591FBA3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaPlayerViewModel", "MediaPlayerViewModel\MediaPlayerViewModel.csproj", "{053F1A7F-1686-4D42-BEFD-E54722E1D572}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediaPlayerModels", "MediaPlayerModels\MediaPlayerModels.csproj", "{968C2CCC-C711-46BE-85A3-9A3369EFF1C0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {167A3561-E07A-478F-84B8-797D5591FBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {167A3561-E07A-478F-84B8-797D5591FBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {167A3561-E07A-478F-84B8-797D5591FBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {167A3561-E07A-478F-84B8-797D5591FBA3}.Release|Any CPU.Build.0 = Release|Any CPU + {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Debug|Any CPU.Build.0 = Debug|Any CPU + {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Release|Any CPU.ActiveCfg = Release|Any CPU + {053F1A7F-1686-4D42-BEFD-E54722E1D572}.Release|Any CPU.Build.0 = Release|Any CPU + {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {968C2CCC-C711-46BE-85A3-9A3369EFF1C0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MediaPlayerWindow/MediaPlayerWindow.v12.suo b/MediaPlayerWindow/MediaPlayerWindow.v12.suo deleted file mode 100644 index 6577cd3c373755cdabf5e09884350bee13359992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126464 zcmeHw33wdUm2S0cwR;o49SoTVIT|1d&wiqybv-0CVAgv8N!kb3CWiQnD8bcnPJH?NnU{W|5bI> zRn=A9)!M9*>gqdPrK($ZIrrXk&pr2?bDw&0&2xYMxl^8(OyN>#ne@h+Rgz!#yh3*` zRZG$e{J#wF#+z@x$yYwW*#P|O1(#r8rYqRvQc7vExF3;5@hq#wwYqGSDtt|Nu^Qkse`2^&OKbqSW~BqtcI1{t zUc2xs11I8nvAmhY2IPMxuA&XJWQ$&iVUhpIxPM)Ij4Q|TdOSM;pnE)Zdz|+C99&NW zGys0AJtIyTaUHJT2Al;r5pX(y>7Ie>a=7NL0_i{%U=@JloHT>upX2j*Tsi(3m*ZcISJFW-{`t=7_-EW2Ej`}rgBbs7@!lK% zdd%eSr#t?cLWK`}9AG(M1wh{i@;OZZ?i8eXDqy{q_UX8u0jL3-sXd#1>fV<#!2sJ@ z59H}N7q0|xyo>SAam~5;SO94Nzu|n(d71a*7dSpS-Z}m`SDyqRUEzFxDuDEaG=uyA zd4U?hnE>($oWC~!$U~C1I2XWlNmqE~xaT}y2M7Qz1Ox%(BS@PX0p!EVo&TA(0M7rs z@5Xg2U>l$Za2eooz;-|{;0nMFKp#MS`wrX>0CoX(1NH#+0`>vk4!8;s0bC8>H-p+W zitCVeAIDV&3~T?3wD;rx1AwIVJcVl-Fb=p@duAU0;#>U{*-iy9|92v#G*TY}ADY3n zA6x|aV3xy4SP%XaLs*$3n7ET~DiCR-7E$oIg8%IY_mxITa^S}&@XLA?3*djJ_(Z4q zv%Kuv4Bb)(c)lR|PL~uyZ>mF23gX(0yL$YE@&6!NT3w|SV&|f1;Y$NJkaQ#_HB8*Tff6~fgf%$VTc?*DLC>B?|dlznA)BYJit;a#%DRZI3hcXx$ zxQO953^<56AgHW5#Mj2_`N*HNw4C~r&Wcn@)t~%Lu`r$aZwv{N*Jmh|KY6QSf%qq% zS5Ez7i2sI`XsP@u$0-(A{|$&xPX5m${&5cL-&QPhykq^zqjEjWGL(p}yw2cvqr?2! z`-+8gkU#nAa_av%#D7Igv=cl<41C{+!r@Gy=f}b4rtvh6{?C~pS}c3;>J`cwfolV& z_2*c9zm{r0@=7W+NR_;X@V_dD=JOpGn?fdQT;{|U}c1{QMQ;4>%- zX@HPNXB5s@ltJX0zXpMSfqSR*cRK#VphxU0#RB^u^W}QUY5pHV+?MKms(Td59|z_S zVQqC7Ej|X^KXCH1!8MQFv*MMLulrO-ZSA)hpE>A*Bt7K|LB1N9l3QnS->A^c2JqCa zfEN5l(3{f0@B~sObtPXP0c|C{oj`s`sYb#21mdwD)L>0VF1!)3j4j0PdXWa>Me#0) z-%0$R!HSD>m|6>GaXRqzkW!|suHMHzByTu9diW!s*mhIIA06qls<#|ZMEjD_NjdXV z7uUZRxZ_+XTJ+txe-GfjfcF7z1#q0+2KWoW2LN{hM11}Aukie@0e=Iy3-Cbz`}yDE zdN<%>0DXMB`;Q~uCjg%WJOKD#0K2$MpS0}rfG+^P2>1uU{|0;s@Hl|qK8)*E0RISh zM0@rqu8#r!3Gg+*Hvv}pu-pF&;5z{3_cX3g0G#iMHEs`^gFSgg^4b`>no=r*Eln6aCl?8Y6>B_JT&m zahJ5EMjTsa+!lVV;`qVTXP(%QuD;{ZUmldJuDbQpR+tJ~&`+kvKIY>G2sd8#?uW~z zpM#?ngNcg4{S||hFo{sPa%F`UmVNTdgD?7@UUU0brF*~imUCY6kt01ri|A{>O%1>t zYqb`k(WivMN<7YpRS^|Yo~T=CB1{}&GbKRy0Ow4@|CrQZu<{1j4PJ5I42 z`n})(o6mmd@K2s^TeUNG<8cou3pOz(J_Aa42NoOK)?)7+*Qc>qTXklB4*kAE{&BAG zC+P2V_-Eos1i^Wm`G;@*%`^9XVpa6F>E3UDab4d*vONZR@xcYFVP;V8F%Df;gQ`5$>|^5GnF>|dn<*F3Ljkrsjc&qr=-Bfx3>_42=vvVzWn za}cyqNMOV|T|<=3h4Vkin!*t}&7bQNk=!nDC`oW9ls9ozZ(i+-cy`ybron%dlYc3F zM9RNdZxQUusei7|e;c^9xKj5NB=1RJqZ`;rDo@DIl?pShzf<|eT+Kf-k>6O&(dPN* zKZ9?6^t9W*^1|D5Pi?<8{peoeQ?!-1*0(n{$-%bvtFNy7ov(i~o0G=^p>#4S$8w2u zDjV1;r{qi`7PwrV+#O9$$bHd7=9-49u3}X48ZV#!y{-EyYFB^sQ!hV1`QvZj(K=z3 zbHerf)3=ZE{56yQqw4nEG8qIH?BYbT<~ zL~b&a9vhEl8{fFuBmF-Y!12VqO9egs^XUK4rT;>9WNfoni;=-_LZOS%%p`~)zazcWx^vA~ zHkQsL6GOE%yX8z4sh3~1wnm#{%`H>p zxK^RCrV+L+njOtWhmvxwlGoJw#X(+)7%2Ea`hc9eWJu&C>V5Tc+^y8gTq(wDC3EXf zTqhr^r~O%2y)3J|Q^ApW{lf8Owg0hD=TGuC8lzU>|R>MQwFlKyb>7VWO)h`8Hw;}+!|eulSHuft^}z|Zlp zwtpOq&+deLDA1QljA61Ehz|KLz?*ftH*#jF%il?D)Sh}|;CqMex!|SGb?&+S_4EEb zoB^r|`b#=9mNm|-ch7MD;%4M>3xGVCe*c&M&m?gFmwE==|D9=CrONSn!h0)Dd}d*KHO1?)c}6Z@YhE@bcbM zl_}HQzDHYrTi*J&u>QL-zjKF>Jk=0>4`Uu@pCB(p9mrAv@+aS05lP^sRD8Z41(4ll z*bCk-iIz~c&{W>1wAPpUEq}>>ae^u*|9-^(Fqu{a>UeSwY((R__MjxRJs8FFtQw{0 zZ_PC1e2^$`>2=ui00*cE~_}%|5JZn5pBp>c*DaUpQ_>?SnmM{^?iUo9<+l zML!YOCtO9pjQp>VU&T;!TF=v7ee;Kp^!XwWJo1ijcAWc_)))T8s?OCX;3@k*7`jsX zKlO?gHB+$;)Ia5hCvCi(_P@Ij_s`bJP3x&>OQ-oyE0ZE0xjBFH`fE!yDHAEG|84j= zX-6tK8BS!!q3qZj&BaC`vmBTlm$Uv2c)K4aRgGm(k|tKmd6nI0KPkNeL?I_twx)0^IODv?WP zu85Aw{&NsxT|taJiFj_*PeJTk3*K#$6CF;R}Iy<%hsV`xHG@bp|1j@=a5<}_wx2h3sep!FoBa1n} zCYs?f=RU607((DcRT->m^-38W`JOc9a&qE1{80)>p3y4QB7c&Da`GqdeYeK{e*AcK z2jES`Am?)AUca=sWMm{d)lK1-uV%E8zVAPyfF>{r?TXnZT*} zN?j#B`x&m!0iFj?{_|^qIj+_Jl=E0U=QGlja`pd({MXa}n-Bf%LJrei{IhZWS)6{U zymKl2PxjlH*n4^UpTd4_di{4c_3ob#y^7pFHe4K9RHNWjVW?Ea&45TQ+7x0Zbab+Wo>8c2mkPB%i3S{#W${8 zUlIJwix09a`Z7B$x4sVI{&9!=-@@2`FyoKdr`|=qhN;KfN1y9G`;T3>ynNEF_dosh z1En!F8~S5c{GU5txaXJu_2+-P`3>L5O&_Lou%LY+cxGjHYnC6mP5*`K7k#Vb^#{^t zB)<5STi^Nn1E1{w>ZLueZnMUUQ~T$I*#9W`GM7t_i$08R>I4bvcdPvn+P|L$)U43@ z46#%yd>IkWp|$`*vHXQERI$2LzcBv7{@=%>xZ-q5N4W1PQn8+YR9X52R-k!pB=Lpu ziuJc)tQg-~|403ZyNNJ_9oT)^kC8?H3+m1WcRExH`Q0UC@BE(oZ&YeI8Q`@3lmhMs zFgV+P()SAWJMr6u`crDK65urdPQk?Cbqq-Mzj5;{R8tA!8W4q#qqd5sI@=yWiA=i zk8+=GMZUtlM^Q3WGHLD`B01{6G4HeRfLHOn*j3;E&G@(8e=Obp)IoEa|0RffG~54T zai1_PcWCAASFyjrpJbnd*~H`~TU9do<^N&XsoaKj{(meoFaWLJ~^g{>OUU z9Sd+;|LurtNB=qhaW%2e+%NipzVK{=f8aZlUUhOBPxm5_F+2v zPx}66&Yx?nF@+16G^|UkcyE@9`#-F|2=*n-zqu5*1KPjl{HN3Y%)6ZSzY=*L&Gzp? z{)?&o8&RKf=uZgoMf)4MO!fx#+zamNWe~4afc~4W29fCZi2VSUl0o19i_L%Ri}b-; zEO7i&tNcQM)BNeM*!li*bFu8{|4tcyETz-@Uqjr0y6uYfpS}D~tv_4WK8XC8H-ml5 z{F{@Rx0ZibZ}$M(E AUFa2gJCj2S6*>S4W3VU`Glu&w*e<` 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 - - - - - + + + + + + diff --git a/MediaPlayerWindow/MediaPlayerWindow/Albums.xaml.cs b/MediaPlayerWindow/MediaPlayerWindow/Albums.xaml.cs index 4f0c5b1..8b376cf 100644 --- a/MediaPlayerWindow/MediaPlayerWindow/Albums.xaml.cs +++ b/MediaPlayerWindow/MediaPlayerWindow/Albums.xaml.cs @@ -1,27 +1,27 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using System.Windows.Shapes; - -namespace MediaPlayerWindow -{ - /// - /// Interaction logic for Albums.xaml - /// - public partial class Albums : Window - { - public Albums() - { - InitializeComponent(); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace MediaPlayerWindow +{ + /// + /// Interaction logic for Albums.xaml + /// + public partial class Albums : Window + { + public Albums() + { + InitializeComponent(); + } + } +} diff --git a/MediaPlayerWindow/MediaPlayerWindow/App.config b/MediaPlayerWindow/MediaPlayerWindow/App.config index fad249e..8e15646 100644 --- a/MediaPlayerWindow/MediaPlayerWindow/App.config +++ b/MediaPlayerWindow/MediaPlayerWindow/App.config @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/MediaPlayerWindow/MediaPlayerWindow/App.xaml b/MediaPlayerWindow/MediaPlayerWindow/App.xaml index bfb8fe8..523eead 100644 --- a/MediaPlayerWindow/MediaPlayerWindow/App.xaml +++ b/MediaPlayerWindow/MediaPlayerWindow/App.xaml @@ -1,12 +1,13 @@ - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +